2#include "../core/foray_managedbuffer.hpp"
3#include "../core/foray_shadermodule.hpp"
6#include <unordered_map>
49 virtual void Build(
core::Context* context,
const VkPhysicalDeviceRayTracingPipelinePropertiesKHR& pipelineProperties,
const std::vector<const uint8_t*>& handles);
61 template <typename TData>
64 std::vector<uint8_t>& data =
GroupDataAt(groupIndex);
67 Assert(
sizeof(TData) == data.size(),
"Custom data and sizeof(TData) size mismatch!");
68 return reinterpret_cast<TData*
>(data.data());
77 template <
typename TData>
80 const std::vector<uint8_t>& data =
GroupDataAt(groupIndex);
83 Assert(
sizeof(TData) == data.size(),
"Custom data and sizeof(TData) size mismatch!");
84 return reinterpret_cast<const TData*
>(data.data());
96 template <
typename TData>
Wraps allocation and lifetime functionality of a VkBuffer.
Definition foray_managedbuffer.hpp:12
Helper class to manage unique Rt ShaderModules.
Definition foray_rtshadercollection.hpp:11
Shader Binding Table base class, providing functions to manage custom generic shader group data and S...
Definition foray_basesbt.hpp:35
core::ManagedBuffer mBuffer
Definition foray_basesbt.hpp:119
virtual size_t GetGroupArrayCount() const =0
virtual void WriteToShaderCollection(RtShaderCollection &collection) const =0
For any shader group defined, register it with the collection.
virtual VectorRange WriteToShaderGroupCiVector(std::vector< VkRayTracingShaderGroupCreateInfoKHR > &groupCis, const RtShaderCollection &shaderCollection) const =0
Write the shader groups to groupCis vector.
const TData * GroupDataAt(GroupIndex groupIndex) const
Access the custom data entry for a group. May return nullptr!
Definition foray_basesbt.hpp:78
void SetData(GroupIndex groupIndex, const TData &data)
Set the custom data entry for a group.
Definition foray_basesbt.hpp:97
VkDeviceSize mEntryDataSize
Definition foray_basesbt.hpp:122
void ArrayResized(size_t newSize)
void SetData(GroupIndex groupIndex, const void *data)
Set the custom data entry for a group.
ShaderBindingTableBase(VkDeviceSize entryDataSize=0)
VkStridedDeviceAddressRegionKHR mAddressRegion
Definition foray_basesbt.hpp:120
std::vector< uint8_t > & GroupDataAt(GroupIndex groupIndex)
Access the custom data entry for a group.
virtual ~ShaderBindingTableBase()
Definition foray_basesbt.hpp:115
std::vector< std::vector< uint8_t > > mGroupData
Definition foray_basesbt.hpp:124
virtual void Build(core::Context *context, const VkPhysicalDeviceRayTracingPipelinePropertiesKHR &pipelineProperties, const std::vector< const uint8_t * > &handles)
Rebuilds the SBT buffer according to the pipeline properties and matching indices.
virtual ShaderBindingTableBase & SetEntryDataSize(VkDeviceSize newSize)
Set the custom entry data size. Any non-zero custom data is resized according to std::vector<uint8_t>...
#define FORAY_GETTER_V(member)
Return value.
Definition foray_basics.hpp:39
#define FORAY_GETTER_CR(member)
Return constant reference.
Definition foray_basics.hpp:60
Definition foray_basesbt.hpp:9
int32_t GroupIndex
Type used for indexing ShaderGroups in SBTs.
Definition foray_rtshadertypes.hpp:45
void Assert(bool condition, const source_location location=source_location::current())
Asserts condition. Throws a generic error message if conditition is false.
Definition foray_exception.hpp:52
Definition foray_env.hpp:92
Non owning context object.
Definition foray_context.hpp:16
Definition foray_basesbt.hpp:40
int32_t Count
Definition foray_basesbt.hpp:42
int32_t Start
Definition foray_basesbt.hpp:41