|
d10cf69e
|
2017-11-02T11:06:14
|
|
Remove repeated "success" check from compileTreeImpl
This refactoring simplifies the compilation code by putting AST checks
and simplification into a separate function. This function will
immediately return false when an error is encountered. This is easier
to maintain than repeated checking of a "success" boolean.
BUG=angleproject:2068
TEST=WebGL conformance tests, angle_unittests, angle_end2end_tests
Change-Id: I1ae1c8def3625ada1482104a6babe605405229ef
Reviewed-on: https://chromium-review.googlesource.com/750085
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
640d597d
|
2017-11-02T10:37:31
|
|
Add missing check in Compiler
Further AST traversals should not be run in case the expression
complexity check failed and set success=false. Otherwise traversal
can result in stack overflow.
BUG=chromium:780545
TEST=WebGL conformance tests
Change-Id: Icfde8c051038c691563e199a6d3a17b1e8e5ebf5
Reviewed-on: https://chromium-review.googlesource.com/750781
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
d78e33a8
|
2017-10-30T12:33:52
|
|
preprocessor: Fix lineno overflow on line continuations
BUG=chromium:774807
Change-Id: I4b3fbee31683f411810080572cfff0f8307b93bf
Reviewed-on: https://chromium-review.googlesource.com/744183
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
c1f14fbe
|
2017-10-28T19:17:23
|
|
Remove empty switch statements from translated shaders
The native HLSL compiler does not accept switch statements with an
empty statement list. The simplest way to accommodate this is to
simply remove them from the AST after parsing and some initial
pruning.
This is done by the new RemoveEmptySwitchStatements traverser. It
preserves init statements of switch statements in case they have side
effects. So for example
switch(++i) {}
gets translated to
++i;
BUG=angleproject:2206
TEST=angle_end2end_tests
Change-Id: I550a3c9b010a3566016bdfd93344ac30fd860604
Reviewed-on: https://chromium-review.googlesource.com/742922
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Jamie Madill <jmadill@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>
|
|
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>
|
|
87c35883
|
2017-10-19T15:19:38
|
|
Prune no-op statements with a single traverser
We put pruning literal statements and pruning empty declarations in
the same traverser, as some of the required logic is the same. This
pruning of no-ops is always done as one of the first processing steps
after parsing, so further processing of the AST is simpler.
Since we now prune pure literals before removing no-op cases from the
end of switch statements, we also don't need any sort of special
handling for switch statements in pruning pure literals.
BUG=angleproject:2181
TEST=angle_unittests
Change-Id: I2d86efaeb80baab63ac3cc803f3fd9e7ec02908a
Reviewed-on: https://chromium-review.googlesource.com/727803
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>
|
|
4ddae359
|
2017-10-26T16:20:18
|
|
Use array_specifier in struct declarator parsing
This will make implementing arrays of arrays simpler for struct
members as well. Similar refactoring was already done for other types
of array declarations.
BUG=angleproject:2125
TEST=angle_unittests
Change-Id: I0483c3a7c006d37090c7c972cb3d7763d3909c8f
Reviewed-on: https://chromium-review.googlesource.com/739824
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@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>
|
|
d4556dfc
|
2017-09-27T16:45:22
|
|
Reland 'Adds TUnorderedMap and uses it for tLevel in TSymbolTableLevel.'
Reland of https://crrev.com/c/526672
Bug: 697758
Change-Id: I410e4774c4ad85595eb8789603901878b209c857
Reviewed-on: https://chromium-review.googlesource.com/688296
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Kai Ninomiya <kainino@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>
|
|
283c2194
|
2017-10-23T17:11:50
|
|
Support arrays of arrays in UseInterfaceBlockFields
This can be tested more fully once parsing arrays of arrays will be
supported.
BUG=angleproject:2125
Change-Id: I89c8f33b8cca5d6f5aa3f20aab23dccac53a956f
Reviewed-on: https://chromium-review.googlesource.com/733128
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
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>
|
|
de03e003
|
2017-10-21T14:04:20
|
|
Vulkan: Add shader handling for textures.
BUG=angleproject:2167
Change-Id: I33940288331a23b940753795e5e43b8cabcb87f5
Reviewed-on: https://chromium-review.googlesource.com/732189
Reviewed-by: Frank Henigman <fjhenigman@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
89a69a03
|
2017-10-23T12:20:45
|
|
Generate performance warnings in HLSL translation
Generate performance warnings for some code that undergoes heavy
emulation when translated to HLSL:
1. Dynamic indexing of vectors and matrices.
2. Non-empty fall-through cases in switch/case.
The warnings are generated only when code is translated to HLSL.
Generating them in the parsing stage would add too much maintenance
burden.
Improves switch statement fall-through handling in cases where an
empty fall-through case follows a non-empty one so that extra
performance warnings are not generated.
BUG=angleproject:1116
Change-Id: I7c85d78fe7c4f8e6042bda72ceaaf6e37dadfe6c
Reviewed-on: https://chromium-review.googlesource.com/732986
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
|
|
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>
|
|
76e471e9
|
2017-10-21T09:56:01
|
|
Vulkan: Implement basic uniforms.
This implementation adds one descriptor set with two bindings: one for
default vertex uniforms and the other for fragment. It adds two
corresponding uniform buffers, and the logic for updating the
descriptor sets bound to Vulkan. It doesn't handle much in the way of
synchronization and dependency management, or uniform update.
If there are only vertex or fragment uniforms the empty uniform buffer
is omitted from the descriptor set. If both are missing, there is no
descriptor set bound.
Note that as our implementation progresses we might not be able to
initialize our descriptor sets at link time, due to streaming in
uniform data.
BUG=angleproject:2167
Change-Id: I4ce4c3879ab454114df43bfac8d87ddf817fc045
Reviewed-on: https://chromium-review.googlesource.com/706340
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
|
|
711b7a12
|
2017-10-09T13:38:12
|
|
ES31: Support images in the compiler on D3D backend.
BUG=angleproject:1987
TEST=angle_end2end_tests
Change-Id: I83f5f9ffda7e676a8f98b963d1f1c50e9463faf4
Reviewed-on: https://chromium-review.googlesource.com/706247
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
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>
|
|
1bfa6b71
|
2017-10-13T14:07:45
|
|
Generalize GetUniformBlockInfo.
This method is useful for the Vulkan back-end as well as D3D11. It can
produce a uniform block layout for the default uniform blocks as well
as for interface blocks. Put it in blocklayout.h in the translator.
BUG=angleproject:2167
Change-Id: I13160906921da439746c1811a623006250aaeefd
Reviewed-on: https://chromium-review.googlesource.com/713941
Reviewed-by: Frank Henigman <fjhenigman@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
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>
|
|
40dbdd6c
|
2017-10-13T13:34:19
|
|
Clean up remaining extra semicolons from HLSL output
There are many types of statements after which a semicolon is not
needed. Skip writing the semicolon in HLSL output in these cases to
make the output code more readable.
BUG=angleproject:1013
TEST=angle_end2end_tests
Change-Id: I8f6a5e4ecfe5def456fdf19cca5ca451c13d7f35
Reviewed-on: https://chromium-review.googlesource.com/718420
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
f6d242ed
|
2017-10-12T17:21:06
|
|
Wrap switch statements in blocks in HLSL
If variables are declared inside a GLSL switch statement, they are
scoped until the end of the switch statement. This is not compatible
with HLSL rules, where the scoping is until the end of the case. To
work around this, wrap switch statements in a block that declares
the variables in HLSL.
This is done after most other transformations done to the AST are
complete, since some of the other transformations may introduce
temporary variables.
BUG=angleproject:2179
TEST=angle_end2end_tests
Change-Id: Id0bb89affe103177fd3d6a6b2f3619b5e1ada0a6
Reviewed-on: https://chromium-review.googlesource.com/716381
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
4bd730c8
|
2017-10-10T14:14:19
|
|
Recognize more non-fallthrough cases in switch/case
RemoveSwitchFallThrough now treats cases where break; or return; is
nested inside a block as non-fallthrough to avoid unnecessary
duplication of code. For example, the case 1 below would previously
get treated as fall-through:
switch(foo)
{
case 1:
{
break;
}
default:
break;
}
Now RemoveSwitchFallThrough doesn't do anything to this code.
BUG=chromium:772695
TEST=angle_end2end_tests
Change-Id: Iafab6d8b05c63bcdb5f54834dbc1f41192c31dd4
Reviewed-on: https://chromium-review.googlesource.com/709197
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
d736cccf
|
2017-10-11T15:08:22
|
|
Add :extra_warnings to all units in BUILD.gn.
Fix resulting warnings.
Change-Id: Ie251012ee01aa484a8c489f9deeec385a50528f9
Reviewed-on: https://chromium-review.googlesource.com/713695
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
56612d6a
|
2017-10-12T15:46:30
|
|
Clean up TIntermTraverse API
Make NodeInsertMultipleEntry private and clarify some comments in
IntermTraverse.h.
BUG=angleproject:2100
TEST=angle_unittests, angle_end2end_tests
Change-Id: Iae60a46714c8b5cb9ad1e9d70aa6776f9deaf3d5
Reviewed-on: https://chromium-review.googlesource.com/715718
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: 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>
|
|
852fe873
|
2017-10-10T15:13:59
|
|
Fix HLSL for switch statements that don't end in a branch
In case the last case inside a switch statement is not terminated in
a branch statement, RemoveSwitchFallThrough needs to add it before
calling handlePreviousCase. This ensures that all preceding
fall-through cases will get a copy of the branch statement and so will
not fall through.
This also fixes running RemoveSwitchFallThrough so that it's only
executed once per each switch statement.
The error was not caught by the dEQP tests, so a new ANGLE test is
added.
BUG=angleproject:2178
TEST=angle_end2end_tests
Change-Id: I26b6989aa4d32de2d74cde56d72ee24f61195445
Reviewed-on: https://chromium-review.googlesource.com/709196
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
78507c6e
|
2017-10-10T15:06:45
|
|
Fix statements disappearing from switch statements in HLSL
RemoveSwitchFallThrough now correctly records the existence of
declaration and swizzle statements inside switch statements.
BUG=angleproject:2177
TEST=angle_end2end_tests
Change-Id: I1ef83997db7ae510ded002a9568c29272c00c2fe
Reviewed-on: https://chromium-review.googlesource.com/709195
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
af5070f7
|
2017-10-10T13:53:25
|
|
Hide RemoveSwitchFallThrough implementation in the .cpp file
This cleans up the API provided by RemoveSwitchFallThrough.h, and adds
documentation about caveats of RemoveSwitchFallThrough. This change is
pure refactoring without any functional changes.
BUG=angleproject:2177
TEST=angle_end2end_tests
Change-Id: I2646e4fe3b53130b07977823cb1344e5096f67e4
Reviewed-on: https://chromium-review.googlesource.com/709194
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
8886f0fc
|
2017-10-10T11:59:45
|
|
Clean redundant semicolons from HLSL branch statements
Branch statements can only exist inside block nodes. The block node
that contains a branch will take care of writing a semicolon after
each statement.
BUG=angleproject:1013
TEST=angle_end2end_tests
Change-Id: Ie5d9077c5d2e090c704282dba39b4d46845cbf1e
Reviewed-on: https://chromium-review.googlesource.com/708894
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
180f43c6
|
2017-10-09T17:00:44
|
|
Refactor creating temporary symbols
This makes creating temporary symbols easy also outside of traversers.
This will be needed for improving variable initialization.
TEST=angle_unittests
BUG=chromium:735497
Change-Id: Id048fc338e0be6c76bb6f082421ae106618e5003
Reviewed-on: https://chromium-review.googlesource.com/707194
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
|
|
a3d384ad
|
2017-10-06T16:12:50
|
|
Fix signed integer overflow in GLSL preprocessor left shift
Signed integer overflow is undefined in C++, whereas unsigned integer
overflow is not. Always cast left shift operand to unsigned to avoid
UB.
On common compilers, the behavior was already the same before this
patch, so this patch is done mostly for the benefit of automated fuzz
testing.
BUG=chromium:743136
TEST=angle_unittests
Change-Id: I7aab939036bb19a37f258cef4297b560da3cd9d5
Reviewed-on: https://chromium-review.googlesource.com/704659
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
6276b922
|
2017-09-25T02:35:57
|
|
Vulkan: Implement basic uniform shader parsing.
This is a first step at implementing uniforms with descriptor sets.
It does not actually bind uniforms and upload data, but it does
implement uniform shader parsing. Uniforms are gathered into a single
uniform block which is bound to set 0, with binding 0 for vertex
uniforms and binding 1 for fragment uniforms.
Also adds a ReplaceSubstring helper to string_utils.
Also removes the precision writing from OutputVulkanGLSL since this
was generating warnings with glslang.
BUG=angleproject:2167
Change-Id: I9ec8351ec1973e583100f99292b0080ee968067b
Reviewed-on: https://chromium-review.googlesource.com/699938
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Frank Henigman <fjhenigman@chromium.org>
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
|
|
2a9e107c
|
2017-09-22T11:31:57
|
|
Vulkan: Support multiple vertex outputs.
This is a bit of a hack, similar to how D3D11 works. We need to write
output locations in the GLSL shader before we send them to glslang,
so we wait until the link call, then string-replace some hard-coded
identifeir code to the attribute location determined by ANGLE.
This CL also fills in some of the vertex format conversion tables in
formatutilsvk.cpp.
BUG=angleproject:2167
Change-Id: I2424d0d990bdbcd831a4dd130e61e87d8f8f479f
Reviewed-on: https://chromium-review.googlesource.com/677555
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Frank Henigman <fjhenigman@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>
|
|
729b2c6e
|
2017-08-14T09:36:11
|
|
ES31: Enable shader storage buffer support for OpenGL backend
BUG=angleproject:1951
TEST=angle_end2end_tests:ShaderStorageBuffer
Change-Id: I1afc3cd005ad2e595c6ce937fc53e17423f8ec8b
Reviewed-on: https://chromium-review.googlesource.com/618132
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>
|
|
bb5a7e29
|
2017-08-30T13:03:12
|
|
Allow length() on arbitrary array expressions
This is required to pass some dEQP GLES 3.1 tests for arrays of
arrays, and WebGL conformance tests were also recently fixed to
require this behavior. The intent of the GLSL ES spec was not to
restrict usage of length().
In practice GL drivers don't implement array length() on expressions
with side effects correctly in all cases. HLSL doesn't have an array
length operator either. Because of this we always remove array length
ops from the AST before output.
BUG=angleproject:2142
TEST=angle_unittests, angle_end2end_tests, WebGL conformance tests
Change-Id: I863a92e83ac5315b013af9a5626348482bad72b3
Reviewed-on: https://chromium-review.googlesource.com/643190
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
9df395c8
|
2017-09-12T15:19:44
|
|
Include string.h for strncmp in ExtensionBehavior.cpp
BUG=angleproject:2147
Change-Id: I53062a84d48e1c106901a8c32fa49b0148baa344
Reviewed-on: https://chromium-review.googlesource.com/664059
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
|
|
a16a84f3
|
2017-09-12T13:49:18
|
|
GLSL: Fix initializing globals declared after main()
Initialize globals in a separate function instead of a block in the
beginning of main(). This way it works also for globals declared after
main().
BUG=chromium:764036
TEST=angle_end2end_tests
Change-Id: I2fcbb97d046589301287757dc3dde5471172a3f6
Reviewed-on: https://chromium-review.googlesource.com/663158
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
|
|
5b03f475
|
2017-01-09T10:22:53
|
|
ES31: Implement getMultisamplefv for D3D part.
Implement getMultisamplefv for d3d part.Because standard D3D sample
positions from https://msdn.microsoft.com/en-us/library/windows/
desktop/ff476218.aspx are fixed sample pattern,we put the sample
positions into a constant array in renderer11_utils.cpp with a
function to query it.
BUG=angleproject:1590
TEST=dEQP-GLES31.functional.texture.multisample.samples_*.sample_position
Change-Id: I6e6006ed1c4e22fe006522e9ffd3297247bee75e
Reviewed-on: https://chromium-review.googlesource.com/594970
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
2a1e8f95
|
2017-07-14T11:49:36
|
|
Refer to GLSL extensions through TExtension enum
Extensions are now referred to by enum values instead of strings most
of the time. This gets rid of unnecessary copying of strings. The code
is easier to work with than before as typoing the extension enum names
will be caught by the compiler.
BUG=angleproject:2147
TEST=angle_unittests
Change-Id: Ifa61b9f86ef03211188fc23bc23a5ce4e4d8c390
Reviewed-on: https://chromium-review.googlesource.com/571002
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@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>
|
|
72b4e1e5
|
2017-08-31T15:42:56
|
|
D3D11: Add support for multiview layered rendering
A branch is added in the geometry shader to select either the
viewport, or texture layer which is being rendered to based on the
value of a uniform in the driver constant buffer. Using this approach
there is no need for separate programs for side-by-side and layered
rendering.
BUG=angleproject:2062
TEST=angle_end2end_tests
Change-Id: I66701164ff02a851c13695d5409f8ad350534e69
Reviewed-on: https://chromium-review.googlesource.com/645547
Commit-Queue: Martin Radev <mradev@nvidia.com>
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
|
|
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>
|
|
bb2bbfbb
|
2017-08-24T15:43:33
|
|
Refactor GLSL array length method parsing
This prepares for accepting arbitrary expressions as the "this" node
of the array length method.
BUG=angleproject:2142
TEST=angle_unittests
Change-Id: I728adb6e76d2779dedbabfaeec7d096872e0d00d
Reviewed-on: https://chromium-review.googlesource.com/633945
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
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>
|
|
b79b3f96
|
2017-07-21T14:23:21
|
|
Assign symbol ids in RemoveDynamicIndexing
Assign consistent symbol ids to out base, index and value nodes that
get created in RemoveDynamicIndexing. Some utility functions in
RemoveDynamicIndexing have also now become unnecessary now that there
are better generic helpers and node constructors.
BUG=angleproject:1490
TEST=angle_unittests, angle_end2end_tests
Change-Id: I98891e448b85d51518dbf3156ec93f9661def57e
Reviewed-on: https://chromium-review.googlesource.com/580954
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
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>
|
|
97577623
|
2017-08-28T11:31:06
|
|
Fix assertion failure in CollectVariables.cpp
The built-in gl_Layer can occur in the AST in cases in which either
GL_OVR_multiview or GL_OVR_multiview2 is enabled.
BUG=angleproject:2062
TEST=angle_end2end_tests
Change-Id: I7409b2712c715c3898c33300b7e5689e347742f0
Reviewed-on: https://chromium-review.googlesource.com/636367
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
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>
|
|
e080387e
|
2017-08-23T15:30:23
|
|
Refactor array element type checks
Remove checks that would never fail, and refactor the functions into
more self-contained checks. For example, it doesn't make sense to
check the qualifier from the part of the type that doesn't contain the
qualifier.
This prepares for adding the parsing of arrays of arrays.
BUG=angleproject:2125
TEST=angle_unittests
Change-Id: I1144bee35d2b04c7cb22e2bb7e17307298e35f8c
Reviewed-on: https://chromium-review.googlesource.com/629016
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
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>
|
|
b18c33e9
|
2017-08-16T12:37:51
|
|
Remove arraySize in TInterfaceBlock
This patch intends to remove the field 'arraySize' in TInterfaceBlock.
The field 'arraySize' in TInterfaceBlock is redundant because:
1. If the interface block has instance name, it is recorded as one
symbol as a whole, and its array size is recorded in the TType
of the symbol.
2. If the interface block doesn't have instance name, its members are
recorded separately, and it cannot be declared as an interface block
array.
This patch can make the implementation of Geometry Shader easier
when we set array size to the built-in interface block 'gl_in' and other
user-defined unsized input interface blocks during the compilation of a
Geometry Shader.
BUG=angleproject:1941
TEST=angle_end2end_test
Change-Id: I9a51aab9b8f9ea7e88af157505c092426cee7e6e
Reviewed-on: https://chromium-review.googlesource.com/615759
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
|
|
41ac68e7
|
2017-06-06T12:16:58
|
|
Select viewport index in GS for multi-view instanced rendering
The patch extends the OutputHLSL and DynamicHLSL translators to
select the viewport index in the geometry shader and propagate
the ViewID variable to the fragment shader.
BUG=angleproject:2062
TEST=angle_end2end_tests
Change-Id: I9e344a7521e2e1137e6eb38d0bfecea8bece778f
Reviewed-on: https://chromium-review.googlesource.com/608967
Commit-Queue: Martin Radev <mradev@nvidia.com>
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
e86db0c1
|
2017-08-11T15:24:58
|
|
Remove unused vectorSize() from OutputHLSL
BUG=angleproject:2125
TEST=compile
Change-Id: Ideae29190bd9cd56ecdc0ea31a078d4460413540
Reviewed-on: https://chromium-review.googlesource.com/616145
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
599555b5
|
2017-08-15T11:12:42
|
|
Clean up createSamplerSymbols
The arrayOfStructsSize parameter can always be determined from the
TType object, so there's no need to pass it to
TType::createSamplerSymbols. Furthermore, it's more natural to do
the processing for arrays of structs in TType::createSamplerSymbols,
rather than in the TStructure::createSamplerSymbols helper it is
using.
Also rename some parameter names, and move createSamplerSymbols
implementation to Types.cpp.
This refactoring change prepares for implementing arrays of arrays.
BUG=angleproject:2125
TEST=angle_end2end_tests
Change-Id: I3f8bec711c0434677ebcf3741abb4f910c36dba3
Reviewed-on: https://chromium-review.googlesource.com/614883
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
|
|
28839f03
|
2017-08-15T11:38:16
|
|
Fix handling sampler arrays in structs as function arguments on HLSL
Some of the code was written under the mistaken assumption that
createSamplerSymbols would be splitting sampler arrays in structs into
individual samplers. Fix it by adding array dimensions to sampler
parameters generated by createSamplerSymbols when necessary.
BUG=angleproject:2128
TEST=angle_end2end_tests
Change-Id: Ie622c777d78ae65b5629d12e0ae574800c1b78f5
Reviewed-on: https://chromium-review.googlesource.com/614882
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
|
|
78ed6cd9
|
2017-08-09T16:19:00
|
|
Rename VariableInfo files to CollectVariables
Files that only have a single function should be named consistently
with the function. Unnecessary include in CallDAG.h is removed.
BUG=angleproject:2068
TEST=angle_unittests
Change-Id: I27d55a766b9eb66fcfd1e0a2341a2843bb9dc5bb
Reviewed-on: https://chromium-review.googlesource.com/608368
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
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>
|
|
9b11ea4f
|
2017-07-11T16:50:08
|
|
Gather UniformBlock and ShaderStorageBlock separately
Refactor InterfaceBlocks since it only stands for UniformBlock before
ES31. But for ES31, uniform block and shader storage block both belong
to interface block.
This CL will add GetUniformBlocks and GetShaderStorageBlocks in
ShaderLang.h. Meanwhile, keep GetInterfaceBlocks which can return all
the interface blocks together.
BUG=angleproject:1951
Change-Id: I3036e201aadfbd490575ed03538c81bcc3793ff3
Reviewed-on: https://chromium-review.googlesource.com/582546
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
c2157a09
|
2017-08-09T18:52:59
|
|
HLSL: Fix handling nested structs in interface blocks
Make sure that the type definitions for nested structs get added to
the HLSL header, and that the std140 padding information gets
recorded. Prior to this trying to use nested structs in interface
blocks crashed.
BUG=angleproject:2084
TEST=angle_end2end_tests
Change-Id: If57870285c6feaf0c2e462f98f50f20730dd6470
Reviewed-on: https://chromium-review.googlesource.com/608449
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
ed049ab4
|
2017-06-30T17:38:33
|
|
HLSL: Fix handling arrays of structs in interface blocks
In HLSL output, structs in interface blocks are not accessed directly.
Rather they get copied from the D3D constant buffer to static structs
in the shader header. Fix generating the copy/init code in the header
to handle arrays of structs correctly.
BUG=angleproject:2084
TEST=angle_end2end_tests
Change-Id: If66bd5be3f3570ba591b8b62c5284c06fc83dd45
Reviewed-on: https://chromium-review.googlesource.com/608448
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
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>
|
|
05c31dae
|
2017-07-18T16:11:39
|
|
ES31: Enable atomic counter for GL backend
This simply translates the offset qualifier and synchronizes
the buffer binding state for GL translator and renderer.
BUG=angleproject:1729
TEST=angle_end2end_tests:AtomicCounterBufferTest31
Change-Id: Ib8424918478ae4c47049d5856ea20ef022f12913
Reviewed-on: https://chromium-review.googlesource.com/575913
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@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>
|
|
7c5f5268
|
2017-07-05T12:20:19
|
|
Assign symbol ids in ArrayReturnValueToOutParameter
Assign symbol ids to out parameter symbol nodes that get created in
ArrayReturnValueToOutParameter. Also assign the EvqOut qualifier to
references to the out parameter - this is in line with what happens
normally in ParseContext.
BUG=angleproject:1490
TEST=angle_unittests, angle_end2end_tests
Change-Id: Ib1e8303e3ef09f2e0d24524277199785d6f47b53
Reviewed-on: https://chromium-review.googlesource.com/559533
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Jamie Madill <jmadill@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>
|
|
ab918821
|
2017-07-14T17:03:42
|
|
Clamp point size to maximum point size from the API on NVIDIA
NVIDIA OpenGL drivers have a bug where the point size range is being
reported incorrectly - it appears the core GL driver incorrectly gives
the range for smooth points, when it should be giving the range for
aliased points. Clamp the actual point size to the maximum point size
reported from the API so that the GLES spec is followed.
The same workaround seems to be necessary also on Android. The issue
was revealed by the trybots, and has not been fully diagnosed though.
The newly added test fails on AMD OpenGL.
As a part of this change, the existing tests in PointSpritesTest are
refactored to use gl_raii.
BUG=chromium:740560
TEST=angle_end2end_tests
Change-Id: Ic4a66c9ea16f5ae76beb3bb6577716d10c3b226e
Reviewed-on: https://chromium-review.googlesource.com/574598
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
3860b6c0
|
2017-07-19T16:17:24
|
|
Fix arrays of structs containing samplers as parameters on HLSL
In HLSL output, samplers are never passed to functions as arrays, but
rather sampler array arguments are expanded into single sampler and/or
texture arguments. This applies also when the samplers were inside
arrays of structs in the original source.
BUG=angleproject:2103
TEST=angle_end2end_tests
Change-Id: Ib1fcba0c0ab3da592d15272eb56a03c3e536f349
Reviewed-on: https://chromium-review.googlesource.com/576041
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
a5e693af
|
2017-07-13T16:07:26
|
|
Make unique id counter a member of TSymbolTable
This makes unique id counting thread-safe.
BUG=angleproject:624
TEST=angle_unittests
Change-Id: Ie0f2c7e574470b39750d37d2181c790bc874b275
Reviewed-on: https://chromium-review.googlesource.com/570419
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
282847e9
|
2017-07-12T14:11:01
|
|
Clean up recording declarations in OutputHLSL
Relying on the AST conforming to known limitations makes the code for
recording referenced varyings easier to understand.
BUG=angleproject:2104
TEST=angle_end2end_tests
Change-Id: Icdcd7602f6ed54fa439f989bf256e261627d11f5
Reviewed-on: https://chromium-review.googlesource.com/568018
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
ffb35f64
|
2017-07-14T18:01:07
|
|
Fix broadcasting gl_FragColor at the end of main
Previously, the broadcast step would not get run in case the main()
function returned before reaching its end. Now the broadcast step is
put in a separate function that wraps main() if needed, so that it
gets run even if the main() function in the original shader source
returns in the middle.
DrawBuffersTest is refactored to use ANGLETest::drawQuad() instead of
calling glDrawArrays directly.
BUG=angleproject:2109
TEST=WebGL conformance tests, angle_end2end_tests
Change-Id: Id5f05094e816df03bc9c8ca62b60de914072682c
Reviewed-on: https://chromium-review.googlesource.com/574597
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
0f68463f
|
2017-07-13T12:42:15
|
|
Clean up inserting variables to symbol table
This makes the TSymbolTable interface cleaner and prepares for making
unique id counting thread-safe.
BUG=angleproject:624
TEST=angle_unittests
Change-Id: Ief99c9fc777603de28ba1517e351bc8a00633590
Reviewed-on: https://chromium-review.googlesource.com/570418
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@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>
|
|
b50ccd36
|
2017-07-06T17:09:58
|
|
Use FindMainBody to retrieve node of main()'s body
The patch addresses code duplication in cases in which main()'s body node
has to be retrieved from the AST.
TEST=angle_unittests
Change-Id: I0ccee41821a5ecb2cdf09f5a928b178d6c037587
Reviewed-on: https://chromium-review.googlesource.com/561521
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
|
|
318f9aa5
|
2017-05-17T17:47:28
|
|
Initialize ANGLE_multiview caps and workaround state
The patch checks whether ANGLE_multiview can be supported in the OpenGL
renderer, updates the caps and adds a workaround field to enable
multiview support through the NV_viewport_array2 extension.
BUG=angleproject:2062
TEST=angle_end2end_tests
Change-Id: I99dae10564db7bcca41d7624f8de272c1d996e09
Reviewed-on: https://chromium-review.googlesource.com/567934
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
4cafb867
|
2017-07-05T14:05:06
|
|
Sanitize AST nodes created by UseInterfaceBlockFields
Don't add the same node pointer to the AST more than once, and assign
the right symbol ids to symbol nodes.
BUG=angleproject:1490
TEST=angle_unittests, angle_end2end_tests
Change-Id: I3f00e9234245fe4b81a2388df3f83e13c4c24856
Reviewed-on: https://chromium-review.googlesource.com/559534
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
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>
|
|
d7ceaa16
|
2017-07-12T17:46:35
|
|
Remove TIntermSymbol::setId
The only place it was being used was when parsing array declarators.
The declarator only needs to be added to the AST when the variable
has successfully been declared, so this usage was not necessary.
BUG=angleproject:1490
TEST=angle_unittests
Change-Id: I05b8851cfdebc9253c9fda8b12733f23da604ca6
Reviewed-on: https://chromium-review.googlesource.com/569160
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
34bc315d
|
2017-03-29T14:56:01
|
|
ES31: Implement multisampled Textures for D3D part.
Implement TexStorage2DMultisample api for d3d part.
BUG=angleproject:1590
TEST=angle_end2end_tests --gtest_filter=TextureMultisampleTest*
TEST=angle_deqp_gles31_tests --deqp-case=dEQP-GLES31.functional.texture.multisample.negative.fbo_*
Change-Id: Icbfba45b9c2965af02b54dd4060b7b49970cb74b
Reviewed-on: https://chromium-review.googlesource.com/457161
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jamie Madill <jmadill@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
|
|
84db5733
|
2017-07-13T08:00:02
|
|
Merge "Fix non statically used fragment input structs on HLSL"
|
|
9dd5dbd8
|
2017-07-12T16:26:42
|
|
Merge "Link atomic counters to buffers"
|
|
06a06f5e
|
2017-07-12T12:22:15
|
|
Fix non statically used fragment input structs on HLSL
Add static use information to struct fields that mirrors the static
use information on the struct itself. This way dynamically generated
HLSL doesn't need special handling for initializing fragment inputs
if they are structs.
This fixes a problem with the previous code where dynamically
generated HLSL ended up trying to initialize structs that are not
declared in the HLSL output because they were not being referenced.
BUG=angleproject:2104
TEST=angle_end2end_tests
Change-Id: I21283ce4fe26515d62d95e61f8155dc9a9b44cf1
|