Skip to content

Commit 6131f07

Browse files
warmenhovenLibretroAdmin
authored andcommitted
minor vulkan tweaks
1 parent 32477c8 commit 6131f07

1 file changed

Lines changed: 37 additions & 43 deletions

File tree

gfx/drivers/vulkan.c

Lines changed: 37 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -515,42 +515,47 @@ static void vulkan_draw_triangles(vk_t *vk, const struct vk_draw_triangles *call
515515

516516
/* Upload descriptors */
517517
{
518-
VkDescriptorSet set;
519-
/* Upload UBO */
520-
struct vk_buffer_range range;
521-
float *mvp_data_ptr = NULL;
518+
VkImageView call_view = call->texture ? call->texture->view : VK_NULL_HANDLE;
522519

523-
if (!vulkan_buffer_chain_alloc(vk->context, &vk->chain->ubo,
524-
call->uniform_size, &range))
525-
return;
520+
/* Check if we can skip descriptor work */
521+
if ( call_view != vk->tracker.view
522+
|| call->sampler != vk->tracker.sampler
523+
|| call->uniform_size > sizeof(vk->tracker.mvp)
524+
|| memcmp(call->uniform, &vk->tracker.mvp, call->uniform_size) != 0)
525+
{
526+
VkDescriptorSet set;
527+
struct vk_buffer_range range;
526528

527-
memcpy(range.data, call->uniform, call->uniform_size);
529+
if (!vulkan_buffer_chain_alloc(vk->context, &vk->chain->ubo,
530+
call->uniform_size, &range))
531+
return;
528532

529-
set = vulkan_descriptor_manager_alloc(
530-
vk->context->device,
531-
&vk->chain->descriptor_manager);
533+
memcpy(range.data, call->uniform, call->uniform_size);
532534

533-
vulkan_write_quad_descriptors(
534-
vk->context->device,
535-
set,
536-
range.buffer,
537-
range.offset,
538-
call->uniform_size,
539-
call->texture,
540-
call->sampler);
535+
set = vulkan_descriptor_manager_alloc(
536+
vk->context->device,
537+
&vk->chain->descriptor_manager);
541538

542-
vkCmdBindDescriptorSets(vk->cmd,
543-
VK_PIPELINE_BIND_POINT_GRAPHICS,
544-
vk->pipelines.layout, 0,
545-
1, &set, 0, NULL);
539+
vulkan_write_quad_descriptors(
540+
vk->context->device,
541+
set,
542+
range.buffer,
543+
range.offset,
544+
call->uniform_size,
545+
call->texture,
546+
call->sampler);
546547

547-
vk->tracker.view = VK_NULL_HANDLE;
548-
vk->tracker.sampler = VK_NULL_HANDLE;
549-
for (
550-
mvp_data_ptr = &vk->tracker.mvp.data[0]
551-
; mvp_data_ptr < vk->tracker.mvp.data + 16
552-
; mvp_data_ptr++)
553-
*mvp_data_ptr = 0.0f;
548+
vkCmdBindDescriptorSets(vk->cmd,
549+
VK_PIPELINE_BIND_POINT_GRAPHICS,
550+
vk->pipelines.layout, 0,
551+
1, &set, 0, NULL);
552+
553+
/* Update tracker with what we just bound */
554+
vk->tracker.view = call_view;
555+
vk->tracker.sampler = call->sampler;
556+
if (call->uniform_size <= sizeof(vk->tracker.mvp))
557+
memcpy(&vk->tracker.mvp, call->uniform, call->uniform_size);
558+
}
554559
}
555560

556561
/* VBO is already uploaded. */
@@ -4391,19 +4396,12 @@ static void vulkan_draw_quad(vk_t *vk, const struct vk_draw_quad *quad)
43914396
VkDescriptorSet set;
43924397
struct vk_buffer_range range;
43934398

4394-
if (!vulkan_buffer_chain_alloc(vk->context, &vk->chain->ubo,
4395-
sizeof(*quad->mvp), &range))
4396-
return;
4397-
43984399
if (
43994400
(memcmp(quad->mvp,
4400-
&vk->tracker.mvp, sizeof(*quad->mvp)) == 0)
4401+
&vk->tracker.mvp, sizeof(*quad->mvp)) != 0)
44014402
|| quad->texture->view != vk->tracker.view
44024403
|| quad->sampler != vk->tracker.sampler)
44034404
{
4404-
/* Upload UBO */
4405-
struct vk_buffer_range range;
4406-
44074405
if (!vulkan_buffer_chain_alloc(vk->context, &vk->chain->ubo,
44084406
sizeof(*quad->mvp), &range))
44094407
return;
@@ -4665,7 +4663,7 @@ static bool vulkan_frame(void *data, const void *frame,
46654663
uint64_t frame_count,
46664664
unsigned pitch, const char *msg, video_frame_info_t *video_info)
46674665
{
4668-
int i, j, k;
4666+
int j, k;
46694667
VkSubmitInfo submit_info;
46704668
VkClearValue clear_color;
46714669
VkRenderPassBeginInfo rp_info;
@@ -4759,10 +4757,6 @@ static bool vulkan_frame(void *data, const void *frame,
47594757
vk->tracker.scissor.extent.height = 0;
47604758
vk->flags &= ~VK_FLAG_TRACKER_USE_SCISSOR;
47614759
vk->tracker.pipeline = VK_NULL_HANDLE;
4762-
vk->tracker.view = VK_NULL_HANDLE;
4763-
vk->tracker.sampler = VK_NULL_HANDLE;
4764-
for (i = 0; i < 16; i++)
4765-
vk->tracker.mvp.data[i] = 0.0f;
47664760

47674761
waits_for_semaphores =
47684762
(vk->flags & VK_FLAG_HW_ENABLE)

0 commit comments

Comments
 (0)