radv: fix re-emitting RB+ when the non-compacted color format changes

If the previously emitted graphics pipeline uses the value A for
col_format_non_compacted and the new bound graphics pipeline uses B.

At bind time, radv_cmd_state::col_format_non_compacted will be set to
B and the rbplus flag will be dirtied. But if there is no draws and a
new graphics pipeline is bound with the same value as A, the next
draw will emit the rbplus state with B instead of A.

This can be basically triggered with meta operations after drawing
because the driver saves/restores the bound pipeline.

Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/8073
Fixes: 11469f7553 ("radv: copy the non-compacted color format at pipeline bind time")
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20692>
(cherry picked from commit 5b3fb44ecc)
This commit is contained in:
Samuel Pitoiset 2023-01-13 10:32:08 +01:00 committed by Dylan Baker
parent a56dcf635e
commit 264d64cc6c
2 changed files with 2 additions and 2 deletions

View file

@ -175,7 +175,7 @@
"description": "radv: fix re-emitting RB+ when the non-compacted color format changes",
"nominated": true,
"nomination_type": 1,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": "11469f7553dc69a6c4b779527e6738c3206aa21c"
},

View file

@ -6233,7 +6233,7 @@ radv_CmdBindPipeline(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipeline
if (cmd_buffer->device->physical_device->rad_info.rbplus_allowed &&
(!cmd_buffer->state.emitted_graphics_pipeline ||
cmd_buffer->state.emitted_graphics_pipeline->col_format_non_compacted != graphics_pipeline->col_format_non_compacted)) {
cmd_buffer->state.col_format_non_compacted != graphics_pipeline->col_format_non_compacted)) {
cmd_buffer->state.col_format_non_compacted = graphics_pipeline->col_format_non_compacted;
cmd_buffer->state.dirty |= RADV_CMD_DIRTY_RBPLUS;
}