spv.meshShaderUserDefined.mesh 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #version 450
  2. #define MAX_VER 81
  3. #define MAX_PRIM 32
  4. #define BARRIER() \
  5. memoryBarrierShared(); \
  6. barrier();
  7. #extension GL_NV_mesh_shader : enable
  8. layout(local_size_x = 32) in;
  9. layout(max_vertices=MAX_VER) out;
  10. layout(max_primitives=MAX_PRIM) out;
  11. layout(triangles) out;
  12. // test use of user defined interface out blocks:
  13. // per-primitive block
  14. perprimitiveNV layout(location=0) out myblock {
  15. float f;
  16. float fArr[4];
  17. vec3 pos;
  18. vec4 posArr[4];
  19. mat4 m;
  20. mat3 mArr[2];
  21. } blk[];
  22. // per-vertex block
  23. layout(location=20) out myblock2 {
  24. float f;
  25. vec4 pos;
  26. mat4 m;
  27. } blk2[];
  28. void main()
  29. {
  30. uint iid = gl_LocalInvocationID.x;
  31. uint gid = gl_WorkGroupID.x;
  32. blk[iid].f = 11.0;
  33. blk[iid+1].fArr[gid] = blk[iid].f;
  34. blk[iid/2].pos.yzx = vec3(14.0, 15.0, 13.0);
  35. blk[iid*2].posArr[1].yzw = blk[iid/2].pos;
  36. blk[iid/4].m[2].wzyx = vec4(13.0, 14.0, 15.0, 16.0);
  37. blk[iid].mArr[0][1][1] = blk[iid/4].m[2].w;
  38. blk[iid*4].mArr[1][gid] = vec3(17.0, 18.0, 19.0);
  39. BARRIER();
  40. blk2[iid].f = blk2[iid-1].f + 20.0;
  41. blk2[iid].pos = vec4(21.0, 22.0, 23.0, 24.0);
  42. blk2[iid+1].m[gid] = blk2[iid].pos;
  43. blk2[iid+1].m[gid][2] = 29.0;
  44. blk2[iid+2].m[3] = blk2[iid+1].m[gid];
  45. BARRIER();
  46. }