Remove RAM stored mesh data
Remove RAM stored vertices and indices data. It is now stored only in GPU memory.
This commit is contained in:
1 parent
0ef475e57e
commit
940bc7e512
7 files changed
+39
-112
No files matched your search
@@ -13,15 +13,6 @@
|
||||
|
||||
#define MAX_VULKAN_BUFFERS_COUNT 1
|
||||
|
||||
// // FIXME: Temporary array of vertices, for testing purposes
|
||||
// const std::vector<Vertex> vertices = {{{-0.5f, -0.5f, 0.0f}, {1.0f, 0.0f, 1.0f}},
|
||||
// {{0.5f, -0.5f, 0.0f}, {0.0f, 1.0f, 1.0f}},
|
||||
// {{0.5f, 0.5f, 0.0f}, {0.0f, 0.0f, 1.0f}},
|
||||
// {{-0.5f, 0.5f, 0.0f}, {1.0f, 0.0f, 1.0f}}};
|
||||
|
||||
// // FIXME: Temporary array of vertices, for testing purposes
|
||||
// std::vector<uint16_t> indices = {0, 1, 2, 2, 3, 0};
|
||||
|
||||
/* GPU visible buffer */
|
||||
struct rse_vulkan_buffer_t g_vertex_buffers[MAX_VULKAN_BUFFERS_COUNT];
|
||||
struct rse_vulkan_buffer_t g_index_buffers[MAX_VULKAN_BUFFERS_COUNT];
|
||||
@@ -29,23 +20,6 @@ struct rse_vulkan_buffer_t g_instance_buffers[MAX_VULKAN_BUFFERS_COUNT];
|
||||
|
||||
VkCommandPool g_command_pool = VK_NULL_HANDLE;
|
||||
|
||||
|
||||
static uint8_t create_buffer(const VkDeviceSize size,
|
||||
VkBufferUsageFlags buffer_usage,
|
||||
VmaMemoryUsage memory_usage,
|
||||
const VmaAllocationCreateFlags allocation_flags,
|
||||
struct rse_vulkan_buffer_t* buffer);
|
||||
static uint8_t copy_buffer(VkBuffer src,
|
||||
VkBuffer dst,
|
||||
VkDeviceSize size,
|
||||
VkDeviceSize dest_offset);
|
||||
|
||||
static uint8_t create_command_pools();
|
||||
static uint8_t create_vertex_buffer();
|
||||
static uint8_t create_index_buffer();
|
||||
static uint8_t create_uniform_buffer();
|
||||
static uint8_t allocate_command_buffers();
|
||||
|
||||
/**
|
||||
* @brief Helper function. Creates a buffer object
|
||||
*
|
||||
@@ -57,7 +31,7 @@ static uint8_t allocate_command_buffers();
|
||||
* @return uint8_t VULKAN_ERROR_NO_ERROR on success. Possible errors:
|
||||
* VULKAN_ERROR_COMMAND_BUFFER_ALLOCATION_FAILED
|
||||
*/
|
||||
uint8_t create_buffer(const VkDeviceSize size,
|
||||
static uint8_t create_buffer(const VkDeviceSize size,
|
||||
VkBufferUsageFlags buffer_usage,
|
||||
VmaMemoryUsage memory_usage,
|
||||
const VmaAllocationCreateFlags allocation_flags,
|
||||
@@ -106,7 +80,7 @@ uint8_t create_buffer(const VkDeviceSize size,
|
||||
* @param size Size of buffer to copy
|
||||
* @return uint8_t VULKAN_ERROR_NO_ERROR on success. Possible errors:
|
||||
*/
|
||||
uint8_t copy_buffer(VkBuffer src, VkBuffer dst, VkDeviceSize size, VkDeviceSize dest_offset)
|
||||
static uint8_t copy_buffer(VkBuffer src, VkBuffer dst, VkDeviceSize size, VkDeviceSize dest_offset)
|
||||
{
|
||||
/* Vulkan buffers can only be copied using command buffers */
|
||||
VkResult status = VK_FALSE;
|
||||
@@ -165,7 +139,7 @@ uint8_t copy_buffer(VkBuffer src, VkBuffer dst, VkDeviceSize size, VkDeviceSize
|
||||
* @return uint8_t VULKAN_ERROR_NO_ERROR on success. Possible errors:
|
||||
* VULKAN_ERROR_COMMAND_POOL_CREATION_FAILED
|
||||
*/
|
||||
uint8_t create_command_pools()
|
||||
static uint8_t create_command_pools()
|
||||
{
|
||||
VkCommandPoolCreateInfo create_info;
|
||||
|
||||
@@ -190,7 +164,7 @@ uint8_t create_command_pools()
|
||||
* VULKAN_ERROR_BUFFER_CREATION_FAILED
|
||||
* VULKAN_ERROR_VERTEX_BUFFER_MAPPING_FAILED
|
||||
*/
|
||||
uint8_t create_vertex_buffer()
|
||||
static uint8_t create_vertex_buffer()
|
||||
{
|
||||
VkDeviceSize buffer_size;
|
||||
|
||||
@@ -216,7 +190,7 @@ uint8_t create_vertex_buffer()
|
||||
* @return uint8_t VULKAN_ERROR_NO_ERROR on success. Possible errors:
|
||||
* VULKAN_ERROR_BUFFER_CREATION_FAILED
|
||||
*/
|
||||
uint8_t create_index_buffer()
|
||||
static uint8_t create_index_buffer()
|
||||
{
|
||||
VkDeviceSize buffer_size;
|
||||
|
||||
@@ -235,7 +209,7 @@ uint8_t create_index_buffer()
|
||||
return VULKAN_ERROR_NO_ERROR;
|
||||
}
|
||||
|
||||
uint8_t createInstanceBuffer()
|
||||
static uint8_t create_instance_buffer()
|
||||
{
|
||||
VkDeviceSize buffer_size;
|
||||
|
||||
@@ -261,7 +235,7 @@ uint8_t createInstanceBuffer()
|
||||
*
|
||||
* @return uint8_t VULKAN_ERROR_NO_ERROR on success. Possible errors:
|
||||
*/
|
||||
uint8_t create_uniform_buffer()
|
||||
static uint8_t create_uniform_buffer()
|
||||
{
|
||||
VkDeviceSize buffer_size = sizeof(struct rse_uniform_buffer_object_t);
|
||||
|
||||
@@ -280,7 +254,7 @@ uint8_t create_uniform_buffer()
|
||||
* @return uint8_t VULKAN_ERROR_NO_ERROR on success. Possible errors:
|
||||
* VULKAN_ERROR_COMMAND_BUFFER_ALLOCATION_FAILED
|
||||
*/
|
||||
uint8_t allocate_command_buffers()
|
||||
static uint8_t allocate_command_buffers()
|
||||
{
|
||||
VkCommandBufferAllocateInfo allocate_info;
|
||||
|
||||
@@ -300,10 +274,6 @@ uint8_t allocate_command_buffers()
|
||||
return VULKAN_ERROR_NO_ERROR;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Update uniform buffers
|
||||
*
|
||||
*/
|
||||
void update_uniform_buffers()
|
||||
{
|
||||
struct rse_uniform_buffer_object_t ubo = {};
|
||||
@@ -336,7 +306,6 @@ uint8_t update_mesh_buffers(const struct rse_vertex_t* vertices,
|
||||
size_t vertices_num,
|
||||
size_t indices_num)
|
||||
{
|
||||
// void* mapped_data;
|
||||
struct rse_vulkan_buffer_t staging_buffer;
|
||||
size_t vertices_size = sizeof(vertices[0]) * vertices_num;
|
||||
size_t indices_size = sizeof(indices[0]) * indices_num;
|
||||
@@ -408,7 +377,7 @@ uint8_t update_mesh_instances(struct rse_instance_data_t* instance_data)
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Records commands for provided command buffer
|
||||
* @brief Records commands for provided swapchain framebuffer
|
||||
*
|
||||
* @param command_buffer Command buffer, that will hold commands
|
||||
* @param image_index Image index
|
||||
@@ -464,8 +433,6 @@ uint8_t record_command_buffer(uint32_t image_index)
|
||||
VkBuffer vertex_buffers[] = {g_vertex_buffers[i].buffer};
|
||||
VkBuffer index_buffers = {g_index_buffers[i].buffer};
|
||||
VkBuffer instance_buffers[] = {g_instance_buffers[i].buffer};
|
||||
uint16_t* indices = get_mesh_indices(0); /* TODO: We need to take care of ALL meshes */
|
||||
struct rse_instance_data_t* instances = get_instance_data_for_mesh(0);
|
||||
|
||||
/* TODO: Figure out the offset */
|
||||
vkCmdBindVertexBuffers(command_buffer, 0, 1, vertex_buffers, offsets);
|
||||
@@ -494,7 +461,7 @@ uint8_t create_buffers()
|
||||
STATUS_CHECK(create_command_pools());
|
||||
STATUS_CHECK(create_vertex_buffer());
|
||||
STATUS_CHECK(create_index_buffer());
|
||||
STATUS_CHECK(createInstanceBuffer());
|
||||
STATUS_CHECK(create_instance_buffer());
|
||||
STATUS_CHECK(create_uniform_buffer());
|
||||
STATUS_CHECK(allocate_command_buffers());
|
||||
|
||||
|
||||
Reference in new issue
Block a user