BenQ UNIVERSAL 144Hz->220Hz OVERCLOCK for 1080p 144 Hz

Talk about overclocking displays at a higher refresh rate. This includes homebrew, 165Hz, QNIX, Catleap, Overlord Tempest, SEIKI displays, certain HDTVs, and other overclockable displays.
RoadToPro
Posts: 1
Joined: 04 Feb 2020, 15:53

Re: BenQ UNIVERSAL 144Hz->220Hz OVERCLOCK for 1080p 144 Hz

Post by RoadToPro » 04 Feb 2020, 15:58

Hi guys

im new to PC gaming and i bought a benq xl2411p for e sports

the hz is capped to 144

but my PC can easily get 200 fps

i would be happy with anything more than 144hz

but i use an AMD gpu

and i want to play Fortnite (pls don't judge)

does this guide work for me then?

thanks

is it possible to do this with a single monitor?

i only have access to my one

again thanks

Protox
Posts: 2
Joined: 01 Feb 2020, 09:13

Re: BenQ UNIVERSAL 144Hz->220Hz OVERCLOCK for 1080p 144 Hz

Post by Protox » 04 Feb 2020, 17:54

RoadToPro wrote:
04 Feb 2020, 15:58
Hi guys

im new to PC gaming and i bought a benq xl2411p for e sports

the hz is capped to 144

but my PC can easily get 200 fps

i would be happy with anything more than 144hz

but i use an AMD gpu

and i want to play Fortnite (pls don't judge)

does this guide work for me then?

thanks

is it possible to do this with a single monitor?

i only have access to my one

again thanks
if you read the whole topic you will surely be able to do it.

Protox
Posts: 2
Joined: 01 Feb 2020, 09:13

Re: BenQ UNIVERSAL 144Hz->220Hz OVERCLOCK for 1080p 144 Hz

Post by Protox » 04 Feb 2020, 17:59

I have a xl2411P and i have reached 250hz on 1440x810
but i'm wondering if this oc maiby hurt on the long time.

Sorry for the bad english.

User avatar
Chief Blur Buster
Site Admin
Posts: 6907
Joined: 05 Dec 2013, 15:44

Re: BenQ UNIVERSAL 144Hz->220Hz OVERCLOCK for 1080p 144 Hz

Post by Chief Blur Buster » 09 Feb 2020, 00:52

Protox wrote:
04 Feb 2020, 17:59
I have a xl2411P and i have reached 250hz on 1440x810
but i'm wondering if this oc maiby hurt on the long time.

Sorry for the bad english.
There is no guarantee about damage but historically, monitor overclocking tends to not have as much risk as CPU overclocking.
Head of Blur Busters - BlurBusters.com | TestUFO.com | Follow @BlurBusters on Twitter

       To support Blur Busters:
       • Official List of Best Gaming Monitors
       • List of G-SYNC Monitors
       • List of FreeSync Monitors
       • List of Ultrawide Monitors

ocean1998
Posts: 1
Joined: 14 Feb 2020, 17:07

Re: BenQ UNIVERSAL 144Hz->220Hz OVERCLOCK for 1080p 144 Hz

Post by ocean1998 » 14 Feb 2020, 17:14

The link isn't working, Could you reupload the link please!!!
hleV wrote:
29 Jan 2020, 12:30
(This was posted on the wrong thread, so re-posting this where it belongs.)

In case anyone needs it, here's a slightly updated OOR Buster (V1.4). Been using it for over a week now and it seems to work well. I couldn't be bothered to upload the whole Visual Studio project to GitHub (I'm updating and compiling the code on work PC) but here's the binary:
https://github.com/hleVqq/OorBuster/rel ... Buster.exe

Changelogs:

Code: Select all

1.1

- Alt + Home hotkey added.

Code: Select all

1.2

- Added previous/next picture mode buttons.

Code: Select all

1.3

- Added monitor handle re-check for most scenarios
- Reload button now removes the Out of Range notification if present
- Removes other "OorBuster.exe" instance(s) upon launch

Code: Select all

1.4

- Fixed current monitor settings not being read before applying fix on app launch
- When removing other instances, it will check for current file name rather than hardcoded "OorBuster.exe"
- Removed initial delay when using Alt + Home hotkey
In order to start OOR Buster upon boot faster, use Windows' Task Scheduler and create a basic task:
  • Name: OOR Buster
  • Trigger: When I log on
  • Action: Start a program
  • specify path and optional params
C++ code (covers most of the program except resources code generated by Visual Studio):

Code: Select all

#include <Windows.h>
#include <tchar.h>
#include <shellapi.h>
#include <lowlevelmonitorconfigurationapi.h>
#include <string>
#include <Tlhelp32.h>

#include "resource.h"

const BYTE VCP_OSD_LANGUAGE = 0xCC;
const BYTE VCP_PICTURE_MODE = 0xDC;
const BYTE VCP_AMA = 0xF0;

enum
{
	WM_APP_RELOAD = WM_APP + 1,
	WM_APP_EXIT,
	WM_APP_NEXT_MODE,
	WM_APP_PREV_MODE
};

DWORD CachedOsdLanguage = 2;
DWORD CachedPictureMode = 0;
DWORD CachedAma = 1;

DWORD OorDelay = 2000;
DWORD PicDelay = 500;
DWORD AmaDelay = 250;
DWORD WakeDelay = 3000;

NOTIFYICONDATA TrayIcon;
HANDLE Monitor;

int GetRefreshRate()
{
	DEVMODE dm;
	dm.dmSize = sizeof(DEVMODE);
	EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &dm);

	return dm.dmDisplayFrequency;
}

HANDLE GetPhysicalMonitor()
{
	HMONITOR monitor = MonitorFromWindow(GetActiveWindow(), MONITOR_DEFAULTTOPRIMARY);
	LPPHYSICAL_MONITOR monitors = (LPPHYSICAL_MONITOR)malloc(sizeof(PHYSICAL_MONITOR));
	HANDLE pm = nullptr;

	if (monitors && GetPhysicalMonitorsFromHMONITOR(monitor, 1, monitors))
		pm = monitors[0].hPhysicalMonitor;

	free(monitors);

	return pm;
}

void CachePhysicalMonitor()
{
	Monitor = GetPhysicalMonitor();
}

void CacheVcpValues()
{
	GetVCPFeatureAndVCPFeatureReply(Monitor, VCP_OSD_LANGUAGE, NULL, &CachedOsdLanguage, NULL);
	GetVCPFeatureAndVCPFeatureReply(Monitor, VCP_PICTURE_MODE, NULL, &CachedPictureMode, NULL);
	GetVCPFeatureAndVCPFeatureReply(Monitor, VCP_AMA, NULL, &CachedAma, NULL);
}

void ReadLaunchParams()
{
	int argCount;
	LPWSTR* args = CommandLineToArgvW(GetCommandLine(), &argCount);

	if (args && argCount > 1)
	{
		OorDelay = (DWORD)wcstod(args[1], L'\0');
		PicDelay = (DWORD)wcstod(args[2], L'\0');
		AmaDelay = (DWORD)wcstod(args[3], L'\0');
		WakeDelay = (DWORD)wcstod(args[4], L'\0');
	}
}

inline void FixOor() {SetVCPFeature(Monitor, VCP_OSD_LANGUAGE, CachedOsdLanguage);}
inline void FixPic() {SetVCPFeature(Monitor, VCP_PICTURE_MODE, CachedPictureMode);}
inline void FixAma() {SetVCPFeature(Monitor, VCP_AMA, CachedAma);}

void NextMode()
{
	CachePhysicalMonitor();
	CacheVcpValues();
	CachedPictureMode++;
	FixPic();
}

void PrevMode()
{
	CachePhysicalMonitor();
	CacheVcpValues();
	CachedPictureMode--;
	FixPic();
}

void ApplyVcpValues(bool wake = false)
{
	if (GetRefreshRate() <= 144)
		return;

	if (wake)
		Sleep(WakeDelay);

	Sleep(OorDelay); FixOor();
	Sleep(PicDelay); FixPic();
	Sleep(AmaDelay); FixAma();
}

void ShowTrayMenu(HWND wnd)
{
	POINT pos;
	GetCursorPos(&pos);

	HMENU menu = CreatePopupMenu();
	InsertMenu(menu, -1, MF_BYPOSITION, WM_APP_RELOAD, L"Reload");
	InsertMenu(menu, -1, MF_BYPOSITION, WM_APP_NEXT_MODE, L"Next Mode");
	InsertMenu(menu, -1, MF_BYPOSITION, WM_APP_PREV_MODE, L"Prev Mode");
	InsertMenu(menu, -1, MF_BYPOSITION, WM_APP_EXIT, L"Exit");
	SetForegroundWindow(wnd);
	TrackPopupMenu(menu, TPM_BOTTOMALIGN, pos.x, pos.y, 0, wnd, NULL);
	DestroyMenu(menu);
}

LRESULT CALLBACK WindowProc(_In_ HWND wnd, _In_ UINT msg, _In_ WPARAM wParam, _In_ LPARAM lParam)
{
	switch (msg)
	{
	case WM_DISPLAYCHANGE:
		CachePhysicalMonitor();
		ApplyVcpValues();

		break;
	case WM_POWERBROADCAST:
		if (wParam == PBT_POWERSETTINGCHANGE)
		{
			const DWORD DISPLAY_ON = 0x1;

			POWERBROADCAST_SETTING* pbs = (POWERBROADCAST_SETTING *)lParam;
			DWORD status = *(DWORD*)(pbs->Data);

			if (status == DISPLAY_ON)
			{
				CachePhysicalMonitor();
				ApplyVcpValues(true);
			}
		}

		break;
	case WM_APP:
		switch (lParam)
		{
		case WM_RBUTTONDOWN:
		case WM_CONTEXTMENU:
			ShowTrayMenu(wnd);

			break;
		}

		break;
	case WM_COMMAND:
		switch (LOWORD(wParam))
		{
		case WM_APP_RELOAD:
			CachePhysicalMonitor();
			FixOor();
			CacheVcpValues();

			break;
		case WM_APP_NEXT_MODE:
			NextMode();
			break;
		case WM_APP_PREV_MODE:
			PrevMode();
			break;
		case WM_APP_EXIT:
			Shell_NotifyIcon(NIM_DELETE, &TrayIcon);
			PostQuitMessage(0);

			break;
		}

		break;
	case WM_DESTROY:
		Shell_NotifyIcon(NIM_DELETE, &TrayIcon);
		PostQuitMessage(0);

		break;
	case WM_HOTKEY:
		switch (wParam)
		{
		case 1000:
			{
				OutputDebugString(L"[DEBUG] HOTKEY!\n");
				CachePhysicalMonitor();

				DWORD origOorDelay = OorDelay;
				OorDelay = 0;
				ApplyVcpValues();
				OorDelay = origOorDelay;
			}

			break;
		}
	}

	return DefWindowProc(wnd, msg, wParam, lParam);
}

HWND CreateMainWindow(HINSTANCE instance)
{
	WNDCLASS wc = { };
	wc.lpfnWndProc = WindowProc;
	wc.hInstance = instance;
	wc.lpszClassName = L"Main";
	RegisterClass(&wc);

	HWND wnd = CreateWindow(L"Main", L"OOR Buster", WS_OVERLAPPEDWINDOW & ~WS_SIZEBOX & ~WS_MAXIMIZEBOX, CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, NULL, NULL, instance, NULL);

	return wnd;
}

void CreateTrayIcon(HWND wnd, HICON icon)
{
	ZeroMemory(&TrayIcon, sizeof(NOTIFYICONDATA));
	TrayIcon.cbSize = sizeof(NOTIFYICONDATA);
	TrayIcon.uID = 1;
	TrayIcon.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
	TrayIcon.hIcon = icon;
	TrayIcon.hWnd = wnd;
	TrayIcon.uCallbackMessage = WM_APP;
	wcscpy_s(TrayIcon.szTip, L"OOR Buster");
	Shell_NotifyIcon(NIM_ADD, &TrayIcon);
}

void KillOtherInstances()
{
	DWORD id = GetCurrentProcessId();

	WCHAR path[MAX_PATH]; 
	GetModuleFileName(NULL, path, MAX_PATH);

	WCHAR file[_MAX_FNAME]; 
	_wsplitpath_s(path, NULL, 0, NULL, 0, file, ARRAYSIZE(file), NULL, 0); 
	wcscat_s(file, ARRAYSIZE(file), L".exe");

	HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, NULL);

	PROCESSENTRY32 entry; 
	entry.dwSize = sizeof(entry);

	for (BOOL res = Process32First(snapshot, &entry); res; res = Process32Next(snapshot, &entry))
	{
		if (wcscmp(entry.szExeFile, file) == 0)
		{
			HANDLE process = OpenProcess(PROCESS_TERMINATE, FALSE, entry.th32ProcessID);

			if (process != nullptr && entry.th32ProcessID != id)
			{
				TerminateProcess(process, 9);
				CloseHandle(process);
			}
		}
	}

	CloseHandle(snapshot);
}

int WINAPI WinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE, _In_ LPSTR, _In_ int)
{
	KillOtherInstances();
	CachePhysicalMonitor();
	CacheVcpValues();
	ReadLaunchParams();

	HWND wnd = CreateMainWindow(instance);
	CreateTrayIcon(wnd, LoadIcon(instance, MAKEINTRESOURCE(IDI_ICON1)));
	RegisterPowerSettingNotification(wnd, &GUID_CONSOLE_DISPLAY_STATE, DEVICE_NOTIFY_WINDOW_HANDLE);
	RegisterHotKey(wnd, 1000, MOD_ALT, VK_HOME);

	MSG msg;

	while (GetMessage(&msg, nullptr, 0, 0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}

	return (int)msg.wParam;
}

User avatar
hleV
Posts: 66
Joined: 27 May 2017, 10:31

Re: BenQ UNIVERSAL 144Hz->220Hz OVERCLOCK for 1080p 144 Hz

Post by hleV » 16 Feb 2020, 06:58

ocean1998 wrote:
14 Feb 2020, 17:14
The link isn't working, Could you reupload the link please!!!
https://we.tl/t-yF8K0egzvB

messiaH
Posts: 2
Joined: 21 Feb 2020, 14:33

Re: BenQ UNIVERSAL 144Hz->220Hz OVERCLOCK for 1080p 144 Hz

Post by messiaH » 21 Feb 2020, 14:35

Hey i am new to this topic and read about this overclocking method today but right now i always encounter a crash of softMCCS as soon as i try out a new resolution

messiaH
Posts: 2
Joined: 21 Feb 2020, 14:33

Re: BenQ UNIVERSAL 144Hz->220Hz OVERCLOCK for 1080p 144 Hz

Post by messiaH » 21 Feb 2020, 17:12

messiaH wrote:
21 Feb 2020, 14:35
Hey i am new to this topic and read about this overclocking method today but right now i always encounter a crash of softMCCS as soon as i try out a new resolution
ok now i discovered the AntiOutOfRange-master but its either not working for me or i use it the wrong way (i change to higher hz, get out of border notification and then start the program and enter 5 seconds)

sosuyike
Posts: 16
Joined: 28 Jul 2019, 22:06

Re: BenQ UNIVERSAL 144Hz->220Hz OVERCLOCK for 1080p 144 Hz

Post by sosuyike » 25 Feb 2020, 15:14

I have a xl2411, looking for a good setup between overclock and blur reduction, i was testing with 160 hz with blur reduction on, 2080 horizontal, 1350 vertial, pixel clock is at 449.2800mhz, but can't find a balanced compromise between clear motion / ghosting / inverse ghosting, has anyone had a go with OC and blur?

Wallhacking
Posts: 1
Joined: 26 Feb 2020, 19:43

Re: BenQ UNIVERSAL 144Hz->220Hz OVERCLOCK for 1080p 144 Hz

Post by Wallhacking » 26 Feb 2020, 19:46

Hey, I overclocked my XL2411P to 165hz but whenever I open CSGO it uses 144hz. I tried both CRU and Nvidia control panel. CSGO just doesn't seem to run at 165 in fullscreen mode. Works fine on windowed but not fullscreen. Has anyone found a fix?

Post Reply