Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 0 additions & 62 deletions src/renderers/vulkan/vk.c
Original file line number Diff line number Diff line change
Expand Up @@ -198,10 +198,6 @@ static void vk_restart_swapchain( const char *funcname, VkResult res )
qvkResetCommandBuffer( vk.tess[i].command_buffer, 0 );
}

#ifdef USE_UPLOAD_QUEUE
qvkResetCommandBuffer( vk.staging_command_buffer, 0 );
#endif

vk_destroy_pipelines( qfalse );
vk_destroy_framebuffers();
vk_destroy_render_passes();
Expand Down Expand Up @@ -666,20 +662,6 @@ void vk_initialize( void )
SET_OBJECT_NAME( vk.command_pool, "command pool", VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT );
}

#ifdef USE_UPLOAD_QUEUE
{
VkCommandBufferAllocateInfo alloc_info;

alloc_info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO;
alloc_info.pNext = NULL;
alloc_info.commandPool = vk.command_pool;
alloc_info.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY;
alloc_info.commandBufferCount = 1;

VK_CHECK( qvkAllocateCommandBuffers( vk.device, &alloc_info, &vk.staging_command_buffer ) );
}
#endif

//
// Command buffers and color attachments.
//
Expand Down Expand Up @@ -1789,10 +1771,6 @@ void vk_begin_frame( void )
vk.temporal.preparedThisFrame = qfalse;
vk.uiOverlayActive = qfalse;

#ifdef USE_UPLOAD_QUEUE
vk_flush_staging_buffer( qtrue );
#endif

vk.cmd = &vk.tess[ vk.cmd_index ];

