Bug 107030

Summary: [SNB][WebGL] conformance/rendering/draw-elements-out-of-bounds.html fails with NO_ERROR
Product: Mesa Reporter: Leonardo <kinetocore>
Component: Drivers/DRI/i965Assignee: Intel 3D Bugs Mailing List <intel-3d-bugs>
Status: RESOLVED FIXED QA Contact: Intel 3D Bugs Mailing List <intel-3d-bugs>
Severity: normal    
Priority: medium    
Version: 18.0   
Hardware: x86-64 (AMD64)   
OS: Linux (All)   
Whiteboard:
i915 platform: i915 features:
Attachments: glxinfo

Description Leonardo 2018-06-25 13:24:14 UTC
Created attachment 140323 [details]
glxinfo

https://www.khronos.org/registry/webgl/sdk/tests/webgl-conformance-tests.html

Using the WebGL 1.0.4 conformance test on my Sandybridge laptop.

conformance/rendering/draw-elements-out-of-bounds.html (Passed: 43/44 Failed: 1/44 in 621.0 ms)

    failed: getError expected: INVALID_OPERATION. Was NO_ERROR : after evaluating: gl.drawElements(gl.TRIANGLES, 0, gl.UNSIGNED_BYTE, 0)

The other subtests are OK.

I'm using Mesa 1.8.1.1 on Firefox 60.0.2 Manjaro Linux (i've attached a complete glxinfo).
Comment 1 Denis 2018-07-03 11:03:38 UTC
hi, I checked latests released stable mesa version on ubuntu,

ubuntu 16.04
firefox 60.0.2 (latest)
chromium (66.0.3359.181)
mesa-version for FF (18.1.3 stable)
for Chromium (18.2.0 git-c7726fbfa5)

Results:

failed Mozzila (SNB, SKL)
passed Chromium (SNB, SKL)
_____
I would say that issue might be in FF browser.
Comment 2 Leonardo 2018-12-12 19:00:14 UTC
I've retested 2 times the WebGL CTS 1.0.4 with Mesa 18.2.6 and Firefox 64.0 on Manjaro Linux up to date and now the test pass correctly

-----------------------------

conformance/rendering/draw-elements-out-of-bounds.html (Passed: 44/44 in 748.0 ms)

Test of drawElements with out-of-bounds parameters

On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".

Test null index buffer
PASS getError was expected value: INVALID_OPERATION : after evaluating: gl.drawElements(gl.TRIANGLES, 0, gl.UNSIGNED_BYTE, 0)

Test empty index buffer
PASS getError was expected value: NO_ERROR : after evaluating: gl.drawElements(gl.TRIANGLES, 0, gl.UNSIGNED_BYTE, 0)
PASS getError was one of: NO_ERROR or INVALID_OPERATION : after evaluating: gl.drawElements(gl.TRIANGLES, 3, gl.UNSIGNED_BYTE, 0)
PASS getError was one of: NO_ERROR or INVALID_OPERATION : after evaluating: gl.drawElements(gl.TRIANGLES, 10000, gl.UNSIGNED_BYTE, 0)
PASS getError was one of: NO_ERROR or INVALID_OPERATION : after evaluating: gl.drawElements(gl.TRIANGLES, 1, gl.UNSIGNED_BYTE, 0)
PASS getError was expected value: INVALID_VALUE : after evaluating: gl.drawElements(gl.TRIANGLES, -1, gl.UNSIGNED_BYTE, 0)
PASS getError was expected value: INVALID_VALUE : after evaluating: gl.drawElements(gl.TRIANGLES, 0, gl.UNSIGNED_BYTE, -1)
PASS getError was expected value: INVALID_VALUE : after evaluating: gl.drawElements(gl.TRIANGLES, -1, gl.UNSIGNED_BYTE, 1)
PASS getError was expected value: INVALID_VALUE : after evaluating: gl.drawElements(gl.TRIANGLES, 1, gl.UNSIGNED_BYTE, -1)
PASS getError was expected value: INVALID_VALUE : after evaluating: gl.drawElements(gl.TRIANGLES, 0xffffffff, gl.UNSIGNED_BYTE, 0)

