Revert "Support version 7 of the ICD interface."
This reverts commit 041dc107d3f01e70e10a4af1e9221c5abe7ab9c5.
Reason for revert: Breaking SS->Chromium roll
Change-Id: I67aec28b14c71e8fe9ff5d32efd31ba326c3e2fd
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/72548
Tested-by: Jason Macnak <natsu@google.com>
Kokoro-Result: kokoro <noreply+kokoro@google.com>
Reviewed-by: Corentin Wallez <cwallez@google.com>
Commit-Queue: Corentin Wallez <cwallez@google.com>
diff --git a/src/Vulkan/VkGetProcAddress.cpp b/src/Vulkan/VkGetProcAddress.cpp
index 8a8b759..d61f600 100644
--- a/src/Vulkan/VkGetProcAddress.cpp
+++ b/src/Vulkan/VkGetProcAddress.cpp
@@ -16,8 +16,6 @@
#include "VkDevice.hpp"
#include <string>
-#include <tuple>
-#include <type_traits>
#include <unordered_map>
#include <vector>
@@ -42,51 +40,17 @@
MAKE_VULKAN_GLOBAL_ENTRY(vkEnumerateInstanceExtensionProperties),
MAKE_VULKAN_GLOBAL_ENTRY(vkEnumerateInstanceLayerProperties),
MAKE_VULKAN_GLOBAL_ENTRY(vkEnumerateInstanceVersion),
-
- MAKE_VULKAN_GLOBAL_ENTRY(vk_icdGetInstanceProcAddr),
- MAKE_VULKAN_GLOBAL_ENTRY(vk_icdNegotiateLoaderICDInterfaceVersion),
-#if VK_USE_PLATFORM_WIN32_KHR
- MAKE_VULKAN_GLOBAL_ENTRY(vk_icdEnumerateAdapterPhysicalDevices),
-#endif // VK_USE_PLATFORM_WIN32_KHR
};
#undef MAKE_VULKAN_GLOBAL_ENTRY
// Functions that can be obtained through GetInstanceProcAddr with an instance object
-struct InstanceFunctionEntry
-{
- PFN_vkVoidFunction pfn;
- // True if the first argument is a VkPhysicalDevice. See
- // https://github.com/KhronosGroup/Vulkan-Loader/blob/main/docs/LoaderDriverInterface.md#reason-for-adding-vk_icdgetphysicaldeviceprocaddr
- bool isPhysicalDeviceFn;
-};
-
-// Template magic to detect if the first argument of a C function is a VkPhysicalDevice.
-template<typename T>
-struct FunctionArgs
-{};
-
-template<typename R, typename... Args>
-struct FunctionArgs<VKAPI_ATTR R VKAPI_CALL(Args...)>
-{
- using Tuple = std::tuple<Args...>;
- using FirstType = typename std::tuple_element<0, Tuple>::type;
-};
-
-template<typename T>
-constexpr bool HasPhysicalDeviceFirstArgument =
- std::is_same<typename FunctionArgs<T>::FirstType, VkPhysicalDevice>::value;
-
-#define MAKE_VULKAN_INSTANCE_ENTRY(aFunction) \
- { \
- #aFunction, \
- { \
- reinterpret_cast<PFN_vkVoidFunction>(aFunction), \
- HasPhysicalDeviceFirstArgument<decltype(aFunction)> \
- } \
+#define MAKE_VULKAN_INSTANCE_ENTRY(aFunction) \
+ { \
+# aFunction, reinterpret_cast < PFN_vkVoidFunction>(aFunction) \
}
// TODO(b/208256248): Avoid exit-time destructor.
-static const std::unordered_map<std::string, InstanceFunctionEntry> instanceFunctionPointers = {
+static const std::unordered_map<std::string, PFN_vkVoidFunction> instanceFunctionPointers = {
MAKE_VULKAN_INSTANCE_ENTRY(vkDestroyInstance),
MAKE_VULKAN_INSTANCE_ENTRY(vkEnumeratePhysicalDevices),
@@ -688,7 +652,7 @@
auto instanceFunction = instanceFunctionPointers.find(std::string(pName));
if(instanceFunction != instanceFunctionPointers.end())
{
- return instanceFunction->second.pfn;
+ return instanceFunction->second;
}
auto deviceFunction = deviceFunctionPointers.find(std::string(pName));
@@ -710,33 +674,6 @@
return nullptr;
}
-PFN_vkVoidFunction GetPhysicalDeviceProcAddr(Instance *instance, const char *pName)
-{
- // This function must return nullptr if the name is not known, or the function doesn't take a
- // VkPhysicalDevice as the first argument. All functions that have a VkPhysicalDevice as first
- // argument are instance function, except for vkGetPhysicalDeviceToolPropertiesEXT which seems
- // to have been miscategorized as a device extension when it was made. So we special case that
- // funcion.
- std::string name = pName;
- if(name == "vkGetPhysicalDeviceToolPropertiesEXT")
- {
- return reinterpret_cast<PFN_vkVoidFunction>(vkGetPhysicalDeviceToolPropertiesEXT);
- }
-
- auto instanceFunction = instanceFunctionPointers.find(name);
- if(instanceFunction == instanceFunctionPointers.end())
- {
- return nullptr;
- }
-
- if(!instanceFunction->second.isPhysicalDeviceFn)
- {
- return nullptr;
- }
-
- return instanceFunction->second.pfn;
-}
-
PFN_vkVoidFunction GetDeviceProcAddr(Device *device, const char *pName)
{
auto deviceFunction = deviceFunctionPointers.find(std::string(pName));
diff --git a/src/Vulkan/VkGetProcAddress.hpp b/src/Vulkan/VkGetProcAddress.hpp
index 49101ba..03c467f 100644
--- a/src/Vulkan/VkGetProcAddress.hpp
+++ b/src/Vulkan/VkGetProcAddress.hpp
@@ -23,7 +23,6 @@
class Instance;
PFN_vkVoidFunction GetInstanceProcAddr(Instance *instance, const char *pName);
-PFN_vkVoidFunction GetPhysicalDeviceProcAddr(Instance *instance, const char *pName);
PFN_vkVoidFunction GetDeviceProcAddr(Device *device, const char *pName);
} // namespace vk
diff --git a/src/Vulkan/android_host_vk_swiftshader.lds b/src/Vulkan/android_host_vk_swiftshader.lds
index 7318bbb..d9663ed 100644
--- a/src/Vulkan/android_host_vk_swiftshader.lds
+++ b/src/Vulkan/android_host_vk_swiftshader.lds
@@ -3,7 +3,6 @@
# Loader-ICD interface functions
vk_icdGetInstanceProcAddr;
vk_icdNegotiateLoaderICDInterfaceVersion;
- vk_icdGetPhysicalDeviceProcAddr;
# Vulkan 1.0 API entry functions
vkCreateInstance;
diff --git a/src/Vulkan/android_vk_swiftshader.lds b/src/Vulkan/android_vk_swiftshader.lds
index b88bad3..be404d9 100644
--- a/src/Vulkan/android_vk_swiftshader.lds
+++ b/src/Vulkan/android_vk_swiftshader.lds
@@ -4,7 +4,6 @@
# Loader-ICD interface functions
vk_icdGetInstanceProcAddr;
vk_icdNegotiateLoaderICDInterfaceVersion;
- vk_icdGetPhysicalDeviceProcAddr;
# Android HAL module info object
HMI;
diff --git a/src/Vulkan/fuchsia_vk_swiftshader.lds b/src/Vulkan/fuchsia_vk_swiftshader.lds
index c4f4464..2237ffb 100644
--- a/src/Vulkan/fuchsia_vk_swiftshader.lds
+++ b/src/Vulkan/fuchsia_vk_swiftshader.lds
@@ -6,7 +6,6 @@
# Loader-ICD interface functions
vk_icdGetInstanceProcAddr;
vk_icdNegotiateLoaderICDInterfaceVersion;
- vk_icdGetPhysicalDeviceProcAddr;
vk_icdInitializeConnectToServiceCallback;
local:
diff --git a/src/Vulkan/libVulkan.cpp b/src/Vulkan/libVulkan.cpp
index 275cf88..5360f95 100644
--- a/src/Vulkan/libVulkan.cpp
+++ b/src/Vulkan/libVulkan.cpp
@@ -96,7 +96,6 @@
#include <algorithm>
#include <cinttypes>
-#include <cmath>
#include <cstring>
#include <functional>
#include <map>
@@ -237,11 +236,6 @@
}
}
-// This variable will be set to the negotiated ICD interface version negotiated with the loader.
-// It defaults to 1 because if vk_icdNegotiateLoaderICDInterfaceVersion is never called it means
-// that the loader doens't support version 2 of that interface.
-uint32_t sICDInterfaceVersion = 1;
-
} // namespace
extern "C" {
@@ -254,30 +248,10 @@
VK_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vk_icdNegotiateLoaderICDInterfaceVersion(uint32_t *pSupportedVersion)
{
- sICDInterfaceVersion = std::min(*pSupportedVersion, 7u);
- *pSupportedVersion = sICDInterfaceVersion;
+ *pSupportedVersion = 3;
return VK_SUCCESS;
}
-VK_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vk_icdGetPhysicalDeviceProcAddr(VkInstance instance, const char *pName)
-{
- return vk::GetPhysicalDeviceProcAddr(vk::Cast(instance), pName);
-}
-
-#if VK_USE_PLATFORM_WIN32_KHR
-
-VKAPI_ATTR VkResult VKAPI_CALL vk_icdEnumerateAdapterPhysicalDevices(VkInstance instance, LUID adapterLUID, uint32_t *pPhysicalDeviceCount, VkPhysicalDevice *pPhysicalDevices)
-{
- if(!pPhysicalDevices)
- {
- *pPhysicalDeviceCount = 0;
- }
-
- return VK_SUCCESS;
-}
-
-#endif // VK_USE_PLATFORM_WIN32_KHR
-
#if VK_USE_PLATFORM_FUCHSIA
// This symbol must be exported by a Fuchsia Vulkan ICD. The Vulkan loader will
@@ -546,39 +520,6 @@
initializeLibrary();
- // ICD interface rule for version 5 of the interface:
- // - If the loader supports version 4 or lower, the driver must fail with
- // VK_ERROR_INCOMPATIBLE_DRIVER for all vkCreateInstance calls with apiVersion
- // set to > Vulkan 1.0
- // - If the loader supports version 5 or above, the loader must fail with
- // VK_ERROR_INCOMPATIBLE_DRIVER if it can't handle the apiVersion, and drivers
- // should fail with VK_ERROR_INCOMPATIBLE_DRIVER only if they can not support the
- // specified apiVersion.
- if(pCreateInfo->pApplicationInfo)
- {
- uint32_t appApiVersion = pCreateInfo->pApplicationInfo->apiVersion;
- if(sICDInterfaceVersion <= 4)
- {
- // Any version above 1.0 is an error.
- if(VK_API_VERSION_MAJOR(appApiVersion) != 1 || VK_API_VERSION_MINOR(appApiVersion) != 0)
- {
- return VK_ERROR_INCOMPATIBLE_DRIVER;
- }
- }
- else
- {
- if(VK_API_VERSION_MAJOR(appApiVersion) > VK_API_VERSION_MINOR(vk::API_VERSION))
- {
- return VK_ERROR_INCOMPATIBLE_DRIVER;
- }
- if((VK_API_VERSION_MAJOR(appApiVersion) == VK_API_VERSION_MINOR(vk::API_VERSION)) &&
- VK_API_VERSION_MINOR(appApiVersion) > VK_API_VERSION_MINOR(vk::API_VERSION))
- {
- return VK_ERROR_INCOMPATIBLE_DRIVER;
- }
- }
- }
-
if(pCreateInfo->flags != 0)
{
// Vulkan 1.3: "flags is reserved for future use." "flags must be 0"
diff --git a/src/Vulkan/vk_swiftshader.def b/src/Vulkan/vk_swiftshader.def
index 3e3aca4f..27354ef 100644
--- a/src/Vulkan/vk_swiftshader.def
+++ b/src/Vulkan/vk_swiftshader.def
@@ -3,8 +3,6 @@
; Loader-ICD interface functions
vk_icdGetInstanceProcAddr
vk_icdNegotiateLoaderICDInterfaceVersion
- vk_icdGetPhysicalDeviceProcAddr
- vk_icdEnumerateAdapterPhysicalDevices
; Vulkan 1.0 API entry functions
vkCreateInstance
diff --git a/src/Vulkan/vk_swiftshader.exports b/src/Vulkan/vk_swiftshader.exports
index 68819a3..1153f00 100644
--- a/src/Vulkan/vk_swiftshader.exports
+++ b/src/Vulkan/vk_swiftshader.exports
@@ -3,7 +3,6 @@
# Loader-ICD interface functions
_vk_icdGetInstanceProcAddr
_vk_icdNegotiateLoaderICDInterfaceVersion
-_vk_icdGetPhysicalDeviceProcAddr
# Type-strings and type-infos required by sanitizers
_ZTS*
diff --git a/src/Vulkan/vk_swiftshader.lds b/src/Vulkan/vk_swiftshader.lds
index 38ed734..873e9cd 100644
--- a/src/Vulkan/vk_swiftshader.lds
+++ b/src/Vulkan/vk_swiftshader.lds
@@ -3,7 +3,6 @@
# Loader-ICD interface functions
vk_icdGetInstanceProcAddr;
vk_icdNegotiateLoaderICDInterfaceVersion;
- vk_icdGetPhysicalDeviceProcAddr;
# Vulkan 1.0 API entry functions
vkCreateInstance;