if ( vk.cmd->waitForFence ) {
Expand Down Expand Up @@ -1973,12 +1951,7 @@ static void vk_resize_geometry_buffer( void )

void vk_end_frame( void )
{
#ifdef USE_UPLOAD_QUEUE
VkSemaphore waits[2], signals[2];
const VkPipelineStageFlags wait_dst_stage_mask[2] = {VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT};
#else
const VkPipelineStageFlags wait_dst_stage_mask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
#endif
VkSubmitInfo submit_info;

if ( vk.frame_count == 0 )
Expand Down Expand Up @@ -2045,46 +2018,11 @@ void vk_end_frame( void )
submit_info.commandBufferCount = 1;
submit_info.pCommandBuffers = &vk.cmd->command_buffer;
if ( !ri.CL_IsMinimized() ) {
#ifdef USE_UPLOAD_QUEUE
if ( vk.image_uploaded != VK_NULL_HANDLE ) {
waits[0] = vk.cmd->image_acquired;
waits[1] = vk.image_uploaded;
submit_info.waitSemaphoreCount = 2;
submit_info.pWaitSemaphores = &waits[0];
submit_info.pWaitDstStageMask = &wait_dst_stage_mask[0];
signals[0] = vk.swapchain_rendering_finished[ vk.cmd->swapchain_image_index ];
signals[1] = vk.cmd->rendering_finished2;
submit_info.signalSemaphoreCount = 2;
submit_info.pSignalSemaphores = &signals[0];

vk.rendering_finished = vk.cmd->rendering_finished2;
vk.image_uploaded = VK_NULL_HANDLE;
} else if ( vk.rendering_finished != VK_NULL_HANDLE ) {
waits[0] = vk.cmd->image_acquired;
waits[1] = vk.rendering_finished;
submit_info.waitSemaphoreCount = 2;
submit_info.pWaitSemaphores = &waits[0];
submit_info.pWaitDstStageMask = &wait_dst_stage_mask[0];
signals[0] = vk.swapchain_rendering_finished[ vk.cmd->swapchain_image_index ];
signals[1] = vk.cmd->rendering_finished2;
submit_info.signalSemaphoreCount = 2;
submit_info.pSignalSemaphores = &signals[0];

vk.rendering_finished = vk.cmd->rendering_finished2;
} else {
submit_info.waitSemaphoreCount = 1;
submit_info.pWaitSemaphores = &vk.cmd->image_acquired;
submit_info.pWaitDstStageMask = &wait_dst_stage_mask[0];
submit_info.signalSemaphoreCount = 1;
submit_info.pSignalSemaphores = &vk.swapchain_rendering_finished[ vk.cmd->swapchain_image_index ];
}
#else
submit_info.waitSemaphoreCount = 1;
submit_info.pWaitSemaphores = &vk.cmd->image_acquired;
submit_info.pWaitDstStageMask = &wait_dst_stage_mask;
submit_info.signalSemaphoreCount = 1;
submit_info.pSignalSemaphores = &vk.swapchain_rendering_finished[ vk.cmd->swapchain_image_index ];
#endif
} else {
submit_info.waitSemaphoreCount = 0;
submit_info.pWaitSemaphores = NULL;
Expand Down
21 changes: 3 additions & 18 deletions src/renderers/vulkan/vk_cmd.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,6 @@ VkCommandBuffer vk_begin_command_buffer( void )
void vk_end_command_buffer( VkCommandBuffer command_buffer, const char *location )
{
(void)location;
#ifdef USE_UPLOAD_QUEUE
const VkPipelineStageFlags wait_dst_stage_mask = {VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT};
VkSemaphore waits;
#endif
VkSubmitInfo submit_info;
VkCommandBuffer cmdbuf[1];

Expand All @@ -49,20 +45,9 @@ void vk_end_command_buffer( VkCommandBuffer command_buffer, const char *location

submit_info.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;
submit_info.pNext = NULL;
#ifdef USE_UPLOAD_QUEUE
if ( vk.rendering_finished != VK_NULL_HANDLE ) {
waits = vk.rendering_finished;
vk.rendering_finished = VK_NULL_HANDLE;
submit_info.waitSemaphoreCount = 1;
submit_info.pWaitSemaphores = &waits;
submit_info.pWaitDstStageMask = &wait_dst_stage_mask;
} else
#endif
{
submit_info.waitSemaphoreCount = 0;
submit_info.pWaitSemaphores = NULL;
submit_info.pWaitDstStageMask = NULL;
}
submit_info.waitSemaphoreCount = 0;
submit_info.pWaitSemaphores = NULL;
submit_info.pWaitDstStageMask = NULL;

submit_info.commandBufferCount = 1;
submit_info.pCommandBuffers = cmdbuf;
Expand Down
106 changes: 0 additions & 106 deletions src/renderers/vulkan/vk_staging.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,112 +29,9 @@ void vk_clean_staging_buffer( void )

vk.staging_buffer.ptr = NULL;
vk.staging_buffer.size = 0;
#ifdef USE_UPLOAD_QUEUE
vk.staging_buffer.offset = 0;
#endif
}


#ifdef USE_UPLOAD_QUEUE
qboolean vk_wait_staging_buffer( void )
{
if ( vk.device_lost ) {
return qfalse;
}
if ( vk.aux_fence_wait ) {
VkResult res = qvkWaitForFences( vk.device, 1, &vk.aux_fence, VK_TRUE, 5 * 1000000000ULL );
if ( res != VK_SUCCESS ) {
if ( res == VK_ERROR_DEVICE_LOST ) {
vk.device_lost = qtrue;
}
ri.Error( ERR_FATAL, "vkWaitForFences() failed with %s at %s", vk_result_string( res ), __FUNCTION__ );
}
VK_CHECK( qvkResetFences( vk.device, 1, &vk.aux_fence ) );
VK_CHECK( qvkResetCommandBuffer( vk.staging_command_buffer, 0 ) );
vk.staging_buffer.offset = 0; /* reset: command buffer cleared, staging starts at 0 */
vk.aux_fence_wait = qfalse;
return qtrue;
} else {
return qfalse;
}
}


void vk_flush_staging_buffer( qboolean final )
{
VkPipelineStageFlags wait_dst_stage_mask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
VkSemaphore waits;
VkSubmitInfo submit_info;
VkResult res;

if ( vk.device_lost ) {
return;
}
if ( vk.staging_buffer.offset == 0 ) {
return;
}

vk.staging_buffer.offset = 0;

VK_CHECK( qvkEndCommandBuffer( vk.staging_command_buffer ) );

submit_info.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;
submit_info.pNext = NULL;

if ( vk.rendering_finished != VK_NULL_HANDLE ) {
waits = vk.rendering_finished;
vk.rendering_finished = VK_NULL_HANDLE;
submit_info.waitSemaphoreCount = 1;
submit_info.pWaitSemaphores = &waits;
submit_info.pWaitDstStageMask = &wait_dst_stage_mask;
} else {
submit_info.waitSemaphoreCount = 0;
submit_info.pWaitSemaphores = NULL;
submit_info.pWaitDstStageMask = NULL;
}

submit_info.commandBufferCount = 1;
submit_info.pCommandBuffers = &vk.staging_command_buffer;

if ( vk.image_uploaded != VK_NULL_HANDLE ) {
ri.Error( ERR_FATAL, "Vulkan: incorrect state during image upload" );
}
if ( final ) {
submit_info.signalSemaphoreCount = 1;
submit_info.pSignalSemaphores = &vk.image_uploaded2;
vk.image_uploaded = vk.image_uploaded2;
res = qvkQueueSubmit( vk.queue, 1, &submit_info, vk.aux_fence );
if ( res != VK_SUCCESS ) {
if ( res == VK_ERROR_DEVICE_LOST ) {
vk.device_lost = qtrue;
}
ri.Error( ERR_FATAL, "Vulkan: qvkQueueSubmit (staging) returned %s", vk_result_string( res ) );
}
vk.aux_fence_wait = qtrue;
} else {
submit_info.signalSemaphoreCount = 0;
submit_info.pSignalSemaphores = NULL;
res = qvkQueueSubmit( vk.queue, 1, &submit_info, vk.aux_fence );
if ( res != VK_SUCCESS ) {
if ( res == VK_ERROR_DEVICE_LOST ) {
vk.device_lost = qtrue;
}
ri.Error( ERR_FATAL, "Vulkan: qvkQueueSubmit (staging) returned %s", vk_result_string( res ) );
}
res = qvkWaitForFences( vk.device, 1, &vk.aux_fence, VK_TRUE, 5 * 1000000000ULL );
if ( res != VK_SUCCESS ) {
if ( res == VK_ERROR_DEVICE_LOST ) {
vk.device_lost = qtrue;
}
ri.Error( ERR_FATAL, "vkWaitForFences() failed with %s at %s", vk_result_string( res ), __FUNCTION__ );
}
VK_CHECK( qvkResetFences( vk.device, 1, &vk.aux_fence ) );
VK_CHECK( qvkResetCommandBuffer( vk.staging_command_buffer, 0 ) );
}
}
#endif /* USE_UPLOAD_QUEUE */


void vk_alloc_staging_buffer( VkDeviceSize size )
{
VkBufferCreateInfo buffer_desc;
Expand Down Expand Up @@ -172,9 +69,6 @@ void vk_alloc_staging_buffer( VkDeviceSize size )

VK_CHECK(qvkMapMemory(vk.device, vk.staging_buffer.memory, 0, VK_WHOLE_SIZE, 0, &data));
vk.staging_buffer.ptr = (byte*)data;
#ifdef USE_UPLOAD_QUEUE
vk.staging_buffer.offset = 0;
#endif
vk_set_object_name( (uint64_t)vk.staging_buffer.handle, "staging buffer", VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT );
vk_set_object_name( (uint64_t)vk.staging_buffer.memory, "staging buffer memory", VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT );
}
5 changes: 0 additions & 5 deletions src/renderers/vulkan/vk_staging.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,6 @@ extern "C" {
void vk_clean_staging_buffer( void );
void vk_alloc_staging_buffer( VkDeviceSize size );

#ifdef USE_UPLOAD_QUEUE
qboolean vk_wait_staging_buffer( void );
void vk_flush_staging_buffer( qboolean final );
#endif

#ifdef __cplusplus
}
#endif
4 changes: 0 additions & 4 deletions src/renderers/vulkan/vk_sync.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,6 @@ void vk_destroy_sync_primitives( void )
if ( vk.device == VK_NULL_HANDLE )
return;

#ifdef USE_UPLOAD_QUEUE
qvkDestroySemaphore( vk.device, vk.image_uploaded2, NULL );
#endif

for ( i = 0; i < NUM_COMMAND_BUFFERS; i++ ) {
qvkDestroySemaphore( vk.device, vk.tess[i].image_acquired, NULL );
qvkDestroyFence( vk.device, vk.tess[i].rendering_finished_fence, NULL );
Expand Down
Loading
Loading