Test buffer with 3 byte indexes
PASS getError was expected value: NO_ERROR : after evaluating: gl.drawElements(gl.TRIANGLES, 3, gl.UNSIGNED_BYTE, 0)
PASS getError was one of: NO_ERROR or INVALID_OPERATION : after evaluating: gl.drawElements(gl.TRIANGLES, 3, gl.UNSIGNED_BYTE, 2)
PASS getError was one of: NO_ERROR or INVALID_OPERATION : after evaluating: gl.drawElements(gl.TRIANGLES, 10000, gl.UNSIGNED_BYTE, 0)
PASS getError was expected value: INVALID_VALUE : after evaluating: gl.drawElements(gl.TRIANGLES, -1, gl.UNSIGNED_BYTE, 0)
PASS getError was expected value: INVALID_VALUE : after evaluating: gl.drawElements(gl.TRIANGLES, 0, gl.UNSIGNED_BYTE, -1)
PASS getError was expected value: INVALID_VALUE : after evaluating: gl.drawElements(gl.TRIANGLES, -1, gl.UNSIGNED_BYTE, 1)
PASS getError was expected value: INVALID_VALUE : after evaluating: gl.drawElements(gl.TRIANGLES, 1, gl.UNSIGNED_BYTE, -1)
PASS getError was expected value: INVALID_VALUE : after evaluating: gl.drawElements(gl.TRIANGLES, 0xffffffff, gl.UNSIGNED_BYTE, 0)
PASS getError was expected value: NO_ERROR : after evaluating: gl.drawElements(gl.TRIANGLES, 0, gl.UNSIGNED_BYTE, 4)
PASS getError was expected value: INVALID_OPERATION : after evaluating: gl.drawElements(gl.TRIANGLES, 10000, gl.UNSIGNED_BYTE, 10000)
PASS getError was expected value: NO_ERROR : after evaluating: gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, (new Uint8Array([ 3, 0, 1, 2 ])).subarray(1), gl.STATIC_DRAW)
PASS getError was expected value: NO_ERROR : after evaluating: gl.drawElements(gl.TRIANGLES, 3, gl.UNSIGNED_BYTE, 0)
PASS getError was expected value: NO_ERROR : after evaluating: gl.bufferSubData(gl.ELEMENT_ARRAY_BUFFER, 0, new Uint8Array([ 3, 0, 1]))
PASS getError was one of: INVALID_OPERATION or NO_ERROR : after evaluating: gl.drawElements(gl.TRIANGLES, 3, gl.UNSIGNED_BYTE, 0)
PASS getError was expected value: NO_ERROR : after evaluating: gl.bufferSubData(gl.ELEMENT_ARRAY_BUFFER, 0, (new Uint8Array([ 3, 0, 1, 2 ])).subarray(1))
PASS getError was expected value: NO_ERROR : after evaluating: gl.drawElements(gl.TRIANGLES, 3, gl.UNSIGNED_BYTE, 0)
PASS getError was expected value: NO_ERROR : after evaluating: gl.drawElements(gl.TRIANGLES, 0, gl.UNSIGNED_BYTE, 0)

Test buffer with interleaved (3+2) float vectors
PASS getError was expected value: NO_ERROR : after evaluating: gl.drawElements(gl.TRIANGLES, 9, gl.UNSIGNED_SHORT, 0)
PASS getError was expected value: INVALID_OPERATION : after evaluating: gl.drawElements(gl.TRIANGLES, 9, gl.UNSIGNED_SHORT, 1000)
PASS getError was expected value: INVALID_OPERATION : after evaluating: gl.drawElements(gl.TRIANGLES, 12, gl.UNSIGNED_SHORT, 0)
PASS getError was expected value: INVALID_OPERATION : after evaluating: gl.drawElements(gl.TRIANGLES, 15, gl.UNSIGNED_SHORT, 0)
PASS getError was expected value: INVALID_OPERATION : after evaluating: gl.drawElements(gl.TRIANGLES, 18, gl.UNSIGNED_SHORT, 0)
PASS getError was expected value: INVALID_OPERATION : after evaluating: gl.drawElements(gl.TRIANGLES, 3, gl.UNSIGNED_SHORT, 30)
PASS getError was expected value: INVALID_VALUE : after evaluating: gl.drawElements(gl.TRIANGLES, 0xffffffff, gl.UNSIGNED_SHORT, 0)
PASS getError was expected value: INVALID_OPERATION : after evaluating: gl.drawElements(gl.TRIANGLES, 1, gl.UNSIGNED_SHORT, 0xffffffff)
PASS getError was expected value: INVALID_OPERATION : after evaluating: gl.drawElements(gl.TRIANGLES, 0x7fffffff, gl.UNSIGNED_SHORT, 0)
PASS getError was expected value: NO_ERROR : after evaluating: gl.drawElements(gl.TRIANGLES, 0, gl.UNSIGNED_SHORT, 0)
PASS getError was expected value: NO_ERROR : after evaluating: gl.drawElements(gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0)
PASS getError was expected value: INVALID_OPERATION : after evaluating: gl.drawElements(gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 1)
PASS getError was expected value: NO_ERROR : after evaluating: gl.drawElements(gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 2)
PASS getError was expected value: INVALID_OPERATION : after evaluating: gl.drawElements(gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0)

Test buffer setting attrib 0 to a buffer too small and disable it.
PASS getError was expected value: NO_ERROR : after evaluating: gl.drawElements(gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 2)
PASS getError was expected value: INVALID_OPERATION : after evaluating: gl.drawElements(gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 2)

PASS successfullyParsed is true

TEST COMPLETE

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.