StencilDrawToMsFragmentShaderSource.frag 856 B

123456789101112131415161718192021222324252627
  1. #version 450 core
  2. #extension GL_ARB_shader_stencil_export : require
  3. layout (std140, binding = 0) uniform sample_counts_log2_in
  4. {
  5. ivec4 sample_counts_log2;
  6. };
  7. layout (set = 2, binding = 0) uniform isampler2D src;
  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. gl_FragStencilRefARB = texelFetch(src, ivec2(inX, inY), 0).r;
  20. }