[Mesa-dev] [PATCH] anv/cmd_buffer: Re-emit the pipeline at every subpass
Iago Toral
itoral at igalia.com
Tue Jan 30 07:52:22 UTC 2018
On Fri, 2018-01-26 at 16:23 -0800, Jason Ekstrand wrote:
> If we ever hit this edge-case, it can theoretically cause problem for
> CNL because we could end up changing render targets without re-
> emitting
> 3DSTATE_MULTISAMPLE which is part of the pipeline. Just get rid of
> the
> edge case.
>
> Cc: mesa-stable at lists.freedesktop.org
> ---
> src/intel/vulkan/genX_cmd_buffer.c | 11 +++++++++++
> 1 file changed, 11 insertions(+)
>
> diff --git a/src/intel/vulkan/genX_cmd_buffer.c
> b/src/intel/vulkan/genX_cmd_buffer.c
> index e8d44d0..bf6e267 100644
> --- a/src/intel/vulkan/genX_cmd_buffer.c
> +++ b/src/intel/vulkan/genX_cmd_buffer.c
> @@ -3200,6 +3200,17 @@ genX(cmd_buffer_set_subpass)(struct
> anv_cmd_buffer *cmd_buffer,
> if (GEN_GEN == 7)
> cmd_buffer->state.gfx.vb_dirty |= ~0;
>
> + /* It is possible to start a render pass with an old
> pipeline. Because the
> + * render pass and subpass index are both baked into the
> pipeline, this is
> + * highly unlikely. In order to do so, it requires that you have
> a render
> + * pass with a single subpass and that you use that render pass
> twice
> + * back-to-back and use the same pipeline at the start of the
> second render
> + * pass as at the end of the first. In order to avoid
> unpredictable issues
> + * with this edge case, we just dirty the pipeline at the start
> of every
> + * subpass.
> + */
> + cmd_buffer->state.gfx.dirty |= ANV_CMD_DIRTY_PIPELINE;
> +
I was going to say that since this can only happen when there is a
single subpass in the renderpass we could just do this at
CmdBeginRenderPass instead, but I guess it doesn't really matter since
apps need to bind a new pipeline at each subpass anyway and that will
dirty this state. It would be redundant for most cases but I guess it
does't hurt.
Reviewed-by: Iago Toral Quiroga <itoral at igalia.com>
Iago
> /* Perform transitions to the subpass layout before any writes
> have
> * occurred.
> */
More information about the mesa-dev
mailing list