Mesa (main): radv: Remove the skipping of framebuffer emission if we don't have a framebuffer.

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Nov 24 18:45:09 UTC 2021


Module: Mesa
Branch: main
Commit: 5632359959f4b27aa458cecbee297d55231ee8ec
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=5632359959f4b27aa458cecbee297d55231ee8ec

Author: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
Date:   Sun Nov  7 20:30:01 2021 +0100

radv: Remove the skipping of framebuffer emission if we don't have a framebuffer.

This was plain broken. The solution is to not require any framebuffer
changes. Silently skipping results in broken behavior. e.g:

(secondary cmdbuffer with no framebuffer)
ClearAttachment 2

translated into

bind attachment 2 as attachment 0 (skipped)
clear attachment 0
restore original bindings (skipped)

which results in clearing attachment 0, not what we wanted. It is
a small wonder CTS doesn't find it until VK_KHR_dynamic_rendering.

Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13699>

---

 src/amd/vulkan/radv_cmd_buffer.c | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
index 1962fd5c34c..89dc8fa6d40 100644
--- a/src/amd/vulkan/radv_cmd_buffer.c
+++ b/src/amd/vulkan/radv_cmd_buffer.c
@@ -2466,10 +2466,6 @@ radv_emit_framebuffer_state(struct radv_cmd_buffer *cmd_buffer)
    struct radv_framebuffer *framebuffer = cmd_buffer->state.framebuffer;
    const struct radv_subpass *subpass = cmd_buffer->state.subpass;
 
-   /* this may happen for inherited secondary recording */
-   if (!framebuffer)
-      return;
-
    for (i = 0; i < 8; ++i) {
       if (i >= subpass->color_count ||
           subpass->color_attachments[i].attachment == VK_ATTACHMENT_UNUSED) {
@@ -4405,7 +4401,9 @@ radv_BeginCommandBuffer(VkCommandBuffer commandBuffer, const VkCommandBufferBegi
       cmd_buffer->state.inherited_pipeline_statistics =
          pBeginInfo->pInheritanceInfo->pipelineStatistics;
 
-      radv_cmd_buffer_set_subpass(cmd_buffer, subpass);
+      cmd_buffer->state.subpass = subpass;
+      if (cmd_buffer->state.framebuffer)
+         cmd_buffer->state.dirty |= RADV_CMD_DIRTY_FRAMEBUFFER;
    }
 
    if (unlikely(cmd_buffer->device->trace_bo))



More information about the mesa-commit mailing list