diff options
-rw-r--r-- | src/amd/vulkan/radv_meta_decompress.c | 28 | ||||
-rw-r--r-- | src/amd/vulkan/radv_meta_fast_clear.c | 33 | ||||
-rw-r--r-- | src/amd/vulkan/radv_meta_resolve.c | 18 | ||||
-rw-r--r-- | 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 @@ -76,10 +76,28 @@ create_pass(struct radv_device *device, } 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 @@ -75,8 +75,26 @@ create_pass(struct radv_device *device) } 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; |