1#version 450 2#extension GL_EXT_nonuniform_qualifier : require 3#extension GL_EXT_samplerless_texture_functions : require 4 5layout(binding = 0) uniform texture2D uSamplers[]; 6layout(binding = 0) uniform texture2DMS uSamplersMS[]; 7layout(binding = 4) uniform sampler2D uCombinedSamplers[]; 8layout(binding = 1) uniform sampler uSamps[]; 9layout(location = 0) flat in int vIndex; 10layout(location = 1) in vec2 vUV; 11layout(location = 0) out vec4 FragColor; 12 13layout(r32f, binding = 5) uniform image2D uImages[]; 14layout(r32ui, binding = 5) uniform uimage2D uImagesU32[]; 15 16layout(set = 0, binding = 2) uniform UBO 17{ 18 vec4 v[64]; 19} ubos[]; 20 21layout(set = 0, binding = 3) buffer SSBO 22{ 23 uint counter; 24 vec4 v[]; 25} ssbos[]; 26 27void main() 28{ 29 int i = vIndex; 30 FragColor = texture(nonuniformEXT(sampler2D(uSamplers[i + 10], uSamps[i + 40])), vUV); 31 FragColor = texture(uCombinedSamplers[nonuniformEXT(i + 10)], vUV); 32 FragColor += ubos[nonuniformEXT(i + 20)].v[nonuniformEXT(i + 40)]; 33 FragColor += ssbos[nonuniformEXT(i + 50)].v[nonuniformEXT(i + 60)]; 34 ssbos[nonuniformEXT(i + 60)].v[nonuniformEXT(i + 70)] = vec4(20.0); 35 36 FragColor = texelFetch(uSamplers[nonuniformEXT(i + 10)], ivec2(vUV), 0); 37 atomicAdd(ssbos[nonuniformEXT(i + 100)].counter, 100u); 38 39 vec2 queried = textureQueryLod(nonuniformEXT(sampler2D(uSamplers[i + 10], uSamps[i + 40])), vUV); 40 queried += textureQueryLod(uCombinedSamplers[nonuniformEXT(i + 10)], vUV); 41 FragColor.xy += queried; 42 43 FragColor.x += float(textureQueryLevels(uSamplers[nonuniformEXT(i + 20)])); 44 FragColor.y += float(textureSamples(uSamplersMS[nonuniformEXT(i + 20)])); 45 FragColor.xy += vec2(textureSize(uSamplers[nonuniformEXT(i + 20)], 0)); 46 47 FragColor += imageLoad(uImages[nonuniformEXT(i + 50)], ivec2(vUV)); 48 FragColor.xy += vec2(imageSize(uImages[nonuniformEXT(i + 20)])); 49 imageStore(uImages[nonuniformEXT(i + 60)], ivec2(vUV), vec4(50.0)); 50 51 imageAtomicAdd(uImagesU32[nonuniformEXT(i + 70)], ivec2(vUV), 40u); 52} 53