Started abstraction for VkBuffers
This commit is contained in:
@@ -1,7 +1,8 @@
|
||||
#include "VertexArray.h"
|
||||
#include "src/Rendering/RenderCommand.h"
|
||||
|
||||
namespace Nuake {
|
||||
namespace Nuake
|
||||
{
|
||||
VertexArray::VertexArray()
|
||||
{
|
||||
RenderCommand::GenVertexArray(m_RendererID);
|
||||
|
||||
45
Nuake/src/Rendering/Vulkan/VkResources.h
Normal file
45
Nuake/src/Rendering/Vulkan/VkResources.h
Normal 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;
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
28
Nuake/src/Rendering/Vulkan/VulkanSceneRenderer.cpp
Normal file
28
Nuake/src/Rendering/Vulkan/VulkanSceneRenderer.cpp
Normal file
@@ -0,0 +1,28 @@
|
||||
#include "VulkanSceneRenderer.h"
|
||||
|
||||
using namespace Nuake;
|
||||
|
||||
VkSceneRenderer::VkSceneRenderer()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
VkSceneRenderer::~VkSceneRenderer()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void VkSceneRenderer::Init()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void VkSceneRenderer::BeginScene()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void VkSceneRenderer::EndScene()
|
||||
{
|
||||
|
||||
}
|
||||
14
Nuake/src/Rendering/Vulkan/VulkanSceneRenderer.h
Normal file
14
Nuake/src/Rendering/Vulkan/VulkanSceneRenderer.h
Normal file
@@ -0,0 +1,14 @@
|
||||
#pragma once
|
||||
namespace Nuake
|
||||
{
|
||||
class VkSceneRenderer
|
||||
{
|
||||
public:
|
||||
VkSceneRenderer();
|
||||
~VkSceneRenderer();
|
||||
|
||||
void Init();
|
||||
void BeginScene();
|
||||
void EndScene();
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user