vkd3d: Store index of root descriptor set in root signature.

This allows us to put root descriptors into a set other than 0.

Signed-off-by: Philip Rebohle <philip.rebohle@tu-dortmund.de>
This commit is contained in:
Philip Rebohle 2020-03-03 12:56:10 +01:00 committed by Hans-Kristian Arntzen
parent 3f125ac919
commit 189bcd39af
3 changed files with 15 additions and 7 deletions

View File

@ -2867,7 +2867,7 @@ static void d3d12_command_list_update_descriptors(struct d3d12_command_list *lis
if (bindings->descriptor_set)
{
VK_CALL(vkCmdBindDescriptorSets(list->vk_command_buffer, bind_point,
rs->vk_pipeline_layout, rs->main_set, 1, &bindings->descriptor_set, 0, NULL));
rs->vk_pipeline_layout, rs->packed_descriptor_set, 1, &bindings->descriptor_set, 0, NULL));
bindings->in_use = true;
}
@ -4179,7 +4179,8 @@ static void d3d12_command_list_set_root_cbv(struct d3d12_command_list *list,
vk_write_descriptor_set_from_root_descriptor(&descriptor_write,
root_parameter, VK_NULL_HANDLE, NULL, &buffer_info);
VK_CALL(vkCmdPushDescriptorSetKHR(list->vk_command_buffer, bind_point,
root_signature->vk_pipeline_layout, 0, 1, &descriptor_write));
root_signature->vk_pipeline_layout, root_signature->root_descriptor_set,
1, &descriptor_write));
}
else
{
@ -4243,7 +4244,8 @@ static void d3d12_command_list_set_root_descriptor(struct d3d12_command_list *li
vk_write_descriptor_set_from_root_descriptor(&descriptor_write,
root_parameter, VK_NULL_HANDLE, &vk_buffer_view, NULL);
VK_CALL(vkCmdPushDescriptorSetKHR(list->vk_command_buffer, bind_point,
root_signature->vk_pipeline_layout, 0, 1, &descriptor_write));
root_signature->vk_pipeline_layout, root_signature->root_descriptor_set,
1, &descriptor_write));
}
else
{

View File

@ -777,9 +777,12 @@ static HRESULT d3d12_root_signature_init(struct d3d12_root_signature *root_signa
context.descriptor_binding, binding_desc, &root_signature->vk_root_descriptor_layout)))
goto fail;
set_layouts[context.set_index++] = root_signature->vk_root_descriptor_layout;
set_layouts[context.set_index] = root_signature->vk_root_descriptor_layout;
root_signature->root_descriptor_set = context.set_index;
context.current_binding = binding_desc;
context.descriptor_binding = 0;
context.set_index += 1;
}
if (FAILED(hr = d3d12_root_signature_init_push_constants(root_signature, desc, &info,
@ -790,14 +793,15 @@ 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)
{
if (FAILED(hr = vkd3d_create_descriptor_set_layout(device,
0, context.descriptor_binding, binding_desc, &root_signature->vk_packed_descriptor_layout)))
goto fail;
set_layouts[context.set_index++] = root_signature->vk_packed_descriptor_layout;
root_signature->packed_descriptor_set = context.set_index;
set_layouts[context.set_index] = root_signature->vk_packed_descriptor_layout;
context.set_index += 1;
}
vkd3d_free(binding_desc);
binding_desc = NULL;

View File

@ -706,7 +706,9 @@ struct d3d12_root_signature
struct d3d12_root_parameter *parameters;
unsigned int parameter_count;
uint32_t main_set;
uint32_t packed_descriptor_set;
uint32_t root_descriptor_set;
uint64_t descriptor_table_mask;
uint32_t push_descriptor_mask;