Changeset View
Changeset View
Standalone View
Standalone View
files/d3d9-helper.patch
| From 585f317c9677779f6c917606b8b2271cb93fd872 Mon Sep 17 00:00:00 2001 | From 4ab841665be1b0b924773b677be85e6ff82cc794 Mon Sep 17 00:00:00 2001 | ||||
| From: Nick Sarnie <commendsarnex@gmail.com> | From: Nick Sarnie <commendsarnex@gmail.com> | ||||
| Date: Wed, 19 Apr 2017 23:35:30 -0400 | Date: Mon, 29 May 2017 10:34:33 -0400 | ||||
| Subject: [PATCH] D3D9 Helper | Subject: [PATCH] D3D9 Helper | ||||
| Signed-off-by: Nick Sarnie <commendsarnex@gmail.com> | Signed-off-by: Nick Sarnie <commendsarnex@gmail.com> | ||||
| --- | --- | ||||
| dlls/ntdll/loader.c | 66 ++++++---- | dlls/ntdll/loader.c | 66 ++++++---- | ||||
| dlls/ntdll/loadorder.c | 304 ++++++++++++++++++++++++++++++++----------- | dlls/ntdll/loadorder.c | 304 ++++++++++++++++++++++++++++++++----------- | ||||
| dlls/ntdll/ntdll_misc.h | 1 + | dlls/ntdll/ntdll_misc.h | 1 + | ||||
| programs/winecfg/Makefile.in | 1 + | programs/winecfg/Makefile.in | 1 + | ||||
| programs/winecfg/main.c | 12 +- | programs/winecfg/main.c | 12 +- | ||||
| programs/winecfg/resource.h | 5 + | programs/winecfg/resource.h | 5 + | ||||
| programs/winecfg/staging.c | 93 +++++++++++++ | programs/winecfg/staging.c | 93 +++++++++++++ | ||||
| programs/winecfg/winecfg.h | 1 + | programs/winecfg/winecfg.h | 1 + | ||||
| programs/winecfg/winecfg.rc | 10 ++ | programs/winecfg/winecfg.rc | 10 ++ | ||||
| 9 files changed, 394 insertions(+), 99 deletions(-) | 9 files changed, 394 insertions(+), 99 deletions(-) | ||||
| create mode 100644 programs/winecfg/staging.c | create mode 100644 programs/winecfg/staging.c | ||||
| diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c | diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c | ||||
| index cf758505a4..6ea32252af 100644 | index 518a99f590..d0f274e99c 100644 | ||||
| --- a/dlls/ntdll/loader.c | --- a/dlls/ntdll/loader.c | ||||
| +++ b/dlls/ntdll/loader.c | +++ b/dlls/ntdll/loader.c | ||||
| @@ -92,6 +92,7 @@ struct builtin_load_info | @@ -93,6 +93,7 @@ struct builtin_load_info | ||||
| { | { | ||||
| const WCHAR *load_path; | const WCHAR *load_path; | ||||
| const WCHAR *filename; | const WCHAR *filename; | ||||
| + const WCHAR *fakemodule; | + const WCHAR *fakemodule; | ||||
| NTSTATUS status; | NTSTATUS status; | ||||
| WINE_MODREF *wm; | WINE_MODREF *wm; | ||||
| }; | }; | ||||
| @@ -123,7 +124,8 @@ static WINE_MODREF *cached_modref; | @@ -124,7 +125,8 @@ static WINE_MODREF *cached_modref; | ||||
| static WINE_MODREF *current_modref; | static WINE_MODREF *current_modref; | ||||
| static WINE_MODREF *last_failed_modref; | static WINE_MODREF *last_failed_modref; | ||||
| -static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_MODREF** pwm ); | -static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_MODREF** pwm ); | ||||
| +static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, LPCWSTR fakemodule, | +static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, LPCWSTR fakemodule, | ||||
| + DWORD flags, WINE_MODREF** pwm ); | + DWORD flags, WINE_MODREF** pwm ); | ||||
| static NTSTATUS process_attach( WINE_MODREF *wm, LPVOID lpReserved ); | static NTSTATUS process_attach( WINE_MODREF *wm, LPVOID lpReserved ); | ||||
| static FARPROC find_ordinal_export( HMODULE module, const IMAGE_EXPORT_DIRECTORY *exports, | static FARPROC find_ordinal_export( HMODULE module, const IMAGE_EXPORT_DIRECTORY *exports, | ||||
| DWORD exp_size, DWORD ordinal, LPCWSTR load_path ); | DWORD exp_size, DWORD ordinal, LPCWSTR load_path ); | ||||
| @@ -448,7 +450,7 @@ static FARPROC find_forwarded_export( HMODULE module, const char *forward, LPCWS | @@ -449,7 +451,7 @@ static FARPROC find_forwarded_export( HMODULE module, const char *forward, LPCWS | ||||
| if (!(wm = find_basename_module( mod_name ))) | if (!(wm = find_basename_module( mod_name ))) | ||||
| { | { | ||||
| TRACE( "delay loading %s for '%s'\n", debugstr_w(mod_name), forward ); | TRACE( "delay loading %s for '%s'\n", debugstr_w(mod_name), forward ); | ||||
| - if (load_dll( load_path, mod_name, 0, &wm ) == STATUS_SUCCESS && | - if (load_dll( load_path, mod_name, 0, &wm ) == STATUS_SUCCESS && | ||||
| + if (load_dll( load_path, mod_name, NULL, 0, &wm ) == STATUS_SUCCESS && | + if (load_dll( load_path, mod_name, NULL, 0, &wm ) == STATUS_SUCCESS && | ||||
| !(wm->ldr.Flags & LDR_DONT_RESOLVE_REFS)) | !(wm->ldr.Flags & LDR_DONT_RESOLVE_REFS)) | ||||
| { | { | ||||
| if (process_attach( wm, NULL ) != STATUS_SUCCESS) | if (process_attach( wm, NULL ) != STATUS_SUCCESS) | ||||
| @@ -604,7 +606,7 @@ static BOOL import_dll( HMODULE module, const IMAGE_IMPORT_DESCRIPTOR *descr, LP | @@ -605,7 +607,7 @@ static BOOL import_dll( HMODULE module, const IMAGE_IMPORT_DESCRIPTOR *descr, LP | ||||
| { | { | ||||
| ascii_to_unicode( buffer, name, len ); | ascii_to_unicode( buffer, name, len ); | ||||
| buffer[len] = 0; | buffer[len] = 0; | ||||
| - status = load_dll( load_path, buffer, 0, &wmImp ); | - status = load_dll( load_path, buffer, 0, &wmImp ); | ||||
| + status = load_dll( load_path, buffer, NULL, 0, &wmImp ); | + status = load_dll( load_path, buffer, NULL, 0, &wmImp ); | ||||
| } | } | ||||
| else /* need to allocate a larger buffer */ | else /* need to allocate a larger buffer */ | ||||
| { | { | ||||
| @@ -612,7 +614,7 @@ static BOOL import_dll( HMODULE module, const IMAGE_IMPORT_DESCRIPTOR *descr, LP | @@ -613,7 +615,7 @@ static BOOL import_dll( HMODULE module, const IMAGE_IMPORT_DESCRIPTOR *descr, LP | ||||
| if (!ptr) return FALSE; | if (!ptr) return FALSE; | ||||
| ascii_to_unicode( ptr, name, len ); | ascii_to_unicode( ptr, name, len ); | ||||
| ptr[len] = 0; | ptr[len] = 0; | ||||
| - status = load_dll( load_path, ptr, 0, &wmImp ); | - status = load_dll( load_path, ptr, 0, &wmImp ); | ||||
| + status = load_dll( load_path, ptr, NULL, 0, &wmImp ); | + status = load_dll( load_path, ptr, NULL, 0, &wmImp ); | ||||
| RtlFreeHeap( GetProcessHeap(), 0, ptr ); | RtlFreeHeap( GetProcessHeap(), 0, ptr ); | ||||
| } | } | ||||
| @@ -936,7 +938,7 @@ static NTSTATUS fixup_imports( WINE_MODREF *wm, LPCWSTR load_path ) | @@ -937,7 +939,7 @@ static NTSTATUS fixup_imports( WINE_MODREF *wm, LPCWSTR load_path ) | ||||
| * Allocate a WINE_MODREF structure and add it to the process list | * Allocate a WINE_MODREF structure and add it to the process list | ||||
| * The loader_section must be locked while calling this function. | * The loader_section must be locked while calling this function. | ||||
| */ | */ | ||||
| -static WINE_MODREF *alloc_module( HMODULE hModule, LPCWSTR filename ) | -static WINE_MODREF *alloc_module( HMODULE hModule, LPCWSTR filename ) | ||||
| +static WINE_MODREF *alloc_module( HMODULE hModule, LPCWSTR filename, LPCWSTR fakemodule ) | +static WINE_MODREF *alloc_module( HMODULE hModule, LPCWSTR filename, LPCWSTR fakemodule ) | ||||
| { | { | ||||
| WINE_MODREF *wm; | WINE_MODREF *wm; | ||||
| const WCHAR *p; | const WCHAR *p; | ||||
| @@ -958,7 +960,7 @@ static WINE_MODREF *alloc_module( HMODULE hModule, LPCWSTR filename ) | @@ -959,7 +961,7 @@ static WINE_MODREF *alloc_module( HMODULE hModule, LPCWSTR filename ) | ||||
| wm->ldr.TimeDateStamp = 0; | wm->ldr.TimeDateStamp = 0; | ||||
| wm->ldr.ActivationContext = 0; | wm->ldr.ActivationContext = 0; | ||||
| - RtlCreateUnicodeString( &wm->ldr.FullDllName, filename ); | - RtlCreateUnicodeString( &wm->ldr.FullDllName, filename ); | ||||
| + RtlCreateUnicodeString( &wm->ldr.FullDllName, fakemodule ? fakemodule : filename ); | + RtlCreateUnicodeString( &wm->ldr.FullDllName, fakemodule ? fakemodule : filename ); | ||||
| if ((p = strrchrW( wm->ldr.FullDllName.Buffer, '\\' ))) p++; | if ((p = strrchrW( wm->ldr.FullDllName.Buffer, '\\' ))) p++; | ||||
| else p = wm->ldr.FullDllName.Buffer; | else p = wm->ldr.FullDllName.Buffer; | ||||
| RtlInitUnicodeString( &wm->ldr.BaseDllName, p ); | RtlInitUnicodeString( &wm->ldr.BaseDllName, p ); | ||||
| @@ -1591,7 +1593,7 @@ static void load_builtin_callback( void *module, const char *filename ) | @@ -1620,7 +1622,7 @@ static void load_builtin_callback( void *module, const char *filename ) | ||||
| return; | return; | ||||
| } | } | ||||
| - wm = alloc_module( module, fullname ); | - wm = alloc_module( module, fullname ); | ||||
| + wm = alloc_module( module, fullname, builtin_load_info->fakemodule ); | + wm = alloc_module( module, fullname, builtin_load_info->fakemodule ); | ||||
| RtlFreeHeap( GetProcessHeap(), 0, fullname ); | RtlFreeHeap( GetProcessHeap(), 0, fullname ); | ||||
| if (!wm) | if (!wm) | ||||
| { | { | ||||
| @@ -1773,8 +1775,8 @@ static NTSTATUS perform_relocations( void *module, SIZE_T len ) | @@ -1802,8 +1804,8 @@ static NTSTATUS perform_relocations( void *module, SIZE_T len ) | ||||
| /****************************************************************************** | /****************************************************************************** | ||||
| * load_native_dll (internal) | * load_native_dll (internal) | ||||
| */ | */ | ||||
| -static NTSTATUS load_native_dll( LPCWSTR load_path, LPCWSTR name, HANDLE file, | -static NTSTATUS load_native_dll( LPCWSTR load_path, LPCWSTR name, HANDLE file, | ||||
| - DWORD flags, WINE_MODREF** pwm ) | - DWORD flags, WINE_MODREF** pwm ) | ||||
| +static NTSTATUS load_native_dll( LPCWSTR load_path, LPCWSTR name, LPCWSTR fakemodule, | +static NTSTATUS load_native_dll( LPCWSTR load_path, LPCWSTR name, LPCWSTR fakemodule, | ||||
| + HANDLE file, DWORD flags, WINE_MODREF** pwm ) | + HANDLE file, DWORD flags, WINE_MODREF** pwm ) | ||||
| { | { | ||||
| void *module; | void *module; | ||||
| HANDLE mapping; | HANDLE mapping; | ||||
| @@ -1808,7 +1810,7 @@ static NTSTATUS load_native_dll( LPCWSTR load_path, LPCWSTR name, HANDLE file, | @@ -1837,7 +1839,7 @@ static NTSTATUS load_native_dll( LPCWSTR load_path, LPCWSTR name, HANDLE file, | ||||
| /* create the MODREF */ | /* create the MODREF */ | ||||
| - if (!(wm = alloc_module( module, name ))) | - if (!(wm = alloc_module( module, name ))) | ||||
| + if (!(wm = alloc_module( module, name, fakemodule ))) | + if (!(wm = alloc_module( module, name, fakemodule ))) | ||||
| { | { | ||||
| status = STATUS_NO_MEMORY; | status = STATUS_NO_MEMORY; | ||||
| goto done; | goto done; | ||||
| @@ -1872,8 +1874,8 @@ done: | @@ -1901,8 +1903,8 @@ done: | ||||
| /*********************************************************************** | /*********************************************************************** | ||||
| * load_builtin_dll | * load_builtin_dll | ||||
| */ | */ | ||||
| -static NTSTATUS load_builtin_dll( LPCWSTR load_path, LPCWSTR path, HANDLE file, | -static NTSTATUS load_builtin_dll( LPCWSTR load_path, LPCWSTR path, HANDLE file, | ||||
| - DWORD flags, WINE_MODREF** pwm ) | - DWORD flags, WINE_MODREF** pwm ) | ||||
| +static NTSTATUS load_builtin_dll( LPCWSTR load_path, LPCWSTR path, LPCWSTR fakemodule, | +static NTSTATUS load_builtin_dll( LPCWSTR load_path, LPCWSTR path, LPCWSTR fakemodule, | ||||
| + HANDLE file, DWORD flags, WINE_MODREF** pwm ) | + HANDLE file, DWORD flags, WINE_MODREF** pwm ) | ||||
| { | { | ||||
| char error[256], dllname[MAX_PATH]; | char error[256], dllname[MAX_PATH]; | ||||
| const WCHAR *name, *p; | const WCHAR *name, *p; | ||||
| @@ -1893,6 +1895,7 @@ static NTSTATUS load_builtin_dll( LPCWSTR load_path, LPCWSTR path, HANDLE file, | @@ -1922,6 +1924,7 @@ static NTSTATUS load_builtin_dll( LPCWSTR load_path, LPCWSTR path, HANDLE file, | ||||
| */ | */ | ||||
| info.load_path = load_path; | info.load_path = load_path; | ||||
| info.filename = NULL; | info.filename = NULL; | ||||
| + info.fakemodule = fakemodule; | + info.fakemodule = fakemodule; | ||||
| info.status = STATUS_SUCCESS; | info.status = STATUS_SUCCESS; | ||||
| info.wm = NULL; | info.wm = NULL; | ||||
| @@ -2211,14 +2214,14 @@ overflow: | @@ -2240,14 +2243,14 @@ overflow: | ||||
| return STATUS_BUFFER_TOO_SMALL; | return STATUS_BUFFER_TOO_SMALL; | ||||
| } | } | ||||
| - | - | ||||
| /*********************************************************************** | /*********************************************************************** | ||||
| * load_dll (internal) | * load_dll (internal) | ||||
| * | * | ||||
| * Load a PE style module according to the load order. | * Load a PE style module according to the load order. | ||||
| * The loader_section must be locked while calling this function. | * The loader_section must be locked while calling this function. | ||||
| */ | */ | ||||
| -static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_MODREF** pwm ) | -static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_MODREF** pwm ) | ||||
| +static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, LPCWSTR fakemodule, | +static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, LPCWSTR fakemodule, | ||||
| + DWORD flags, WINE_MODREF** pwm ) | + DWORD flags, WINE_MODREF** pwm ) | ||||
| { | { | ||||
| enum loadorder loadorder; | enum loadorder loadorder; | ||||
| WCHAR buffer[64]; | WCHAR buffer[64]; | ||||
| @@ -2255,6 +2258,25 @@ static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_ | @@ -2284,6 +2287,25 @@ static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_ | ||||
| } | } | ||||
| main_exe = get_modref( NtCurrentTeb()->Peb->ImageBaseAddress ); | main_exe = get_modref( NtCurrentTeb()->Peb->ImageBaseAddress ); | ||||
| + | + | ||||
| + /* handle dll redirection */ | + /* handle dll redirection */ | ||||
| + if (!fakemodule) | + if (!fakemodule) | ||||
| + { | + { | ||||
| + BYTE buffer2[sizeof(KEY_VALUE_PARTIAL_INFORMATION) + MAX_PATH * sizeof(WCHAR)]; | + BYTE buffer2[sizeof(KEY_VALUE_PARTIAL_INFORMATION) + MAX_PATH * sizeof(WCHAR)]; | ||||
| Show All 9 Lines | |||||
| + if (filename != buffer) RtlFreeHeap( GetProcessHeap(), 0, filename ); | + if (filename != buffer) RtlFreeHeap( GetProcessHeap(), 0, filename ); | ||||
| + return nts; | + return nts; | ||||
| + } | + } | ||||
| + } | + } | ||||
| + | + | ||||
| loadorder = get_load_order( main_exe ? main_exe->ldr.BaseDllName.Buffer : NULL, filename ); | loadorder = get_load_order( main_exe ? main_exe->ldr.BaseDllName.Buffer : NULL, filename ); | ||||
| if (handle && is_fake_dll( handle )) | if (handle && is_fake_dll( handle )) | ||||
| @@ -2277,22 +2299,22 @@ static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_ | @@ -2306,22 +2328,22 @@ static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_ | ||||
| if (!handle) nts = STATUS_DLL_NOT_FOUND; | if (!handle) nts = STATUS_DLL_NOT_FOUND; | ||||
| else | else | ||||
| { | { | ||||
| - nts = load_native_dll( load_path, filename, handle, flags, pwm ); | - nts = load_native_dll( load_path, filename, handle, flags, pwm ); | ||||
| + nts = load_native_dll( load_path, filename, fakemodule, handle, flags, pwm ); | + nts = load_native_dll( load_path, filename, fakemodule, handle, flags, pwm ); | ||||
| if (nts == STATUS_INVALID_IMAGE_NOT_MZ) | if (nts == STATUS_INVALID_IMAGE_NOT_MZ) | ||||
| /* not in PE format, maybe it's a builtin */ | /* not in PE format, maybe it's a builtin */ | ||||
| - nts = load_builtin_dll( load_path, filename, handle, flags, pwm ); | - nts = load_builtin_dll( load_path, filename, handle, flags, pwm ); | ||||
| Show All 11 Lines | + nts = load_builtin_dll( load_path, filename, fakemodule, handle, flags, pwm ); | ||||
| if (!handle) break; /* nothing else we can try */ | if (!handle) break; /* nothing else we can try */ | ||||
| /* file is not a builtin library, try without using the specified file */ | /* file is not a builtin library, try without using the specified file */ | ||||
| if (nts != STATUS_SUCCESS) | if (nts != STATUS_SUCCESS) | ||||
| - nts = load_builtin_dll( load_path, filename, 0, flags, pwm ); | - nts = load_builtin_dll( load_path, filename, 0, flags, pwm ); | ||||
| + nts = load_builtin_dll( load_path, filename, fakemodule, 0, flags, pwm ); | + nts = load_builtin_dll( load_path, filename, fakemodule, 0, flags, pwm ); | ||||
| if (nts == STATUS_SUCCESS && loadorder == LO_DEFAULT && | if (nts == STATUS_SUCCESS && loadorder == LO_DEFAULT && | ||||
| (MODULE_InitDLL( *pwm, DLL_WINE_PREATTACH, NULL ) != STATUS_SUCCESS)) | (MODULE_InitDLL( *pwm, DLL_WINE_PREATTACH, NULL ) != STATUS_SUCCESS)) | ||||
| { | { | ||||
| @@ -2302,7 +2324,7 @@ static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_ | @@ -2331,7 +2353,7 @@ static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_ | ||||
| nts = STATUS_DLL_NOT_FOUND; | nts = STATUS_DLL_NOT_FOUND; | ||||
| } | } | ||||
| if (nts == STATUS_DLL_NOT_FOUND && loadorder != LO_BUILTIN) | if (nts == STATUS_DLL_NOT_FOUND && loadorder != LO_BUILTIN) | ||||
| - nts = load_native_dll( load_path, filename, handle, flags, pwm ); | - nts = load_native_dll( load_path, filename, handle, flags, pwm ); | ||||
| + nts = load_native_dll( load_path, filename, fakemodule, handle, flags, pwm ); | + nts = load_native_dll( load_path, filename, fakemodule, handle, flags, pwm ); | ||||
| break; | break; | ||||
| } | } | ||||
| @@ -2335,7 +2357,7 @@ NTSTATUS WINAPI DECLSPEC_HOTPATCH LdrLoadDll(LPCWSTR path_name, DWORD flags, | @@ -2364,7 +2386,7 @@ NTSTATUS WINAPI DECLSPEC_HOTPATCH LdrLoadDll(LPCWSTR path_name, DWORD flags, | ||||
| RtlEnterCriticalSection( &loader_section ); | RtlEnterCriticalSection( &loader_section ); | ||||
| if (!path_name) path_name = NtCurrentTeb()->Peb->ProcessParameters->DllPath.Buffer; | if (!path_name) path_name = NtCurrentTeb()->Peb->ProcessParameters->DllPath.Buffer; | ||||
| - nts = load_dll( path_name, libname->Buffer, flags, &wm ); | - nts = load_dll( path_name, libname->Buffer, flags, &wm ); | ||||
| + nts = load_dll( path_name, libname->Buffer, NULL, flags, &wm ); | + nts = load_dll( path_name, libname->Buffer, NULL, flags, &wm ); | ||||
| if (nts == STATUS_SUCCESS && !(wm->ldr.Flags & LDR_DONT_RESOLVE_REFS)) | if (nts == STATUS_SUCCESS && !(wm->ldr.Flags & LDR_DONT_RESOLVE_REFS)) | ||||
| { | { | ||||
| @@ -3306,7 +3328,7 @@ void __wine_process_init(void) | @@ -3335,7 +3357,7 @@ void __wine_process_init(void) | ||||
| /* setup the load callback and create ntdll modref */ | /* setup the load callback and create ntdll modref */ | ||||
| wine_dll_set_callback( load_builtin_callback ); | wine_dll_set_callback( load_builtin_callback ); | ||||
| - if ((status = load_builtin_dll( NULL, kernel32W, 0, 0, &wm )) != STATUS_SUCCESS) | - if ((status = load_builtin_dll( NULL, kernel32W, 0, 0, &wm )) != STATUS_SUCCESS) | ||||
| + if ((status = load_builtin_dll( NULL, kernel32W, NULL, 0, 0, &wm )) != STATUS_SUCCESS) | + if ((status = load_builtin_dll( NULL, kernel32W, NULL, 0, 0, &wm )) != STATUS_SUCCESS) | ||||
| { | { | ||||
| MESSAGE( "wine: could not load kernel32.dll, status %x\n", status ); | MESSAGE( "wine: could not load kernel32.dll, status %x\n", status ); | ||||
| exit(1); | exit(1); | ||||
| ▲ Show 20 Lines • Show All 604 Lines • ▼ Show 20 Lines | |||||
| + LTEXT "The following settings are experimental and may break stuff!\nMake sure to reset them again in case of a problem.\nGallium Nine requires MESA graphic drivers and AMD/Nvidia GPU.\n",IDC_STATIC,16,16,230,24 | + LTEXT "The following settings are experimental and may break stuff!\nMake sure to reset them again in case of a problem.\nGallium Nine requires MESA graphic drivers and AMD/Nvidia GPU.\n",IDC_STATIC,16,16,230,24 | ||||
| + CONTROL "Enable &Gallium Nine for better D3D9 graphic performance.",IDC_ENABLE_NATIVE_D3D9,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,40,230,8 | + CONTROL "Enable &Gallium Nine for better D3D9 graphic performance.",IDC_ENABLE_NATIVE_D3D9,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,40,230,8 | ||||
| +END | +END | ||||
| + | + | ||||
| LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL | LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL | ||||
| /* @makedep: winecfg.ico */ | /* @makedep: winecfg.ico */ | ||||
| -- | -- | ||||
| 2.12.2 | 2.13.0 | ||||
Copyright © 2015-2021 Solus Project. The Solus logo is Copyright © 2016-2021 Solus Project. All Rights Reserved.