From 500b36b669aef57ea4194395483dbdee4b8d9868 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1ty=C3=A1s=20Mustoha?= Date: Mon, 13 Jan 2020 12:21:17 +0100 Subject: [PATCH] Add support for WebGL2 `RASTERIZER_DISCARD` enum. Add support for the `RASTERIZER_DISCARD` enum for the WebGL2 version of the `Enable`, `Disable` and `IsEnabled` functions. See https://www.khronos.org/registry/webgl/specs/latest/2.0/#3.7.2 --- .../script/dom/webgl2renderingcontext.rs | 25 ++++++++++++++++--- .../same-buffer-two-binding-points.html.ini | 13 ---------- .../transform_feedback.html.ini | 14 +++-------- ...unwritten-output-defaults-to-zero.html.ini | 14 +---------- 4 files changed, 26 insertions(+), 40 deletions(-) delete mode 100644 tests/wpt/webgl/meta/conformance2/transform_feedback/same-buffer-two-binding-points.html.ini diff --git a/components/script/dom/webgl2renderingcontext.rs b/components/script/dom/webgl2renderingcontext.rs index e8993f472d98..2689448e0bcb 100644 --- a/components/script/dom/webgl2renderingcontext.rs +++ b/components/script/dom/webgl2renderingcontext.rs @@ -71,6 +71,7 @@ pub struct WebGL2RenderingContext { texture_pack_row_length: Cell, texture_pack_skip_pixels: Cell, texture_pack_skip_rows: Cell, + enable_rasterizer_discard: Cell, } fn typedarray_elem_size(typeid: Type) -> usize { @@ -124,6 +125,7 @@ impl WebGL2RenderingContext { texture_pack_row_length: Cell::new(0), texture_pack_skip_pixels: Cell::new(0), texture_pack_skip_rows: Cell::new(0), + enable_rasterizer_discard: Cell::new(false), }) } @@ -991,12 +993,24 @@ impl WebGL2RenderingContextMethods for WebGL2RenderingContext { /// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.3 fn Enable(&self, cap: u32) { - self.base.Enable(cap) + match cap { + constants::RASTERIZER_DISCARD => { + self.enable_rasterizer_discard.set(true); + self.base.send_command(WebGLCommand::Enable(cap)); + }, + _ => self.base.Enable(cap), + } } /// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.3 fn Disable(&self, cap: u32) { - self.base.Disable(cap) + match cap { + constants::RASTERIZER_DISCARD => { + self.enable_rasterizer_discard.set(false); + self.base.send_command(WebGLCommand::Disable(cap)); + }, + _ => self.base.Disable(cap), + } } /// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.9 @@ -1200,9 +1214,12 @@ impl WebGL2RenderingContextMethods for WebGL2RenderingContext { } // TODO: We could write this without IPC, recording the calls to `enable` and `disable`. - /// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.3 + /// https://www.khronos.org/registry/webgl/specs/latest/2.0/#3.7.2 fn IsEnabled(&self, cap: u32) -> bool { - self.base.IsEnabled(cap) + match cap { + constants::RASTERIZER_DISCARD => self.enable_rasterizer_discard.get(), + _ => self.base.IsEnabled(cap), + } } /// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.6 diff --git a/tests/wpt/webgl/meta/conformance2/transform_feedback/same-buffer-two-binding-points.html.ini b/tests/wpt/webgl/meta/conformance2/transform_feedback/same-buffer-two-binding-points.html.ini deleted file mode 100644 index 06116b386fbc..000000000000 --- a/tests/wpt/webgl/meta/conformance2/transform_feedback/same-buffer-two-binding-points.html.ini +++ /dev/null @@ -1,13 +0,0 @@ -[same-buffer-two-binding-points.html] - [WebGL test #7: getError expected: INVALID_OPERATION. Was INVALID_ENUM : same buffer bound to two transform feedback binding points with bindBufferRange, non-overlapping ranges] - expected: FAIL - - [WebGL test #3: getError expected: INVALID_OPERATION. Was INVALID_ENUM : same buffer bound to two transform feedback binding points with bindBufferBase] - expected: FAIL - - [WebGL test #5: getError expected: INVALID_OPERATION. Was INVALID_ENUM : same buffer bound to two transform feedback binding points with bindBufferRange, overlapping ranges] - expected: FAIL - - [WebGL test #9: getError expected: INVALID_OPERATION. Was INVALID_ENUM : same buffer bound to two transform feedback binding points with bindBufferBase, but one of the binding points doesn't have a corresponding shader output] - expected: FAIL - diff --git a/tests/wpt/webgl/meta/conformance2/transform_feedback/transform_feedback.html.ini b/tests/wpt/webgl/meta/conformance2/transform_feedback/transform_feedback.html.ini index 6dc62dfdae41..3981f74f97ee 100644 --- a/tests/wpt/webgl/meta/conformance2/transform_feedback/transform_feedback.html.ini +++ b/tests/wpt/webgl/meta/conformance2/transform_feedback/transform_feedback.html.ini @@ -1,13 +1,4 @@ [transform_feedback.html] - [WebGL test #2: getError expected: NO_ERROR. Was INVALID_ENUM : TRANSFORM_FEEDBACK_BINDING query should succeed] - expected: FAIL - - [WebGL test #35: getError expected: NO_ERROR. Was INVALID_ENUM : linking transform feedback shader should not set an error] - expected: FAIL - - [WebGL test #29: getError expected: NO_ERROR. Was INVALID_ENUM : linking transform feedback shader should not set an error] - expected: FAIL - [WebGL test #31: buffer should match expected values] expected: FAIL @@ -26,9 +17,12 @@ [WebGL test #28: buffer should match expected values] expected: FAIL - [WebGL test #24: getError expected: INVALID_OPERATION. Was INVALID_ENUM : after evaluating: gl.getBufferSubData(gl.TRANSFORM_FEEDBACK_BUFFER, 0, retArray, 0, retArray.length)] + [WebGL test #35: getError expected: NO_ERROR. Was INVALID_OPERATION : linking transform feedback shader should not set an error] expected: FAIL [WebGL test #34: TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN query returned an incorrect result 0 (expected 3)] expected: FAIL + [WebGL test #29: getError expected: NO_ERROR. Was INVALID_OPERATION : linking transform feedback shader should not set an error] + expected: FAIL + diff --git a/tests/wpt/webgl/meta/conformance2/transform_feedback/unwritten-output-defaults-to-zero.html.ini b/tests/wpt/webgl/meta/conformance2/transform_feedback/unwritten-output-defaults-to-zero.html.ini index 657f99c6dac2..c8611ab2fa1e 100644 --- a/tests/wpt/webgl/meta/conformance2/transform_feedback/unwritten-output-defaults-to-zero.html.ini +++ b/tests/wpt/webgl/meta/conformance2/transform_feedback/unwritten-output-defaults-to-zero.html.ini @@ -1,19 +1,7 @@ [unwritten-output-defaults-to-zero.html] - [WebGL test #1: Fail to set up the program] - expected: FAIL - - [WebGL test #2: Fail to set up the program] - expected: FAIL - - [WebGL test #1: successfullyParsed should be true (of type boolean). Was undefined (of type undefined).] - expected: FAIL - - [WebGL test #2: successfullyParsed should be true (of type boolean). Was undefined (of type undefined).] - expected: FAIL - [WebGL test #2: buffer should match expected values] expected: FAIL - [WebGL test #3: getError expected: NO_ERROR. Was INVALID_ENUM : Set up program should succeed] + [WebGL test #3: getError expected: NO_ERROR. Was INVALID_OPERATION : Set up program should succeed] expected: FAIL