[dxvk] Disable CUDA interop extensions on 32-bit builds

This commit is contained in:
Philip Rebohle 2021-10-01 14:25:09 +02:00
parent 8225891751
commit b36fa75d1d
No known key found for this signature in database
GPG Key ID: C8CC613427A31C99
3 changed files with 17 additions and 9 deletions

View File

@ -1940,8 +1940,6 @@ namespace dxvk {
enabled.extVertexAttributeDivisor.vertexAttributeInstanceRateDivisor = supported.extVertexAttributeDivisor.vertexAttributeInstanceRateDivisor;
enabled.extVertexAttributeDivisor.vertexAttributeInstanceRateZeroDivisor = supported.extVertexAttributeDivisor.vertexAttributeInstanceRateZeroDivisor;
enabled.khrBufferDeviceAddress = supported.khrBufferDeviceAddress;
if (supported.extCustomBorderColor.customBorderColorWithoutFormat) {
enabled.extCustomBorderColor.customBorderColors = VK_TRUE;
enabled.extCustomBorderColor.customBorderColorWithoutFormat = VK_TRUE;

View File

@ -281,6 +281,7 @@ namespace dxvk {
&devExtensions.extShaderViewportIndexLayer,
&devExtensions.extTransformFeedback,
&devExtensions.extVertexAttributeDivisor,
&devExtensions.khrBufferDeviceAddress,
&devExtensions.khrCreateRenderPass2,
&devExtensions.khrDepthStencilResolve,
&devExtensions.khrDrawIndirectCount,
@ -291,15 +292,24 @@ namespace dxvk {
&devExtensions.khrSwapchain,
&devExtensions.nvxBinaryImport,
&devExtensions.nvxImageViewHandle,
&devExtensions.khrBufferDeviceAddress,
}};
// VK_KHR_buffer_device_address can be expensive to enable on
// some drivers; only enable selectively for Cuda interop
if (m_deviceExtensions.supports(devExtensions.nvxBinaryImport.name()) &&
m_deviceExtensions.supports(devExtensions.nvxImageViewHandle.name()))
// Only enable Cuda interop extensions in 64-bit builds in
// order to avoid potential driver or address space issues.
// VK_KHR_buffer_device_address is expensive on some drivers.
bool enableCudaInterop = !env::is32BitHostPlatform() &&
m_deviceExtensions.supports(devExtensions.nvxBinaryImport.name()) &&
m_deviceExtensions.supports(devExtensions.nvxImageViewHandle.name()) &&
m_deviceFeatures.khrBufferDeviceAddress.bufferDeviceAddress;
if (enableCudaInterop) {
devExtensions.nvxBinaryImport.setMode(DxvkExtMode::Optional);
devExtensions.nvxImageViewHandle.setMode(DxvkExtMode::Optional);
devExtensions.khrBufferDeviceAddress.setMode(DxvkExtMode::Optional);
enabledFeatures.khrBufferDeviceAddress.bufferDeviceAddress = VK_TRUE;
}
DxvkNameSet extensionsEnabled;
if (!m_deviceExtensions.enableExtensions(

View File

@ -283,8 +283,8 @@ namespace dxvk {
DxvkExt khrSamplerMirrorClampToEdge = { VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_EXTENSION_NAME, DxvkExtMode::Optional };
DxvkExt khrShaderFloatControls = { VK_KHR_SHADER_FLOAT_CONTROLS_EXTENSION_NAME, DxvkExtMode::Optional };
DxvkExt khrSwapchain = { VK_KHR_SWAPCHAIN_EXTENSION_NAME, DxvkExtMode::Required };
DxvkExt nvxBinaryImport = { VK_NVX_BINARY_IMPORT_EXTENSION_NAME, DxvkExtMode::Optional };
DxvkExt nvxImageViewHandle = { VK_NVX_IMAGE_VIEW_HANDLE_EXTENSION_NAME, DxvkExtMode::Optional };
DxvkExt nvxBinaryImport = { VK_NVX_BINARY_IMPORT_EXTENSION_NAME, DxvkExtMode::Disabled };
DxvkExt nvxImageViewHandle = { VK_NVX_IMAGE_VIEW_HANDLE_EXTENSION_NAME, DxvkExtMode::Disabled };
DxvkExt khrBufferDeviceAddress = { VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME, DxvkExtMode::Disabled };
};