1414#include <assert.h>
1515
1616void kore_vulkan_command_list_destroy (kore_gpu_command_list * list ) {
17- vkFreeCommandBuffers (list -> vulkan .device , list -> vulkan .command_pool , 1 , & list -> vulkan .command_buffer );
17+ vkFreeCommandBuffers (list -> vulkan .device , list -> vulkan .command_pool , KORE_VULKAN_INTERNAL_COMMAND_BUFFER_COUNT , list -> vulkan .command_buffers );
1818}
1919
2020VkAttachmentLoadOp convert_load_op (kore_gpu_load_op op ) {
@@ -77,10 +77,10 @@ VkClearValue convert_depth_clear_value(float value) {
7777static void pause_render_pass (kore_gpu_command_list * list ) {
7878 if (list -> vulkan .render_pass_status == KORE_VULKAN_RENDER_PASS_STATUS_ACTIVE ) {
7979 if (list -> vulkan .has_dynamic_rendering ) {
80- vulkanCmdEndRendering (list -> vulkan .command_buffer );
80+ vulkanCmdEndRendering (list -> vulkan .command_buffers [ list -> vulkan . active_command_buffer ] );
8181 }
8282 else {
83- vkCmdEndRenderPass (list -> vulkan .command_buffer );
83+ vkCmdEndRenderPass (list -> vulkan .command_buffers [ list -> vulkan . active_command_buffer ] );
8484 }
8585 list -> vulkan .render_pass_status = KORE_VULKAN_RENDER_PASS_STATUS_PAUSED ;
8686 }
@@ -215,7 +215,7 @@ static void resume_render_pass(kore_gpu_command_list *list) {
215215 .pStencilAttachment = VK_NULL_HANDLE ,
216216 };
217217
218- vulkanCmdBeginRendering (list -> vulkan .command_buffer , & rendering_info );
218+ vulkanCmdBeginRendering (list -> vulkan .command_buffers [ list -> vulkan . active_command_buffer ] , & rendering_info );
219219 }
220220 else {
221221 VkClearValue clear_values [9 ];
@@ -265,7 +265,7 @@ static void resume_render_pass(kore_gpu_command_list *list) {
265265 .framebuffer = framebuffer ,
266266 };
267267
268- vkCmdBeginRenderPass (list -> vulkan .command_buffer , & render_pass_begin_info , VK_SUBPASS_CONTENTS_INLINE );
268+ vkCmdBeginRenderPass (list -> vulkan .command_buffers [ list -> vulkan . active_command_buffer ] , & render_pass_begin_info , VK_SUBPASS_CONTENTS_INLINE );
269269 }
270270
271271 kore_vulkan_command_list_set_viewport (list , 0 , 0 , (float )render_area .extent .width , (float )render_area .extent .height , 0.0f , 1.0f );
@@ -283,10 +283,10 @@ void kore_vulkan_command_list_begin_render_pass(kore_gpu_command_list *list, con
283283void kore_vulkan_command_list_end_render_pass (kore_gpu_command_list * list ) {
284284 if (list -> vulkan .render_pass_status == KORE_VULKAN_RENDER_PASS_STATUS_ACTIVE ) {
285285 if (list -> vulkan .has_dynamic_rendering ) {
286- vulkanCmdEndRendering (list -> vulkan .command_buffer );
286+ vulkanCmdEndRendering (list -> vulkan .command_buffers [ list -> vulkan . active_command_buffer ] );
287287 }
288288 else {
289- vkCmdEndRenderPass (list -> vulkan .command_buffer );
289+ vkCmdEndRenderPass (list -> vulkan .command_buffers [ list -> vulkan . active_command_buffer ] );
290290 }
291291 }
292292 list -> vulkan .render_pass_status = KORE_VULKAN_RENDER_PASS_STATUS_NONE ;
@@ -297,20 +297,20 @@ void kore_vulkan_command_list_present(kore_gpu_command_list *list) {
297297}
298298
299299void kore_vulkan_command_list_set_index_buffer (kore_gpu_command_list * list , kore_gpu_buffer * buffer , kore_gpu_index_format index_format , uint64_t offset ) {
300- vkCmdBindIndexBuffer (list -> vulkan .command_buffer , buffer -> vulkan .buffer , offset ,
300+ vkCmdBindIndexBuffer (list -> vulkan .command_buffers [ list -> vulkan . active_command_buffer ] , buffer -> vulkan .buffer , offset ,
301301 index_format == KORE_GPU_INDEX_FORMAT_UINT16 ? VK_INDEX_TYPE_UINT16 : VK_INDEX_TYPE_UINT32 );
302302}
303303
304304void kore_vulkan_command_list_set_vertex_buffer (kore_gpu_command_list * list , uint32_t slot , kore_vulkan_buffer * buffer , uint64_t offset , uint64_t size ,
305305 uint64_t stride ) {
306- vkCmdBindVertexBuffers (list -> vulkan .command_buffer , slot , 1 , & buffer -> buffer , & offset );
306+ vkCmdBindVertexBuffers (list -> vulkan .command_buffers [ list -> vulkan . active_command_buffer ] , slot , 1 , & buffer -> buffer , & offset );
307307}
308308
309309static kore_vulkan_render_pipeline * current_render_pipeline = NULL ;
310310static kore_vulkan_compute_pipeline * current_compute_pipeline = NULL ;
311311
312312void kore_vulkan_command_list_set_render_pipeline (kore_gpu_command_list * list , kore_vulkan_render_pipeline * pipeline ) {
313- vkCmdBindPipeline (list -> vulkan .command_buffer , VK_PIPELINE_BIND_POINT_GRAPHICS , pipeline -> pipeline );
313+ vkCmdBindPipeline (list -> vulkan .command_buffers [ list -> vulkan . active_command_buffer ] , VK_PIPELINE_BIND_POINT_GRAPHICS , pipeline -> pipeline );
314314 current_render_pipeline = pipeline ;
315315 current_compute_pipeline = NULL ;
316316}
@@ -321,20 +321,20 @@ void kore_vulkan_command_list_draw(kore_gpu_command_list *list, uint32_t vertex_
321321void kore_vulkan_command_list_draw_indexed (kore_gpu_command_list * list , uint32_t index_count , uint32_t instance_count , uint32_t first_index ,
322322 int32_t base_vertex , uint32_t first_instance ) {
323323 resume_render_pass (list );
324- vkCmdDrawIndexed (list -> vulkan .command_buffer , index_count , instance_count , first_index , base_vertex , first_instance );
324+ vkCmdDrawIndexed (list -> vulkan .command_buffers [ list -> vulkan . active_command_buffer ] , index_count , instance_count , first_index , base_vertex , first_instance );
325325}
326326
327327void kore_vulkan_command_list_set_descriptor_set (kore_gpu_command_list * list , uint32_t set_index , kore_vulkan_descriptor_set * set ,
328328 uint32_t dynamic_offsets_count , uint32_t * dynamic_offsets ) {
329329 pause_render_pass (list );
330330
331331 if (current_render_pipeline != NULL ) {
332- vkCmdBindDescriptorSets (list -> vulkan .command_buffer , VK_PIPELINE_BIND_POINT_GRAPHICS , current_render_pipeline -> pipeline_layout , set_index , 1 ,
333- & set -> descriptor_set , dynamic_offsets_count , dynamic_offsets );
332+ vkCmdBindDescriptorSets (list -> vulkan .command_buffers [ list -> vulkan . active_command_buffer ], VK_PIPELINE_BIND_POINT_GRAPHICS ,
333+ current_render_pipeline -> pipeline_layout , set_index , 1 , & set -> descriptor_set , dynamic_offsets_count , dynamic_offsets );
334334 }
335335 else if (current_compute_pipeline != NULL ) {
336- vkCmdBindDescriptorSets (list -> vulkan .command_buffer , VK_PIPELINE_BIND_POINT_COMPUTE , current_compute_pipeline -> pipeline_layout , set_index , 1 ,
337- & set -> descriptor_set , dynamic_offsets_count , dynamic_offsets );
336+ vkCmdBindDescriptorSets (list -> vulkan .command_buffers [ list -> vulkan . active_command_buffer ], VK_PIPELINE_BIND_POINT_COMPUTE ,
337+ current_compute_pipeline -> pipeline_layout , set_index , 1 , & set -> descriptor_set , dynamic_offsets_count , dynamic_offsets );
338338 }
339339 else {
340340 assert (false);
@@ -343,11 +343,12 @@ void kore_vulkan_command_list_set_descriptor_set(kore_gpu_command_list *list, ui
343343
344344void kore_vulkan_command_list_set_root_constants (kore_gpu_command_list * list , const void * data , size_t data_size ) {
345345 if (current_render_pipeline != NULL ) {
346- vkCmdPushConstants (list -> vulkan .command_buffer , current_render_pipeline -> pipeline_layout , VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT , 0 ,
347- (uint32_t )data_size , data );
346+ vkCmdPushConstants (list -> vulkan .command_buffers [ list -> vulkan . active_command_buffer ] , current_render_pipeline -> pipeline_layout ,
347+ VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT , 0 , (uint32_t )data_size , data );
348348 }
349349 else if (current_compute_pipeline != NULL ) {
350- vkCmdPushConstants (list -> vulkan .command_buffer , current_compute_pipeline -> pipeline_layout , VK_SHADER_STAGE_COMPUTE_BIT , 0 , (uint32_t )data_size , data );
350+ vkCmdPushConstants (list -> vulkan .command_buffers [list -> vulkan .active_command_buffer ], current_compute_pipeline -> pipeline_layout ,
351+ VK_SHADER_STAGE_COMPUTE_BIT , 0 , (uint32_t )data_size , data );
351352 }
352353 else {
353354 assert (false);
@@ -361,7 +362,7 @@ void kore_vulkan_command_list_copy_buffer_to_buffer(kore_gpu_command_list *list,
361362 .dstOffset = destination_offset ,
362363 .size = size ,
363364 };
364- vkCmdCopyBuffer (list -> vulkan .command_buffer , source -> vulkan .buffer , destination -> vulkan .buffer , 1 , & region );
365+ vkCmdCopyBuffer (list -> vulkan .command_buffers [ list -> vulkan . active_command_buffer ] , source -> vulkan .buffer , destination -> vulkan .buffer , 1 , & region );
365366}
366367
367368void kore_vulkan_command_list_copy_buffer_to_texture (kore_gpu_command_list * list , const kore_gpu_image_copy_buffer * source ,
@@ -397,8 +398,8 @@ void kore_vulkan_command_list_copy_buffer_to_texture(kore_gpu_command_list *list
397398 .imageOffset = {destination -> origin_x , destination -> origin_y , 0 },
398399 .imageExtent = {width , height , 1 },
399400 };
400- vkCmdCopyBufferToImage (list -> vulkan .command_buffer , source -> buffer -> vulkan .buffer , destination -> texture -> vulkan .image , VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL ,
401- 1 , & region );
401+ vkCmdCopyBufferToImage (list -> vulkan .command_buffers [ list -> vulkan . active_command_buffer ] , source -> buffer -> vulkan .buffer , destination -> texture -> vulkan .image ,
402+ VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL , 1 , & region );
402403}
403404
404405void kore_vulkan_command_list_copy_texture_to_buffer (kore_gpu_command_list * list , const kore_gpu_image_copy_texture * source ,
@@ -433,8 +434,8 @@ void kore_vulkan_command_list_copy_texture_to_buffer(kore_gpu_command_list *list
433434 .imageOffset = {source -> origin_x , source -> origin_y , 0 },
434435 .imageExtent = {width , height , 1 },
435436 };
436- vkCmdCopyImageToBuffer (list -> vulkan .command_buffer , source -> texture -> vulkan .image , VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL , destination -> buffer -> vulkan .buffer ,
437- 1 , & region );
437+ vkCmdCopyImageToBuffer (list -> vulkan .command_buffers [ list -> vulkan .active_command_buffer ], source -> texture -> vulkan .image ,
438+ VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL , destination -> buffer -> vulkan . buffer , 1 , & region );
438439}
439440
440441void kore_vulkan_command_list_copy_texture_to_texture (kore_gpu_command_list * list , const kore_gpu_image_copy_texture * source ,
@@ -490,20 +491,20 @@ void kore_vulkan_command_list_copy_texture_to_texture(kore_gpu_command_list *lis
490491 .extent = {width , height , 1 },
491492 };
492493
493- vkCmdCopyImage (list -> vulkan .command_buffer , source -> texture -> vulkan .image , VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL , destination -> texture -> vulkan .image ,
494- VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL , 1 , & region );
494+ vkCmdCopyImage (list -> vulkan .command_buffers [ list -> vulkan .active_command_buffer ], source -> texture -> vulkan .image , VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL ,
495+ destination -> texture -> vulkan . image , VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL , 1 , & region );
495496}
496497
497498void kore_vulkan_command_list_clear_buffer (kore_gpu_command_list * list , kore_gpu_buffer * buffer , size_t offset , uint64_t size ) {}
498499
499500void kore_vulkan_command_list_set_compute_pipeline (kore_gpu_command_list * list , kore_vulkan_compute_pipeline * pipeline ) {
500- vkCmdBindPipeline (list -> vulkan .command_buffer , VK_PIPELINE_BIND_POINT_COMPUTE , pipeline -> pipeline );
501+ vkCmdBindPipeline (list -> vulkan .command_buffers [ list -> vulkan . active_command_buffer ] , VK_PIPELINE_BIND_POINT_COMPUTE , pipeline -> pipeline );
501502 current_compute_pipeline = pipeline ;
502503 current_render_pipeline = NULL ;
503504}
504505
505506void kore_vulkan_command_list_compute (kore_gpu_command_list * list , uint32_t workgroup_count_x , uint32_t workgroup_count_y , uint32_t workgroup_count_z ) {
506- vkCmdDispatch (list -> vulkan .command_buffer , workgroup_count_x , workgroup_count_y , workgroup_count_z );
507+ vkCmdDispatch (list -> vulkan .command_buffers [ list -> vulkan . active_command_buffer ] , workgroup_count_x , workgroup_count_y , workgroup_count_z );
507508}
508509
509510void kore_vulkan_command_list_prepare_raytracing_volume (kore_gpu_command_list * list , kore_gpu_raytracing_volume * volume ) {}
@@ -527,15 +528,15 @@ void kore_vulkan_command_list_set_viewport(kore_gpu_command_list *list, float x,
527528 .minDepth = min_depth ,
528529 .maxDepth = max_depth ,
529530 };
530- vkCmdSetViewport (list -> vulkan .command_buffer , 0 , 1 , & viewport );
531+ vkCmdSetViewport (list -> vulkan .command_buffers [ list -> vulkan . active_command_buffer ] , 0 , 1 , & viewport );
531532}
532533
533534void kore_vulkan_command_list_set_scissor_rect (kore_gpu_command_list * list , uint32_t x , uint32_t y , uint32_t width , uint32_t height ) {
534535 VkRect2D scissor = {
535536 .offset = {x , y },
536537 .extent = {width , height },
537538 };
538- vkCmdSetScissor (list -> vulkan .command_buffer , 0 , 1 , & scissor );
539+ vkCmdSetScissor (list -> vulkan .command_buffers [ list -> vulkan . active_command_buffer ] , 0 , 1 , & scissor );
539540}
540541
541542void kore_vulkan_command_list_set_blend_constant (kore_gpu_command_list * list , kore_gpu_color color ) {}
@@ -546,7 +547,7 @@ void kore_vulkan_command_list_set_name(kore_gpu_command_list *list, const char *
546547 const VkDebugUtilsObjectNameInfoEXT name_info = {
547548 .sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT ,
548549 .objectType = VK_OBJECT_TYPE_COMMAND_BUFFER ,
549- .objectHandle = (uint64_t )list -> vulkan .command_buffer ,
550+ .objectHandle = (uint64_t )list -> vulkan .command_buffers [ list -> vulkan . active_command_buffer ] ,
550551 .pObjectName = name ,
551552 };
552553 vulkanSetDebugUtilsObjectName (list -> vulkan .device , & name_info );
@@ -559,11 +560,11 @@ void kore_vulkan_command_list_push_debug_group(kore_gpu_command_list *list, cons
559560 .pLabelName = name ,
560561 .color = {0.0f , 0.0f , 1.0f , 1.0f },
561562 };
562- vulkanCmdBeginDebugUtilsLabel (list -> vulkan .command_buffer , & label_info );
563+ vulkanCmdBeginDebugUtilsLabel (list -> vulkan .command_buffers [ list -> vulkan . active_command_buffer ] , & label_info );
563564}
564565
565566void kore_vulkan_command_list_pop_debug_group (kore_gpu_command_list * list ) {
566- vulkanCmdEndDebugUtilsLabel (list -> vulkan .command_buffer );
567+ vulkanCmdEndDebugUtilsLabel (list -> vulkan .command_buffers [ list -> vulkan . active_command_buffer ] );
567568}
568569
569570void kore_vulkan_command_list_insert_debug_marker (kore_gpu_command_list * list , const char * name ) {
@@ -573,7 +574,7 @@ void kore_vulkan_command_list_insert_debug_marker(kore_gpu_command_list *list, c
573574 .pLabelName = name ,
574575 .color = {0.0f , 0.0f , 1.0f , 1.0f },
575576 };
576- vulkanCmdInsertDebugUtilsLabel (list -> vulkan .command_buffer , & label_info );
577+ vulkanCmdInsertDebugUtilsLabel (list -> vulkan .command_buffers [ list -> vulkan . active_command_buffer ] , & label_info );
577578}
578579
579580void kore_vulkan_command_list_begin_occlusion_query (kore_gpu_command_list * list , uint32_t query_index ) {}
0 commit comments