vkd3d: Disable RAW_VA root CBVs on NVIDIA.
BDA cannot map to their hardware, and we observe a large performance loss in games which use root CBVs. For this reason, fall back to push descriptors here. Signed-off-by: Hans-Kristian Arntzen <post@arntzen-software.no>
This commit is contained in:
parent
52ee2edc3d
commit
9617a0f598
|
@ -3562,8 +3562,18 @@ static uint32_t vkd3d_bindless_state_get_bindless_flags(struct d3d12_device *dev
|
|||
if (device_info->buffer_device_address_features.bufferDeviceAddress && (flags & VKD3D_BINDLESS_UAV))
|
||||
flags |= VKD3D_RAW_VA_UAV_COUNTER;
|
||||
|
||||
/* We must use root SRV and UAV due to alignment requirements for 16-bit storage,
|
||||
* but root CBV is more lax. */
|
||||
if (device_info->buffer_device_address_features.bufferDeviceAddress)
|
||||
flags |= VKD3D_RAW_VA_ROOT_DESCRIPTOR_CBV | VKD3D_RAW_VA_ROOT_DESCRIPTOR_SRV_UAV;
|
||||
{
|
||||
flags |= VKD3D_RAW_VA_ROOT_DESCRIPTOR_SRV_UAV;
|
||||
/* CBV's really require push descriptors on NVIDIA to get maximum performance.
|
||||
* The difference in performance is profound (~15% in some cases).
|
||||
* On ACO, BDA with NonWritable can be promoted directly to scalar loads,
|
||||
* which is great. */
|
||||
if (device_info->properties2.properties.vendorID != VKD3D_VENDOR_ID_NVIDIA)
|
||||
flags |= VKD3D_RAW_VA_ROOT_DESCRIPTOR_CBV;
|
||||
}
|
||||
|
||||
return flags;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue