23 lines
850 B
Plaintext
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);
|
|
}
|
|
}
|