Rename VkLightmap and VkRaytrace

This commit is contained in:
Magnus Norddahl 2023-12-06 13:54:49 +01:00
commit 98c209edbd
12 changed files with 110 additions and 114 deletions

View file

@ -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
)

View file

@ -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<SubmeshBufferLocation> 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;

View file

@ -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();

View file

@ -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<LevelMeshSurface*>& surfaces)
void VkLightmapper::Raytrace(const TArray<LevelMeshSurface*>& surfaces)
{
if (mesh && surfaces.Size() > 0)
{
@ -120,7 +120,7 @@ void VkLightmap::Raytrace(const TArray<LevelMeshSurface*>& surfaces)
}
}
void VkLightmap::SelectSurfaces(const TArray<LevelMeshSurface*>& surfaces)
void VkLightmapper::SelectSurfaces(const TArray<LevelMeshSurface*>& surfaces)
{
bakeImage.maxX = 0;
bakeImage.maxY = 0;
@ -154,7 +154,7 @@ void VkLightmap::SelectSurfaces(const TArray<LevelMeshSurface*>& 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;

View file

@ -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<LevelMeshSurface*>& surfaces);

View file

@ -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());
}

View file

@ -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"

View file

@ -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<LevelMeshSurface*>& surfaces)
{
GetLightmap()->Raytrace(surfaces);
GetLightmapper()->Raytrace(surfaces);
}
void VulkanRenderDevice::SetShadowMaps(const TArray<float>& lights, hwrenderer::LevelAABBTree* tree, bool newTree)

View file

@ -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<VkPostprocess> mPostprocess;
std::unique_ptr<VkDescriptorSetManager> mDescriptorSetManager;
std::unique_ptr<VkRenderPassManager> mRenderPassManager;
std::unique_ptr<VkRaytrace> mRaytrace;
std::unique_ptr<VkLightmap> mLightmap;
std::unique_ptr<VkLevelMesh> mLevelMesh;
std::unique_ptr<VkLightmapper> mLightmapper;
std::unique_ptr<VkRenderState> mRenderState;
VkRenderBuffers *mActiveRenderBuffers = nullptr;

View file

@ -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 <zvulkan/vulkanbuilders.h>
#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);

View file

@ -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()
{

View file

@ -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);