diff options
| author | Lucas Fryzek <lucas.fryzek@fryzekconcepts.com> | 2025-11-24 19:39:30 -0500 |
|---|---|---|
| committer | Lucas Fryzek <lucas.fryzek@fryzekconcepts.com> | 2025-11-24 19:39:30 -0500 |
| commit | b5f3587df4048d2ba807721ff2faea8c8a43a93f (patch) | |
| tree | 6913f730a41822b98fecd5e82b7cae46164fd9c0 /src/frygon/vulkan/fgvk_cmd_buffer.c | |
| parent | 41c700fdbf1d79dfb571105ee93bfa46da6c8428 (diff) | |
WIPfrygon
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) +{ +} |