mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-26 12:50:10 +01:00
anv/gen10: Emit CS stall and mark push constants dirty.
I got reviews and fixed the patches locally, but ended up merging the
ones that I sent originally to the list. This patch fixes those
mistakes.
Fixes: 78c125af39
Signed-off-by: Rafael Antognolli <rafael.antognolli@intel.com>
Cc: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
This commit is contained in:
parent
bcfd78e448
commit
20578f81a6
2 changed files with 12 additions and 7 deletions
|
|
@ -1477,7 +1477,6 @@ enum anv_pipe_bits {
|
|||
ANV_PIPE_CONSTANT_CACHE_INVALIDATE_BIT = (1 << 3),
|
||||
ANV_PIPE_VF_CACHE_INVALIDATE_BIT = (1 << 4),
|
||||
ANV_PIPE_DATA_CACHE_FLUSH_BIT = (1 << 5),
|
||||
ANV_PIPE_ISP_DISABLE_BIT = (1 << 9),
|
||||
ANV_PIPE_TEXTURE_CACHE_INVALIDATE_BIT = (1 << 10),
|
||||
ANV_PIPE_INSTRUCTION_CACHE_INVALIDATE_BIT = (1 << 11),
|
||||
ANV_PIPE_RENDER_TARGET_CACHE_FLUSH_BIT = (1 << 12),
|
||||
|
|
|
|||
|
|
@ -969,6 +969,15 @@ genX(BeginCommandBuffer)(
|
|||
if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY)
|
||||
cmd_buffer->state.pending_pipe_bits |= ANV_PIPE_VF_CACHE_INVALIDATE_BIT;
|
||||
|
||||
/* We send an "Indirect State Pointers Disable" packet at
|
||||
* EndCommandBuffer, so all push contant packets are ignored during a
|
||||
* context restore. Documentation says after that command, we need to
|
||||
* emit push constants again before any rendering operation. So we
|
||||
* flag them dirty here to make sure they get emitted.
|
||||
*/
|
||||
if (GEN_GEN == 10)
|
||||
cmd_buffer->state.push_constants_dirty |= VK_SHADER_STAGE_ALL_GRAPHICS;
|
||||
|
||||
VkResult result = VK_SUCCESS;
|
||||
if (cmd_buffer->usage_flags &
|
||||
VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT) {
|
||||
|
|
@ -1008,8 +1017,7 @@ genX(BeginCommandBuffer)(
|
|||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* From the PRM, Volume 2a:
|
||||
/* From the PRM, Volume 2a:
|
||||
*
|
||||
* "Indirect State Pointers Disable
|
||||
*
|
||||
|
|
@ -1039,16 +1047,14 @@ genX(BeginCommandBuffer)(
|
|||
* hardware to ignore previous 3DSTATE_CONSTANT_* packets during a
|
||||
* context restore, so the mentioned hang doesn't happen. However,
|
||||
* software must program push constant commands for all stages prior to
|
||||
* rendering anything, so we flag them as dirty.
|
||||
* rendering anything. So we flag them dirty in BeginCommandBuffer.
|
||||
*/
|
||||
static void
|
||||
emit_isp_disable(struct anv_cmd_buffer *cmd_buffer)
|
||||
{
|
||||
anv_batch_emit(&cmd_buffer->batch, GENX(PIPE_CONTROL), pc) {
|
||||
pc.IndirectStatePointersDisable = true;
|
||||
pc.PostSyncOperation = WriteImmediateData;
|
||||
pc.Address =
|
||||
(struct anv_address) { &cmd_buffer->device->workaround_bo, 0 };
|
||||
pc.CommandStreamerStallEnable = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue