1617a3babSopenharmony_ci#version 460 2617a3babSopenharmony_ci 3617a3babSopenharmony_ci#define MAX_VER 81 4617a3babSopenharmony_ci#define MAX_PRIM 32 5617a3babSopenharmony_ci 6617a3babSopenharmony_ci#define BARRIER() \ 7617a3babSopenharmony_ci memoryBarrierShared(); \ 8617a3babSopenharmony_ci barrier(); 9617a3babSopenharmony_ci 10617a3babSopenharmony_ci#extension GL_NV_mesh_shader : enable 11617a3babSopenharmony_ci 12617a3babSopenharmony_cilayout(local_size_x = 32) in; 13617a3babSopenharmony_ci 14617a3babSopenharmony_cilayout(max_vertices=MAX_VER) out; 15617a3babSopenharmony_cilayout(max_primitives=MAX_PRIM) out; 16617a3babSopenharmony_cilayout(triangles) out; 17617a3babSopenharmony_ci 18617a3babSopenharmony_ci// test use of builtins in mesh shaders: 19617a3babSopenharmony_ci 20617a3babSopenharmony_civoid main() 21617a3babSopenharmony_ci{ 22617a3babSopenharmony_ci uint iid = gl_LocalInvocationID.x; 23617a3babSopenharmony_ci uint gid = gl_WorkGroupID.x; 24617a3babSopenharmony_ci 25617a3babSopenharmony_ci gl_MeshVerticesNV[iid].gl_Position = vec4(1.0); 26617a3babSopenharmony_ci gl_MeshVerticesNV[iid].gl_PointSize = 2.0; 27617a3babSopenharmony_ci gl_MeshVerticesNV[iid].gl_ClipDistance[3] = 3.0; 28617a3babSopenharmony_ci gl_MeshVerticesNV[iid].gl_CullDistance[2] = 4.0; 29617a3babSopenharmony_ci 30617a3babSopenharmony_ci BARRIER(); 31617a3babSopenharmony_ci 32617a3babSopenharmony_ci gl_MeshVerticesNV[iid+1].gl_Position = gl_MeshVerticesNV[iid].gl_Position; 33617a3babSopenharmony_ci gl_MeshVerticesNV[iid+1].gl_PointSize = gl_MeshVerticesNV[iid].gl_PointSize; 34617a3babSopenharmony_ci gl_MeshVerticesNV[iid+1].gl_ClipDistance[3] = gl_MeshVerticesNV[iid].gl_ClipDistance[3]; 35617a3babSopenharmony_ci gl_MeshVerticesNV[iid+1].gl_CullDistance[2] = gl_MeshVerticesNV[iid].gl_CullDistance[2]; 36617a3babSopenharmony_ci 37617a3babSopenharmony_ci BARRIER(); 38617a3babSopenharmony_ci 39617a3babSopenharmony_ci gl_MeshPrimitivesNV[iid].gl_PrimitiveID = 6; 40617a3babSopenharmony_ci gl_MeshPrimitivesNV[iid].gl_Layer = 7; 41617a3babSopenharmony_ci gl_MeshPrimitivesNV[iid].gl_ViewportIndex = 8; 42617a3babSopenharmony_ci gl_MeshPrimitivesNV[iid].gl_ViewportMask[0] = 9; 43617a3babSopenharmony_ci 44617a3babSopenharmony_ci BARRIER(); 45617a3babSopenharmony_ci 46617a3babSopenharmony_ci gl_MeshPrimitivesNV[iid+1].gl_PrimitiveID = gl_MeshPrimitivesNV[iid].gl_PrimitiveID; 47617a3babSopenharmony_ci gl_MeshPrimitivesNV[iid+1].gl_Layer = gl_MeshPrimitivesNV[iid].gl_Layer; 48617a3babSopenharmony_ci gl_MeshPrimitivesNV[iid+1].gl_ViewportIndex = gl_MeshPrimitivesNV[iid].gl_ViewportIndex; 49617a3babSopenharmony_ci gl_MeshPrimitivesNV[iid+1].gl_ViewportMask[0] = gl_MeshPrimitivesNV[iid].gl_ViewportMask[0]; 50617a3babSopenharmony_ci 51617a3babSopenharmony_ci BARRIER(); 52617a3babSopenharmony_ci 53617a3babSopenharmony_ci // check bound limits 54617a3babSopenharmony_ci gl_PrimitiveIndicesNV[0] = 257; // should truncate 257 -> 1 55617a3babSopenharmony_ci gl_PrimitiveIndicesNV[(MAX_PRIM * 3) - 1] = 2; 56617a3babSopenharmony_ci gl_PrimitiveIndicesNV[gid] = gl_PrimitiveIndicesNV[gid-1]; 57617a3babSopenharmony_ci 58617a3babSopenharmony_ci // writes 4 indices at offset gl_DrawID 59617a3babSopenharmony_ci writePackedPrimitiveIndices4x8NV(gl_DrawID, 0x01020304); 60617a3babSopenharmony_ci 61617a3babSopenharmony_ci gl_PrimitiveCountNV = MAX_PRIM * 3; 62617a3babSopenharmony_ci 63617a3babSopenharmony_ci BARRIER(); 64617a3babSopenharmony_ci} 65