Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,9 @@
</head>
<body>
<div id="description"></div>
<canvas id="canvas" width="128" height="128" style="background-color:#080"> </canvas>
<canvas id="canvas_no_alpha" width="128" height="128"> </canvas>
<canvas id="canvas" width="128" height="128" style="background-color:#080;position:fixed;"> </canvas>
<canvas id="canvas_no_alpha" width="128" height="128" style="background-color:#000;position:fixed;margin-left:128px;"> </canvas>
<div style="width:256px;height:128px;"></div>
<div id="console"></div>
<script>
"use strict";
Expand Down Expand Up @@ -100,16 +101,20 @@
"OES_draw_buffers_indexed not enabled or disabled as expected");
}
{
gl.bindRenderbuffer(gl.RENDERBUFFER, gl.createRenderbuffer());
const rb = gl.createRenderbuffer();
gl.bindRenderbuffer(gl.RENDERBUFFER, rb);
gl.renderbufferStorage(gl.RENDERBUFFER, gl.R32F, 1, 1);
wtu.glErrorShouldBe(gl, gl.INVALID_ENUM, "EXT_color_buffer_float not disabled as expected");
gl.bindRenderbuffer(gl.RENDERBUFFER, null);
gl.deleteRenderbuffer(rb);
}
{
gl.bindRenderbuffer(gl.RENDERBUFFER, gl.createRenderbuffer());
const rb = gl.createRenderbuffer();
gl.bindRenderbuffer(gl.RENDERBUFFER, rb);
gl.renderbufferStorage(gl.RENDERBUFFER, gl.RG16F, 1, 1);
wtu.glErrorShouldBe(gl, gl.INVALID_ENUM, "EXT_color_buffer_half_float not disabled as expected");
gl.bindRenderbuffer(gl.RENDERBUFFER, null);
gl.deleteRenderbuffer(rb);
}
}

Expand Down Expand Up @@ -165,7 +170,8 @@
"It's valid to query GL_PIXEL_LOCAL_STORAGE_ACTIVE_PLANES_WEBGL even when fbo 0 is bound.");

// Table 6.Y: Pixel Local Storage State
gl.bindFramebuffer(gl.FRAMEBUFFER, gl.createFramebuffer());
const fb = gl.createFramebuffer();
gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
shouldBe("gl.getParameter(pls.PIXEL_LOCAL_STORAGE_ACTIVE_PLANES_WEBGL)", "0");
debug("Check the initial clear values for each plane.");
const MAX_PIXEL_LOCAL_STORAGE_PLANES =
Expand Down Expand Up @@ -193,6 +199,7 @@
}
wtu.glErrorShouldBe(gl, gl.NO_ERROR);
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
gl.deleteFramebuffer(fb);
}

function checkFrontendValidation() {
Expand Down Expand Up @@ -232,21 +239,25 @@
pls.framebufferTexturePixelLocalStorageWEBGL(0, tex, 0, 0, 0);
wtu.glErrorShouldBe(gl, gl.INVALID_OPERATION);
gl.bindTexture(gl.TEXTURE_2D, null);
gl.deleteTexture(tex);
}

debug("\nAttaching a PLS plane with a wrong plane index must be rejected.");
{
const tex = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, tex);
gl.texStorage2D(gl.TEXTURE_2D, 1, gl.RGBA8, 1, 1);
gl.bindFramebuffer(gl.FRAMEBUFFER, gl.createFramebuffer());
const fb = gl.createFramebuffer();
gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
wtu.glErrorShouldBe(gl, gl.NO_ERROR);
pls.framebufferTexturePixelLocalStorageWEBGL(-1, tex, 0, 0, 0);
wtu.glErrorShouldBe(gl, gl.INVALID_VALUE);
pls.framebufferTexturePixelLocalStorageWEBGL(MAX_PIXEL_LOCAL_STORAGE_PLANES, tex, 0, 0, 0);
wtu.glErrorShouldBe(gl, gl.INVALID_VALUE);
gl.bindTexture(gl.TEXTURE_2D, null);
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
gl.deleteFramebuffer(fb);
gl.deleteTexture(tex);
}

