Skip to content

Commit 6fac5ca

Browse files
committed
win32: Refactor for new driver loader
- Implement vaGetDriverPathByIndex instead of vaGetDriverNameByIndex - Provide a default driver name to avoid having to always set LIBVA_DRIVERS_PATH on Windows Signed-off-by: Sil Vilerino <sivileri@microsoft.com>
1 parent 7daa9c6 commit 6fac5ca

File tree

2 files changed

+22
-34
lines changed

2 files changed

+22
-34
lines changed

va/compat_win32.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,14 @@ typedef LONG NTSTATUS;
4646

4747
typedef unsigned int __uid_t;
4848

49+
#if _MSC_VER
4950
#define getenv _getenv
5051
char _getenv_buf[32768];
5152
inline char* _getenv(const char *varname)
5253
{
5354
return GetEnvironmentVariableA(varname, &_getenv_buf[0], sizeof(_getenv_buf)) ? &_getenv_buf[0] : NULL;
5455
}
56+
#endif
5557

5658
#ifdef _MSC_VER
5759
inline char* strtok_r(char *s, const char *delim, char **save_ptr)

va/win32/va_win32.c

Lines changed: 20 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,15 @@
3434
* which will be selected when provided with an adapter LUID which
3535
* does not have a registered VA driver
3636
*/
37-
const char VAAPI_DEFAULT_DRIVER_NAME[] = "vaon12";
37+
const char VAAPI_DEFAULT_DRIVER_PATH[] = "vaon12_drv_video.dll";
3838

3939
typedef struct _VADisplayContextWin32 {
4040
LUID adapter_luid;
41-
char registry_driver_name[MAX_PATH];
41+
char registry_driver_path[MAX_PATH];
4242
bool registry_driver_available_flag;
4343
} VADisplayContextWin32;
4444

