ColorDrawToMsFragmentShaderSource.frag
1 #version 450 core 2 3 layout (std140, binding = 0) uniform sample_counts_log2_in 4 { 5 ivec4 sample_counts_log2; 6 }; 7 8 layout (set = 2, binding = 0) uniform usampler2D src; 9 10 layout (location = 0) out uvec4 colour; 11 12 void main() 13 { 14 int deltaX = sample_counts_log2.x - sample_counts_log2.z; 15 int deltaY = sample_counts_log2.y - sample_counts_log2.w; 16 int samplesInXLog2 = sample_counts_log2.z; 17 int samplesInYLog2 = sample_counts_log2.w; 18 int samplesInX = 1 << samplesInXLog2; 19 int samplesInY = 1 << samplesInYLog2; 20 21 int sampleIndex = gl_SampleID; 22 23 int inX = (int(gl_FragCoord.x) << sample_counts_log2.x) | ((sampleIndex & (samplesInX - 1)) << deltaX); 24 int inY = (int(gl_FragCoord.y) << sample_counts_log2.y) | ((sampleIndex >> samplesInXLog2) << deltaY); 25 26 colour = texelFetch(src, ivec2(inX, inY), 0); 27 }