Module: Mesa
Branch: main
Commit: 1a95d43e5508e91d2fc88ad6fce34f202aeab923
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=1a95d43e5508e91d2fc88ad6fce34f202aeab923

Author: Konstantin Seurer <[email protected]>
Date:   Wed Jul 20 14:49:38 2022 +0200

radv: Simplify the meta init fail path

Move most of the the cleanup into radv_device_init_meta.

Signed-off-by: Konstantin Seurer <[email protected]>
Reviewed-by: Samuel Pitoiset <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17652>

---

 src/amd/vulkan/radv_acceleration_structure.c    |  2 --
 src/amd/vulkan/radv_device_generated_commands.c | 11 +++------
 src/amd/vulkan/radv_meta.c                      | 32 +++++++++++++-----------
 src/amd/vulkan/radv_meta_blit.c                 | 15 ++++-------
 src/amd/vulkan/radv_meta_blit2d.c               | 12 +++------
 src/amd/vulkan/radv_meta_buffer.c               |  1 -
 src/amd/vulkan/radv_meta_bufimage.c             | 29 ++++++----------------
 src/amd/vulkan/radv_meta_clear.c                | 30 +++++++++-------------
 src/amd/vulkan/radv_meta_dcc_retile.c           |  2 --
 src/amd/vulkan/radv_meta_decompress.c           | 16 +++---------
 src/amd/vulkan/radv_meta_etc_decode.c           | 11 ++-------
 src/amd/vulkan/radv_meta_fast_clear.c           | 15 +++--------
 src/amd/vulkan/radv_meta_fmask_copy.c           |  9 +++----
 src/amd/vulkan/radv_meta_fmask_expand.c         |  9 +++----
 src/amd/vulkan/radv_meta_resolve.c              |  9 ++-----
 src/amd/vulkan/radv_meta_resolve_cs.c           | 33 ++++++++++---------------
 src/amd/vulkan/radv_meta_resolve_fs.c           | 27 ++++++++------------
 17 files changed, 90 insertions(+), 173 deletions(-)

diff --git a/src/amd/vulkan/radv_acceleration_structure.c 
b/src/amd/vulkan/radv_acceleration_structure.c
index 6a6b8f95914..cfecb5a0155 100644
--- a/src/amd/vulkan/radv_acceleration_structure.c
+++ b/src/amd/vulkan/radv_acceleration_structure.c
@@ -1924,7 +1924,6 @@ create_build_pipeline(struct radv_device *device, 
nir_shader *shader, unsigned p
    VkResult result = radv_CreatePipelineLayout(radv_device_to_handle(device), 
&pl_create_info,
                                                &device->meta_state.alloc, 
layout);
    if (result != VK_SUCCESS) {
-      radv_device_finish_accel_struct_build_state(device);
       ralloc_free(shader);
       return result;
    }
@@ -1949,7 +1948,6 @@ create_build_pipeline(struct radv_device *device, 
nir_shader *shader, unsigned p
                                         &pipeline_info, 
&device->meta_state.alloc, pipeline);
 
    if (result != VK_SUCCESS) {
-      radv_device_finish_accel_struct_build_state(device);
       ralloc_free(shader);
       return result;
    }
diff --git a/src/amd/vulkan/radv_device_generated_commands.c 
b/src/amd/vulkan/radv_device_generated_commands.c
index 3d1039a5fd3..b0b7d88495a 100644
--- a/src/amd/vulkan/radv_device_generated_commands.c
+++ b/src/amd/vulkan/radv_device_generated_commands.c
@@ -956,7 +956,7 @@ radv_device_init_dgc_prepare_state(struct radv_device 
*device)
                                            &device->meta_state.alloc,
                                            
&device->meta_state.dgc_prepare.ds_layout);
    if (result != VK_SUCCESS)
-      goto fail;
+      goto cleanup;
 
    const VkPipelineLayoutCreateInfo leaf_pl_create_info = {
       .sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,
@@ -971,7 +971,7 @@ radv_device_init_dgc_prepare_state(struct radv_device 
*device)
                                       &device->meta_state.alloc,
                                       
&device->meta_state.dgc_prepare.p_layout);
    if (result != VK_SUCCESS)
