31 lines
867 B
Plaintext
31 lines
867 B
Plaintext
|
#version 450 core
|
||
|
|
||
|
layout (std140, binding = 0) uniform ratio_in
|
||
|
{
|
||
|
int ratio;
|
||
|
};
|
||
|
|
||
|
layout (set = 2, binding = 0) uniform usampler2D src;
|
||
|
layout (set = 3, binding = 0) writeonly uniform uimage2D dst;
|
||
|
|
||
|
layout (local_size_x = 32, local_size_y = 32, local_size_z = 1) in;
|
||
|
|
||
|
void main()
|
||
|
{
|
||
|
uvec2 coords = gl_GlobalInvocationID.xy;
|
||
|
ivec2 imageSz = imageSize(dst);
|
||
|
|
||
|
if (int(coords.x) >= imageSz.x || int(coords.y) >= imageSz.y)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
uvec2 srcCoords = uvec2(coords.x << ratio, coords.y);
|
||
|
|
||
|
uint r = texelFetchOffset(src, ivec2(srcCoords), 0, ivec2(0, 0)).r;
|
||
|
uint g = texelFetchOffset(src, ivec2(srcCoords), 0, ivec2(1, 0)).r;
|
||
|
uint b = texelFetchOffset(src, ivec2(srcCoords), 0, ivec2(2, 0)).r;
|
||
|
uint a = texelFetchOffset(src, ivec2(srcCoords), 0, ivec2(3, 0)).r;
|
||
|
|
||
|
imageStore(dst, ivec2(coords), uvec4(r, g, b, a));
|
||
|
}
|