So. I have good news, bad news, and more good news:
First bit of good news: i think i’ve sourced a more objective and satisfying solution to the gamma problem. Page 3 of Recommendation ITU-R BT.1886
(03/2011) includes what is referred to as a “CRT matching” EOTF. Unfortunately, i don’t have a solid grasp on how to implement this in slang, so i can’t really test it on my own before suggesting it. Thoughts and/or assistance anyone?
The bad news: I got lilium’s HDR analysis Reshade tools running with Retroarch, and i’m reasonably certain that the color system/phosphor conversions are currently happening entirely in Rec709/sRGB space, and thus are effectively being clipped to Rec709, at least if “HDR: Original/Vivid” is set to Original. (As you thought, Vivid instead locks/pushes everything to a non-standard “Expanded Rec709” gamut suggested by Microsoft.)
Second bit of (mostly) good news: i’ve already prototyped what seems to be a working solution, but it will require a fair bit of overhauling.
Basically, the function “HDR: Original/Vivid” is tied to in hdr10.h is already set up to be turned into a Color System replacement. We just need to add more transforms to Rec2020 in addition to k709_to_2020 and kExpanded709_to_2020, which can be calculated/generated using https://www.colour-science.org:8010/apps/rgb_colourspace_transformation_matrix or http://color.support/colorspacecalculator.html
For example, kNTSCJP22_to_2020 would be
0.691014f, 0.261287f, 0.047700f,
0.109646f, 0.876813f, 0.013541f,
0.014382f, 0.096629f, 0.888989);
Or, for an option that pushes well outside Rec709, kNTSC1953_to_2020 would be
0.924130283352921f, 0.058040878058827f, 0.017828838588251f,
0.081832452209371f, 0.839996416103710f, 0.078171131686919f,
-0.003138728266940f, 0.033216715568834f, 0.969922012698106f);
This method looks much better by eye and in the analysis tools, but i’m not 100% sure it it is currently doing everything we might want in conjunction with the “Colour Accurate” option? (I think we also want to lock the current color system to 709? But i’m still testing.)
I’ll continue testing and converting the remaining gamuts for now.
I had also already been working on assembling some additional phosphor options for 60s and 70s TVs, so this will be a good time to add those assuming the UI has enough space.
Oh, and Special K can also take .jxr HDR screenshots of Retroarch with HDR shaders included. No idea where to host those off the top of my head tho.