|
fdb400d7
|
2017-12-01T15:12:36
|
|
Test multiview extension warning
Ensure that a warning is generated if the shader tries to set a global
layout qualifier. Since a num_views layout qualifier is the only valid
global layout qualifier in GLSL ES 1.00, it's sufficient that
checkCanUseExtension() that generates the warning is called for
"num_views" specifically. Parsing "layout" or "in" storage qualifier
may use the simpler isExtensionEnabled() check that doesn't generate a
warning.
BUG=angleproject:2238
TEST=angle_unittests
Change-Id: I19caff7be9cb4f53c581b5f5526b7cade08469d6
Reviewed-on: https://chromium-review.googlesource.com/803577
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
3de2703d
|
2017-11-30T12:16:47
|
|
Fix handling matrix qualifiers on block members
Individual block member row_major/column_major layout qualifiers may
override the qualifiers set on the block. During parsing, this was
already being handled correctly, so that the qualifier is resolved for
each block member and recorded for each TField / InterfaceBlockField.
Now we always write the qualifiers on a per-member granularity to the
output GLSL shaders, so that the native driver gets the correct
per-member qualifiers. This replaces earlier behavior where the matrix
qualifiers were only written per-block.
Also only use qualifiers from individual members in block layout.
Since the block-level qualifier information is no longer used after
parsing, it is no longer kept in the AST. A dummy value is still set
to the InterfaceBlock structs exposed through the ShaderVars
interface, since that has existing usage in Chromium that needs to be
removed before the field can be removed.
Some AMD OpenGL drivers don't seem to handle matrix layout qualifiers
correctly, so most of the added tests need to be skipped for AMD GL.
On NVIDIA and Intel the tests pass.
BUG=angleproject:2271
TEST=angle_unittests, angle_end2end_tests,
dEQP-GLES31.functional.program_interface_query.uniform.matrix*
Change-Id: I1baa7a633bc2da548743c2190cb72db491b5227a
Reviewed-on: https://chromium-review.googlesource.com/800174
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
18841310
|
2017-11-28T12:48:47
|
|
Clean up MatchOutputCodeTest usage
It's cleaner to use a generic function to test that a sequence of
strings is found in a specific order rather than fetching and
comparing string locations in test case code.
Also make sure that string occurrences can't overlap when looking for
a specific number of occurrences of the same string.
TEST=angle_unittests
Change-Id: I8ca66c73c7aaa5be8469ded466f51d97a36c801b
Reviewed-on: https://chromium-review.googlesource.com/793041
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
ae04e1e4
|
2017-11-27T16:00:39
|
|
Fix scalarizing vec and mat constructor args
Scalarizing vec and mat constructor args can generate new statements
in the parent block of the constructor. To preserve the correct
execution order of expressions, scalarized vector and matrix
constructors need to be first moved out from inside loop conditions
and sequence operators. This is done whenever the compiler flag to
scalarize args is on.
BUG=chromium:772653
TEST=angle_unittests
Change-Id: Id40f8d848a9d087e186ef2e680c8e4cd440221d9
Reviewed-on: https://chromium-review.googlesource.com/790412
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
f13cadd8
|
2017-11-28T10:53:09
|
|
Fix checking negative index when indexing matrix/vector
It's important that the test against the maximum of the valid range
is only done if the index is positive, so the sanitized index value
is guaranteed to end up in the valid range.
This fixes a regression from commit "Add GLSL support for
runtime-sized arrays in SSBOs".
BUG=chromium:789029
TEST=angle_unittests
Change-Id: Ic7125e383a64e46994b072df6d7e642432c521af
Reviewed-on: https://chromium-review.googlesource.com/792935
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
ebee5b3b
|
2017-11-23T12:56:32
|
|
Add GLSL support for runtime-sized arrays in SSBOs
The GLSL parser now allows a runtime-sized array as the last member in
a shader storage block. Clamping indexing against the memory bounds is
done by determining the array length at runtime.
Runtime-sized arrays are used in dEQP tests for many compute shader
tests, so these now work on the OpenGL backend.
BUG=angleproject:1951
TEST=angle_unittests,
dEQP-GLES31.functional.shaders.linkage.shader_storage_block.*
dEQP-GLES31.functional.shaders.builtin_functions.*compute*
Change-Id: Ibecca24623ca8e4723af6f0e0421fe9711ea828d
Reviewed-on: https://chromium-review.googlesource.com/787976
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
|
|
465835d6
|
2017-09-26T13:34:10
|
|
Support arrays of arrays in the API
The ShaderVariable class that is used as an interface between the
compiler and the rest of the code gets arrays of arrays support.
Array of array variables are passed from the compiler just like any
other variables. However, when stored in Program state each innermost
array constitutes a separate variable. This is done to make the
implementation match the GLES specification for program interface
query APIs.
This will be tested more fully once support for parsing arrays of
arrays lands in the compiler.
TEST=angle_end2end_tests, angle_unittests
BUG=angleproject:2125
Change-Id: I0f7159000f039be92a87a52b3b68cd9a215a21cb
Reviewed-on: https://chromium-review.googlesource.com/684742
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
39f74df5
|
2017-11-20T16:09:57
|
|
Remove unreferenced struct types from the AST
This expands pruning unreferenced variables so that unreferenced named
struct types can also be removed from the AST.
Includes a small cleanup in GLSL output so that the output code
matching tests can test against clean output.
BUG=chromium:786535
TEST=angle_unittests
Change-Id: I20974ac99a797e478d82f9203c179d2d58fac268
Reviewed-on: https://chromium-review.googlesource.com/779519
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
|
|
3d70ca9c
|
2017-11-10T16:53:26
|
|
Remove unreferenced variables from the AST
Unreferenced local and global variables are now pruned from the AST.
They will be removed unless their initializer has side effects.
The CollectVariables step needs to be run after the pruning, as the
pruning may affect which interface variables are statically used.
It's also good to gather built-ins that need to be emulated after the
pruning, so unnecessary built-in emulation functions are not added to
the translator output.
This will help handle some dEQP tests for arrays of arrays that have
extremely large local arrays that are only used in an array length
query. By constant folding the length and pruning unused variables we
will avoid adding a large amount of array initialization code to the
generated shaders.
BUG=angleproject:2166
TEST=angle_unittests, angle_end2end_tests
Change-Id: Ic918bfe8f16460bcd6101d73a7a674145f5aeecd
Reviewed-on: https://chromium-review.googlesource.com/766434
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
|
|
bb27c3a1
|
2017-11-15T16:32:25
|
|
Fix VectorizeVectorScalarArithmetic statement insertion
The traverser must avoid inserting two statements to the same position
on a single traversal, so it doesn't trigger an assert.
BUG=chromium:784078
TEST=angle_unittests
Change-Id: I855054e62cc1b1cf4e6bb02af527954151c7d0e7
Reviewed-on: https://chromium-review.googlesource.com/771611
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
a3106c58
|
2017-11-03T09:39:39
|
|
ES31: Add atomic memory functions
BUG=angleproject:1442
TEST=angle_unittests, angle_end2end_tests
dEQP-GLES31.functional.compute.shared_var.atomic*
dEQP-GLES31.functional.compute.basic.shared_atomic_op*
dEQP-GLES31.functional.ssbo.atomic.*
Change-Id: I82b54fde3a852d3bd917b1e19680baa1c28fce4d
Reviewed-on: https://chromium-review.googlesource.com/765061
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
|
|
7caa80e7
|
2017-11-14T15:03:14
|
|
Edit tests to reference temporary variables
The shader translator is intended to prune unreferenced variables in
the future. To maintain test coverage when this is done, most tests
that used to have unreferenced GLSL locals and globals are edited to
use built-ins or reference the necessary variables instead.
BUG=angleproject:2166
TEST=angle_unittests, angle_end2end_tests
Change-Id: I3964e7a80d52fc04a95f57e73da6095e433095e8
Reviewed-on: https://chromium-review.googlesource.com/768740
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
7af63727
|
2017-11-13T15:03:40
|
|
Fix nullptr dereference on struct parameter error
Function parameter name string does not necessarily exist, so it's
better to use the function name as the token in the error message.
BUG=chromium:784158
TEST=angle_unittests
Change-Id: I8f3b8604fd702bdc9486b8d721a5f60de1ff3fa7
Reviewed-on: https://chromium-review.googlesource.com/765972
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
703671e9
|
2017-11-08T17:47:18
|
|
Unify extension behavior checks
Some supportsExtension and isExtensionEnabled checks are now turned
into checkCanUseExtension checks. Using checkCanUseExtension is
preferable so that warnings are generated correctly when an extension
is used and a warn directive is present.
isExtensionEnabled is still used in some places where an error message
about the extension could be confusing, particularly when a core spec
version adds support for something that is also present in an
extension.
Also make it possible to disable ARB_texture_rectangle extension using
an extension directive. ARB_texture_rectangle extension functionality
is enabled by default in GLSL when the extension is supported.
BUG=angleproject:2238
TEST=angle_unittests
Change-Id: I7455293412ff469f54bc7da79df146e7bc127379
Reviewed-on: https://chromium-review.googlesource.com/760737
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
0e883134
|
2017-10-26T09:53:50
|
|
ES31: Support EXT_geometry_shader in GLSL compiler
This patch intends to support "EXT_geometry_shader" as a valid
extension string in ANGLE GLSL compiler.
We decide to support it because in dEQP-GLES31 all geometry
shader related tests are using "EXT_geometry_shader" instead of
"OES_geometry_shader".
1. Support new extension string "EXT_geometry_shader"
2. Enable geometry shader layout qualifiers with EXT_geometry_shader
3. Enable geometry shader builtins with EXT_geometry_shader
BUG=angleproject:1941
TEST=angle_unittests
Change-Id: Iaedd01a9100ccf56243c957db36ff0c983d17060
Reviewed-on: https://chromium-review.googlesource.com/737933
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
ef7fb388
|
2017-11-07T16:33:49
|
|
Size const unsized arrays without an initializer
The array size for unsized arrays needs to be sanitized in all cases,
since subsequent checks on array indexing depend on all arrays being
sized.
BUG=chromium:781729
TEST=angle_unittests
Change-Id: I3af6c08bb249a19f7c2ef169c877a2b863eb31d3
Reviewed-on: https://chromium-review.googlesource.com/757101
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
d80f2944
|
2017-11-06T12:44:45
|
|
Struct definition not allowed as function parameter type
Struct definitions are not allowed as a function parameter type now.
This is specified in ESSL 3.00.6 section 12.10. ESSL 3.00.6 section
6.1.1 contradicts this, but that seems like a mistake, it's been fixed
in subsequent spec versions.
BUG=angleproject:2225
TEST=angle_unittests
Change-Id: I6b97d120c440f0c0a45d31bbfaf292fb497160ce
Reviewed-on: https://chromium-review.googlesource.com/754606
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
bd3cd506
|
2017-11-03T15:48:52
|
|
Clean up HLSL constructor output
Split generating HLSL struct constructors from generating built-in
type constructors, as these didn't have much in common. Struct
constructors are now only generated when they are needed, as opposed
to before, when they were generated on any use of a struct.
This changes built-in constructor naming to include "_ctor" and gets
rid of having special built-in type names just for constructors.
This will make it easier to do changes to constructor output, for
example to add constructors for structs in std140 layout. This might
be needed to implement SSBOs efficiently.
This includes one bug fix for writing out struct declarations for
varyings.
Also improves const-correctness of accessing structs through TType
in general.
BUG=angleproject:2218
TEST=angle_unittests, angle_end2end_tests
Change-Id: If865fb56f86486b9c4a2c31e016ea16427f4a5fa
Reviewed-on: https://chromium-review.googlesource.com/753883
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
b8ee9dd3
|
2017-10-30T12:43:27
|
|
Validate empty statements in switch statements
Even an empty statement like ";" is a statement according to the
grammar. They should not be allowed in switch statements before the
first case statement, but on the other hand a switch statement that
has just an empty statement after the last statement is valid.
Now the parser creates AST nodes from empty statements so that we can
validate switch statements correctly. However, they are pruned shortly
after parsing completes in PruneNoOps, so they don't affect further
processing of the AST.
BUG=angleproject:2181
TEST=angle_unittests
Change-Id: I1085056fc34b146142546fc5f2b7f3124b910ab9
Reviewed-on: https://chromium-review.googlesource.com/743621
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
6bb4f501
|
2017-10-31T14:54:00
|
|
Fix MSVS 2015 compilation of tests
"GLenum" needs to be prefixed to disambiguate between global GLenum
and sh::GLenum.
TEST=compile with MSVS 2015
Change-Id: I31a13c8d410bf32c4d5114c03f4b119aae256778
Reviewed-on: https://chromium-review.googlesource.com/746761
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
722bfb51
|
2017-10-26T17:00:11
|
|
Fix detecting duplicate field names in structures
Previously field names that were listed in the first declarator list
inside a struct declaration were not checked against each other.
BUG=angleproject:2204
TEST=angle_unittests
Change-Id: Ibf821d45556f6dfe0223dae673644f6795daf4cb
Reviewed-on: https://chromium-review.googlesource.com/739825
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
55bc905f
|
2017-10-25T17:33:06
|
|
Always consider type arrayness for atomic counters
Atomic counter arrays may be declared with various different syntax -
the array size may be declared as a part of the type or as a part of
the declarator. Take this into account when determining whether atomic
counter offsets overlap.
BUG=angleproject:1729
TEST=angle_unittests
Change-Id: I7435ded9401c4c1caab22c22d83fd2ad301df768
Reviewed-on: https://chromium-review.googlesource.com/738140
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
65c56dd9
|
2017-10-13T16:18:57
|
|
Fix incorrect hashing on built-in interface block fields
This patch intends to fix an error in translating built-in interface
block fields. Any field of a built-in interface block should be kept
and cannot be hashed.
This patch can fix a bug in handling the interface block gl_in when
we try to output the translated geometry shader string.
BUG=angleproject:1941
TEST=angle_unittest
Change-Id: Iebfba4b6a30c8942ed0f66131ad30d12ad96c62a
Reviewed-on: https://chromium-review.googlesource.com/719454
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
|
|
ca68d988
|
2017-09-18T16:41:56
|
|
ES31: Add std430 support for OpenGL backend
BUG=angleproject:1920
TEST=angle_unittests
Change-Id: Ie8e171abec053c2c5dca93d6e79db534f74520e7
Reviewed-on: https://chromium-review.googlesource.com/737532
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
9cd7163e
|
2017-10-26T14:43:20
|
|
Fix setting array sizes on a constructor
Take any array sizes that have been explicitly specified in the shader
text into account, and only set the ones that are unsized according to
the arguments.
BUG=angleproject:2125
TEST=angle_unittests
Change-Id: I37d08a86c25f7cd4f3ce5689f2c9fad444e7d5ad
Reviewed-on: https://chromium-review.googlesource.com/738141
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
|
|
454c34cb
|
2017-10-25T16:35:56
|
|
Accept valid geometry shader inputs regardless of syntax
Before, only the following style of declarations were accepted:
in float f[];
Now also these styles are accepted:
in float[] f;
in float f[], g[];
BUG=angleproject:2201
TEST=angle_unittests
Change-Id: I0af7d355a5e06a67ceef2d6bd69af7e23c180a04
Reviewed-on: https://chromium-review.googlesource.com/738234
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
55bde916
|
2017-10-25T13:41:13
|
|
Parse array specifier with a separate grammar rule
This brings the grammar closer to the GLSL ES 3.10 spec.
Some corner cases related to handling unsized arrays are fixed.
BUG=angleproject:2125
TEST=angle_unittests, angle_end2end_tests
Change-Id: I9bcf87b17b97da0e2ec2954d32037c272fde3080
Reviewed-on: https://chromium-review.googlesource.com/738233
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
8e4b355b
|
2017-08-30T14:20:58
|
|
ES31: Implement Geometry Shader inputs and outputs
This patch intends to implement Geometry Shader inputs and
outputs in ANGLE GLSL compiler.
1. Only accept arrays as the inputs of a Geometry Shader.
2. Allow unsized arrays as the inputs of a Geometry Shader after a
valid input primitive declaration and assign size to them.
3. Implement Geometry Shader outputs.
4. Allow Geometry Shader inputs and outputs using interpolation
qualifiers ('flat', 'smooth', 'centroid').
5. Allow using 'location' layout qualifier on Geometry Shader inputs
and outputs.
BUG=angleproject:1941
TEST=angle_unittests
Change-Id: Ia7e250277c61f45c8479437b567c2831ff26b433
Reviewed-on: https://chromium-review.googlesource.com/650211
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
e7c2857d
|
2017-10-23T16:29:33
|
|
Clean up direct access of ShaderVariable::arraySize
This change is pure refactoring. It's intended to help with adding
support for arrays of arrays.
BUG=angleproject:2125
TEST=angle_unittests
Change-Id: I82881a98c3c476fd6666a551ce6be255ae0de4cf
Reviewed-on: https://chromium-review.googlesource.com/733127
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
4cd889ec
|
2017-10-20T11:19:57
|
|
Remove unnecessary work from VariablePacker
The VariablePacker does not check the staticUse flag, variables should
be pre-filtered according to their staticUse flag before passing them
to CheckVariablesInPackingLimits if that's desired.
The names of the variables are also not relevant to the packing. We
keep the "name" field to make the code easier to debug, but updating
the mappedName is not useful.
This will make implementing arrays of arrays simpler.
BUG=angleproject:2125
TEST=angle_unittests
Change-Id: I5ce91885f6478ad436e6fa60ca9675e161d10256
Reviewed-on: https://chromium-review.googlesource.com/730104
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
cbcb96fc
|
2017-10-19T14:14:06
|
|
Fix switch/case last case validation for ESSL 3.10
No statement should be required after the last case label of a switch
statement in ESSL 3.10. The validation is still kept for ESSL 3.00 for
dEQP compatibility. If the dEQP tests are changed in the future, we
might consider just issuing a warning regardless of shader version.
BUG=angleproject:2189
TEST=angle_unittests
Change-Id: Ic53e71e0176668a7dbffa315712885846e217f03
Reviewed-on: https://chromium-review.googlesource.com/727802
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
2d88e9bc
|
2017-07-21T16:52:03
|
|
Guarantee that symbol nodes get unique ids
The code is refactored so that symbol nodes can only be initialized
with an unique id object. This prevents accidentally forgetting to
create an id for a symbol node.
This opens up possibilities for future optimization: For example the
names and types of symbols could be stored in a central location
inside the SymbolTable, and TIntermSymbol nodes would only need to
store the symbol id. The symbol id could be used to look up the name
and type of the node.
BUG=angleproject:1490
TEST=angle_unittests
Change-Id: Ib8c8675d31493037a5a28c7b36bb9d1113cc10f6
Reviewed-on: https://chromium-review.googlesource.com/580955
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
923ecef6
|
2017-10-11T12:01:38
|
|
Fix switch statement validation corner cases
The grammar needs to generate AST nodes even for no-op statements,
since they might be the last statement in a switch statement that is
required for switch statement validity. Change the grammar to generate
nodes from empty blocks and empty declarations.
We also need to do some further processing of the AST. This is because
PruneEmptyDeclarations will still remove empty declarations, and at
least the NVIDIA driver GLSL compiler doesn't accept some types of
no-op statements as the last statement inside a switch statement. So
after parsing has finished we do rudimentary dead code elimination to
remove dead cases from the end of switch statements.
BUG=angleproject:2181
TEST=angle_unittests
Change-Id: I586f2e4a3ac2171e65f1f0ccb7a7de220e3cc225
Reviewed-on: https://chromium-review.googlesource.com/712574
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
|
|
4cc89e2b
|
2017-08-31T14:25:54
|
|
ES31: Enable 'location' layout qualifier on shader interfaces in compiler
This patch enables 'location' layout qualifier for vertex outputs and
fragment shader inputs when the shader version is 3.1 in ANGLE GLSL
compiler and adds the check on location conflicts for these varyings.
According to GLSL ES 3.1 SPEC (Chapter 4.4.1 and Chapter 4.4.2),
'location' layout qualifier is allowed on both inputs and outputs of
vertex and fragment shaders.
'location' layout qualifier on shader interfaces is only valid on shaders
whose version is 3.1 and above. According to GLSL ES 3.0 SPEC, vertex shader
cannot have output layout qualifiers (Chapter 4.3.8.2) and fragment shader
cannot have input layout qualifiers (Chapter 4.3.8.1).
The 'location' qualifier on varyings is used in the shader interface
matching defined in OpenGL ES 3.1. (OpenGL ES 3.1 SPEC Chapter 7.4.1). This
new link rule will be added to Program.cpp in another patch.
For the OpenGL ES 3.1 extension GL_OES_geometry_shader, according to
GL_OES_shader_io_blocks SPEC (Chapter 4.4.1 and Chapter 4.4.2), 'location'
layout qualifier is both valid on geometry shader inputs and outputs. This
feature will be implemented together with other rules on geometry shader
inputs and outputs.
BUG=angleproject:2144
TEST=angle_unittests
Change-Id: I62d85f7144c177448321c2db36ed7aaeaa1fb205
Reviewed-on: https://chromium-review.googlesource.com/645366
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
84aa2dcf
|
2017-09-11T15:51:02
|
|
Add textureGather and textureGatherOffset
The patch adds new built-ins and extends the semantic parser to add
support for textureGather and textureGatherOffset.
BUG=angleproject:1442
TEST=angle_unittests
TEST=angle_deqp_gles31_tests.exe
--deqp-case=dEQP-GLES31.functional.texture.gather*
--deqp-egl-display-type=angle-gl
Change-Id: Iaf98c3420fbd61193072fdec8f5a61ac4c574101
Reviewed-on: https://chromium-review.googlesource.com/660124
Commit-Queue: Martin Radev <mradev@nvidia.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
ec3a9cbb
|
2017-09-07T12:18:01
|
|
Only support GL_OVR_multiview extension variant
The WebGL spec proposal was changed so that only GL_OVR_multiview
extension name is supported, instead of having two variants
OVR_multiview and OVR_multiview2. We're only supporting the WebGL
version of the shader extension, so we drop compiler support for
GL_OVR_multiview2. Shader restrictions were also removed from the
WebGL spec, so no special validation for how ViewID_OVR gets used is
needed.
Tests that were testing for the shader restrictions are either removed
or changed from negative tests to positive tests.
BUG=angleproject:1669
TEST=angle_unittests
Change-Id: I83f92b879376d41b727b5aca419fd75fb6f53477
Reviewed-on: https://chromium-review.googlesource.com/654608
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
15c3406a
|
2017-09-07T17:10:09
|
|
Restructure InstanceID initialization to fix HLSL warning
This patch casts gl_InstanceID to uint before doing division by the
number of views to circumvent the HLSL compiler's warning on performance
degradation.
BUG=angleproject:2062
TEST=angle_end2end_tests
Change-Id: I326530ee112f34f82becdec5239edd5054c4104f
Reviewed-on: https://chromium-review.googlesource.com/655298
Commit-Queue: Martin Radev <mradev@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
f00f7ffe
|
2017-08-31T14:39:15
|
|
Add a Uniform type info table.
Currently most uniform type info is determined by switching on the
uniform type. Some values are computed from other values, which can
result in three or more switch statements plus some multiplies or
other math. This patch attempts to improve the speed by pre computing
necessary values into constant static tables.
Improves performance by about 7% in a uniform stress test.
BUG=angleproject:1390
Change-Id: I29bef259a17f6d6536171ade4950e2d712bfd39c
Reviewed-on: https://chromium-review.googlesource.com/643791
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
c634a637
|
2017-05-18T14:09:49
|
|
Remove webgl_ prefix from emulated function names
The prefix is unnecessary now that user-defined names are prefixed in
both GLSL and HLSL output. Removing the prefix makes compiler output
a bit simpler to read.
BUG=angleproject:2038
TEST=angle_unittests
Change-Id: I9ffc508f50d6146a2d85798875c88e2c385b83fe
Reviewed-on: https://chromium-review.googlesource.com/508730
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
855d964b
|
2017-05-17T14:05:06
|
|
Prefix user-defined names in GLSL output
Now user-defined names are prefixed by _u in GLSL output in case name
hashing is not on. Internal names such as names of temporary variables
created in AST transformations are written out as such.
This makes handling of internal function names and internal variable
names consistent. It also removes the possibility of name conflicts
between user-defined names and internal names in case name hashing is
not on. In the same vein, it makes it safe to use GLSL reserved words
that are not reserved in ESSL as variable names in case name hashing
is not on.
This also makes the GLSL output more consistent with how names are
handled in HLSL output. Name hashing code is shared between
VariableInfo and OutputGLSLBase to ensure names are handled
consistently in both. The name that's used in the shader source for a
given interface variable is written out to ShaderVariable::mappedName.
An exception needs to be made for identifiers close to the length
limit, since adding any prefix would take them over the limit. But
they can be just written out as such, since we don't have any builtins
or ANGLE internal variables that have as long names and could create a
conflict.
BUG=angleproject:2139
BUG=angleproject:2038
TEST=angle_unittests, angle_end2end_tests, WebGL conformance tests
Change-Id: Id6ed052c4fab2d091227dc9a3668083053b67a38
Reviewed-on: https://chromium-review.googlesource.com/507647
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
e8ef2bc4
|
2017-08-29T13:38:57
|
|
Add compile error on using inputs with interpolation qualifier as l-value
This patch intends to fix a compile error in ANGLE GLSL compiler when
parsing an expression with inputs which has interpolation qualifiers
('flat', 'smooth' and 'centroid').
The compiler should report a compile error when a shader input with
interpolation qualifier is used as a l-value.
BUG=angleproject:2140
TEST=angle_unittests
Change-Id: I7c059d53bf001ac31d34519a98e5289797833ce7
Reviewed-on: https://chromium-review.googlesource.com/640075
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
7e1197e0
|
2017-08-24T15:48:38
|
|
Fix crash when indexing unsupported interface blocks by variable
This patch intends to fix a compiler crash when indexing an
unsupported interface blocks. We should not use UNREACHABLE() here
because the compiler will continue parsing when this kind of error
is generated. Instead, we use an ASSERT to ensure the compile error
must have been reported before when the parsing reaches here.
BUG=chromium:758159
Change-Id: I4bc63316d156d51f721123fe963106d1e81d8d32
Reviewed-on: https://chromium-review.googlesource.com/631797
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
d27f5c8d
|
2017-08-23T09:38:08
|
|
ES31: Implement GL_OES_geometry_shader built-ins in GLSL compiler
This patch intends to implement all built-in constants, variables and
functions defined in OpenGL ES 3.1 extension GL_OES_geometry_shader
in ANGLE GLSL compiler.
1. Add all built-in constants defined in GL_OES_geometry_shader.
2. Add built-in functions EmitVertex() and EndPrimitive() required
in Geometry Shader.
3. Add built-in variables gl_PrimitiveIDIn and gl_InvocationID to
Geometry Shader.
4. Add built-in variables gl_PrimitiveID and gl_Layer to both
Geometry Shader and Fragment Shader when GL_OES_geometry_shader
is enabled.
BUG=angleproject:1941
TEST=angle_unittests
Change-Id: I92821553ed0efee2ccb77fead6e065e7799819d0
Reviewed-on: https://chromium-review.googlesource.com/627670
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
96f6adfa
|
2017-08-16T11:18:54
|
|
Add support for arrays of arrays in AST processing
Data concerning arrays of arrays is added in TType.
Parsing arrays of arrays and support for arrays of arrays in
TPublicType are still left to be implemented later.
ShaderVariable interface for arrays of arrays is also left to be
implemented later.
We rely on existing test coverage to make sure that arrays of arrays
are not accidentally exposed.
BUG=angleproject:2125
TEST=angle_unittests, angle_end2end_tests, angle_deqp_gles31_tests
Change-Id: Ie17d5ac9b8d33958e9126dc0fb40bf1c81ddeec9
Reviewed-on: https://chromium-review.googlesource.com/616146
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
d8105a03
|
2017-08-08T09:54:36
|
|
ES31: Implement gl_in in Geometry Shader
This patch intends to implement geometry shader built-in interface
block instance gl_in defined in GL_OES_geometry_shader.
1. Add the definition of gl_in and its interface block gl_PerVertex
into the symbol table.
2. Support gl_Position as a member of gl_in.
3. Set the array size of gl_in when a valid input primitive type is
known.
4. Add check that it should be a compile error to index gl_in or
call length() on gl_in without a valid input primitive declaration.
This patch also adds unit tests to cover all these new features.
BUG=angleproject:1941
TEST=angle_unittests
Change-Id: I8da20c943b29c9ce904834625b396aab6302e1e1
Reviewed-on: https://chromium-review.googlesource.com/605059
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
|
|
977ee7eb
|
2017-07-21T11:38:27
|
|
Add gl_ViewportIndex to the symbol table
gl_ViewportIndex is a GLSL built-in that's needed to implement
instanced multiview. It is a bit of a special case: it only exists in
desktop GLSL and not ESSL, and it shouldn't be exposed to the parser.
We add a new level to the symbol table that's hidden from the parser
to make adding this kind of builtins in AST transforms consistent with
the way ESSL builtins are supported.
BUG=angleproject:1490
TEST=angle_unittests
Change-Id: I51b2d983950b38c8e85e4b6ed00c6b39f9b3cb03
Reviewed-on: https://chromium-review.googlesource.com/580953
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
4e619f58
|
2017-08-09T11:50:06
|
|
Add branch for viewport or layer selection in VS
The patch extends the behavior of
SH_SELECT_VIEW_IN_NV_GLSL_VERTEX_SHADER so that either the viewport
or layer is selected based on the value of the internal uniform variable
MultiviewRenderPath.
BUG=angleproject:2062
TEST=angle_end2end_tests
TEST=angle_unittests
Change-Id: Ia311b12b1fed642dac78eba8732e2535242f34fd
Reviewed-on: https://chromium-review.googlesource.com/615260
Commit-Queue: Martin Radev <mradev@nvidia.com>
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
0ce8ef33
|
2017-08-18T12:00:28
|
|
Add arrays of arrays negative test coverage
Arrays of arrays have not been implemented yet, but these tests can
already be enabled. This is useful to make sure that we don't
accidentally enable arrays of arrays where they shouldn't be enabled
and that the initial implementation generates errors correctly and
doesn't crash on malformed inputs.
BUG=angleproject:2125
TEST=angle_unittests, angle_deqp_gles31_tests
Change-Id: I538e5ae1f0903c42e06cfce352124130f160649d
Reviewed-on: https://chromium-review.googlesource.com/620706
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
d7487b13
|
2017-08-09T15:45:13
|
|
Clean up checking variable packing limits
This encapsulates expanding struct variables inside the VariablePacker
class that packs variables according to the GLSL ES spec.
The variable expansion step is no longer run twice when checking
uniforms against the max uniforms limit.
BUG=angleproject:2068
TEST=angle_unittests
Change-Id: I012ddaa249f71c0a78d937c98007c61352e64888
Reviewed-on: https://chromium-review.googlesource.com/608367
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
85d624a5
|
2017-08-07T13:42:33
|
|
Fix null pointer dereference in redeclaration error message
When a function parameter name conflicts with another, the pointer
returned to ParseContext will be null.
BUG=chromium:745242
TEST=angle_unittests
Change-Id: Ie53bb06b0c6660e382d85aeda41f3a1b7df5a917
Reviewed-on: https://chromium-review.googlesource.com/603368
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
|
|
13c0dd46
|
2017-07-04T18:27:01
|
|
Add texture rectangle extension.
This is needed to support binding IOSurfaces to textures on OSX. This
commit adds support in the API and tests, but didn't need to implement
compiler changes as it already supported ARB_texture_rectangle.
Implementation of CHROMIUM_opy_texture for rectangle texture and the
spec are left for follow-up commits.
Change-Id: I45c66be763a9d3f6f619640f9f95f39b05c70867
Reviewed-on: https://chromium-review.googlesource.com/559106
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
df7d7c9e
|
2017-07-31T09:34:04
|
|
Split varyings into input and output varyings in compiler
This patch intends to split all vector<Varying> into two vectors
to store input and output varyings separately in the compiler.
This patch is a base of implementing the built-ins, inputs and
outputs of a geometry shader to ANGLE GLSL compiler. Unlike the
vertex shaders (their outputs are varyings) and fragment shaders
(their inputs are varyings), the inputs and outputs of geometry
shaders are all varyings, so we need two vector<Varying> to store
them correctly.
BUG=angleproject:1941
Change-Id: I9e8cc16045d5e29e9a80a09dc31b33a7ae39b345
Reviewed-on: https://chromium-review.googlesource.com/593347
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
b5cc1198
|
2017-07-06T10:47:20
|
|
ES31: Add Geometry Shader layout qualifiers in GLSL compiler
This patch intends to implement Geometry Shader layout qualifiers
required in OpenGL ES 3.1 extension GL_OES_geometry_shader in ANGLE
GLSL compiler.
1. Add support to the shader type GL_GEOMETRY_SHADER_OES.
2. Implement Geometry Shader layout qualifiers in the GLSL compiler:
(1) Add support to OpenGL ES 3.1 extension "GL_OES_geometry_shader".
(2) Add validations of the input and output primitive declarations
in the Geometry Shader layout declarations.
(3) Add 'invocations' and 'max_vertices' support in the Geometry
Shader layout declarations
3. Add unit tests to cover all the new features added in this patch.
BUG=angleproject:1941
TEST=angle_unittests
Change-Id: Ie693e11f8a00dab3552626ed63e9336c7fbd3cb8
Reviewed-on: https://chromium-review.googlesource.com/560647
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
|
|
590f6235
|
2017-07-21T11:10:26
|
|
Fix getting temporary id in RewriteDoWhile
There's been a long-standing bug in RewriteDoWhile where it would only
call nextTemporaryId() after it had created the temporary variable.
This escalated into a null pointer dereference in the recent symbol
table refactoring, and initializing the traverser with the symbol
table was also missing.
BUG=chromium:747244
TEST=angle_unittests
Change-Id: I8987a609bb5d7d49e3c3e284fc42a2e53e38dafa
Reviewed-on: https://chromium-review.googlesource.com/580887
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
34d2007f
|
2017-07-18T20:07:18
|
|
Fix exposing internal shader interface variables
Don't expose internal variables in the shader translator interface.
This affects the ViewID_OVR varying needed for instanced multiview,
which is so far the only variable of this kind.
This fixes the translator trying to add initialization for internal
variables in initializeOutputVariables. Since they are variables added
by ANGLE, they should never need extra initialization.
BUG=angleproject:2112
TEST=angle_unittests
Change-Id: I93ee2956c8180053806ce450d93f162f78a45d8f
Reviewed-on: https://chromium-review.googlesource.com/579050
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
3e5695d1
|
2017-07-17T15:21:14
|
|
Fix standalone OSX warnings
BUG=
Change-Id: I447900488559622108c0da12a352c88218f9ddc6
Reviewed-on: https://chromium-review.googlesource.com/575201
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
daaff1cc
|
2017-07-05T18:03:26
|
|
Set correct symbol ids when referring to GLSL built-ins
The symbol ids are fetched from the symbol table. A new utility
function is added to make this more convenient.
BUG=angleproject:1490
TEST=angle_unittests, angle_end2end_tests
Change-Id: I780430e3386f6599503d8290c568ca9bc9cad147
Reviewed-on: https://chromium-review.googlesource.com/559535
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
bc58515e
|
2017-06-23T15:42:17
|
|
ES31: Add 'buffer' qualifier support in shader
This change added 'buffer' qualifier support in shader which
corresponds to ESSL 3.1 spec, session 4.3.7 'Buffer Variables'.
BUG=angleproject:1951
TEST=angle_unittests:BufferVariablesTest
Change-Id: I2ecb5317d5ea9d378a60b03f86bdae04dbd89e9f
Reviewed-on: https://chromium-review.googlesource.com/534960
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
3ec75686
|
2017-07-05T17:02:55
|
|
Collect AST transform utilities to a separate file
Collect static functions that are used to create nodes in AST
transformations into a single file.
BUG=angleproject:1490
TEST=angle_unittests
Change-Id: I6f87422988fa088f2f4b48986e378a2909705cb7
|
|
2c7c4268
|
2017-07-12T07:53:34
|
|
Merge "Select viewport index in the GLSL/ESSL vertex shader"
|
|
c39a19aa
|
2017-07-07T18:52:09
|
|
Select viewport index in the GLSL/ESSL vertex shader
The patch enables viewport selection for multiview rendering in the
GLSL/ESSL vertex shader through the use of the GL_NV_viewport_array2
extension. The AST is modified only for GLSL and ESSL to include the
viewport selection expression after ViewID_OVR's initialization.
BUG=angleproject:2062
TEST=angle_unittests
Change-Id: Iee05bb5a4b687ed53ddbdd466f1572227b1f0cde
|
|
37d96cce
|
2017-07-11T14:14:03
|
|
Fix accepting arrays as array indices
Previously, arrays were being incorrectly accepted as array indices.
This was because the isScalar() check only checked that the type was
not a vector or matrix, but still returned true for scalar arrays.
This patch changes the isScalar() check so that it returns false for
arrays. This makes usage of the term "scalar" more consistent in the
shader translator. Most of the code using isScalar() was compatible
with this change. Code in util.cpp that used to assume that isScalar()
doesn't care about arrayness is refactored to work with the new
behavior.
BUG=angleproject:2102
TEST=angle_unittests
Change-Id: I2a7f4c30fca7917d1099d0400efe3de859338b2a
|
|
56229f1b
|
2017-07-10T14:16:33
|
|
Remove TIntermediate::addConstantUnion
This includes asserts in TConstantUnion to reveal incorrect usage of
union - reading a different field of an union that has last been set
is undefined behavior in C++.
Existing issues with accessing incorrect fields of constant unions
are fixed.
BUG=angleproject:1490
TEST=angle_unittests
Change-Id: Idd6b7a871d73e2928f117a9348c92043612fab82
|
|
7ef89a42
|
2017-07-05T14:23:06
|
|
Expose ViewID_OVR impostor in the fragment shader
The OVR_multiview specification states that gl_ViewID_OVR is visible
at each pipeline stage. Previously to this patch the ViewID_OVR
impostor was declared only in the vertex shader and occurrences of
gl_ViewID_OVR in the fragment shader were not being handled. The
patch addresses the issue by declaring the ViewID_OVR variable as
a vertex output in the vertex shader and as a fragment input
in the fragment shader.
BUG=angleproject:2062
TEST=angle_unittests
Change-Id: I895953e81d3632d9bb873e8ac081fdf36f63f6b7
Reviewed-on: https://chromium-review.googlesource.com/559337
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
|
|
cccf2b00
|
2017-07-05T14:50:54
|
|
Reorganize AST traversal utility code
Define TIntermTraverser and TIntermLValueTrackingTraverser in a
separate header file. hash() function is moved out from
TIntermTraverser as it is not related to the core functionality
of traversing and transforming ASTs.
Also reorganize some traversers to follow common conventions:
- Intermediate output is now in OutputTree.h/.cpp
- Max tree depth check is now in IsASTDepthBelowLimit.h/.cpp
BUG=angleproject:1490
TEST=angle_unittests
Change-Id: Id4968aa9d4e24d0c5bac90dc147fc9f310de0184
Reviewed-on: https://chromium-review.googlesource.com/559531
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
115fc55e
|
2017-07-05T17:11:06
|
|
Populate gl_InstanceID attribute information explicitly
While compiling ESSL1 shaders, with the compiler having both
SH_INITIALIZE_BUILTINS_FOR_INSTANCED_MULTIVIEW and SH_VARIABLES
set, variable collection terminates with an assertion failure. The reason
behind this is that SH_INITIALIZE_BUILTINS_FOR_INSTANCED_MULTIVIEW
adds gl_InstanceID to the AST to initialize the multiview builtins, but
the variable collection pass cannot find gl_InstanceID information in
the symbol table because the builtin is only available in ESSL 3.00 and
greater.
To address this the patch populates the gl_InstanceID attribute
information explicitly in the variable collection pass instead of
retrieving it from the symbol table.
BUG=angleproject:2062
TEST=angle_unittests
Change-Id: I5ecb9967ebe6658e956d17a2637090f9b685ef33
Reviewed-on: https://chromium-review.googlesource.com/559669
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
d7cd4ae5
|
2017-07-06T15:52:49
|
|
Check that function declarations don't use a reserved name
Reserved function names are now caught if the function is just
declared without being called in the shader source. Actually, function
calls don't need to be checked for reserved names, since that just
generates a redundant error message if function declarations are being
checked.
Includes some cleanup of ParseContext::checkIsNotReserved. It doesn't
need special handling of built-in symbols, as they are never passed to
the function.
BUG=chromium:739448
TEST=angle_unittests
Change-Id: I7115e1a7509626b5109b5c054c0704b0c3c19c58
Reviewed-on: https://chromium-review.googlesource.com/561457
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
0cdf3683
|
2017-07-05T14:02:08
|
|
Do not propagate OVR_multiview extension directive
The patch fixes the bug of having the OVR_multiview extension directive
being outputted by the ESSL translator whenever the
SH_INITIALIZE_BUILTINS_FOR_INSTANCED_MULTIVIEW option is enabled. The
directive should not be outputted because the extension is emulated
through that option.
BUG=angleproject:2062
TEST=angle_unittests
Change-Id: I95d0a651ace6db42d496de08e774ec7ceca4c197
Reviewed-on: https://chromium-review.googlesource.com/558981
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
b12040c4
|
2017-06-27T14:20:45
|
|
Clean up redundant initialization of gl_Position
In case gl_Position is statically used in the input shader, setting
the INIT_OUTPUT_VARIABLES flag will initialize gl_Position. Avoid
redundant initialization of gl_Position in this case.
Includes cleaning up memory management in InitOutputVariables_test:
all the pool-allocated variables will be freed at the end of each test
when the memory pool is cleared, so manual memory management is not
needed.
Also includes making the zero node check used in unit tests stricter
so that the tests are more reliable and moving it to
ShaderCompileTreeTest.h so that it can be reused in the future.
BUG=angleproject:2092
TEST=angle_unittests
Change-Id: I323a0a094afa6cea95c8a64e681d9fc485137423
Reviewed-on: https://chromium-review.googlesource.com/549418
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
e145def0
|
2017-06-22T12:49:12
|
|
Propagate correct type to the lvalue in an output variable initializer
With the SH_INIT_OUTPUT_VARIABLES option enabled, vertex and fragment
shader outputs get initialized with zeros at the beginning of main.
However, previous to this patch the lvalues in the binary expression did
not receive the correct type. This can lead to incorrect modifications
of the AST in subsequent stages or incorrect output code from the
translator. The patch addresses the issue by copying the type
information from the symbol table.
BUG=angleproject:2081
TEST=angle_unittests
TEST=angle_end2end_tests
Change-Id: I9e062376bcfad7d57b637a5248caebce1c9a0688
Reviewed-on: https://chromium-review.googlesource.com/544982
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
ff526f14
|
2017-06-30T12:26:54
|
|
Fix variable vs. function name conflict in HLSL output
GLSL ES spec accepts the case where an initializer of a variable calls
a function with the same name as the variable. The HLSL compiler
doesn't accept that. Work around this limitation in the HLSL compiler
by disambiguating user-defined functions from variables with a
different prefix.
BUG=angleproject:2095
TEST=angle_end2end_test, angle_unittests
Change-Id: I41b32a3fcc6fd4c548e8dc3aa680d1b07fcf8719
Reviewed-on: https://chromium-review.googlesource.com/557872
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
77891c0a
|
2017-06-23T16:30:17
|
|
Fix wrong assignment of maxUniformVectors in GLSL compiler
This patch intends to fix a bug in ANGLE GLSL compiler.
In TCompiler::Init(resources), we should initialize maxUniformVectors by
resource.maxComputeUniformComponents / 4 when we attempt to initialize a
compiler for compute shader instead of resource.maxFragmentUniformVectors.
BUG=angleproject:2083
Change-Id: I4901f71ef5ac4f5770e2d5f8ee21786fcf19fbca
Reviewed-on: https://chromium-review.googlesource.com/545190
Commit-Queue: Jiawei Shao <jiawei.shao@intel.com>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
69056a1e
|
2017-05-18T11:14:50
|
|
Declare and initialize ViewID_OVR and InstanceID
The patch modifies the vertex shader's AST to declare and initialize
the global variables ViewID_OVR and InstanceID. Every occurrence of
gl_ViewID_OVR gets replaced by ViewID_OVR and initialized in main
with a value dependent on gl_InstanceID and the number of views.
To guarantee correct results for instanced rendering, each occurrence
of gl_InstanceID is replaced with InstanceID and initialized similarly.
BUG=angleproject:2062
TEST=angle_unittests
Change-Id: I48be688605b5af869bc370758e70ccc209ea4419
Reviewed-on: https://chromium-review.googlesource.com/548596
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
1d72298b
|
2017-06-27T14:36:03
|
|
Fix memory leaks in invariant tests.
Tests weren't properly destroying the compiler instance.
BUG=angleproject:2094
Change-Id: I65eb5a02ba741c6f48f09f03b84ded402581e89f
Reviewed-on: https://chromium-review.googlesource.com/550569
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Kenneth Russell <kbr@chromium.org>
|
|
9f01a0d4
|
2017-06-12T10:54:53
|
|
Fix RewriteElseBlocks using a non-prefixed struct name
RewriteElseBlocks used to have an issue where it could add an
unprefixed struct name to the AST in a TIntermRaw node, as opposed to
the prefixed name that the struct would be defined with. Use a proper
return statement node instead of a raw node to fix this issue and make
the code more robust.
BUG=angleproject:2061
TEST=angle_unittests
Change-Id: I3993b5093646983f038268f3a5ffe26ccdae66e8
Reviewed-on: https://chromium-review.googlesource.com/530785
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
4cdac9eb
|
2017-05-08T11:01:20
|
|
ES31: Add atomic counter for GLSL parsing
This makes shader compiler support the new basic type 'atomic_uint'
and validate its layout qualifiers properly.
BUG=angleproject:1729
TEST=angle_unittests:AtomicCounterTest
angle_deqp_gles31_tests:dEQP-GLES31.functional.atomic_counter.layout.invalid*
angle_deqp_gles31_tests:dEQP-GLES31.functional.debug.negative_coverage.*.atomic*
Change-Id: Ia237eadf6ea72314f436a0abbb93a05598e71eba
Reviewed-on: https://chromium-review.googlesource.com/500088
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
95468d17
|
2017-05-04T11:14:34
|
|
Support multiview in ESSL 1.00 shaders
Support is added according to the proposal for WEBGL_multiview. When
the multiview extension is enabled in an ESSL 1.00 shader, num_views
can be specified using a layout qualifier. To support this, enabling
the multiview extension makes "layout" a keyword rather than an
identifier in ESSL 1.00.
The type of gl_ViewID_OVR is also different in case of ESSL 1.00: it
has to be a signed integer, since unsigned integers are not supported
in ESSL 1.00.
Some existing tests for multiview shaders are extended in this patch.
The changes make sure that vertex shader "in" qualifier is still
allowed in ESSL 3.00 multiview shaders, since this patch adds code to
disallow it in ESSL 1.00 multiview shaders.
BUG=angleproject:1669
TEST=angle_unittests
Change-Id: I65dbbbebabdb24cf0bb647d40aa80cebf713c4f7
Reviewed-on: https://chromium-review.googlesource.com/506088
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
a22aa4ed
|
2017-05-24T18:17:23
|
|
Mark some internal functions as not having side effects
Precision emulation rounding function calls and vector/matrix dynamic
indexing function calls now get a flag that indicates that running the
function body does not have side effects. This avoids triggering
asserts in OutputHLSL when these internal function calls end up on the
right hand side of a non-unfolded logical operator.
BUG=chromium:724870
TEST=angle_unittests
Change-Id: Id1a2b6b744f6a04c6cdb86a8f4109ccc12bc70b9
Reviewed-on: https://chromium-review.googlesource.com/516705
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
19ecebe7
|
2017-05-24T16:44:42
|
|
Fix compound assignment precision emulation
Precision emulation for compound assignment used to set the wrong type
for the compound assignment nodes, which could cause an assert to
trigger. The wrong rounding function was also being called in the lowp
rounded compound assignment function.
BUG=chromium:699479
TEST=angle_unittests
Change-Id: I60b4cb3bf1830e8249511c13037348bb2423e5b9
Reviewed-on: https://chromium-review.googlesource.com/514045
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
487b63ab
|
2017-05-23T15:55:09
|
|
Disallow structs as scalar/vector constructor arguments
The spec isn't very explicit about disallowing this, but conversions
from structs are not among the conversion constructors or specified
in any other way either.
BUG=angleproject:2036
TEST=angle_unittests
Change-Id: I23f2ceda1d1348cec0d3bba38a7a013275ff84eb
Reviewed-on: https://chromium-review.googlesource.com/514002
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
|
|
7854d861
|
2017-05-09T14:29:15
|
|
EmulatePrecision: Round constructor args only when needed
Constructor arguments don't need to be rounded if the constructor
result will be rounded to the same precision.
This will make precision emulated shaders slightly faster to execute
in some cases.
BUG=angleproject:874
TEST=angle_unittests
Change-Id: I4220cd2289c97dcf5b7a25a4cbdd18487947c2d2
Reviewed-on: https://chromium-review.googlesource.com/500288
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
8fab320c
|
2017-05-08T18:22:22
|
|
Share a single TOperator enum among all constructor AST nodes
The code is a lot simpler when the type information is only carried
in the TType of the node, instead of being partially duplicated in the
enum value.
BUG=angleproject:1490
TEST=angle_unittests
Change-Id: I956376225ec01e469c7afb7378fa48cc097c0cea
Reviewed-on: https://chromium-review.googlesource.com/498768
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
9405005f
|
2017-05-08T14:17:44
|
|
Disallow interface blocks in arithmetic expressions
Interface blocks were mistakenly being allowed in some types of unary,
binary and ternary expressions, when they should not have been.
BUG=angleproject:2030
TEST=angle_unittests
Change-Id: Ie75833ee208e1b7fef8f77fa91b90da278bc6498
Reviewed-on: https://chromium-review.googlesource.com/500269
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
b4cf5656
|
2017-05-05T18:51:17
|
|
Validate opaque operands against binary operators
Add checks that opaque operands can only be used with array indexing
and field section, as mentioned in ESSL 3.10 section 4.1.7.
BUG=angleproject:2028
Change-Id: I41b7f10785bf712dfc999f85ebff925341c51911
Reviewed-on: https://chromium-review.googlesource.com/497767
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
|
|
cc2a10e9
|
2017-05-03T14:05:12
|
|
Unify opaque type validation in GLSL parsing
Refactor separate sampler and image validations into unified opaque
type handling. This paves way for adding atomic counter, another
new opaque type.
BUG=angleproject:1729
Change-Id: I201d28e31c84534db43e656d518650e378bab76c
Reviewed-on: https://chromium-review.googlesource.com/493618
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
|
|
7142f6ce
|
2017-05-05T17:07:26
|
|
Prevent using gl_ViewID_OVR as an l-value
It's a shader input and as such should not be writable.
BUG=angleproject:1669
TEST=angle_unittests
Change-Id: I05cb5c63b7272dfa6e80cad57385da02504e4d8f
Reviewed-on: https://chromium-review.googlesource.com/497408
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
bb7e5a7c
|
2017-04-24T10:16:44
|
|
GLSL parser: Fix empty declaration qualifier checks
The shader validation now does the same checks for qualifier
combinations regardless of if a declaration is empty, as is specified.
Some of these checks used to be in singleDeclarationErrorCheck, and
have now been moved to a new function declarationQualifierErrorCheck.
The other parts of singleDeclarationErrorCheck are under a renamed
nonEmptyDeclarationErrorCheck.
The patch also contains another related cleanup: Unnecessary symbol
nodes won't be created for empty declarations any more.
BUG=angleproject:2020
TEST=angle_unittests
Change-Id: I1c864a5e151c52703926d8c550450b2561bfcbb2
Reviewed-on: https://chromium-review.googlesource.com/493227
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
193c0950
|
2017-05-02T15:51:47
|
|
Fix assert when attempting to create a void array node
TIntermTyped::CreateZero can be reached with a void array type in an
error case. Handle this gracefully instead of asserting.
Also remove an assert that wasn't really checking anything in
CreateZero. type.isScalar() || type.isVector() || type.isMatrix() can
only be false in case of a struct, and struct type was being checked
in the condition on the line above.
BUG=chromium:717385
TEST=angle_unittests
Change-Id: Iff0811d18d399d7b32b2b46deea5df172412eb8c
Reviewed-on: https://chromium-review.googlesource.com/492887
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
f81ce4a3
|
2017-04-24T10:49:17
|
|
Refactoring: replace NULL by nullptr for pointers (3rd CL).
This CL mainly handles passing/returning NULL to/from a function.
BUG=angleproject:2001
Change-Id: I34802f792e710e3d7ff697cbe4701dc1bf5ab009
Reviewed-on: https://chromium-review.googlesource.com/485060
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
4f285443
|
2017-04-21T12:15:49
|
|
Refactoring: replace NULL by nullptr for pointers (2nd CL).
This CL mainly handles the pointer comparisons (== or !=).
BUG=angleproject:2001
Change-Id: I25ac3b61032e7ad91459a1c6541cadc87cf9b160
Reviewed-on: https://chromium-review.googlesource.com/483935
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
d7297bfb
|
2017-04-19T15:27:10
|
|
Code refactoring: replace NULL by nullptr for pointers.
This is the frist change to replace NULL by nullptr.
It handles the initialization and assignment for pointers.
BUG=angleproject:2001
Change-Id: I6d4bb198a72e38b867cd2f65a6e6f2f61339a0b5
Reviewed-on: https://chromium-review.googlesource.com/481600
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
|
|
e839078e
|
2017-04-06T14:34:43
|
|
compiler: Prune literal statements when outputting ESSL
The ESSL output doesn't have a default precision for floats, this causes
float literal statements to not have any precision defined, which is an
error. We fix this by removing literal statements as they are dead code
anyway.
BUG=angleproject:1967
Change-Id: I498f4f8495f854240ee8a2182415bf982c5166a4
Reviewed-on: https://chromium-review.googlesource.com/470268
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
|
|
9ec79391
|
2017-03-31T23:04:23
|
|
Use TLValueTrackingTraverser in ValidateLimitations
Use TLValueTrackingTraverser to determine whether a loop index is used
as an l-value. This replaces custom logic in ValidateLimitations,
greatly simplifying the code. Also pass the symbol table to
ValidateLimitations as a parameter, which removes the need to store a
global pointer to the current ParseContext.
BUG=angleproject:1960
TEST=angle_unittests, WebGL conformance tests
Change-Id: I122c85c78bbea05833d7c787cd184de568c5c45f
Reviewed-on: https://chromium-review.googlesource.com/465606
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
|
|
ec9232bd
|
2017-03-27T17:01:37
|
|
Store unmangled function names in the AST
This makes the code simpler across the board. There are a few cases
where mangled names still need to be generated in AST traversers, but
they are outweighed by much leaner output code for all function nodes.
BUG=angleproject:1490
TEST=angle_unittests, angle_end2end_tests
Change-Id: Id3638e0fca6019bbbe6fc5e1b7763870591da2d8
Reviewed-on: https://chromium-review.googlesource.com/461077
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
|
|
fe48632f
|
2017-03-21T09:30:54
|
|
Prefer identifying functions by using symbol ids
The shader translator code is now structured in a way that ensures
that all function definition, function prototype and function call
nodes store the integer symbol id for the function. This is guaranteed
regardless of whether the function node is added while parsing or as a
result of an AST transformation. TIntermAggregate nodes, which include
function calls and constructors can now only be created by calling one
of the TIntermAggregate::Create*() functions to ensure they have all
the necessary properties.
This makes it possible to keep track of functions using integer ids
instead of their mangled name strings when generating the call graph
and when using TLValueTrackingTraverser.
This commit includes a few other small cleanups to the CallDAG class
as well.
BUG=angleproject:1490
TEST=angle_unittests, angle_end2end_tests
Change-Id: Idd1013506cbe4c3380e20d90524a9cd09b890259
Reviewed-on: https://chromium-review.googlesource.com/459603
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
a5527071
|
2017-03-22T16:46:30
|
|
Add support for EXT_YUV_target
Add new sampler type "__samplerExternal2DY2YEXT"
to sample a YUV texture image and output color value
without any color conversion,
new additional type to specify color space standard formula and
built-in functions for yuv to rgb transformation.
Change-Id: I1780650fe84cd75191c1ca1e4118e89d585bfd92
Reviewed-on: https://chromium-review.googlesource.com/454697
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
|
|
a55102c5
|
2017-02-24T12:36:50
|
|
Unify and simplify shader variable collection
Instead of setting variable information in both CollectVariables and
the GetVariableTraverser helper class it uses, keep all of this
functionality in CollectVariables. A single helper function handles
setting variable information that doesn't depend on variable type, and
the rest is done in "record" functions that are implemented for each
variable type.
This removes templates from the code, making it leaner and easier to
understand, and will help with implementing future features like
adding binding and location layout qualifiers for uniforms.
BUG=angleproject:1442
TEST=angle_unittests, angle_end2end_tests,
dEQP-GLES2.functional.shaders.*
Change-Id: I79148b7b3fa9cb46634a22bdcc9ce0c04f970384
Reviewed-on: https://chromium-review.googlesource.com/446838
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
c16678a2
|
2017-02-22T15:24:55
|
|
ASTMetadataHLSL: handle WebGL2 gradient builtins
BUG=angleproject:1915
Change-Id: Id54e6dd417a1a288c71355e74184366d1492e92b
Reviewed-on: https://chromium-review.googlesource.com/446521
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
|
|
4336489f
|
2017-02-13T16:00:12
|
|
Parse binding layout qualifier for opaque types
This patch adds binding layout qualifier support for opaque types.
Binding layout qualifier on blocks is not yet supported.
This includes support for GLSL output and some minor simplification of
related functionality in ParseContext.
TEST=angle_unittests, dEQP-GLES31.functional.layout_binding.*
BUG=angleproject:1442
Change-Id: I53fb505b5a539bccee70613f3969fba81965ae84
Reviewed-on: https://chromium-review.googlesource.com/441586
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
485eefdd
|
2017-02-14T17:40:06
|
|
Fix checking image memory access
Checks for image memory access used to assume that image nodes are
symbol nodes, but they can also be array indexing nodes. In invalid
shaders struct indexing nodes of an image type may also appear after
error recovery.
TEST=angle_unittests, dEQP-GLES31.functional.layout_binding.*
BUG=angleproject:1442
Change-Id: Ib45728d38485cb78c594e080f3decec1233a0046
Reviewed-on: https://chromium-review.googlesource.com/442764
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|