static WinAdapter* pWinAdapterEnd = NULL;
static WinAdapter* pWinAdapterCapacity = NULL;
-void adapterAdd(const char* szName, LUID luid)
+BOOL adapterAdd(const char* szName, LUID luid)
{
+ BOOL result = TRUE;
if (pWinAdapterEnd == pWinAdapterCapacity)
{
size_t oldCapacity = pWinAdapterCapacity - pWinAdapterBegin;
{
newCapacity = 1;
}
- newCapacity *= 2;
+ else
+ newCapacity *= 2;
WinAdapter* pNewBegin = malloc(newCapacity * sizeof(*pWinAdapterBegin));
- if (pNewBegin)
+ if (!pNewBegin)
+ result = FALSE;
+ else
{
if (pWinAdapterBegin)
{
if (pWinAdapterEnd != pWinAdapterCapacity)
{
size_t nameLen = (strlen(szName) + 1)*sizeof(szName[0]);
- if (pWinAdapterEnd->szName = malloc(nameLen))
- {
+ pWinAdapterEnd->szName = malloc(nameLen);
+ if (!pWinAdapterEnd->szName)
+ result = FALSE;
+ else
+ {
memcpy(pWinAdapterEnd->szName, szName, nameLen);
pWinAdapterEnd->luid = luid;
++pWinAdapterEnd;
}
}
+ return result;
}
/*
BOOL CALLBACK khrIcdOsVendorsEnumerate(PINIT_ONCE InitOnce, PVOID Parameter, PVOID *lpContext)
{
LONG result;
+ BOOL status = FALSE;
const char* platformsName = "SOFTWARE\\Khronos\\OpenCL\\Vendors";
HKEY platformsKey = NULL;
DWORD dwIndex;
continue;
}
// add the library
- adapterAdd(cszLibraryName, ZeroLuid);
+ status |= adapterAdd(cszLibraryName, ZeroLuid);
}
}
{
KHR_ICD_TRACE("Failed to close platforms key %s, ignoring\n", platformsName);
}
- return TRUE;
+ return status;
}
// go through the list of vendors only once
bool khrIcdOsVendorsEnumerateDXGK(void)
{
bool ret = false;
+ int result = 0;
#if defined(OPENCL_ICD_LOADER_REQUIRE_WDK)
#if defined(DXGKDDI_INTERFACE_VERSION_WDDM2_4) && (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_4)
// Get handle to GDI Runtime
queryArgs.QueryType = D3DDDI_QUERYREGISTRY_ADAPTERKEY;
queryArgs.QueryFlags.TranslatePath = TRUE;
queryArgs.ValueType = REG_SZ;
- MultiByteToWideChar(
- CP_ACP,
- 0,
- cszOpenCLRegKeyName,
- szOpenCLRegKeyName,
- queryArgs.ValueName,
- ARRAYSIZE(queryArgs.ValueName));
+ result = MultiByteToWideChar(
+ CP_ACP,
+ 0,
+ cszOpenCLRegKeyName,
+ szOpenCLRegKeyName,
+ queryArgs.ValueName,
+ ARRAYSIZE(queryArgs.ValueName));
+ if (!result) {
+ KHR_ICD_TRACE("MultiByteToWideChar status != SUCCESS\n");
+ continue;
+ }
D3DKMT_QUERYADAPTERINFO queryAdapterInfo = {0};
queryAdapterInfo.hAdapter = pAdapterInfo[AdapterIndex].hAdapter;
queryAdapterInfo.Type = KMTQAITYPE_QUERYREGISTRY;
{
size_t len = wcstombs(cszLibraryName, pWchar, sizeof(cszLibraryName));
KHR_ICD_ASSERT(len == (sizeof(cszLibraryName) - 1));
- adapterAdd(cszLibraryName, pAdapterInfo[AdapterIndex].AdapterLuid);
+ ret |= adapterAdd(cszLibraryName, pAdapterInfo[AdapterIndex].AdapterLuid);
}
}
else if (Status == STATUS_INVALID_PARAMETER && pQueryArgs->Status == D3DDDI_QUERYREGISTRY_STATUS_FAIL)
}
free(pQueryBuffer);
}
- ret = true;
out:
free(pAdapterInfo);
}
KHR_ICD_TRACE(" Path: %s\n", cszOclPath);
- adapterAdd(cszOclPath, ZeroLuid);
-
- bRet = true;
+ bRet |= adapterAdd(cszOclPath, ZeroLuid);
}
out:
extern const LUID ZeroLuid;
-void adapterAdd(const char* szName, LUID luid);
+BOOL adapterAdd(const char* szName, LUID luid);
// Do not free the memory returned by this function.
const char* GetOpenCLRegKeyName(void);