Browse Source

Ray tracing fixes

Panagiotis Christopoulos Charitos 2 years ago
parent
commit
ed5381aaa9

+ 1 - 0
AnKi/Scene/Components/ModelComponent.cpp

@@ -178,6 +178,7 @@ Error ModelComponent::update(SceneComponentUpdateInfo& info, Bool& updated)
 				{
 					const U64 address = inf.m_blas->getGpuAddress();
 					memcpy(&meshLod.m_blasAddress, &address, sizeof(meshLod.m_blasAddress));
+					meshLod.m_tlasInstanceMask = 0xFFFFFFFF;
 				}
 			}
 

+ 5 - 4
AnKi/Shaders/GpuVisibilityAccelerationStructures.ankiprog

@@ -94,10 +94,11 @@
 
 			AccelerationStructureInstance instance;
 			instance.m_transform = finalTrf;
-			instance.m_instanceCustomIndex24_mask8 = (instanceIdx << 8u) | (meshLod.m_tlasInstanceMask & 0xFFu);
-			instance.m_instanceShaderBindingTableRecordOffset24_flags8 =
-				(instanceIdx << 8u)
-				| (kAccellerationStructureFlagTriangleFrontCounterlockwise | kAccellerationStructureFlagTriangleFacingCullDisable);
+			instance.m_mask8_instanceCustomIndex24 = (meshLod.m_tlasInstanceMask << 24u) | (instanceIdx & 0x00FFFFFFu);
+			instance.m_flags8_instanceShaderBindingTableRecordOffset24 =
+				((kAccellerationStructureFlagTriangleFrontCounterlockwise | kAccellerationStructureFlagTriangleFacingCullDisable)
+				 << (AccellerationStructureFlag)24u)
+				| (instanceIdx & 0x00FFFFFFu);
 			instance.m_accelerationStructureAddress = meshLod.m_blasAddress;
 			g_visibleInstances[instanceIdx] = instance;
 

+ 2 - 2
AnKi/Shaders/Include/Common.h

@@ -867,8 +867,8 @@ enum AccellerationStructureFlag : U32
 struct AccelerationStructureInstance
 {
 	Mat3x4 m_transform;
-	U32 m_instanceCustomIndex24_mask8;
-	U32 m_instanceShaderBindingTableRecordOffset24_flags8; ///< flags is AccellerationStructureFlag.
+	U32 m_mask8_instanceCustomIndex24;
+	U32 m_flags8_instanceShaderBindingTableRecordOffset24; ///< flags is AccellerationStructureFlag.
 	UVec2 m_accelerationStructureAddress;
 };