diff --git a/.github/intel-llvm-mirror-base-commit b/.github/intel-llvm-mirror-base-commit index 5a0c5a5ebb..866faaeec3 100644 --- a/.github/intel-llvm-mirror-base-commit +++ b/.github/intel-llvm-mirror-base-commit @@ -1 +1 @@ -92690a39bcb6bd40dce506d08ce4636564f314f2 +5f86594c35c62c45d6928e07a7191c62d69248dd diff --git a/cmake/helpers.cmake b/cmake/helpers.cmake index a2d6a26cd3..de22fe7580 100644 --- a/cmake/helpers.cmake +++ b/cmake/helpers.cmake @@ -88,7 +88,13 @@ endif() function(add_ur_target_compile_options name) if(NOT MSVC) - target_compile_definitions(${name} PRIVATE -D_FORTIFY_SOURCE=2) + if (NOT LLVM_ENABLE_PROJECTS) + # If UR is built as part of LLVM (i.e. as part of SYCL), then + # _FORTIFY_SOURCE will be set globally in advance to a potentially + # different value. To avoid redefinition errors, only set the + # macro for a "standalone" build. + target_compile_definitions(${name} PRIVATE -D_FORTIFY_SOURCE=2) + endif() target_compile_options(${name} PRIVATE # Warning options -Wall diff --git a/include/ur_api.h b/include/ur_api.h index 6b996c1a4e..577bb4d5b2 100644 --- a/include/ur_api.h +++ b/include/ur_api.h @@ -5779,8 +5779,8 @@ typedef enum ur_program_info_t { UR_PROGRAM_INFO_IL = 4, /// [size_t[]] Return program binary sizes for each device. UR_PROGRAM_INFO_BINARY_SIZES = 5, - /// [unsigned char[]] Return program binaries for all devices for this - /// Program. These are not null-terminated. + /// [unsigned char *[]] Write program binaries into caller-provided + /// buffers for each device. These are not null-terminated. UR_PROGRAM_INFO_BINARIES = 6, /// [size_t][optional-query] Number of kernels in Program, return type /// size_t. @@ -9800,6 +9800,8 @@ typedef enum ur_exp_external_mem_type_t { UR_EXP_EXTERNAL_MEM_TYPE_WIN32_NT_DX12_RESOURCE = 2, /// dma_buf file descriptor UR_EXP_EXTERNAL_MEM_TYPE_DMA_BUF = 3, + /// Win32 NT DirectX 11 resource handle + UR_EXP_EXTERNAL_MEM_TYPE_WIN32_NT_DX11_RESOURCE = 4, /// @cond UR_EXP_EXTERNAL_MEM_TYPE_FORCE_UINT32 = 0x7fffffff /// @endcond @@ -10518,7 +10520,8 @@ UR_APIEXPORT ur_result_t UR_APICALL urBindlessImagesMipmapFreeExp( /// + `NULL == hContext` /// + `NULL == hDevice` /// - ::UR_RESULT_ERROR_INVALID_ENUMERATION -/// + `::UR_EXP_EXTERNAL_MEM_TYPE_DMA_BUF < memHandleType` +/// + `::UR_EXP_EXTERNAL_MEM_TYPE_WIN32_NT_DX11_RESOURCE < +/// memHandleType` /// - ::UR_RESULT_ERROR_INVALID_NULL_POINTER /// + `NULL == pExternalMemDesc` /// + `NULL == phExternalMem` @@ -10675,7 +10678,8 @@ UR_APIEXPORT ur_result_t UR_APICALL urBindlessImagesFreeMappedLinearMemoryExp( /// - ::UR_RESULT_ERROR_INVALID_NULL_HANDLE /// + `NULL == hDevice` /// - ::UR_RESULT_ERROR_INVALID_ENUMERATION -/// + `::UR_EXP_EXTERNAL_MEM_TYPE_DMA_BUF < memHandleType` +/// + `::UR_EXP_EXTERNAL_MEM_TYPE_WIN32_NT_DX11_RESOURCE < +/// memHandleType` /// - ::UR_RESULT_ERROR_INVALID_NULL_POINTER /// + `NULL == pSupportedRet` /// - ::UR_RESULT_ERROR_INVALID_DEVICE diff --git a/include/ur_print.hpp b/include/ur_print.hpp index ddf0af88eb..7fc43237a2 100644 --- a/include/ur_print.hpp +++ b/include/ur_print.hpp @@ -9060,7 +9060,7 @@ inline ur_result_t printTagged(std::ostream &os, const void *ptr, } break; case UR_PROGRAM_INFO_BINARIES: { - const unsigned char *tptr = (const unsigned char *)ptr; + const unsigned char *const *tptr = (const unsigned char *const *)ptr; printPtr(os, tptr); } break; case UR_PROGRAM_INFO_NUM_KERNELS: { @@ -11321,6 +11321,9 @@ inline std::ostream &operator<<(std::ostream &os, case UR_EXP_EXTERNAL_MEM_TYPE_DMA_BUF: os << "UR_EXP_EXTERNAL_MEM_TYPE_DMA_BUF"; break; + case UR_EXP_EXTERNAL_MEM_TYPE_WIN32_NT_DX11_RESOURCE: + os << "UR_EXP_EXTERNAL_MEM_TYPE_WIN32_NT_DX11_RESOURCE"; + break; default: os << "unknown enumerator"; break; diff --git a/scripts/core/EXP-BINDLESS-IMAGES.rst b/scripts/core/EXP-BINDLESS-IMAGES.rst index c3034dce6d..35d2fedbef 100644 --- a/scripts/core/EXP-BINDLESS-IMAGES.rst +++ b/scripts/core/EXP-BINDLESS-IMAGES.rst @@ -120,6 +120,7 @@ Enums * ${X}_EXP_EXTERNAL_MEM_TYPE_WIN32_NT * ${X}_EXP_EXTERNAL_MEM_TYPE_WIN32_NT_DX12_RESOURCE * ${X}_EXP_EXTERNAL_MEM_TYPE_DMA_BUF + * ${X}_EXP_EXTERNAL_MEM_TYPE_WIN32_NT_DX11_RESOURCE * ${x}_exp_external_semaphore_type_t * ${X}_EXP_EXTERNAL_SEMAPHORE_TYPE_OPAQUE_FD @@ -301,6 +302,9 @@ Changelog | || * ${X}_EXP_EXTERNAL_MEM_TYPE_DMA_BUF | | || * ${x}BindlessImagesSupportsImportingHandleTypeExp | +----------+-------------------------------------------------------------+ +| 26.0 || Added support for importing DX11 resources | +| || * ${X}_EXP_EXTERNAL_MEM_TYPE_WIN32_NT_DX11_RESOURCE | ++----------+-------------------------------------------------------------+ Contributors -------------------------------------------------------------------------------- diff --git a/scripts/core/exp-bindless-images.yml b/scripts/core/exp-bindless-images.yml index 0161eee862..6ace4e7740 100644 --- a/scripts/core/exp-bindless-images.yml +++ b/scripts/core/exp-bindless-images.yml @@ -214,6 +214,8 @@ etors: desc: "Win32 NT DirectX 12 resource handle" - name: DMA_BUF desc: "dma_buf file descriptor" + - name: WIN32_NT_DX11_RESOURCE + desc: "Win32 NT DirectX 11 resource handle" --- #-------------------------------------------------------------------------- type: enum desc: "Dictates the type of external semaphore handle." diff --git a/scripts/core/program.yml b/scripts/core/program.yml index 807b06038b..c6c2a9f83d 100644 --- a/scripts/core/program.yml +++ b/scripts/core/program.yml @@ -385,7 +385,7 @@ etors: - name: BINARY_SIZES desc: "[size_t[]] Return program binary sizes for each device." - name: BINARIES - desc: "[unsigned char[]] Return program binaries for all devices for this Program. These are not null-terminated." + desc: "[unsigned char *[]] Write program binaries into caller-provided buffers for each device. These are not null-terminated." - name: NUM_KERNELS desc: "[size_t][optional-query] Number of kernels in Program, return type size_t." - name: KERNEL_NAMES diff --git a/scripts/templates/print.hpp.mako b/scripts/templates/print.hpp.mako index 81d9d795b8..4481847130 100644 --- a/scripts/templates/print.hpp.mako +++ b/scripts/templates/print.hpp.mako @@ -284,7 +284,7 @@ inline std::ostream &operator<<(std::ostream &os, [[maybe_unused]] const ur_bool %>case ${ename}: { %if th.value_traits.is_array(vtype): <% atype = th.value_traits.get_array_name(vtype) %> - %if 'void' in atype: + %if 'void' in atype or '*' in atype: const ${atype} const *tptr = (const ${atype} const*)ptr; %else: const ${atype} *tptr = (const ${atype} *)ptr; diff --git a/source/adapters/cuda/image.cpp b/source/adapters/cuda/image.cpp index de07bfa39e..4d97b225cb 100644 --- a/source/adapters/cuda/image.cpp +++ b/source/adapters/cuda/image.cpp @@ -1524,6 +1524,10 @@ UR_APIEXPORT ur_result_t UR_APICALL urBindlessImagesImportExternalMemoryExp( extMemDesc.type = CU_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE; extMemDesc.flags = CUDA_EXTERNAL_MEMORY_DEDICATED; break; + case UR_EXP_EXTERNAL_MEM_TYPE_WIN32_NT_DX11_RESOURCE: + extMemDesc.type = CU_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_RESOURCE; + extMemDesc.flags = CUDA_EXTERNAL_MEMORY_DEDICATED; + break; default: return UR_RESULT_ERROR_INVALID_VALUE; } diff --git a/source/adapters/hip/image.cpp b/source/adapters/hip/image.cpp index fefd67e0c7..4851b197d6 100644 --- a/source/adapters/hip/image.cpp +++ b/source/adapters/hip/image.cpp @@ -1399,6 +1399,14 @@ UR_APIEXPORT ur_result_t UR_APICALL urBindlessImagesImportExternalMemoryExp( extMemDesc.flags = hipExternalMemoryDedicated; #else return UR_RESULT_ERROR_UNSUPPORTED_FEATURE; +#endif + break; + case UR_EXP_EXTERNAL_MEM_TYPE_WIN32_NT_DX11_RESOURCE: +#if HIP_VERSION >= 50600000 + extMemDesc.type = hipExternalMemoryHandleTypeD3D11Resource; + extMemDesc.flags = hipExternalMemoryDedicated; +#else + return UR_RESULT_ERROR_UNSUPPORTED_FEATURE; #endif break; default: diff --git a/source/adapters/level_zero/adapter.cpp b/source/adapters/level_zero/adapter.cpp index 0c1abe7667..0809ec97ed 100644 --- a/source/adapters/level_zero/adapter.cpp +++ b/source/adapters/level_zero/adapter.cpp @@ -309,12 +309,10 @@ ur_adapter_handle_t_::ur_adapter_handle_t_() if (UrL0Debug & UR_L0_DEBUG_BASIC) { logger.setLegacySink(std::make_unique()); -#ifdef UR_ADAPTER_LEVEL_ZERO_V2 setEnvVar("ZEL_ENABLE_LOADER_LOGGING", "1"); setEnvVar("ZEL_LOADER_LOGGING_LEVEL", "trace"); setEnvVar("ZEL_LOADER_LOG_CONSOLE", "1"); setEnvVar("ZE_ENABLE_VALIDATION_LAYER", "1"); -#endif }; if (UrL0Debug & UR_L0_DEBUG_VALIDATION) { @@ -322,19 +320,12 @@ ur_adapter_handle_t_::ur_adapter_handle_t_() setEnvVar("ZE_ENABLE_PARAMETER_VALIDATION", "1"); } - PlatformCache.Compute = [](Result &result) { - static std::once_flag ZeCallCountInitialized; - try { - std::call_once(ZeCallCountInitialized, []() { - if (UrL0LeaksDebug) { - ZeCallCount = new std::map; - } - }); - } catch (...) { - result = exceptionToResult(std::current_exception()); - return; - } + if (UrL0LeaksDebug) { + setEnvVar("ZE_ENABLE_VALIDATION_LAYER", "1"); + setEnvVar("ZEL_ENABLE_BASIC_LEAK_CHECKER", "1"); + } + PlatformCache.Compute = [](Result &result) { uint32_t UserForcedSysManInit = 0; // Check if the user has disabled the default L0 Env initialization. const int UrSysManEnvInitEnabled = [&UserForcedSysManInit] { @@ -426,7 +417,6 @@ ur_adapter_handle_t_::ur_adapter_handle_t_() useInitDrivers = true; } -#ifdef UR_ADAPTER_LEVEL_ZERO_V2 if ((loader_version.major == 1 && loader_version.minor < 21) || (loader_version.major == 1 && loader_version.minor == 21 && loader_version.patch < 2)) { @@ -435,7 +425,6 @@ ur_adapter_handle_t_::ur_adapter_handle_t_() "WARNING: Level Zero Loader version is older than 1.21.2. " "Please update to the latest version for API logging support.\n"); } -#endif } if (useInitDrivers) { @@ -552,97 +541,6 @@ void globalAdapterOnDemandCleanup() { } ur_result_t adapterStateTeardown() { - // Print the balance of various create/destroy native calls. - // The idea is to verify if the number of create(+) and destroy(-) calls are - // matched. - if (ZeCallCount && (UrL0LeaksDebug) != 0) { - bool LeakFound = false; - // clang-format off - // - // The format of this table is such that each row accounts for a - // specific type of objects, and all elements in the raw except the last - // one are allocating objects of that type, while the last element is known - // to deallocate objects of that type. - // - std::vector> CreateDestroySet = { - {"zeContextCreate", "zeContextDestroy"}, - {"zeCommandQueueCreate", "zeCommandQueueDestroy"}, - {"zeModuleCreate", "zeModuleDestroy"}, - {"zeKernelCreate", "zeKernelDestroy"}, - {"zeEventPoolCreate", "zeEventPoolDestroy"}, - {"zeCommandListCreateImmediate", "zeCommandListCreate", "zeCommandListDestroy"}, - {"zeEventCreate", "zeEventDestroy"}, - {"zeFenceCreate", "zeFenceDestroy"}, - {"zeImageCreate","zeImageViewCreateExt", "zeImageDestroy"}, - {"zeSamplerCreate", "zeSamplerDestroy"}, - {"zeMemAllocDevice", "zeMemAllocHost", "zeMemAllocShared", "zeMemFree"}, - }; - - // A sample output aimed below is this: - // ------------------------------------------------------------------------ - // zeContextCreate = 1 \---> zeContextDestroy = 1 - // zeCommandQueueCreate = 1 \---> zeCommandQueueDestroy = 1 - // zeModuleCreate = 1 \---> zeModuleDestroy = 1 - // zeKernelCreate = 1 \---> zeKernelDestroy = 1 - // zeEventPoolCreate = 1 \---> zeEventPoolDestroy = 1 - // zeCommandListCreateImmediate = 1 | - // zeCommandListCreate = 1 \---> zeCommandListDestroy = 1 ---> LEAK = 1 - // zeEventCreate = 2 \---> zeEventDestroy = 2 - // zeFenceCreate = 1 \---> zeFenceDestroy = 1 - // zeImageCreate = 0 \---> zeImageDestroy = 0 - // zeSamplerCreate = 0 \---> zeSamplerDestroy = 0 - // zeMemAllocDevice = 0 | - // zeMemAllocHost = 1 | - // zeMemAllocShared = 0 \---> zeMemFree = 1 - // - // clang-format on - // TODO: use logger to print this messages - std::cerr << "Check balance of create/destroy calls\n"; - std::cerr << "----------------------------------------------------------\n"; - std::stringstream ss; - for (const auto &Row : CreateDestroySet) { - int diff = 0; - for (auto I = Row.begin(); I != Row.end();) { - const char *ZeName = (*I).c_str(); - const auto &ZeCount = (*ZeCallCount)[*I]; - - bool First = (I == Row.begin()); - bool Last = (++I == Row.end()); - - if (Last) { - ss << " \\--->"; - diff -= ZeCount; - } else { - diff += ZeCount; - if (!First) { - ss << " | "; - std::cerr << ss.str() << "\n"; - ss.str(""); - ss.clear(); - } - } - ss << std::setw(30) << std::right << ZeName; - ss << " = "; - ss << std::setw(5) << std::left << ZeCount; - } - - if (diff) { - LeakFound = true; - ss << " ---> LEAK = " << diff; - } - - std::cerr << ss.str() << '\n'; - ss.str(""); - ss.clear(); - } - - ZeCallCount->clear(); - delete ZeCallCount; - ZeCallCount = nullptr; - if (LeakFound) - return UR_RESULT_ERROR_INVALID_MEM_OBJECT; - } - // Due to multiple DLLMain definitions with SYCL, register to cleanup the // Global Adapter after refcnt is 0 #if defined(_WIN32) diff --git a/source/adapters/level_zero/common.cpp b/source/adapters/level_zero/common.cpp index c41264fe3e..8ed6d7e579 100644 --- a/source/adapters/level_zero/common.cpp +++ b/source/adapters/level_zero/common.cpp @@ -86,8 +86,6 @@ bool setEnvVar(const char *name, const char *value) { ZeUSMImportExtension ZeUSMImport; -std::map *ZeCallCount = nullptr; - void zeParseError(ze_result_t ZeError, const char *&ErrorString) { switch (ZeError) { #define ZE_ERRCASE(ERR) \ @@ -137,31 +135,10 @@ void zeParseError(ze_result_t ZeError, const char *&ErrorString) { } // switch } -#ifdef UR_ADAPTER_LEVEL_ZERO_V2 ze_result_t ZeCall::doCall(ze_result_t ZeResult, const char *, const char *, bool) { return ZeResult; } -#else -ze_result_t ZeCall::doCall(ze_result_t ZeResult, const char *ZeName, - const char *ZeArgs, bool TraceError) { - UR_LOG(DEBUG, "ZE ---> {}{}", ZeName, ZeArgs); - - if (ZeResult == ZE_RESULT_SUCCESS) { - if (UrL0LeaksDebug) { - ++(*ZeCallCount)[ZeName]; - } - return ZE_RESULT_SUCCESS; - } - - if (TraceError) { - const char *ErrorString = "Unknown"; - zeParseError(ZeResult, ErrorString); - UR_LOG(ERR, "Error ({}) in {}", ErrorString, ZeName); - } - return ZeResult; -} -#endif // Specializations for various L0 structures template <> ze_structure_type_t getZeStructureType() { diff --git a/source/adapters/level_zero/common.hpp b/source/adapters/level_zero/common.hpp index cfb19f4977..d39f2dcd21 100644 --- a/source/adapters/level_zero/common.hpp +++ b/source/adapters/level_zero/common.hpp @@ -328,9 +328,6 @@ class ZeUSMImportExtension { // Helper wrapper for working with USM import extension in Level Zero. extern ZeUSMImportExtension ZeUSMImport; -// This will count the calls to Level-Zero -extern std::map *ZeCallCount; - // Some opencl extensions we know are supported by all Level Zero devices. constexpr char ZE_SUPPORTED_EXTENSIONS[] = "cl_khr_il_program cl_khr_subgroups cl_intel_subgroups " diff --git a/source/adapters/level_zero/image_common.cpp b/source/adapters/level_zero/image_common.cpp index 11bd49a96d..b34a59ad5e 100644 --- a/source/adapters/level_zero/image_common.cpp +++ b/source/adapters/level_zero/image_common.cpp @@ -1268,6 +1268,9 @@ ur_result_t urBindlessImagesImportExternalMemoryExp( case UR_EXP_EXTERNAL_MEM_TYPE_WIN32_NT_DX12_RESOURCE: importWin32->flags = ZE_EXTERNAL_MEMORY_TYPE_FLAG_D3D12_RESOURCE; break; + case UR_EXP_EXTERNAL_MEM_TYPE_WIN32_NT_DX11_RESOURCE: + importWin32->flags = ZE_EXTERNAL_MEMORY_TYPE_FLAG_D3D11_TEXTURE; + break; default: delete importWin32; delete externalMemoryData; diff --git a/source/adapters/level_zero/v2/command_buffer.cpp b/source/adapters/level_zero/v2/command_buffer.cpp index bbc200bac6..92118587d4 100644 --- a/source/adapters/level_zero/v2/command_buffer.cpp +++ b/source/adapters/level_zero/v2/command_buffer.cpp @@ -167,6 +167,8 @@ ur_result_t ur_exp_command_buffer_handle_t_::registerExecutionEventUnlocked( } ur_exp_command_buffer_handle_t_::~ur_exp_command_buffer_handle_t_() { + UR_CALL_NOCHECK(commandListManager.lock()->releaseSubmittedKernels()); + if (currentExecution) { currentExecution->release(); } diff --git a/source/loader/layers/sanitizer/msan/msan_ddi.cpp b/source/loader/layers/sanitizer/msan/msan_ddi.cpp index 439afeae99..e2bbb166a5 100644 --- a/source/loader/layers/sanitizer/msan/msan_ddi.cpp +++ b/source/loader/layers/sanitizer/msan/msan_ddi.cpp @@ -61,8 +61,7 @@ ur_result_t urEnqueueUSMFill2DFallback(ur_queue_handle_t hQueue, void *pMem, ur_result_t Result = getContext()->urDdiTable.Enqueue.pfnUSMFill2D( hQueue, pMem, pitch, patternSize, pPattern, width, height, numEventsInWaitList, phEventWaitList, phEvent); - if (Result == UR_RESULT_SUCCESS || - Result != UR_RESULT_ERROR_UNSUPPORTED_FEATURE) { + if (Result != UR_RESULT_ERROR_UNSUPPORTED_FEATURE) { return Result; } diff --git a/source/loader/layers/validation/ur_valddi.cpp b/source/loader/layers/validation/ur_valddi.cpp index 73c91de4a1..979eb3ef22 100644 --- a/source/loader/layers/validation/ur_valddi.cpp +++ b/source/loader/layers/validation/ur_valddi.cpp @@ -8314,7 +8314,7 @@ __urdlllocal ur_result_t UR_APICALL urBindlessImagesImportExternalMemoryExp( if (NULL == hDevice) return UR_RESULT_ERROR_INVALID_NULL_HANDLE; - if (UR_EXP_EXTERNAL_MEM_TYPE_DMA_BUF < memHandleType) + if (UR_EXP_EXTERNAL_MEM_TYPE_WIN32_NT_DX11_RESOURCE < memHandleType) return UR_RESULT_ERROR_INVALID_ENUMERATION; } @@ -8558,7 +8558,7 @@ urBindlessImagesSupportsImportingHandleTypeExp( if (NULL == hDevice) return UR_RESULT_ERROR_INVALID_NULL_HANDLE; - if (UR_EXP_EXTERNAL_MEM_TYPE_DMA_BUF < memHandleType) + if (UR_EXP_EXTERNAL_MEM_TYPE_WIN32_NT_DX11_RESOURCE < memHandleType) return UR_RESULT_ERROR_INVALID_ENUMERATION; } diff --git a/source/loader/ur_libapi.cpp b/source/loader/ur_libapi.cpp index 5f5f86bd4f..1261145424 100644 --- a/source/loader/ur_libapi.cpp +++ b/source/loader/ur_libapi.cpp @@ -8041,7 +8041,8 @@ ur_result_t UR_APICALL urBindlessImagesMipmapFreeExp( /// + `NULL == hContext` /// + `NULL == hDevice` /// - ::UR_RESULT_ERROR_INVALID_ENUMERATION -/// + `::UR_EXP_EXTERNAL_MEM_TYPE_DMA_BUF < memHandleType` +/// + `::UR_EXP_EXTERNAL_MEM_TYPE_WIN32_NT_DX11_RESOURCE < +/// memHandleType` /// - ::UR_RESULT_ERROR_INVALID_NULL_POINTER /// + `NULL == pExternalMemDesc` /// + `NULL == phExternalMem` @@ -8250,7 +8251,8 @@ ur_result_t UR_APICALL urBindlessImagesFreeMappedLinearMemoryExp( /// - ::UR_RESULT_ERROR_INVALID_NULL_HANDLE /// + `NULL == hDevice` /// - ::UR_RESULT_ERROR_INVALID_ENUMERATION -/// + `::UR_EXP_EXTERNAL_MEM_TYPE_DMA_BUF < memHandleType` +/// + `::UR_EXP_EXTERNAL_MEM_TYPE_WIN32_NT_DX11_RESOURCE < +/// memHandleType` /// - ::UR_RESULT_ERROR_INVALID_NULL_POINTER /// + `NULL == pSupportedRet` /// - ::UR_RESULT_ERROR_INVALID_DEVICE diff --git a/source/ur_api.cpp b/source/ur_api.cpp index 2c685ac2cd..cc69811f57 100644 --- a/source/ur_api.cpp +++ b/source/ur_api.cpp @@ -7027,7 +7027,8 @@ ur_result_t UR_APICALL urBindlessImagesMipmapFreeExp( /// + `NULL == hContext` /// + `NULL == hDevice` /// - ::UR_RESULT_ERROR_INVALID_ENUMERATION -/// + `::UR_EXP_EXTERNAL_MEM_TYPE_DMA_BUF < memHandleType` +/// + `::UR_EXP_EXTERNAL_MEM_TYPE_WIN32_NT_DX11_RESOURCE < +/// memHandleType` /// - ::UR_RESULT_ERROR_INVALID_NULL_POINTER /// + `NULL == pExternalMemDesc` /// + `NULL == phExternalMem` @@ -7199,7 +7200,8 @@ ur_result_t UR_APICALL urBindlessImagesFreeMappedLinearMemoryExp( /// - ::UR_RESULT_ERROR_INVALID_NULL_HANDLE /// + `NULL == hDevice` /// - ::UR_RESULT_ERROR_INVALID_ENUMERATION -/// + `::UR_EXP_EXTERNAL_MEM_TYPE_DMA_BUF < memHandleType` +/// + `::UR_EXP_EXTERNAL_MEM_TYPE_WIN32_NT_DX11_RESOURCE < +/// memHandleType` /// - ::UR_RESULT_ERROR_INVALID_NULL_POINTER /// + `NULL == pSupportedRet` /// - ::UR_RESULT_ERROR_INVALID_DEVICE diff --git a/test/conformance/program/urProgramGetInfo.cpp b/test/conformance/program/urProgramGetInfo.cpp index 2a2d4ab234..27fda5c804 100644 --- a/test/conformance/program/urProgramGetInfo.cpp +++ b/test/conformance/program/urProgramGetInfo.cpp @@ -153,6 +153,10 @@ TEST_P(urProgramGetInfoTest, SuccessBinarySizes) { } TEST_P(urProgramGetInfoTest, SuccessBinaries) { + // Not implemented correctly on these targets - they copy their own pointer into the output rather than copying the + // binary + UUR_KNOWN_FAILURE_ON(uur::HIP{}, uur::CUDA{}); + size_t binary_sizes_len = 0; std::vector property_value(0); @@ -175,6 +179,11 @@ TEST_P(urProgramGetInfoTest, SuccessBinaries) { urProgramGetInfo(program, UR_PROGRAM_INFO_BINARIES, sizeof(binaries[0]), binaries, nullptr), UR_PROGRAM_INFO_BINARIES); + + // We assume that there is at least 1 non-zero byte in the binary + bool nonzero_found = std::any_of(property_value.begin(), property_value.end(), + [](char c) { return c != 0; }); + ASSERT_TRUE(nonzero_found); } TEST_P(urProgramGetInfoTest, SuccessNumKernels) {