[PATCH vkd3d 1/2] vkd3d: Introduce a pipeline state helper function for uav counter cleanup.

Conor McCarthy cmccarthy at codeweavers.com
Mon Jul 19 22:05:59 CDT 2021


Signed-off-by: Conor McCarthy <cmccarthy at codeweavers.com>
---
 libs/vkd3d/state.c | 31 +++++++++++++++----------------
 1 file changed, 15 insertions(+), 16 deletions(-)

diff --git a/libs/vkd3d/state.c b/libs/vkd3d/state.c
index 4537e319..c60478be 100644
--- a/libs/vkd3d/state.c
+++ b/libs/vkd3d/state.c
@@ -1190,6 +1190,18 @@ static void d3d12_pipeline_state_destroy_graphics(struct d3d12_pipeline_state *s
     }
 }
 
+static void d3d12_pipeline_state_uav_counter_cleanup(struct d3d12_pipeline_state *state, struct d3d12_device *device)
+{
+    const struct vkd3d_vk_device_procs *vk_procs = &device->vk_procs;
+
+    if (state->vk_set_layout)
+        VK_CALL(vkDestroyDescriptorSetLayout(device->vk_device, state->vk_set_layout, NULL));
+    if (state->vk_pipeline_layout)
+        VK_CALL(vkDestroyPipelineLayout(device->vk_device, state->vk_pipeline_layout, NULL));
+
+    vkd3d_free(state->uav_counters);
+}
+
 static ULONG STDMETHODCALLTYPE d3d12_pipeline_state_Release(ID3D12PipelineState *iface)
 {
     struct d3d12_pipeline_state *state = impl_from_ID3D12PipelineState(iface);
@@ -1209,12 +1221,7 @@ static ULONG STDMETHODCALLTYPE d3d12_pipeline_state_Release(ID3D12PipelineState
         else if (d3d12_pipeline_state_is_compute(state))
             VK_CALL(vkDestroyPipeline(device->vk_device, state->u.compute.vk_pipeline, NULL));
 
-        if (state->vk_set_layout)
-            VK_CALL(vkDestroyDescriptorSetLayout(device->vk_device, state->vk_set_layout, NULL));
-        if (state->vk_pipeline_layout)
-            VK_CALL(vkDestroyPipelineLayout(device->vk_device, state->vk_pipeline_layout, NULL));
-
-        vkd3d_free(state->uav_counters);
+        d3d12_pipeline_state_uav_counter_cleanup(state, device);
 
         vkd3d_free(state);
 
@@ -1574,22 +1581,14 @@ static HRESULT d3d12_pipeline_state_init_compute(struct d3d12_pipeline_state *st
             vk_pipeline_layout, &state->u.compute.vk_pipeline)))
     {
         WARN("Failed to create Vulkan compute pipeline, hr %#x.\n", hr);
-        if (state->vk_set_layout)
-            VK_CALL(vkDestroyDescriptorSetLayout(device->vk_device, state->vk_set_layout, NULL));
-        if (state->vk_pipeline_layout)
-            VK_CALL(vkDestroyPipelineLayout(device->vk_device, state->vk_pipeline_layout, NULL));
-        vkd3d_free(state->uav_counters);
+        d3d12_pipeline_state_uav_counter_cleanup(state, device);
         return hr;
     }
 
     if (FAILED(hr = vkd3d_private_store_init(&state->private_store)))
     {
         VK_CALL(vkDestroyPipeline(device->vk_device, state->u.compute.vk_pipeline, NULL));
-        if (state->vk_set_layout)
-            VK_CALL(vkDestroyDescriptorSetLayout(device->vk_device, state->vk_set_layout, NULL));
-        if (state->vk_pipeline_layout)
-            VK_CALL(vkDestroyPipelineLayout(device->vk_device, state->vk_pipeline_layout, NULL));
-        vkd3d_free(state->uav_counters);
+        d3d12_pipeline_state_uav_counter_cleanup(state, device);
         return hr;
     }
 
-- 
2.32.0




More information about the wine-devel mailing list