From e20a2b15b319295cb557986ec75e93fcf0471099 Mon Sep 17 00:00:00 2001 From: Matt Borgerson Date: Sun, 28 Jul 2024 23:59:32 -0700 Subject: [PATCH] nv2a/vk: Don't release textures until after draw completes --- hw/xbox/nv2a/pgraph/vk/draw.c | 9 +++++++-- hw/xbox/nv2a/pgraph/vk/surface.c | 1 - 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/hw/xbox/nv2a/pgraph/vk/draw.c b/hw/xbox/nv2a/pgraph/vk/draw.c index e6681534cc..135e7b303d 100644 --- a/hw/xbox/nv2a/pgraph/vk/draw.c +++ b/hw/xbox/nv2a/pgraph/vk/draw.c @@ -1312,6 +1312,8 @@ void pgraph_vk_finish(PGRAPHState *pg, FinishReason finish_reason) r->command_buffer_fence)); r->submit_count += 1; + bool check_budget = false; + // Periodically check memory budget const int max_num_submits_before_budget_update = 5; if (finish_reason == VK_FINISH_REASON_FLIP_STALL || @@ -1321,8 +1323,7 @@ void pgraph_vk_finish(PGRAPHState *pg, FinishReason finish_reason) // VMA queries budget via vmaSetCurrentFrameIndex vmaSetCurrentFrameIndex(r->allocator, r->submit_count); r->allocator_last_submit_index = r->submit_count; - - pgraph_vk_check_memory_budget(pg); + check_budget = true; } VK_CHECK(vkWaitForFences(r->device, 1, &r->command_buffer_fence, @@ -1331,6 +1332,10 @@ void pgraph_vk_finish(PGRAPHState *pg, FinishReason finish_reason) r->descriptor_set_index = 0; r->in_command_buffer = false; destroy_framebuffers(pg); + + if (check_budget) { + pgraph_vk_check_memory_budget(pg); + } } NV2AState *d = container_of(pg, NV2AState, pgraph); diff --git a/hw/xbox/nv2a/pgraph/vk/surface.c b/hw/xbox/nv2a/pgraph/vk/surface.c index 17552ccda3..cadacb8ccf 100644 --- a/hw/xbox/nv2a/pgraph/vk/surface.c +++ b/hw/xbox/nv2a/pgraph/vk/surface.c @@ -757,7 +757,6 @@ static void create_surface_image(PGRAPHState *pg, SurfaceBinding *surface) VmaAllocationCreateInfo alloc_create_info = { .usage = VMA_MEMORY_USAGE_AUTO_PREFER_DEVICE, - .flags = VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT }; VK_CHECK(vmaCreateImage(r->allocator, &image_create_info,