diff --git a/WickedEngine/shaders/ShaderInterop_BVH.h b/WickedEngine/shaders/ShaderInterop_BVH.h index 5620aa276e..60d8e762dc 100644 --- a/WickedEngine/shaders/ShaderInterop_BVH.h +++ b/WickedEngine/shaders/ShaderInterop_BVH.h @@ -40,6 +40,7 @@ struct BVHPrimitive PrimitiveID primitiveID() { PrimitiveID prim; + prim.init(); prim.unpack2(packed_prim); return prim; } diff --git a/WickedEngine/shaders/bvh_primitivesCS.hlsl b/WickedEngine/shaders/bvh_primitivesCS.hlsl index e5b7ee6f4f..d3fb985ac5 100644 --- a/WickedEngine/shaders/bvh_primitivesCS.hlsl +++ b/WickedEngine/shaders/bvh_primitivesCS.hlsl @@ -19,6 +19,7 @@ void main(uint3 DTid : SV_DispatchThreadID, uint groupIndex : SV_GroupIndex) return; PrimitiveID prim; + prim.init(); prim.primitiveIndex = DTid.x; prim.instanceIndex = push.instanceIndex; prim.subsetIndex = push.subsetIndex; diff --git a/WickedEngine/shaders/ddgi_raytraceCS.hlsl b/WickedEngine/shaders/ddgi_raytraceCS.hlsl index 04ae97c144..5a917ce224 100644 --- a/WickedEngine/shaders/ddgi_raytraceCS.hlsl +++ b/WickedEngine/shaders/ddgi_raytraceCS.hlsl @@ -108,6 +108,7 @@ void main(uint3 DTid : SV_DispatchThreadID, uint3 Gid : SV_GroupID, uint groupIn hit_depth = q.CommittedRayT(); PrimitiveID prim; + prim.init(); prim.primitiveIndex = q.CommittedPrimitiveIndex(); prim.instanceIndex = q.CommittedInstanceID(); prim.subsetIndex = q.CommittedGeometryIndex(); diff --git a/WickedEngine/shaders/globals.hlsli b/WickedEngine/shaders/globals.hlsli index acd33f6e9c..8476ebdb56 100644 --- a/WickedEngine/shaders/globals.hlsli +++ b/WickedEngine/shaders/globals.hlsli @@ -593,6 +593,14 @@ struct PrimitiveID uint subsetIndex; bool maybe_clustered; + inline void init() + { + primitiveIndex = 0; + instanceIndex = 0; + subsetIndex = 0; + maybe_clustered = 0; + } + // These packing methods require meshlet data, and pack into 32 bits: inline uint pack() { diff --git a/WickedEngine/shaders/hairparticlePS_prepass.hlsl b/WickedEngine/shaders/hairparticlePS_prepass.hlsl index 5110b58678..becb310ca1 100644 --- a/WickedEngine/shaders/hairparticlePS_prepass.hlsl +++ b/WickedEngine/shaders/hairparticlePS_prepass.hlsl @@ -25,6 +25,7 @@ uint main(VertexToPixel input, out uint coverage : SV_Coverage) : SV_Target coverage = AlphaToCoverage(alpha, material.GetAlphaTest(), input.pos); PrimitiveID prim; + prim.init(); prim.primitiveIndex = input.primitiveID; prim.instanceIndex = xHairInstanceIndex; prim.subsetIndex = 0; diff --git a/WickedEngine/shaders/impostorPS_prepass.hlsl b/WickedEngine/shaders/impostorPS_prepass.hlsl index cca553a74d..1ba7dc2f06 100644 --- a/WickedEngine/shaders/impostorPS_prepass.hlsl +++ b/WickedEngine/shaders/impostorPS_prepass.hlsl @@ -14,6 +14,7 @@ uint main(VSOut input, out uint coverage : SV_Coverage) : SV_Target coverage = AlphaToCoverage(alpha, 0.75, input.pos); PrimitiveID prim; + prim.init(); prim.primitiveIndex = input.primitiveID; prim.instanceIndex = GetScene().impostorInstanceOffset; prim.subsetIndex = 0; diff --git a/WickedEngine/shaders/objectHF.hlsli b/WickedEngine/shaders/objectHF.hlsli index 3e62fca719..2b45cc8918 100644 --- a/WickedEngine/shaders/objectHF.hlsli +++ b/WickedEngine/shaders/objectHF.hlsli @@ -1090,6 +1090,7 @@ float4 main(PixelInput input, in bool is_frontface : SV_IsFrontFace APPEND_COVER #ifdef PREPASS #ifndef DEPTHONLY PrimitiveID prim; + prim.init(); prim.primitiveIndex = primitiveID; prim.instanceIndex = input.GetInstanceIndex(); prim.subsetIndex = push.geometryIndex - meshinstance.geometryOffset; diff --git a/WickedEngine/shaders/raytraceCS.hlsl b/WickedEngine/shaders/raytraceCS.hlsl index 5d71f0d4bb..73d8538c7d 100644 --- a/WickedEngine/shaders/raytraceCS.hlsl +++ b/WickedEngine/shaders/raytraceCS.hlsl @@ -93,6 +93,7 @@ void main(uint3 DTid : SV_DispatchThreadID, uint groupIndex : SV_GroupIndex) while (q.Proceed()) { PrimitiveID prim; + prim.init(); prim.primitiveIndex = q.CandidatePrimitiveIndex(); prim.instanceIndex = q.CandidateInstanceID(); prim.subsetIndex = q.CandidateGeometryIndex(); @@ -156,6 +157,7 @@ void main(uint3 DTid : SV_DispatchThreadID, uint groupIndex : SV_GroupIndex) ray.Origin = q.WorldRayOrigin() + q.WorldRayDirection() * q.CommittedRayT(); PrimitiveID prim; + prim.init(); prim.primitiveIndex = q.CommittedPrimitiveIndex(); prim.instanceIndex = q.CommittedInstanceID(); prim.subsetIndex = q.CommittedGeometryIndex(); @@ -337,6 +339,7 @@ void main(uint3 DTid : SV_DispatchThreadID, uint groupIndex : SV_GroupIndex) while (q.Proceed()) { PrimitiveID prim; + prim.init(); prim.primitiveIndex = q.CandidatePrimitiveIndex(); prim.instanceIndex = q.CandidateInstanceID(); prim.subsetIndex = q.CandidateGeometryIndex(); diff --git a/WickedEngine/shaders/renderlightmapPS.hlsl b/WickedEngine/shaders/renderlightmapPS.hlsl index 8e2f4d4798..790d49cec7 100644 --- a/WickedEngine/shaders/renderlightmapPS.hlsl +++ b/WickedEngine/shaders/renderlightmapPS.hlsl @@ -71,6 +71,7 @@ void BakeryPixelPush(inout float3 P, in float3 N, in float2 UV, inout RNG rng, i hit_pos = q.WorldRayOrigin() + q.WorldRayDirection() * q.CommittedRayT(); PrimitiveID prim; + prim.init(); prim.primitiveIndex = q.CommittedPrimitiveIndex(); prim.instanceIndex = q.CommittedInstanceID(); prim.subsetIndex = q.CommittedGeometryIndex(); @@ -275,6 +276,7 @@ float4 main(Input input) : SV_TARGET while (q.Proceed()) { PrimitiveID prim; + prim.init(); prim.primitiveIndex = q.CandidatePrimitiveIndex(); prim.instanceIndex = q.CandidateInstanceID(); prim.subsetIndex = q.CandidateGeometryIndex(); @@ -354,6 +356,7 @@ float4 main(Input input) : SV_TARGET ray.Origin = q.WorldRayOrigin() + q.WorldRayDirection() * q.CommittedRayT(); PrimitiveID prim; + prim.init(); prim.primitiveIndex = q.CommittedPrimitiveIndex(); prim.instanceIndex = q.CommittedInstanceID(); prim.subsetIndex = q.CommittedGeometryIndex(); diff --git a/WickedEngine/shaders/rtaoCS.hlsl b/WickedEngine/shaders/rtaoCS.hlsl index 92d2d3b250..aa754a5bc2 100644 --- a/WickedEngine/shaders/rtaoCS.hlsl +++ b/WickedEngine/shaders/rtaoCS.hlsl @@ -38,6 +38,7 @@ void main(uint3 DTid : SV_DispatchThreadID, uint3 Gid : SV_GroupID, uint3 GTid : RayDesc ray = CreateCameraRay(clipspace); PrimitiveID prim; + prim.init(); prim.unpack(primitiveID); Surface surface; @@ -70,6 +71,7 @@ void main(uint3 DTid : SV_DispatchThreadID, uint3 Gid : SV_GroupID, uint3 GTid : while (q.Proceed()) { PrimitiveID prim; + prim.init(); prim.primitiveIndex = q.CandidatePrimitiveIndex(); prim.instanceIndex = q.CandidateInstanceID(); prim.subsetIndex = q.CandidateGeometryIndex(); diff --git a/WickedEngine/shaders/rtdiffuseCS.hlsl b/WickedEngine/shaders/rtdiffuseCS.hlsl index f7055f5afd..199c6374d0 100644 --- a/WickedEngine/shaders/rtdiffuseCS.hlsl +++ b/WickedEngine/shaders/rtdiffuseCS.hlsl @@ -78,6 +78,7 @@ void main(uint2 DTid : SV_DispatchThreadID) while (q.Proceed()) { PrimitiveID prim; + prim.init(); prim.primitiveIndex = q.CandidatePrimitiveIndex(); prim.instanceIndex = q.CandidateInstanceID(); prim.subsetIndex = q.CandidateGeometryIndex(); @@ -129,6 +130,7 @@ void main(uint2 DTid : SV_DispatchThreadID) { // closest hit: PrimitiveID prim; + prim.init(); prim.primitiveIndex = q.CommittedPrimitiveIndex(); prim.instanceIndex = q.CommittedInstanceID(); prim.subsetIndex = q.CommittedGeometryIndex(); diff --git a/WickedEngine/shaders/rtreflectionCS.hlsl b/WickedEngine/shaders/rtreflectionCS.hlsl index ce9148822d..b370701632 100644 --- a/WickedEngine/shaders/rtreflectionCS.hlsl +++ b/WickedEngine/shaders/rtreflectionCS.hlsl @@ -80,6 +80,7 @@ void main(uint2 DTid : SV_DispatchThreadID) while (q.Proceed()) { PrimitiveID prim; + prim.init(); prim.primitiveIndex = q.CandidatePrimitiveIndex(); prim.instanceIndex = q.CandidateInstanceID(); prim.subsetIndex = q.CandidateGeometryIndex(); @@ -129,6 +130,7 @@ void main(uint2 DTid : SV_DispatchThreadID) { // closest hit: PrimitiveID prim; + prim.init(); prim.primitiveIndex = q.CommittedPrimitiveIndex(); prim.instanceIndex = q.CommittedInstanceID(); prim.subsetIndex = q.CommittedGeometryIndex(); diff --git a/WickedEngine/shaders/rtreflectionLIB.hlsl b/WickedEngine/shaders/rtreflectionLIB.hlsl index 0b08f89c7c..f4b1551bcf 100644 --- a/WickedEngine/shaders/rtreflectionLIB.hlsl +++ b/WickedEngine/shaders/rtreflectionLIB.hlsl @@ -90,6 +90,7 @@ void RTReflection_Raygen() void RTReflection_ClosestHit(inout RayPayload payload, in BuiltInTriangleIntersectionAttributes attr) { PrimitiveID prim; + prim.init(); prim.primitiveIndex = PrimitiveIndex(); prim.instanceIndex = InstanceID(); prim.subsetIndex = GeometryIndex(); @@ -167,6 +168,7 @@ void RTReflection_ClosestHit(inout RayPayload payload, in BuiltInTriangleInterse void RTReflection_AnyHit(inout RayPayload payload, in BuiltInTriangleIntersectionAttributes attr) { PrimitiveID prim; + prim.init(); prim.primitiveIndex = PrimitiveIndex(); prim.instanceIndex = InstanceID(); prim.subsetIndex = GeometryIndex(); diff --git a/WickedEngine/shaders/screenspaceshadowCS.hlsl b/WickedEngine/shaders/screenspaceshadowCS.hlsl index 29eed21350..e2444a6631 100644 --- a/WickedEngine/shaders/screenspaceshadowCS.hlsl +++ b/WickedEngine/shaders/screenspaceshadowCS.hlsl @@ -217,6 +217,7 @@ void main(uint3 DTid : SV_DispatchThreadID, uint3 Gid : SV_GroupID, uint3 GTid : if(q.CandidateType() != CANDIDATE_NON_OPAQUE_TRIANGLE) // see xbox coherent ray traversal documentation continue; PrimitiveID prim; + prim.init(); prim.primitiveIndex = q.CandidatePrimitiveIndex(); prim.instanceIndex = q.CandidateInstanceID(); prim.subsetIndex = q.CandidateGeometryIndex(); diff --git a/WickedEngine/shaders/surfel_coverageCS.hlsl b/WickedEngine/shaders/surfel_coverageCS.hlsl index 5530e71d1d..33a40746b7 100644 --- a/WickedEngine/shaders/surfel_coverageCS.hlsl +++ b/WickedEngine/shaders/surfel_coverageCS.hlsl @@ -65,6 +65,7 @@ void main(uint3 DTid : SV_DispatchThreadID, uint groupIndex : SV_GroupIndex, uin uint primitiveID = texture_primitiveID[pixel]; PrimitiveID prim; + prim.init(); prim.unpack(primitiveID); Surface surface; diff --git a/WickedEngine/shaders/surfel_raytraceCS.hlsl b/WickedEngine/shaders/surfel_raytraceCS.hlsl index fadcbeac0a..0cc86d7f90 100644 --- a/WickedEngine/shaders/surfel_raytraceCS.hlsl +++ b/WickedEngine/shaders/surfel_raytraceCS.hlsl @@ -91,6 +91,7 @@ void main(uint3 DTid : SV_DispatchThreadID) hit_depth = q.CommittedRayT(); PrimitiveID prim; + prim.init(); prim.primitiveIndex = q.CommittedPrimitiveIndex(); prim.instanceIndex = q.CommittedInstanceID(); prim.subsetIndex = q.CommittedGeometryIndex(); diff --git a/WickedEngine/shaders/surfel_updateCS.hlsl b/WickedEngine/shaders/surfel_updateCS.hlsl index aa966d8548..c8c1599e5d 100644 --- a/WickedEngine/shaders/surfel_updateCS.hlsl +++ b/WickedEngine/shaders/surfel_updateCS.hlsl @@ -27,6 +27,7 @@ void main(uint3 DTid : SV_DispatchThreadID) float radius = SURFEL_MAX_RADIUS; PrimitiveID prim; + prim.init(); prim.unpack2(surfel_data.primitiveID); Surface surface; diff --git a/WickedEngine/shaders/visibility_resolveCS.hlsl b/WickedEngine/shaders/visibility_resolveCS.hlsl index 56faa0fa2c..4ef1437b56 100644 --- a/WickedEngine/shaders/visibility_resolveCS.hlsl +++ b/WickedEngine/shaders/visibility_resolveCS.hlsl @@ -70,6 +70,7 @@ void main(uint2 Gid : SV_GroupID, uint groupIndex : SV_GroupIndex) if (any(primitiveID)) { PrimitiveID prim; + prim.init(); prim.unpack(primitiveID); Surface surface; diff --git a/WickedEngine/shaders/visibility_shadeCS.hlsl b/WickedEngine/shaders/visibility_shadeCS.hlsl index ee8f278c17..8af0e2ecff 100644 --- a/WickedEngine/shaders/visibility_shadeCS.hlsl +++ b/WickedEngine/shaders/visibility_shadeCS.hlsl @@ -43,6 +43,7 @@ void main(uint Gid : SV_GroupID, uint groupIndex : SV_GroupIndex) uint primitiveID = texture_primitiveID[pixel]; PrimitiveID prim; + prim.init(); prim.unpack(primitiveID); Surface surface; diff --git a/WickedEngine/shaders/visibility_surfaceCS.hlsl b/WickedEngine/shaders/visibility_surfaceCS.hlsl index f04346a624..5f67ed0f09 100644 --- a/WickedEngine/shaders/visibility_surfaceCS.hlsl +++ b/WickedEngine/shaders/visibility_surfaceCS.hlsl @@ -42,6 +42,7 @@ void main(uint Gid : SV_GroupID, uint groupIndex : SV_GroupIndex) uint primitiveID = texture_primitiveID[pixel]; PrimitiveID prim; + prim.init(); prim.unpack(primitiveID); Surface surface; diff --git a/WickedEngine/shaders/visibility_velocityCS.hlsl b/WickedEngine/shaders/visibility_velocityCS.hlsl index 2aee7013ae..8ff98c57d3 100644 --- a/WickedEngine/shaders/visibility_velocityCS.hlsl +++ b/WickedEngine/shaders/visibility_velocityCS.hlsl @@ -29,6 +29,7 @@ void main(uint2 DTid : SV_DispatchThreadID) if (any(primitiveID)) { PrimitiveID prim; + prim.init(); prim.unpack(primitiveID); Surface surface;