diff --git a/src/d3d11/d3d11_device.cpp b/src/d3d11/d3d11_device.cpp index 29a7faf56..563a6cdae 100644 --- a/src/d3d11/d3d11_device.cpp +++ b/src/d3d11/d3d11_device.cpp @@ -2500,7 +2500,7 @@ namespace dxvk { case D3D11_VK_NVX_BINARY_IMPORT: return deviceExtensions.nvxBinaryImport - && deviceExtensions.khrBufferDeviceAddress; + && deviceFeatures.vk12.bufferDeviceAddress; default: return false; @@ -2659,9 +2659,10 @@ namespace dxvk { const DxvkBufferSliceHandle bufSliceHandle = buffer->GetBuffer()->getSliceHandle(); VkBuffer vkBuffer = bufSliceHandle.handle; - VkBufferDeviceAddressInfoKHR bdaInfo = { VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_KHR }; + VkBufferDeviceAddressInfo bdaInfo = { VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO }; bdaInfo.buffer = vkBuffer; - VkDeviceAddress bufAddr = dxvkDevice->vkd()->vkGetBufferDeviceAddressKHR(vkDevice, &bdaInfo); + + VkDeviceAddress bufAddr = dxvkDevice->vkd()->vkGetBufferDeviceAddress(vkDevice, &bdaInfo); *gpuVAStart = uint64_t(bufAddr) + bufSliceHandle.offset; *gpuVASize = bufSliceHandle.length; } diff --git a/src/dxvk/dxvk_adapter.cpp b/src/dxvk/dxvk_adapter.cpp index 723c64baf..63445ca94 100644 --- a/src/dxvk/dxvk_adapter.cpp +++ b/src/dxvk/dxvk_adapter.cpp @@ -283,7 +283,7 @@ namespace dxvk { DxvkDeviceFeatures enabledFeatures) { DxvkDeviceExtensions devExtensions; - std::array devExtensionList = {{ + std::array devExtensionList = {{ &devExtensions.amdMemoryOverallocationBehaviour, &devExtensions.amdShaderFragmentMask, &devExtensions.ext4444Formats, @@ -304,7 +304,6 @@ namespace dxvk { &devExtensions.extShaderViewportIndexLayer, &devExtensions.extTransformFeedback, &devExtensions.extVertexAttributeDivisor, - &devExtensions.khrBufferDeviceAddress, &devExtensions.khrCreateRenderPass2, &devExtensions.khrDepthStencilResolve, &devExtensions.khrDriverProperties, @@ -324,14 +323,13 @@ namespace dxvk { bool enableCudaInterop = !env::is32BitHostPlatform() && m_deviceExtensions.supports(devExtensions.nvxBinaryImport.name()) && m_deviceExtensions.supports(devExtensions.nvxImageViewHandle.name()) && - m_deviceFeatures.khrBufferDeviceAddress.bufferDeviceAddress; + m_deviceFeatures.vk12.bufferDeviceAddress; if (enableCudaInterop) { devExtensions.nvxBinaryImport.setMode(DxvkExtMode::Optional); devExtensions.nvxImageViewHandle.setMode(DxvkExtMode::Optional); - devExtensions.khrBufferDeviceAddress.setMode(DxvkExtMode::Optional); - enabledFeatures.khrBufferDeviceAddress.bufferDeviceAddress = VK_TRUE; + enabledFeatures.vk12.bufferDeviceAddress = VK_TRUE; } DxvkNameSet extensionsEnabled; @@ -513,14 +511,10 @@ namespace dxvk { // that in advance since the extensions are reported as supported anyway. Logger::err("DxvkAdapter: Failed to create device, retrying without CUDA interop extensions"); - extensionsEnabled.disableExtension(devExtensions.khrBufferDeviceAddress); extensionsEnabled.disableExtension(devExtensions.nvxBinaryImport); extensionsEnabled.disableExtension(devExtensions.nvxImageViewHandle); - enabledFeatures.khrBufferDeviceAddress.bufferDeviceAddress = VK_FALSE; - - vk::removeStructFromPNextChain(&enabledFeatures.core.pNext, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_KHR); + enabledFeatures.vk12.bufferDeviceAddress = VK_FALSE; extensionNameList = extensionsEnabled.toNameList(); info.enabledExtensionCount = extensionNameList.count(); @@ -782,11 +776,6 @@ namespace dxvk { m_deviceFeatures.extVertexAttributeDivisor.pNext = std::exchange(m_deviceFeatures.core.pNext, &m_deviceFeatures.extVertexAttributeDivisor); } - if (m_deviceExtensions.supports(VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME)) { - m_deviceFeatures.khrBufferDeviceAddress.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_KHR; - m_deviceFeatures.khrBufferDeviceAddress.pNext = std::exchange(m_deviceFeatures.core.pNext, &m_deviceFeatures.khrBufferDeviceAddress); - } - if (m_deviceExtensions.supports(VK_KHR_DYNAMIC_RENDERING_EXTENSION_NAME)) { m_deviceFeatures.khrDynamicRendering.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES_KHR; m_deviceFeatures.khrDynamicRendering.pNext = std::exchange(m_deviceFeatures.core.pNext, &m_deviceFeatures.khrDynamicRendering); @@ -900,8 +889,6 @@ namespace dxvk { "\n", VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME, "\n vertexAttributeInstanceRateDivisor : ", features.extVertexAttributeDivisor.vertexAttributeInstanceRateDivisor ? "1" : "0", "\n vertexAttributeInstanceRateZeroDivisor : ", features.extVertexAttributeDivisor.vertexAttributeInstanceRateZeroDivisor ? "1" : "0", - "\n", VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME, - "\n bufferDeviceAddress : ", features.khrBufferDeviceAddress.bufferDeviceAddress ? "1" : "0", "\n", VK_KHR_DYNAMIC_RENDERING_EXTENSION_NAME, "\n dynamicRendering : ", features.khrDynamicRendering.dynamicRendering ? "1" : "0")); } diff --git a/src/dxvk/dxvk_device_info.h b/src/dxvk/dxvk_device_info.h index e9e54c667..69fb1263c 100644 --- a/src/dxvk/dxvk_device_info.h +++ b/src/dxvk/dxvk_device_info.h @@ -52,7 +52,6 @@ namespace dxvk { VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT extShaderModuleIdentifier; VkPhysicalDeviceTransformFeedbackFeaturesEXT extTransformFeedback; VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT extVertexAttributeDivisor; - VkPhysicalDeviceBufferDeviceAddressFeaturesKHR khrBufferDeviceAddress; VkPhysicalDeviceDynamicRenderingFeaturesKHR khrDynamicRendering; }; diff --git a/src/dxvk/dxvk_extensions.h b/src/dxvk/dxvk_extensions.h index 965e275d1..3a5a1eae8 100644 --- a/src/dxvk/dxvk_extensions.h +++ b/src/dxvk/dxvk_extensions.h @@ -296,7 +296,6 @@ namespace dxvk { DxvkExt extShaderViewportIndexLayer = { VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_EXTENSION_NAME, DxvkExtMode::Optional }; DxvkExt extTransformFeedback = { VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME, DxvkExtMode::Optional }; DxvkExt extVertexAttributeDivisor = { VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME, DxvkExtMode::Optional }; - DxvkExt khrBufferDeviceAddress = { VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME, DxvkExtMode::Disabled }; DxvkExt khrCreateRenderPass2 = { VK_KHR_CREATE_RENDERPASS_2_EXTENSION_NAME, DxvkExtMode::Required }; DxvkExt khrDepthStencilResolve = { VK_KHR_DEPTH_STENCIL_RESOLVE_EXTENSION_NAME, DxvkExtMode::Required }; DxvkExt khrDriverProperties = { VK_KHR_DRIVER_PROPERTIES_EXTENSION_NAME, DxvkExtMode::Optional }; diff --git a/src/vulkan/vulkan_loader.h b/src/vulkan/vulkan_loader.h index 89ccae446..c972b48a5 100644 --- a/src/vulkan/vulkan_loader.h +++ b/src/vulkan/vulkan_loader.h @@ -245,6 +245,7 @@ namespace dxvk::vk { VULKAN_FN(vkDestroyDescriptorUpdateTemplate); VULKAN_FN(vkUpdateDescriptorSetWithTemplate); VULKAN_FN(vkResetQueryPool); + VULKAN_FN(vkGetBufferDeviceAddress); VULKAN_FN(vkCmdBindPipeline); VULKAN_FN(vkCmdSetViewport); VULKAN_FN(vkCmdSetScissor); @@ -360,10 +361,6 @@ namespace dxvk::vk { VULKAN_FN(vkCmdCuLaunchKernelNVX); #endif - #ifdef VK_KHR_buffer_device_address - VULKAN_FN(vkGetBufferDeviceAddressKHR); - #endif - #ifdef VK_KHR_dynamic_rendering VULKAN_FN(vkCmdBeginRenderingKHR); VULKAN_FN(vkCmdEndRenderingKHR);