mirror of
https://github.com/KhronosGroup/OpenCL-CTS.git
synced 2026-03-19 06:09:01 +00:00
Fix test_vulkan_interop_buffer validation errors for Int8 storage shader (#2603)
Fixes vulkan validation layer error: Vulkan validation layer: Validation Error: [ VUID-VkShaderModuleCreateInfo-pCode-08740 ] | MessageID = 0x6e224e9 | vkCreateComputePipelines(): pCreateInfos[0].stage SPIR-V Capability Int8 was declared, but one of the following requirements is required (VkPhysicalDeviceVulkan12Features::shaderInt8). The Vulkan spec states: If pCode is a pointer to SPIR-V code, and pCode declares any of the capabilities listed in the SPIR-V Environment appendix, one of the corresponding requirements must be satisfied (https://vulkan.lunarg.com/doc/view/1.3.275.0/linux/1.3-extensions/vkspec.html#VUID-VkShaderModuleCreateInfo-pCode-08740)
This commit is contained in:
@@ -104,7 +104,8 @@
|
|||||||
VK_FUNC_DECL(vkGetImageSubresourceLayout) \
|
VK_FUNC_DECL(vkGetImageSubresourceLayout) \
|
||||||
VK_FUNC_DECL(vkCreateDebugUtilsMessengerEXT) \
|
VK_FUNC_DECL(vkCreateDebugUtilsMessengerEXT) \
|
||||||
VK_FUNC_DECL(vkDestroyDebugUtilsMessengerEXT) \
|
VK_FUNC_DECL(vkDestroyDebugUtilsMessengerEXT) \
|
||||||
VK_FUNC_DECL(vkGetPhysicalDeviceExternalBufferProperties)
|
VK_FUNC_DECL(vkGetPhysicalDeviceExternalBufferProperties) \
|
||||||
|
VK_FUNC_DECL(vkGetPhysicalDeviceFeatures2)
|
||||||
#define VK_WINDOWS_FUNC_LIST \
|
#define VK_WINDOWS_FUNC_LIST \
|
||||||
VK_FUNC_DECL(vkGetMemoryWin32HandleKHR) \
|
VK_FUNC_DECL(vkGetMemoryWin32HandleKHR) \
|
||||||
VK_FUNC_DECL(vkGetSemaphoreWin32HandleKHR) \
|
VK_FUNC_DECL(vkGetSemaphoreWin32HandleKHR) \
|
||||||
@@ -209,5 +210,6 @@
|
|||||||
#define vkDestroyDebugUtilsMessengerEXT _vkDestroyDebugUtilsMessengerEXT
|
#define vkDestroyDebugUtilsMessengerEXT _vkDestroyDebugUtilsMessengerEXT
|
||||||
#define vkGetPhysicalDeviceExternalBufferProperties \
|
#define vkGetPhysicalDeviceExternalBufferProperties \
|
||||||
_vkGetPhysicalDeviceExternalBufferProperties
|
_vkGetPhysicalDeviceExternalBufferProperties
|
||||||
|
#define vkGetPhysicalDeviceFeatures2 _vkGetPhysicalDeviceFeatures2
|
||||||
|
|
||||||
#endif //_vulkan_api_list_hpp_
|
#endif //_vulkan_api_list_hpp_
|
||||||
|
|||||||
@@ -147,6 +147,7 @@ VulkanInstance::VulkanInstance(bool useValidationLayers)
|
|||||||
// return WAIVED;
|
// return WAIVED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VK_GET_NULL_INSTANCE_PROC_ADDR(vkGetPhysicalDeviceFeatures2);
|
||||||
VK_GET_NULL_INSTANCE_PROC_ADDR(vkEnumerateInstanceVersion);
|
VK_GET_NULL_INSTANCE_PROC_ADDR(vkEnumerateInstanceVersion);
|
||||||
VK_GET_NULL_INSTANCE_PROC_ADDR(vkEnumerateInstanceLayerProperties);
|
VK_GET_NULL_INSTANCE_PROC_ADDR(vkEnumerateInstanceLayerProperties);
|
||||||
VK_GET_NULL_INSTANCE_PROC_ADDR(vkCreateInstance);
|
VK_GET_NULL_INSTANCE_PROC_ADDR(vkCreateInstance);
|
||||||
@@ -612,7 +613,8 @@ VulkanDevice::VulkanDevice(const VulkanDevice &device)
|
|||||||
|
|
||||||
VulkanDevice::VulkanDevice(
|
VulkanDevice::VulkanDevice(
|
||||||
const VulkanPhysicalDevice &physicalDevice,
|
const VulkanPhysicalDevice &physicalDevice,
|
||||||
const VulkanQueueFamilyToQueueCountMap &queueFamilyToQueueCountMap)
|
const VulkanQueueFamilyToQueueCountMap &queueFamilyToQueueCountMap,
|
||||||
|
bool useShaderInt8)
|
||||||
: m_physicalDevice(physicalDevice), m_vkDevice(NULL)
|
: m_physicalDevice(physicalDevice), m_vkDevice(NULL)
|
||||||
{
|
{
|
||||||
uint32_t maxQueueCount = 0;
|
uint32_t maxQueueCount = 0;
|
||||||
@@ -676,7 +678,55 @@ VulkanDevice::VulkanDevice(
|
|||||||
enabledExtensionNameList.data();
|
enabledExtensionNameList.data();
|
||||||
vkDeviceCreateInfo.pEnabledFeatures = NULL;
|
vkDeviceCreateInfo.pEnabledFeatures = NULL;
|
||||||
|
|
||||||
|
if (useShaderInt8)
|
||||||
|
{
|
||||||
|
VkPhysicalDeviceShaderFloat16Int8Features int8Features{};
|
||||||
|
int8Features.sType =
|
||||||
|
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES;
|
||||||
|
|
||||||
|
VkPhysicalDevice8BitStorageFeatures storage8Features{};
|
||||||
|
storage8Features.sType =
|
||||||
|
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES;
|
||||||
|
|
||||||
|
int8Features.pNext = &storage8Features;
|
||||||
|
|
||||||
|
VkPhysicalDeviceFeatures2 features2{};
|
||||||
|
features2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
|
||||||
|
features2.pNext = &int8Features;
|
||||||
|
|
||||||
|
vkGetPhysicalDeviceFeatures2(physicalDevice, &features2);
|
||||||
|
|
||||||
|
if (!int8Features.shaderInt8
|
||||||
|
|| !storage8Features.storageBuffer8BitAccess)
|
||||||
|
{
|
||||||
|
throw std::runtime_error("shaderInt8 not supported!\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
VkPhysicalDevice8BitStorageFeatures storage8Enable{};
|
||||||
|
storage8Enable.sType =
|
||||||
|
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES;
|
||||||
|
storage8Enable.storageBuffer8BitAccess = VK_TRUE;
|
||||||
|
|
||||||
|
VkPhysicalDeviceShaderFloat16Int8Features int8Enable{};
|
||||||
|
int8Enable.sType =
|
||||||
|
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES;
|
||||||
|
int8Enable.shaderInt8 = VK_TRUE;
|
||||||
|
int8Enable.pNext = &storage8Enable;
|
||||||
|
|
||||||
|
vkDeviceCreateInfo.pNext = &int8Enable;
|
||||||
|
|
||||||
|
enabledExtensionNameList.push_back(VK_KHR_8BIT_STORAGE_EXTENSION_NAME);
|
||||||
|
vkDeviceCreateInfo.ppEnabledExtensionNames =
|
||||||
|
enabledExtensionNameList.data();
|
||||||
|
vkDeviceCreateInfo.enabledExtensionCount =
|
||||||
|
(uint32_t)enabledExtensionNameList.size();
|
||||||
|
|
||||||
vkCreateDevice(physicalDevice, &vkDeviceCreateInfo, NULL, &m_vkDevice);
|
vkCreateDevice(physicalDevice, &vkDeviceCreateInfo, NULL, &m_vkDevice);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
vkCreateDevice(physicalDevice, &vkDeviceCreateInfo, NULL, &m_vkDevice);
|
||||||
|
}
|
||||||
|
|
||||||
for (uint32_t qfIdx = 0;
|
for (uint32_t qfIdx = 0;
|
||||||
qfIdx < (uint32_t)m_physicalDevice.getQueueFamilyList().size();
|
qfIdx < (uint32_t)m_physicalDevice.getQueueFamilyList().size();
|
||||||
|
|||||||
@@ -148,7 +148,8 @@ public:
|
|||||||
VulkanDevice(
|
VulkanDevice(
|
||||||
const VulkanPhysicalDevice &physicalDevice = getVulkanPhysicalDevice(),
|
const VulkanPhysicalDevice &physicalDevice = getVulkanPhysicalDevice(),
|
||||||
const VulkanQueueFamilyToQueueCountMap &queueFamilyToQueueCountMap =
|
const VulkanQueueFamilyToQueueCountMap &queueFamilyToQueueCountMap =
|
||||||
getDefaultVulkanQueueFamilyToQueueCountMap());
|
getDefaultVulkanQueueFamilyToQueueCountMap(),
|
||||||
|
bool useShaderInt8 = false);
|
||||||
virtual ~VulkanDevice();
|
virtual ~VulkanDevice();
|
||||||
const VulkanPhysicalDevice &getPhysicalDevice() const;
|
const VulkanPhysicalDevice &getPhysicalDevice() const;
|
||||||
VulkanQueue &
|
VulkanQueue &
|
||||||
|
|||||||
@@ -1586,7 +1586,7 @@ struct BufferTestBase : public VulkanTestBase
|
|||||||
{
|
{
|
||||||
BufferTestBase(cl_device_id device, cl_context context,
|
BufferTestBase(cl_device_id device, cl_context context,
|
||||||
cl_command_queue queue, cl_int nelems)
|
cl_command_queue queue, cl_int nelems)
|
||||||
: VulkanTestBase(device, context, queue, nelems)
|
: VulkanTestBase(device, context, queue, nelems, true)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
int test_buffer_common(bool use_fence)
|
int test_buffer_common(bool use_fence)
|
||||||
|
|||||||
@@ -37,11 +37,13 @@ inline void params_reset()
|
|||||||
struct VulkanTestBase
|
struct VulkanTestBase
|
||||||
{
|
{
|
||||||
VulkanTestBase(cl_device_id device, cl_context context,
|
VulkanTestBase(cl_device_id device, cl_context context,
|
||||||
cl_command_queue queue, cl_int nelems)
|
cl_command_queue queue, cl_int nelems,
|
||||||
|
bool useShaderInt8 = false)
|
||||||
: device(device), context(context), num_elems(nelems)
|
: device(device), context(context), num_elems(nelems)
|
||||||
{
|
{
|
||||||
vkDevice.reset(new VulkanDevice(
|
vkDevice.reset(new VulkanDevice(
|
||||||
getAssociatedVulkanPhysicalDevice(device, useValidationLayers)));
|
getAssociatedVulkanPhysicalDevice(device, useValidationLayers),
|
||||||
|
getDefaultVulkanQueueFamilyToQueueCountMap(), useShaderInt8));
|
||||||
|
|
||||||
cl_platform_id platform;
|
cl_platform_id platform;
|
||||||
cl_int error = clGetDeviceInfo(device, CL_DEVICE_PLATFORM,
|
cl_int error = clGetDeviceInfo(device, CL_DEVICE_PLATFORM,
|
||||||
|
|||||||
Reference in New Issue
Block a user