ColorDrawToMsFragmentShaderSource.frag 830 B

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