From c372c88813770e4db265919206c21d84e6446e88 Mon Sep 17 00:00:00 2001 From: xbzk Date: Sun, 15 Feb 2026 00:17:18 -0300 Subject: [PATCH] VUID-vkCmdDrawIndexedIndirect-imageLayout-00344 --- .../renderer_vulkan/vk_render_pass_cache.cpp | 4 ++-- src/video_core/renderer_vulkan/vk_scheduler.cpp | 10 ++++++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/video_core/renderer_vulkan/vk_render_pass_cache.cpp b/src/video_core/renderer_vulkan/vk_render_pass_cache.cpp index 1d7af349d1..571eb72a7c 100644 --- a/src/video_core/renderer_vulkan/vk_render_pass_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_render_pass_cache.cpp @@ -90,7 +90,7 @@ VkRenderPass RenderPassCache::Get(const RenderPassKey& key) { const bool is_valid{format != PixelFormat::Invalid}; references[index] = VkAttachmentReference{ .attachment = is_valid ? num_colors : VK_ATTACHMENT_UNUSED, - .layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, + .layout = VK_IMAGE_LAYOUT_GENERAL, }; if (is_valid) { descriptions.push_back(AttachmentDescription(*device, format, key.samples, false)); @@ -103,7 +103,7 @@ VkRenderPass RenderPassCache::Get(const RenderPassKey& key) { if (key.depth_format != PixelFormat::Invalid) { depth_reference = VkAttachmentReference{ .attachment = num_colors, - .layout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, + .layout = VK_IMAGE_LAYOUT_GENERAL, }; descriptions.push_back(AttachmentDescription(*device, key.depth_format, key.samples, true)); } diff --git a/src/video_core/renderer_vulkan/vk_scheduler.cpp b/src/video_core/renderer_vulkan/vk_scheduler.cpp index 2a69d6d244..28391f5564 100644 --- a/src/video_core/renderer_vulkan/vk_scheduler.cpp +++ b/src/video_core/renderer_vulkan/vk_scheduler.cpp @@ -365,20 +365,22 @@ void Scheduler::EndRenderPass() VkImageLayout new_layout; if (is_color) { - // Color attachments can be read as textures or used as attachments again + // Keep GENERAL to match descriptor image layouts used across the renderer. src_access = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; this_stage = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; - new_layout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; + new_layout = VK_IMAGE_LAYOUT_GENERAL; dst_access = VK_ACCESS_SHADER_READ_BIT + | VK_ACCESS_SHADER_WRITE_BIT | VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; } else if (is_depth_stencil) { - // Depth attachments can be read as textures or used as attachments again + // Keep GENERAL to match descriptor image layouts used across the renderer. src_access = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT; this_stage = VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT; - new_layout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; + new_layout = VK_IMAGE_LAYOUT_GENERAL; dst_access = VK_ACCESS_SHADER_READ_BIT + | VK_ACCESS_SHADER_WRITE_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT; } else {