Also, could you share your method of checking output bit depth? (to test that changing registers truly made things)
Switching between 6 and 8+ bits is determined by this video: https://www.youtube.com/watch?v=suAR1PYFNYA. Once the player opens, you can pause it immediately at the 0-second mark. At the very beginning, there will be very contrasting waves on the gradient on 6 bits, while on 8+ bits, the gradient will be smooth without waves.
can you tell me what files and what lines in those files you changed?
Sorry, I don't know if you have any knowledge of programming. I'll describe it as it is. If it's difficult to understand, I can later upload everything to GitHub in a ready-to-build format.
This line https://github.com/skawamoto0/ditherig/blob/2fb5b3a3b8edc405c3427757e1213cc9fcafbc9f/ditherig/ditherig.cpp#L625C1-L626C1 is responsible for forming a new value that will be written to the register. We need to clear bits 4-7 and then set the 6th bit. Bits are counted from right to left starting at zero. This way, we will disable dithering if it was enabled by default (by clearing the 4th bit of the register) and set the color depth to 6 bits on output (bits 5-7 of the register are responsible for this; 010 - 6-bit output; 000 - 8-bit output). It should look something like this:
if(ReadPhysicalMemory(Address + RegisterAddress, &Old, RegisterSize))
{
New = Old;
New = (New & ~RegisterMask) | (RegisterData & RegisterMask);
// { new code starts here
New &= 0xFFFFFF0F;
// enable 6-bit output mode;
// comment out the line bellow to switch to 8-bit output mode
New |= (1 << 6);
// } new code ends here
if (New == Old)
bResult = TRUE;
else
{
if(WritePhysicalMemory(Address + RegisterAddress, &New, RegisterSize))
bResult = TRUE;
}
}
I built it in Visual Studio 2022 (a conversion to the new project format is needed; MFC will also be needed here).
This line needs to be removed before building: https://github.com/skawamoto0/ditherig/blob/2fb5b3a3b8edc405c3427757e1213cc9fcafbc9f/ditherig/stdafx.h#L21. Additionally, you need to copy all the DLLs from the project folders (InpOut32, WinRing0) into the folder where the compiled binary will be.
I would like to experiment with my 8 to 11-generation Intel laptops.
I only have a 12th generation CPU for a laptop, so I can't test it on earlier versions. However, according to the comment in the i915 module code, this will only work starting from the 12th generation (ADLP+).