Started abstraction for VkBuffers

This commit is contained in:
antopilo
2024-12-25 15:43:34 -05:00
parent 34bee233e2
commit 724459e0dd
7 changed files with 121 additions and 13 deletions

View File

@@ -1,7 +1,8 @@
#include "VertexArray.h"
#include "src/Rendering/RenderCommand.h"
namespace Nuake {
namespace Nuake
{
VertexArray::VertexArray()
{
RenderCommand::GenVertexArray(m_RendererID);

View File

@@ -0,0 +1,45 @@
#pragma once
#include "src/Core/Core.h"
#include "src/Resource/UUID.h"
#include "VulkanAllocatedBuffer.h"
namespace Nuake
{
class GPUResources
{
private:
std::map<UUID, Ref<AllocatedBuffer>> Buffers;
public:
static GPUResources& Get()
{
static GPUResources instance;
return instance;
};
GPUResources() = default;
~GPUResources() = default;
bool AddBuffer(const UUID& id, const Ref<AllocatedBuffer>& buffer)
{
if (Buffers.find(id) == Buffers.end())
{
Buffers[id] = buffer;
return true;
}
return false;
}
Ref<AllocatedBuffer> GetBuffer(const UUID& id)
{
if (Buffers.find(id) != Buffers.end())
{
return Buffers[id];
}
return nullptr;
}
};
}

View File

@@ -8,17 +8,17 @@
using namespace Nuake;
AllocatedBuffer::AllocatedBuffer(size_t inSize, VkBufferUsageFlags inFlags, VmaMemoryUsage inUsage)
AllocatedBuffer::AllocatedBuffer(size_t inSize, BufferUsage inFlags, MemoryUsage inUsage)
{
// allocate buffer
VkBufferCreateInfo bufferInfo = { .sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };
bufferInfo.pNext = nullptr;
bufferInfo.size = inSize;
bufferInfo.usage = inFlags;
bufferInfo.usage = static_cast<VkBufferUsageFlags>(inFlags);
VmaAllocationCreateInfo vmaallocInfo = {};
vmaallocInfo.usage = inUsage;
vmaallocInfo.usage = static_cast<VmaMemoryUsage>(inUsage);
vmaallocInfo.flags = VMA_ALLOCATION_CREATE_MAPPED_BIT;
// allocate the buffer
@@ -36,8 +36,8 @@ GPUMeshBuffers::GPUMeshBuffers(std::vector<VkVertex> vertices, std::vector<uint3
const size_t vertexBufferSize = vertices.size() * sizeof(VkVertex);
const size_t indexBufferSize = indices.size() * sizeof(uint32_t);
vertexBuffer = AllocatedBuffer(vertexBufferSize, VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT,
VMA_MEMORY_USAGE_GPU_ONLY);
vertexBuffer = AllocatedBuffer(vertexBufferSize, BufferUsage::STORAGE_BUFFER | BufferUsage::TRANSFER_DST,
MemoryUsage::GPU_ONLY);
//find the adress of the vertex buffer
VkBufferDeviceAddressInfo deviceAddressInfo
@@ -49,6 +49,6 @@ GPUMeshBuffers::GPUMeshBuffers(std::vector<VkVertex> vertices, std::vector<uint3
vertexBufferAddress = vkGetBufferDeviceAddress(VkRenderer::Get().GetDevice(), &deviceAddressInfo);
//create index buffer
indexBuffer = AllocatedBuffer(indexBufferSize, VK_BUFFER_USAGE_INDEX_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT,
VMA_MEMORY_USAGE_GPU_ONLY);
indexBuffer = AllocatedBuffer(indexBufferSize, BufferUsage::INDEX_BUFFER | BufferUsage::TRANSFER_DST,
MemoryUsage::GPU_ONLY);
}

View File

@@ -11,6 +11,27 @@
namespace Nuake
{
enum BufferUsage
{
TRANSFER_SRC = 0x00000001,
TRANSFER_DST = 0x00000002,
INDEX_BUFFER = 0x00000040,
STORAGE_BUFFER = 0x00000020,
};
inline BufferUsage operator|(BufferUsage a, BufferUsage b)
{
return static_cast<BufferUsage>(static_cast<int>(a) | static_cast<int>(b));
}
enum MemoryUsage
{
GPU_ONLY = 1,
CPU_ONLY = 2,
CPU_TO_GPU = 3,
GPU_TO_CPU = 4,
};
class AllocatedBuffer
{
private:
@@ -19,7 +40,7 @@ namespace Nuake
VmaAllocationInfo Info;
public:
AllocatedBuffer(size_t size, VkBufferUsageFlags flags, VmaMemoryUsage usage);
AllocatedBuffer(size_t size, BufferUsage flags, MemoryUsage usage);
AllocatedBuffer() = default;
~AllocatedBuffer();
@@ -27,7 +48,6 @@ namespace Nuake
VmaAllocation GetAllocation() const { return Allocation; }
};
// push constants for our mesh object draws
struct GPUDrawPushConstants
{

View File

@@ -106,7 +106,7 @@ void VkRenderer::Initialize()
camData.Projection = Matrix4(1.0f);
// init camera buffer
CameraBuffer = AllocatedBuffer(sizeof(CameraData), VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT, VMA_MEMORY_USAGE_GPU_ONLY);
CameraBuffer = AllocatedBuffer(sizeof(CameraData), BufferUsage::STORAGE_BUFFER | BufferUsage::TRANSFER_DST, MemoryUsage::GPU_ONLY);
UploadCameraData(camData);
InitDescriptors();
@@ -273,7 +273,7 @@ void VkRenderer::InitCommands()
VK_CALL(vkAllocateCommandBuffers(Device, &cmdAllocInfo, &Frames[i].CommandBuffer));
Frames[i].CameraStagingBuffer = AllocatedBuffer(sizeof(CameraData), VK_BUFFER_USAGE_TRANSFER_SRC_BIT, VMA_MEMORY_USAGE_CPU_ONLY);
Frames[i].CameraStagingBuffer = AllocatedBuffer(sizeof(CameraData), BufferUsage::TRANSFER_SRC, MemoryUsage::CPU_ONLY);
}
VK_CALL(vkCreateCommandPool(Device, &cmdPoolInfo, nullptr, &ImguiCommandPool));
@@ -875,7 +875,7 @@ Ref<GPUMeshBuffers> VkRenderer::UploadMesh(std::vector<uint32_t> indices, std::v
const size_t indexBufferSize = indices.size() * sizeof(uint32_t);
auto newSurface = CreateRef<GPUMeshBuffers>(vertices, indices);
AllocatedBuffer staging = AllocatedBuffer(vertexBufferSize + indexBufferSize, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, VMA_MEMORY_USAGE_CPU_ONLY);
AllocatedBuffer staging = AllocatedBuffer(vertexBufferSize + indexBufferSize, BufferUsage::TRANSFER_SRC, MemoryUsage::CPU_ONLY);
void* mappedData;
vmaMapMemory(VulkanAllocator::Get().GetAllocator(), staging.GetAllocation(), &mappedData);

View File

@@ -0,0 +1,28 @@
#include "VulkanSceneRenderer.h"
using namespace Nuake;
VkSceneRenderer::VkSceneRenderer()
{
}
VkSceneRenderer::~VkSceneRenderer()
{
}
void VkSceneRenderer::Init()
{
}
void VkSceneRenderer::BeginScene()
{
}
void VkSceneRenderer::EndScene()
{
}

View File

@@ -0,0 +1,14 @@
#pragma once
namespace Nuake
{
class VkSceneRenderer
{
public:
VkSceneRenderer();
~VkSceneRenderer();
void Init();
void BeginScene();
void EndScene();
};
}