vkd3d: Adjust descriptor types if CBV_AS_SSBO is set.
Signed-off-by: Philip Rebohle <philip.rebohle@tu-dortmund.de>
This commit is contained in:
parent
3709ae1dd8
commit
fda155b965
|
@ -2730,7 +2730,7 @@ void d3d12_desc_create_cbv(struct d3d12_desc *descriptor,
|
|||
}
|
||||
|
||||
descriptor->magic = VKD3D_DESCRIPTOR_MAGIC_CBV;
|
||||
descriptor->vk_descriptor_type = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
|
||||
descriptor->vk_descriptor_type = vkd3d_bindless_state_get_cbv_descriptor_type(&device->bindless_state);
|
||||
}
|
||||
|
||||
static unsigned int vkd3d_view_flags_from_d3d12_buffer_srv_flags(D3D12_BUFFER_SRV_FLAGS flags)
|
||||
|
@ -3697,7 +3697,7 @@ static HRESULT d3d12_descriptor_heap_create_descriptor_pool(struct d3d12_descrip
|
|||
if (set_info->heap_type == descriptor_heap->desc.Type)
|
||||
{
|
||||
VkDescriptorPoolSize *vk_pool_size = &vk_pool_sizes[pool_count++];
|
||||
vk_pool_size->type = vk_descriptor_type_from_bindless_set_info(set_info);
|
||||
vk_pool_size->type = set_info->vk_descriptor_type;
|
||||
vk_pool_size->descriptorCount = descriptor_heap->desc.NumDescriptors;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -211,8 +211,8 @@ static enum vkd3d_shader_visibility vkd3d_shader_visibility_from_d3d12(D3D12_SHA
|
|||
}
|
||||
}
|
||||
|
||||
static VkDescriptorType vk_descriptor_type_from_d3d12_range_type(D3D12_DESCRIPTOR_RANGE_TYPE type,
|
||||
bool is_buffer)
|
||||
static VkDescriptorType vk_descriptor_type_from_d3d12_range_type(const struct vkd3d_bindless_state *bindless_state,
|
||||
D3D12_DESCRIPTOR_RANGE_TYPE type, bool is_buffer)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
|
@ -221,7 +221,7 @@ static VkDescriptorType vk_descriptor_type_from_d3d12_range_type(D3D12_DESCRIPTO
|
|||
case D3D12_DESCRIPTOR_RANGE_TYPE_UAV:
|
||||
return is_buffer ? VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER : VK_DESCRIPTOR_TYPE_STORAGE_IMAGE;
|
||||
case D3D12_DESCRIPTOR_RANGE_TYPE_CBV:
|
||||
return VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
|
||||
return vkd3d_bindless_state_get_cbv_descriptor_type(bindless_state);
|
||||
case D3D12_DESCRIPTOR_RANGE_TYPE_SAMPLER:
|
||||
return VK_DESCRIPTOR_TYPE_SAMPLER;
|
||||
default:
|
||||
|
@ -568,6 +568,7 @@ static HRESULT d3d12_root_signature_init_root_descriptor_tables(struct d3d12_roo
|
|||
const D3D12_ROOT_SIGNATURE_DESC *desc, const struct d3d12_root_signature_info *info,
|
||||
struct vkd3d_descriptor_set_context *context, VkDescriptorSetLayout *vk_set_layout)
|
||||
{
|
||||
struct vkd3d_bindless_state *bindless_state = &root_signature->device->bindless_state;
|
||||
VkDescriptorSetLayoutBinding *vk_binding_info;
|
||||
struct vkd3d_shader_resource_binding binding;
|
||||
struct d3d12_root_descriptor_table *table;
|
||||
|
@ -618,15 +619,13 @@ static HRESULT d3d12_root_signature_init_root_descriptor_tables(struct d3d12_roo
|
|||
|
||||
if (d3d12_root_signature_descriptor_range_is_bindless(root_signature->device, range->RangeType))
|
||||
{
|
||||
if (vkd3d_bindless_state_find_binding(&root_signature->device->bindless_state,
|
||||
range->RangeType, VKD3D_SHADER_BINDING_FLAG_BUFFER, &binding.binding))
|
||||
if (vkd3d_bindless_state_find_binding(bindless_state, range->RangeType, VKD3D_SHADER_BINDING_FLAG_BUFFER, &binding.binding))
|
||||
{
|
||||
binding.flags = VKD3D_SHADER_BINDING_FLAG_BINDLESS | VKD3D_SHADER_BINDING_FLAG_BUFFER;
|
||||
table->first_binding[table->binding_count++] = binding;
|
||||
}
|
||||
|
||||
if (vkd3d_bindless_state_find_binding(&root_signature->device->bindless_state,
|
||||
range->RangeType, VKD3D_SHADER_BINDING_FLAG_IMAGE, &binding.binding))
|
||||
if (vkd3d_bindless_state_find_binding(bindless_state, range->RangeType, VKD3D_SHADER_BINDING_FLAG_IMAGE, &binding.binding))
|
||||
{
|
||||
binding.flags = VKD3D_SHADER_BINDING_FLAG_BINDLESS | VKD3D_SHADER_BINDING_FLAG_IMAGE;
|
||||
table->first_binding[table->binding_count++] = binding;
|
||||
|
@ -644,7 +643,7 @@ static HRESULT d3d12_root_signature_init_root_descriptor_tables(struct d3d12_roo
|
|||
{
|
||||
VkDescriptorSetLayoutBinding vk_binding;
|
||||
vk_binding.binding = binding.binding.binding = context->vk_binding++;
|
||||
vk_binding.descriptorType = vk_descriptor_type_from_d3d12_range_type(range->RangeType, true);
|
||||
vk_binding.descriptorType = vk_descriptor_type_from_d3d12_range_type(bindless_state, range->RangeType, true);
|
||||
vk_binding.descriptorCount = 1;
|
||||
vk_binding.stageFlags = stage_flags_from_visibility(p->ShaderVisibility);
|
||||
vk_binding.pImmutableSamplers = NULL;
|
||||
|
@ -663,7 +662,7 @@ static HRESULT d3d12_root_signature_init_root_descriptor_tables(struct d3d12_roo
|
|||
if (is_srv || is_uav)
|
||||
{
|
||||
vk_binding.binding = binding.binding.binding = context->vk_binding++;
|
||||
vk_binding.descriptorType = vk_descriptor_type_from_d3d12_range_type(range->RangeType, false);
|
||||
vk_binding.descriptorType = vk_descriptor_type_from_d3d12_range_type(bindless_state, range->RangeType, false);
|
||||
binding.flags = VKD3D_SHADER_BINDING_FLAG_IMAGE;
|
||||
|
||||
table->first_binding[table->binding_count++] = binding;
|
||||
|
@ -681,7 +680,7 @@ static HRESULT d3d12_root_signature_init_root_descriptor_tables(struct d3d12_roo
|
|||
{
|
||||
VkDescriptorSetLayoutBinding vk_binding;
|
||||
vk_binding.binding = binding.binding.binding = context->vk_binding++;
|
||||
vk_binding.descriptorType = vk_descriptor_type_from_d3d12_range_type(range->RangeType, true);
|
||||
vk_binding.descriptorType = vk_descriptor_type_from_d3d12_range_type(bindless_state, range->RangeType, true);
|
||||
vk_binding.descriptorCount = 1;
|
||||
vk_binding.stageFlags = stage_flags_from_visibility(p->ShaderVisibility);
|
||||
vk_binding.pImmutableSamplers = NULL;
|
||||
|
@ -2822,6 +2821,8 @@ static HRESULT vkd3d_bindless_state_add_binding(struct vkd3d_bindless_state *bin
|
|||
VkDescriptorBindingFlagsEXT vk_binding_flags;
|
||||
VkResult vr;
|
||||
|
||||
set_info->vk_descriptor_type = vk_descriptor_type_from_d3d12_range_type(bindless_state,
|
||||
range_type, binding_flag & VKD3D_SHADER_BINDING_FLAG_BUFFER);
|
||||
set_info->heap_type = d3d12_descriptor_heap_type_from_range_type(range_type);
|
||||
set_info->range_type = range_type;
|
||||
set_info->binding_flag = binding_flag;
|
||||
|
@ -2837,8 +2838,7 @@ static HRESULT vkd3d_bindless_state_add_binding(struct vkd3d_bindless_state *bin
|
|||
vk_binding_flags_info.pBindingFlags = &vk_binding_flags;
|
||||
|
||||
vk_binding_info.binding = 0;
|
||||
vk_binding_info.descriptorType = vk_descriptor_type_from_d3d12_range_type(range_type,
|
||||
binding_flag & VKD3D_SHADER_BINDING_FLAG_BUFFER);
|
||||
vk_binding_info.descriptorType = set_info->vk_descriptor_type;
|
||||
vk_binding_info.descriptorCount = d3d12_max_descriptor_count_from_range_type(range_type);
|
||||
vk_binding_info.stageFlags = VK_SHADER_STAGE_ALL;
|
||||
vk_binding_info.pImmutableSamplers = NULL;
|
||||
|
@ -2961,12 +2961,6 @@ bool vkd3d_bindless_state_find_binding(const struct vkd3d_bindless_state *bindle
|
|||
return false;
|
||||
}
|
||||
|
||||
VkDescriptorType vk_descriptor_type_from_bindless_set_info(const struct vkd3d_bindless_set_info *set_info)
|
||||
{
|
||||
return vk_descriptor_type_from_d3d12_range_type(set_info->range_type,
|
||||
set_info->binding_flag == VKD3D_SHADER_BINDING_FLAG_BUFFER);
|
||||
}
|
||||
|
||||
static void vkd3d_uav_clear_pipelines_cleanup(struct vkd3d_uav_clear_pipelines *pipelines,
|
||||
struct d3d12_device *device)
|
||||
{
|
||||
|
|
|
@ -1180,6 +1180,7 @@ enum vkd3d_bindless_flags
|
|||
|
||||
struct vkd3d_bindless_set_info
|
||||
{
|
||||
VkDescriptorType vk_descriptor_type;
|
||||
D3D12_DESCRIPTOR_HEAP_TYPE heap_type;
|
||||
D3D12_DESCRIPTOR_RANGE_TYPE range_type;
|
||||
enum vkd3d_shader_binding_flag binding_flag;
|
||||
|
@ -1203,7 +1204,12 @@ bool vkd3d_bindless_state_find_binding(const struct vkd3d_bindless_state *bindle
|
|||
D3D12_DESCRIPTOR_RANGE_TYPE range_type, enum vkd3d_shader_binding_flag binding_flag,
|
||||
struct vkd3d_shader_descriptor_binding *binding) DECLSPEC_HIDDEN;
|
||||
|
||||
VkDescriptorType vk_descriptor_type_from_bindless_set_info(const struct vkd3d_bindless_set_info *set_info) DECLSPEC_HIDDEN;
|
||||
inline VkDescriptorType vkd3d_bindless_state_get_cbv_descriptor_type(const struct vkd3d_bindless_state *bindless_state)
|
||||
{
|
||||
return bindless_state->flags & VKD3D_BINDLESS_CBV_AS_SSBO
|
||||
? VK_DESCRIPTOR_TYPE_STORAGE_BUFFER
|
||||
: VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
|
||||
}
|
||||
|
||||
struct vkd3d_format_compatibility_list
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue