xemu/subprojects/glslang/Test/spv.qcom.tileShading.0.comp

39 lines
1.4 KiB
Plaintext

#version 460
#extension GL_QCOM_tile_shading : enable
layout (local_size_x = 16, local_size_y = 16, local_size_z = 1) in;
layout (set=0, binding=0, tile_attachmentQCOM, rgba32f) uniform highp image2D input0;
// tile color attachments (new syntax)
layout (set=0, binding=1, tile_attachmentQCOM, rgba32f) uniform highp image2D color0; // attachment0
layout (set=0, binding=2, tile_attachmentQCOM, rgba32i) uniform highp iimage2D color1; // attachment1
// depth/stencil attachments
layout (set=0, binding=3, tile_attachmentQCOM, rgba32f) uniform highp image2D depth;
layout (set=0, binding=4, tile_attachmentQCOM, rgba32ui) uniform highp uimage2D stencil;
void main ()
{
uvec2 uoffset = clamp(gl_GlobalInvocationID.xy, gl_TileOffsetQCOM, gl_TileOffsetQCOM + gl_TileDimensionQCOM.xy - uvec2(1.1));
ivec2 offset = ivec2(uoffset);
// read from attachments
vec4 colorA = imageLoad( color0, offset );
ivec4 icolorB = imageLoad( color1, offset );
vec4 colorC = imageLoad( input0, offset );
float d = imageLoad( depth, offset ).x;
uint s = imageLoad( stencil, offset ).x;
// compute output values
vec4 outColor = ( colorA + vec4(icolorB) + colorC ) * 0.33f;
float outDepth = d * 2.0f;
uint outStencil = s + uint(1);
// write to attachments
imageStore( color0, offset, outColor );
imageStore( depth, offset, vec4(outDepth) );
imageStore( stencil, offset, uvec4(outStencil) );
}