6 float4x4 mLayerTransform;
9 cbuffer PerOccasionalLayer {
10 float4 vRenderTargetOffset;
14 cbuffer PerLayerManager {
20 AlphaToCoverageEnable = FALSE;
21 BlendEnable[0] = TRUE;
23 DestBlend = Inv_Src_Alpha;
26 DestBlendAlpha = Inv_Src_Alpha;
28 RenderTargetWriteMask[0] = 0x0F; // All
33 AlphaToCoverageEnable = FALSE;
34 BlendEnable[0] = TRUE;
36 DestBlend = Inv_Src_Alpha;
39 DestBlendAlpha = Inv_Src_Alpha;
41 RenderTargetWriteMask[0] = 0x0F; // All
44 BlendState ComponentAlphaBlend
46 AlphaToCoverageEnable = FALSE;
47 BlendEnable[0] = TRUE;
49 DestBlend = Inv_Src1_Color;
54 RenderTargetWriteMask[0] = 0x0F; // All
57 RasterizerState LayerRast
69 SamplerState LayerTextureSamplerLinear
71 Filter = MIN_MAG_MIP_LINEAR;
76 SamplerState LayerTextureSamplerPoint
78 Filter = MIN_MAG_MIP_POINT;
84 float2 vPosition : POSITION;
88 float4 vPosition : SV_Position;
89 float2 vTexCoords : TEXCOORD0;
97 VS_OUTPUT LayerQuadVS(const VS_INPUT aVertex)
100 outp.vPosition.z = 0;
101 outp.vPosition.w = 1;
103 // We use 4 component floats to uniquely describe a rectangle, by the structure
104 // of x, y, width, height. This allows us to easily generate the 4 corners
105 // of any rectangle from the 4 corners of the 0,0-1,1 quad that we use as the
106 // stream source for our LayerQuad vertex shader. We do this by doing:
107 // Xout = x + Xin * width
108 // Yout = y + Yin * height
109 float2 position = vLayerQuad.xy;
110 float2 size = vLayerQuad.zw;
111 outp.vPosition.x = position.x + aVertex.vPosition.x * size.x;
112 outp.vPosition.y = position.y + aVertex.vPosition.y * size.y;
114 outp.vPosition = mul(mLayerTransform, outp.vPosition);
115 outp.vPosition = outp.vPosition - vRenderTargetOffset;
117 outp.vPosition = mul(mProjection, outp.vPosition);
119 position = vTextureCoords.xy;
120 size = vTextureCoords.zw;
121 outp.vTexCoords.x = position.x + aVertex.vPosition.x * size.x;
122 outp.vTexCoords.y = position.y + aVertex.vPosition.y * size.y;
126 float4 RGBAShaderLinear(const VS_OUTPUT aVertex) : SV_Target
128 return tRGB.Sample(LayerTextureSamplerLinear, aVertex.vTexCoords) * fLayerOpacity;
131 float4 RGBAShaderPoint(const VS_OUTPUT aVertex) : SV_Target
133 return tRGB.Sample(LayerTextureSamplerPoint, aVertex.vTexCoords) * fLayerOpacity;
136 float4 RGBShaderLinear(const VS_OUTPUT aVertex) : SV_Target
139 result = tRGB.Sample(LayerTextureSamplerLinear, aVertex.vTexCoords) * fLayerOpacity;
140 result.a = fLayerOpacity;
144 float4 RGBShaderPoint(const VS_OUTPUT aVertex) : SV_Target
147 result = tRGB.Sample(LayerTextureSamplerPoint, aVertex.vTexCoords) * fLayerOpacity;
148 result.a = fLayerOpacity;
152 float4 YCbCrShader(const VS_OUTPUT aVertex) : SV_Target
157 yuv.r = tCr.Sample(LayerTextureSamplerLinear, aVertex.vTexCoords).r - 0.5;
158 yuv.g = tY.Sample(LayerTextureSamplerLinear, aVertex.vTexCoords).r - 0.0625;
159 yuv.b = tCb.Sample(LayerTextureSamplerLinear, aVertex.vTexCoords).r - 0.5;
161 color.r = yuv.g * 1.164 + yuv.r * 1.596;
162 color.g = yuv.g * 1.164 - 0.813 * yuv.r - 0.391 * yuv.b;
163 color.b = yuv.g * 1.164 + yuv.b * 2.018;
166 return color * fLayerOpacity;
169 PS_OUTPUT ComponentAlphaShader(const VS_OUTPUT aVertex) : SV_Target
173 result.vSrc = tRGB.Sample(LayerTextureSamplerLinear, aVertex.vTexCoords);
174 result.vAlpha = 1.0 - tRGBWhite.Sample(LayerTextureSamplerLinear, aVertex.vTexCoords) + result.vSrc;
175 result.vSrc *= fLayerOpacity;
176 result.vAlpha *= fLayerOpacity;
180 float4 SolidColorShader(const VS_OUTPUT aVertex) : SV_Target
185 technique10 RenderRGBLayerPremul
189 SetRasterizerState( LayerRast );
190 SetBlendState( Premul, float4( 0.0f, 0.0f, 0.0f, 0.0f ), 0xFFFFFFFF );
191 SetVertexShader( CompileShader( vs_4_0_level_9_3, LayerQuadVS() ) );
192 SetGeometryShader( NULL );
193 SetPixelShader( CompileShader( ps_4_0_level_9_3, RGBShaderLinear() ) );
197 technique10 RenderRGBLayerPremulPoint
201 SetRasterizerState( LayerRast );
202 SetBlendState( Premul, float4( 0.0f, 0.0f, 0.0f, 0.0f ), 0xFFFFFFFF );
203 SetVertexShader( CompileShader( vs_4_0_level_9_3, LayerQuadVS() ) );
204 SetGeometryShader( NULL );
205 SetPixelShader( CompileShader( ps_4_0_level_9_3, RGBShaderPoint() ) );
209 technique10 RenderRGBALayerPremul
213 SetRasterizerState( LayerRast );
214 SetBlendState( Premul, float4( 0.0f, 0.0f, 0.0f, 0.0f ), 0xFFFFFFFF );
215 SetVertexShader( CompileShader( vs_4_0_level_9_3, LayerQuadVS() ) );
216 SetGeometryShader( NULL );
217 SetPixelShader( CompileShader( ps_4_0_level_9_3, RGBAShaderLinear() ) );
221 technique10 RenderRGBALayerNonPremul
225 SetRasterizerState( LayerRast );
226 SetBlendState( NonPremul, float4( 0.0f, 0.0f, 0.0f, 0.0f ), 0xFFFFFFFF );
227 SetVertexShader( CompileShader( vs_4_0_level_9_3, LayerQuadVS() ) );
228 SetGeometryShader( NULL );
229 SetPixelShader( CompileShader( ps_4_0_level_9_3, RGBAShaderLinear() ) );
233 technique10 RenderRGBALayerPremulPoint
237 SetRasterizerState( LayerRast );
238 SetBlendState( Premul, float4( 0.0f, 0.0f, 0.0f, 0.0f ), 0xFFFFFFFF );
239 SetVertexShader( CompileShader( vs_4_0_level_9_3, LayerQuadVS() ) );
240 SetGeometryShader( NULL );
241 SetPixelShader( CompileShader( ps_4_0_level_9_3, RGBAShaderPoint() ) );
245 technique10 RenderRGBALayerNonPremulPoint
249 SetRasterizerState( LayerRast );
250 SetBlendState( NonPremul, float4( 0.0f, 0.0f, 0.0f, 0.0f ), 0xFFFFFFFF );
251 SetVertexShader( CompileShader( vs_4_0_level_9_3, LayerQuadVS() ) );
252 SetGeometryShader( NULL );
253 SetPixelShader( CompileShader( ps_4_0_level_9_3, RGBAShaderPoint() ) );
257 technique10 RenderYCbCrLayer
261 SetRasterizerState( LayerRast );
262 SetBlendState( Premul, float4( 0.0f, 0.0f, 0.0f, 0.0f ), 0xFFFFFFFF );
263 SetVertexShader( CompileShader( vs_4_0_level_9_3, LayerQuadVS() ) );
264 SetGeometryShader( NULL );
265 SetPixelShader( CompileShader( ps_4_0_level_9_3, YCbCrShader() ) );
269 technique10 RenderComponentAlphaLayer
273 SetRasterizerState( LayerRast );
274 SetBlendState( ComponentAlphaBlend, float4( 0.0f, 0.0f, 0.0f, 0.0f ), 0xFFFFFFFF );
275 SetVertexShader( CompileShader( vs_4_0_level_9_3, LayerQuadVS() ) );
276 SetGeometryShader( NULL );
277 SetPixelShader( CompileShader( ps_4_0_level_9_3, ComponentAlphaShader() ) );
282 technique10 RenderSolidColorLayer
286 SetRasterizerState( LayerRast );
287 SetBlendState( Premul, float4( 0.0f, 0.0f, 0.0f, 0.0f ), 0xFFFFFFFF );
288 SetVertexShader( CompileShader( vs_4_0_level_9_3, LayerQuadVS() ) );
289 SetGeometryShader( NULL );
290 SetPixelShader( CompileShader( ps_4_0_level_9_3, SolidColorShader() ) );