vkd3d: Restore d3d12_device_use_ssbo_root_descriptors.

We will not have offset information for root descriptors, so
we can still only use them with four-byte aligned SSBOs.

Signed-off-by: Philip Rebohle <philip.rebohle@tu-dortmund.de>
This commit is contained in:
Philip Rebohle 2020-10-22 17:08:33 +02:00 committed by Hans-Kristian Arntzen
parent d59317e11b
commit 15b1fb7128
3 changed files with 10 additions and 2 deletions

View File

@ -5164,7 +5164,7 @@ static void d3d12_command_list_set_root_descriptor(struct d3d12_command_list *li
bool null_descriptors, ssbo;
VkDeviceSize max_range;
ssbo = d3d12_device_use_ssbo_raw_buffer(list->device);
ssbo = d3d12_device_use_ssbo_root_descriptors(list->device);
root_parameter = root_signature_get_root_descriptor(root_signature, index);
descriptor = &bindings->root_descriptors[root_parameter->descriptor.packed_descriptor];
null_descriptors = list->device->device_info.robustness2_features.nullDescriptor;

View File

@ -213,7 +213,7 @@ static enum vkd3d_shader_visibility vkd3d_shader_visibility_from_d3d12(D3D12_SHA
static VkDescriptorType vk_descriptor_type_from_d3d12_root_parameter(struct d3d12_device *device, D3D12_ROOT_PARAMETER_TYPE type)
{
bool use_ssbo = d3d12_device_use_ssbo_raw_buffer(device);
bool use_ssbo = d3d12_device_use_ssbo_root_descriptors(device);
switch (type)
{

View File

@ -1985,6 +1985,14 @@ static inline VkDeviceSize d3d12_device_get_ssbo_alignment(struct d3d12_device *
return device->device_info.properties2.properties.limits.minStorageBufferOffsetAlignment;
}
static inline bool d3d12_device_use_ssbo_root_descriptors(struct d3d12_device *device)
{
/* We only know the VA of root SRV/UAVs, so we cannot
* make any better assumptions about the alignment */
return d3d12_device_use_ssbo_raw_buffer(device) &&
d3d12_device_get_ssbo_alignment(device) <= 4;
}
/* ID3DBlob */
struct d3d_blob
{