Add Image Sharpening option

This commit is contained in:
Kamil Trzciński 2022-11-24 01:03:50 +01:00
parent 306017e0fb
commit f704640d04
4 changed files with 115 additions and 6 deletions

View file

@ -92,7 +92,6 @@ namespace PowerControl.Helpers.AMD
}
#endregion ADLAdapterInfo
#region ADLDisplayInfo
/// <summary> ADLDisplayID Structure</summary>
[StructLayout(LayoutKind.Sequential)]
@ -144,6 +143,25 @@ namespace PowerControl.Helpers.AMD
}
#endregion ADLDisplayInfo
#region Radeon Image Sharpening
[StructLayout(LayoutKind.Sequential)]
internal struct ADL_RIS_SETTINGS
{
internal int GlobalEnable; //Global enable value
internal int GlobalSharpeningDegree; //Global sharpening value
internal int GlobalSharpeningDegree_MinLimit; //Gloabl sharpening slider min limit value
internal int GlobalSharpeningDegree_MaxLimit; //Gloabl sharpening slider max limit value
internal int GlobalSharpeningDegree_Step; //Gloabl sharpening step value
};
[StructLayout(LayoutKind.Sequential)]
internal struct ADL_RIS_NOTFICATION_REASON
{
internal int GlobalEnableChanged; //Set when Global enable value is changed
internal int GlobalSharpeningDegreeChanged; //Set when Global sharpening Degree value is changed
};
#endregion ADLDisplayInfo
#endregion Export Struct
#region ADL Class
@ -195,22 +213,22 @@ namespace PowerControl.Helpers.AMD
#region DLLImport
[DllImport(Kernel32_FileName)]
internal static extern HMODULE GetModuleHandle (string moduleName);
internal static extern HMODULE GetModuleHandle(string moduleName);
[DllImport(Atiadlxx_FileName)]
internal static extern int ADL2_Main_Control_Create(ADL_Main_Memory_Alloc callback, int enumConnectedAdapters, out IntPtr context);
[DllImport(Atiadlxx_FileName)]
internal static extern int ADL2_Main_Control_Destroy (IntPtr context);
internal static extern int ADL2_Main_Control_Destroy(IntPtr context);
[DllImport(Atiadlxx_FileName)]
internal static extern int ADL2_Main_Control_IsFunctionValid (IntPtr context, HMODULE module, string procName);
internal static extern int ADL2_Main_Control_IsFunctionValid(IntPtr context, HMODULE module, string procName);
[DllImport(Atiadlxx_FileName)]
internal static extern int ADL2_Adapter_NumberOfAdapters_Get (IntPtr context, out int numAdapters);
internal static extern int ADL2_Adapter_NumberOfAdapters_Get(IntPtr context, out int numAdapters);
[DllImport(Atiadlxx_FileName)]
internal static extern int ADL2_Adapter_AdapterInfo_Get (IntPtr context, out ADLAdapterInfoArray info, int inputSize);
internal static extern int ADL2_Adapter_AdapterInfo_Get(IntPtr context, out ADLAdapterInfoArray info, int inputSize);
[DllImport(Atiadlxx_FileName)]
internal static extern int ADL2_Adapter_Active_Get(IntPtr context, int adapterIndex, out int status);
@ -241,6 +259,12 @@ namespace PowerControl.Helpers.AMD
[DllImport(Atiadlxx_FileName)]
internal static extern int ADL2_Display_SCE_State_Set(IntPtr context, int adapterIndex, int displayIndex, int current);
[DllImport(Atiadlxx_FileName)]
internal static extern int ADL2_RIS_Settings_Get(IntPtr context, int adapterIndex, out ADL_RIS_SETTINGS settings);
[DllImport(Atiadlxx_FileName)]
internal static extern int ADL2_RIS_Settings_Set(IntPtr context, int adapterIndex, ADL_RIS_SETTINGS settings, ADL_RIS_NOTFICATION_REASON reason);
#endregion DLLImport
#region ADL_Main_Memory_Alloc

View file

@ -0,0 +1,62 @@
using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PowerControl.Helpers.AMD
{
internal class ImageSharpening
{
internal static bool? Enabled
{
get
{
return GetSettings(out var settings) ? settings.GlobalEnable != 0 : null;
}
set
{
if (!GetSettings(out var settings))
return;
var enabled = value.GetValueOrDefault(false) ? 1 : 0;
if (settings.GlobalEnable == enabled)
return;
settings.GlobalEnable = enabled;
SetSettings(settings, new ADL_RIS_NOTFICATION_REASON() { GlobalEnableChanged = 1 });
}
}
private static bool GetSettings(out ADL_RIS_SETTINGS settings)
{
ADL_RIS_SETTINGS settings2 = default;
var result = ADLContext.WithSafe((context) =>
{
int res = ADL.ADL2_RIS_Settings_Get(
context.Context,
ADL.ADL_DEFAULT_ADAPTER,
out settings2);
return res == 0;
});
settings = settings2;
return result;
}
private static bool SetSettings(ADL_RIS_SETTINGS settings, ADL_RIS_NOTFICATION_REASON reason)
{
return ADLContext.WithSafe((context) =>
{
int res = ADL.ADL2_RIS_Settings_Set(
context.Context,
ADL.ADL_DEFAULT_ADAPTER,
settings, reason);
return res == 0;
});
}
}
}

View file

@ -191,6 +191,28 @@ namespace PowerControl
}
},
new Menu.MenuItemWithOptions()
{
Name = "Sharpening",
ApplyDelay = 500,
Options = { "Off", "On" },
CurrentValue = delegate()
{
var value = ImageSharpening.Enabled;
if (value is null)
return null;
return value.Value ? "On" : "Off";
},
ApplyValue = delegate(object selected)
{
ImageSharpening.Enabled = (string)selected == "On";
var value = ImageSharpening.Enabled;
if (value is null)
return null;
return value.Value ? "On" : "Off";
}
},
new Menu.MenuItemWithOptions()
{
Name = "Colors",
ApplyDelay = 1000,

View file

@ -7,6 +7,7 @@
- Reset `LibreHardware` on system resume to fix battery bug
- Reset FPS limit if anything related to resolution changes
- Retry Vangogh GPU detection 3 times
- Add `Radeon Image Sharpening` option (Yes, or No)
## 0.3.x