mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-20 00:35:44 +00:00
Bug 1323791 - Part 3: Add dynamic vertex shaders r=bas
MozReview-Commit-ID: H92wpa7QKMY --HG-- extra : rebase_source : 722e74ed0c1778db958f76f193231a23a727e915
This commit is contained in:
parent
30bdba0118
commit
a64e73a603
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user