import Common; import MaterialParameter; import VertexData; import StaticMeshVertexData; import Scene; [numthreads(1, 1, 1)] [shader("amplification")] void taskMain(uint threadID: SV_GroupThreadID, uint groupID: SV_GroupID) { DispatchMesh(1, 1, 1, groupID); } [numthreads(1, 1, 1)] [shader("mesh")] void meshMain(in payload uint taskGroupId, out vertices FragmentParameter vertices[MAX_VERTICES], out indices uint3 indices[MAX_PRIMITIVES]) { InstanceData inst = pScene.instances[pOffsets.instanceOffset + taskGroupId]; MeshData mesh = pScene.meshData[pOffsets.instanceOffset + taskGroupId]; MeshletDescription m = pScene.meshletInfos[mesh.meshletRange.offset]; SetMeshOutputCounts(m.vertexIndices.size, m.primitiveIndices.size); for (uint p = 0; p < m.primitiveIndices.size; p++) { uint baseIndex = m.primitiveIndices.offset + (p * 3); uint local_idx0 = pScene.primitiveIndices[baseIndex + 0]; uint local_idx1 = pScene.primitiveIndices[baseIndex + 1]; uint local_idx2 = pScene.primitiveIndices[baseIndex + 2]; indices[p] = uint3(local_idx0, local_idx1, local_idx2); } for (uint v = 0; v < m.vertexIndices.size; v++) { uint vertexIndex = pScene.vertexIndices[m.vertexIndices.offset + v]; VertexAttributes attr = pVertexData.getAttributes(m.indicesOffset + vertexIndex); vertices[v] = attr.getParameter(inst.transformMatrix, inst.inverseTransformMatrix); } } [shader("pixel")] void pixelMain(in FragmentParameter input, out float4 outColor : SV_Target) { outColor = float4(1.0, 0.0, 0.0, 1.0); }