// Original embedded final-HDR pass5, FilmicU2_ManExposure. The actual original
// PS is independently compared in GalaxyHdrShaderProbe. Runtime post-process
// options, bloom and per-view exposure remain separate restoration work.
cbuffer OriginalHdrConstants : register(b7) { float4 OriginalHdr[11]; };
Texture2D OriginalHdrScene : register(t17);
SamplerState OriginalHdrSampler : register(s2);
struct OriginalHdrVertex { float2 uv:TEXCOORD1; float4 position:SV_POSITION; };
OriginalHdrVertex VSOriginalHdr(uint id:SV_VertexID)
{
OriginalHdrVertex output;
output.uv=float2((id<<1)&2,id&2);
output.position=float4(output.uv*float2(2,-2)+float2(-1,1),0,1);
return output;
}
float4 PSOriginalHdr(OriginalHdrVertex input):SV_TARGET
{
float4 value=OriginalHdrScene.Sample(OriginalHdrSampler,input.uv)*OriginalHdr[2].x;
value=clamp(value,0,64500*OriginalHdr[2].x);
float3 x=value.rgb*OriginalHdr[7].x;
float4 abcd=OriginalHdr[3];float4 efWhite=OriginalHdr[4];
float3 numerator=x*(abcd.x*x+abcd.z*abcd.y)+abcd.w*efWhite.x;
float3 denominator=x*(abcd.x*x+abcd.y)+abcd.w*efWhite.y;
x=(numerator/denominator-efWhite.x/efWhite.y)/efWhite.z;
x=exp2(log2(x)*OriginalHdr[9].z);
x=saturate(x*OriginalHdr[10].y+OriginalHdr[9].y);
float luminance=dot(x,float3(.3086,.6094,.082));
x=(x-luminance)*OriginalHdr[10].z+luminance;
value.rgb=x*OriginalHdr[10].x;
return clamp(value,0,64500);
}
// Original embedded final-HDR pass5, FilmicU2_ManExposure. The actual original
// PS is independently compared in GalaxyHdrShaderProbe. Runtime post-process
// options, bloom and per-view exposure remain separate restoration work.
cbuffer OriginalHdrConstants : register(b7) { float4 OriginalHdr[11]; };
Texture2D OriginalHdrScene : register(t17);
SamplerState OriginalHdrSampler : register(s2);
struct OriginalHdrVertex { float2 uv:TEXCOORD1; float4 position:SV_POSITION; };
OriginalHdrVertex VSOriginalHdr(uint id:SV_VertexID)
{
OriginalHdrVertex output;
output.uv=float2((id<<1)&2,id&2);
output.position=float4(output.uv*float2(2,-2)+float2(-1,1),0,1);
return output;
}
float4 PSOriginalHdr(OriginalHdrVertex input):SV_TARGET
{
float4 value=OriginalHdrScene.Sample(OriginalHdrSampler,input.uv)*OriginalHdr[2].x;
value=clamp(value,0,64500*OriginalHdr[2].x);
float3 x=value.rgb*OriginalHdr[7].x;
float4 abcd=OriginalHdr[3];float4 efWhite=OriginalHdr[4];
float3 numerator=x*(abcd.x*x+abcd.z*abcd.y)+abcd.w*efWhite.x;
float3 denominator=x*(abcd.x*x+abcd.y)+abcd.w*efWhite.y;
x=(numerator/denominator-efWhite.x/efWhite.y)/efWhite.z;
x=exp2(log2(x)*OriginalHdr[9].z);
x=saturate(x*OriginalHdr[10].y+OriginalHdr[9].y);
float luminance=dot(x,float3(.3086,.6094,.082));
x=(x-luminance)*OriginalHdr[10].z+luminance;
value.rgb=x*OriginalHdr[10].x;
return clamp(value,0,64500);
}