mirror of
https://github.com/ZDoom/qzdoom.git
synced 2025-02-09 01:01:05 +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<int> MeshUVIndex;
|
||||
TArray<unsigned int> MeshElements;
|
||||
TArray<uint32_t> MeshElements;
|
||||
TArray<int> MeshSurfaces;
|
||||
};
|
||||
|
||||
|
|
|
@ -48,16 +48,26 @@ VulkanAccelerationStructure* VkRaytrace::GetAccelStruct()
|
|||
|
||||
// We need a dummy accel struct to keep vulkan happy:
|
||||
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, 0.0f, 0.0f });
|
||||
dummy.MeshUVIndex.Push(0);
|
||||
dummy.MeshUVIndex.Push(1);
|
||||
dummy.MeshUVIndex.Push(2);
|
||||
dummy.MeshElements.Push(0);
|
||||
dummy.MeshElements.Push(1);
|
||||
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 });
|
||||
|
||||
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;
|
||||
CreateVulkanObjects();
|
||||
Mesh = nullptr;
|
||||
|
@ -87,10 +97,6 @@ void VkRaytrace::CreateVulkanObjects()
|
|||
CreateBottomLevelAccelerationStructure();
|
||||
CreateTopLevelAccelerationStructure();
|
||||
|
||||
//CreateShaders();
|
||||
//CreatePipeline();
|
||||
//CreateDescriptorSet();
|
||||
|
||||
PipelineBarrier finishbuildbarrier;
|
||||
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);
|
||||
|
@ -98,6 +104,8 @@ void VkRaytrace::CreateVulkanObjects()
|
|||
|
||||
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 indexbuffersize = (size_t)Mesh->MeshElements.Size() * sizeof(uint32_t);
|
||||
size_t transferbuffersize = vertexbuffersize + indexbuffersize;
|
||||
|
@ -126,8 +134,8 @@ void VkRaytrace::CreateVertexAndIndexBuffers()
|
|||
memcpy(data + indexoffset, Mesh->MeshElements.Data(), indexbuffersize);
|
||||
transferBuffer->Unmap();
|
||||
|
||||
GetVulkanFrameBuffer()->GetTransferCommands()->copyBuffer(transferBuffer.get(), vertexBuffer.get(), vertexoffset, 0, vertexbuffersize);
|
||||
GetVulkanFrameBuffer()->GetTransferCommands()->copyBuffer(transferBuffer.get(), indexBuffer.get(), indexoffset, 0, indexbuffersize);
|
||||
GetVulkanFrameBuffer()->GetTransferCommands()->copyBuffer(transferBuffer.get(), vertexBuffer.get(), vertexoffset);
|
||||
GetVulkanFrameBuffer()->GetTransferCommands()->copyBuffer(transferBuffer.get(), indexBuffer.get(), indexoffset);
|
||||
|
||||
VkMemoryBarrier barrier = { VK_STRUCTURE_TYPE_MEMORY_BARRIER };
|
||||
barrier.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT;
|
||||
|
@ -151,7 +159,7 @@ void VkRaytrace::CreateBottomLevelAccelerationStructure()
|
|||
triangles.vertexStride = sizeof(FVector3);
|
||||
triangles.indexType = VK_INDEX_TYPE_UINT32;
|
||||
triangles.indexData.deviceAddress = indexAddress;
|
||||
triangles.maxVertex = Mesh->MeshVertices.Size();
|
||||
triangles.maxVertex = Mesh->MeshVertices.Size() - 1;
|
||||
|
||||
VkAccelerationStructureGeometryKHR accelStructBLDesc = { VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_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 };
|
||||
buildInfo.type = VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_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.pGeometries = &accelStructBLDesc;
|
||||
|
||||
|
|
|
@ -429,10 +429,7 @@ FString VkShaderManager::GetTargetGlslVersion()
|
|||
{
|
||||
if (device->ApiVersion == VK_API_VERSION_1_2)
|
||||
{
|
||||
return R"(#version 460
|
||||
#extension GL_EXT_ray_tracing : enable
|
||||
#extension GL_EXT_ray_query : enable
|
||||
)";
|
||||
return "#version 460\n#extension GL_EXT_ray_query : enable\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -160,7 +160,7 @@ std::unique_ptr<VulkanShader> ShaderBuilder::create(const char *shadername, Vulk
|
|||
glslang::TShader shader(stage);
|
||||
shader.setStrings(sources, 1);
|
||||
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.setEnvTarget(glslang::EShTargetSpv, glslang::EShTargetSpv_1_4);
|
||||
|
|
|
@ -216,6 +216,7 @@ bool VulkanDevice::SupportsDeviceExtension(const char *ext) const
|
|||
void VulkanDevice::CreateAllocator()
|
||||
{
|
||||
VmaAllocatorCreateInfo allocinfo = {};
|
||||
allocinfo.vulkanApiVersion = ApiVersion;
|
||||
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;
|
||||
if (SupportsDeviceExtension(VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME))
|
||||
|
|
Loading…
Reference in a new issue