Bug 62510

Summary: [i965 1.0.2]Webgl conformance/uniforms/gl-uniform-arrays.html fail
Product: Mesa Reporter: lu hua <huax.lu>
Component: Drivers/DRI/i965Assignee: Ian Romanick <idr>
Status: RESOLVED NOTOURBUG QA Contact: Intel 3D Bugs Mailing List <intel-3d-bugs>
Severity: normal    
Priority: medium CC: apinheiro, christophe.prigent
Version: unspecified   
Hardware: All   
OS: Linux (All)   
Whiteboard:
i915 platform: i915 features:

Description lu hua 2013-03-19 08:06:52 UTC
System Environment:
--------------------------
Arch:           86_64
Platform:       Ironlake
Libdrm:		(master)libdrm-2.4.42-7-g36a2daad2416ad55a859c483b0d7ed93a5eff6e0
Mesa:	(master)2da8ee16a8b126d15f34552916c77b203be326db
Xserver:(master)xorg-server-1.14.0-1-g5047810a4c20fab444b8c6eb146c55dcdb0d4219
Xf86_video_intel:(master)2.21.4-28-g16dac417c8049d65b3641e0f662865772faad61f
Cairo:		(master)c141615a7fa632a2435b49f3949ed1fc9962af1f
Libva:		(staging)0b07495fc24646b47952b8df7d4e6d2df2a0f72c
Libva_intel_driver:(staging)825c76ee544cd35cd459d86068f5301cd5319108
Kernel:	(drm-intel-nightly) 11084b07471a0b0a4379083e25e7b4f3414af3c3

Bug detailed description:
-------------------------
It fails on ironlake, sandybridge, ivybridge and haswell with mesa master branch and 9.1 branch. 
It fails on webgl conformance 1.0.2.
Following cases also fail on 1.0.2:
conformance/buffers/index-validation.html
conformance/context/constants.html
conformance/context/context-attributes-alpha-depth-stencil-antialias.html
conformance/extensions/oes-texture-float.html
conformance/extensions/webgl-compressed-texture-s3tc.html
conformance/glsl/literals/float_literal.vert.html
conformance/glsl/misc/attrib-location-length-limits.html
conformance/glsl/misc/glsl-long-variable-names.html
conformance/glsl/misc/shader-varying-packing-restrictions.html
conformance/glsl/misc/shader-with-256-character-identifier.frag.html
conformance/glsl/misc/shader-with-conditional-scoping.html
conformance/glsl/misc/shader-with-hex-int-constant-macro.html
conformance/glsl/misc/shader-with-non-reserved-words.html
conformance/glsl/misc/shader-with-reserved-words.html
conformance/glsl/misc/shader-with-similar-uniform-array-names.html
conformance/glsl/misc/shader-with-vec4-vec3-vec4-conditional.html
conformance/glsl/misc/shaders-with-varyings.html
conformance/glsl/misc/struct-nesting-exceeds-maximum.html
conformance/glsl/misc/uniform-location-length-limits.html
conformance/glsl/misc/shader-with-global-variable-precision-mismatch.html
conformance/glsl/reserved/webgl_preprocessor_reserved.html
conformance/misc/functions-returning-strings.html
conformance/misc/object-deletion-behaviour.html
conformance/misc/webgl-specific.html
conformance/programs/gl-bind-attrib-location-long-names-test.html
conformance/renderbuffers/framebuffer-object-attachment.html
conformance/state/gl-enable-enum-test.html
conformance/state/gl-get-calls.html
conformance/textures/compressed-tex-image.html
conformance/textures/gl-get-tex-parameter.html
conformance/textures/gl-teximage.html
conformance/textures/tex-image-and-sub-image-2d-with-canvas-rgb565.html
conformance/textures/tex-image-and-sub-image-2d-with-canvas-rgba4444.html
conformance/textures/tex-image-and-sub-image-2d-with-canvas-rgba5551.html
conformance/textures/tex-image-and-sub-image-2d-with-image-data-rgb565.html
conformance/textures/tex-image-and-sub-image-2d-with-image-data-rgba4444.html
conformance/textures/tex-image-and-sub-image-2d-with-image-data-rgba5551.html
conformance/textures/tex-image-and-sub-image-2d-with-image-rgb565.html
conformance/textures/tex-image-and-sub-image-2d-with-image-rgba4444.html
conformance/textures/tex-image-and-sub-image-2d-with-image-rgba5551.html
conformance/textures/texture-sub-image-cube-maps.html
conformance/uniforms/gl-uniform-arrays.html
conformance/uniforms/gl-uniformmatrix4fv.html