-      goto fail;
+      goto cleanup;
 
    VkPipelineShaderStageCreateInfo shader_stage = {
       .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,
@@ -992,12 +992,9 @@ radv_device_init_dgc_prepare_state(struct radv_device 
*device)
       radv_device_to_handle(device), 
radv_pipeline_cache_to_handle(&device->meta_state.cache), 1,
       &pipeline_info, &device->meta_state.alloc, 
&device->meta_state.dgc_prepare.pipeline);
    if (result != VK_SUCCESS)
-      goto fail;
+      goto cleanup;
 
-   ralloc_free(cs);
-   return VK_SUCCESS;
-fail:
-   radv_device_finish_dgc_prepare_state(device);
+cleanup:
    ralloc_free(cs);
    return result;
 }
diff --git a/src/amd/vulkan/radv_meta.c b/src/amd/vulkan/radv_meta.c
index a96835b1e02..e98d3d7463c 100644
--- a/src/amd/vulkan/radv_meta.c
+++ b/src/amd/vulkan/radv_meta.c
@@ -641,36 +641,38 @@ radv_device_init_meta(struct radv_device *device)
    return VK_SUCCESS;
 
 fail_dgc:
-   radv_device_finish_meta_etc_decode_state(device);
+   radv_device_finish_dgc_prepare_state(device);
 fail_etc_decode:
-   radv_device_finish_meta_fmask_copy_state(device);
+   radv_device_finish_meta_etc_decode_state(device);
 fail_fmask_copy:
-   radv_device_finish_accel_struct_build_state(device);
+   radv_device_finish_meta_fmask_copy_state(device);
 fail_accel_struct_build:
-   radv_device_finish_meta_fmask_expand_state(device);
+   radv_device_finish_accel_struct_build_state(device);
 fail_fmask_expand:
-   radv_device_finish_meta_resolve_fragment_state(device);
+   radv_device_finish_meta_fmask_expand_state(device);
 fail_resolve_fragment:
-   radv_device_finish_meta_resolve_compute_state(device);
+   radv_device_finish_meta_resolve_fragment_state(device);
 fail_resolve_compute:
-   radv_device_finish_meta_fast_clear_flush_state(device);
+   radv_device_finish_meta_resolve_compute_state(device);
 fail_fast_clear:
-   radv_device_finish_meta_query_state(device);
+   radv_device_finish_meta_fast_clear_flush_state(device);
 fail_query:
-   radv_device_finish_meta_buffer_state(device);
+   radv_device_finish_meta_query_state(device);
 fail_buffer:
-   radv_device_finish_meta_depth_decomp_state(device);
+   radv_device_finish_meta_buffer_state(device);
 fail_depth_decomp:
-   radv_device_finish_meta_bufimage_state(device);
+   radv_device_finish_meta_depth_decomp_state(device);
 fail_bufimage:
-   radv_device_finish_meta_blit2d_state(device);
+   radv_device_finish_meta_bufimage_state(device);
 fail_blit2d:
-   radv_device_finish_meta_blit_state(device);
+   radv_device_finish_meta_blit2d_state(device);
 fail_blit:
-   radv_device_finish_meta_resolve_state(device);
+   radv_device_finish_meta_blit_state(device);
 fail_resolve:
-   radv_device_finish_meta_clear_state(device);
+   radv_device_finish_meta_resolve_state(device);
 fail_clear:
+   radv_device_finish_meta_clear_state(device);
+
    mtx_destroy(&device->meta_state.mtx);
    radv_pipeline_cache_finish(&device->meta_state.cache);
    return result;
diff --git a/src/amd/vulkan/radv_meta_blit.c b/src/amd/vulkan/radv_meta_blit.c
index 84f07597caf..be419bddc02 100644
--- a/src/amd/vulkan/radv_meta_blit.c
+++ b/src/amd/vulkan/radv_meta_blit.c
@@ -932,7 +932,7 @@ radv_device_init_meta_blit_state(struct radv_device 
*device, bool on_demand)
       radv_CreateDescriptorSetLayout(radv_device_to_handle(device), 
&ds_layout_info,
                                      &device->meta_state.alloc, 
&device->meta_state.blit.ds_layout);
    if (result != VK_SUCCESS)
-      goto fail;
+      return result;
 
    const VkPushConstantRange push_constant_range = 
{VK_SHADER_STAGE_VERTEX_BIT, 0, 20};
 
@@ -947,20 +947,15 @@ radv_device_init_meta_blit_state(struct radv_device 
*device, bool on_demand)
                                       &device->meta_state.alloc,
                                       
&device->meta_state.blit.pipeline_layout);
    if (result != VK_SUCCESS)
