Fixing some shader stuff

This commit is contained in:
Dynamitos
2024-04-17 14:33:06 +02:00
parent d67c8ebffe
commit a72e92ee37
17 changed files with 292 additions and 225 deletions
+3 -3
View File
@@ -26,10 +26,10 @@ float4 fragmentMain(in FragmentParameter params) : SV_Target
{
result += pLightEnv.directionalLights[i].illuminate(lightingParams, brdf);
}
for(uint i = 0; i < lightCount; ++i)
for(uint i = 0; i < pLightEnv.numPointLights; ++i)
{
uint lightIndex = pLightCullingData.lightIndexList[startOffset + i];
result += pLightEnv.pointLights[lightIndex].illuminate(lightingParams, brdf);
//uint lightIndex = pLightCullingData.lightIndexList[startOffset + i];
result += pLightEnv.pointLights[i].illuminate(lightingParams, brdf);
}
return float4(params.vertexColor, 1.0f);
}
+2 -2
View File
@@ -2,8 +2,8 @@ import Common;
struct DebugVertex
{
float3 position;
float3 color;
float3 position : POSITION;
float3 color : COLOR0;
};
struct Params
+9 -3
View File
@@ -65,6 +65,12 @@ struct PrimitiveAttributes
uint cull: SV_CullPrimitive;
};
uint unpackPrimitiveIndices(uint index)
{
uint32_t packed = pScene.primitiveIndices[index / 4];
return (packed >> (index % 4)) & 0xff;
}
[numthreads(MESH_GROUP_SIZE, 1, 1)]
[outputtopology("triangle")]
[shader("mesh")]
@@ -84,9 +90,9 @@ void meshMain(
{
uint p = min(i, m.primitiveCount - 1);
{
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];
uint local_idx0 = unpackPrimitiveIndices(m.primitiveOffset + (p * 3) + 0);
uint local_idx1 = unpackPrimitiveIndices(m.primitiveOffset + (p * 3) + 1);
uint local_idx2 = unpackPrimitiveIndices(m.primitiveOffset + (p * 3) + 2);
indices[p] = uint3(local_idx0, local_idx1, local_idx2);
}
}
+8 -7
View File
@@ -14,12 +14,12 @@ struct MeshletDescription
struct MeshData
{
BoundingSphere bounding;
uint32_t numMeshlets;
uint32_t meshletOffset;
uint32_t firstIndex;
uint32_t numIndices;
uint32_t indicesOffset;
uint32_t pad0[3];
uint32_t numMeshlets;
uint32_t meshletOffset;
uint32_t firstIndex;
uint32_t numIndices;
uint32_t indicesOffset;
uint32_t pad0[3];
};
static const uint MAX_VERTICES = 64;
@@ -38,7 +38,8 @@ struct Scene
StructuredBuffer<InstanceData> instances;
StructuredBuffer<MeshData> meshData;
StructuredBuffer<MeshletDescription> meshletInfos;
StructuredBuffer<uint8_t> primitiveIndices;
// uint8_t is not valid in DXIL
StructuredBuffer<uint32_t> primitiveIndices;
StructuredBuffer<uint32_t> vertexIndices;
};