[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