-      goto fail;
+      return result;
 
    result = radv_device_init_meta_blit_color(device, on_demand);
    if (result != VK_SUCCESS)
-      goto fail;
+      return result;
 
    result = radv_device_init_meta_blit_depth(device, on_demand);
    if (result != VK_SUCCESS)
-      goto fail;
+      return result;
 
-   result = radv_device_init_meta_blit_stencil(device, on_demand);
-
-fail:
-   if (result != VK_SUCCESS)
-      radv_device_finish_meta_blit_state(device);
-   return result;
+   return radv_device_init_meta_blit_stencil(device, on_demand);
 }
diff --git a/src/amd/vulkan/radv_meta_blit2d.c 
b/src/amd/vulkan/radv_meta_blit2d.c
index d7bdf71789c..f8bc5580450 100644
--- a/src/amd/vulkan/radv_meta_blit2d.c
+++ b/src/amd/vulkan/radv_meta_blit2d.c
@@ -1131,7 +1131,7 @@ radv_device_init_meta_blit2d_state(struct radv_device 
*device, bool on_demand)
 
          result = meta_blit2d_create_pipe_layout(device, src, log2_samples);
          if (result != VK_SUCCESS)
-            goto fail;
+            return result;
 
          if (on_demand)
             continue;
@@ -1140,22 +1140,18 @@ radv_device_init_meta_blit2d_state(struct radv_device 
*device, bool on_demand)
             result = blit2d_init_color_pipeline(device, src, 
radv_fs_key_format_exemplars[j],
                                                 log2_samples);
             if (result != VK_SUCCESS)
-               goto fail;
+               return result;
          }
 
          result = blit2d_init_depth_only_pipeline(device, src, log2_samples);
          if (result != VK_SUCCESS)
-            goto fail;
+            return result;
 
          result = blit2d_init_stencil_only_pipeline(device, src, log2_samples);
          if (result != VK_SUCCESS)
-            goto fail;
+            return result;
       }
    }
 
    return VK_SUCCESS;
-
-fail:
-   radv_device_finish_meta_blit2d_state(device);
-   return result;
 }
diff --git a/src/amd/vulkan/radv_meta_buffer.c 
b/src/amd/vulkan/radv_meta_buffer.c
index 3f1abf602b4..a0acad84e56 100644
--- a/src/amd/vulkan/radv_meta_buffer.c
+++ b/src/amd/vulkan/radv_meta_buffer.c
@@ -148,7 +148,6 @@ radv_device_init_meta_buffer_state(struct radv_device 
*device)
    ralloc_free(copy_cs);
    return VK_SUCCESS;
 fail:
-   radv_device_finish_meta_buffer_state(device);
    ralloc_free(fill_cs);
    ralloc_free(copy_cs);
    return result;
diff --git a/src/amd/vulkan/radv_meta_bufimage.c 
b/src/amd/vulkan/radv_meta_bufimage.c
index 444a02280fe..7ba611d5575 100644
--- a/src/amd/vulkan/radv_meta_bufimage.c
+++ b/src/amd/vulkan/radv_meta_bufimage.c
@@ -1174,48 +1174,33 @@ radv_device_init_meta_bufimage_state(struct radv_device 
*device)
 
    result = radv_device_init_meta_itob_state(device);
    if (result != VK_SUCCESS)
-      goto fail_itob;
+      return result;
 
    result = radv_device_init_meta_btoi_state(device);
    if (result != VK_SUCCESS)
-      goto fail_btoi;
+      return result;
 
    result = radv_device_init_meta_btoi_r32g32b32_state(device);
    if (result != VK_SUCCESS)
-      goto fail_btoi_r32g32b32;
+      return result;
 
    result = radv_device_init_meta_itoi_state(device);
    if (result != VK_SUCCESS)
-      goto fail_itoi;
+      return result;
 
    result = radv_device_init_meta_itoi_r32g32b32_state(device);
    if (result != VK_SUCCESS)
-      goto fail_itoi_r32g32b32;
+      return result;
 
    result = radv_device_init_meta_cleari_state(device);
    if (result != VK_SUCCESS)
-      goto fail_cleari;
+      return result;
 
    result = radv_device_init_meta_cleari_r32g32b32_state(device);
    if (result != VK_SUCCESS)
-      goto fail_cleari_r32g32b32;
+      return result;
 
    return VK_SUCCESS;
