Files
Seele/res/shaders/MeshletPass.slang
T

51 lines
1.5 KiB
Plaintext
Raw Normal View History

2023-10-24 15:01:09 +02:00
import Common;
2023-11-26 09:40:48 +01:00
import Scene;
2023-11-05 10:36:01 +01:00
import VertexData;
2023-11-22 13:18:54 +01:00
import MaterialParameter;
2023-10-24 15:01:09 +02:00
struct PrimitiveAttributes
{
uint cull: SV_CullPrimitive;
};
[numthreads(MESH_GROUP_SIZE, 1, 1)]
[outputtopology("triangle")]
[shader("mesh")]
void meshMain(
in uint threadID: SV_GroupIndex,
in uint groupID: SV_GroupID,
2023-12-11 14:45:37 +01:00
in payload MeshPayload meshPayload,
2024-04-23 17:08:39 +02:00
out vertices FragmentParameter vertices[MAX_VERTICES],
out indices uint3 indices[MAX_PRIMITIVES]
2023-10-24 15:01:09 +02:00
){
2024-05-22 10:30:45 +02:00
InstanceData inst = meshPayload.instanceData;
MeshData data = meshPayload.meshData;
MeshletDescription m = pScene.meshletInfos[data.meshletOffset + groupID];
2023-11-27 21:08:27 +01:00
SetMeshOutputCounts(m.vertexCount, m.primitiveCount);
2024-04-04 08:30:59 +02:00
for(uint i = threadID; i < MAX_PRIMITIVES; i += MESH_GROUP_SIZE)
2023-11-27 21:08:27 +01:00
{
2024-04-04 08:30:59 +02:00
uint p = min(i, m.primitiveCount - 1);
{
2024-04-20 21:35:43 +02:00
uint local_idx0 = pScene.primitiveIndices[m.primitiveOffset + (p * 3) + 0];
uint local_idx1 = pScene.primitiveIndices[m.primitiveOffset + (p * 3) + 1];
uint local_idx2 = pScene.primitiveIndices[m.primitiveOffset + (p * 3) + 2];
2024-04-04 08:30:59 +02:00
indices[p] = uint3(local_idx0, local_idx1, local_idx2);
}
2023-11-27 21:08:27 +01:00
}
2024-05-22 10:30:45 +02:00
for(uint i = threadID; i < MAX_VERTICES; i += MESH_GROUP_SIZE)
2023-10-24 15:01:09 +02:00
{
2023-11-26 12:47:48 +01:00
uint v = min(i, m.vertexCount - 1);
2023-10-24 15:01:09 +02:00
{
2023-12-11 13:04:58 +01:00
uint vertexIndex = pScene.vertexIndices[m.vertexOffset + v];
2024-05-16 19:47:35 +02:00
#ifdef POS_ONLY
VertexAttributes attr = pVertexData.getPosition(m.indicesOffset + vertexIndex);
#else
2024-05-09 08:41:46 +02:00
VertexAttributes attr = pVertexData.getAttributes(m.indicesOffset + vertexIndex);
2024-05-16 19:47:35 +02:00
#endif
2024-05-09 08:41:46 +02:00
attr.meshletId = -1;
2023-12-15 11:57:13 +01:00
vertices[v] = attr.getParameter(inst.transformMatrix);
2023-10-24 15:01:09 +02:00
}
}
}