Merge branch 'origin/para-virtual-fixes'
authorNikhil Joshi <nikhilj@nvidia.com>
Fri, 10 Jan 2020 12:58:22 +0000 (18:28 +0530)
committerNikhil Joshi <nikhilj@nvidia.com>
Mon, 13 Jan 2020 16:47:02 +0000 (22:17 +0530)
1  2 
CMakeLists.txt
loader/windows/OpenCL.rc
loader/windows/icd_windows.c
loader/windows/icd_windows_dxgk.c
loader/windows/icd_windows_hkr.c

diff --cc CMakeLists.txt
Simple merge
Simple merge
index bec4b566c1fac59904f7d67e8dd17ef1a8164730,00c4c02f698075dfe29465a08a963322afa29708..ca5e4e923b800de7c75d6132fb447d2ce1e1b35b
@@@ -41,37 -42,41 +41,41 @@@ static WinAdapter* pWinAdapterBegin = N
  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;
          }
@@@ -95,10 -109,12 +108,12 @@@ BOOL CALLBACK khrIcdOsVendorsEnumerate(
  
      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
index 8530c8e30002762a78a5d98e2ed92547af472679,42ca4844b6dd910795e5fbb81abd4cbcfd904b06..660dbb6045d9af3e063b7d655bcaf1f7a84eb7b0
@@@ -98,32 -108,39 +108,39 @@@ bool khrIcdOsVendorsEnumerateDXGK(void
                  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));
Simple merge