summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/shaders
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/shaders')
-rw-r--r--src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/shaders/Clear11.hlsl644
-rw-r--r--src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/shaders/MultiplyAlpha.hlsl131
-rw-r--r--src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/shaders/Passthrough2D11.hlsl11
-rw-r--r--src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/shaders/ResolveDepthStencil.hlsl56
-rw-r--r--src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/shaders/compiled/passthroughrgba2dms11ps.h155
5 files changed, 933 insertions, 64 deletions
diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/shaders/Clear11.hlsl b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/shaders/Clear11.hlsl
index 2b3e1ebe4c..48f5b427ec 100644
--- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/shaders/Clear11.hlsl
+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/shaders/Clear11.hlsl
@@ -1,13 +1,152 @@
-// Assume we are in SM4+, which has 8 color outputs
+//
+// Copyright (c) 2017 The ANGLE Project. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
-void VS_ClearFloat( in float3 inPosition : POSITION, in float4 inColor : COLOR,
- out float4 outPosition : SV_POSITION, out float4 outColor : COLOR)
+// Clear11.hlsl: Shaders for clearing RTVs and DSVs using draw calls and
+// specifying float depth values and either float, uint or sint clear colors.
+// Notes:
+// - UINT & SINT clears can only be compiled with FL10+
+// - VS_Clear_FL9 requires a VB to be bound with vertices to create
+// a primitive covering the entire surface (in clip co-ordinates)
+
+// Constants
+static const float2 g_Corners[6] =
+{
+ float2(-1.0f, 1.0f),
+ float2( 1.0f, -1.0f),
+ float2(-1.0f, -1.0f),
+ float2(-1.0f, 1.0f),
+ float2( 1.0f, 1.0f),
+ float2( 1.0f, -1.0f),
+};
+
+// Vertex Shaders
+void VS_Clear(in uint id : SV_VertexID,
+ out float4 outPosition : SV_POSITION)
+{
+ float2 corner = g_Corners[id];
+ outPosition = float4(corner.x, corner.y, 0.0f, 1.0f);
+}
+
+void VS_Multiview_Clear(in uint id : SV_VertexID,
+ in uint instanceID : SV_InstanceID,
+ out float4 outPosition : SV_POSITION,
+ out uint outLayerID : TEXCOORD0)
+{
+ float2 corner = g_Corners[id];
+ outPosition = float4(corner.x, corner.y, 0.0f, 1.0f);
+ outLayerID = instanceID;
+}
+
+void VS_Clear_FL9( in float4 inPosition : POSITION,
+ out float4 outPosition : SV_POSITION)
+{
+ outPosition = inPosition;
+}
+
+// Geometry shader for clearing multiview layered textures
+struct GS_INPUT
+{
+ float4 inPosition : SV_Position;
+ uint inLayerID : TEXCOORD0;
+};
+
+struct GS_OUTPUT
{
- outPosition = float4(inPosition, 1.0f);
- outColor = inColor;
+ float4 outPosition : SV_Position;
+ uint outLayerID : SV_RenderTargetArrayIndex;
+};
+
+[maxvertexcount(3)]
+void GS_Multiview_Clear(triangle GS_INPUT input[3], inout TriangleStream<GS_OUTPUT> outStream)
+{
+ GS_OUTPUT output = (GS_OUTPUT)0;
+ for (int i = 0; i < 3; i++)
+ {
+ output.outPosition = input[i].inPosition;
+ output.outLayerID = input[i].inLayerID;
+ outStream.Append(output);
+ }
+ outStream.RestartStrip();
+}
+
+// Pixel Shader Constant Buffers
+cbuffer ColorAndDepthDataFloat : register(b0)
+{
+ float4 color_Float : packoffset(c0);
+ float zValueF_Float : packoffset(c1);
+}
+
+cbuffer ColorAndDepthDataSint : register(b0)
+{
+ int4 color_Sint : packoffset(c0);
+ float zValueF_Sint : packoffset(c1);
+}
+
+cbuffer ColorAndDepthDataUint : register(b0)
+{
+ uint4 color_Uint : packoffset(c0);
+ float zValueF_Uint : packoffset(c1);
}
-struct PS_OutputFloat
+cbuffer DepthOnlyData : register(b0)
+{
+ float zValue_Depth : packoffset(c1);
+}
+
+// Pixel Shader Output Structs
+struct PS_OutputFloat_FL9
+{
+ float4 color0 : SV_TARGET0;
+ float4 color1 : SV_TARGET1;
+ float4 color2 : SV_TARGET2;
+ float4 color3 : SV_TARGET3;
+ float depth : SV_DEPTH;
+};
+
+struct PS_OutputFloat1
+{
+ float4 color0 : SV_TARGET0;
+ float depth : SV_DEPTH;
+};
+
+struct PS_OutputFloat2
+{
+ float4 color0 : SV_TARGET0;
+ float4 color1 : SV_TARGET1;
+ float depth : SV_DEPTH;
+};
+
+struct PS_OutputFloat3
+{
+ float4 color0 : SV_TARGET0;
+ float4 color1 : SV_TARGET1;
+ float4 color2 : SV_TARGET2;
+ float depth : SV_DEPTH;
+};
+
+struct PS_OutputFloat4
+{
+ float4 color0 : SV_TARGET0;
+ float4 color1 : SV_TARGET1;
+ float4 color2 : SV_TARGET2;
+ float4 color3 : SV_TARGET3;
+ float depth : SV_DEPTH;
+};
+
+struct PS_OutputFloat5
+{
+ float4 color0 : SV_TARGET0;
+ float4 color1 : SV_TARGET1;
+ float4 color2 : SV_TARGET2;
+ float4 color3 : SV_TARGET3;
+ float4 color4 : SV_TARGET4;
+ float depth : SV_DEPTH;
+};
+
+struct PS_OutputFloat6
{
float4 color0 : SV_TARGET0;
float4 color1 : SV_TARGET1;
@@ -15,50 +154,98 @@ struct PS_OutputFloat
float4 color3 : SV_TARGET3;
float4 color4 : SV_TARGET4;
float4 color5 : SV_TARGET5;
- float4 color6 : SV_TARGET6;
- float4 color7 : SV_TARGET7;
+ float depth : SV_DEPTH;
};
-PS_OutputFloat PS_ClearFloat(in float4 inPosition : SV_POSITION, in float4 inColor : COLOR)
+struct PS_OutputFloat7
{
- PS_OutputFloat outColor;
- outColor.color0 = inColor;
- outColor.color1 = inColor;
- outColor.color2 = inColor;
- outColor.color3 = inColor;
- outColor.color4 = inColor;
- outColor.color5 = inColor;
- outColor.color6 = inColor;
- outColor.color7 = inColor;
- return outColor;
-}
+ float4 color0 : SV_TARGET0;
+ float4 color1 : SV_TARGET1;
+ float4 color2 : SV_TARGET2;
+ float4 color3 : SV_TARGET3;
+ float4 color4 : SV_TARGET4;
+ float4 color5 : SV_TARGET5;
+ float4 color6 : SV_TARGET6;
+ float depth : SV_DEPTH;
+};
-struct PS_OutputFloat_FL9
+struct PS_OutputFloat8
{
float4 color0 : SV_TARGET0;
float4 color1 : SV_TARGET1;
float4 color2 : SV_TARGET2;
float4 color3 : SV_TARGET3;
+ float4 color4 : SV_TARGET4;
+ float4 color5 : SV_TARGET5;
+ float4 color6 : SV_TARGET6;
+ float4 color7 : SV_TARGET7;
+ float depth : SV_DEPTH;
};
-PS_OutputFloat_FL9 PS_ClearFloat_FL9(in float4 inPosition : SV_POSITION, in float4 inColor : COLOR)
+struct PS_OutputUint1
{
- PS_OutputFloat_FL9 outColor;
- outColor.color0 = inColor;
- outColor.color1 = inColor;
- outColor.color2 = inColor;
- outColor.color3 = inColor;
- return outColor;
-}
+ uint4 color0 : SV_TARGET0;
+ float depth : SV_DEPTH;
+};
-void VS_ClearUint( in float3 inPosition : POSITION, in uint4 inColor : COLOR,
- out float4 outPosition : SV_POSITION, out uint4 outColor : COLOR)
+struct PS_OutputUint2
{
- outPosition = float4(inPosition, 1.0f);
- outColor = inColor;
-}
+ uint4 color0 : SV_TARGET0;
+ uint4 color1 : SV_TARGET1;
+ float depth : SV_DEPTH;
+};
+
+struct PS_OutputUint3
+{
+ uint4 color0 : SV_TARGET0;
+ uint4 color1 : SV_TARGET1;
+ uint4 color2 : SV_TARGET2;
+ float depth : SV_DEPTH;
+};
+
+struct PS_OutputUint4
+{
+ uint4 color0 : SV_TARGET0;
+ uint4 color1 : SV_TARGET1;
+ uint4 color2 : SV_TARGET2;
+ uint4 color3 : SV_TARGET3;
+ float depth : SV_DEPTH;
+};
+
+struct PS_OutputUint5
+{
+ uint4 color0 : SV_TARGET0;
+ uint4 color1 : SV_TARGET1;
+ uint4 color2 : SV_TARGET2;
+ uint4 color3 : SV_TARGET3;
+ uint4 color4 : SV_TARGET4;
+ float depth : SV_DEPTH;
+};
+
+struct PS_OutputUint6
+{
+ uint4 color0 : SV_TARGET0;
+ uint4 color1 : SV_TARGET1;
+ uint4 color2 : SV_TARGET2;
+ uint4 color3 : SV_TARGET3;
+ uint4 color4 : SV_TARGET4;
+ uint4 color5 : SV_TARGET5;
+ float depth : SV_DEPTH;
+};
+
+struct PS_OutputUint7
+{
+ uint4 color0 : SV_TARGET0;
+ uint4 color1 : SV_TARGET1;
+ uint4 color2 : SV_TARGET2;
+ uint4 color3 : SV_TARGET3;
+ uint4 color4 : SV_TARGET4;
+ uint4 color5 : SV_TARGET5;
+ uint4 color6 : SV_TARGET6;
+ float depth : SV_DEPTH;
+};
-struct PS_OutputUint
+struct PS_OutputUint8
{
uint4 color0 : SV_TARGET0;
uint4 color1 : SV_TARGET1;
@@ -68,31 +255,73 @@ struct PS_OutputUint
uint4 color5 : SV_TARGET5;
uint4 color6 : SV_TARGET6;
uint4 color7 : SV_TARGET7;
+ float depth : SV_DEPTH;
};
-PS_OutputUint PS_ClearUint(in float4 inPosition : SV_POSITION, in uint4 inColor : COLOR)
+struct PS_OutputSint1
{
- PS_OutputUint outColor;
- outColor.color0 = inColor;
- outColor.color1 = inColor;
- outColor.color2 = inColor;
- outColor.color3 = inColor;
- outColor.color4 = inColor;
- outColor.color5 = inColor;
- outColor.color6 = inColor;
- outColor.color7 = inColor;
- return outColor;
-}
+ int4 color0 : SV_TARGET0;
+ float depth : SV_DEPTH;
+};
+struct PS_OutputSint2
+{
+ int4 color0 : SV_TARGET0;
+ int4 color1 : SV_TARGET1;
+ float depth : SV_DEPTH;
+};
-void VS_ClearSint( in float3 inPosition : POSITION, in int4 inColor : COLOR,
- out float4 outPosition : SV_POSITION, out int4 outColor : COLOR)
+struct PS_OutputSint3
{
- outPosition = float4(inPosition, 1.0f);
- outColor = inColor;
-}
+ int4 color0 : SV_TARGET0;
+ int4 color1 : SV_TARGET1;
+ int4 color2 : SV_TARGET2;
+ float depth : SV_DEPTH;
+};
+
+struct PS_OutputSint4
+{
+ int4 color0 : SV_TARGET0;
+ int4 color1 : SV_TARGET1;
+ int4 color2 : SV_TARGET2;
+ int4 color3 : SV_TARGET3;
+ float depth : SV_DEPTH;
+};
+
+struct PS_OutputSint5
+{
+ int4 color0 : SV_TARGET0;
+ int4 color1 : SV_TARGET1;
+ int4 color2 : SV_TARGET2;
+ int4 color3 : SV_TARGET3;
+ int4 color4 : SV_TARGET4;
+ float depth : SV_DEPTH;
+};
+
+struct PS_OutputSint6
+{
+ int4 color0 : SV_TARGET0;
+ int4 color1 : SV_TARGET1;
+ int4 color2 : SV_TARGET2;
+ int4 color3 : SV_TARGET3;
+ int4 color4 : SV_TARGET4;
+ int4 color5 : SV_TARGET5;
+ float depth : SV_DEPTH;
+};
+
+struct PS_OutputSint7
+{
+ int4 color0 : SV_TARGET0;
+ int4 color1 : SV_TARGET1;
+ int4 color2 : SV_TARGET2;
+ int4 color3 : SV_TARGET3;
+ int4 color4 : SV_TARGET4;
+ int4 color5 : SV_TARGET5;
+ int4 color6 : SV_TARGET6;
+ float depth : SV_DEPTH;
+};
-struct PS_OutputSint
+struct PS_OutputSint8
{
int4 color0 : SV_TARGET0;
int4 color1 : SV_TARGET1;
@@ -102,18 +331,305 @@ struct PS_OutputSint
int4 color5 : SV_TARGET5;
int4 color6 : SV_TARGET6;
int4 color7 : SV_TARGET7;
+ float depth : SV_DEPTH;
+};
+
+struct PS_OutputDepth
+{
+ float depth : SV_DEPTH;
};
-PS_OutputSint PS_ClearSint(in float4 inPosition : SV_POSITION, in int4 inColor : COLOR)
+// Pixel Shaders
+PS_OutputFloat_FL9 PS_ClearFloat_FL9(in float4 inPosition : SV_POSITION)
+{
+ PS_OutputFloat_FL9 outData;
+ outData.color0 = color_Float;
+ outData.color1 = color_Float;
+ outData.color2 = color_Float;
+ outData.color3 = color_Float;
+ outData.depth = zValueF_Float;
+ return outData;
+}
+
+PS_OutputFloat1 PS_ClearFloat1(in float4 inPosition : SV_POSITION)
+{
+ PS_OutputFloat1 outData;
+ outData.color0 = color_Float;
+ outData.depth = zValueF_Float;
+ return outData;
+}
+
+PS_OutputFloat2 PS_ClearFloat2(in float4 inPosition : SV_POSITION)
+{
+ PS_OutputFloat2 outData;
+ outData.color0 = color_Float;
+ outData.color1 = color_Float;
+ outData.depth = zValueF_Float;
+ return outData;
+}
+
+PS_OutputFloat3 PS_ClearFloat3(in float4 inPosition : SV_POSITION)
+{
+ PS_OutputFloat3 outData;
+ outData.color0 = color_Float;
+ outData.color1 = color_Float;
+ outData.color2 = color_Float;
+ outData.depth = zValueF_Float;
+ return outData;
+}
+
+PS_OutputFloat4 PS_ClearFloat4(in float4 inPosition : SV_POSITION)
+{
+ PS_OutputFloat4 outData;
+ outData.color0 = color_Float;
+ outData.color1 = color_Float;
+ outData.color2 = color_Float;
+ outData.color3 = color_Float;
+ outData.depth = zValueF_Float;
+ return outData;
+}
+
+PS_OutputFloat5 PS_ClearFloat5(in float4 inPosition : SV_POSITION)
+{
+ PS_OutputFloat5 outData;
+ outData.color0 = color_Float;
+ outData.color1 = color_Float;
+ outData.color2 = color_Float;
+ outData.color3 = color_Float;
+ outData.color4 = color_Float;
+ outData.depth = zValueF_Float;
+ return outData;
+}
+
+PS_OutputFloat6 PS_ClearFloat6(in float4 inPosition : SV_POSITION)
+{
+ PS_OutputFloat6 outData;
+ outData.color0 = color_Float;
+ outData.color1 = color_Float;
+ outData.color2 = color_Float;
+ outData.color3 = color_Float;
+ outData.color4 = color_Float;
+ outData.color5 = color_Float;
+ outData.depth = zValueF_Float;
+ return outData;
+}
+
+PS_OutputFloat7 PS_ClearFloat7(in float4 inPosition : SV_POSITION)
+{
+ PS_OutputFloat7 outData;
+ outData.color0 = color_Float;
+ outData.color1 = color_Float;
+ outData.color2 = color_Float;
+ outData.color3 = color_Float;
+ outData.color4 = color_Float;
+ outData.color5 = color_Float;
+ outData.color6 = color_Float;
+ outData.depth = zValueF_Float;
+ return outData;
+}
+
+PS_OutputFloat8 PS_ClearFloat8(in float4 inPosition : SV_POSITION)
+{
+ PS_OutputFloat8 outData;
+ outData.color0 = color_Float;
+ outData.color1 = color_Float;
+ outData.color2 = color_Float;
+ outData.color3 = color_Float;
+ outData.color4 = color_Float;
+ outData.color5 = color_Float;
+ outData.color6 = color_Float;
+ outData.color7 = color_Float;
+ outData.depth = zValueF_Float;
+ return outData;
+}
+
+PS_OutputUint1 PS_ClearUint1(in float4 inPosition : SV_POSITION)
+{
+ PS_OutputUint1 outData;
+ outData.color0 = color_Uint;
+ outData.depth = zValueF_Uint;
+ return outData;
+}
+
+PS_OutputUint2 PS_ClearUint2(in float4 inPosition : SV_POSITION)
+{
+ PS_OutputUint2 outData;
+ outData.color0 = color_Uint;
+ outData.color1 = color_Uint;
+ outData.depth = zValueF_Uint;
+ return outData;
+}
+
+PS_OutputUint3 PS_ClearUint3(in float4 inPosition : SV_POSITION)
+{
+ PS_OutputUint3 outData;
+ outData.color0 = color_Uint;
+ outData.color1 = color_Uint;
+ outData.color2 = color_Uint;
+ outData.depth = zValueF_Uint;
+ return outData;
+}
+
+PS_OutputUint4 PS_ClearUint4(in float4 inPosition : SV_POSITION)
+{
+ PS_OutputUint4 outData;
+ outData.color0 = color_Uint;
+ outData.color1 = color_Uint;
+ outData.color2 = color_Uint;
+ outData.color3 = color_Uint;
+ outData.depth = zValueF_Uint;
+ return outData;
+}
+
+PS_OutputUint5 PS_ClearUint5(in float4 inPosition : SV_POSITION)
+{
+ PS_OutputUint5 outData;
+ outData.color0 = color_Uint;
+ outData.color1 = color_Uint;
+ outData.color2 = color_Uint;
+ outData.color3 = color_Uint;
+ outData.color4 = color_Uint;
+ outData.depth = zValueF_Uint;
+ return outData;
+}
+
+PS_OutputUint6 PS_ClearUint6(in float4 inPosition : SV_POSITION)
+{
+ PS_OutputUint6 outData;
+ outData.color0 = color_Uint;
+ outData.color1 = color_Uint;
+ outData.color2 = color_Uint;
+ outData.color3 = color_Uint;
+ outData.color4 = color_Uint;
+ outData.color5 = color_Uint;
+ outData.depth = zValueF_Uint;
+ return outData;
+}
+
+PS_OutputUint7 PS_ClearUint7(in float4 inPosition : SV_POSITION)
+{
+ PS_OutputUint7 outData;
+ outData.color0 = color_Uint;
+ outData.color1 = color_Uint;
+ outData.color2 = color_Uint;
+ outData.color3 = color_Uint;
+ outData.color4 = color_Uint;
+ outData.color5 = color_Uint;
+ outData.color6 = color_Uint;
+ outData.depth = zValueF_Uint;
+ return outData;
+}
+
+PS_OutputUint8 PS_ClearUint8(in float4 inPosition : SV_POSITION)
+{
+ PS_OutputUint8 outData;
+ outData.color0 = color_Uint;
+ outData.color1 = color_Uint;
+ outData.color2 = color_Uint;
+ outData.color3 = color_Uint;
+ outData.color4 = color_Uint;
+ outData.color5 = color_Uint;
+ outData.color6 = color_Uint;
+ outData.color7 = color_Uint;
+ outData.depth = zValueF_Uint;
+ return outData;
+}
+
+PS_OutputSint1 PS_ClearSint1(in float4 inPosition : SV_POSITION)
+{
+ PS_OutputSint1 outData;
+ outData.color0 = color_Sint;
+ outData.depth = zValueF_Sint;
+ return outData;
+}
+
+PS_OutputSint2 PS_ClearSint2(in float4 inPosition : SV_POSITION)
+{
+ PS_OutputSint2 outData;
+ outData.color0 = color_Sint;
+ outData.color1 = color_Sint;
+ outData.depth = zValueF_Sint;
+ return outData;
+}
+
+PS_OutputSint3 PS_ClearSint3(in float4 inPosition : SV_POSITION)
+{
+ PS_OutputSint3 outData;
+ outData.color0 = color_Sint;
+ outData.color1 = color_Sint;
+ outData.color2 = color_Sint;
+ outData.depth = zValueF_Sint;
+ return outData;
+}
+
+PS_OutputSint4 PS_ClearSint4(in float4 inPosition : SV_POSITION)
+{
+ PS_OutputSint4 outData;
+ outData.color0 = color_Sint;
+ outData.color1 = color_Sint;
+ outData.color2 = color_Sint;
+ outData.color3 = color_Sint;
+ outData.depth = zValueF_Sint;
+ return outData;
+}
+
+PS_OutputSint5 PS_ClearSint5(in float4 inPosition : SV_POSITION)
+{
+ PS_OutputSint5 outData;
+ outData.color0 = color_Sint;
+ outData.color1 = color_Sint;
+ outData.color2 = color_Sint;
+ outData.color3 = color_Sint;
+ outData.color4 = color_Sint;
+ outData.depth = zValueF_Sint;
+ return outData;
+}
+
+PS_OutputSint6 PS_ClearSint6(in float4 inPosition : SV_POSITION)
+{
+ PS_OutputSint6 outData;
+ outData.color0 = color_Sint;
+ outData.color1 = color_Sint;
+ outData.color2 = color_Sint;
+ outData.color3 = color_Sint;
+ outData.color4 = color_Sint;
+ outData.color5 = color_Sint;
+ outData.depth = zValueF_Sint;
+ return outData;
+}
+
+PS_OutputSint7 PS_ClearSint7(in float4 inPosition : SV_POSITION)
+{
+ PS_OutputSint7 outData;
+ outData.color0 = color_Sint;
+ outData.color1 = color_Sint;
+ outData.color2 = color_Sint;
+ outData.color3 = color_Sint;
+ outData.color4 = color_Sint;
+ outData.color5 = color_Sint;
+ outData.color6 = color_Sint;
+ outData.depth = zValueF_Sint;
+ return outData;
+}
+
+PS_OutputSint8 PS_ClearSint8(in float4 inPosition : SV_POSITION)
+{
+ PS_OutputSint8 outData;
+ outData.color0 = color_Sint;
+ outData.color1 = color_Sint;
+ outData.color2 = color_Sint;
+ outData.color3 = color_Sint;
+ outData.color4 = color_Sint;
+ outData.color5 = color_Sint;
+ outData.color6 = color_Sint;
+ outData.color7 = color_Sint;
+ outData.depth = zValueF_Sint;
+ return outData;
+}
+
+PS_OutputDepth PS_ClearDepth(in float4 inPosition : SV_POSITION)
{
- PS_OutputSint outColor;
- outColor.color0 = inColor;
- outColor.color1 = inColor;
- outColor.color2 = inColor;
- outColor.color3 = inColor;
- outColor.color4 = inColor;
- outColor.color5 = inColor;
- outColor.color6 = inColor;
- outColor.color7 = inColor;
- return outColor;
+ PS_OutputDepth outData;
+ outData.depth = zValue_Depth;
+ return outData;
}
diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/shaders/MultiplyAlpha.hlsl b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/shaders/MultiplyAlpha.hlsl
new file mode 100644
index 0000000000..0d10b8eafa
--- /dev/null
+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/shaders/MultiplyAlpha.hlsl
@@ -0,0 +1,131 @@
+Texture2D<float4> TextureF : register(t0);
+Texture2D<uint4> TextureUI : register(t0);
+
+SamplerState Sampler : register(s0);
+
+// Notation:
+// PM: premultiply, UM: unmulitply, PT: passthrough
+// F: float, U: uint
+
+// Float to float LUMA
+float4 PS_FtoF_PM_LUMA(in float4 inPosition : SV_POSITION, in float2 inTexCoord : TEXCOORD0) : SV_TARGET0
+{
+ float4 color = TextureF.Sample(Sampler, inTexCoord).rgba;
+ color.rgb = color.r * color.a;
+ color.a = 1.0f;
+ return color;
+}
+float4 PS_FtoF_UM_LUMA(in float4 inPosition : SV_POSITION, in float2 inTexCoord : TEXCOORD0) : SV_TARGET0
+{
+ float4 color = TextureF.Sample(Sampler, inTexCoord).rgba;
+ if (color.a > 0.0f)
+ {
+ color.rgb = color.r / color.a;
+ }
+ color.a = 1.0f;
+ return color;
+}
+
+// Float to float LUMAALPHA
+float4 PS_FtoF_PM_LUMAALPHA(in float4 inPosition : SV_POSITION, in float2 inTexCoord : TEXCOORD0) : SV_TARGET0
+{
+ float4 color = TextureF.Sample(Sampler, inTexCoord).rgba;
+ color.rgb = color.r * color.a;
+ return color;
+}
+
+float4 PS_FtoF_UM_LUMAALPHA(in float4 inPosition : SV_POSITION, in float2 inTexCoord : TEXCOORD0) : SV_TARGET0
+{
+ float4 color = TextureF.Sample(Sampler, inTexCoord).rgba;
+ if (color.a > 0.0f)
+ {
+ color.rgb = color.r / color.a;
+ }
+ return color;
+}
+
+// Float to float RGBA
+float4 PS_FtoF_PM_RGBA(in float4 inPosition : SV_POSITION, in float2 inTexCoord : TEXCOORD0) : SV_TARGET0
+{
+ float4 color = TextureF.Sample(Sampler, inTexCoord).rgba;
+ color.rgb *= color.a;
+ return color;
+}
+
+float4 PS_FtoF_UM_RGBA(in float4 inPosition : SV_POSITION, in float2 inTexCoord : TEXCOORD0) : SV_TARGET0
+{
+ float4 color = TextureF.Sample(Sampler, inTexCoord).rgba;
+ if (color.a > 0.0f)
+ {
+ color.rgb /= color.a;
+ }
+ return color;
+}
+
+// Float to float RGB
+float4 PS_FtoF_PM_RGB(in float4 inPosition : SV_POSITION, in float2 inTexCoord : TEXCOORD0) : SV_TARGET0
+{
+ float4 color = TextureF.Sample(Sampler, inTexCoord).rgba;
+ color.rgb *= color.a;
+ color.a = 1.0f;
+ return color;
+}
+
+float4 PS_FtoF_UM_RGB(in float4 inPosition : SV_POSITION, in float2 inTexCoord : TEXCOORD0) : SV_TARGET0
+{
+ float4 color = TextureF.Sample(Sampler, inTexCoord).rgba;
+ if (color.a > 0.0f)
+ {
+ color.rgb /= color.a;
+ }
+ color.a = 1.0f;
+ return color;
+}
+
+// Float to uint RGBA
+uint4 PS_FtoU_PT_RGBA(in float4 inPosition : SV_POSITION, in float2 inTexCoord : TEXCOORD0) : SV_TARGET0
+{
+ float4 color = TextureF.Sample(Sampler, inTexCoord).rgba;
+ return uint4(color * 255);
+}
+
+uint4 PS_FtoU_PM_RGBA(in float4 inPosition : SV_POSITION, in float2 inTexCoord : TEXCOORD0) : SV_TARGET0
+{
+ float4 color = TextureF.Sample(Sampler, inTexCoord).rgba;
+ color.rgb *= color.a;
+ return uint4(color * 255);
+}
+
+uint4 PS_FtoU_UM_RGBA(in float4 inPosition : SV_POSITION, in float2 inTexCoord : TEXCOORD0) : SV_TARGET0
+{
+ float4 color = TextureF.Sample(Sampler, inTexCoord).rgba;
+ if (color.a > 0.0f)
+ {
+ color.rgb /= color.a;
+ }
+ return uint4(color * 255);
+}
+
+// Float to uint RGB
+uint4 PS_FtoU_PT_RGB(in float4 inPosition : SV_POSITION, in float2 inTexCoord : TEXCOORD0) : SV_TARGET0
+{
+ float4 color = TextureF.Sample(Sampler, inTexCoord).rgba;
+ return uint4(color.rgb * 255, 1);
+}
+
+uint4 PS_FtoU_PM_RGB(in float4 inPosition : SV_POSITION, in float2 inTexCoord : TEXCOORD0) : SV_TARGET0
+{
+ float4 color = TextureF.Sample(Sampler, inTexCoord).rgba;
+ color.rgb *= color.a;
+ return uint4(color.rgb * 255, 1);
+}
+
+uint4 PS_FtoU_UM_RGB(in float4 inPosition : SV_POSITION, in float2 inTexCoord : TEXCOORD0) : SV_TARGET0
+{
+ float4 color = TextureF.Sample(Sampler, inTexCoord).rgba;
+ if (color.a > 0.0f)
+ {
+ color.rgb /= color.a;
+ }
+ return uint4(color.rgb * 255, 1);
+}
diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/shaders/Passthrough2D11.hlsl b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/shaders/Passthrough2D11.hlsl
index 8671c39fb7..0b1a5ad169 100644
--- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/shaders/Passthrough2D11.hlsl
+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/shaders/Passthrough2D11.hlsl
@@ -1,4 +1,5 @@
Texture2D<float4> TextureF : register(t0);
+Texture2DMS<float4> TextureF_MS: register(t0);
Texture2D<uint4> TextureUI : register(t0);
Texture2D<int4> TextureI : register(t0);
@@ -21,6 +22,16 @@ float4 PS_PassthroughRGBA2D(in float4 inPosition : SV_POSITION, in float2 inTexC
return TextureF.Sample(Sampler, inTexCoord).rgba;
}
+float4 PS_PassthroughA2D(in float4 inPosition : SV_POSITION, in float2 inTexCoord : TEXCOORD0) : SV_TARGET0
+{
+ return float4(0.0f, 0.0f, 0.0f, TextureF.Sample(Sampler, inTexCoord).a);
+}
+
+float4 PS_PassthroughRGBA2DMS(in float4 inPosition : SV_POSITION, in float2 inTexCoord : TEXCORD0, in uint inSampleIndex : SV_SAMPLEINDEX) : SV_TARGET0
+{
+ return TextureF_MS.sample[inSampleIndex][inTexCoord].rgba;
+}
+
uint4 PS_PassthroughRGBA2DUI(in float4 inPosition : SV_POSITION, in float2 inTexCoord : TEXCOORD0) : SV_TARGET0
{
uint2 size;
diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/shaders/ResolveDepthStencil.hlsl b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/shaders/ResolveDepthStencil.hlsl
new file mode 100644
index 0000000000..7dc40d4b6a
--- /dev/null
+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/shaders/ResolveDepthStencil.hlsl
@@ -0,0 +1,56 @@
+static const float2 g_Corners[6] =
+{
+ float2(-1.0f, 1.0f),
+ float2( 1.0f, -1.0f),
+ float2(-1.0f, -1.0f),
+ float2(-1.0f, 1.0f),
+ float2( 1.0f, 1.0f),
+ float2( 1.0f, -1.0f),
+};
+
+void VS_ResolveDepthStencil(in uint id : SV_VertexID,
+ out float4 position : SV_Position,
+ out float2 texCoord : TEXCOORD0)
+{
+ float2 corner = g_Corners[id];
+ position = float4(corner.x, corner.y, 0.0f, 1.0f);
+ texCoord = float2((corner.x + 1.0f) * 0.5f, (-corner.y + 1.0f) * 0.5f);
+}
+
+Texture2DMS<float> Depth : register(t0);
+Texture2DMS<uint2> Stencil : register(t1);
+
+void PS_ResolveDepth(in float4 position : SV_Position,
+ in float2 texCoord : TEXCOORD0,
+ out float depth : SV_Depth)
+{
+ // MS samplers must use Load
+ uint width, height, samples;
+ Depth.GetDimensions(width, height, samples);
+ uint2 coord = uint2(texCoord.x * float(width), texCoord.y * float(height));
+ depth = Depth.Load(coord, 0).r;
+}
+
+void PS_ResolveDepthStencil(in float4 position : SV_Position,
+ in float2 texCoord : TEXCOORD0,
+ out float2 depthStencil : SV_Target0)
+{
+ // MS samplers must use Load
+ uint width, height, samples;
+ Depth.GetDimensions(width, height, samples);
+ uint2 coord = uint2(texCoord.x * float(width), texCoord.y * float(height));
+ depthStencil.r = Depth.Load(coord, 0).r;
+ depthStencil.g = float(Stencil.Load(coord, 0).g);
+}
+
+void PS_ResolveStencil(in float4 position : SV_Position,
+ in float2 texCoord : TEXCOORD0,
+ out float2 stencil : SV_Target0)
+{
+ // MS samplers must use Load
+ uint width, height, samples;
+ Stencil.GetDimensions(width, height, samples);
+ uint2 coord = uint2(texCoord.x * float(width), texCoord.y * float(height));
+ stencil.r = 0.0f;
+ stencil.g = float(Stencil.Load(coord, 0).g);
+}
diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/shaders/compiled/passthroughrgba2dms11ps.h b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/shaders/compiled/passthroughrgba2dms11ps.h
new file mode 100644
index 0000000000..a5cccdc98e
--- /dev/null
+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/shaders/compiled/passthroughrgba2dms11ps.h
@@ -0,0 +1,155 @@
+#if 0
+//
+// Generated by Microsoft (R) HLSL Shader Compiler 10.1
+//
+//
+// Resource Bindings:
+//
+// Name Type Format Dim HLSL Bind Count
+// ------------------------------ ---------- ------- ----------- -------------- ------
+// TextureF_MS texture float4 2dMS t0 1
+//
+//
+//
+// Input signature:
+//
+// Name Index Mask Register SysValue Format Used
+// -------------------- ----- ------ -------- -------- ------- ------
+// SV_POSITION 0 xyzw 0 POS float
+// TEXCORD 0 xy 1 NONE float xy
+// SV_SAMPLEINDEX 0 x 2 SAMPLE uint x
+//
+//
+// Output signature:
+//
+// Name Index Mask Register SysValue Format Used
+// -------------------- ----- ------ -------- -------- ------- ------
+// SV_TARGET 0 xyzw 0 TARGET float xyzw
+//
+// Pixel Shader runs at sample frequency
+//
+ps_4_1
+dcl_globalFlags refactoringAllowed
+dcl_resource_texture2dms(0) (float,float,float,float) t0
+dcl_input_ps linear v1.xy
+dcl_input_ps_sgv constant v2.x, sampleIndex
+dcl_output o0.xyzw
+dcl_temps 1
+ftou r0.xy, v1.xyxx
+mov r0.zw, l(0,0,0,0)
+ldms o0.xyzw, r0.xyzw, t0.xyzw, v2.x
+ret
+// Approximately 4 instruction slots used
+#endif
+
+const BYTE g_PS_PassthroughRGBA2DMS[] =
+{
+ 68, 88, 66, 67, 206, 115,
+ 73, 27, 160, 237, 59, 223,
+ 179, 180, 28, 146, 74, 174,
+ 29, 197, 1, 0, 0, 0,
+ 136, 2, 0, 0, 5, 0,
+ 0, 0, 52, 0, 0, 0,
+ 172, 0, 0, 0, 40, 1,
+ 0, 0, 92, 1, 0, 0,
+ 12, 2, 0, 0, 82, 68,
+ 69, 70, 112, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0,
+ 28, 0, 0, 0, 1, 4,
+ 255, 255, 0, 1, 0, 0,
+ 72, 0, 0, 0, 60, 0,
+ 0, 0, 2, 0, 0, 0,
+ 5, 0, 0, 0, 6, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0,
+ 0, 0, 13, 0, 0, 0,
+ 84, 101, 120, 116, 117, 114,
+ 101, 70, 95, 77, 83, 0,
+ 77, 105, 99, 114, 111, 115,
+ 111, 102, 116, 32, 40, 82,
+ 41, 32, 72, 76, 83, 76,
+ 32, 83, 104, 97, 100, 101,
+ 114, 32, 67, 111, 109, 112,
+ 105, 108, 101, 114, 32, 49,
+ 48, 46, 49, 0, 73, 83,
+ 71, 78, 116, 0, 0, 0,
+ 3, 0, 0, 0, 8, 0,
+ 0, 0, 80, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0,
+ 0, 0, 3, 0, 0, 0,
+ 0, 0, 0, 0, 15, 0,
+ 0, 0, 92, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 0, 0, 0,
+ 1, 0, 0, 0, 3, 3,
+ 0, 0, 100, 0, 0, 0,
+ 0, 0, 0, 0, 10, 0,
+ 0, 0, 1, 0, 0, 0,
+ 2, 0, 0, 0, 1, 1,
+ 0, 0, 83, 86, 95, 80,
+ 79, 83, 73, 84, 73, 79,
+ 78, 0, 84, 69, 88, 67,
+ 79, 82, 68, 0, 83, 86,
+ 95, 83, 65, 77, 80, 76,
+ 69, 73, 78, 68, 69, 88,
+ 0, 171, 79, 83, 71, 78,
+ 44, 0, 0, 0, 1, 0,
+ 0, 0, 8, 0, 0, 0,
+ 32, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 3, 0, 0, 0, 0, 0,
+ 0, 0, 15, 0, 0, 0,
+ 83, 86, 95, 84, 65, 82,
+ 71, 69, 84, 0, 171, 171,
+ 83, 72, 68, 82, 168, 0,
+ 0, 0, 65, 0, 0, 0,
+ 42, 0, 0, 0, 106, 8,
+ 0, 1, 88, 32, 0, 4,
+ 0, 112, 16, 0, 0, 0,
+ 0, 0, 85, 85, 0, 0,
+ 98, 16, 0, 3, 50, 16,
+ 16, 0, 1, 0, 0, 0,
+ 99, 8, 0, 4, 18, 16,
+ 16, 0, 2, 0, 0, 0,
+ 10, 0, 0, 0, 101, 0,
+ 0, 3, 242, 32, 16, 0,
+ 0, 0, 0, 0, 104, 0,
+ 0, 2, 1, 0, 0, 0,
+ 28, 0, 0, 5, 50, 0,
+ 16, 0, 0, 0, 0, 0,
+ 70, 16, 16, 0, 1, 0,
+ 0, 0, 54, 0, 0, 8,
+ 194, 0, 16, 0, 0, 0,
+ 0, 0, 2, 64, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 46, 0,
+ 0, 9, 242, 32, 16, 0,
+ 0, 0, 0, 0, 70, 14,
+ 16, 0, 0, 0, 0, 0,
+ 70, 126, 16, 0, 0, 0,
+ 0, 0, 10, 16, 16, 0,
+ 2, 0, 0, 0, 62, 0,
+ 0, 1, 83, 84, 65, 84,
+ 116, 0, 0, 0, 4, 0,
+ 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 3, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0
+};