From 3595a116489d6f3b2f7fd2aa3eeff6376b82beb2 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Mon, 18 Dec 2017 19:38:52 +0100 Subject: [PATCH] radv: create pipeline layout objects for all meta operations 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 Reviewed-by: Bas Nieuwenhuizen --- 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 b86f3925cf7..7a5681414ff 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 38da63246a3..1acf510359d 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 254861ad18a..e73a950ab7c 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 9ef1f789329..244ab8967b6 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.30.2