From 3e20ad3c142af0ebc0824cb211ef7ce7fdbcff65 Mon Sep 17 00:00:00 2001 From: Jeff Gilbert Date: Fri, 5 Nov 2021 10:33:28 -0700 Subject: [PATCH 1/3] Add format-filterable-renderable test. Checks all texture formats for filterable and color-renderable. WebGL 1 and 2. WebGL 1's RGB8 doesn't look like it's spec-required. Should it be? Every device and browser I tested supports it, and it's color-renderable in ES3/webgl2. --- .../textures/misc/00_test_list.txt | 3 +- .../misc/format-filterable-renderable.html | 374 ++++++++++++++++++ sdk/tests/js/js-test-pre.js | 13 + 3 files changed, 389 insertions(+), 1 deletion(-) create mode 100644 sdk/tests/conformance/textures/misc/format-filterable-renderable.html diff --git a/sdk/tests/conformance/textures/misc/00_test_list.txt b/sdk/tests/conformance/textures/misc/00_test_list.txt index 757a996348..ef3d1de504 100644 --- a/sdk/tests/conformance/textures/misc/00_test_list.txt +++ b/sdk/tests/conformance/textures/misc/00_test_list.txt @@ -4,11 +4,12 @@ copy-tex-image-and-sub-image-2d.html --min-version 1.0.2 copy-tex-image-2d-formats.html --min-version 1.0.4 copy-tex-image-crash.html --min-version 1.0.4 copytexsubimage2d-large-partial-copy-corruption.html ---min-version 1.0.4 copytexsubimage2d-subrects.html +--min-version 1.0.4 copytexsubimage2d-subrects.html --min-version 1.0.4 cube-incomplete-fbo.html --min-version 1.0.4 cube-map-uploads-out-of-order.html --min-version 1.0.3 default-texture.html --min-version 1.0.4 exif-orientation.html +--min-version 1.0.4 format-filterable-renderable.html --min-version 1.0.2 --max-version 1.9.9 gl-get-tex-parameter.html gl-pixelstorei.html gl-teximage.html diff --git a/sdk/tests/conformance/textures/misc/format-filterable-renderable.html b/sdk/tests/conformance/textures/misc/format-filterable-renderable.html new file mode 100644 index 0000000000..d0603bb511 --- /dev/null +++ b/sdk/tests/conformance/textures/misc/format-filterable-renderable.html @@ -0,0 +1,374 @@ + + + + + + + + + + + +
+
+ + + diff --git a/sdk/tests/js/js-test-pre.js b/sdk/tests/js/js-test-pre.js index cb37aff173..e1cb9f749c 100644 --- a/sdk/tests/js/js-test-pre.js +++ b/sdk/tests/js/js-test-pre.js @@ -786,3 +786,16 @@ function finishTest() { document.body.appendChild(epilogue); } +/// Prefer `call(() => { ... })` to `(() => { ... })()`\ +/// This way, it's clear up-front that we're calling not just defining. +function call(fn) { + return fn(); +} + +/// `for (const i of range(3))` => 0, 1, 2 +/// Don't use `for...in range(n)`, it will not work. +function* range(n) { + for (let i = 0; i < n; i++) { + yield i; + } +} From 2b34ea4730e7afef3636be6c35327a655221b014 Mon Sep 17 00:00:00 2001 From: Jeff Gilbert Date: Thu, 18 Nov 2021 16:12:14 -0700 Subject: [PATCH 2/3] Make webgl1 non-RGBA8 formats `render: undefined`. --- .../misc/format-filterable-renderable.html | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/sdk/tests/conformance/textures/misc/format-filterable-renderable.html b/sdk/tests/conformance/textures/misc/format-filterable-renderable.html index d0603bb511..df7694b821 100644 --- a/sdk/tests/conformance/textures/misc/format-filterable-renderable.html +++ b/sdk/tests/conformance/textures/misc/format-filterable-renderable.html @@ -97,14 +97,14 @@ // GLES 2.0.25 p63 const FORMAT_INFO_WEBGL1 = { - RGBA8 : { filter: true, render: true , unpack: ['RGBA', 'UNSIGNED_BYTE'] }, - RGB8 : { filter: true, render: true , unpack: ['RGB', 'UNSIGNED_BYTE'] }, - RGBA4 : { filter: true, render: true , unpack: ['RGBA', 'UNSIGNED_SHORT_4_4_4_4'] }, - RGB5_A1: { filter: true, render: true , unpack: ['RGBA', 'UNSIGNED_SHORT_5_5_5_1'] }, - RGB565 : { filter: true, render: true , unpack: ['RGB', 'UNSIGNED_SHORT_5_6_5'] }, - LA8 : { filter: true, render: false, unpack: ['LUMINANCE_ALPHA', 'UNSIGNED_BYTE'] }, - L8 : { filter: true, render: false, unpack: ['LUMINANCE', 'UNSIGNED_BYTE'] }, - A8 : { filter: true, render: false, unpack: ['ALPHA', 'UNSIGNED_BYTE'] }, + RGBA8 : { filter: true, render: true , unpack: ['RGBA', 'UNSIGNED_BYTE'] }, + RGB8 : { filter: true, render: undefined, unpack: ['RGB', 'UNSIGNED_BYTE'] }, + RGBA4 : { filter: true, render: undefined, unpack: ['RGBA', 'UNSIGNED_SHORT_4_4_4_4'] }, + RGB5_A1: { filter: true, render: undefined, unpack: ['RGBA', 'UNSIGNED_SHORT_5_5_5_1'] }, + RGB565 : { filter: true, render: undefined, unpack: ['RGB', 'UNSIGNED_SHORT_5_6_5'] }, + LA8 : { filter: true, render: false , unpack: ['LUMINANCE_ALPHA', 'UNSIGNED_BYTE'] }, + L8 : { filter: true, render: false , unpack: ['LUMINANCE', 'UNSIGNED_BYTE'] }, + A8 : { filter: true, render: false , unpack: ['ALPHA', 'UNSIGNED_BYTE'] }, }; // GLES 3.0.6 p130-132 @@ -331,7 +331,11 @@ gl.TEXTURE_2D, tex, 0); const status = gl.checkFramebufferStatus(gl.FRAMEBUFFER); const wasRenderable = (status == gl.FRAMEBUFFER_COMPLETE); - expect('color-renderable', wasRenderable, !!info.render); + if (info.render === undefined) { + debug(`Non-normative: color-renderable was ${wasRenderable}`); + } else { + expect('color-renderable', wasRenderable, !!info.render); + } if (wasRenderable) { gl.clearColor(0,0,0,0); gl.clearDepth(0); From 6124ff9a5d892dfa1e62d520df60b1ead84c2a01 Mon Sep 17 00:00:00 2001 From: Jeff Gilbert Date: Thu, 18 Nov 2021 16:39:08 -0700 Subject: [PATCH 3/3] Require all RGB and RGBA textures to be renderable in webgl1. --- .../misc/format-filterable-renderable.html | 8 ++++---- specs/latest/1.0/index.html | 16 +++++++++++++--- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/sdk/tests/conformance/textures/misc/format-filterable-renderable.html b/sdk/tests/conformance/textures/misc/format-filterable-renderable.html index df7694b821..debbacab20 100644 --- a/sdk/tests/conformance/textures/misc/format-filterable-renderable.html +++ b/sdk/tests/conformance/textures/misc/format-filterable-renderable.html @@ -98,10 +98,10 @@ // GLES 2.0.25 p63 const FORMAT_INFO_WEBGL1 = { RGBA8 : { filter: true, render: true , unpack: ['RGBA', 'UNSIGNED_BYTE'] }, - RGB8 : { filter: true, render: undefined, unpack: ['RGB', 'UNSIGNED_BYTE'] }, - RGBA4 : { filter: true, render: undefined, unpack: ['RGBA', 'UNSIGNED_SHORT_4_4_4_4'] }, - RGB5_A1: { filter: true, render: undefined, unpack: ['RGBA', 'UNSIGNED_SHORT_5_5_5_1'] }, - RGB565 : { filter: true, render: undefined, unpack: ['RGB', 'UNSIGNED_SHORT_5_6_5'] }, + RGB8 : { filter: true, render: true , unpack: ['RGB', 'UNSIGNED_BYTE'] }, + RGBA4 : { filter: true, render: true , unpack: ['RGBA', 'UNSIGNED_SHORT_4_4_4_4'] }, + RGB5_A1: { filter: true, render: true , unpack: ['RGBA', 'UNSIGNED_SHORT_5_5_5_1'] }, + RGB565 : { filter: true, render: true , unpack: ['RGB', 'UNSIGNED_SHORT_5_6_5'] }, LA8 : { filter: true, render: false , unpack: ['LUMINANCE_ALPHA', 'UNSIGNED_BYTE'] }, L8 : { filter: true, render: false , unpack: ['LUMINANCE', 'UNSIGNED_BYTE'] }, A8 : { filter: true, render: false , unpack: ['ALPHA', 'UNSIGNED_BYTE'] }, diff --git a/specs/latest/1.0/index.html b/specs/latest/1.0/index.html index 9c77dd32c9..2a1de406f3 100644 --- a/specs/latest/1.0/index.html +++ b/specs/latest/1.0/index.html @@ -3892,9 +3892,19 @@