-fail_cleari_r32g32b32:
-   radv_device_finish_meta_cleari_r32g32b32_state(device);
-fail_cleari:
-   radv_device_finish_meta_cleari_state(device);
-fail_itoi_r32g32b32:
-   radv_device_finish_meta_itoi_r32g32b32_state(device);
-fail_itoi:
-   radv_device_finish_meta_itoi_state(device);
-fail_btoi_r32g32b32:
-   radv_device_finish_meta_btoi_r32g32b32_state(device);
-fail_btoi:
-   radv_device_finish_meta_btoi_state(device);
-fail_itob:
-   radv_device_finish_meta_itob_state(device);
-   return result;
 }
 
 static void
diff --git a/src/amd/vulkan/radv_meta_clear.c b/src/amd/vulkan/radv_meta_clear.c
index 4aa86042061..b79e46f5169 100644
--- a/src/amd/vulkan/radv_meta_clear.c
+++ b/src/amd/vulkan/radv_meta_clear.c
@@ -991,8 +991,6 @@ init_meta_clear_htile_mask_state(struct radv_device *device)
                                         
radv_pipeline_cache_to_handle(&state->cache), 1,
                                         &pipeline_info, NULL, 
&state->clear_htile_mask_pipeline);
 
-   ralloc_free(cs);
-   return result;
 fail:
    ralloc_free(cs);
    return result;
@@ -1146,7 +1144,7 @@ radv_device_init_meta_clear_state(struct radv_device 
*device, bool on_demand)
                                    &device->meta_state.alloc,
                                    &device->meta_state.clear_color_p_layout);
    if (res != VK_SUCCESS)
-      goto fail;
+      return res;
 
    VkPipelineLayoutCreateInfo pl_depth_create_info = {
       .sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,
@@ -1159,7 +1157,7 @@ radv_device_init_meta_clear_state(struct radv_device 
*device, bool on_demand)
                                    &device->meta_state.alloc,
                                    &device->meta_state.clear_depth_p_layout);
    if (res != VK_SUCCESS)
-      goto fail;
+      return res;
 
    VkPipelineLayoutCreateInfo pl_depth_unrestricted_create_info = {
       .sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,
@@ -1172,15 +1170,15 @@ radv_device_init_meta_clear_state(struct radv_device 
*device, bool on_demand)
                                    &pl_depth_unrestricted_create_info, 
&device->meta_state.alloc,
                                    
&device->meta_state.clear_depth_unrestricted_p_layout);
    if (res != VK_SUCCESS)
-      goto fail;
+      return res;
 
    res = init_meta_clear_htile_mask_state(device);
    if (res != VK_SUCCESS)
-      goto fail;
+      return res;
 
    res = init_meta_clear_dcc_comp_to_single_state(device);
    if (res != VK_SUCCESS)
-      goto fail;
+      return res;
 
    if (on_demand)
       return VK_SUCCESS;
@@ -1197,7 +1195,7 @@ radv_device_init_meta_clear_state(struct radv_device 
*device, bool on_demand)
          res = create_color_pipeline(device, samples, 0, format,
                                      
&state->color_clear[i][0].color_pipelines[fs_key]);
          if (res != VK_SUCCESS)
-            goto fail;
+            return res;
       }
    }
    for (uint32_t i = 0; i < ARRAY_SIZE(state->ds_clear); ++i) {
@@ -1207,42 +1205,38 @@ radv_device_init_meta_clear_state(struct radv_device 
*device, bool on_demand)
          res = create_depthstencil_pipeline(device, VK_IMAGE_ASPECT_DEPTH_BIT, 
samples, j, false,
                                             
&state->ds_clear[i].depth_only_pipeline[j]);
          if (res != VK_SUCCESS)
-            goto fail;
+            return res;
 
          res = create_depthstencil_pipeline(device, 
VK_IMAGE_ASPECT_STENCIL_BIT, samples, j, false,
                                             
&state->ds_clear[i].stencil_only_pipeline[j]);
          if (res != VK_SUCCESS)
-            goto fail;
+            return res;
 
          res = create_depthstencil_pipeline(
             device, VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT, 
samples, j, false,
             &state->ds_clear[i].depthstencil_pipeline[j]);
          if (res != VK_SUCCESS)
-            goto fail;
+            return res;
 
          res = create_depthstencil_pipeline(device, VK_IMAGE_ASPECT_DEPTH_BIT, 
samples, j, true,
                                             
&state->ds_clear[i].depth_only_unrestricted_pipeline[j]);
          if (res != VK_SUCCESS)
-            goto fail;
+            return res;
 
          res =
             create_depthstencil_pipeline(device, VK_IMAGE_ASPECT_STENCIL_BIT, 
samples, j, true,
                                          
&state->ds_clear[i].stencil_only_unrestricted_pipeline[j]);
          if (res != VK_SUCCESS)
-            goto fail;
+            return res;
 
          res = create_depthstencil_pipeline(
             device, VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT, 
samples, j, true,
             &state->ds_clear[i].depthstencil_unrestricted_pipeline[j]);
          if (res != VK_SUCCESS)
-            goto fail;
+            return res;
       }
    }
    return VK_SUCCESS;
