Home | History | Annotate | Download | only in Test
      1 #version 450
      2 
      3 #define BARRIER() \
      4     memoryBarrierShared(); \
      5     barrier();
      6 
      7 #extension GL_NV_mesh_shader : enable
      8 
      9 layout(local_size_x = 32) in;
     10 
     11 // test use of shared memory in task shaders:
     12 layout(binding=0) writeonly uniform image2D uni_image;
     13 uniform block0 {
     14     uint uni_value;
     15 };
     16 shared vec4 mem[10];
     17 
     18 // test use of task memory in task shaders:
     19 taskNV out Task {
     20     vec2 dummy;
     21     vec2 submesh[3];
     22 } mytask;
     23 
     24 void main()
     25 {
     26     uint iid = gl_LocalInvocationID.x;
     27     uint gid = gl_WorkGroupID.x;
     28 
     29     // 1. shared memory load and stores
     30     for (uint i = 0; i < 10; ++i) {
     31         mem[i] = vec4(i + uni_value);
     32     }
     33     imageStore(uni_image, ivec2(iid), mem[gid]);
     34     imageStore(uni_image, ivec2(iid), mem[gid+1]);
     35 
     36     BARRIER();
     37 
     38     // 2. task memory stores
     39 
     40     mytask.dummy      = vec2(30.0, 31.0);
     41     mytask.submesh[0] = vec2(32.0, 33.0);
     42     mytask.submesh[1] = vec2(34.0, 35.0);
     43     mytask.submesh[2] = mytask.submesh[gid%2];
     44 
     45     BARRIER();
     46 
     47     // 3. set task count
     48     gl_TaskCountNV = 3;
     49 }
     50