Framebuffer Object Attachments

framebuffer being framebuffer complete:
    -
  • COLOR_ATTACHMENT0 = RGBA/UNSIGNED_BYTE texture -
  • COLOR_ATTACHMENT0 = RGBA/UNSIGNED_BYTE texture + DEPTH_ATTACHMENT = DEPTH_COMPONENT16 renderbuffer -
  • COLOR_ATTACHMENT0 = RGBA/UNSIGNED_BYTE texture + DEPTH_STENCIL_ATTACHMENT = DEPTH_STENCIL renderbuffer +
  • renderbuffer or color-renderable texture +
  • renderbuffer or color-renderable texture + DEPTH_ATTACHMENT = DEPTH_COMPONENT16 renderbuffer +
  • renderbuffer or color-renderable texture + DEPTH_STENCIL_ATTACHMENT = DEPTH_STENCIL renderbuffer +
+ +A texture is color-renderable if it has any of the following format-type pairs: + +
    +
  • RGBA, UNSIGNED_BYTE +
  • RGB, UNSIGNED_BYTE +
  • RGBA, UNSIGNED_SHORT_4_4_4_4 +
  • RGBA, UNSIGNED_SHORT_4_4_4_4 +
  • RGB, UNSIGNED_SHORT_5_6_5

Texture Upload Width and Height