1deee662创建于 2025年8月1日历史提交
#version 320 es

#extension GL_KHR_shader_subgroup_rotate: enable

layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in;

readonly buffer roblock
{
    uint delta;
} ro;

layout(binding = 0) buffer Buffers
{
    vec4  f4;
    ivec4 i4;
    uvec4 u4;
} data[4];

void main()
{
    uint delta = ro.delta;

    data[0].f4.x   = subgroupRotate(data[0].f4.x,    delta);
    data[0].f4.xy  = subgroupRotate(data[1].f4.xy,   delta);
    data[0].f4.xyz = subgroupRotate(data[2].f4.xyz,  delta);
    data[0].f4     = subgroupRotate(data[3].f4,      delta);

    data[0].i4.x   = subgroupRotate(data[0].i4.x,    delta);
    data[0].i4.xy  = subgroupRotate(data[1].i4.xy,   delta);
    data[0].i4.xyz = subgroupRotate(data[2].i4.xyz,  delta);
    data[0].i4     = subgroupRotate(data[3].i4,      delta);

    data[1].u4.x   = subgroupRotate(data[0].u4.x,    delta);
    data[1].u4.xy  = subgroupRotate(data[1].u4.xy,   delta);
    data[1].u4.xyz = subgroupRotate(data[2].u4.xyz,  delta);
    data[1].u4     = subgroupRotate(data[3].u4,      delta);

    data[1].i4.x   =   int(subgroupRotate(data[0].i4.x < 0,                   delta));
    data[1].i4.xy  = ivec2(subgroupRotate(lessThan(data[1].i4.xy, ivec2(0)),  delta));
    data[1].i4.xyz = ivec3(subgroupRotate(lessThan(data[1].i4.xyz, ivec3(0)), delta));
    data[1].i4     = ivec4(subgroupRotate(lessThan(data[1].i4, ivec4(0)),     delta));

    data[2].f4.x   = subgroupClusteredRotate(data[0].f4.x,    delta, 1u);
    data[2].f4.xy  = subgroupClusteredRotate(data[1].f4.xy,   delta, 1u);
    data[2].f4.xyz = subgroupClusteredRotate(data[2].f4.xyz,  delta, 1u);
    data[2].f4     = subgroupClusteredRotate(data[3].f4,      delta, 1u);

    data[2].i4.x   = subgroupClusteredRotate(data[0].i4.x,    delta, 1u);
    data[2].i4.xy  = subgroupClusteredRotate(data[1].i4.xy,   delta, 1u);
    data[2].i4.xyz = subgroupClusteredRotate(data[2].i4.xyz,  delta, 1u);
    data[2].i4     = subgroupClusteredRotate(data[3].i4,      delta, 1u);

    data[3].u4.x   = subgroupClusteredRotate(data[0].u4.x,    delta, 1u);
    data[3].u4.xy  = subgroupClusteredRotate(data[1].u4.xy,   delta, 1u);
    data[3].u4.xyz = subgroupClusteredRotate(data[2].u4.xyz,  delta, 1u);
    data[3].u4     = subgroupClusteredRotate(data[3].u4,      delta, 1u);

    data[3].i4.x   =   int(subgroupClusteredRotate(data[0].i4.x < 0,                   delta, 1u));
    data[3].i4.xy  = ivec2(subgroupClusteredRotate(lessThan(data[1].i4.xy, ivec2(0)),  delta, 1u));
    data[3].i4.xyz = ivec3(subgroupClusteredRotate(lessThan(data[1].i4.xyz, ivec3(0)), delta, 1u));
    data[3].i4     = ivec4(subgroupClusteredRotate(lessThan(data[1].i4, ivec4(0)),     delta, 1u));
}