vkd3d: Add binding for uav counter views.

Signed-off-by: Philip Rebohle <philip.rebohle@tu-dortmund.de>
This commit is contained in:
Philip Rebohle 2020-07-22 14:44:34 +02:00 committed by Hans-Kristian Arntzen
parent b16276f9d6
commit 949e38e0b3
3 changed files with 17 additions and 4 deletions

View File

@ -4827,8 +4827,9 @@ unsigned int d3d12_descriptor_heap_set_index_from_binding(const struct vkd3d_bin
set->binding_flag & VKD3D_SHADER_BINDING_FLAG_BUFFER);
case D3D12_DESCRIPTOR_RANGE_TYPE_UAV:
return d3d12_descriptor_heap_uav_set_index(
set->binding_flag & VKD3D_SHADER_BINDING_FLAG_BUFFER);
return set->binding_flag & VKD3D_SHADER_BINDING_FLAG_COUNTER
? d3d12_descriptor_heap_uav_counter_set_index()
: d3d12_descriptor_heap_uav_set_index(set->binding_flag & VKD3D_SHADER_BINDING_FLAG_BUFFER);
default:
WARN("Unhandled descriptor range type %d.\n", set->range_type);

View File

@ -3228,7 +3228,7 @@ static HRESULT vkd3d_bindless_state_add_binding(struct vkd3d_bindless_state *bin
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);
range_type, !!(binding_flag & (VKD3D_SHADER_BINDING_FLAG_BUFFER | VKD3D_SHADER_BINDING_FLAG_COUNTER)));
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;
@ -3350,6 +3350,13 @@ HRESULT vkd3d_bindless_state_init(struct vkd3d_bindless_state *bindless_state,
FAILED(hr = vkd3d_bindless_state_add_binding(bindless_state, device,
D3D12_DESCRIPTOR_RANGE_TYPE_UAV, VKD3D_SHADER_BINDING_FLAG_IMAGE)))
goto fail;
if (!(bindless_state->flags & VKD3D_BINDLESS_UAV_COUNTER))
{
if (FAILED(hr = vkd3d_bindless_state_add_binding(bindless_state, device,
D3D12_DESCRIPTOR_RANGE_TYPE_UAV, VKD3D_SHADER_BINDING_FLAG_COUNTER)))
goto fail;
}
}
return S_OK;

View File

@ -58,7 +58,7 @@
#define VKD3D_MAX_SHADER_STAGES 5u
#define VKD3D_MAX_VK_SYNC_OBJECTS 4u
#define VKD3D_MAX_DESCRIPTOR_SETS 9u
#define VKD3D_MAX_DESCRIPTOR_SETS 10u
#define VKD3D_MAX_BINDLESS_DESCRIPTOR_SETS 6u
#define VKD3D_PIPELINE_BIND_POINT_COUNT 2u
@ -732,6 +732,11 @@ static inline unsigned int d3d12_descriptor_heap_uav_set_index(bool is_buffer)
return 3 + (is_buffer ? 0 : 1);
}
static inline unsigned int d3d12_descriptor_heap_uav_counter_set_index()
{
return 5;
}
static inline uint32_t d3d12_desc_heap_offset(const struct d3d12_desc *dst)
{
return dst->heap_offset;