More Ray tracing changes

This commit is contained in:
Dynamitos
2024-06-09 10:44:24 +02:00
parent 31e66192f1
commit f18bf8acbe
28 changed files with 817 additions and 662 deletions
File diff suppressed because it is too large Load Diff
+6 -1
View File
@@ -16,6 +16,7 @@ public:
VmaAllocationInfo info = VmaAllocationInfo();
VkMemoryPropertyFlags properties = 0;
uint64 size = 0;
VkDeviceAddress deviceAddress;
};
DEFINE_REF(BufferAllocation);
class Buffer {
@@ -24,6 +25,9 @@ public:
Gfx::QueueType &queueType, bool dynamic, std::string name);
virtual ~Buffer();
VkBuffer getHandle() const { return buffers[currentBuffer]->buffer; }
VkDeviceAddress getDeviceAddress() const {
return buffers[currentBuffer]->deviceAddress;
}
PBufferAllocation getAlloc() const { return buffers[currentBuffer]; }
uint64 getSize() const { return buffers[currentBuffer]->size; }
void *map(bool writeOnly = true);
@@ -130,7 +134,8 @@ public:
virtual ~ShaderBuffer();
virtual void
updateContents(const ShaderBufferCreateInfo &createInfo) override;
virtual void rotateBuffer(uint64 size, bool preserveContents = false) override;
virtual void rotateBuffer(uint64 size,
bool preserveContents = false) override;
virtual void *mapRegion(uint64 offset, uint64 size, bool writeOnly) override;
virtual void unmap() override;
@@ -22,6 +22,8 @@ target_sources(Engine
PipelineCache.cpp
Queue.h
Queue.cpp
RayTracing.h
RayTracing.cpp
RenderPass.h
RenderPass.cpp
Resources.h
@@ -47,6 +49,7 @@ target_sources(Engine
Pipeline.h
PipelineCache.h
Queue.h
RayTracing.h
RenderPass.h
Resources.h
Shader.h
@@ -3,6 +3,7 @@
#include "Command.h"
#include "Graphics.h"
#include "Texture.h"
#include "CRC.h"
using namespace Seele;
using namespace Seele::Vulkan;
@@ -3,6 +3,7 @@
#include "RenderPass.h"
#include "Graphics.h"
#include "Texture.h"
#include "CRC.h"
using namespace Seele;
using namespace Seele::Vulkan;
+20 -4
View File
@@ -3,6 +3,8 @@
#include "Allocator.h"
#include "Buffer.h"
#include "Graphics/Enums.h"
#include "Graphics/Graphics.h"
#include "Graphics/Initializer.h"
#include "PipelineCache.h"
#include "Command.h"
#include "Descriptor.h"
@@ -10,6 +12,7 @@
#include "RenderPass.h"
#include "Framebuffer.h"
#include "Shader.h"
#include "RayTracing.h"
#include <GLFW/glfw3.h>
#include <cstring>
#include <vulkan/vulkan_core.h>
@@ -291,14 +294,24 @@ void Graphics::resolveTexture(Gfx::PTexture source, Gfx::PTexture destination)
vkCmdResolveImage(getGraphicsCommands()->getCommands()->getHandle(), sourceTex->getImage(), cast(sourceTex->getLayout()), destinationTex->getImage(), cast(destinationTex->getLayout()), 1, &resolve);
}
void Graphics::vkCmdDrawMeshTasksEXT(VkCommandBuffer handle, uint32 groupX, uint32 groupY, uint32 groupZ)
Gfx::OBottomLevelAS Graphics::createBottomLevelAccelerationStructure(const Gfx::BottomLevelASCreateInfo& createInfo)
{
cmdDrawMeshTasks(handle, groupX, groupY, groupZ);
return new BottomLevelAS(this, createInfo);
}
void Graphics::vkCmdDrawMeshTasksIndirectEXT(VkCommandBuffer handle, VkBuffer buffer, uint64 offset, uint32 drawCount, uint32 stride)
Gfx::OTopLevelAS Graphics::createTopLevelAccelerationStructure(const Gfx::TopLevelASCreateInfo& createInfo)
{
cmdDrawMeshTasksIndirect(handle, buffer, offset, drawCount, stride);
return new TopLevelAS(this, createInfo);
}
void Graphics::vkCmdDrawMeshTasksEXT(VkCommandBuffer cmd, uint32 groupX, uint32 groupY, uint32 groupZ)
{
cmdDrawMeshTasks(cmd, groupX, groupY, groupZ);
}
void Graphics::vkCmdDrawMeshTasksIndirectEXT(VkCommandBuffer cmd, VkBuffer buffer, uint64 offset, uint32 drawCount, uint32 stride)
{
cmdDrawMeshTasksIndirect(cmd, buffer, offset, drawCount, stride);
}
void Graphics::vkSetDebugUtilsObjectNameEXT(VkDebugUtilsObjectNameInfoEXT* info)
@@ -395,6 +408,7 @@ void Graphics::initInstance(GraphicsInitializer initInfo)
assert(glfwVulkanSupported());
VkApplicationInfo appInfo = {
.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO,
.pNext = nullptr,
.pApplicationName = initInfo.applicationName,
.applicationVersion = VK_MAKE_VERSION(0, 0, 1),
.pEngineName = initInfo.engineName,
@@ -415,6 +429,7 @@ void Graphics::initInstance(GraphicsInitializer initInfo)
#endif
VkInstanceCreateInfo info = {
.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
.pNext = nullptr,
#if __APPLE__
.flags = VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR,
#endif
@@ -562,6 +577,7 @@ void Graphics::createDevice(GraphicsInitializer initializer)
.flags = 0,
.queueFamilyIndex = familyIndex,
.queueCount = numQueuesForFamily,
.pQueuePriorities = nullptr,
};
numPriorities += numQueuesForFamily;
queueInfos.add(info);
+4 -1
View File
@@ -1,5 +1,4 @@
#pragma once
#include "Enums.h"
#include "Graphics/Graphics.h"
#include <vk_mem_alloc.h>
@@ -70,6 +69,10 @@ public:
virtual void resolveTexture(Gfx::PTexture source, Gfx::PTexture destination) override;
// Ray Tracing
virtual Gfx::OBottomLevelAS createBottomLevelAccelerationStructure(const Gfx::BottomLevelASCreateInfo& createInfo) override;
virtual Gfx::OTopLevelAS createTopLevelAccelerationStructure(const Gfx::TopLevelASCreateInfo& createInfo) override;
void vkCmdDrawMeshTasksEXT(VkCommandBuffer handle, uint32 groupX, uint32 groupY, uint32 groupZ);
void vkCmdDrawMeshTasksIndirectEXT(VkCommandBuffer handle, VkBuffer buffer, uint64 offset, uint32 drawCount, uint32 stride);
void vkSetDebugUtilsObjectNameEXT(VkDebugUtilsObjectNameInfoEXT* info);
+1
View File
@@ -2,6 +2,7 @@
#include "Graphics.h"
#include "Allocator.h"
#include "Command.h"
#include "Enums.h"
using namespace Seele;
using namespace Seele::Vulkan;
+67
View File
@@ -0,0 +1,67 @@
#include "RayTracing.h"
#include "Buffer.h"
#include "Graphics/Initializer.h"
#include <vulkan/vulkan_core.h>
using namespace Seele::Vulkan;
BottomLevelAS::BottomLevelAS(PGraphics graphics, const Gfx::BottomLevelASCreateInfo& createInfo)
{
VkDeviceOrHostAddressConstKHR vertexDataDeviceAddress = {
.deviceAddress = createInfo.positionBuffer.cast<Buffer>()->getDeviceAddress() + createInfo.verticesOffset,
};
VkDeviceOrHostAddressConstKHR indexDataDeviceAddress = {
.deviceAddress = createInfo.indexBuffer.cast<Buffer>()->getDeviceAddress() + createInfo.indicesOffset,
};
VkAccelerationStructureGeometryKHR accelerationStructureGeometry = {
.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 = vertexDataDeviceAddress,
.vertexStride = sizeof(Vector),
.maxVertex = createInfo.positionBuffer->getNumElements(),
.indexType = VK_INDEX_TYPE_UINT32,
.indexData = indexDataDeviceAddress,
}},
.flags = VK_GEOMETRY_OPAQUE_BIT_KHR,
};
VkAccelerationStructureBuildRangeInfoKHR buildRangeInfo = {
.primitiveCount = createInfo.meshData.numIndices / 3,
.primitiveOffset = 0,
.firstVertex = 0,
.transformOffset = 0
};
VkAccelerationStructureBuildGeometryInfoKHR buildGeometry = {
.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR,
.pNext = nullptr,
.type = VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR,
.flags = VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR,
};
VkAccelerationStructureCreateInfoKHR info = {
.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR,
.pNext = nullptr,
.createFlags = 0,
};
}
BottomLevelAS::~BottomLevelAS()
{
}
TopLevelAS::TopLevelAS(PGraphics graphics, const Gfx::TopLevelASCreateInfo& createInfo)
{
}
TopLevelAS::~TopLevelAS()
{
}
+32
View File
@@ -0,0 +1,32 @@
#pragma once
#include "Graphics/Initializer.h"
#include "Graphics.h"
#include "Graphics/RayTracing.h"
#include <vulkan/vulkan_core.h>
namespace Seele
{
namespace Vulkan
{
class BottomLevelAS : public Gfx::BottomLevelAS
{
public:
BottomLevelAS(PGraphics graphics, const Gfx::BottomLevelASCreateInfo& createInfo);
~BottomLevelAS();
private:
PGraphics graphics;
VkAccelerationStructureKHR handle;
};
DEFINE_REF(BottomLevelAS)
class TopLevelAS : public Gfx::TopLevelAS
{
public:
TopLevelAS(PGraphics graphics, const Gfx::TopLevelASCreateInfo& createInfo);
~TopLevelAS();
private:
PGraphics graphics;
VkAccelerationStructureKHR handle;
};
DEFINE_REF(TopLevelAS)
}
}
@@ -4,6 +4,7 @@
#include "Texture.h"
#include "Resources.h"
#include "Command.h"
#include "CRC.h"
using namespace Seele;
using namespace Seele::Vulkan;
+1
View File
@@ -1,5 +1,6 @@
#include "Texture.h"
#include "Command.h"
#include "Enums.h"
#include <math.h>
using namespace Seele;