[Mesa-dev] [PATCH 1/7] radv: create pipeline layout objects for all meta operations

Bas Nieuwenhuizen bas at basnieuwenhuizen.nl
Tue Dec 19 20:06:44 UTC 2017


Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>

for the series.

On Mon, Dec 18, 2017 at 7:38 PM, Samuel Pitoiset
<samuel.pitoiset at gmail.com> wrote:
> They are dummy objects but the spec requires layout to not be
> NULL, this just makes sure we are creating valid pipeline layout
> objects. This will allow us to remove some useless checks.
>
> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
> ---
>  src/amd/vulkan/radv_meta_decompress.c | 28 ++++++++++++++++++++++++++++
>  src/amd/vulkan/radv_meta_fast_clear.c | 33 +++++++++++++++++++++++++++++++--
>  src/amd/vulkan/radv_meta_resolve.c    | 18 ++++++++++++++++++
>  src/amd/vulkan/radv_private.h         |  3 +++
>  4 files changed, 80 insertions(+), 2 deletions(-)
>
> diff --git a/src/amd/vulkan/radv_meta_decompress.c b/src/amd/vulkan/radv_meta_decompress.c
> index b86f3925cf..7a5681414f 100644
> --- a/src/amd/vulkan/radv_meta_decompress.c
> +++ b/src/amd/vulkan/radv_meta_decompress.c
> @@ -75,11 +75,29 @@ create_pass(struct radv_device *device,
>         return result;
>  }
>
> +static VkResult
> +create_pipeline_layout(struct radv_device *device, VkPipelineLayout *layout)
> +{
> +       VkPipelineLayoutCreateInfo pl_create_info = {
> +               .sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,
> +               .setLayoutCount = 0,
> +               .pSetLayouts = NULL,
> +               .pushConstantRangeCount = 0,
> +               .pPushConstantRanges = NULL,
> +       };
> +
> +       return radv_CreatePipelineLayout(radv_device_to_handle(device),
> +                                        &pl_create_info,
> +                                        &device->meta_state.alloc,
> +                                        layout);
> +}
> +
>  static VkResult
>  create_pipeline(struct radv_device *device,
>                  VkShaderModule vs_module_h,
>                 uint32_t samples,
>                 VkRenderPass pass,
> +               VkPipelineLayout layout,
>                 VkPipeline *decompress_pipeline,
>                 VkPipeline *resummarize_pipeline)
>  {
> @@ -165,6 +183,7 @@ create_pipeline(struct radv_device *device,
>                                 VK_DYNAMIC_STATE_SCISSOR,
>                         },
>                 },
> +               .layout = layout,
>                 .renderPass = pass,
>                 .subpass = 0,
>         };
> @@ -212,6 +231,9 @@ radv_device_finish_meta_depth_decomp_state(struct radv_device *device)
>                 radv_DestroyRenderPass(radv_device_to_handle(device),
>                                        state->depth_decomp[i].pass,
>                                        &state->alloc);
> +               radv_DestroyPipelineLayout(radv_device_to_handle(device),
> +                                          state->depth_decomp[i].p_layout,
> +                                          &state->alloc);
>                 radv_DestroyPipeline(radv_device_to_handle(device),
>                                      state->depth_decomp[i].decompress_pipeline,
>                                      &state->alloc);
> @@ -243,8 +265,14 @@ radv_device_init_meta_depth_decomp_state(struct radv_device *device)
>                 if (res != VK_SUCCESS)
>                         goto fail;
>
> +               res = create_pipeline_layout(device,
> +                                            &state->depth_decomp[i].p_layout);
> +               if (res != VK_SUCCESS)
> +                       goto fail;
> +
>                 res = create_pipeline(device, vs_module_h, samples,
>                                       state->depth_decomp[i].pass,
> +                                     state->depth_decomp[i].p_layout,
>                                       &state->depth_decomp[i].decompress_pipeline,
>                                       &state->depth_decomp[i].resummarize_pipeline);
>                 if (res != VK_SUCCESS)
> diff --git a/src/amd/vulkan/radv_meta_fast_clear.c b/src/amd/vulkan/radv_meta_fast_clear.c
> index 38da63246a..1acf510359 100644
> --- a/src/amd/vulkan/radv_meta_fast_clear.c
> +++ b/src/amd/vulkan/radv_meta_fast_clear.c
> @@ -74,9 +74,27 @@ create_pass(struct radv_device *device)
>         return result;
>  }
>
> +static VkResult
> +create_pipeline_layout(struct radv_device *device, VkPipelineLayout *layout)
> +{
> +       VkPipelineLayoutCreateInfo pl_create_info = {
> +               .sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,
> +               .setLayoutCount = 0,
> +               .pSetLayouts = NULL,
> +               .pushConstantRangeCount = 0,
> +               .pPushConstantRanges = NULL,
> +       };
> +
> +       return radv_CreatePipelineLayout(radv_device_to_handle(device),
> +                                        &pl_create_info,
> +                                        &device->meta_state.alloc,
> +                                        layout);
> +}
> +
>  static VkResult
>  create_pipeline(struct radv_device *device,
> -                VkShaderModule vs_module_h)
> +               VkShaderModule vs_module_h,
> +               VkPipelineLayout layout)
>  {
>         VkResult result;
>         VkDevice device_h = radv_device_to_handle(device);
> @@ -173,6 +191,7 @@ create_pipeline(struct radv_device *device,
>                                                                 VK_DYNAMIC_STATE_SCISSOR,
>                                                         },
>                                                 },
> +                                               .layout = layout,
>                                                 .renderPass = device->meta_state.fast_clear_flush.pass,
>                                                 .subpass = 0,
>                                                },
> @@ -218,6 +237,7 @@ create_pipeline(struct radv_device *device,
>                                                                 VK_DYNAMIC_STATE_SCISSOR,
>                                                         },
>                                                 },
> +                                               .layout = layout,
>                                                 .renderPass = device->meta_state.fast_clear_flush.pass,
>                                                 .subpass = 0,
>                                                },
> @@ -245,6 +265,9 @@ radv_device_finish_meta_fast_clear_flush_state(struct radv_device *device)
>
>         radv_DestroyRenderPass(radv_device_to_handle(device),
>                                state->fast_clear_flush.pass, &state->alloc);
> +       radv_DestroyPipelineLayout(radv_device_to_handle(device),
> +                                  state->fast_clear_flush.p_layout,
> +                                  &state->alloc);
>         radv_DestroyPipeline(radv_device_to_handle(device),
>                              state->fast_clear_flush.cmask_eliminate_pipeline,
>                              &state->alloc);
> @@ -269,8 +292,14 @@ radv_device_init_meta_fast_clear_flush_state(struct radv_device *device)
>         if (res != VK_SUCCESS)
>                 goto fail;
>
> +       res = create_pipeline_layout(device,
> +                                    &device->meta_state.fast_clear_flush.p_layout);
> +       if (res != VK_SUCCESS)
> +               goto fail;
> +
>         VkShaderModule vs_module_h = radv_shader_module_to_handle(&vs_module);
> -       res = create_pipeline(device, vs_module_h);
> +       res = create_pipeline(device, vs_module_h,
> +                             device->meta_state.fast_clear_flush.p_layout);
>         if (res != VK_SUCCESS)
>                 goto fail;
>
> diff --git a/src/amd/vulkan/radv_meta_resolve.c b/src/amd/vulkan/radv_meta_resolve.c
> index 254861ad18..e73a950ab7 100644
> --- a/src/amd/vulkan/radv_meta_resolve.c
> +++ b/src/amd/vulkan/radv_meta_resolve.c
> @@ -121,6 +121,21 @@ create_pipeline(struct radv_device *device,
>                 goto cleanup;
>         }
>
> +       VkPipelineLayoutCreateInfo pl_create_info = {
> +               .sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,
> +               .setLayoutCount = 0,
> +               .pSetLayouts = NULL,
> +               .pushConstantRangeCount = 0,
> +               .pPushConstantRanges = NULL,
> +       };
> +
> +       result = radv_CreatePipelineLayout(radv_device_to_handle(device),
> +                                          &pl_create_info,
> +                                          &device->meta_state.alloc,
> +                                          &device->meta_state.resolve.p_layout);
> +       if (result != VK_SUCCESS)
> +               goto cleanup;
> +
>         result = radv_graphics_pipeline_create(device_h,
>                                                radv_pipeline_cache_to_handle(&device->meta_state.cache),
>                                                &(VkGraphicsPipelineCreateInfo) {
> @@ -196,6 +211,7 @@ create_pipeline(struct radv_device *device,
>                                                                 VK_DYNAMIC_STATE_SCISSOR,
>                                                         },
>                                                 },
> +                                               .layout = device->meta_state.resolve.p_layout,
>                                                                                                                                        .renderPass = device->meta_state.resolve.pass,
>                                                                                                                                        .subpass = 0,
>                                                                                                                                        },
> @@ -222,6 +238,8 @@ radv_device_finish_meta_resolve_state(struct radv_device *device)
>
>         radv_DestroyRenderPass(radv_device_to_handle(device),
>                                state->resolve.pass, &state->alloc);
> +       radv_DestroyPipelineLayout(radv_device_to_handle(device),
> +                                  state->resolve.p_layout, &state->alloc);
>         radv_DestroyPipeline(radv_device_to_handle(device),
>                              state->resolve.pipeline, &state->alloc);
>  }
> diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h
> index 9ef1f78932..244ab8967b 100644
> --- a/src/amd/vulkan/radv_private.h
> +++ b/src/amd/vulkan/radv_private.h
> @@ -434,6 +434,7 @@ struct radv_meta_state {
>         } cleari;
>
>         struct {
> +               VkPipelineLayout                          p_layout;
>                 VkPipeline                                pipeline;
>                 VkRenderPass                              pass;
>         } resolve;
> @@ -459,12 +460,14 @@ struct radv_meta_state {
>         } resolve_fragment;
>
>         struct {
> +               VkPipelineLayout                          p_layout;
>                 VkPipeline                                decompress_pipeline;
>                 VkPipeline                                resummarize_pipeline;
>                 VkRenderPass                              pass;
>         } depth_decomp[1 + MAX_SAMPLES_LOG2];
>
>         struct {
> +               VkPipelineLayout                          p_layout;
>                 VkPipeline                                cmask_eliminate_pipeline;
>                 VkPipeline                                fmask_decompress_pipeline;
>                 VkRenderPass                              pass;
> --
> 2.15.1
>
> _______________________________________________
> 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