From ec5927105df5788966dada989656cb5c3f902f23 Mon Sep 17 00:00:00 2001
From: foreman
Date: Tue, 23 Jan 2018 14:36:15 -0500
Subject: [PATCH] P4 to Git Change 1506772 by
skudchad@skudchad_test2_win_opencl on 2018/01/23 14:28:37
SWDEV-143124 - [CQE OCL][DTB][ISV][QR][DTB-BLOCKER] Applications (Both 64/32-bit) are not running on Win 7 due to faulty CL#1503998
- Load module explicitly rather than relying on it being loaded.
- fix a bug in Khronos ICD integration code
Affected files ...
... //depot/stg/opencl/drivers/opencl/api/opencl/khronos/icd/icd_windows_dxgk.c#4 edit
... //depot/stg/opencl/drivers/opencl/api/opencl/khronos/icd/icd_windows_hkr.c#2 edit
[ROCm/clr commit: 2941f9f8088064ce02c5cf6df4282fac809ecda1]
---
.../api/opencl/khronos/icd/icd_windows_dxgk.c | 103 +++++++++---------
.../api/opencl/khronos/icd/icd_windows_hkr.c | 2 +-
2 files changed, 54 insertions(+), 51 deletions(-)
diff --git a/projects/clr/opencl/api/opencl/khronos/icd/icd_windows_dxgk.c b/projects/clr/opencl/api/opencl/khronos/icd/icd_windows_dxgk.c
index 59b2f6b5ad..18ae8a546f 100644
--- a/projects/clr/opencl/api/opencl/khronos/icd/icd_windows_dxgk.c
+++ b/projects/clr/opencl/api/opencl/khronos/icd/icd_windows_dxgk.c
@@ -56,85 +56,88 @@ bool khrIcdOsVendorsEnumerateDXGK(void)
D3DKMT_ADAPTERINFO* pAdapterInfo;
D3DKMT_ENUMADAPTERS2 EnumAdapters;
NTSTATUS Status = STATUS_SUCCESS;
+
// Get handle to GDI Runtime
- HMODULE h = GetModuleHandle("gdi32.dll");
- if (!h)
- {
- return FALSE;
- }
+ HMODULE h = LoadLibrary("gdi32.dll");
+
char cszLibraryName[1024] = { 0 };
EnumAdapters.NumAdapters = 0;
EnumAdapters.pAdapters = NULL;
PFND3DKMT_ENUMADAPTERS2 pEnumAdapters2 = (PFND3DKMT_ENUMADAPTERS2)GetProcAddress((HMODULE)h, "D3DKMTEnumAdapters2");
if (!pEnumAdapters2)
{
+ FreeLibrary(h);
return FALSE;
}
Status = pEnumAdapters2(&EnumAdapters);
if (!NT_SUCCESS(Status) && (Status != STATUS_BUFFER_TOO_SMALL))
{
- return FALSE;
+ FreeLibrary(h);
+ return FALSE;
}
pAdapterInfo = (D3DKMT_ADAPTERINFO*)malloc(sizeof(D3DKMT_ADAPTERINFO)*(EnumAdapters.NumAdapters));
EnumAdapters.pAdapters = pAdapterInfo;
Status = pEnumAdapters2(&EnumAdapters);
if (!NT_SUCCESS(Status))
{
- if (pAdapterInfo) free(pAdapterInfo);
- return FALSE;
+ FreeLibrary(h);
+ if (pAdapterInfo) free(pAdapterInfo);
+ return FALSE;
}
for (UINT AdapterIndex = 0; AdapterIndex < EnumAdapters.NumAdapters; AdapterIndex++)
{
- D3DDDI_QUERYREGISTRY_INFO QueryArgs = {0};
- D3DDDI_QUERYREGISTRY_INFO* pQueryArgs = &QueryArgs;
- D3DDDI_QUERYREGISTRY_INFO* pQueryBuffer = NULL;
- QueryArgs.QueryType = D3DDDI_QUERYREGISTRY_ADAPTERKEY;
- QueryArgs.QueryFlags.TranslatePath = TRUE;
- QueryArgs.ValueType = REG_MULTI_SZ;
+ D3DDDI_QUERYREGISTRY_INFO QueryArgs = {0};
+ D3DDDI_QUERYREGISTRY_INFO* pQueryArgs = &QueryArgs;
+ D3DDDI_QUERYREGISTRY_INFO* pQueryBuffer = NULL;
+ QueryArgs.QueryType = D3DDDI_QUERYREGISTRY_ADAPTERKEY;
+ QueryArgs.QueryFlags.TranslatePath = TRUE;
+ QueryArgs.ValueType = REG_MULTI_SZ;
#ifdef _WIN64
- wcscpy_s(QueryArgs.ValueName, ARRAYSIZE(L"OpenCLDriverName"), L"OpenCLDriverName");
+ wcscpy_s(QueryArgs.ValueName, ARRAYSIZE(L"OpenCLDriverName"), L"OpenCLDriverName");
#else
- wcscpy_s(QueryArgs.ValueName, ARRAYSIZE(L"OpenCLDriverNameWow"), L"OpenCLDriverNameWow");
+ wcscpy_s(QueryArgs.ValueName, ARRAYSIZE(L"OpenCLDriverNameWow"), L"OpenCLDriverNameWow");
#endif
- 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))
- {
- if (pAdapterInfo) free(pAdapterInfo);
- return FALSE;
- }
- if (NT_SUCCESS(Status) && pQueryArgs->Status == D3DDDI_QUERYREGISTRY_STATUS_BUFFER_OVERFLOW)
- {
- unsigned int 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;
+ D3DKMT_QUERYADAPTERINFO QueryAdapterInfo = {0};
+ QueryAdapterInfo.hAdapter = pAdapterInfo[AdapterIndex].hAdapter;
+ QueryAdapterInfo.Type = KMTQAITYPE_QUERYREGISTRY;
+ QueryAdapterInfo.pPrivateDriverData = &QueryArgs;
+ QueryAdapterInfo.PrivateDriverDataSize = sizeof(QueryArgs);
Status = D3DKMTQueryAdapterInfo(&QueryAdapterInfo);
- pQueryArgs = pQueryBuffer;
- }
- if (NT_SUCCESS(Status) && pQueryArgs->Status == D3DDDI_QUERYREGISTRY_STATUS_SUCCESS)
- {
- wchar_t* pWchar = pQueryArgs->OutputString;
- unsigned int i = 0;
- memset(cszLibraryName, 0, sizeof(cszLibraryName));
+ if (!NT_SUCCESS(Status))
{
- while ((*pWchar != L'\0') && (i<1023))
- {
- cszLibraryName[i] = (char)*pWchar;
- i++;
- pWchar++;
- }
- if (i < 1023) khrIcdVendorAdd(cszLibraryName);
+ FreeLibrary(h);
+ if (pAdapterInfo) free(pAdapterInfo);
+ return FALSE;
}
- }
- if (pQueryBuffer) free(pQueryBuffer);
+ if (NT_SUCCESS(Status) && pQueryArgs->Status == D3DDDI_QUERYREGISTRY_STATUS_BUFFER_OVERFLOW)
+ {
+ unsigned int 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);
+ pQueryArgs = pQueryBuffer;
+ }
+ if (NT_SUCCESS(Status) && pQueryArgs->Status == D3DDDI_QUERYREGISTRY_STATUS_SUCCESS)
+ {
+ wchar_t* pWchar = pQueryArgs->OutputString;
+ unsigned int i = 0;
+ memset(cszLibraryName, 0, sizeof(cszLibraryName));
+ {
+ while ((*pWchar != L'\0') && (i<1023))
+ {
+ cszLibraryName[i] = (char)*pWchar;
+ i++;
+ pWchar++;
+ }
+ if (i < 1023) khrIcdVendorAdd(cszLibraryName);
+ }
+ }
+ if (pQueryBuffer) free(pQueryBuffer);
}
if (pAdapterInfo) free(pAdapterInfo);
+ FreeLibrary(h);
return TRUE;
}
#endif
diff --git a/projects/clr/opencl/api/opencl/khronos/icd/icd_windows_hkr.c b/projects/clr/opencl/api/opencl/khronos/icd/icd_windows_hkr.c
index 076b60f5ad..ba603d1ab5 100644
--- a/projects/clr/opencl/api/opencl/khronos/icd/icd_windows_hkr.c
+++ b/projects/clr/opencl/api/opencl/khronos/icd/icd_windows_hkr.c
@@ -128,7 +128,7 @@ static bool ReadOpenCLKey(DEVINST dnDevNode)
goto out;
}
- if (REG_SZ != dwLibraryNameType)
+ if (REG_MULTI_SZ != dwLibraryNameType)
{
KHR_ICD_TRACE("Unexpected registry entry 0x%x! continuing\n", dwLibraryNameType);
goto out;