mirror of
https://github.com/gnif/LookingGlass.git
synced 2026-07-20 22:32:01 +00:00
Convert HDR scRGB input to normalized linear Rec.2020 before CAS, then convert the filtered result back to scRGB. Use the content metadata to select an appropriate normalization peak while leaving SDR unchanged. This follows AMD's documented recommendation for applying CAS to HDR content and prevents HDR highlights from being clamped and dimmed.
54 lines
959 B
GLSL
54 lines
959 B
GLSL
#version 300 es
|
|
#extension GL_OES_EGL_image_external_essl3 : enable
|
|
|
|
precision highp float;
|
|
precision highp int;
|
|
|
|
#include "compat.h"
|
|
#include "hdr.h"
|
|
|
|
in vec2 fragCoord;
|
|
out vec4 fragColor;
|
|
|
|
uniform sampler2D sampler1;
|
|
uniform uvec4 uConsts[2];
|
|
uniform float uHDRScale;
|
|
|
|
#define A_GPU 1
|
|
#define A_GLSL 1
|
|
|
|
#include "ffx_a.h"
|
|
|
|
vec3 imageLoad(ivec2 point)
|
|
{
|
|
vec3 color = texelFetch(sampler1, point, 0).rgb;
|
|
if (uHDRScale > 0.0)
|
|
color = max(bt709to2020(color * uHDRScale), vec3(0.0));
|
|
|
|
return color;
|
|
}
|
|
|
|
AF3 CasLoad(ASU2 p)
|
|
{
|
|
return imageLoad(p).rgb;
|
|
}
|
|
|
|
void CasInput(inout AF1 r,inout AF1 g,inout AF1 b) {}
|
|
|
|
#include "ffx_cas.h"
|
|
|
|
void main()
|
|
{
|
|
vec2 res = vec2(textureSize(sampler1, 0));
|
|
uvec2 point = uvec2(fragCoord * res);
|
|
|
|
CasFilter(
|
|
fragColor.r, fragColor.g, fragColor.b,
|
|
point, uConsts[0], uConsts[1], true);
|
|
|
|
if (uHDRScale > 0.0)
|
|
fragColor.rgb = bt2020to709(fragColor.rgb) / uHDRScale;
|
|
|
|
fragColor.a = 1.0;
|
|
}
|