From 92bb7969a5eec758d34e7962be9b8471e46e9d7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B3zef=20Kucia?= Date: Fri, 18 Aug 2017 17:08:56 +0200 Subject: [PATCH] libs/vkd3d: Create push descriptor set only if needed. --- libs/vkd3d/command.c | 5 +---- libs/vkd3d/state.c | 3 ++- libs/vkd3d/vkd3d_private.h | 1 + 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/libs/vkd3d/command.c b/libs/vkd3d/command.c index 3846474b..f9e7e19e 100644 --- a/libs/vkd3d/command.c +++ b/libs/vkd3d/command.c @@ -1638,17 +1638,14 @@ static void d3d12_command_list_update_descriptors(struct d3d12_command_list *lis { struct vkd3d_pipeline_bindings *bindings = &list->pipeline_bindings[bind_point]; const struct vkd3d_vk_device_procs *vk_procs = &list->device->vk_procs; - const struct vkd3d_vulkan_info *vk_info = &list->device->vk_info; struct d3d12_root_signature *rs = bindings->root_signature; - uint32_t set; if (!rs || !rs->pool_size_count || !rs->vk_set_layout) return; bindings->in_use = true; - set = vk_info->KHR_push_descriptor ? 1 : 0; VK_CALL(vkCmdBindDescriptorSets(list->vk_command_buffer, bind_point, - rs->vk_pipeline_layout, set, 1, &bindings->descriptor_set, 0, NULL)); + rs->vk_pipeline_layout, rs->main_set, 1, &bindings->descriptor_set, 0, NULL)); } static bool d3d12_command_list_begin_render_pass(struct d3d12_command_list *list, diff --git a/libs/vkd3d/state.c b/libs/vkd3d/state.c index 186e5a95..9ac847e2 100644 --- a/libs/vkd3d/state.c +++ b/libs/vkd3d/state.c @@ -881,7 +881,7 @@ static HRESULT d3d12_root_signature_init(struct d3d12_root_signature *root_signa goto fail; /* We use KHR_push_descriptor for root descriptor parameters. */ - if (vk_info->KHR_push_descriptor) + if (vk_info->KHR_push_descriptor && context.descriptor_binding) { set_desc[context.set_index].sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO; set_desc[context.set_index].pNext = NULL; @@ -910,6 +910,7 @@ static HRESULT d3d12_root_signature_init(struct d3d12_root_signature *root_signa if (FAILED(hr = d3d12_root_signature_init_static_samplers(root_signature, device, desc, &context))) goto fail; + root_signature->main_set = context.set_index; if (context.descriptor_binding) { set_desc[context.set_index].sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO; diff --git a/libs/vkd3d/vkd3d_private.h b/libs/vkd3d/vkd3d_private.h index 0189210a..a8194aab 100644 --- a/libs/vkd3d/vkd3d_private.h +++ b/libs/vkd3d/vkd3d_private.h @@ -315,6 +315,7 @@ struct d3d12_root_signature struct d3d12_root_parameter *parameters; unsigned int parameter_count; + uint32_t main_set; unsigned int descriptor_count; struct vkd3d_shader_resource_binding *descriptor_mapping;