Some ray tracing changes
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 = {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user