vkd3d: Emit resource declarations for raw SSBOs.

Signed-off-by: Philip Rebohle <philip.rebohle@tu-dortmund.de>
This commit is contained in:
Philip Rebohle 2020-10-12 14:18:42 +02:00 committed by Hans-Kristian Arntzen
parent 3eac9f9c7d
commit 993cdd254e
2 changed files with 23 additions and 2 deletions

View File

@ -340,11 +340,17 @@ static HRESULT d3d12_root_signature_info_count_descriptors(struct d3d12_root_sig
case D3D12_DESCRIPTOR_RANGE_TYPE_SRV:
/* separate image + buffer descriptors */
info->binding_count += 2;
if (device->bindless_state.flags & VKD3D_BINDLESS_RAW_SSBO)
info->binding_count += 1;
break;
case D3D12_DESCRIPTOR_RANGE_TYPE_UAV:
/* separate image + buffer descriptors */
info->binding_count += 3;
if (device->bindless_state.flags & VKD3D_BINDLESS_RAW_SSBO)
info->binding_count += 1;
if (device->bindless_state.flags & VKD3D_RAW_VA_UAV_COUNTER)
info->has_raw_va_uav_counters = true;
break;
@ -571,6 +577,12 @@ static HRESULT d3d12_root_signature_init_root_descriptor_tables(struct d3d12_roo
table->first_binding[table->binding_count++] = binding;
}
if (vkd3d_bindless_state_find_binding(bindless_state, range_flag | VKD3D_BINDLESS_SET_RAW_SSBO, &binding.binding))
{
binding.flags = VKD3D_SHADER_BINDING_FLAG_BINDLESS | VKD3D_SHADER_BINDING_FLAG_BUFFER | VKD3D_SHADER_BINDING_FLAG_RAW_SSBO;
table->first_binding[table->binding_count++] = binding;
}
if (vkd3d_bindless_state_find_binding(bindless_state, range_flag | VKD3D_BINDLESS_SET_IMAGE, &binding.binding))
{
binding.flags = VKD3D_SHADER_BINDING_FLAG_BINDLESS | VKD3D_SHADER_BINDING_FLAG_IMAGE;
@ -3471,6 +3483,14 @@ HRESULT vkd3d_bindless_state_init(struct vkd3d_bindless_state *bindless_state,
VK_DESCRIPTOR_TYPE_STORAGE_IMAGE)))
goto fail;
if (bindless_state->flags & VKD3D_BINDLESS_RAW_SSBO)
{
if (FAILED(hr = vkd3d_bindless_state_add_binding(bindless_state, device,
VKD3D_BINDLESS_SET_UAV | VKD3D_BINDLESS_SET_SRV | VKD3D_BINDLESS_SET_RAW_SSBO,
VK_DESCRIPTOR_TYPE_STORAGE_BUFFER)))
goto fail;
}
if (!(bindless_state->flags & VKD3D_RAW_VA_UAV_COUNTER))
{
if (FAILED(hr = vkd3d_bindless_state_add_binding(bindless_state, device,

View File

@ -53,8 +53,8 @@
#define VKD3D_MAX_SHADER_STAGES 5u
#define VKD3D_MAX_VK_SYNC_OBJECTS 4u
#define VKD3D_MAX_DESCRIPTOR_SETS 9u
#define VKD3D_MAX_BINDLESS_DESCRIPTOR_SETS 7u
#define VKD3D_MAX_DESCRIPTOR_SETS 10u
#define VKD3D_MAX_BINDLESS_DESCRIPTOR_SETS 8u
#define VKD3D_PIPELINE_BIND_POINT_COUNT 2u
@ -1579,6 +1579,7 @@ enum vkd3d_bindless_set_flag
VKD3D_BINDLESS_SET_IMAGE = (1u << 4),
VKD3D_BINDLESS_SET_BUFFER = (1u << 5),
VKD3D_BINDLESS_SET_COUNTER = (1u << 6),
VKD3D_BINDLESS_SET_RAW_SSBO = (1u << 7),
};
struct vkd3d_bindless_set_info