xemu/subprojects/glslang/Test/spv.qcom.tileShading.1.frag

45 lines
1.5 KiB
GLSL

#version 460
#extension GL_QCOM_tile_shading : enable
precision highp int;
precision highp float;
layout (non_coherent_attachment_readQCOM) in;
layout (set=0, binding=0, tile_attachmentQCOM, rgba32f) uniform highp image2D input0;
layout (set=0, binding=1, tile_attachmentQCOM, rgba32f) uniform highp image2D color0;
layout (set=0, binding=2, tile_attachmentQCOM, rgba32i) uniform highp iimage2D color1;
// 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;
layout (location=0) out vec4 fragColor;
void main()
{
// integer coordinates of the center of tile.
uvec2 o2 = uvec2(8, 4);
o2 = o2 / uvec2(2);
ivec2 offset = ivec2(gl_TileOffsetQCOM + (gl_TileDimensionQCOM/uvec3(2)).xy);
// read from attachments
vec4 colorA = imageLoad( color0, offset );
ivec4 icolorB = imageLoad( color1, offset );
vec4 colorB = vec4(icolorB);
vec4 colorC = imageLoad( input0, offset );
float d = imageLoad( depth, offset ).x;
uint s = imageLoad( stencil, offset ).x;
// compute output value
vec4 outColor = ( colorB + colorB + colorC + d + s );
// write to attachments
imageStore( color0, offset, outColor );
imageStore( depth, offset, vec4(outColor) );
imageStore( stencil, offset, uvec4(outColor) );
// write to color attachment 0 via fragment output
fragColor = outColor + vec4(1.0, 0.0, 0.0, 1.0);
}