mirror of
https://github.com/KhronosGroup/OpenCL-CTS.git
synced 2026-03-19 06:09:01 +00:00
Fix errors in test_vulkan (#2183)
This fixes three problems in `test_vulkan`:
1. One negative test is violating the OpenCL specification. A call to
`clEnqueue{Wait,Signal}SemaphoresKHR` with an invalid semaphore should
return `CL_INVALID_SEMAPHORE_KHR` and not `CL_INVALID_VALUE`.
>
[CL_INVALID_SEMAPHORE_KHR](https://registry.khronos.org/OpenCL/specs/3.0-unified/html/OpenCL_API.html#CL_INVALID_SEMAPHORE_KHR)
if any of the semaphore objects specified by sema_objects is not valid.
2. When populating the list of supported external memory handle types
for Vulkan, the types are unconditionally added to the list, without
checking if the device supports it or not, this fix is namely for
`VULKAN_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD`.
3. If a device does not support an optional extension (that is required
for a test), the test should skip, not throw an exception and fail. A
test failure should be reserved for the cases where a device claims
support for an extension but then fails to execute the test correctly.
---------
Signed-off-by: Ahmed Hesham <ahmed.hesham@arm.com>
This commit is contained in:
@@ -101,7 +101,8 @@
|
||||
VK_FUNC_DECL(vkGetPhysicalDeviceSurfaceSupportKHR) \
|
||||
VK_FUNC_DECL(vkImportSemaphoreFdKHR) \
|
||||
VK_FUNC_DECL(vkGetPhysicalDeviceExternalSemaphorePropertiesKHR) \
|
||||
VK_FUNC_DECL(vkGetImageSubresourceLayout)
|
||||
VK_FUNC_DECL(vkGetImageSubresourceLayout) \
|
||||
VK_FUNC_DECL(vkGetPhysicalDeviceExternalBufferProperties)
|
||||
#define VK_WINDOWS_FUNC_LIST \
|
||||
VK_FUNC_DECL(vkGetMemoryWin32HandleKHR) \
|
||||
VK_FUNC_DECL(vkGetSemaphoreWin32HandleKHR) \
|
||||
@@ -202,5 +203,7 @@
|
||||
#define vkGetSemaphoreWin32HandleKHR _vkGetSemaphoreWin32HandleKHR
|
||||
#define vkImportSemaphoreWin32HandleKHR _vkImportSemaphoreWin32HandleKHR
|
||||
#define vkGetImageSubresourceLayout _vkGetImageSubresourceLayout
|
||||
#define vkGetPhysicalDeviceExternalBufferProperties \
|
||||
_vkGetPhysicalDeviceExternalBufferProperties
|
||||
|
||||
#endif //_vulkan_api_list_hpp_
|
||||
|
||||
@@ -225,7 +225,8 @@ getDefaultVulkanQueueFamilyToQueueCountMap()
|
||||
}
|
||||
|
||||
const std::vector<VulkanExternalMemoryHandleType>
|
||||
getSupportedVulkanExternalMemoryHandleTypeList()
|
||||
getSupportedVulkanExternalMemoryHandleTypeList(
|
||||
const VulkanPhysicalDevice &physical_device)
|
||||
{
|
||||
std::vector<VulkanExternalMemoryHandleType> externalMemoryHandleTypeList;
|
||||
|
||||
@@ -238,8 +239,23 @@ getSupportedVulkanExternalMemoryHandleTypeList()
|
||||
externalMemoryHandleTypeList.push_back(
|
||||
VULKAN_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT);
|
||||
#else
|
||||
externalMemoryHandleTypeList.push_back(
|
||||
VULKAN_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD);
|
||||
VkPhysicalDeviceExternalBufferInfo buffer_info = {};
|
||||
buffer_info.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO;
|
||||
buffer_info.handleType = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR;
|
||||
|
||||
VkExternalBufferProperties buffer_properties = {};
|
||||
buffer_properties.sType = VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES;
|
||||
|
||||
vkGetPhysicalDeviceExternalBufferProperties(physical_device, &buffer_info,
|
||||
&buffer_properties);
|
||||
|
||||
if (buffer_properties.externalMemoryProperties.externalMemoryFeatures
|
||||
& VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT)
|
||||
{
|
||||
|
||||
externalMemoryHandleTypeList.push_back(
|
||||
VULKAN_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD);
|
||||
}
|
||||
#endif
|
||||
|
||||
return externalMemoryHandleTypeList;
|
||||
|
||||
@@ -47,7 +47,8 @@ const VulkanDescriptorSetLayoutList& getEmptyVulkanDescriptorSetLayoutList();
|
||||
const VulkanQueueFamilyToQueueCountMap&
|
||||
getDefaultVulkanQueueFamilyToQueueCountMap();
|
||||
const std::vector<VulkanExternalMemoryHandleType>
|
||||
getSupportedVulkanExternalMemoryHandleTypeList();
|
||||
getSupportedVulkanExternalMemoryHandleTypeList(
|
||||
const VulkanPhysicalDevice& physical_device);
|
||||
const std::vector<VulkanExternalSemaphoreHandleType>
|
||||
getSupportedVulkanExternalSemaphoreHandleTypeList(const VulkanDevice& vkDevice);
|
||||
std::vector<VulkanExternalSemaphoreHandleType>
|
||||
|
||||
Reference in New Issue
Block a user