Create different buffer for uniform indexes that works for the vertex shader

This commit is contained in:
Magnus Norddahl 2023-10-20 21:21:08 +02:00
commit 9edfbcd10e
11 changed files with 85 additions and 15 deletions

View file

@ -49,6 +49,7 @@ void VkRaytrace::Reset()
{
auto deletelist = fb->GetCommands()->DrawDeleteList.get();
deletelist->Add(std::move(VertexBuffer));
deletelist->Add(std::move(UniformIndexBuffer));
deletelist->Add(std::move(IndexBuffer));
deletelist->Add(std::move(NodeBuffer));
deletelist->Add(std::move(SurfaceBuffer));
@ -146,6 +147,7 @@ void VkRaytrace::UploadMeshes(bool dynamicOnly)
{
const SubmeshBufferLocation& cur = locations[i];
transferBufferSize += cur.Submesh->MeshVertices.Size() * sizeof(FFlatVertex);
transferBufferSize += cur.Submesh->MeshUniformIndexes.Size() * sizeof(int);
transferBufferSize += cur.Submesh->MeshElements.Size() * sizeof(uint32_t);
transferBufferSize += cur.Submesh->Collision->get_nodes().size() * sizeof(CollisionNode);
transferBufferSize += cur.Submesh->MeshSurfaceIndexes.Size() * sizeof(int);
@ -217,6 +219,19 @@ void VkRaytrace::UploadMeshes(bool dynamicOnly)
datapos += copysize;
}
// Copy uniform indexes
for (unsigned int i = start; i < end; i++)
{
const SubmeshBufferLocation& cur = locations[i];
auto submesh = cur.Submesh;
size_t copysize = submesh->MeshUniformIndexes.Size() * sizeof(int);
memcpy(data + datapos, submesh->MeshUniformIndexes.Data(), copysize);
if (copysize > 0)
cmdbuffer->copyBuffer(transferBuffer.get(), UniformIndexBuffer.get(), datapos, cur.VertexOffset * sizeof(int), copysize);
datapos += copysize;
}
// Copy indexes
for (unsigned int i = start; i < end; i++)
{
@ -397,6 +412,14 @@ void VkRaytrace::CreateBuffers()
.DebugName("VertexBuffer")
.Create(fb->GetDevice());
UniformIndexBuffer = BufferBuilder()
.Usage(
VK_BUFFER_USAGE_VERTEX_BUFFER_BIT |
VK_BUFFER_USAGE_TRANSFER_DST_BIT)
.Size(GetMaxVertexBufferSize() * sizeof(int))
.DebugName("UniformIndexes")
.Create(fb->GetDevice());
IndexBuffer = BufferBuilder()
.Usage(
VK_BUFFER_USAGE_INDEX_BUFFER_BIT |