| Texture2D theTextureY : register(t0); |
| Texture2D theTextureUV : register(t1); |
| SamplerState theSampler : register(s0); |
| |
| struct PixelShaderInput |
| { |
| float4 pos : SV_POSITION; |
| float2 tex : TEXCOORD0; |
| float4 color : COLOR0; |
| }; |
| |
| #define NVRS \ |
| "RootFlags ( ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT |" \ |
| " DENY_DOMAIN_SHADER_ROOT_ACCESS |" \ |
| " DENY_GEOMETRY_SHADER_ROOT_ACCESS |" \ |
| " DENY_HULL_SHADER_ROOT_ACCESS )," \ |
| "RootConstants(num32BitConstants=32, b0),"\ |
| "DescriptorTable ( SRV(t0), visibility = SHADER_VISIBILITY_PIXEL ),"\ |
| "DescriptorTable ( SRV(t1), visibility = SHADER_VISIBILITY_PIXEL ),"\ |
| "DescriptorTable ( Sampler(s0), visibility = SHADER_VISIBILITY_PIXEL )" |
| |
| [RootSignature(NVRS)] |
| float4 main(PixelShaderInput input) : SV_TARGET |
| { |
| const float3 offset = {0.0, -0.501960814, -0.501960814}; |
| const float3 Rcoeff = {1.0000, 0.0000, 1.4020}; |
| const float3 Gcoeff = {1.0000, -0.3441, -0.7141}; |
| const float3 Bcoeff = {1.0000, 1.7720, 0.0000}; |
| |
| float4 Output; |
| |
| float3 yuv; |
| yuv.x = theTextureY.Sample(theSampler, input.tex).r; |
| yuv.yz = theTextureUV.Sample(theSampler, input.tex).rg; |
| |
| yuv += offset; |
| Output.r = dot(yuv, Rcoeff); |
| Output.g = dot(yuv, Gcoeff); |
| Output.b = dot(yuv, Bcoeff); |
| Output.a = 1.0f; |
| |
| return Output * input.color; |
| } |