diff --git a/test_conformance/common/vulkan_wrapper/opencl_vulkan_wrapper.cpp b/test_conformance/common/vulkan_wrapper/opencl_vulkan_wrapper.cpp index 36b94d9e..80573e4e 100644 --- a/test_conformance/common/vulkan_wrapper/opencl_vulkan_wrapper.cpp +++ b/test_conformance/common/vulkan_wrapper/opencl_vulkan_wrapper.cpp @@ -705,13 +705,17 @@ clExternalMemoryImage::clExternalMemoryImage( std::vector extMemProperties1; cl_device_id devList[] = { deviceId, NULL }; - VulkanImageTiling vulkanImageTiling = - vkClExternalMemoryHandleTilingAssumption( - deviceId, externalMemoryHandleType, &errcode_ret); + auto vulkanImageTiling = vkClExternalMemoryHandleTilingAssumption( + deviceId, externalMemoryHandleType, &errcode_ret); if (CL_SUCCESS != errcode_ret) { throw std::runtime_error("Failed to query OpenCL tiling mode"); } + if (vulkanImageTiling == std::nullopt) + { + throw std::runtime_error( + "Could not find image tiling supported by both Vulkan and OpenCL"); + } #ifdef _WIN32 if (!is_extension_available(devList[0], "cl_khr_external_memory_win32")) @@ -1206,12 +1210,11 @@ cl_external_memory_handle_type_khr vkToOpenCLExternalMemoryHandleType( return 0; } -VulkanImageTiling vkClExternalMemoryHandleTilingAssumption( +std::optional vkClExternalMemoryHandleTilingAssumption( cl_device_id deviceId, VulkanExternalMemoryHandleType vkExternalMemoryHandleType, int *error_ret) { size_t size = 0; - VulkanImageTiling mode = VULKAN_IMAGE_TILING_OPTIMAL; assert(error_ret != nullptr); // errcode_ret is not optional, it must be checked @@ -1222,12 +1225,12 @@ VulkanImageTiling vkClExternalMemoryHandleTilingAssumption( 0, nullptr, &size); if (*error_ret != CL_SUCCESS) { - return mode; + return std::nullopt; } if (size == 0) { - return mode; + return std::nullopt; } std::vector assume_linear_types( @@ -1239,7 +1242,7 @@ VulkanImageTiling vkClExternalMemoryHandleTilingAssumption( size, assume_linear_types.data(), nullptr); if (*error_ret != CL_SUCCESS) { - return mode; + return std::nullopt; } if (std::find( @@ -1247,8 +1250,8 @@ VulkanImageTiling vkClExternalMemoryHandleTilingAssumption( vkToOpenCLExternalMemoryHandleType(vkExternalMemoryHandleType)) != assume_linear_types.end()) { - mode = VULKAN_IMAGE_TILING_LINEAR; + return VULKAN_IMAGE_TILING_LINEAR; } - return mode; + return std::nullopt; } diff --git a/test_conformance/common/vulkan_wrapper/opencl_vulkan_wrapper.hpp b/test_conformance/common/vulkan_wrapper/opencl_vulkan_wrapper.hpp index 43912d5a..ac167f60 100644 --- a/test_conformance/common/vulkan_wrapper/opencl_vulkan_wrapper.hpp +++ b/test_conformance/common/vulkan_wrapper/opencl_vulkan_wrapper.hpp @@ -26,6 +26,8 @@ #include #endif +#include + #define CREATE_OPENCL_SEMAPHORE(clSemaphore, vkSemaphore, ctx, handleType, \ devIdx, createExportable) \ if (!(createExportable \ @@ -187,8 +189,8 @@ public: extern void init_cl_vk_ext(cl_platform_id, cl_uint num_devices, cl_device_id *deviceIds); -VulkanImageTiling vkClExternalMemoryHandleTilingAssumption( +std::optional vkClExternalMemoryHandleTilingAssumption( cl_device_id deviceId, VulkanExternalMemoryHandleType vkExternalMemoryHandleType, int *error_ret); -#endif // _opencl_vulkan_wrapper_hpp_ \ No newline at end of file +#endif // _opencl_vulkan_wrapper_hpp_ diff --git a/test_conformance/common/vulkan_wrapper/vulkan_wrapper.hpp b/test_conformance/common/vulkan_wrapper/vulkan_wrapper.hpp index 04d74c57..2c49caf3 100644 --- a/test_conformance/common/vulkan_wrapper/vulkan_wrapper.hpp +++ b/test_conformance/common/vulkan_wrapper/vulkan_wrapper.hpp @@ -485,7 +485,7 @@ public: VulkanExternalMemoryHandleType externalMemoryHandleType = VULKAN_EXTERNAL_MEMORY_HANDLE_TYPE_NONE, VulkanImageCreateFlag imageCreateFlags = VULKAN_IMAGE_CREATE_FLAG_NONE, - VulkanImageTiling imageTiling = VULKAN_IMAGE_TILING_OPTIMAL, + VulkanImageTiling imageTiling = VULKAN_IMAGE_TILING_LINEAR, VulkanImageUsage imageUsage = VULKAN_IMAGE_USAGE_SAMPLED_STORAGE_TRANSFER_SRC_DST, VulkanSharingMode sharingMode = VULKAN_SHARING_MODE_EXCLUSIVE); diff --git a/test_conformance/vulkan/test_vulkan_api_consistency.cpp b/test_conformance/vulkan/test_vulkan_api_consistency.cpp index a148c5d3..b89288a0 100644 --- a/test_conformance/vulkan/test_vulkan_api_consistency.cpp +++ b/test_conformance/vulkan/test_vulkan_api_consistency.cpp @@ -216,14 +216,19 @@ struct ConsistencyExternalImageTest : public VulkanTestBase getSupportedVulkanExternalMemoryHandleTypeList( vkDevice->getPhysicalDevice())[0]; - VulkanImageTiling vulkanImageTiling = - vkClExternalMemoryHandleTilingAssumption( - device, vkExternalMemoryHandleType, &errNum); + auto vulkanImageTiling = vkClExternalMemoryHandleTilingAssumption( + device, vkExternalMemoryHandleType, &errNum); ASSERT_SUCCESS(errNum, "Failed to query OpenCL tiling mode"); + if (vulkanImageTiling == std::nullopt) + { + log_info("No image tiling supported by both Vulkan and OpenCL " + "could be found\n"); + return TEST_SKIPPED_ITSELF; + } VulkanImage2D vkImage2D = VulkanImage2D( *vkDevice, VULKAN_FORMAT_R8G8B8A8_UNORM, width, height, - vulkanImageTiling, 1, vkExternalMemoryHandleType); + *vulkanImageTiling, 1, vkExternalMemoryHandleType); const VulkanMemoryTypeList& memoryTypeList = vkImage2D.getMemoryTypeList(); diff --git a/test_conformance/vulkan/test_vulkan_api_consistency_for_1dimages.cpp b/test_conformance/vulkan/test_vulkan_api_consistency_for_1dimages.cpp index a90d7754..bab9bd86 100644 --- a/test_conformance/vulkan/test_vulkan_api_consistency_for_1dimages.cpp +++ b/test_conformance/vulkan/test_vulkan_api_consistency_for_1dimages.cpp @@ -73,14 +73,20 @@ struct ConsistencyExternalImage1DTest : public VulkanTestBase getSupportedVulkanExternalMemoryHandleTypeList( vkDevice->getPhysicalDevice())[0]; - VulkanImageTiling vulkanImageTiling = - vkClExternalMemoryHandleTilingAssumption( - device, vkExternalMemoryHandleType, &errNum); + auto vulkanImageTiling = vkClExternalMemoryHandleTilingAssumption( + device, vkExternalMemoryHandleType, &errNum); ASSERT_SUCCESS(errNum, "Failed to query OpenCL tiling mode"); + if (vulkanImageTiling == std::nullopt) + { + log_info("No image tiling supported by both Vulkan and OpenCL " + "could be found\n"); + return TEST_SKIPPED_ITSELF; + } + VulkanImage1D vkImage1D = VulkanImage1D(*vkDevice, VULKAN_FORMAT_R8G8B8A8_UNORM, width, - vulkanImageTiling, 1, vkExternalMemoryHandleType); + *vulkanImageTiling, 1, vkExternalMemoryHandleType); const VulkanMemoryTypeList& memoryTypeList = vkImage1D.getMemoryTypeList(); diff --git a/test_conformance/vulkan/test_vulkan_api_consistency_for_3dimages.cpp b/test_conformance/vulkan/test_vulkan_api_consistency_for_3dimages.cpp index 0beb8d18..1a78dd8f 100644 --- a/test_conformance/vulkan/test_vulkan_api_consistency_for_3dimages.cpp +++ b/test_conformance/vulkan/test_vulkan_api_consistency_for_3dimages.cpp @@ -76,14 +76,19 @@ struct ConsistencyExternalImage3DTest : public VulkanTestBase getSupportedVulkanExternalMemoryHandleTypeList( vkDevice->getPhysicalDevice())[0]; - VulkanImageTiling vulkanImageTiling = - vkClExternalMemoryHandleTilingAssumption( - device, vkExternalMemoryHandleType, &errNum); + auto vulkanImageTiling = vkClExternalMemoryHandleTilingAssumption( + device, vkExternalMemoryHandleType, &errNum); ASSERT_SUCCESS(errNum, "Failed to query OpenCL tiling mode"); + if (vulkanImageTiling == std::nullopt) + { + log_info("No image tiling supported by both Vulkan and OpenCL " + "could be found\n"); + return TEST_SKIPPED_ITSELF; + } VulkanImage3D vkImage3D = VulkanImage3D( *vkDevice, VULKAN_FORMAT_R8G8B8A8_UNORM, width, height, depth, - vulkanImageTiling, 1, vkExternalMemoryHandleType); + *vulkanImageTiling, 1, vkExternalMemoryHandleType); const VulkanMemoryTypeList& memoryTypeList = vkImage3D.getMemoryTypeList(); diff --git a/test_conformance/vulkan/test_vulkan_interop_image.cpp b/test_conformance/vulkan/test_vulkan_interop_image.cpp index c2f2727d..c5b57681 100644 --- a/test_conformance/vulkan/test_vulkan_interop_image.cpp +++ b/test_conformance/vulkan/test_vulkan_interop_image.cpp @@ -368,16 +368,22 @@ int run_test_with_two_queue( } log_info("External memory handle type: %d \n", vkExternalMemoryHandleType); - VulkanImageTiling vulkanImageTiling = + auto vulkanImageTiling = vkClExternalMemoryHandleTilingAssumption( deviceId, vkExternalMemoryHandleTypeList[emhtIdx], &err); ASSERT_SUCCESS(err, "Failed to query OpenCL tiling mode"); + if (vulkanImageTiling == std::nullopt) + { + log_info("No image tiling supported by both Vulkan " + "and OpenCL could be found\n"); + return TEST_SKIPPED_ITSELF; + } VulkanImage2D vkDummyImage2D( vkDevice, vkFormatList[0], widthList[0], - heightList[0], vulkanImageTiling, 1, + heightList[0], *vulkanImageTiling, 1, vkExternalMemoryHandleType); const VulkanMemoryTypeList &memoryTypeList = vkDummyImage2D.getMemoryTypeList(); @@ -405,7 +411,7 @@ int run_test_with_two_queue( { VulkanImage2D vkImage2D( vkDevice, vkFormat, width, height, - vulkanImageTiling, numMipLevels, + *vulkanImageTiling, numMipLevels, vkExternalMemoryHandleType); ASSERT_LEQ(vkImage2D.getSize(), maxImage2DSize); totalImageMemSize = @@ -414,7 +420,7 @@ int run_test_with_two_queue( } VulkanImage2DList vkImage2DList( num2DImages, vkDevice, vkFormat, width, height, - vulkanImageTiling, numMipLevels, + *vulkanImageTiling, numMipLevels, vkExternalMemoryHandleType); for (size_t bIdx = 0; bIdx < num2DImages; bIdx++) { @@ -436,7 +442,7 @@ int run_test_with_two_queue( vkDevice, vkImage2DList); VulkanImage2DList vkImage2DList2( num2DImages, vkDevice, vkFormat, width, height, - vulkanImageTiling, numMipLevels, + *vulkanImageTiling, numMipLevels, vkExternalMemoryHandleType); for (size_t bIdx = 0; bIdx < num2DImages; bIdx++) { @@ -982,16 +988,21 @@ int run_test_with_one_queue( continue; } - VulkanImageTiling vulkanImageTiling = + auto vulkanImageTiling = vkClExternalMemoryHandleTilingAssumption( deviceId, vkExternalMemoryHandleTypeList[emhtIdx], &err); test_error_and_cleanup( err, CLEANUP, "Failed to query OpenCL tiling mode"); - + if (vulkanImageTiling == std::nullopt) + { + log_info("No image tiling supported by both Vulkan " + "and OpenCL could be found\n"); + return TEST_SKIPPED_ITSELF; + } VulkanImage2D vkDummyImage2D( vkDevice, vkFormatList[0], widthList[0], - heightList[0], vulkanImageTiling, 1, + heightList[0], *vulkanImageTiling, 1, vkExternalMemoryHandleType); const VulkanMemoryTypeList &memoryTypeList = vkDummyImage2D.getMemoryTypeList(); @@ -1018,7 +1029,7 @@ int run_test_with_one_queue( { VulkanImage2D vkImage2D( vkDevice, vkFormat, width, height, - vulkanImageTiling, numMipLevels, + *vulkanImageTiling, numMipLevels, vkExternalMemoryHandleType); ASSERT_LEQ(vkImage2D.getSize(), maxImage2DSize); totalImageMemSize = @@ -1027,7 +1038,7 @@ int run_test_with_one_queue( } VulkanImage2DList vkImage2DList( num2DImages, vkDevice, vkFormat, width, height, - vulkanImageTiling, numMipLevels, + *vulkanImageTiling, numMipLevels, vkExternalMemoryHandleType); for (size_t bIdx = 0; bIdx < vkImage2DList.size(); bIdx++) @@ -1053,7 +1064,7 @@ int run_test_with_one_queue( VulkanImage2DList vkImage2DList2( num2DImages, vkDevice, vkFormat, width, height, - vulkanImageTiling, numMipLevels, + *vulkanImageTiling, numMipLevels, vkExternalMemoryHandleType); for (size_t bIdx = 0; bIdx < vkImage2DList2.size(); bIdx++)