mirror of
https://github.com/ZDoom/qzdoom.git
synced 2025-02-15 16:51:28 +00:00
Some minor bug fixes
This commit is contained in:
parent
138d3e86ce
commit
e26fb04adf
5 changed files with 30 additions and 24 deletions
|
@ -14,7 +14,7 @@ public:
|
||||||
|
|
||||||
TArray<FVector3> MeshVertices;
|
TArray<FVector3> MeshVertices;
|
||||||
TArray<int> MeshUVIndex;
|
TArray<int> MeshUVIndex;
|
||||||
TArray<unsigned int> MeshElements;
|
TArray<uint32_t> MeshElements;
|
||||||
TArray<int> MeshSurfaces;
|
TArray<int> MeshSurfaces;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -48,16 +48,26 @@ VulkanAccelerationStructure* VkRaytrace::GetAccelStruct()
|
||||||
|
|
||||||
// We need a dummy accel struct to keep vulkan happy:
|
// We need a dummy accel struct to keep vulkan happy:
|
||||||
hwrenderer::LevelMesh dummy;
|
hwrenderer::LevelMesh dummy;
|
||||||
dummy.MeshVertices.Push({ 0.0f, 0.0f, 0.0f });
|
|
||||||
dummy.MeshVertices.Push({ 0.0f, 1.0f, 0.0f });
|
dummy.MeshVertices.Push({ -1.0f, -1.0f, -1.0f });
|
||||||
dummy.MeshVertices.Push({ 1.0f, 0.0f, 0.0f });
|
dummy.MeshVertices.Push({ 1.0f, -1.0f, -1.0f });
|
||||||
dummy.MeshUVIndex.Push(0);
|
dummy.MeshVertices.Push({ 1.0f, 1.0f, -1.0f });
|
||||||
dummy.MeshUVIndex.Push(1);
|
|
||||||
dummy.MeshUVIndex.Push(2);
|
dummy.MeshVertices.Push({ -1.0f, -1.0f, -1.0f });
|
||||||
dummy.MeshElements.Push(0);
|
dummy.MeshVertices.Push({ -1.0f, 1.0f, -1.0f });
|
||||||
dummy.MeshElements.Push(1);
|
dummy.MeshVertices.Push({ 1.0f, 1.0f, -1.0f });
|
||||||
dummy.MeshElements.Push(2);
|
|
||||||
dummy.MeshSurfaces.Push(0);
|
dummy.MeshVertices.Push({ -1.0f, -1.0f, 1.0f });
|
||||||
|
dummy.MeshVertices.Push({ 1.0f, -1.0f, 1.0f });
|
||||||
|
dummy.MeshVertices.Push({ 1.0f, 1.0f, 1.0f });
|
||||||
|
|
||||||
|
dummy.MeshVertices.Push({ -1.0f, -1.0f, 1.0f });
|
||||||
|
dummy.MeshVertices.Push({ -1.0f, 1.0f, 1.0f });
|
||||||
|
dummy.MeshVertices.Push({ 1.0f, 1.0f, 1.0f });
|
||||||
|
|
||||||
|
for (int i = 0; i < 3 * 4; i++)
|
||||||
|
dummy.MeshElements.Push(i);
|
||||||
|
|
||||||
Mesh = &dummy;
|
Mesh = &dummy;
|
||||||
CreateVulkanObjects();
|
CreateVulkanObjects();
|
||||||
Mesh = nullptr;
|
Mesh = nullptr;
|
||||||
|
@ -87,10 +97,6 @@ void VkRaytrace::CreateVulkanObjects()
|
||||||
CreateBottomLevelAccelerationStructure();
|
CreateBottomLevelAccelerationStructure();
|
||||||
CreateTopLevelAccelerationStructure();
|
CreateTopLevelAccelerationStructure();
|
||||||
|
|
||||||
//CreateShaders();
|
|
||||||
//CreatePipeline();
|
|
||||||
//CreateDescriptorSet();
|
|
||||||
|
|
||||||
PipelineBarrier finishbuildbarrier;
|
PipelineBarrier finishbuildbarrier;
|
||||||
finishbuildbarrier.addMemory(VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR, VK_ACCESS_SHADER_READ_BIT);
|
finishbuildbarrier.addMemory(VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR, VK_ACCESS_SHADER_READ_BIT);
|
||||||
finishbuildbarrier.execute(GetVulkanFrameBuffer()->GetTransferCommands(), VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT);
|
finishbuildbarrier.execute(GetVulkanFrameBuffer()->GetTransferCommands(), VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT);
|
||||||
|
@ -98,6 +104,8 @@ void VkRaytrace::CreateVulkanObjects()
|
||||||
|
|
||||||
void VkRaytrace::CreateVertexAndIndexBuffers()
|
void VkRaytrace::CreateVertexAndIndexBuffers()
|
||||||
{
|
{
|
||||||
|
static_assert(sizeof(FVector3) == 3 * 4, "sizeof(FVector3) is not 12 bytes!");
|
||||||
|
|
||||||
size_t vertexbuffersize = (size_t)Mesh->MeshVertices.Size() * sizeof(FVector3);
|
size_t vertexbuffersize = (size_t)Mesh->MeshVertices.Size() * sizeof(FVector3);
|
||||||
size_t indexbuffersize = (size_t)Mesh->MeshElements.Size() * sizeof(uint32_t);
|
size_t indexbuffersize = (size_t)Mesh->MeshElements.Size() * sizeof(uint32_t);
|
||||||
size_t transferbuffersize = vertexbuffersize + indexbuffersize;
|
size_t transferbuffersize = vertexbuffersize + indexbuffersize;
|
||||||
|
@ -126,8 +134,8 @@ void VkRaytrace::CreateVertexAndIndexBuffers()
|
||||||
memcpy(data + indexoffset, Mesh->MeshElements.Data(), indexbuffersize);
|
memcpy(data + indexoffset, Mesh->MeshElements.Data(), indexbuffersize);
|
||||||
transferBuffer->Unmap();
|
transferBuffer->Unmap();
|
||||||
|
|
||||||
GetVulkanFrameBuffer()->GetTransferCommands()->copyBuffer(transferBuffer.get(), vertexBuffer.get(), vertexoffset, 0, vertexbuffersize);
|
GetVulkanFrameBuffer()->GetTransferCommands()->copyBuffer(transferBuffer.get(), vertexBuffer.get(), vertexoffset);
|
||||||
GetVulkanFrameBuffer()->GetTransferCommands()->copyBuffer(transferBuffer.get(), indexBuffer.get(), indexoffset, 0, indexbuffersize);
|
GetVulkanFrameBuffer()->GetTransferCommands()->copyBuffer(transferBuffer.get(), indexBuffer.get(), indexoffset);
|
||||||
|
|
||||||
VkMemoryBarrier barrier = { VK_STRUCTURE_TYPE_MEMORY_BARRIER };
|
VkMemoryBarrier barrier = { VK_STRUCTURE_TYPE_MEMORY_BARRIER };
|
||||||
barrier.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT;
|
barrier.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT;
|
||||||
|
@ -151,7 +159,7 @@ void VkRaytrace::CreateBottomLevelAccelerationStructure()
|
||||||
triangles.vertexStride = sizeof(FVector3);
|
triangles.vertexStride = sizeof(FVector3);
|
||||||
triangles.indexType = VK_INDEX_TYPE_UINT32;
|
triangles.indexType = VK_INDEX_TYPE_UINT32;
|
||||||
triangles.indexData.deviceAddress = indexAddress;
|
triangles.indexData.deviceAddress = indexAddress;
|
||||||
triangles.maxVertex = Mesh->MeshVertices.Size();
|
triangles.maxVertex = Mesh->MeshVertices.Size() - 1;
|
||||||
|
|
||||||
VkAccelerationStructureGeometryKHR accelStructBLDesc = { VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR };
|
VkAccelerationStructureGeometryKHR accelStructBLDesc = { VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR };
|
||||||
accelStructBLDesc.geometryType = VK_GEOMETRY_TYPE_TRIANGLES_KHR;
|
accelStructBLDesc.geometryType = VK_GEOMETRY_TYPE_TRIANGLES_KHR;
|
||||||
|
@ -164,7 +172,7 @@ void VkRaytrace::CreateBottomLevelAccelerationStructure()
|
||||||
VkAccelerationStructureBuildGeometryInfoKHR buildInfo = { VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR };
|
VkAccelerationStructureBuildGeometryInfoKHR buildInfo = { VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR };
|
||||||
buildInfo.type = VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR;
|
buildInfo.type = VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR;
|
||||||
buildInfo.mode = VK_BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR;
|
buildInfo.mode = VK_BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR;
|
||||||
buildInfo.flags = accelStructBLDesc.flags | VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR;
|
buildInfo.flags = VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR;
|
||||||
buildInfo.geometryCount = 1;
|
buildInfo.geometryCount = 1;
|
||||||
buildInfo.pGeometries = &accelStructBLDesc;
|
buildInfo.pGeometries = &accelStructBLDesc;
|
||||||
|
|
||||||
|
|
|
@ -429,10 +429,7 @@ FString VkShaderManager::GetTargetGlslVersion()
|
||||||
{
|
{
|
||||||
if (device->ApiVersion == VK_API_VERSION_1_2)
|
if (device->ApiVersion == VK_API_VERSION_1_2)
|
||||||
{
|
{
|
||||||
return R"(#version 460
|
return "#version 460\n#extension GL_EXT_ray_query : enable\n";
|
||||||
#extension GL_EXT_ray_tracing : enable
|
|
||||||
#extension GL_EXT_ray_query : enable
|
|
||||||
)";
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -160,7 +160,7 @@ std::unique_ptr<VulkanShader> ShaderBuilder::create(const char *shadername, Vulk
|
||||||
glslang::TShader shader(stage);
|
glslang::TShader shader(stage);
|
||||||
shader.setStrings(sources, 1);
|
shader.setStrings(sources, 1);
|
||||||
shader.setEnvInput(glslang::EShSourceGlsl, stage, glslang::EShClientVulkan, 100);
|
shader.setEnvInput(glslang::EShSourceGlsl, stage, glslang::EShClientVulkan, 100);
|
||||||
if (device->ApiVersion == VK_API_VERSION_1_2)
|
if (device->ApiVersion >= VK_API_VERSION_1_2)
|
||||||
{
|
{
|
||||||
shader.setEnvClient(glslang::EShClientVulkan, glslang::EShTargetVulkan_1_2);
|
shader.setEnvClient(glslang::EShClientVulkan, glslang::EShTargetVulkan_1_2);
|
||||||
shader.setEnvTarget(glslang::EShTargetSpv, glslang::EShTargetSpv_1_4);
|
shader.setEnvTarget(glslang::EShTargetSpv, glslang::EShTargetSpv_1_4);
|
||||||
|
|
|
@ -216,6 +216,7 @@ bool VulkanDevice::SupportsDeviceExtension(const char *ext) const
|
||||||
void VulkanDevice::CreateAllocator()
|
void VulkanDevice::CreateAllocator()
|
||||||
{
|
{
|
||||||
VmaAllocatorCreateInfo allocinfo = {};
|
VmaAllocatorCreateInfo allocinfo = {};
|
||||||
|
allocinfo.vulkanApiVersion = ApiVersion;
|
||||||
if (SupportsDeviceExtension(VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME) && SupportsDeviceExtension(VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME))
|
if (SupportsDeviceExtension(VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME) && SupportsDeviceExtension(VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME))
|
||||||
allocinfo.flags |= VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT;
|
allocinfo.flags |= VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT;
|
||||||
if (SupportsDeviceExtension(VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME))
|
if (SupportsDeviceExtension(VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME))
|
||||||
|
|
Loading…
Reference in a new issue