| |
| Texture2D theTextureY : register(t0); |
| Texture2D theTextureU : register(t1); |
| Texture2D theTextureV : register(t2); |
| |
| SamplerState theSampler = sampler_state |
| { |
| addressU = Clamp; |
| addressV = Clamp; |
| mipfilter = NONE; |
| minfilter = LINEAR; |
| magfilter = LINEAR; |
| }; |
| |
| struct PixelShaderInput |
| { |
| float4 pos : SV_POSITION; |
| float2 tex : TEXCOORD0; |
| float4 color : COLOR0; |
| }; |
| |
| cbuffer Constants : register(b0) |
| { |
| float4 Yoffset; |
| float4 Rcoeff; |
| float4 Gcoeff; |
| float4 Bcoeff; |
| }; |
| |
| |
| float4 main(PixelShaderInput input) : SV_TARGET |
| { |
| float4 Output; |
| |
| float3 yuv; |
| yuv.x = theTextureY.Sample(theSampler, input.tex).r; |
| yuv.y = theTextureU.Sample(theSampler, input.tex).r; |
| yuv.z = theTextureV.Sample(theSampler, input.tex).r; |
| |
| yuv += Yoffset.xyz; |
| Output.r = dot(yuv, Rcoeff.xyz); |
| Output.g = dot(yuv, Gcoeff.xyz); |
| Output.b = dot(yuv, Bcoeff.xyz); |
| Output.a = 1.0f; |
| |
| return Output * input.color; |
| } |