-
-fail:
-   radv_device_finish_meta_clear_state(device);
-   return res;
 }
 
 static uint32_t
diff --git a/src/amd/vulkan/radv_meta_dcc_retile.c 
b/src/amd/vulkan/radv_meta_dcc_retile.c
index b77063b482d..6067289ab32 100644
--- a/src/amd/vulkan/radv_meta_dcc_retile.c
+++ b/src/amd/vulkan/radv_meta_dcc_retile.c
@@ -173,8 +173,6 @@ radv_device_init_meta_dcc_retile_state(struct radv_device 
*device, struct radeon
       goto cleanup;
 
 cleanup:
-   if (result != VK_SUCCESS)
-      radv_device_finish_meta_dcc_retile_state(device);
    ralloc_free(cs);
    return result;
 }
diff --git a/src/amd/vulkan/radv_meta_decompress.c 
b/src/amd/vulkan/radv_meta_decompress.c
index f852f6971e9..97d2ce5d501 100644
--- a/src/amd/vulkan/radv_meta_decompress.c
+++ b/src/amd/vulkan/radv_meta_decompress.c
@@ -335,7 +335,7 @@ radv_device_init_meta_depth_decomp_state(struct radv_device 
*device, bool on_dem
 
       res = create_pipeline_layout(device, &state->depth_decomp[i].p_layout);
       if (res != VK_SUCCESS)
-         goto fail;
+         return res;
 
       if (on_demand)
          continue;
@@ -343,23 +343,15 @@ radv_device_init_meta_depth_decomp_state(struct 
radv_device *device, bool on_dem
       res = create_pipeline(device, samples, state->depth_decomp[i].p_layout, 
DEPTH_DECOMPRESS,
                             &state->depth_decomp[i].decompress_pipeline);
       if (res != VK_SUCCESS)
-         goto fail;
+         return res;
 
       res = create_pipeline(device, samples, state->depth_decomp[i].p_layout, 
DEPTH_RESUMMARIZE,
                             &state->depth_decomp[i].resummarize_pipeline);
       if (res != VK_SUCCESS)
-         goto fail;
+         return res;
    }
 
-   res = create_expand_depth_stencil_compute(device);
-   if (res != VK_SUCCESS)
-      goto fail;
-
-   return VK_SUCCESS;
-
-fail:
-   radv_device_finish_meta_depth_decomp_state(device);
-   return res;
+   return create_expand_depth_stencil_compute(device);
 }
 
 static VkPipeline *
diff --git a/src/amd/vulkan/radv_meta_etc_decode.c 
b/src/amd/vulkan/radv_meta_etc_decode.c
index feb3f304085..4ce0de464d7 100644
--- a/src/amd/vulkan/radv_meta_etc_decode.c
+++ b/src/amd/vulkan/radv_meta_etc_decode.c
@@ -620,19 +620,12 @@ radv_device_init_meta_etc_decode_state(struct radv_device 
*device, bool on_deman
 
    res = create_layout(device);
    if (res != VK_SUCCESS)
-      goto fail;
+      return res;
 
    if (on_demand)
       return VK_SUCCESS;
 
-   res = create_decode_pipeline(device, &state->etc_decode.pipeline);
-   if (res != VK_SUCCESS)
-      goto fail;
-
-   return VK_SUCCESS;
-fail:
-   radv_device_finish_meta_etc_decode_state(device);
-   return res;
+   return create_decode_pipeline(device, &state->etc_decode.pipeline);
 }
 
 void