debug("\nQuerying a PLS plane parameter on the default framebuffer must be rejected.");
Expand Down Expand Up @@ -274,7 +285,8 @@
debug("\nQuerying a PLS plane parameter with a wrong index must be rejected.");
{
wtu.glErrorShouldBe(gl, gl.NO_ERROR);
gl.bindFramebuffer(gl.FRAMEBUFFER, gl.createFramebuffer());
const fb = gl.createFramebuffer();
gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
shouldBeNull("pls.getFramebufferPixelLocalStorageParameterWEBGL(-1, pls.PIXEL_LOCAL_INTERNAL_FORMAT_WEBGL)");
wtu.glErrorShouldBe(gl, gl.INVALID_VALUE);
shouldBeNull("pls.getFramebufferPixelLocalStorageParameterWEBGL(-1, pls.PIXEL_LOCAL_TEXTURE_NAME_WEBGL)");
Expand Down Expand Up @@ -308,6 +320,7 @@
shouldBeNull(`pls.getFramebufferPixelLocalStorageParameterWEBGL(${MAX_PIXEL_LOCAL_STORAGE_PLANES}, pls.PIXEL_LOCAL_CLEAR_VALUE_UNSIGNED_INT_WEBGL)`);
wtu.glErrorShouldBe(gl, gl.INVALID_VALUE);
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
gl.deleteFramebuffer(fb);
}

debug("\nSetting a PLS plane clear value on the default framebuffer must be rejected.");
Expand All @@ -325,7 +338,8 @@
debug("\nSetting a PLS plane clear value with a wrong index must be rejected.");
{
wtu.glErrorShouldBe(gl, gl.NO_ERROR);
gl.bindFramebuffer(gl.FRAMEBUFFER, gl.createFramebuffer());
const fb = gl.createFramebuffer();
gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
pls.framebufferPixelLocalClearValuefvWEBGL(-1, [0, 0, 0, 0]);
wtu.glErrorShouldBe(gl, gl.INVALID_VALUE);
pls.framebufferPixelLocalClearValueivWEBGL(-1, [0, 0, 0, 0]);
Expand All @@ -339,13 +353,15 @@
pls.framebufferPixelLocalClearValueuivWEBGL(MAX_PIXEL_LOCAL_STORAGE_PLANES, [0, 0, 0, 0]);
wtu.glErrorShouldBe(gl, gl.INVALID_VALUE);
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
gl.deleteFramebuffer(fb);
}
}

function checkWebGLNonNormativeBehavior() {
debug("\nCheck the WebGL-specific behavior not found in the " +
"ANGLE_shader_pixel_local_storage specification.");
gl.bindFramebuffer(gl.FRAMEBUFFER, gl.createFramebuffer());
const fb = gl.createFramebuffer();
gl.bindFramebuffer(gl.FRAMEBUFFER, fb);

debug("If 'texture' has been deleted, generates an INVALID_OPERATION error.");
wtu.glErrorShouldBe(gl, gl.NO_ERROR);
Expand All @@ -366,6 +382,7 @@
pls.framebufferTexturePixelLocalStorageWEBGL(0, tex2, 0, 0, 0);
wtu.glErrorShouldBe(gl2, gl2.NO_ERROR);
wtu.glErrorShouldBe(gl, gl.INVALID_OPERATION);
gl2.deleteTexture(tex2);

debug("\nIf value has less than srcOffset + 4 elements, generates an INVALID_VALUE error.");
wtu.glErrorShouldBe(gl, gl.NO_ERROR);
Expand Down Expand Up @@ -441,9 +458,11 @@
"validTex");
pls.framebufferTexturePixelLocalStorageWEBGL(0, null, 0, 0, 0);
shouldBeNull("pls.getFramebufferPixelLocalStorageParameterWEBGL(0, pls.PIXEL_LOCAL_TEXTURE_NAME_WEBGL)");

wtu.glErrorShouldBe(gl, gl.NO_ERROR);
gl.deleteTexture(window.validTex);

gl.bindFramebuffer(gl.FRAMEBUFFER, null);
gl.deleteFramebuffer(fb);
}

async function checkRendering(localGL) {
Expand Down Expand Up @@ -595,6 +614,10 @@
shouldBeTrue("localGL.getParameter(localGL.COLOR_WRITEMASK)[1]");
shouldBeFalse("localGL.getParameter(localGL.COLOR_WRITEMASK)[2]");
shouldBeTrue("localGL.getParameter(localGL.COLOR_WRITEMASK)[3]");

localGL.deleteFramebuffer(readFBO);
localGL.deleteFramebuffer(plsFBO);
localGL.deleteTexture(tex);
}

runTest();
Expand Down
Loading