diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 874654605..62d8cd12b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -760,8 +760,8 @@ set (VULKAN_SOURCES common/rendering/vulkan/textures/vk_renderbuffers.cpp common/rendering/vulkan/textures/vk_texture.cpp common/rendering/vulkan/framebuffers/vk_framebuffer.cpp - common/rendering/vulkan/accelstructs/vk_raytrace.cpp - common/rendering/vulkan/accelstructs/vk_lightmap.cpp + common/rendering/vulkan/accelstructs/vk_levelmesh.cpp + common/rendering/vulkan/accelstructs/vk_lightmapper.cpp common/rendering/vulkan/accelstructs/halffloat.cpp ) diff --git a/src/common/rendering/vulkan/accelstructs/vk_raytrace.cpp b/src/common/rendering/vulkan/accelstructs/vk_levelmesh.cpp similarity index 97% rename from src/common/rendering/vulkan/accelstructs/vk_raytrace.cpp rename to src/common/rendering/vulkan/accelstructs/vk_levelmesh.cpp index a396c347d..aaa74ddc6 100644 --- a/src/common/rendering/vulkan/accelstructs/vk_raytrace.cpp +++ b/src/common/rendering/vulkan/accelstructs/vk_levelmesh.cpp @@ -20,7 +20,7 @@ ** */ -#include "vk_raytrace.h" +#include "vk_levelmesh.h" #include "zvulkan/vulkanbuilders.h" #include "vulkan/vk_renderdevice.h" #include "vulkan/commands/vk_commandbuffer.h" @@ -28,14 +28,14 @@ #include "hw_material.h" #include "texturemanager.h" -VkRaytrace::VkRaytrace(VulkanRenderDevice* fb) : fb(fb) +VkLevelMesh::VkLevelMesh(VulkanRenderDevice* fb) : fb(fb) { useRayQuery = fb->GetDevice()->SupportsExtension(VK_KHR_RAY_QUERY_EXTENSION_NAME) && fb->GetDevice()->PhysicalDevice.Features.RayQuery.rayQuery; SetLevelMesh(nullptr); } -void VkRaytrace::SetLevelMesh(LevelMesh* mesh) +void VkLevelMesh::SetLevelMesh(LevelMesh* mesh) { if (!mesh) mesh = &NullMesh; @@ -45,7 +45,7 @@ void VkRaytrace::SetLevelMesh(LevelMesh* mesh) CreateVulkanObjects(); } -void VkRaytrace::Reset() +void VkLevelMesh::Reset() { auto deletelist = fb->GetCommands()->DrawDeleteList.get(); deletelist->Add(std::move(VertexBuffer)); @@ -69,7 +69,7 @@ void VkRaytrace::Reset() deletelist->Add(std::move(TopLevelAS.AccelStruct)); } -void VkRaytrace::CreateVulkanObjects() +void VkLevelMesh::CreateVulkanObjects() { CreateBuffers(); UploadMeshes(false); @@ -81,7 +81,7 @@ void VkRaytrace::CreateVulkanObjects() } } -void VkRaytrace::BeginFrame() +void VkLevelMesh::BeginFrame() { UploadMeshes(true); if (useRayQuery) @@ -91,7 +91,7 @@ void VkRaytrace::BeginFrame() } } -void VkRaytrace::UploadMeshes(bool dynamicOnly) +void VkLevelMesh::UploadMeshes(bool dynamicOnly) { TArray locations(2); @@ -378,37 +378,37 @@ void VkRaytrace::UploadMeshes(bool dynamicOnly) .Execute(fb->GetCommands()->GetTransferCommands(), VK_PIPELINE_STAGE_TRANSFER_BIT, useRayQuery ? VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR : VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT); } -int VkRaytrace::GetMaxVertexBufferSize() +int VkLevelMesh::GetMaxVertexBufferSize() { return Mesh->StaticMesh->Mesh.Vertices.Size() + MaxDynamicVertices; } -int VkRaytrace::GetMaxIndexBufferSize() +int VkLevelMesh::GetMaxIndexBufferSize() { return Mesh->StaticMesh->Mesh.Elements.Size() + MaxDynamicIndexes; } -int VkRaytrace::GetMaxNodeBufferSize() +int VkLevelMesh::GetMaxNodeBufferSize() { return (int)Mesh->StaticMesh->Collision->get_nodes().size() + MaxDynamicNodes + 1; // + 1 for the merge root node } -int VkRaytrace::GetMaxSurfaceBufferSize() +int VkLevelMesh::GetMaxSurfaceBufferSize() { return Mesh->StaticMesh->GetSurfaceCount() + MaxDynamicSurfaces; } -int VkRaytrace::GetMaxUniformsBufferSize() +int VkLevelMesh::GetMaxUniformsBufferSize() { return Mesh->StaticMesh->Mesh.Uniforms.Size() + MaxDynamicUniforms; } -int VkRaytrace::GetMaxSurfaceIndexBufferSize() +int VkLevelMesh::GetMaxSurfaceIndexBufferSize() { return Mesh->StaticMesh->Mesh.SurfaceIndexes.Size() + MaxDynamicSurfaceIndexes; } -void VkRaytrace::CreateBuffers() +void VkLevelMesh::CreateBuffers() { VertexBuffer = BufferBuilder() .Usage( @@ -473,7 +473,7 @@ void VkRaytrace::CreateBuffers() .Create(fb->GetDevice()); } -VkRaytrace::BLAS VkRaytrace::CreateBLAS(LevelSubmesh* submesh, bool preferFastBuild, int vertexOffset, int indexOffset) +VkLevelMesh::BLAS VkLevelMesh::CreateBLAS(LevelSubmesh* submesh, bool preferFastBuild, int vertexOffset, int indexOffset) { BLAS blas; @@ -538,17 +538,17 @@ VkRaytrace::BLAS VkRaytrace::CreateBLAS(LevelSubmesh* submesh, bool preferFastBu return blas; } -void VkRaytrace::CreateStaticBLAS() +void VkLevelMesh::CreateStaticBLAS() { StaticBLAS = CreateBLAS(Mesh->StaticMesh.get(), false, 0, 0); } -void VkRaytrace::CreateDynamicBLAS() +void VkLevelMesh::CreateDynamicBLAS() { DynamicBLAS = CreateBLAS(Mesh->DynamicMesh.get(), true, Mesh->StaticMesh->Mesh.Vertices.Size(), Mesh->StaticMesh->Mesh.Elements.Size()); } -void VkRaytrace::CreateTopLevelAS() +void VkLevelMesh::CreateTopLevelAS() { auto deletelist = fb->GetCommands()->DrawDeleteList.get(); deletelist->Add(std::move(TopLevelAS.TransferBuffer)); @@ -648,7 +648,7 @@ void VkRaytrace::CreateTopLevelAS() .Execute(fb->GetCommands()->GetTransferCommands(), VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT); } -void VkRaytrace::UpdateDynamicBLAS() +void VkLevelMesh::UpdateDynamicBLAS() { // To do: should we reuse the buffers? @@ -660,7 +660,7 @@ void VkRaytrace::UpdateDynamicBLAS() DynamicBLAS = CreateBLAS(Mesh->DynamicMesh.get(), true, Mesh->StaticMesh->Mesh.Vertices.Size(), Mesh->StaticMesh->Mesh.Elements.Size()); } -void VkRaytrace::UpdateTopLevelAS() +void VkLevelMesh::UpdateTopLevelAS() { VkAccelerationStructureInstanceKHR instances[2] = {}; instances[0].transform.matrix[0][0] = 1.0f; diff --git a/src/common/rendering/vulkan/accelstructs/vk_raytrace.h b/src/common/rendering/vulkan/accelstructs/vk_levelmesh.h similarity index 98% rename from src/common/rendering/vulkan/accelstructs/vk_raytrace.h rename to src/common/rendering/vulkan/accelstructs/vk_levelmesh.h index 738ff92b5..cc4c33a98 100644 --- a/src/common/rendering/vulkan/accelstructs/vk_raytrace.h +++ b/src/common/rendering/vulkan/accelstructs/vk_levelmesh.h @@ -59,10 +59,10 @@ struct SubmeshBufferLocation int UniformsSize = 0; }; -class VkRaytrace +class VkLevelMesh { public: - VkRaytrace(VulkanRenderDevice* fb); + VkLevelMesh(VulkanRenderDevice* fb); void SetLevelMesh(LevelMesh* mesh); void BeginFrame(); diff --git a/src/common/rendering/vulkan/accelstructs/vk_lightmap.cpp b/src/common/rendering/vulkan/accelstructs/vk_lightmapper.cpp similarity index 93% rename from src/common/rendering/vulkan/accelstructs/vk_lightmap.cpp rename to src/common/rendering/vulkan/accelstructs/vk_lightmapper.cpp index b8fed8e67..675a02101 100644 --- a/src/common/rendering/vulkan/accelstructs/vk_lightmap.cpp +++ b/src/common/rendering/vulkan/accelstructs/vk_lightmapper.cpp @@ -1,10 +1,10 @@ -#include "vk_lightmap.h" +#include "vk_lightmapper.h" #include "vulkan/vk_renderdevice.h" #include "vulkan/textures/vk_texture.h" #include "vulkan/commands/vk_commandbuffer.h" #include "vulkan/descriptorsets/vk_descriptorset.h" -#include "vk_raytrace.h" +#include "vk_levelmesh.h" #include "zvulkan/vulkanbuilders.h" #include "halffloat.h" #include "filesystem.h" @@ -32,7 +32,7 @@ CVAR(Bool, lm_softshadows, true, 0); CVAR(Bool, lm_sunlight, true, 0); CVAR(Bool, lm_blur, true, 0); -VkLightmap::VkLightmap(VulkanRenderDevice* fb) : fb(fb) +VkLightmapper::VkLightmapper(VulkanRenderDevice* fb) : fb(fb) { useRayQuery = fb->GetDevice()->SupportsExtension(VK_KHR_RAY_QUERY_EXTENSION_NAME) && fb->GetDevice()->PhysicalDevice.Features.RayQuery.rayQuery; @@ -59,12 +59,12 @@ VkLightmap::VkLightmap(VulkanRenderDevice* fb) : fb(fb) } } -VkLightmap::~VkLightmap() +VkLightmapper::~VkLightmapper() { ReleaseResources(); } -void VkLightmap::ReleaseResources() +void VkLightmapper::ReleaseResources() { if (lights.Buffer) lights.Buffer->Unmap(); @@ -76,7 +76,7 @@ void VkLightmap::ReleaseResources() drawindexed.ConstantsBuffer->Unmap(); } -void VkLightmap::SetLevelMesh(LevelMesh* level) +void VkLightmapper::SetLevelMesh(LevelMesh* level) { mesh = level; UpdateAccelStructDescriptors(); @@ -86,14 +86,14 @@ void VkLightmap::SetLevelMesh(LevelMesh* level) lastSurfaceCount = 0; } -void VkLightmap::BeginFrame() +void VkLightmapper::BeginFrame() { lights.Pos = 0; lights.ResetCounter++; drawindexed.Pos = 0; } -void VkLightmap::Raytrace(const TArray& surfaces) +void VkLightmapper::Raytrace(const TArray& surfaces) { if (mesh && surfaces.Size() > 0) { @@ -120,7 +120,7 @@ void VkLightmap::Raytrace(const TArray& surfaces) } } -void VkLightmap::SelectSurfaces(const TArray& surfaces) +void VkLightmapper::SelectSurfaces(const TArray& surfaces) { bakeImage.maxX = 0; bakeImage.maxY = 0; @@ -154,7 +154,7 @@ void VkLightmap::SelectSurfaces(const TArray& surfaces) } } -void VkLightmap::Render() +void VkLightmapper::Render() { auto cmdbuffer = fb->GetCommands()->GetTransferCommands(); @@ -168,8 +168,8 @@ void VkLightmap::Render() .Execute(cmdbuffer); VkDeviceSize offset = 0; - cmdbuffer->bindVertexBuffers(0, 1, &fb->GetRaytrace()->GetVertexBuffer()->buffer, &offset); - cmdbuffer->bindIndexBuffer(fb->GetRaytrace()->GetIndexBuffer()->buffer, 0, VK_INDEX_TYPE_UINT32); + cmdbuffer->bindVertexBuffers(0, 1, &fb->GetLevelMesh()->GetVertexBuffer()->buffer, &offset); + cmdbuffer->bindIndexBuffer(fb->GetLevelMesh()->GetIndexBuffer()->buffer, 0, VK_INDEX_TYPE_UINT32); cmdbuffer->bindPipeline(VK_PIPELINE_BIND_POINT_GRAPHICS, raytrace.pipeline[GetRaytracePipelineIndex()].get()); cmdbuffer->bindDescriptorSet(VK_PIPELINE_BIND_POINT_GRAPHICS, raytrace.pipelineLayout.get(), 0, raytrace.descriptorSet0.get()); cmdbuffer->bindDescriptorSet(VK_PIPELINE_BIND_POINT_GRAPHICS, raytrace.pipelineLayout.get(), 1, raytrace.descriptorSet1.get()); @@ -291,7 +291,7 @@ void VkLightmap::Render() fb->GetCommands()->PopGroup(cmdbuffer); } -void VkLightmap::UploadUniforms() +void VkLightmapper::UploadUniforms() { Uniforms values = {}; values.SunDir = SwapYZ(mesh->SunDirection); @@ -309,7 +309,7 @@ void VkLightmap::UploadUniforms() .Execute(cmdbuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT); } -void VkLightmap::Resolve() +void VkLightmapper::Resolve() { auto cmdbuffer = fb->GetCommands()->GetTransferCommands(); @@ -341,7 +341,7 @@ void VkLightmap::Resolve() fb->GetCommands()->PopGroup(cmdbuffer); } -void VkLightmap::Blur() +void VkLightmapper::Blur() { auto cmdbuffer = fb->GetCommands()->GetTransferCommands(); @@ -402,7 +402,7 @@ void VkLightmap::Blur() fb->GetCommands()->PopGroup(cmdbuffer); } -void VkLightmap::CopyResult() +void VkLightmapper::CopyResult() { // Sort by destination uint32_t pixels = 0; @@ -536,7 +536,7 @@ void VkLightmap::CopyResult() fb->GetCommands()->PopGroup(cmdbuffer); } -void VkLightmap::CreateShaders() +void VkLightmapper::CreateShaders() { std::string prefix = "#version 460\r\n"; std::string traceprefix = "#version 460\r\n"; @@ -563,8 +563,8 @@ void VkLightmap::CreateShaders() .AddSource("vert_raytrace.glsl", LoadPrivateShaderLump("shaders/lightmap/vert_raytrace.glsl").GetChars()) .OnIncludeLocal(onIncludeLocal) .OnIncludeSystem(onIncludeSystem) - .DebugName("VkLightmap.VertRaytrace") - .Create("VkLightmap.VertRaytrace", fb->GetDevice()); + .DebugName("VkLightmapper.VertRaytrace") + .Create("VkLightmapper.VertRaytrace", fb->GetDevice()); shaders.vertScreenquad = ShaderBuilder() .Type(ShaderType::Vertex) @@ -572,8 +572,8 @@ void VkLightmap::CreateShaders() .AddSource("vert_screenquad.glsl", LoadPrivateShaderLump("shaders/lightmap/vert_screenquad.glsl").GetChars()) .OnIncludeLocal(onIncludeLocal) .OnIncludeSystem(onIncludeSystem) - .DebugName("VkLightmap.VertScreenquad") - .Create("VkLightmap.VertScreenquad", fb->GetDevice()); + .DebugName("VkLightmapper.VertScreenquad") + .Create("VkLightmapper.VertScreenquad", fb->GetDevice()); shaders.vertCopy = ShaderBuilder() .Type(ShaderType::Vertex) @@ -581,8 +581,8 @@ void VkLightmap::CreateShaders() .AddSource("vert_copy.glsl", LoadPrivateShaderLump("shaders/lightmap/vert_copy.glsl").GetChars()) .OnIncludeLocal(onIncludeLocal) .OnIncludeSystem(onIncludeSystem) - .DebugName("VkLightmap.VertCopy") - .Create("VkLightmap.VertCopy", fb->GetDevice()); + .DebugName("VkLightmapper.VertCopy") + .Create("VkLightmapper.VertCopy", fb->GetDevice()); for (int i = 0; i < 8; i++) { @@ -600,8 +600,8 @@ void VkLightmap::CreateShaders() .AddSource("frag_raytrace.glsl", LoadPrivateShaderLump("shaders/lightmap/frag_raytrace.glsl").GetChars()) .OnIncludeLocal(onIncludeLocal) .OnIncludeSystem(onIncludeSystem) - .DebugName("VkLightmap.FragRaytrace") - .Create("VkLightmap.FragRaytrace", fb->GetDevice()); + .DebugName("VkLightmapper.FragRaytrace") + .Create("VkLightmapper.FragRaytrace", fb->GetDevice()); } shaders.fragResolve = ShaderBuilder() @@ -610,8 +610,8 @@ void VkLightmap::CreateShaders() .AddSource("frag_resolve.glsl", LoadPrivateShaderLump("shaders/lightmap/frag_resolve.glsl").GetChars()) .OnIncludeLocal(onIncludeLocal) .OnIncludeSystem(onIncludeSystem) - .DebugName("VkLightmap.FragResolve") - .Create("VkLightmap.FragResolve", fb->GetDevice()); + .DebugName("VkLightmapper.FragResolve") + .Create("VkLightmapper.FragResolve", fb->GetDevice()); shaders.fragBlur[0] = ShaderBuilder() .Type(ShaderType::Fragment) @@ -619,8 +619,8 @@ void VkLightmap::CreateShaders() .AddSource("frag_blur.glsl", LoadPrivateShaderLump("shaders/lightmap/frag_blur.glsl").GetChars()) .OnIncludeLocal(onIncludeLocal) .OnIncludeSystem(onIncludeSystem) - .DebugName("VkLightmap.FragBlur") - .Create("VkLightmap.FragBlur", fb->GetDevice()); + .DebugName("VkLightmapper.FragBlur") + .Create("VkLightmapper.FragBlur", fb->GetDevice()); shaders.fragBlur[1] = ShaderBuilder() .Type(ShaderType::Fragment) @@ -628,8 +628,8 @@ void VkLightmap::CreateShaders() .AddSource("frag_blur.glsl", LoadPrivateShaderLump("shaders/lightmap/frag_blur.glsl").GetChars()) .OnIncludeLocal(onIncludeLocal) .OnIncludeSystem(onIncludeSystem) - .DebugName("VkLightmap.FragBlur") - .Create("VkLightmap.FragBlur", fb->GetDevice()); + .DebugName("VkLightmapper.FragBlur") + .Create("VkLightmapper.FragBlur", fb->GetDevice()); shaders.fragCopy = ShaderBuilder() .Type(ShaderType::Fragment) @@ -637,11 +637,11 @@ void VkLightmap::CreateShaders() .AddSource("frag_copy.glsl", LoadPrivateShaderLump("shaders/lightmap/frag_copy.glsl").GetChars()) .OnIncludeLocal(onIncludeLocal) .OnIncludeSystem(onIncludeSystem) - .DebugName("VkLightmap.FragCopy") - .Create("VkLightmap.FragCopy", fb->GetDevice()); + .DebugName("VkLightmapper.FragCopy") + .Create("VkLightmapper.FragCopy", fb->GetDevice()); } -int VkLightmap::GetRaytracePipelineIndex() +int VkLightmapper::GetRaytracePipelineIndex() { int index = 0; if (lm_softshadows && useRayQuery) @@ -653,14 +653,14 @@ int VkLightmap::GetRaytracePipelineIndex() return index; } -FString VkLightmap::LoadPrivateShaderLump(const char* lumpname) +FString VkLightmapper::LoadPrivateShaderLump(const char* lumpname) { int lump = fileSystem.CheckNumForFullName(lumpname, 0); if (lump == -1) I_Error("Unable to load '%s'", lumpname); return GetStringFromLump(lump); } -FString VkLightmap::LoadPublicShaderLump(const char* lumpname) +FString VkLightmapper::LoadPublicShaderLump(const char* lumpname) { int lump = fileSystem.CheckNumForFullName(lumpname, 0); if (lump == -1) lump = fileSystem.CheckNumForFullName(lumpname); @@ -668,7 +668,7 @@ FString VkLightmap::LoadPublicShaderLump(const char* lumpname) return GetStringFromLump(lump); } -ShaderIncludeResult VkLightmap::OnInclude(FString headerName, FString includerName, size_t depth, bool system) +ShaderIncludeResult VkLightmapper::OnInclude(FString headerName, FString includerName, size_t depth, bool system) { if (depth > 8) I_Error("Too much include recursion!"); @@ -692,7 +692,7 @@ ShaderIncludeResult VkLightmap::OnInclude(FString headerName, FString includerNa return ShaderIncludeResult(headerName.GetChars(), code.GetChars()); } -void VkLightmap::CreateRaytracePipeline() +void VkLightmapper::CreateRaytracePipeline() { raytrace.descriptorSetLayout0 = DescriptorSetLayoutBuilder() .AddBinding(0, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 1, VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT) @@ -803,38 +803,38 @@ void VkLightmap::CreateRaytracePipeline() raytrace.descriptorSet1->SetDebugName("raytrace.descriptorSet1"); } -void VkLightmap::UpdateAccelStructDescriptors() +void VkLightmapper::UpdateAccelStructDescriptors() { if (useRayQuery) { WriteDescriptors() - .AddAccelerationStructure(raytrace.descriptorSet1.get(), 0, fb->GetRaytrace()->GetAccelStruct()) - .AddBuffer(raytrace.descriptorSet1.get(), 1, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, fb->GetRaytrace()->GetVertexBuffer()) - .AddBuffer(raytrace.descriptorSet1.get(), 2, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, fb->GetRaytrace()->GetIndexBuffer()) + .AddAccelerationStructure(raytrace.descriptorSet1.get(), 0, fb->GetLevelMesh()->GetAccelStruct()) + .AddBuffer(raytrace.descriptorSet1.get(), 1, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, fb->GetLevelMesh()->GetVertexBuffer()) + .AddBuffer(raytrace.descriptorSet1.get(), 2, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, fb->GetLevelMesh()->GetIndexBuffer()) .Execute(fb->GetDevice()); } else { WriteDescriptors() - .AddBuffer(raytrace.descriptorSet1.get(), 0, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, fb->GetRaytrace()->GetNodeBuffer()) - .AddBuffer(raytrace.descriptorSet1.get(), 1, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, fb->GetRaytrace()->GetVertexBuffer()) - .AddBuffer(raytrace.descriptorSet1.get(), 2, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, fb->GetRaytrace()->GetIndexBuffer()) + .AddBuffer(raytrace.descriptorSet1.get(), 0, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, fb->GetLevelMesh()->GetNodeBuffer()) + .AddBuffer(raytrace.descriptorSet1.get(), 1, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, fb->GetLevelMesh()->GetVertexBuffer()) + .AddBuffer(raytrace.descriptorSet1.get(), 2, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, fb->GetLevelMesh()->GetIndexBuffer()) .Execute(fb->GetDevice()); } WriteDescriptors() .AddBuffer(raytrace.descriptorSet0.get(), 0, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, uniforms.Buffer.get(), 0, sizeof(Uniforms)) - .AddBuffer(raytrace.descriptorSet0.get(), 1, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, fb->GetRaytrace()->GetSurfaceIndexBuffer()) - .AddBuffer(raytrace.descriptorSet0.get(), 2, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, fb->GetRaytrace()->GetSurfaceBuffer()) + .AddBuffer(raytrace.descriptorSet0.get(), 1, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, fb->GetLevelMesh()->GetSurfaceIndexBuffer()) + .AddBuffer(raytrace.descriptorSet0.get(), 2, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, fb->GetLevelMesh()->GetSurfaceBuffer()) .AddBuffer(raytrace.descriptorSet0.get(), 3, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, lights.Buffer.get()) - .AddBuffer(raytrace.descriptorSet0.get(), 4, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, fb->GetRaytrace()->GetPortalBuffer()) + .AddBuffer(raytrace.descriptorSet0.get(), 4, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, fb->GetLevelMesh()->GetPortalBuffer()) #ifdef USE_DRAWINDIRECT .AddBuffer(raytrace.descriptorSet0.get(), 5, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, drawindexed.ConstantsBuffer.get(), 0, drawindexed.BufferSize * sizeof(LightmapRaytracePC)) #endif .Execute(fb->GetDevice()); } -void VkLightmap::CreateResolvePipeline() +void VkLightmapper::CreateResolvePipeline() { resolve.descriptorSetLayout = DescriptorSetLayoutBuilder() .AddBinding(0, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, VK_SHADER_STAGE_FRAGMENT_BIT) @@ -887,7 +887,7 @@ void VkLightmap::CreateResolvePipeline() .Create(fb->GetDevice()); } -void VkLightmap::CreateBlurPipeline() +void VkLightmapper::CreateBlurPipeline() { blur.descriptorSetLayout = DescriptorSetLayoutBuilder() .AddBinding(0, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, VK_SHADER_STAGE_FRAGMENT_BIT) @@ -943,7 +943,7 @@ void VkLightmap::CreateBlurPipeline() .Create(fb->GetDevice()); } -void VkLightmap::CreateCopyPipeline() +void VkLightmapper::CreateCopyPipeline() { copy.descriptorSetLayout = DescriptorSetLayoutBuilder() .AddBinding(0, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, VK_SHADER_STAGE_FRAGMENT_BIT) @@ -999,7 +999,7 @@ void VkLightmap::CreateCopyPipeline() .Create(fb->GetDevice()); } -void VkLightmap::CreateBakeImage() +void VkLightmapper::CreateBakeImage() { int width = bakeImageSize; int height = bakeImageSize; @@ -1084,7 +1084,7 @@ void VkLightmap::CreateBakeImage() .Execute(fb->GetDevice()); } -void VkLightmap::CreateUniformBuffer() +void VkLightmapper::CreateUniformBuffer() { VkDeviceSize align = fb->GetDevice()->PhysicalDevice.Properties.Properties.limits.minUniformBufferOffsetAlignment; uniforms.StructStride = (sizeof(Uniforms) + align - 1) / align * align; @@ -1102,7 +1102,7 @@ void VkLightmap::CreateUniformBuffer() .Create(fb->GetDevice()); } -void VkLightmap::CreateLightBuffer() +void VkLightmapper::CreateLightBuffer() { size_t size = sizeof(LightInfo) * lights.BufferSize; @@ -1121,7 +1121,7 @@ void VkLightmap::CreateLightBuffer() lights.Pos = 0; } -void VkLightmap::CreateTileBuffer() +void VkLightmapper::CreateTileBuffer() { size_t size = sizeof(CopyTileInfo) * copytiles.BufferSize; @@ -1139,7 +1139,7 @@ void VkLightmap::CreateTileBuffer() copytiles.Tiles = (CopyTileInfo*)copytiles.Buffer->Map(0, size); } -void VkLightmap::CreateDrawIndexedBuffer() +void VkLightmapper::CreateDrawIndexedBuffer() { size_t size1 = sizeof(VkDrawIndexedIndirectCommand) * drawindexed.BufferSize; size_t size2 = sizeof(LightmapRaytracePC) * drawindexed.BufferSize; diff --git a/src/common/rendering/vulkan/accelstructs/vk_lightmap.h b/src/common/rendering/vulkan/accelstructs/vk_lightmapper.h similarity index 98% rename from src/common/rendering/vulkan/accelstructs/vk_lightmap.h rename to src/common/rendering/vulkan/accelstructs/vk_lightmapper.h index 13240c1db..34b8572cf 100644 --- a/src/common/rendering/vulkan/accelstructs/vk_lightmap.h +++ b/src/common/rendering/vulkan/accelstructs/vk_lightmapper.h @@ -119,11 +119,11 @@ struct CopyTileInfo static_assert(sizeof(CopyTileInfo) == sizeof(int32_t) * 8); -class VkLightmap +class VkLightmapper { public: - VkLightmap(VulkanRenderDevice* fb); - ~VkLightmap(); + VkLightmapper(VulkanRenderDevice* fb); + ~VkLightmapper(); void BeginFrame(); void Raytrace(const TArray& surfaces); diff --git a/src/common/rendering/vulkan/descriptorsets/vk_descriptorset.cpp b/src/common/rendering/vulkan/descriptorsets/vk_descriptorset.cpp index 174e72f09..11ff57252 100644 --- a/src/common/rendering/vulkan/descriptorsets/vk_descriptorset.cpp +++ b/src/common/rendering/vulkan/descriptorsets/vk_descriptorset.cpp @@ -22,7 +22,7 @@ #include "vk_descriptorset.h" #include "vulkan/vk_renderdevice.h" -#include "vulkan/accelstructs/vk_raytrace.h" +#include "vulkan/accelstructs/vk_levelmesh.h" #include "vulkan/shaders/vk_shader.h" #include "vulkan/samplers/vk_samplers.h" #include "vulkan/textures/vk_renderbuffers.h" @@ -91,7 +91,7 @@ void VkDescriptorSetManager::UpdateLevelMeshSet() WriteDescriptors() .AddBuffer(LevelMesh.Set.get(), 0, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, rsbuffers->Viewpoint.UBO.get(), 0, sizeof(HWViewpointUniforms)) .AddBuffer(LevelMesh.Set.get(), 1, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, rsbuffers->MatrixBuffer->UBO(), 0, sizeof(MatricesUBO)) - .AddBuffer(LevelMesh.Set.get(), 2, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, fb->GetRaytrace()->GetSurfaceUniformsBuffer()) + .AddBuffer(LevelMesh.Set.get(), 2, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, fb->GetLevelMesh()->GetSurfaceUniformsBuffer()) .AddBuffer(LevelMesh.Set.get(), 3, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, rsbuffers->Lightbuffer.UBO.get(), 0, sizeof(LightBufferUBO)) .AddBuffer(LevelMesh.Set.get(), 4, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, rsbuffers->Bonebuffer.SSO.get()) .Execute(fb->GetDevice()); @@ -113,13 +113,13 @@ void VkDescriptorSetManager::UpdateFixedSet() update.AddCombinedImageSampler(Fixed.Set.get(), 1, fb->GetTextureManager()->Lightmap.View.get(), fb->GetSamplerManager()->LightmapSampler.get(), VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL); if (fb->GetDevice()->SupportsExtension(VK_KHR_RAY_QUERY_EXTENSION_NAME) && fb->GetDevice()->PhysicalDevice.Features.RayQuery.rayQuery) { - update.AddAccelerationStructure(Fixed.Set.get(), 2, fb->GetRaytrace()->GetAccelStruct()); + update.AddAccelerationStructure(Fixed.Set.get(), 2, fb->GetLevelMesh()->GetAccelStruct()); } else { - update.AddBuffer(Fixed.Set.get(), 2, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, fb->GetRaytrace()->GetNodeBuffer()); - update.AddBuffer(Fixed.Set.get(), 3, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, fb->GetRaytrace()->GetVertexBuffer()); - update.AddBuffer(Fixed.Set.get(), 4, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, fb->GetRaytrace()->GetIndexBuffer()); + update.AddBuffer(Fixed.Set.get(), 2, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, fb->GetLevelMesh()->GetNodeBuffer()); + update.AddBuffer(Fixed.Set.get(), 3, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, fb->GetLevelMesh()->GetVertexBuffer()); + update.AddBuffer(Fixed.Set.get(), 4, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, fb->GetLevelMesh()->GetIndexBuffer()); } update.Execute(fb->GetDevice()); } diff --git a/src/common/rendering/vulkan/pipelines/vk_renderpass.cpp b/src/common/rendering/vulkan/pipelines/vk_renderpass.cpp index 0e8732609..02f9352e2 100644 --- a/src/common/rendering/vulkan/pipelines/vk_renderpass.cpp +++ b/src/common/rendering/vulkan/pipelines/vk_renderpass.cpp @@ -24,7 +24,7 @@ #include "vk_pprenderpass.h" #include "vulkan/vk_renderstate.h" #include "vulkan/vk_renderdevice.h" -#include "vulkan/accelstructs/vk_raytrace.h" +#include "vulkan/accelstructs/vk_levelmesh.h" #include "vulkan/descriptorsets/vk_descriptorset.h" #include "vulkan/textures/vk_renderbuffers.h" #include "vulkan/samplers/vk_samplers.h" diff --git a/src/common/rendering/vulkan/vk_renderdevice.cpp b/src/common/rendering/vulkan/vk_renderdevice.cpp index ded43d963..eed712e7d 100644 --- a/src/common/rendering/vulkan/vk_renderdevice.cpp +++ b/src/common/rendering/vulkan/vk_renderdevice.cpp @@ -43,8 +43,8 @@ #include "vk_renderdevice.h" #include "vulkan/vk_renderstate.h" #include "vulkan/vk_postprocess.h" -#include "vulkan/accelstructs/vk_raytrace.h" -#include "vulkan/accelstructs/vk_lightmap.h" +#include "vulkan/accelstructs/vk_levelmesh.h" +#include "vulkan/accelstructs/vk_lightmapper.h" #include "vulkan/pipelines/vk_renderpass.h" #include "vulkan/descriptorsets/vk_descriptorset.h" #include "vulkan/shaders/vk_shader.h" @@ -211,8 +211,8 @@ void VulkanRenderDevice::InitializeState() mPostprocess.reset(new VkPostprocess(this)); mDescriptorSetManager.reset(new VkDescriptorSetManager(this)); mRenderPassManager.reset(new VkRenderPassManager(this)); - mRaytrace.reset(new VkRaytrace(this)); - mLightmap.reset(new VkLightmap(this)); + mLevelMesh.reset(new VkLevelMesh(this)); + mLightmapper.reset(new VkLightmapper(this)); mBufferManager->Init(); @@ -480,12 +480,12 @@ void VulkanRenderDevice::BeginFrame() if (levelMeshChanged) { levelMeshChanged = false; - mRaytrace->SetLevelMesh(levelMesh); + mLevelMesh->SetLevelMesh(levelMesh); if (levelMesh && levelMesh->StaticMesh->GetSurfaceCount() > 0) { GetTextureManager()->CreateLightmap(levelMesh->StaticMesh->LMTextureSize, levelMesh->StaticMesh->LMTextureCount, std::move(levelMesh->StaticMesh->LMTextureData)); - GetLightmap()->SetLevelMesh(levelMesh); + GetLightmapper()->SetLevelMesh(levelMesh); } } @@ -496,8 +496,8 @@ void VulkanRenderDevice::BeginFrame() mSaveBuffers->BeginFrame(SAVEPICWIDTH, SAVEPICHEIGHT, SAVEPICWIDTH, SAVEPICHEIGHT); mRenderState->BeginFrame(); mDescriptorSetManager->BeginFrame(); - mRaytrace->BeginFrame(); - mLightmap->BeginFrame(); + mLevelMesh->BeginFrame(); + mLightmapper->BeginFrame(); } void VulkanRenderDevice::Draw2D() @@ -555,7 +555,7 @@ void VulkanRenderDevice::SetLevelMesh(LevelMesh* mesh) void VulkanRenderDevice::UpdateLightmaps(const TArray& surfaces) { - GetLightmap()->Raytrace(surfaces); + GetLightmapper()->Raytrace(surfaces); } void VulkanRenderDevice::SetShadowMaps(const TArray& lights, hwrenderer::LevelAABBTree* tree, bool newTree) diff --git a/src/common/rendering/vulkan/vk_renderdevice.h b/src/common/rendering/vulkan/vk_renderdevice.h index 25ab31997..d790ffc39 100644 --- a/src/common/rendering/vulkan/vk_renderdevice.h +++ b/src/common/rendering/vulkan/vk_renderdevice.h @@ -14,8 +14,8 @@ class VkCommandBufferManager; class VkDescriptorSetManager; class VkRenderPassManager; class VkFramebufferManager; -class VkRaytrace; -class VkLightmap; +class VkLevelMesh; +class VkLightmapper; class VkRenderState; class VkStreamBuffer; class VkHardwareDataBuffer; @@ -40,8 +40,8 @@ public: VkFramebufferManager* GetFramebufferManager() { return mFramebufferManager.get(); } VkDescriptorSetManager* GetDescriptorSetManager() { return mDescriptorSetManager.get(); } VkRenderPassManager *GetRenderPassManager() { return mRenderPassManager.get(); } - VkRaytrace* GetRaytrace() { return mRaytrace.get(); } - VkLightmap* GetLightmap() { return mLightmap.get(); } + VkLevelMesh* GetLevelMesh() { return mLevelMesh.get(); } + VkLightmapper* GetLightmapper() { return mLightmapper.get(); } VkRenderState *GetRenderState() { return mRenderState.get(); } VkPostprocess *GetPostprocess() { return mPostprocess.get(); } VkRenderBuffers *GetBuffers() { return mActiveRenderBuffers; } @@ -112,8 +112,8 @@ private: std::unique_ptr mPostprocess; std::unique_ptr mDescriptorSetManager; std::unique_ptr mRenderPassManager; - std::unique_ptr mRaytrace; - std::unique_ptr mLightmap; + std::unique_ptr mLevelMesh; + std::unique_ptr mLightmapper; std::unique_ptr mRenderState; VkRenderBuffers *mActiveRenderBuffers = nullptr; diff --git a/src/common/rendering/vulkan/vk_renderstate.cpp b/src/common/rendering/vulkan/vk_renderstate.cpp index 3fba56289..51befe73e 100644 --- a/src/common/rendering/vulkan/vk_renderstate.cpp +++ b/src/common/rendering/vulkan/vk_renderstate.cpp @@ -28,7 +28,7 @@ #include "vulkan/descriptorsets/vk_descriptorset.h" #include "vulkan/textures/vk_renderbuffers.h" #include "vulkan/textures/vk_hwtexture.h" -#include "vulkan/accelstructs/vk_raytrace.h" +#include "vulkan/accelstructs/vk_levelmesh.h" #include #include "hw_skydome.h" @@ -845,17 +845,17 @@ void VkRenderState::ApplyLevelMesh() ApplyDepthBias(); mNeedApply = true; - VkBuffer vertexBuffers[2] = { fb->GetRaytrace()->GetVertexBuffer()->buffer, fb->GetRaytrace()->GetUniformIndexBuffer()->buffer }; + VkBuffer vertexBuffers[2] = { fb->GetLevelMesh()->GetVertexBuffer()->buffer, fb->GetLevelMesh()->GetUniformIndexBuffer()->buffer }; VkDeviceSize vertexBufferOffsets[] = { 0, 0 }; mCommandBuffer->bindVertexBuffers(0, 2, vertexBuffers, vertexBufferOffsets); - mCommandBuffer->bindIndexBuffer(fb->GetRaytrace()->GetIndexBuffer()->buffer, 0, VK_INDEX_TYPE_UINT32); + mCommandBuffer->bindIndexBuffer(fb->GetLevelMesh()->GetIndexBuffer()->buffer, 0, VK_INDEX_TYPE_UINT32); } void VkRenderState::DrawLevelMeshDepthPass() { ApplyLevelMesh(); - auto submesh = fb->GetRaytrace()->GetMesh()->StaticMesh.get(); + auto submesh = fb->GetLevelMesh()->GetMesh()->StaticMesh.get(); for (LevelSubmeshDrawRange& range : submesh->DrawList) { DrawLevelMeshRange(mCommandBuffer, fb->GetLevelMeshPipelineKey(range.PipelineID), range.Start, range.Count, true); @@ -872,7 +872,7 @@ void VkRenderState::DrawLevelMeshOpaquePass() { ApplyLevelMesh(); - auto submesh = fb->GetRaytrace()->GetMesh()->StaticMesh.get(); + auto submesh = fb->GetLevelMesh()->GetMesh()->StaticMesh.get(); for (LevelSubmeshDrawRange& range : submesh->DrawList) { DrawLevelMeshRange(mCommandBuffer, fb->GetLevelMeshPipelineKey(range.PipelineID), range.Start, range.Count, false); diff --git a/src/rendering/hwrenderer/doom_levelmesh.cpp b/src/rendering/hwrenderer/doom_levelmesh.cpp index 2e743a920..7001b0433 100644 --- a/src/rendering/hwrenderer/doom_levelmesh.cpp +++ b/src/rendering/hwrenderer/doom_levelmesh.cpp @@ -9,8 +9,6 @@ #include "g_levellocals.h" #include "a_dynlight.h" #include "hw_renderstate.h" -#include "common/rendering/vulkan/accelstructs/vk_lightmap.h" -#include "common/rendering/vulkan/accelstructs/halffloat.h" static bool RequireLevelMesh() { diff --git a/src/rendering/hwrenderer/doom_levelsubmesh.cpp b/src/rendering/hwrenderer/doom_levelsubmesh.cpp index 1654296c5..97edf4e04 100644 --- a/src/rendering/hwrenderer/doom_levelsubmesh.cpp +++ b/src/rendering/hwrenderer/doom_levelsubmesh.cpp @@ -14,8 +14,6 @@ #include "hwrenderer/scene/hw_walldispatcher.h" #include "hwrenderer/scene/hw_flatdispatcher.h" #include "common/rendering/hwrenderer/data/hw_meshbuilder.h" -#include "common/rendering/vulkan/accelstructs/vk_lightmap.h" -#include "common/rendering/vulkan/accelstructs/halffloat.h" VSMatrix GetPlaneTextureRotationMatrix(FGameTexture* gltexture, const sector_t* sector, int plane); void GetTexCoordInfo(FGameTexture* tex, FTexCoordInfo* tci, side_t* side, int texpos);