Skip to content

Commit c2419a2

Browse files
shrekshaokdashg
authored andcommitted
add more ext-float-blend tests (#2815)
* add more ext-float-blend tests * mediump * style
1 parent 2ace8df commit c2419a2

2 files changed

Lines changed: 132 additions & 0 deletions

File tree

sdk/tests/conformance2/extensions/ext-float-blend.html

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030
debug("");
3131
debug("Testing that float32 blending is forbidden without EXT_float_blend");
3232
testExtFloatBlend(false, gl.RGBA32F);
33+
testExtFloatBlendMRT(false);
34+
testExtFloatBlendNonFloat32Type(false);
3335

3436
const floatBlend = gl.getExtension("EXT_float_blend");
3537
if (!floatBlend) {
@@ -40,6 +42,8 @@
4042
debug("");
4143
debug("Testing that float32 blending is allowed with EXT_float_blend");
4244
testExtFloatBlend(true, gl.RGBA32F);
45+
testExtFloatBlendMRT(true);
46+
testExtFloatBlendNonFloat32Type(true);
4347
})();
4448

4549
debug("");

sdk/tests/js/tests/ext-float-blend.js

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,22 @@ void main()
1212
gl_FragColor = vec4(0,1,0,1);
1313
}
1414
`;
15+
const trivialVsMrtSrc = `#version 300 es
16+
void main()
17+
{
18+
gl_Position = vec4(0,0,0,1);
19+
}
20+
`;
21+
const trivialFsMrtSrc = `#version 300 es
22+
precision mediump float;
23+
layout(location = 0) out vec4 o_color0;
24+
layout(location = 1) out vec4 o_color1;
25+
void main()
26+
{
27+
o_color0 = vec4(1, 0, 0, 1);
28+
o_color1 = vec4(0, 1, 0, 1);
29+
}
30+
`;
1531

1632
function testExtFloatBlend(shouldBlend, internalFormat) {
1733
const prog = wtu.setupProgram(gl, [trivialVsSrc, trivialFsSrc]);
@@ -34,6 +50,118 @@ function testExtFloatBlend(shouldBlend, internalFormat) {
3450
gl.drawArrays(gl.POINTS, 0, 1);
3551
wtu.glErrorShouldBe(gl, shouldBlend ? 0 : gl.INVALID_OPERATION,
3652
'Float32 blending is ' + (shouldBlend ? '' : 'not ') + 'allowed ');
53+
54+
gl.deleteFramebuffer(fb);
55+
gl.deleteTexture(tex);
56+
}
57+
58+
function testExtFloatBlendMRT(shouldBlend) {
59+
const prog = wtu.setupProgram(gl, [trivialVsMrtSrc, trivialFsMrtSrc]);
60+
gl.useProgram(prog);
61+
62+
const tex1 = gl.createTexture();
63+
gl.bindTexture(gl.TEXTURE_2D, tex1);
64+
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
65+
66+
const tex2 = gl.createTexture();
67+
gl.bindTexture(gl.TEXTURE_2D, tex2);
68+
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
69+
70+
const texF1 = gl.createTexture();
71+
gl.bindTexture(gl.TEXTURE_2D, texF1);
72+
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA32F, 1, 1, 0, gl.RGBA, gl.FLOAT, null);
73+
74+
const texF2 = gl.createTexture();
75+
gl.bindTexture(gl.TEXTURE_2D, texF2);
76+
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA32F, 1, 1, 0, gl.RGBA, gl.FLOAT, null);
77+
78+
const fb = gl.createFramebuffer();
79+
gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
80+
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, tex1, 0);
81+
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT1, gl.TEXTURE_2D, tex2, 0);
82+
shouldBe('gl.checkFramebufferStatus(gl.FRAMEBUFFER)', 'gl.FRAMEBUFFER_COMPLETE');
83+
84+
gl.drawBuffers([gl.COLOR_ATTACHMENT0, gl.COLOR_ATTACHMENT1]);
85+
86+
gl.enable(gl.BLEND);
87+
88+
gl.drawArrays(gl.POINTS, 0, 1);
89+
wtu.glErrorShouldBe(gl, 0, 'No Float32 color attachment');
90+
91+
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texF1, 0);
92+
gl.drawArrays(gl.POINTS, 0, 1);
93+
wtu.glErrorShouldBe(gl, shouldBlend ? 0 : gl.INVALID_OPERATION,
94+
'Float32 blending is ' + (shouldBlend ? '' : 'not ') + 'allowed ');
95+
96+
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT1, gl.TEXTURE_2D, texF2, 0);
97+
gl.drawArrays(gl.POINTS, 0, 1);
98+
wtu.glErrorShouldBe(gl, shouldBlend ? 0 : gl.INVALID_OPERATION,
99+
'Float32 blending is ' + (shouldBlend ? '' : 'not ') + 'allowed ');
100+
101+
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, tex1, 0);
102+
gl.drawArrays(gl.POINTS, 0, 1);
103+
wtu.glErrorShouldBe(gl, shouldBlend ? 0 : gl.INVALID_OPERATION,
104+
'Float32 blending is ' + (shouldBlend ? '' : 'not ') + 'allowed ');
105+
106+
gl.drawBuffers([gl.COLOR_ATTACHMENT0]);
107+
shouldBe('gl.checkFramebufferStatus(gl.FRAMEBUFFER)', 'gl.FRAMEBUFFER_COMPLETE');
108+
109+
gl.drawArrays(gl.POINTS, 0, 1);
110+
wtu.glErrorShouldBe(gl, 0, 'Float32 color attachment draw buffer is not enabled');
111+
112+
gl.drawBuffers([gl.COLOR_ATTACHMENT0, gl.COLOR_ATTACHMENT1]);
113+
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT1, gl.TEXTURE_2D, tex2, 0);
114+
shouldBe('gl.checkFramebufferStatus(gl.FRAMEBUFFER)', 'gl.FRAMEBUFFER_COMPLETE');
115+
116+
gl.drawArrays(gl.POINTS, 0, 1);
117+
wtu.glErrorShouldBe(gl, 0, 'No Float32 color attachment');
118+
119+
gl.deleteFramebuffer(fb);
120+
gl.deleteTexture(tex1);
121+
gl.deleteTexture(tex2);
122+
gl.deleteTexture(texF1);
123+
gl.deleteTexture(texF2);
124+
}
125+
126+
function testExtFloatBlendNonFloat32Type(shouldBlend) {
127+
const prog = wtu.setupProgram(gl, [trivialVsSrc, trivialFsSrc]);
128+
gl.useProgram(prog);
129+
130+
gl.enable(gl.BLEND);
131+
132+
const tex = gl.createTexture();
133+
gl.bindTexture(gl.TEXTURE_2D, tex);
134+
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA32F, 1, 1, 0, gl.RGBA, gl.FLOAT, null);
135+
136+
const fb = gl.createFramebuffer();
137+
gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
138+
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, tex, 0);
139+
shouldBe('gl.checkFramebufferStatus(gl.FRAMEBUFFER)', 'gl.FRAMEBUFFER_COMPLETE');
140+
141+
gl.drawArrays(gl.POINTS, 0, 1);
142+
wtu.glErrorShouldBe(gl, shouldBlend ? 0 : gl.INVALID_OPERATION,
143+
'Float32 blending is ' + (shouldBlend ? '' : 'not ') + 'allowed ');
144+
145+
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
146+
gl.drawArrays(gl.POINTS, 0, 1);
147+
wtu.glErrorShouldBe(gl, 0, 'UNSIGNED_BYTE should blend anyway');
148+
149+
const formats = [
150+
[gl.RGBA16F, gl.RGBA, gl.HALF_FLOAT],
151+
[gl.RGBA16F, gl.RGBA, gl.FLOAT],
152+
[gl.RG16F, gl.RG, gl.FLOAT],
153+
[gl.R16F, gl.RED, gl.FLOAT],
154+
[gl.R11F_G11F_B10F, gl.RGB, gl.FLOAT]
155+
];
156+
157+
for (let i = 0, len = formats.length; i < len; i++) {
158+
gl.texImage2D(gl.TEXTURE_2D, 0, formats[i][0], 1, 1, 0, formats[i][1], formats[i][2], null);
159+
gl.drawArrays(gl.POINTS, 0, 1);
160+
wtu.glErrorShouldBe(gl, 0, 'Any other float type which is not 32-bit-Float should blend anyway');
161+
}
162+
163+
gl.deleteFramebuffer(fb);
164+
gl.deleteTexture(tex);
37165
}
38166

39167
/*

0 commit comments

Comments
 (0)