Bug 1323791 - Part 3: Add dynamic vertex shaders r=bas

MozReview-Commit-ID: H92wpa7QKMY

--HG--
extra : rebase_source : 722e74ed0c1778db958f76f193231a23a727e915
This commit is contained in:
Miko Mynttinen 2017-02-09 21:41:16 +01:00
parent 30bdba0118
commit a64e73a603
2 changed files with 65 additions and 0 deletions

View File

@ -43,6 +43,11 @@ struct VS_INPUT {
float2 vPosition : POSITION;
};
struct VS_TEX_INPUT {
float2 vPosition : POSITION;
float2 vTexCoords : TEXCOORD0;
};
struct VS_OUTPUT {
float4 vPosition : SV_Position;
float2 vTexCoords : TEXCOORD0;
@ -165,6 +170,38 @@ VS_MASK_OUTPUT LayerQuadMaskVS(const VS_INPUT aVertex)
return outp;
}
VS_OUTPUT LayerDynamicVS(const VS_TEX_INPUT aVertex)
{
VS_OUTPUT outp;
float4 position = float4(aVertex.vPosition, 0, 1);
position = mul(mLayerTransform, position);
outp.vPosition = VertexPosition(position);
outp.vTexCoords = aVertex.vTexCoords;
return outp;
}
VS_MASK_OUTPUT LayerDynamicMaskVS(const VS_TEX_INPUT aVertex)
{
VS_MASK_OUTPUT outp;
float4 position = float4(aVertex.vPosition, 0, 1);
position = mul(mLayerTransform, position);
outp.vPosition = VertexPosition(position);
// calculate the position on the mask texture
outp.vMaskCoords.x = (position.x - vMaskQuad.x) / vMaskQuad.z;
outp.vMaskCoords.y = (position.y - vMaskQuad.y) / vMaskQuad.w;
outp.vMaskCoords.z = 1;
outp.vMaskCoords *= position.w;
outp.vTexCoords = aVertex.vTexCoords;
return outp;
}
float4 RGBAShaderMask(const VS_MASK_OUTPUT aVertex) : SV_Target
{
float2 maskCoords = aVertex.vMaskCoords.xy / aVertex.vMaskCoords.z;
@ -313,6 +350,30 @@ VS_BLEND_OUTPUT LayerQuadBlendMaskVS(const VS_INPUT aVertex)
return o;
}
VS_BLEND_OUTPUT LayerDynamicBlendVS(const VS_TEX_INPUT aVertex)
{
VS_OUTPUT v = LayerDynamicVS(aVertex);
VS_BLEND_OUTPUT o;
o.vPosition = v.vPosition;
o.vTexCoords = v.vTexCoords;
o.vMaskCoords = float3(0, 0, 0);
o.vBackdropCoords = BackdropPosition(v.vPosition);
return o;
}
VS_BLEND_OUTPUT LayerDynamicBlendMaskVS(const VS_TEX_INPUT aVertex)
{
VS_MASK_OUTPUT v = LayerDynamicMaskVS(aVertex);
VS_BLEND_OUTPUT o;
o.vPosition = v.vPosition;
o.vTexCoords = v.vTexCoords;
o.vMaskCoords = v.vMaskCoords;
o.vBackdropCoords = BackdropPosition(v.vPosition);
return o;
}
// The layer type and mask type are specified as constants. We use these to
// call the correct pixel shader to determine the source color for blending.
// Unfortunately this also requires some boilerplate to convert VS_BLEND_OUTPUT

View File

@ -30,12 +30,14 @@ DEST=CompositorD3D11Shaders.h
rm -f $DEST
echo "struct ShaderBytes { const void* mData; size_t mLength; };" >> $DEST;
makeShaderVS LayerQuadVS
makeShaderVS LayerDynamicVS
makeShaderPS SolidColorShader
makeShaderPS RGBShader
makeShaderPS RGBAShader
makeShaderPS ComponentAlphaShader
makeShaderPS YCbCrShader
makeShaderVS LayerQuadMaskVS
makeShaderVS LayerDynamicMaskVS
makeShaderPS SolidColorShaderMask
makeShaderPS RGBShaderMask
makeShaderPS RGBAShaderMask
@ -45,6 +47,8 @@ makeShaderPS ComponentAlphaShaderMask
# Mix-blend shaders
makeShaderVS LayerQuadBlendVS
makeShaderVS LayerQuadBlendMaskVS
makeShaderVS LayerDynamicBlendVS
makeShaderVS LayerDynamicBlendMaskVS
makeShaderPS BlendShader
rm $tempfile