Skip to content

Commit

Permalink
Inherit first-person /viewer flags from an instance
Browse files Browse the repository at this point in the history
  • Loading branch information
sultim-t committed Nov 10, 2023
1 parent fd6b97a commit b188c5d
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 16 deletions.
21 changes: 13 additions & 8 deletions Source/ASManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -801,9 +801,10 @@ bool RTGL1::ASManager::AddMeshPrimitive( uint32_t frameIndex,
// register the built instance as an instance in this frame
curFrame_objects.push_back( Object{
.builtInstance = builtInstance.get(),
.isStatic = isStatic,
.uniqueID = uniqueID,
.transform = mesh.transform,
.isStatic = isStatic,
.instanceFlags = geomFlags,
} );

// make geom info
Expand Down Expand Up @@ -890,10 +891,11 @@ void RTGL1::ASManager::SubmitDynamicGeometry( DynamicGeometryToken& token,
}
}

auto RTGL1::ASManager::MakeVkTLAS( const BuiltAS& builtAS,
uint32_t rayCullMaskWorld,
bool allowGeometryWithSkyFlag,
const RgTransform& transform )
auto RTGL1::ASManager::MakeVkTLAS( const BuiltAS& builtAS,
uint32_t rayCullMaskWorld,
bool allowGeometryWithSkyFlag,
const RgTransform& instanceTransform,
VertexCollectorFilterTypeFlags instanceFlags )
-> std::optional< VkAccelerationStructureInstanceKHR >
{
using FT = VertexCollectorFilterTypeFlagBits;
Expand All @@ -915,15 +917,17 @@ auto RTGL1::ASManager::MakeVkTLAS( const BuiltAS& builtAS,


auto instance = VkAccelerationStructureInstanceKHR{
.transform = rgToVkTransform( transform ),
.transform = rgToVkTransform( instanceTransform ),
.instanceCustomIndex = 0,
.mask = 0,
.instanceShaderBindingTableRecordOffset = 0,
.flags = 0,
.accelerationStructureReference = builtAS.blas.GetASAddress(),
};

const auto filter = builtAS.flags;
// inherit some bits from an instance
const auto filter =
builtAS.flags | ( instanceFlags & ( FT::PV_FIRST_PERSON | FT::PV_FIRST_PERSON_VIEWER ) );


if( filter & FT::PV_FIRST_PERSON )
Expand Down Expand Up @@ -1056,7 +1060,8 @@ void RTGL1::ASManager::BuildTLAS( VkCommandBuffer cmd,
auto vkTlas = MakeVkTLAS( *obj.builtInstance,
uniformData_rayCullMaskWorld,
allowGeometryWithSkyFlag,
obj.transform );
obj.transform,
obj.instanceFlags );

if( !vkTlas )
{
Expand Down
19 changes: 11 additions & 8 deletions Source/ASManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -110,10 +110,11 @@ class ASManager
VertexCollector::UploadResult geometry;
};

static auto MakeVkTLAS( const BuiltAS& builtAS,
uint32_t rayCullMaskWorld,
bool allowGeometryWithSkyFlag,
const RgTransform& transform )
static auto MakeVkTLAS( const BuiltAS& builtAS,
uint32_t rayCullMaskWorld,
bool allowGeometryWithSkyFlag,
const RgTransform& instanceTransform,
VertexCollectorFilterTypeFlags instanceFlags )
-> std::optional< VkAccelerationStructureInstanceKHR >;

private:
Expand Down Expand Up @@ -150,10 +151,12 @@ class ASManager
struct Object
{
// should be weak_ptr
BuiltAS* builtInstance;
PrimitiveUniqueID uniqueID;
RgTransform transform;
bool isStatic;
BuiltAS* builtInstance;
bool isStatic;
// per instance params
PrimitiveUniqueID uniqueID;
RgTransform transform;
VertexCollectorFilterTypeFlags instanceFlags;
};
std::vector< Object > curFrame_objects;

Expand Down

0 comments on commit b188c5d

Please sign in to comment.