output:
conformance/canvas/drawingbuffer-test.html (26 of 30 passed)
failed: gl.getParameter(gl.MAX_VIEWPORT_DIMS)[0] should be 8192. Was 0.
failed: gl.getParameter(gl.MAX_VIEWPORT_DIMS)[1] should be 8192. Was 0.
failed: gl.getParameter(gl.VIEWPORT)[2] should be 8224. Was 0.
failed: gl.getParameter(gl.VIEWPORT)[3] should be 8. Was 0.

messages:
WebGL Canvas.drawingBufferWidth,drawingBufferHeight Conformance Tests

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


PASS context exists
PASS gl.drawingBufferWidth is gl.canvas.width
PASS gl.drawingBufferHeight is gl.canvas.height
MAX_VIEWPORT_DIMS: 8192, 8192
PASS maxSize[0] > 0 is true
PASS maxSize[1] > 0 is true

testing canvas width = 16, height = 32
PASS context exists
PASS gl.getParameter(gl.MAX_VIEWPORT_DIMS)[0] is maxSize[0]
PASS gl.getParameter(gl.MAX_VIEWPORT_DIMS)[1] is maxSize[1]
PASS gl.getParameter(gl.VIEWPORT)[0] is 0
PASS gl.getParameter(gl.VIEWPORT)[1] is 0
PASS gl.getParameter(gl.VIEWPORT)[2] is gl.drawingBufferWidth
PASS gl.getParameter(gl.VIEWPORT)[3] is gl.drawingBufferHeight

testing resizing canvas to width = 16, height = 32
PASS gl.getParameter(gl.VIEWPORT)[0] is oldViewport[0]
PASS gl.getParameter(gl.VIEWPORT)[1] is oldViewport[1]
PASS gl.getParameter(gl.VIEWPORT)[2] is oldViewport[2]
PASS gl.getParameter(gl.VIEWPORT)[3] is oldViewport[3]
PASS gl.getError() is gl.NO_ERROR

testing canvas width = 8224, height = 8
PASS context exists
FAIL gl.getParameter(gl.MAX_VIEWPORT_DIMS)[0] should be 8192. Was 0.
FAIL gl.getParameter(gl.MAX_VIEWPORT_DIMS)[1] should be 8192. Was 0.
PASS gl.getParameter(gl.VIEWPORT)[0] is 0
PASS gl.getParameter(gl.VIEWPORT)[1] is 0
FAIL gl.getParameter(gl.VIEWPORT)[2] should be 8224. Was 0.
FAIL gl.getParameter(gl.VIEWPORT)[3] should be 8. Was 0.

testing resizing canvas to width = 8224, height = 8
PASS gl.getParameter(gl.VIEWPORT)[0] is oldViewport[0]
PASS gl.getParameter(gl.VIEWPORT)[1] is oldViewport[1]
PASS gl.getParameter(gl.VIEWPORT)[2] is oldViewport[2]
PASS gl.getParameter(gl.VIEWPORT)[3] is oldViewport[3]
PASS gl.getError() is gl.NO_ERROR

PASS successfullyParsed is true

TEST COMPLETE

Reproduce steps:
----------------
1. start X
2.  https://www.khronos.org/registry/webgl/conformance-suites/1.0.2/webgl-conformance-tests.html run: conformance/canvas/drawingbuffer-test.html
Comment 1 Eric Anholt 2013-05-28 21:50:58 UTC
This also passes for me with chromium and mesa master on ivb.  Browser details required.
Comment 2 lu hua 2013-05-29 02:48:31 UTC
Update chrome to version 27.0.1453.73.Following cases still fail:
conformance/glsl/functions/glsl-function-acos.html
conformance/glsl/functions/glsl-function-asin.html
conformance/glsl/functions/glsl-function-atan-xy.html
conformance/glsl/functions/glsl-function-atan.html
conformance/glsl/functions/glsl-function-cos.html
conformance/glsl/functions/glsl-function-sin.html
conformance/glsl/functions/glsl-function-smoothstep-float.html
conformance/glsl/literals/float_literal.vert.html
conformance/glsl/misc/shader-varying-packing-restrictions.html
conformance/glsl/misc/shader-with-global-variable-precision-mismatch.html
conformance/glsl/misc/shaders-with-varyings.html
conformance/glsl/samplers/glsl-function-texture2dlod.html
conformance/glsl/variables/glsl-built-ins.html
conformance/uniforms/gl-uniform-arrays.html
Comment 3 Ian Romanick 2014-12-17 20:00:26 UTC
Are you still able to reproduce this?
Comment 4 lu hua 2014-12-19 07:18:02 UTC
Test on IVB with latest mesa master branch. conformance/uniforms/gl-uniform-arrays.html still fails.
Comment 5 Ian Romanick 2014-12-19 19:49:54 UTC
Okay.  I just tried with Mesa master (e06b077) and Firefox 26, and this test passes.

