forked from mamedev/mame
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
HLSL Color Transforms and 3D LUT (mamedev#4043)
* Remove broken scanline uniform from post_pass * Add 3D LUT to HLSL * Allow individual LUTs for screen and UI * WIP: Port 3D LUT to BGFX * Finish porting LUT to BGFX * Add individual phosphor color conversion for HLSL new file: hlsl/chroma.fx Shader for converting xyY3 to sRGB modified: hlsl/phosphor.fx Minor changes to emphasize idea that phosphors are color agnostic modified: hlsl/post.fx Conversion from signal RGB to xyY3 modified: src/osd/modules/render/d3d/d3dhlsl.cpp modified: src/osd/modules/render/d3d/d3dhlsl.h modified: src/osd/windows/winmain.cpp modified: src/osd/windows/winmain.h * Add phosphor examples and update presets * Port phosphor color shaders to BGFX * Fix missing newlines at EOF
- Loading branch information
Showing
61 changed files
with
1,026 additions
and
172 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
{ | ||
"name": "3D LUT", | ||
"author": "W. M. Martinez", | ||
"targets": [ | ||
{ | ||
"name": "temp", | ||
"mode": "guest" | ||
} | ||
], | ||
"passes": [ | ||
{ | ||
"effect": "misc/blit", | ||
"name": "Copy To Filtered Texture", | ||
"input": [ | ||
{ "sampler": "s_tex", "texture": "screen" } | ||
], | ||
"output": "temp" | ||
}, { | ||
"effect": "misc/lut", | ||
"name": "Apply LUT", | ||
"input": [ | ||
{ | ||
"sampler": "s_tex", | ||
"target": "temp" | ||
}, { | ||
"sampler": "s_3dlut", | ||
"option": "bgfx_lut", | ||
"bilinear": false, | ||
"clamp": true, | ||
"selection": "LUT Texture" | ||
} | ||
], | ||
"output": "output" | ||
} | ||
] | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
// license:BSD-3-Clause | ||
// copyright-holders:W. M. Martinez | ||
//============================================================ | ||
// | ||
// chroma.json: Phosphor chromaticity conversion | ||
// | ||
//============================================================ | ||
{ | ||
"blend": { | ||
"equation": "add", | ||
"srcColor": "srcalpha", | ||
"dstColor": "1-srcalpha", | ||
"srcAlpha": "srcalpha", | ||
"dstAlpha": "1-srcalpha" | ||
}, | ||
"depth": { | ||
"function": "always" | ||
}, | ||
"cull": { "mode": "none" }, | ||
"write": { | ||
"rgb": true, | ||
"alpha": true | ||
}, | ||
"vertex": "chains/hlsl/vs_chroma", | ||
"fragment": "chains/hlsl/fs_chroma", | ||
"uniforms": [ | ||
{ "name": "s_tex", "type": "int", "values": [ 0.0 ] }, | ||
{ "name": "u_y_gain", "type": "vec4", "values": [ 0.2124, 0.7011, 0.0866, 0.0 ] }, | ||
{ "name": "u_chroma_a", "type": "vec4", "values": [ 0.630, 0.340, 0.0, 0.0 ] }, | ||
{ "name": "u_chroma_b", "type": "vec4", "values": [ 0.310, 0.595, 0.0, 0.0 ] }, | ||
{ "name": "u_chroma_c", "type": "vec4", "values": [ 0.155, 0.070, 0.0, 0.0 ] } | ||
] | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
{ | ||
"blend": { | ||
"equation": "add", | ||
"srcColor": "srcalpha", | ||
"dstColor": "1-srcalpha", | ||
"srcAlpha": "srcalpha", | ||
"dstAlpha": "1-srcalpha" | ||
}, | ||
"depth": { | ||
"function": "always" | ||
}, | ||
"cull": { | ||
"mode": "none" | ||
}, | ||
"write": { | ||
"rgb": true, | ||
"alpha": true | ||
}, | ||
"vertex": "chains/misc/vs_lut", | ||
"fragment": "chains/misc/fs_lut", | ||
"uniforms": [ | ||
{ | ||
"name": "s_tex", | ||
"type": "int", | ||
"values": [ 1.0 ] | ||
}, { | ||
"name": "s_3dlut", | ||
"type": "int", | ||
"values": [ 1.0 ] | ||
} | ||
] | ||
} |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,122 @@ | ||
// license:BSD-3-Clause | ||
// copyright-holders:W. M. Martinez | ||
//----------------------------------------------------------------------------- | ||
// Phosphor Chromaticity to sRGB Transform Effect | ||
//----------------------------------------------------------------------------- | ||
|
||
//----------------------------------------------------------------------------- | ||
// Sampler Definitions | ||
//----------------------------------------------------------------------------- | ||
|
||
texture Diffuse; | ||
|
||
sampler DiffuseSampler = sampler_state | ||
{ | ||
Texture = <Diffuse>; | ||
MipFilter = LINEAR; | ||
MinFilter = LINEAR; | ||
MagFilter = LINEAR; | ||
AddressU = CLAMP; | ||
AddressV = CLAMP; | ||
AddressW = CLAMP; | ||
}; | ||
|
||
//----------------------------------------------------------------------------- | ||
// Vertex Definitions | ||
//----------------------------------------------------------------------------- | ||
|
||
struct VS_OUTPUT | ||
{ | ||
float4 Position : POSITION; | ||
float4 Color : COLOR0; | ||
float2 TexCoord : TEXCOORD0; | ||
float2 PrevCoord : TEXCOORD1; | ||
}; | ||
|
||
struct VS_INPUT | ||
{ | ||
float3 Position : POSITION; | ||
float4 Color : COLOR0; | ||
float2 TexCoord : TEXCOORD0; | ||
}; | ||
|
||
struct PS_INPUT | ||
{ | ||
float4 Color : COLOR0; | ||
float2 TexCoord : TEXCOORD0; | ||
float2 PrevCoord : TEXCOORD1; | ||
}; | ||
|
||
//----------------------------------------------------------------------------- | ||
// Chroma Vertex Shader | ||
//----------------------------------------------------------------------------- | ||
|
||
uniform float2 ScreenDims; | ||
uniform float2 TargetDims; | ||
|
||
uniform bool Passthrough; | ||
|
||
VS_OUTPUT vs_main(VS_INPUT Input) | ||
{ | ||
VS_OUTPUT Output = (VS_OUTPUT)0.0; | ||
|
||
Output.Position = float4(Input.Position.xyz, 1.0); | ||
Output.Position.xy /= ScreenDims; | ||
Output.Position.y = 1.0 - Output.Position.y; // flip y | ||
Output.Position.xy -= 0.5; // center | ||
Output.Position.xy *= 2.0; // zoom | ||
|
||
Output.TexCoord = Input.TexCoord; | ||
Output.TexCoord += 0.5 / TargetDims; // half texel offset correction (DX9) | ||
|
||
Output.PrevCoord = Output.TexCoord; | ||
|
||
Output.Color = Input.Color; | ||
|
||
return Output; | ||
} | ||
|
||
//----------------------------------------------------------------------------- | ||
// Chroma Pixel Shader | ||
//----------------------------------------------------------------------------- | ||
|
||
uniform float3 YGain = float3(0.2126, 0.7152, 0.0722); | ||
uniform float2 ChromaA = float2(0.630, 0.340); | ||
uniform float2 ChromaB = float2(0.310, 0.595); | ||
uniform float2 ChromaC = float2(0.155, 0.070); | ||
|
||
static const float3x3 XYZ_TO_sRGB = { | ||
3.2406, -1.5372, -0.4986, | ||
-0.9689, 1.8758, 0.0415, | ||
0.0557, -0.2040, 1.0570 | ||
}; | ||
|
||
float4 ps_main(PS_INPUT Input) : COLOR | ||
{ | ||
const float4 cin = tex2D(DiffuseSampler, Input.TexCoord); | ||
float4 cout = float4(0.0, 0.0, 0.0, cin.a); | ||
const float3x2 xy = { ChromaA, ChromaB, ChromaC }; | ||
|
||
for (int i = 0; i < 3; ++i) { | ||
const float Y = YGain[i] * cin[i]; | ||
const float X = xy[i].x * (Y / xy[i].y); | ||
const float Z = (1.0 - xy[i].x - xy[i].y) * (Y / xy[i].y); | ||
cout.rgb += mul(XYZ_TO_sRGB, float3(X, Y, Z)); | ||
} | ||
return cout; | ||
} | ||
|
||
//----------------------------------------------------------------------------- | ||
// Phosphor Technique | ||
//----------------------------------------------------------------------------- | ||
|
||
technique DefaultTechnique | ||
{ | ||
pass Pass0 | ||
{ | ||
Lighting = FALSE; | ||
|
||
VertexShader = compile vs_2_0 vs_main(); | ||
PixelShader = compile ps_2_0 ps_main(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.