Resource cleanup, code cleanup
This commit is contained in:
parent
b8b3fac9b4
commit
8bb1b8de21
1 changed files with 17 additions and 7 deletions
|
|
@ -16,7 +16,6 @@
|
||||||
#define GLM_FORCE_DEPTH_ZERO_TO_ONE
|
#define GLM_FORCE_DEPTH_ZERO_TO_ONE
|
||||||
#include <glm/glm.hpp>
|
#include <glm/glm.hpp>
|
||||||
#include <glm/gtc/matrix_transform.hpp>
|
#include <glm/gtc/matrix_transform.hpp>
|
||||||
#include <gli/gli.hpp>
|
|
||||||
|
|
||||||
#include <vulkan/vulkan.h>
|
#include <vulkan/vulkan.h>
|
||||||
#include "vulkanexamplebase.h"
|
#include "vulkanexamplebase.h"
|
||||||
|
|
@ -28,14 +27,13 @@
|
||||||
// Ray tracing acceleration structure
|
// Ray tracing acceleration structure
|
||||||
struct AccelerationStructure {
|
struct AccelerationStructure {
|
||||||
VkDeviceMemory memory;
|
VkDeviceMemory memory;
|
||||||
VkAccelerationStructureInfoNV accelerationStructureInfo;
|
|
||||||
VkAccelerationStructureNV accelerationStructure;
|
VkAccelerationStructureNV accelerationStructure;
|
||||||
uint64_t handle;
|
uint64_t handle;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Ray tracing geometry instance
|
// Ray tracing geometry instance
|
||||||
struct GeometryInstance {
|
struct GeometryInstance {
|
||||||
float transform[12];
|
glm::mat3x4 transform;
|
||||||
uint32_t instanceId : 24;
|
uint32_t instanceId : 24;
|
||||||
uint32_t mask : 8;
|
uint32_t mask : 8;
|
||||||
uint32_t instanceOffset : 24;
|
uint32_t instanceOffset : 24;
|
||||||
|
|
@ -52,6 +50,7 @@ class VulkanExample : public VulkanExampleBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PFN_vkCreateAccelerationStructureNV vkCreateAccelerationStructureNV;
|
PFN_vkCreateAccelerationStructureNV vkCreateAccelerationStructureNV;
|
||||||
|
PFN_vkDestroyAccelerationStructureNV vkDestroyAccelerationStructureNV;
|
||||||
PFN_vkBindAccelerationStructureMemoryNV vkBindAccelerationStructureMemoryNV;
|
PFN_vkBindAccelerationStructureMemoryNV vkBindAccelerationStructureMemoryNV;
|
||||||
PFN_vkGetAccelerationStructureHandleNV vkGetAccelerationStructureHandleNV;
|
PFN_vkGetAccelerationStructureHandleNV vkGetAccelerationStructureHandleNV;
|
||||||
PFN_vkGetAccelerationStructureMemoryRequirementsNV vkGetAccelerationStructureMemoryRequirementsNV;
|
PFN_vkGetAccelerationStructureMemoryRequirementsNV vkGetAccelerationStructureMemoryRequirementsNV;
|
||||||
|
|
@ -104,11 +103,19 @@ public:
|
||||||
|
|
||||||
~VulkanExample()
|
~VulkanExample()
|
||||||
{
|
{
|
||||||
|
vkDestroyPipeline(device, pipeline, nullptr);
|
||||||
vkDestroyPipelineLayout(device, pipelineLayout, nullptr);
|
vkDestroyPipelineLayout(device, pipelineLayout, nullptr);
|
||||||
vkDestroyDescriptorSetLayout(device, descriptorSetLayout, nullptr);
|
vkDestroyDescriptorSetLayout(device, descriptorSetLayout, nullptr);
|
||||||
|
vkDestroyImageView(device, storageImage.view, nullptr);
|
||||||
|
vkDestroyImage(device, storageImage.image, nullptr);
|
||||||
|
vkFreeMemory(device, storageImage.memory, nullptr);
|
||||||
|
vkFreeMemory(device, bottomLevelAS.memory, nullptr);
|
||||||
|
vkFreeMemory(device, topLevelAS.memory, nullptr);
|
||||||
|
vkDestroyAccelerationStructureNV(device, bottomLevelAS.accelerationStructure, nullptr);
|
||||||
|
vkDestroyAccelerationStructureNV(device, topLevelAS.accelerationStructure, nullptr);
|
||||||
vertexBuffer.destroy();
|
vertexBuffer.destroy();
|
||||||
indexBuffer.destroy();
|
indexBuffer.destroy();
|
||||||
|
shaderBindingTable.destroy();
|
||||||
ubo.destroy();
|
ubo.destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -298,16 +305,17 @@ public:
|
||||||
Create the top-level acceleration structure that contains geometry instance information
|
Create the top-level acceleration structure that contains geometry instance information
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Single instance with a 3x3 transform matrix for the ray traced triangle
|
// Single instance with a 3x4 transform matrix for the ray traced triangle
|
||||||
vks::Buffer instanceBuffer;
|
vks::Buffer instanceBuffer;
|
||||||
const float transform[12] = {
|
|
||||||
|
glm::mat3x4 transform = {
|
||||||
1.0f, 0.0f, 0.0f, 0.0f,
|
1.0f, 0.0f, 0.0f, 0.0f,
|
||||||
0.0f, 1.0f, 0.0f, 0.0f,
|
0.0f, 1.0f, 0.0f, 0.0f,
|
||||||
0.0f, 0.0f, 1.0f, 0.0f,
|
0.0f, 0.0f, 1.0f, 0.0f,
|
||||||
};
|
};
|
||||||
|
|
||||||
GeometryInstance instance{};
|
GeometryInstance instance{};
|
||||||
std::memcpy(instance.transform, transform, sizeof(transform));
|
instance.transform = transform;
|
||||||
instance.instanceId = 0;
|
instance.instanceId = 0;
|
||||||
instance.mask = 0xff;
|
instance.mask = 0xff;
|
||||||
instance.instanceOffset = 0;
|
instance.instanceOffset = 0;
|
||||||
|
|
@ -399,6 +407,7 @@ public:
|
||||||
vulkanDevice->flushCommandBuffer(cmdBuffer, queue);
|
vulkanDevice->flushCommandBuffer(cmdBuffer, queue);
|
||||||
|
|
||||||
scratchBuffer.destroy();
|
scratchBuffer.destroy();
|
||||||
|
instanceBuffer.destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
VkDeviceSize copyShaderIdentifier(uint8_t* data, const uint8_t* shaderHandleStorage, uint32_t groupIndex) {
|
VkDeviceSize copyShaderIdentifier(uint8_t* data, const uint8_t* shaderHandleStorage, uint32_t groupIndex) {
|
||||||
|
|
@ -691,6 +700,7 @@ public:
|
||||||
|
|
||||||
// Get VK_NV_ray_tracing related function pointers
|
// Get VK_NV_ray_tracing related function pointers
|
||||||
vkCreateAccelerationStructureNV = reinterpret_cast<PFN_vkCreateAccelerationStructureNV>(vkGetDeviceProcAddr(device, "vkCreateAccelerationStructureNV"));
|
vkCreateAccelerationStructureNV = reinterpret_cast<PFN_vkCreateAccelerationStructureNV>(vkGetDeviceProcAddr(device, "vkCreateAccelerationStructureNV"));
|
||||||
|
vkDestroyAccelerationStructureNV = reinterpret_cast<PFN_vkDestroyAccelerationStructureNV>(vkGetDeviceProcAddr(device, "vkDestroyAccelerationStructureNV"));
|
||||||
vkBindAccelerationStructureMemoryNV = reinterpret_cast<PFN_vkBindAccelerationStructureMemoryNV>(vkGetDeviceProcAddr(device, "vkBindAccelerationStructureMemoryNV"));
|
vkBindAccelerationStructureMemoryNV = reinterpret_cast<PFN_vkBindAccelerationStructureMemoryNV>(vkGetDeviceProcAddr(device, "vkBindAccelerationStructureMemoryNV"));
|
||||||
vkGetAccelerationStructureHandleNV = reinterpret_cast<PFN_vkGetAccelerationStructureHandleNV>(vkGetDeviceProcAddr(device, "vkGetAccelerationStructureHandleNV"));
|
vkGetAccelerationStructureHandleNV = reinterpret_cast<PFN_vkGetAccelerationStructureHandleNV>(vkGetDeviceProcAddr(device, "vkGetAccelerationStructureHandleNV"));
|
||||||
vkGetAccelerationStructureMemoryRequirementsNV = reinterpret_cast<PFN_vkGetAccelerationStructureMemoryRequirementsNV>(vkGetDeviceProcAddr(device, "vkGetAccelerationStructureMemoryRequirementsNV"));
|
vkGetAccelerationStructureMemoryRequirementsNV = reinterpret_cast<PFN_vkGetAccelerationStructureMemoryRequirementsNV>(vkGetDeviceProcAddr(device, "vkGetAccelerationStructureMemoryRequirementsNV"));
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue