From f54357a1e2246b37b1f69938d2c4f0ed7ee8822d Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Sat, 21 Feb 2015 23:37:26 +0100 Subject: winecfg: Add checkbox to enable/disable vaapi GPU decoder. --- programs/winecfg/resource.h | 1 + programs/winecfg/staging.c | 30 ++++++++++++++++++++++++++++++ programs/winecfg/winecfg.rc | 1 + 3 files changed, 32 insertions(+) diff --git a/programs/winecfg/resource.h b/programs/winecfg/resource.h index 02d90fd..4b21d16 100644 --- a/programs/winecfg/resource.h +++ b/programs/winecfg/resource.h @@ -212,6 +212,7 @@ /* Staging tab */ #define IDC_ENABLE_CSMT 9001 +#define IDC_ENABLE_VAAPI 9002 /* About tab */ #define IDC_ABT_OWNER 8432 diff --git a/programs/winecfg/staging.c b/programs/winecfg/staging.c index 09c0d3f..40b6642 100644 --- a/programs/winecfg/staging.c +++ b/programs/winecfg/staging.c @@ -49,10 +49,36 @@ static void csmt_set(BOOL status) set_reg_key(config_key, keypath("DllRedirects"), "wined3d", status ? "wined3d-csmt.dll" : NULL); } +/* + * DXVA2 + */ +static BOOL vaapi_get(void) +{ +#ifdef HAVE_VAAPI + BOOL ret; + char *value = get_reg_key(config_key, keypath("DXVA2"), "backend", NULL); + ret = (value && !strcmp(value, "va")); + HeapFree(GetProcessHeap(), 0, value); + return ret; +#else + return FALSE; +#endif +} +static void vaapi_set(BOOL status) +{ +#ifdef HAVE_VAAPI + set_reg_key(config_key, keypath("DXVA2"), "backend", status ? "va" : NULL); +#endif +} static void load_staging_settings(HWND dialog) { CheckDlgButton(dialog, IDC_ENABLE_CSMT, csmt_get() ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(dialog, IDC_ENABLE_VAAPI, vaapi_get() ? BST_CHECKED : BST_UNCHECKED); + +#ifndef HAVE_VAAPI + disable(IDC_ENABLE_VAAPI); +#endif } INT_PTR CALLBACK StagingDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) @@ -82,6 +108,10 @@ INT_PTR CALLBACK StagingDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lPar csmt_set(IsDlgButtonChecked(hDlg, IDC_ENABLE_CSMT) == BST_CHECKED); SendMessageW(GetParent(hDlg), PSM_CHANGED, 0, 0); return TRUE; + case IDC_ENABLE_VAAPI: + vaapi_set(IsDlgButtonChecked(hDlg, IDC_ENABLE_VAAPI) == BST_CHECKED); + SendMessageW(GetParent(hDlg), PSM_CHANGED, 0, 0); + return TRUE; } break; } diff --git a/programs/winecfg/winecfg.rc b/programs/winecfg/winecfg.rc index 5ceed16..171672d 100644 --- a/programs/winecfg/winecfg.rc +++ b/programs/winecfg/winecfg.rc @@ -314,6 +314,7 @@ BEGIN GROUPBOX "Staging settings",IDC_STATIC,8,4,244,210 LTEXT "The following settings are experimental and may break stuff!\nMake sure to reset them again in case of a problem.",IDC_STATIC,16,16,230,16 CONTROL "Enable &CSMT for better graphic performance",IDC_ENABLE_CSMT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,40,230,8 + CONTROL "Enable &VAAPI as backend for DXVA2 GPU decoding",IDC_ENABLE_VAAPI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,55,230,8 END LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL -- 2.3.5