[Mesa-dev] [PATCH 1/2] anv/cmd_buffer: Don't call set_subpass in a secondary

Nanley Chery nanleychery at gmail.com
Thu Oct 6 19:30:58 UTC 2016


On Wed, Oct 05, 2016 at 05:36:43PM -0700, Jason Ekstrand wrote:
> Initially, we had intended set_subpass to be an interesting function that
> did whatever (presumably a lot) setup we needed for a subpass.  In reality,
> it just sets a pointer and a dirty bit and then emits depth and stencil
> state.  When we call BeginCommandBuffer on a secondary, all of the dirty
> bits are already set and there's no point in setting depth and stencil
> state since it will already be set by the primary.  Instead, the only thing
> we need to do at the start of a secondary is set the subpass pointer.
> 
> Signed-off-by: Jason Ekstrand <jason at jlekstrand.net>
> ---
>  src/intel/vulkan/anv_cmd_buffer.c  | 39 +-------------------------------------
>  src/intel/vulkan/anv_genX.h        |  3 ---
>  src/intel/vulkan/anv_private.h     |  3 ---
>  src/intel/vulkan/genX_cmd_buffer.c |  5 +----
>  4 files changed, 2 insertions(+), 48 deletions(-)
> 
> diff --git a/src/intel/vulkan/anv_cmd_buffer.c b/src/intel/vulkan/anv_cmd_buffer.c
> index 9dedde8..ef13dfc 100644
> --- a/src/intel/vulkan/anv_cmd_buffer.c
> +++ b/src/intel/vulkan/anv_cmd_buffer.c
> @@ -407,10 +407,8 @@ VkResult anv_BeginCommandBuffer(
>        cmd_buffer->state.pass =
>           anv_render_pass_from_handle(pBeginInfo->pInheritanceInfo->renderPass);
>  
> -      struct anv_subpass *subpass =
> +      cmd_buffer->state.subpass =
>           &cmd_buffer->state.pass->subpasses[pBeginInfo->pInheritanceInfo->subpass];
> -
> -      anv_cmd_buffer_set_subpass(cmd_buffer, subpass);

I'm not sure why we always set the fragment descriptor bit in
set_subpass, but it seems like we need to do it here as well to keep
the logic the same. I don't see where we set the dirty bits on a
secondary command buffer at BeginCommandBuffer. Aside from that, this
patch looks good.

-Nanley

>     }
>  
>     return VK_SUCCESS;
> @@ -1050,41 +1048,6 @@ anv_cmd_buffer_merge_dynamic(struct anv_cmd_buffer *cmd_buffer,
>     return state;
>  }
>  
> -/**
> - * @brief Setup the command buffer for recording commands inside the given
> - * subpass.
> - *
> - * This does not record all commands needed for starting the subpass.
> - * Starting the subpass may require additional commands.
> - *
> - * Note that vkCmdBeginRenderPass, vkCmdNextSubpass, and vkBeginCommandBuffer
> - * with VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT, all setup the
> - * command buffer for recording commands for some subpass.  But only the first
> - * two, vkCmdBeginRenderPass and vkCmdNextSubpass, can start a subpass.
> - */
> -void
> -anv_cmd_buffer_set_subpass(struct anv_cmd_buffer *cmd_buffer,
> -                           struct anv_subpass *subpass)
> -{
> -   switch (cmd_buffer->device->info.gen) {
> -   case 7:
> -      if (cmd_buffer->device->info.is_haswell) {
> -         gen75_cmd_buffer_set_subpass(cmd_buffer, subpass);
> -      } else {
> -         gen7_cmd_buffer_set_subpass(cmd_buffer, subpass);
> -      }
> -      break;
> -   case 8:
> -      gen8_cmd_buffer_set_subpass(cmd_buffer, subpass);
> -      break;
> -   case 9:
> -      gen9_cmd_buffer_set_subpass(cmd_buffer, subpass);
> -      break;
> -   default:
> -      unreachable("unsupported gen\n");
> -   }
> -}
> -
>  struct anv_state
>  anv_cmd_buffer_push_constants(struct anv_cmd_buffer *cmd_buffer,
>                                gl_shader_stage stage)
> diff --git a/src/intel/vulkan/anv_genX.h b/src/intel/vulkan/anv_genX.h
> index 02e79c2..dc2dd5d 100644
> --- a/src/intel/vulkan/anv_genX.h
> +++ b/src/intel/vulkan/anv_genX.h
> @@ -36,9 +36,6 @@ struct anv_state
>  genX(cmd_buffer_alloc_null_surface_state)(struct anv_cmd_buffer *cmd_buffer,
>                                            struct anv_framebuffer *fb);
>  
> -void genX(cmd_buffer_set_subpass)(struct anv_cmd_buffer *cmd_buffer,
> -                                  struct anv_subpass *subpass);
> -
>  void genX(cmd_buffer_apply_pipe_flushes)(struct anv_cmd_buffer *cmd_buffer);
>  
>  void genX(flush_pipeline_select_3d)(struct anv_cmd_buffer *cmd_buffer);
> diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h
> index 443c31f..4fa403f 100644
> --- a/src/intel/vulkan/anv_private.h
> +++ b/src/intel/vulkan/anv_private.h
> @@ -1394,9 +1394,6 @@ void anv_cmd_buffer_emit_state_base_address(struct anv_cmd_buffer *cmd_buffer);
>  void anv_cmd_state_setup_attachments(struct anv_cmd_buffer *cmd_buffer,
>                                       const VkRenderPassBeginInfo *info);
>  
> -void anv_cmd_buffer_set_subpass(struct anv_cmd_buffer *cmd_buffer,
> -                                  struct anv_subpass *subpass);
> -
>  struct anv_state
>  anv_cmd_buffer_push_constants(struct anv_cmd_buffer *cmd_buffer,
>                                gl_shader_stage stage);
> diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c
> index 6a84383..1dff6a1 100644
> --- a/src/intel/vulkan/genX_cmd_buffer.c
> +++ b/src/intel/vulkan/genX_cmd_buffer.c
> @@ -1292,10 +1292,7 @@ cmd_buffer_emit_depth_stencil(struct anv_cmd_buffer *cmd_buffer)
>     anv_batch_emit(&cmd_buffer->batch, GENX(3DSTATE_CLEAR_PARAMS), cp);
>  }
>  
> -/**
> - * @see anv_cmd_buffer_set_subpass()
> - */
> -void
> +static void
>  genX(cmd_buffer_set_subpass)(struct anv_cmd_buffer *cmd_buffer,
>                               struct anv_subpass *subpass)
>  {
> -- 
> 2.5.0.400.gff86faf
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list