diff --git a/src/amd/vulkan/radv_meta_fast_clear.c 
b/src/amd/vulkan/radv_meta_fast_clear.c
index c213ea43aa2..bfa23bfc8f7 100644
--- a/src/amd/vulkan/radv_meta_fast_clear.c
+++ b/src/amd/vulkan/radv_meta_fast_clear.c
@@ -381,8 +381,6 @@ create_pipeline(struct radv_device *device, VkShaderModule 
vs_module_h, VkPipeli
    if (result != VK_SUCCESS)
       goto cleanup;
 
-   goto cleanup;
-
 cleanup:
    ralloc_free(fs_module);
    return result;
@@ -427,26 +425,21 @@ 
radv_device_init_meta_fast_clear_flush_state_internal(struct radv_device *device
    if (!vs_module) {
       /* XXX: Need more accurate error */
       res = VK_ERROR_OUT_OF_HOST_MEMORY;
-      goto fail;
+      goto cleanup;
    }
 
    res = create_pipeline_layout(device, 
&device->meta_state.fast_clear_flush.p_layout);
    if (res != VK_SUCCESS)
-      goto fail;
+      goto cleanup;
 
    VkShaderModule vs_module_h = vk_shader_module_handle_from_nir(vs_module);
    res = create_pipeline(device, vs_module_h, 
device->meta_state.fast_clear_flush.p_layout);
    if (res != VK_SUCCESS)
-      goto fail;
+      goto cleanup;
 
    res = create_dcc_compress_compute(device);
    if (res != VK_SUCCESS)
-      goto fail;
-
-   goto cleanup;
-
-fail:
-   radv_device_finish_meta_fast_clear_flush_state(device);
+      goto cleanup;
 
 cleanup:
    ralloc_free(vs_module);
diff --git a/src/amd/vulkan/radv_meta_fmask_copy.c 
b/src/amd/vulkan/radv_meta_fmask_copy.c
index 389aa96bd6f..26b92504505 100644
--- a/src/amd/vulkan/radv_meta_fmask_copy.c
+++ b/src/amd/vulkan/radv_meta_fmask_copy.c
@@ -195,7 +195,7 @@ radv_device_init_meta_fmask_copy_state(struct radv_device 
*device)
                                            &device->meta_state.alloc,
                                            
&device->meta_state.fmask_copy.ds_layout);
    if (result != VK_SUCCESS)
-      goto fail;
+      return result;
 
    VkPipelineLayoutCreateInfo pl_create_info = {
       .sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,
@@ -209,19 +209,16 @@ radv_device_init_meta_fmask_copy_state(struct radv_device 
*device)
       radv_CreatePipelineLayout(radv_device_to_handle(device), &pl_create_info,
                                 &device->meta_state.alloc, 
&device->meta_state.fmask_copy.p_layout);
    if (result != VK_SUCCESS)
-      goto fail;
+      return result;
 
    for (uint32_t i = 0; i < MAX_SAMPLES_LOG2; i++) {
       uint32_t samples = 1 << i;
       result = create_fmask_copy_pipeline(device, samples, 
&device->meta_state.fmask_copy.pipeline[i]);
       if (result != VK_SUCCESS)
-         goto fail;
+         return result;
    }
 
    return VK_SUCCESS;
-fail:
-   radv_device_finish_meta_fmask_copy_state(device);
-   return result;
 }
 
 static void
diff --git a/src/amd/vulkan/radv_meta_fmask_expand.c 
b/src/amd/vulkan/radv_meta_fmask_expand.c
index 5293ae54316..d45fcc9293c 100644
--- a/src/amd/vulkan/radv_meta_fmask_expand.c
+++ b/src/amd/vulkan/radv_meta_fmask_expand.c
@@ -239,7 +239,7 @@ radv_device_init_meta_fmask_expand_state(struct radv_device 
*device)
    result = radv_CreateDescriptorSetLayout(radv_device_to_handle(device), 
&ds_create_info,
                                            &state->alloc, 
&state->fmask_expand.ds_layout);
    if (result != VK_SUCCESS)
-      goto fail;
+      return result;
 
    VkPipelineLayoutCreateInfo color_create_info = {
       .sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,
@@ -252,17 +252,14 @@ radv_device_init_meta_fmask_expand_state(struct 
radv_device *device)
    result = radv_CreatePipelineLayout(radv_device_to_handle(device), 
&color_create_info,
                                       &state->alloc, 
&state->fmask_expand.p_layout);
    if (result != VK_SUCCESS)
-      goto fail;
+      return result;
 
    for (uint32_t i = 0; i < MAX_SAMPLES_LOG2; i++) {
       uint32_t samples = 1 << i;
       result = create_fmask_expand_pipeline(device, samples, 
&state->fmask_expand.pipeline[i]);
       if (result != VK_SUCCESS)
-         goto fail;
+         return result;
    }
 
    return VK_SUCCESS;
-fail:
-   radv_device_finish_meta_fmask_expand_state(device);
-   return result;
 }
diff --git a/src/amd/vulkan/radv_meta_resolve.c 
b/src/amd/vulkan/radv_meta_resolve.c
index 0fd346517ce..96ab0acec28 100644
--- a/src/amd/vulkan/radv_meta_resolve.c
+++ b/src/amd/vulkan/radv_meta_resolve.c
@@ -210,7 +210,7 @@ radv_device_init_meta_resolve_state(struct radv_device 
*device, bool on_demand)
    if (!vs_module) {
       /* XXX: Need more accurate error */
       res = VK_ERROR_OUT_OF_HOST_MEMORY;
-      goto fail;
+      goto cleanup;
    }
 
    for (uint32_t i = 0; i < NUM_META_FS_KEYS; ++i) {
@@ -220,14 +220,9 @@ radv_device_init_meta_resolve_state(struct radv_device 
*device, bool on_demand)
       VkShaderModule vs_module_h = vk_shader_module_handle_from_nir(vs_module);
       res = create_pipeline(device, vs_module_h, format, 
&state->resolve.pipeline[fs_key]);
       if (res != VK_SUCCESS)
-         goto fail;
+         goto cleanup;
    }
 
-   goto cleanup;
-
-fail:
-   radv_device_finish_meta_resolve_state(device);
-
 cleanup:
    ralloc_free(vs_module);
 
diff --git a/src/amd/vulkan/radv_meta_resolve_cs.c 
b/src/amd/vulkan/radv_meta_resolve_cs.c
index 2e4da3ff749..f6d924b6d84 100644
--- a/src/amd/vulkan/radv_meta_resolve_cs.c
+++ b/src/amd/vulkan/radv_meta_resolve_cs.c
@@ -373,7 +373,7 @@ radv_device_init_meta_resolve_compute_state(struct 
radv_device *device, bool on_
 
    res = create_layout(device);
    if (res != VK_SUCCESS)
-      goto fail;
+      return res;
 
    if (on_demand)
       return VK_SUCCESS;
@@ -384,65 +384,58 @@ radv_device_init_meta_resolve_compute_state(struct 
radv_device *device, bool on_
       res = create_resolve_pipeline(device, samples, false, false,
                                     &state->resolve_compute.rc[i].pipeline);
       if (res != VK_SUCCESS)
-         goto fail;
+         return res;
 
       res = create_resolve_pipeline(device, samples, true, false,
                                     &state->resolve_compute.rc[i].i_pipeline);
       if (res != VK_SUCCESS)
-         goto fail;
+         return res;
 
       res = create_resolve_pipeline(device, samples, false, true,
                                     
&state->resolve_compute.rc[i].srgb_pipeline);
       if (res != VK_SUCCESS)
-         goto fail;
+         return res;
 
       res = create_depth_stencil_resolve_pipeline(
          device, samples, DEPTH_RESOLVE, VK_RESOLVE_MODE_AVERAGE_BIT,
          &state->resolve_compute.depth[i].average_pipeline);
       if (res != VK_SUCCESS)
-         goto fail;
+         return res;
 
       res = create_depth_stencil_resolve_pipeline(device, samples, 
DEPTH_RESOLVE,
                                                   VK_RESOLVE_MODE_MAX_BIT,
                                                   
&state->resolve_compute.depth[i].max_pipeline);
       if (res != VK_SUCCESS)
-         goto fail;
+         return res;
 
       res = create_depth_stencil_resolve_pipeline(device, samples, 
DEPTH_RESOLVE,
                                                   VK_RESOLVE_MODE_MIN_BIT,
                                                   
&state->resolve_compute.depth[i].min_pipeline);
       if (res != VK_SUCCESS)
-         goto fail;
+         return res;
 
       res = create_depth_stencil_resolve_pipeline(device, samples, 
STENCIL_RESOLVE,
                                                   VK_RESOLVE_MODE_MAX_BIT,
                                                   
&state->resolve_compute.stencil[i].max_pipeline);
       if (res != VK_SUCCESS)
-         goto fail;
+         return res;
 
       res = create_depth_stencil_resolve_pipeline(device, samples, 
STENCIL_RESOLVE,
                                                   VK_RESOLVE_MODE_MIN_BIT,
                                                   
&state->resolve_compute.stencil[i].min_pipeline);
       if (res != VK_SUCCESS)
-         goto fail;
+         return res;
    }
 
    res = create_depth_stencil_resolve_pipeline(device, 0, DEPTH_RESOLVE,
                                                VK_RESOLVE_MODE_SAMPLE_ZERO_BIT,
                                                
&state->resolve_compute.depth_zero_pipeline);
    if (res != VK_SUCCESS)
-      goto fail;
-
-   res = create_depth_stencil_resolve_pipeline(device, 0, STENCIL_RESOLVE,
-                                               VK_RESOLVE_MODE_SAMPLE_ZERO_BIT,
-                                               
&state->resolve_compute.stencil_zero_pipeline);
-   if (res != VK_SUCCESS)
-      goto fail;
+      return res;
 
-   return VK_SUCCESS;
-fail:
-   radv_device_finish_meta_resolve_compute_state(device);
-   return res;
+   return create_depth_stencil_resolve_pipeline(device, 0, STENCIL_RESOLVE,
+                                                
VK_RESOLVE_MODE_SAMPLE_ZERO_BIT,
+                                                
&state->resolve_compute.stencil_zero_pipeline);
 }
 
 void
diff --git a/src/amd/vulkan/radv_meta_resolve_fs.c 
b/src/amd/vulkan/radv_meta_resolve_fs.c
index e6e95dff96d..c58eaaf131e 100644
--- a/src/amd/vulkan/radv_meta_resolve_fs.c
+++ b/src/amd/vulkan/radv_meta_resolve_fs.c
@@ -523,7 +523,7 @@ radv_device_init_meta_resolve_fragment_state(struct 
radv_device *device, bool on
 
    res = create_layout(device);
    if (res != VK_SUCCESS)
-      goto fail;
+      return res;
 
    if (on_demand)
       return VK_SUCCESS;
@@ -532,49 +532,42 @@ radv_device_init_meta_resolve_fragment_state(struct 
radv_device *device, bool on
       for (unsigned j = 0; j < NUM_META_FS_KEYS; ++j) {
          res = create_resolve_pipeline(device, i, 
radv_fs_key_format_exemplars[j]);
          if (res != VK_SUCCESS)
-            goto fail;
+            return res;
       }
 
       res = create_depth_stencil_resolve_pipeline(device, i, DEPTH_RESOLVE,
                                                   VK_RESOLVE_MODE_AVERAGE_BIT);
       if (res != VK_SUCCESS)
-         goto fail;
+         return res;
 
       res = create_depth_stencil_resolve_pipeline(device, i, DEPTH_RESOLVE,
                                                   VK_RESOLVE_MODE_MIN_BIT);
       if (res != VK_SUCCESS)
-         goto fail;
+         return res;
 
       res = create_depth_stencil_resolve_pipeline(device, i, DEPTH_RESOLVE,
                                                   VK_RESOLVE_MODE_MAX_BIT);
       if (res != VK_SUCCESS)
-         goto fail;
+         return res;
 
       res = create_depth_stencil_resolve_pipeline(device, i, STENCIL_RESOLVE,
                                                   VK_RESOLVE_MODE_MIN_BIT);
       if (res != VK_SUCCESS)
-         goto fail;
+         return res;
 
       res = create_depth_stencil_resolve_pipeline(device, i, STENCIL_RESOLVE,
                                                   VK_RESOLVE_MODE_MAX_BIT);
       if (res != VK_SUCCESS)
-         goto fail;
+         return res;
    }
 
    res = create_depth_stencil_resolve_pipeline(device, 0, DEPTH_RESOLVE,
                                                
VK_RESOLVE_MODE_SAMPLE_ZERO_BIT);
    if (res != VK_SUCCESS)
-      goto fail;
-
-   res = create_depth_stencil_resolve_pipeline(device, 0, STENCIL_RESOLVE,
-                                               
VK_RESOLVE_MODE_SAMPLE_ZERO_BIT);
-   if (res != VK_SUCCESS)
-      goto fail;
+      return res;
 
-   return VK_SUCCESS;
-fail:
-   radv_device_finish_meta_resolve_fragment_state(device);
-   return res;
+   return create_depth_stencil_resolve_pipeline(device, 0, STENCIL_RESOLVE,
+                                                
VK_RESOLVE_MODE_SAMPLE_ZERO_BIT);
 }
 
 void

Reply via email to