Some ray tracing changes

This commit is contained in:
Dynamitos
2024-07-08 13:46:49 +02:00
parent fd8dc5ed0f
commit acf8dde8fc
21 changed files with 108051 additions and 71 deletions
+2
View File
@@ -5,7 +5,9 @@ struct MeshData {
AABB bounding;
uint32 numMeshlets = 0;
uint32 meshletOffset = 0;
// offset into the global index buffer
uint32 firstIndex = 0;
// number of indices in the global index buffer
uint32 numIndices = 0;
};
struct InstanceData {
+6
View File
@@ -22,6 +22,7 @@ struct MeshId {
class VertexData {
public:
struct DrawCallOffsets {
// offset into the instanceData and meshData arrays
uint32 instanceOffset = 0;
uint32 textureOffset = 0;
uint32 samplerOffset = 0;
@@ -91,11 +92,16 @@ class VertexData {
VertexData();
struct MeshletDescription {
AABB bounding;
// number of relevant entries in the vertexIndices array
uint32 vertexCount;
// number of relevant entries in the primitiveIndices array
uint32 primitiveCount;
// starting offset into the vertexIndices array
uint32 vertexOffset;
// starting offset into the primitiveIndices array
uint32 primitiveOffset;
Vector color;
// gets added to vertex indices so that they reference the global mesh bool
uint32 indicesOffset = 0;
};
std::mutex materialDataLock;
-1
View File
@@ -675,7 +675,6 @@ void Graphics::createDevice(GraphicsInitializer initializer) {
VK_CHECK(vkCreateDevice(physicalDevice, &deviceInfo, nullptr, &handle));
// std::cout << "Vulkan handle: " << handle << std::endl;
graphicsQueue = 0;
computeQueue = 0;
transferQueue = 0;
+19 -13
View File
@@ -12,7 +12,8 @@
using namespace Seele::Vulkan;
BottomLevelAS::BottomLevelAS(PGraphics graphics, const Gfx::BottomLevelASCreateInfo& createInfo) : graphics(graphics) {
BottomLevelAS::BottomLevelAS(PGraphics graphics, const Gfx::BottomLevelASCreateInfo& createInfo)
: graphics(graphics), material(createInfo.mesh->referencedMaterial->getHandle()) {
VertexData* vertexData = createInfo.mesh->vertexData;
MeshData meshData = vertexData->getMeshData(createInfo.mesh->id);
Gfx::PShaderBuffer positionBuffer = vertexData->getPositionBuffer();
@@ -37,6 +38,8 @@ BottomLevelAS::BottomLevelAS(PGraphics graphics, const Gfx::BottomLevelASCreateI
};
OBufferAllocation transformBuffer =
new BufferAllocation(graphics, "TransformBuffer", transformBufferInfo, transformAllocInfo, Gfx::QueueType::GRAPHICS);
transformBuffer->updateContents(0, sizeof(VkTransformMatrixKHR), &matrix);
VkDeviceOrHostAddressConstKHR vertexDataAddress = {
.deviceAddress =
positionBuffer.cast<ShaderBuffer>()->getDeviceAddress() + vertexData->getMeshOffset(createInfo.mesh->id) * sizeof(Vector4),
@@ -51,18 +54,21 @@ BottomLevelAS::BottomLevelAS(PGraphics graphics, const Gfx::BottomLevelASCreateI
.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR,
.pNext = nullptr,
.geometryType = VK_GEOMETRY_TYPE_TRIANGLES_KHR,
.geometry = {.triangles =
{
.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR,
.pNext = nullptr,
.vertexFormat = VK_FORMAT_R32G32B32_SFLOAT,
.vertexData = vertexDataAddress,
.vertexStride = sizeof(Vector),
.maxVertex = static_cast<uint32_t>(createInfo.mesh->vertexCount),
.indexType = VK_INDEX_TYPE_UINT32,
.indexData = indexDataAddress,
.transformData = transformDataAddress,
}},
.geometry =
{
.triangles =
{
.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR,
.pNext = nullptr,
.vertexFormat = VK_FORMAT_R32G32B32_SFLOAT,
.vertexData = vertexDataAddress,
.vertexStride = sizeof(Vector),
.maxVertex = static_cast<uint32_t>(createInfo.mesh->vertexCount),
.indexType = VK_INDEX_TYPE_UINT32,
.indexData = indexDataAddress,
.transformData = transformDataAddress,
},
},
.flags = VK_GEOMETRY_OPAQUE_BIT_KHR,
};
VkAccelerationStructureBuildGeometryInfoKHR structureBuildGeometry = {
+1 -1
View File
@@ -16,7 +16,7 @@ class BottomLevelAS : public Gfx::BottomLevelAS {
PGraphics graphics;
VkAccelerationStructureKHR handle;
OBufferAllocation buffer;
PMaterialInstance material;
};
DEFINE_REF(BottomLevelAS)
class TopLevelAS : public Gfx::TopLevelAS {