spv.nonuniform.frag 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #version 450
  2. #extension GL_EXT_nonuniform_qualifier : enable
  3. layout(location=0) nonuniformEXT in vec4 nu_inv4;
  4. nonuniformEXT float nu_gf;
  5. layout(location=1) in nonuniformEXT flat int nu_ii;
  6. layout(binding=0, input_attachment_index = 0) uniform subpassInput inputAttachmentDyn[];
  7. layout(binding=1) uniform samplerBuffer uniformTexelBufferDyn[];
  8. layout(binding=2, r32f) uniform imageBuffer storageTexelBufferDyn[];
  9. layout(binding=3) uniform uname { float a; } uniformBuffer[];
  10. layout(binding=4) buffer bname { float b; } storageBuffer[];
  11. layout(binding=5) uniform sampler2D sampledImage[];
  12. layout(binding=6, r32f) uniform image2D storageImage[];
  13. layout(binding=7, input_attachment_index = 1) uniform subpassInput inputAttachment[];
  14. layout(binding=8) uniform samplerBuffer uniformTexelBuffer[];
  15. layout(binding=9, r32f) uniform imageBuffer storageTexelBuffer[];
  16. nonuniformEXT int foo(nonuniformEXT int nupi, nonuniformEXT out int f)
  17. {
  18. return nupi;
  19. }
  20. void main()
  21. {
  22. nonuniformEXT int nu_li;
  23. int dyn_i;
  24. int a = foo(nu_li, nu_li);
  25. nu_li = nonuniformEXT(a) + nonuniformEXT(a * 2);
  26. float b;
  27. b = nu_inv4.x * nu_gf;
  28. b += subpassLoad(inputAttachmentDyn[dyn_i]).x;
  29. b += texelFetch(uniformTexelBufferDyn[dyn_i], 1).x;
  30. b += imageLoad(storageTexelBufferDyn[dyn_i], 1).x;
  31. b += uniformBuffer[nu_ii].a;
  32. b += storageBuffer[nu_ii].b;
  33. b += texture(sampledImage[nu_ii], vec2(0.5)).x;
  34. b += imageLoad(storageImage[nu_ii], ivec2(1)).x;
  35. b += subpassLoad(inputAttachment[nu_ii]).x;
  36. b += texelFetch(uniformTexelBuffer[nu_ii], 1).x;
  37. b += imageLoad(storageTexelBuffer[nu_ii], 1).x;
  38. nonuniformEXT ivec4 v;
  39. nonuniformEXT mat4 m;
  40. nonuniformEXT struct S { int a; } s;
  41. ivec4 uv;
  42. b += uniformBuffer[v.y].a;
  43. b += uniformBuffer[v[2]].a;
  44. b += uniformBuffer[uv[nu_ii]].a;
  45. b += uniformBuffer[int(m[2].z)].a;
  46. b += uniformBuffer[s.a].a;
  47. }