About Social Code
aboutsummaryrefslogtreecommitdiff
path: root/src/frygon/vulkan/fgvk_cmd_buffer.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/frygon/vulkan/fgvk_cmd_buffer.c')
-rw-r--r--src/frygon/vulkan/fgvk_cmd_buffer.c93
1 files changed, 93 insertions, 0 deletions
diff --git a/src/frygon/vulkan/fgvk_cmd_buffer.c b/src/frygon/vulkan/fgvk_cmd_buffer.c
new file mode 100644
index 00000000000..181a8f8e819
--- /dev/null
+++ b/src/frygon/vulkan/fgvk_cmd_buffer.c
@@ -0,0 +1,93 @@
+/*
+ * Copyright © 2025 Lucas Francisco Fryzek
+ * SPDX-License-Identifier: MIT
+ */
+#include "fgvk_cmd_buffer.h"
+
+#include "fgvk_cmd_pool.h"
+
+static VkResult
+fgvk_create_cmd_buffer(struct vk_command_pool *vk_pool,
+ VkCommandBufferLevel level,
+ struct vk_command_buffer **cmd_buffer_out)
+{
+ struct fgvk_cmd_pool *pool = container_of(vk_pool, struct fgvk_cmd_pool, vk);
+ struct fgvk_device *dev = fgvk_cmd_pool_device(pool);
+ struct fgvk_cmd_buffer *cmd;
+ VkResult result;
+
+ cmd = vk_zalloc(&pool->vk.alloc, sizeof(*cmd), 8,
+ VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
+
+ if (cmd == NULL)
+ return vk_error(dev, VK_ERROR_OUT_OF_HOST_MEMORY);
+
+ result = vk_command_buffer_init(&pool->vk, &cmd->vk,
+ &fgvk_cmd_buffer_ops, level);
+ if (result != VK_SUCCESS) {
+ vk_free(&pool->vk.alloc, cmd);
+ return result;
+ }
+
+ cmd->vk.dynamic_graphics_state.vi = &cmd->state.gfx._dynamic_vi;
+ cmd->vk.dynamic_graphics_state.ms.sample_locations = &cmd->state.gfx._dynamic_sl;
+
+ *cmd_buffer_out = &cmd->vk;
+
+ return VK_SUCCESS;
+}
+
+static void
+fgvk_reset_cmd_buffer(struct vk_command_buffer *vk_cmd_buffer,
+ UNUSED VkCommandBufferResetFlags flags)
+{
+ struct fgvk_cmd_buffer *cmd =
+ container_of(vk_cmd_buffer, struct fgvk_cmd_buffer, vk);
+
+ vk_command_buffer_reset(&cmd->vk);
+}
+
+static void
+fgvk_destroy_cmd_buffer(struct vk_command_buffer *vk_cmd_buffer)
+{
+ struct fgvk_cmd_buffer *cmd =
+ container_of(vk_cmd_buffer, struct fgvk_cmd_buffer, vk);
+ struct fgvk_cmd_pool *pool = fgvk_cmd_buffer_pool(cmd);
+
+ vk_command_buffer_finish(&cmd->vk);
+ vk_free(&pool->vk.alloc, cmd);
+}
+
+const struct vk_command_buffer_ops fgvk_cmd_buffer_ops = {
+ .create = fgvk_create_cmd_buffer,
+ .reset = fgvk_reset_cmd_buffer,
+ .destroy = fgvk_destroy_cmd_buffer,
+};
+
+void
+fgvk_cmd_bind_shaders(struct vk_command_buffer *vk_cmd,
+ uint32_t stage_count,
+ const mesa_shader_stage *stages,
+ struct vk_shader ** const shaders)
+{
+ //UNREACHABLE("TODO");
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL
+fgvk_BeginCommandBuffer(VkCommandBuffer commandBuffer,
+ const VkCommandBufferBeginInfo *pBeginInfo)
+{
+ return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL
+fgvk_EndCommandBuffer(VkCommandBuffer commandBuffer)
+{
+ return VK_SUCCESS;
+}
+
+VKAPI_ATTR void VKAPI_CALL
+fgvk_CmdPipelineBarrier2(VkCommandBuffer commandBuffer,
+ const VkDependencyInfo *pDependencyInfo)
+{
+}