As was requested over a year ago, we need more details about your browser and its configuration.
Comment 6 lu hua 2014-12-23 07:18:54 UTC
(In reply to Ian Romanick from comment #5)
> Okay.  I just tried with Mesa master (e06b077) and Firefox 26, and this test
> passes.
> 
> As was requested over a year ago, we need more details about your browser
> and its configuration.

I test conformance/uniforms/gl-uniform-arrays.html on latest mesa master branch and chrome 39. I will test full webglc case.
Comment 7 lu hua 2014-12-24 05:58:18 UTC
Test on HSW with the latest Mesa master branch and 10.4(5fe79b0b127). Chrome version is 39.

Following cases fail on both master and 10.4 branch:
conformance/extensions/webgl-debug-shaders.html
conformance/glsl/misc/shader-varying-packing-restrictions.html
conformance/glsl/literals/float_literal.vert.html
conformance/glsl/misc/shaders-with-varyings.html
conformance/misc/webgl-specific.html
conformance/ogles/mustpass.run.txt
conformance/typedarrays/array-unit-tests.html
Comment 8 Alejandro Piñeiro (freenode IRC: apinheiro) 2016-02-18 11:01:44 UTC
(In reply to lu hua from comment #7)
> Test on HSW with the latest Mesa master branch and 10.4(5fe79b0b127). Chrome
> version is 39.

I tested it with ubuntu 15.10 mesa (11.0.2) and current master (git-edf774b) on both Chromium (Chromium 48.0.2564.82 Ubuntu 15.10) and Chrome (Google Chrome 48.0.2564.109). Didn't try with Firefox, as comment #5 mentions that was working properly.

> Following cases fail on both master and 10.4 branch:
> conformance/extensions/webgl-debug-shaders.html
> conformance/glsl/misc/shader-varying-packing-restrictions.html
> conformance/glsl/literals/float_literal.vert.html
> conformance/glsl/misc/shaders-with-varyings.html
> conformance/misc/webgl-specific.html
> conformance/ogles/mustpass.run.txt
> conformance/typedarrays/array-unit-tests.html

Now the tests failing are:
conformance/glsl/literals/float_literal.vert.html: 1 tests failed
conformance/limits/gl-min-textures.html: 2 tests failed

float-literal was present on comment #7 list, gl-min-textures not.

In both cases, they are failing because the shaders are wrong on version #130, as google-chrome expose the webgl shaders with that version. But WebGL 1.0 specifies OpenGL ES 1.0 [1], and those shaders are correct with #version 100. 

Going to the details:

* float-literal is failing because the vertex shader doesn't write on gl_Position. This is allowed on OpenGL ES 1.0. See the spec, section 10.13 [2]

There is a piglit test handling this scenario, that properly passes:
./bin/shader_runner_gles2 ./tests/spec/glsl-es-1.00/linker/glsl-no-glposition.shader_test -auto

* gl-min-textures is failing because it is accessing a sampler array with a constant-index-expression. This is allowed on OpengGL ES 1.0. See the spec, Appendix A [2]

There is a piglit test handling this scenario, that properly passes:
./bin/glslparsertest_gles2 tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/sampler-array-index.frag pass 1.00

FWIW, gl-min-textures passes properly using epiphany browser.

With all this in mind, I think that it would be safe to close the bug as NOTOURBUG, as the problem is caused by the glsl version specified by chrome when exporting the shaders. But I would let people give his opinion, just in case.

[1] https://www.khronos.org/registry/webgl/specs/1.0/#4.3
[2] https://www.khronos.org/registry/gles/specs/2.0/GLSL_ES_Specification_1.0.17.pdf
Comment 9 Alejandro Piñeiro (freenode IRC: apinheiro) 2016-05-27 07:44:09 UTC
(In reply to Alejandro Piñeiro (freenode IRC: apinheiro) from comment #8)
 
> With all this in mind, I think that it would be safe to close the bug as
> NOTOURBUG, as the problem is caused by the glsl version specified by chrome
> when exporting the shaders. But I would let people give his opinion, just in
> case.

Three months without answer. I think that it would be better to close it as I explained on comment 8. Reopen if the issue persists.

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.