Files
2026-07-13 13:33:03 +08:00

23 lines
850 B
Plaintext

#version 440 core
layout(set=0, binding=0) writeonly uniform image2D uOutput;
layout(set=0, binding=1) uniform sampler2D uStart;
layout(set=0, binding=2) uniform sampler2D uDelta;
layout(set=0, binding=3) uniform constBuffer {
ivec4 size; // size.x = block pixel offset, size.w = block pixel count (limit)
} uConst;
layout(local_size_x = 256, local_size_y = 1, local_size_z = 1) in;
void main() {
int gx = int(gl_GlobalInvocationID.x);
if (gx < uConst.size.w) {
float start = texelFetch(uStart, ivec2(0, 0), 0).x;
float delta = texelFetch(uDelta, ivec2(0, 0), 0).x;
float base = float((uConst.size.x + gx) * 4);
vec4 startVec = vec4(start + base * delta);
vec4 deltaVec = vec4(delta) * vec4(0.0, 1.0, 2.0, 3.0);
imageStore(uOutput, ivec2(gx, 0), startVec + deltaVec);
}
}