Fix D3D11 mix-blending when the source alpha is 0. (bug 1281593 part 1, r=mstange)

--HG--
extra : rebase_source : bec9c0b07e07200e3b770a15f0b120d5d62dbbd7
This commit is contained in:
David Anderson 2016-08-02 11:43:15 -07:00
parent a4aada5894
commit 334f06fca3
2 changed files with 111 additions and 109 deletions

View File

@ -389,7 +389,7 @@ float4 BlendShader(const VS_BLEND_OUTPUT aVertex) : SV_Target
return source;
}
if (source.a == 0.0) {
return backdrop;
return float4(0, 0, 0, 0);
}
// The spec assumes there is no premultiplied alpha. The backdrop is always

View File

@ -6121,75 +6121,75 @@ ShaderBytes sLayerQuadBlendMaskVS = { LayerQuadBlendMaskVS, sizeof(LayerQuadBlen
mad r1.w, r6.x, -r0.w, r1.w
mad r1.w, r9.x, r1.w, r8.x
mad r9, r6.xyzx, -r0.w, -c11.wwwy
mad r10.xyz, r6, r0.w, c3.x
mul r10.xyz, r10, r10
mad r6.xyz, r6, r0.w, c3.x
mul r6.xyz, r6, r6
mad r0.w, r11.x, -r9.w, r8.x
cmp r13.x, r14.w, r0.w, r1.w
cmp r0.xyz, -r7.z, r13, r0
add r11.xyz, r8, r8
mad r13.xyz, r4, -c3.y, r11
add r13.xyz, r13, c3.x
mad r15.xyz, r4, -r11, r13
mul r11.xyz, r4, r11
add r16.xyz, r4, r4
mul r17.xyz, r8, r16
mad r13.xyz, r16, -r8, r13
cmp r9.xyz, r9, r11, r13
cmp r5.yz, r5.xxyw, r17, r15
cmp r5.x, r14.w, r17.x, r15.x
add r10.xyz, r8, r8
mad r11.xyz, r4, -c3.y, r10
add r11.xyz, r11, c3.x
mad r13.xyz, r4, -r10, r11
mul r10.xyz, r4, r10
add r15.xyz, r4, r4
mul r16.xyz, r8, r15
mad r11.xyz, r15, -r8, r11
cmp r9.xyz, r9, r10, r11
cmp r5.yz, r5.xxyw, r16, r13
cmp r5.x, r14.w, r16.x, r13.x
cmp r0.xyz, -r7.y, r5, r0
rcp r0.w, r4.x
mad r0.w, r9.w, -r0.w, -c3.x
max r1.w, r0.w, -c11.z
mul r5.xyz, r4, r4
cmp r0.w, -r5.x, -c11.z, r1.w
cmp r11.x, -r10.x, -c3.x, r0.w
cmp r10.x, -r6.x, -c3.x, r0.w
rcp r0.w, r4.y
mad r0.w, r12.x, -r0.w, -c3.x
max r1.w, r0.w, -c11.z
cmp r0.w, -r5.y, -c11.z, r1.w
cmp r11.y, -r10.y, -c3.x, r0.w
cmp r10.y, -r6.y, -c3.x, r0.w
rcp r0.w, r4.z
mad r0.w, r12.y, -r0.w, -c3.x
max r1.w, r0.w, -c11.z
cmp r0.w, -r5.z, -c11.z, r1.w
cmp r11.z, -r10.z, -c3.x, r0.w
cmp r0.xyz, -r7.x, r11, r0
cmp r10.z, -r6.z, -c3.x, r0.w
cmp r0.xyz, -r7.x, r10, r0
add r5, r4.w, c5
mul r5, r5, r5
add r7.xyz, r4, c3.x
mul r7.xyz, r7, r7
add r6.xyz, r4, c3.x
mul r6.xyz, r6, r6
rcp r0.w, r14.x
mul r0.w, r0.w, r8.x
min r1.w, r0.w, -c3.x
cmp r0.w, -r7.x, -c3.x, r1.w
mul r10.xyz, r8, r8
cmp r11.x, -r10.x, -c11.z, r0.w
cmp r0.w, -r6.x, -c3.x, r1.w
mul r7.xyz, r8, r8
cmp r10.x, -r7.x, -c11.z, r0.w
rcp r0.w, r14.y
rcp r1.w, r14.z
mul r1.w, r1.w, r8.z
min r2.w, r1.w, -c3.x
cmp r1.w, -r7.z, -c3.x, r2.w
cmp r11.z, -r10.z, -c11.z, r1.w
cmp r1.w, -r6.z, -c3.x, r2.w
cmp r10.z, -r7.z, -c11.z, r1.w
mul r0.w, r0.w, r8.y
min r1.w, r0.w, -c3.x
cmp r0.w, -r7.y, -c3.x, r1.w
cmp r11.y, -r10.y, -c11.z, r0.w
cmp r0.xyz, -r5.w, r11, r0
max r7.xyz, r8, r4
min r10.xyz, r4, r8
cmp r0.xyz, -r5.z, r7, r0
cmp r0.xyz, -r5.y, r10, r0
cmp r0.w, -r6.y, -c3.x, r1.w
cmp r10.y, -r7.y, -c11.z, r0.w
cmp r0.xyz, -r5.w, r10, r0
max r6.xyz, r8, r4
min r7.xyz, r4, r8
cmp r0.xyz, -r5.z, r6, r0
cmp r0.xyz, -r5.y, r7, r0
cmp r0.xyz, -r5.x, r9, r0
cmp r0.xyz, -r10.w, r1, r0
cmp r0.xyz, -c2.z, r2, r0
lrp r1.xyz, r6.w, r0, r4
mul r1.w, r6.w, r6.w
mul r0.xyz, r3.w, r1
mul r1.x, r3.w, r3.w
mov r0.w, r3.w
cmp r0, -r1.x, r6, r0
mul r1.x, r6.w, r6.w
cmp r0, -r1.x, r3, r0
cmp r0, -r1.x, -c11.z, r0
cmp r0, -r1.w, r3, r0
mov oC0, r0
// approximately 326 instruction slots used (6 texture, 320 arithmetic)
@ -6300,7 +6300,7 @@ if_nz r2.x
endif
eq r2.x, r1.w, l(0.000000)
if_nz r2.x
mov o0.xyzw, r0.xyzw
mov o0.xyzw, l(0,0,0,0)
ret
endif
div r0.xyz, r0.xyzx, r0.wwww
@ -6551,15 +6551,15 @@ ret
const BYTE BlendShader[] =
{
68, 88, 66, 67, 122, 174,
220, 58, 170, 47, 87, 82,
85, 5, 178, 49, 217, 101,
104, 140, 1, 0, 0, 0,
184, 67, 0, 0, 6, 0,
68, 88, 66, 67, 112, 63,
111, 12, 13, 48, 235, 163,
54, 75, 30, 70, 47, 59,
134, 187, 1, 0, 0, 0,
196, 67, 0, 0, 6, 0,
0, 0, 56, 0, 0, 0,
92, 23, 0, 0, 8, 63,
0, 0, 132, 63, 0, 0,
252, 66, 0, 0, 132, 67,
92, 23, 0, 0, 20, 63,
0, 0, 144, 63, 0, 0,
8, 67, 0, 0, 144, 67,
0, 0, 65, 111, 110, 57,
28, 23, 0, 0, 28, 23,
0, 0, 0, 2, 255, 255,
@ -7342,12 +7342,12 @@ const BYTE BlendShader[] =
9, 0, 15, 128, 6, 0,
36, 128, 0, 0, 255, 129,
11, 0, 127, 161, 4, 0,
0, 4, 10, 0, 7, 128,
0, 4, 6, 0, 7, 128,
6, 0, 228, 128, 0, 0,
255, 128, 3, 0, 0, 160,
5, 0, 0, 3, 10, 0,
7, 128, 10, 0, 228, 128,
10, 0, 228, 128, 4, 0,
5, 0, 0, 3, 6, 0,
7, 128, 6, 0, 228, 128,
6, 0, 228, 128, 4, 0,
0, 4, 0, 0, 8, 128,
11, 0, 0, 128, 9, 0,
255, 129, 8, 0, 0, 128,
@ -7358,39 +7358,39 @@ const BYTE BlendShader[] =
0, 0, 7, 128, 7, 0,
170, 129, 13, 0, 228, 128,
0, 0, 228, 128, 2, 0,
0, 3, 11, 0, 7, 128,
0, 3, 10, 0, 7, 128,
8, 0, 228, 128, 8, 0,
228, 128, 4, 0, 0, 4,
13, 0, 7, 128, 4, 0,
11, 0, 7, 128, 4, 0,
228, 128, 3, 0, 85, 161,
11, 0, 228, 128, 2, 0,
0, 3, 13, 0, 7, 128,
13, 0, 228, 128, 3, 0,
0, 160, 4, 0, 0, 4,
15, 0, 7, 128, 4, 0,
228, 128, 11, 0, 228, 129,
13, 0, 228, 128, 5, 0,
10, 0, 228, 128, 2, 0,
0, 3, 11, 0, 7, 128,
4, 0, 228, 128, 11, 0,
11, 0, 228, 128, 3, 0,
0, 160, 4, 0, 0, 4,
13, 0, 7, 128, 4, 0,
228, 128, 10, 0, 228, 129,
11, 0, 228, 128, 5, 0,
0, 3, 10, 0, 7, 128,
4, 0, 228, 128, 10, 0,
228, 128, 2, 0, 0, 3,
16, 0, 7, 128, 4, 0,
15, 0, 7, 128, 4, 0,
228, 128, 4, 0, 228, 128,
5, 0, 0, 3, 17, 0,
5, 0, 0, 3, 16, 0,
7, 128, 8, 0, 228, 128,
16, 0, 228, 128, 4, 0,
0, 4, 13, 0, 7, 128,
16, 0, 228, 128, 8, 0,
228, 129, 13, 0, 228, 128,
15, 0, 228, 128, 4, 0,
0, 4, 11, 0, 7, 128,
15, 0, 228, 128, 8, 0,
228, 129, 11, 0, 228, 128,
88, 0, 0, 4, 9, 0,
7, 128, 9, 0, 228, 128,
11, 0, 228, 128, 13, 0,
10, 0, 228, 128, 11, 0,
228, 128, 88, 0, 0, 4,
5, 0, 6, 128, 5, 0,
208, 128, 17, 0, 228, 128,
15, 0, 228, 128, 88, 0,
208, 128, 16, 0, 228, 128,
13, 0, 228, 128, 88, 0,
0, 4, 5, 0, 1, 128,
14, 0, 255, 128, 17, 0,
0, 128, 15, 0, 0, 128,
14, 0, 255, 128, 16, 0,
0, 128, 13, 0, 0, 128,
88, 0, 0, 4, 0, 0,
7, 128, 7, 0, 85, 129,
5, 0, 228, 128, 0, 0,
@ -7409,7 +7409,7 @@ const BYTE BlendShader[] =
8, 128, 5, 0, 0, 129,
11, 0, 170, 161, 1, 0,
255, 128, 88, 0, 0, 4,
11, 0, 1, 128, 10, 0,
10, 0, 1, 128, 6, 0,
0, 129, 3, 0, 0, 161,
0, 0, 255, 128, 6, 0,
0, 2, 0, 0, 8, 128,
@ -7423,8 +7423,8 @@ const BYTE BlendShader[] =
0, 4, 0, 0, 8, 128,
5, 0, 85, 129, 11, 0,
170, 161, 1, 0, 255, 128,
88, 0, 0, 4, 11, 0,
2, 128, 10, 0, 85, 129,
88, 0, 0, 4, 10, 0,
2, 128, 6, 0, 85, 129,
3, 0, 0, 161, 0, 0,
255, 128, 6, 0, 0, 2,
0, 0, 8, 128, 4, 0,
@ -7438,23 +7438,23 @@ const BYTE BlendShader[] =
0, 0, 8, 128, 5, 0,
170, 129, 11, 0, 170, 161,
1, 0, 255, 128, 88, 0,
0, 4, 11, 0, 4, 128,
10, 0, 170, 129, 3, 0,
0, 4, 10, 0, 4, 128,
6, 0, 170, 129, 3, 0,
0, 161, 0, 0, 255, 128,
88, 0, 0, 4, 0, 0,
7, 128, 7, 0, 0, 129,
11, 0, 228, 128, 0, 0,
10, 0, 228, 128, 0, 0,
228, 128, 2, 0, 0, 3,
5, 0, 15, 128, 4, 0,
255, 128, 5, 0, 228, 160,
5, 0, 0, 3, 5, 0,
15, 128, 5, 0, 228, 128,
5, 0, 228, 128, 2, 0,
0, 3, 7, 0, 7, 128,
0, 3, 6, 0, 7, 128,
4, 0, 228, 128, 3, 0,
0, 160, 5, 0, 0, 3,
7, 0, 7, 128, 7, 0,
228, 128, 7, 0, 228, 128,
6, 0, 7, 128, 6, 0,
228, 128, 6, 0, 228, 128,
6, 0, 0, 2, 0, 0,
8, 128, 14, 0, 0, 128,
5, 0, 0, 3, 0, 0,
@ -7463,13 +7463,13 @@ const BYTE BlendShader[] =
0, 3, 1, 0, 8, 128,
0, 0, 255, 128, 3, 0,
0, 161, 88, 0, 0, 4,
0, 0, 8, 128, 7, 0,
0, 0, 8, 128, 6, 0,
0, 129, 3, 0, 0, 161,
1, 0, 255, 128, 5, 0,
0, 3, 10, 0, 7, 128,
0, 3, 7, 0, 7, 128,
8, 0, 228, 128, 8, 0,
228, 128, 88, 0, 0, 4,
11, 0, 1, 128, 10, 0,
10, 0, 1, 128, 7, 0,
0, 129, 11, 0, 170, 161,
0, 0, 255, 128, 6, 0,
0, 2, 0, 0, 8, 128,
@ -7482,10 +7482,10 @@ const BYTE BlendShader[] =
2, 0, 8, 128, 1, 0,
255, 128, 3, 0, 0, 161,
88, 0, 0, 4, 1, 0,
8, 128, 7, 0, 170, 129,
8, 128, 6, 0, 170, 129,
3, 0, 0, 161, 2, 0,
255, 128, 88, 0, 0, 4,
11, 0, 4, 128, 10, 0,
10, 0, 4, 128, 7, 0,
170, 129, 11, 0, 170, 161,
1, 0, 255, 128, 5, 0,
0, 3, 0, 0, 8, 128,
@ -7494,26 +7494,26 @@ const BYTE BlendShader[] =
1, 0, 8, 128, 0, 0,
255, 128, 3, 0, 0, 161,
88, 0, 0, 4, 0, 0,
8, 128, 7, 0, 85, 129,
8, 128, 6, 0, 85, 129,
3, 0, 0, 161, 1, 0,
255, 128, 88, 0, 0, 4,
11, 0, 2, 128, 10, 0,
10, 0, 2, 128, 7, 0,
85, 129, 11, 0, 170, 161,
0, 0, 255, 128, 88, 0,
0, 4, 0, 0, 7, 128,
5, 0, 255, 129, 11, 0,
5, 0, 255, 129, 10, 0,
228, 128, 0, 0, 228, 128,
11, 0, 0, 3, 7, 0,
11, 0, 0, 3, 6, 0,
7, 128, 8, 0, 228, 128,
4, 0, 228, 128, 10, 0,
0, 3, 10, 0, 7, 128,
0, 3, 7, 0, 7, 128,
4, 0, 228, 128, 8, 0,
228, 128, 88, 0, 0, 4,
0, 0, 7, 128, 5, 0,
170, 129, 7, 0, 228, 128,
170, 129, 6, 0, 228, 128,
0, 0, 228, 128, 88, 0,
0, 4, 0, 0, 7, 128,
5, 0, 85, 129, 10, 0,
5, 0, 85, 129, 7, 0,
228, 128, 0, 0, 228, 128,
88, 0, 0, 4, 0, 0,
7, 128, 5, 0, 0, 129,
@ -7529,27 +7529,27 @@ const BYTE BlendShader[] =
7, 128, 6, 0, 255, 128,
0, 0, 228, 128, 4, 0,
228, 128, 5, 0, 0, 3,
0, 0, 7, 128, 3, 0,
255, 128, 1, 0, 228, 128,
5, 0, 0, 3, 1, 0,
1, 128, 3, 0, 255, 128,
3, 0, 255, 128, 1, 0,
0, 2, 0, 0, 8, 128,
3, 0, 255, 128, 88, 0,
1, 0, 8, 128, 6, 0,
255, 128, 6, 0, 255, 128,
5, 0, 0, 3, 0, 0,
7, 128, 3, 0, 255, 128,
1, 0, 228, 128, 5, 0,
0, 3, 1, 0, 1, 128,
3, 0, 255, 128, 3, 0,
255, 128, 1, 0, 0, 2,
0, 0, 8, 128, 3, 0,
255, 128, 88, 0, 0, 4,
0, 0, 15, 128, 1, 0,
0, 129, 11, 0, 170, 161,
0, 0, 228, 128, 88, 0,
0, 4, 0, 0, 15, 128,
1, 0, 0, 129, 6, 0,
228, 128, 0, 0, 228, 128,
5, 0, 0, 3, 1, 0,
1, 128, 6, 0, 255, 128,
6, 0, 255, 128, 88, 0,
0, 4, 0, 0, 15, 128,
1, 0, 0, 129, 3, 0,
1, 0, 255, 129, 3, 0,
228, 128, 0, 0, 228, 128,
1, 0, 0, 2, 0, 8,
15, 128, 0, 0, 228, 128,
255, 255, 0, 0, 83, 72,
68, 82, 164, 39, 0, 0,
64, 0, 0, 0, 233, 9,
68, 82, 176, 39, 0, 0,
64, 0, 0, 0, 236, 9,
0, 0, 89, 0, 0, 4,
70, 142, 32, 0, 0, 0,
0, 0, 3, 0, 0, 0,
@ -7962,9 +7962,11 @@ const BYTE BlendShader[] =
0, 0, 0, 0, 31, 0,
4, 3, 10, 0, 16, 0,
2, 0, 0, 0, 54, 0,
0, 5, 242, 32, 16, 0,
0, 0, 0, 0, 70, 14,
16, 0, 0, 0, 0, 0,
0, 8, 242, 32, 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,
62, 0, 0, 1, 21, 0,
0, 1, 14, 0, 0, 7,
114, 0, 16, 0, 0, 0,