45-
static void LoadDriverNameFromRegistry(VADisplayContextWin32* pWin32Ctx)
45+
static void LoadDriverPathFromRegistry(VADisplayContextWin32* pWin32Ctx)
4646
{
4747
HMODULE hGdi32 = LoadLibraryA("gdi32.dll");
4848
if (!hGdi32)
@@ -95,8 +95,8 @@ static void LoadDriverNameFromRegistry(VADisplayContextWin32* pWin32Ctx)
9595

9696
if (!WideCharToMultiByte(CP_ACP, 0, pRegistryInfo->OutputString,
9797
RegistryInfo.OutputValueSize / sizeof(wchar_t),
98-
pWin32Ctx->registry_driver_name,
99-
sizeof(pWin32Ctx->registry_driver_name),
98+
pWin32Ctx->registry_driver_path,
99+
sizeof(pWin32Ctx->registry_driver_path),
100100
NULL, NULL))
101101
goto cleanup;
102102

@@ -144,43 +144,29 @@ static VAStatus va_DisplayContextGetNumCandidates(
144144
int *num_candidates
145145
)
146146
{
147-
/* Always report the default driver name
147+
/* Always report the default driver path
148148
If available, also add the adapter specific registered driver */
149-
LUID* adapter = pDisplayContext->pDriverContext->native_dpy;
150149
VADisplayContextWin32* pWin32Ctx = (VADisplayContextWin32*) pDisplayContext->opaque;
151-
if (adapter && pWin32Ctx->registry_driver_available_flag)
152-
*num_candidates = 2;
153-
else
154-
*num_candidates = 1;
155-
150+
*num_candidates = pWin32Ctx->registry_driver_available_flag ? 2 : 1;
156151
return VA_STATUS_SUCCESS;
157152
}
158153

159154
static VAStatus va_DisplayContextGetDriverNameByIndex(
160155
VADisplayContextP pDisplayContext,
161-
char **driver_name,
156+
char **driver_absolute_path,
162157
int candidate_index
163158
)
164159
{
165-
LUID* adapter = pDisplayContext->pDriverContext->native_dpy;
166160
VADisplayContextWin32* pWin32Ctx = (VADisplayContextWin32*) pDisplayContext->opaque;
167-
if (adapter && pWin32Ctx->registry_driver_available_flag) {
168-
/* Always prefer the adapter registered driver name as first option */
169-
if (candidate_index == 0) {
170-
*driver_name = calloc(sizeof(pWin32Ctx->registry_driver_name), sizeof(char));
171-
memcpy(*driver_name, pWin32Ctx->registry_driver_name, sizeof(pWin32Ctx->registry_driver_name));
172-
}
173-
/* Provide the default driver name as a fallback option */
174-
else if (candidate_index == 1) {
175-
*driver_name = calloc(sizeof(VAAPI_DEFAULT_DRIVER_NAME), sizeof(char));
176-
memcpy(*driver_name, VAAPI_DEFAULT_DRIVER_NAME, sizeof(VAAPI_DEFAULT_DRIVER_NAME));
177-
}
178-
} else {
179-
/* Provide the default driver name as a fallback option */
180-
*driver_name = calloc(sizeof(VAAPI_DEFAULT_DRIVER_NAME), sizeof(char));
181-
memcpy(*driver_name, VAAPI_DEFAULT_DRIVER_NAME, sizeof(VAAPI_DEFAULT_DRIVER_NAME));
161+
/* Always prefer the adapter registered driver path as first option */
162+
if (pWin32Ctx->registry_driver_available_flag && (candidate_index == 0)) {
163+
*driver_absolute_path = calloc(sizeof(pWin32Ctx->registry_driver_path), sizeof(char));
164+
memcpy(*driver_absolute_path, pWin32Ctx->registry_driver_path, sizeof(pWin32Ctx->registry_driver_path));
165+
return VA_STATUS_SUCCESS;
182166
}
183-
167+
/* Provide the default driver path as a fallback option */
168+
*driver_absolute_path = calloc(sizeof(VAAPI_DEFAULT_DRIVER_PATH), sizeof(char));
169+
memcpy(*driver_absolute_path, VAAPI_DEFAULT_DRIVER_PATH, sizeof(VAAPI_DEFAULT_DRIVER_PATH));
184170
return VA_STATUS_SUCCESS;
185171
}
186172

@@ -211,12 +197,12 @@ VADisplay vaGetDisplayWin32(
211197
/* Copy LUID information to display context */
212198
memcpy(&pWin32Ctx->adapter_luid, adapter_luid, sizeof(pWin32Ctx->adapter_luid));
213199

214-
/* Load the preferred driver name from the driver registry if available */
215-
LoadDriverNameFromRegistry(pWin32Ctx);
200+
/* Load the preferred driver path from the driver registry if available */
201+
LoadDriverPathFromRegistry(pWin32Ctx);
216202
if (pWin32Ctx->registry_driver_available_flag) {
217-
fprintf(stderr, "VA_Win32: Found driver %s in the registry for LUID %ld %ld \n", pWin32Ctx->registry_driver_name, pWin32Ctx->adapter_luid.LowPart, pWin32Ctx->adapter_luid.HighPart);
203+
fprintf(stderr, "VA_Win32: Found driver %s in the registry for LUID %ld %ld \n", pWin32Ctx->registry_driver_path, pWin32Ctx->adapter_luid.LowPart, pWin32Ctx->adapter_luid.HighPart);
218204
} else {
219-
fprintf(stderr, "VA_Win32: Couldn't find a driver in the registry for LUID %ld %ld. Using default driver: %s \n", pWin32Ctx->adapter_luid.LowPart, pWin32Ctx->adapter_luid.HighPart, VAAPI_DEFAULT_DRIVER_NAME);
205+
fprintf(stderr, "VA_Win32: Couldn't find a driver in the registry for LUID %ld %ld. Using default driver: %s \n", pWin32Ctx->adapter_luid.LowPart, pWin32Ctx->adapter_luid.HighPart, VAAPI_DEFAULT_DRIVER_PATH);
220206
}
221207
}
222208

0 commit comments

Comments
 (0)