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;
- size_t NewCapacity = OldCapacity;
- if (0 == NewCapacity)
+ size_t oldCapacity = pWinAdapterCapacity - pWinAdapterBegin;
+ size_t newCapacity = oldCapacity;
+ if (0 == newCapacity)
{
- NewCapacity = 1;
+ newCapacity = 1;
+ }
- else if(newCapacity < UINT_MAX/2)
- {
++ else if(newCapacity < UINT_MAX/2)
++ {
+ newCapacity *= 2;
- }
+ }
- NewCapacity *= 2;
- WinAdapter* pNewBegin = malloc(NewCapacity * sizeof(*pWinAdapterBegin));
- if (pNewBegin)
+ WinAdapter* pNewBegin = realloc(pWinAdapterBegin, newCapacity * sizeof(*pWinAdapterBegin));
+ if (!pNewBegin)
+ result = FALSE;
- else
++ else
{
- if (pWinAdapterBegin)
- {
- memcpy(pNewBegin, pWinAdapterBegin, OldCapacity * sizeof(*pWinAdapterBegin));
- free(pWinAdapterBegin);
- }
- pWinAdapterCapacity = pNewBegin + NewCapacity;
- pWinAdapterEnd = pNewBegin + OldCapacity;
+ pWinAdapterCapacity = pNewBegin + newCapacity;
+ pWinAdapterEnd = pNewBegin + oldCapacity;
pWinAdapterBegin = pNewBegin;
}
}
if (pWinAdapterEnd != pWinAdapterCapacity)
{
- size_t nameLen = strlen(szName) + 1;
- if (pWinAdapterEnd->szName = malloc(nameLen))
- {
- memcpy(pWinAdapterEnd->szName, szName, nameLen * sizeof(*szName));
+ size_t nameLen = (strlen(szName) + 1)*sizeof(szName[0]);
+ pWinAdapterEnd->szName = malloc(nameLen);
- if (!pWinAdapterEnd->szName)
- result = FALSE;
- else
- {
++ if (!pWinAdapterEnd->szName)
++ result = FALSE;
++ else
++ {
+ memcpy(pWinAdapterEnd->szName, szName, nameLen);
pWinAdapterEnd->luid = luid;
++pWinAdapterEnd;
}
khrIcdVendorsEnumerateEnv();
- if (!khrIcdOsVendorsEnumerateDXGK())
+ status |= khrIcdOsVendorsEnumerateDXGK();
+ if (!status)
{
KHR_ICD_TRACE("Failed to load via DXGK interface on RS4, continuing\n");
- if (!khrIcdOsVendorsEnumerateHKR())
+ status |= khrIcdOsVendorsEnumerateHKR();
- if (!status)
++ if (!status)
{
KHR_ICD_TRACE("Failed to enumerate HKR entries, continuing\n");
}
{
IDXGIFactory* pFactory = NULL;
PFN_CREATE_DXGI_FACTORY pCreateDXGIFactory = (PFN_CREATE_DXGI_FACTORY)GetProcAddress(hDXGI, "CreateDXGIFactory");
- HRESULT hr = pCreateDXGIFactory(&IID_IDXGIFactory, &pFactory);
- if (SUCCEEDED(hr))
- {
- UINT i = 0;
- IDXGIAdapter* pAdapter = NULL;
- while (SUCCEEDED(pFactory->lpVtbl->EnumAdapters(pFactory, i++, &pAdapter)))
- if (pCreateDXGIFactory)
- {
++ if (pCreateDXGIFactory)
++ {
+ HRESULT hr = pCreateDXGIFactory(&IID_IDXGIFactory, &pFactory);
+ if (SUCCEEDED(hr))
{
- DXGI_ADAPTER_DESC AdapterDesc;
- pAdapter->lpVtbl->GetDesc(pAdapter, &AdapterDesc);
-
- for (WinAdapter* iterAdapter = pWinAdapterBegin; iterAdapter != pWinAdapterEnd; ++iterAdapter)
+ UINT i = 0;
+ IDXGIAdapter* pAdapter = NULL;
+ while (SUCCEEDED(pFactory->lpVtbl->EnumAdapters(pFactory, i++, &pAdapter)))
{
- if (iterAdapter->luid.LowPart == AdapterDesc.AdapterLuid.LowPart
- && iterAdapter->luid.HighPart == AdapterDesc.AdapterLuid.HighPart)
+ DXGI_ADAPTER_DESC AdapterDesc;
+ if (SUCCEEDED(pAdapter->lpVtbl->GetDesc(pAdapter, &AdapterDesc)))
{
- khrIcdVendorAdd(iterAdapter->szName);
- break;
+ for (WinAdapter* iterAdapter = pWinAdapterBegin; iterAdapter != pWinAdapterEnd; ++iterAdapter)
+ {
+ if (iterAdapter->luid.LowPart == AdapterDesc.AdapterLuid.LowPart
+ && iterAdapter->luid.HighPart == AdapterDesc.AdapterLuid.HighPart)
+ {
+ khrIcdVendorAdd(iterAdapter->szName);
+ break;
+ }
- }
++ }
}
- }
- pAdapter->lpVtbl->Release(pAdapter);
+ pAdapter->lpVtbl->Release(pAdapter);
++ pAdapter->lpVtbl->Release(pAdapter);
+ }
+ pFactory->lpVtbl->Release(pFactory);
}
- pFactory->lpVtbl->Release(pFactory);
+ FreeLibrary(hDXGI);
- }
+ }
- FreeLibrary(hDXGI);
}
// Go through the list again, putting any remaining adapters at the end of the list in an undefined order
CP_ACP,
0,
cszOpenCLRegKeyName,
- OpenCLRegKeyNameSize,
- QueryArgs.ValueName,
- ARRAYSIZE(QueryArgs.ValueName));
- D3DKMT_QUERYADAPTERINFO QueryAdapterInfo = {0};
- QueryAdapterInfo.hAdapter = pAdapterInfo[AdapterIndex].hAdapter;
- QueryAdapterInfo.Type = KMTQAITYPE_QUERYREGISTRY;
- QueryAdapterInfo.pPrivateDriverData = &QueryArgs;
- QueryAdapterInfo.PrivateDriverDataSize = sizeof(QueryArgs);
- Status = D3DKMTQueryAdapterInfo(&QueryAdapterInfo);
- if (!NT_SUCCESS(Status))
+ szOpenCLRegKeyName,
+ queryArgs.ValueName,
+ ARRAYSIZE(queryArgs.ValueName));
- if (!result)
- {
++ if (!result)
++ {
+ KHR_ICD_TRACE("MultiByteToWideChar status != SUCCESS\n");
+ continue;
- }
++ }
+ D3DKMT_QUERYADAPTERINFO queryAdapterInfo = {0};
+ queryAdapterInfo.hAdapter = pAdapterInfo[AdapterIndex].hAdapter;
+ queryAdapterInfo.Type = KMTQAITYPE_QUERYREGISTRY;
+ queryAdapterInfo.pPrivateDriverData = &queryArgs;
+ queryAdapterInfo.PrivateDriverDataSize = sizeof(queryArgs);
+ status = pQueryAdapterInfo(&queryAdapterInfo);
+ if (!NT_SUCCESS(status))
{
// Continue trying to get as much info on each adapter as possible.
// It's too late to return FALSE and claim WDDM2_4 enumeration is not available here.
continue;
}
- if (NT_SUCCESS(Status) && pQueryArgs->Status == D3DDDI_QUERYREGISTRY_STATUS_BUFFER_OVERFLOW)
+ if (NT_SUCCESS(status) && pQueryArgs->Status == D3DDDI_QUERYREGISTRY_STATUS_BUFFER_OVERFLOW)
{
- ULONG QueryBufferSize = sizeof(D3DDDI_QUERYREGISTRY_INFO) + QueryArgs.OutputValueSize;
- pQueryBuffer = (D3DDDI_QUERYREGISTRY_INFO*)malloc(QueryBufferSize);
- memcpy(pQueryBuffer, &QueryArgs, sizeof(D3DDDI_QUERYREGISTRY_INFO));
- QueryAdapterInfo.pPrivateDriverData = pQueryBuffer;
- QueryAdapterInfo.PrivateDriverDataSize = QueryBufferSize;
- Status = D3DKMTQueryAdapterInfo(&QueryAdapterInfo);
+ ULONG queryBufferSize = sizeof(D3DDDI_QUERYREGISTRY_INFO) + queryArgs.OutputValueSize;
+ pQueryBuffer = (D3DDDI_QUERYREGISTRY_INFO*)malloc(queryBufferSize);
+ if (pQueryBuffer == NULL)
- continue;
++ continue;
+ memcpy(pQueryBuffer, &queryArgs, sizeof(D3DDDI_QUERYREGISTRY_INFO));
+ queryAdapterInfo.pPrivateDriverData = pQueryBuffer;
+ queryAdapterInfo.PrivateDriverDataSize = queryBufferSize;
+ status = pQueryAdapterInfo(&queryAdapterInfo);
pQueryArgs = pQueryBuffer;
}
- if (NT_SUCCESS(Status) && pQueryArgs->Status == D3DDDI_QUERYREGISTRY_STATUS_SUCCESS)
+ if (NT_SUCCESS(status) && pQueryArgs->Status == D3DDDI_QUERYREGISTRY_STATUS_SUCCESS)
{
wchar_t* pWchar = pQueryArgs->OutputString;
memset(cszLibraryName, 0, sizeof(cszLibraryName));