39 lines
1.6 KiB
Plaintext
39 lines
1.6 KiB
Plaintext
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);
|
||
|
|
}
|