| Name |
Last commit
|
Last update |
|---|---|---|
| .. | ||
| common | ||
| compiler | ||
| libANGLE | ||
| libEGL | ||
| libGLESv2 | ||
| tests | ||
| third_party | ||
| angle.gyp | ||
| commit.h | ||
| commit_id.py | ||
| compiler.gypi | ||
| copy_compiler_dll.bat | ||
| libEGL.gypi | ||
| libGLESv2.gypi |
HLSL doesn't support dynamic indexing of matrices and vectors, so replace
that with helper functions that unroll dynamic indexing into switch/case
and static indexing.
Both the indexed vector/matrix expression and the index may have side
effects, and these will be evaluated correctly. If necessary, index
expressions that have side effects will be written to a temporary
variable that will replace the index.
Besides dEQP tests, this change is tested by a WebGL 2 conformance test.
In the case that a dynamic index is out-of-range, the base ESSL 3.00 spec
allows undefined behavior. KHR_robust_buffer_access_behavior adds the
requirement that program termination should not occur and that
out-of-range reads must return either a value from the active program's
memory or zero, and out-of-range writes should only affect the active
program's memory or do nothing. This patch clamps out-of-range indices so
that either the first or last item of the matrix/vector is accessed.
The code is not transformed in case the it fits within the limited subset
of ESSL 1.00 given in Appendix A of the spec. If the code isn't within
the restricted subset, even ESSL 1.00 shaders may require this
workaround.
BUG=angleproject:1116
TEST=dEQP-GLES3.functional.shaders.indexing.* (all pass after change)
WebGL 2 conformance tests (glsl3/vector-dynamic-indexing.html)
Change-Id: I024722ef4ca1e14d5ad47fdc540397e18858bed6
Reviewed-on: https://chromium-review.googlesource.com/290515Reviewed-by:
Jamie Madill <jmadill@chromium.org>
Tested-by:
Olli Etuaho <oetuaho@nvidia.com>
| Name |
Last commit
|
Last update |
|---|---|---|
| .. | ||
| common | Loading commit data... | |
| compiler | Loading commit data... | |
| libANGLE | Loading commit data... | |
| libEGL | Loading commit data... | |
| libGLESv2 | Loading commit data... | |
| tests | Loading commit data... | |
| third_party | Loading commit data... | |
| angle.gyp | Loading commit data... | |
| commit.h | Loading commit data... | |
| commit_id.py | Loading commit data... | |
| compiler.gypi | Loading commit data... | |
| copy_compiler_dll.bat | Loading commit data... | |
| libEGL.gypi | Loading commit data... | |
| libGLESv2.gypi | Loading commit data... |