radv: suspend user conditional rendering when DGC has task shaders
Otherwise the DGC ACE IB would be uninitialized and it would hang. Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29954>
This commit is contained in:

committed by
Marge Bot

parent
49eda4d742
commit
cc48e12431
@@ -11526,19 +11526,23 @@ radv_CmdExecuteGeneratedCommandsNV(VkCommandBuffer commandBuffer, VkBool32 isPre
|
||||
}
|
||||
|
||||
if (!radv_dgc_can_preprocess(layout, pipeline)) {
|
||||
/* Suspend conditional rendering when the DGC execute is called on the compute queue to
|
||||
* generate a cmdbuf which will skips dispatches when necessary. This is because the
|
||||
* compute queue is missing IB2 which means it's not possible to skip the cmdbuf entirely.
|
||||
* It should also be suspended when task shaders are used because the DGC ACE IB would be
|
||||
* uninitialized otherwise.
|
||||
*/
|
||||
const bool suspend_cond_render =
|
||||
(cmd_buffer->qf == RADV_QUEUE_COMPUTE || radv_dgc_with_task_shader(pGeneratedCommandsInfo));
|
||||
const bool old_predicating = cmd_buffer->state.predicating;
|
||||
|
||||
if (cmd_buffer->qf == RADV_QUEUE_COMPUTE && cmd_buffer->state.predicating) {
|
||||
/* Suspend conditional rendering when the DGC execute is called on the compute queue to
|
||||
* generate a cmdbuf which will skips dispatches when necessary. This is because the
|
||||
* compute queue is missing IB2 which means it's not possible to skip the cmdbuf entirely.
|
||||
*/
|
||||
if (suspend_cond_render && cmd_buffer->state.predicating) {
|
||||
cmd_buffer->state.predicating = false;
|
||||
}
|
||||
|
||||
radv_prepare_dgc(cmd_buffer, pGeneratedCommandsInfo, old_predicating);
|
||||
|
||||
if (cmd_buffer->qf == RADV_QUEUE_COMPUTE) {
|
||||
if (suspend_cond_render) {
|
||||
cmd_buffer->state.predicating = old_predicating;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user