diff options
Diffstat (limited to 'src/frygon/vulkan/fgvk_cmd_buffer.c')
| -rw-r--r-- | src/frygon/vulkan/fgvk_cmd_buffer.c | 93 |
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) +{ +} |