|
42077bb1
|
2015-02-16T15:32:37
|
|
Implement missing variants of min, max and clamp
BUG=angle:914
TEST=dEQP tests
Tests passing 100% because of this change:
dEQP-GLES3.functional.shaders.operator.common_functions.min.*
dEQP-GLES3.functional.shaders.operator.common_functions.max.*
dEQP-GLES3.functional.shaders.operator.common_functions.clamp.*
Reduced number of errors in tests:
EQP-GLES3.functional.shaders.constant_expressions.builtin_functions.common.*
These tests are not yet passing because of constant expressions
bug (angle bug:913)
Change-Id: Ibccee47ed78e994e40a0effe9afa9cf9692492b0
Reviewed-on: https://chromium-review.googlesource.com/250330
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Nicolas Capens <capn@chromium.org>
Tested-by: Jamie Madill <jmadill@chromium.org>
|
|
ff805cc3
|
2015-02-13T10:59:34
|
|
Separate integer and float modulus
Integer and float modulus are separated into Mod and IMod operator types
to make the code clearer and to make GetOperatorString return the correct
value for both.
Change-Id: Ibfbca2c558bf919b0eab6404d7349f87fe47a18c
Reviewed-on: https://chromium-review.googlesource.com/249692
Tested-by: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
|
|
09b22474
|
2015-02-11T11:47:26
|
|
Add addBinaryMath and addUnaryMath helpers to ParseContext
This refactoring reduces code duplication and moves functionality that is
not immediately related to the language grammar out of glslang.y.
BUG=angle:911
Change-Id: If5e225461890ed542dee01905829df1c9a6f5e27
Reviewed-on: https://chromium-review.googlesource.com/248570
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Tested-by: Jamie Madill <jmadill@chromium.org>
|
|
1033e1d8
|
2015-02-12T12:03:13
|
|
Move operator definitions to their own file
This generalizes GetOperatorString so that it can be used outside
ValidateLimitations.
BUG=angle:911
Change-Id: I43a160b3d7d60388ad529a72f1720d3171f67315
Reviewed-on: https://chromium-review.googlesource.com/249073
Tested-by: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
|
|
9b82084f
|
2015-02-12T10:40:10
|
|
Fix HLSL varying struct linking.
We would always expand a struct name to always include its symbol
ID. This fixes the workaround to only affect scoped structs.
We can leave global structs, which are by definition uniquely named,
without decorating them with a symbol ID.
This fixes several tests in dEQP's shader.linkage.varying.struct.
Re-land with GLSL translator bug fixed.
BUG=angle:910
Change-Id: I23a932bd1dadea5e9aafabde697e6a2af9a43f2b
Reviewed-on: https://chromium-review.googlesource.com/249134
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
Tested-by: Jamie Madill <jmadill@chromium.org>
|
|
b960cc4a
|
2015-02-12T15:33:20
|
|
Revert "Allow varying structs to match between stages."
This patch has a bug which breaks the GLSL to GLSL translator.
See broken GPU FYI bot builds on the Chromium waterfall:
http://build.chromium.org/p/chromium.gpu.fyi/builders/Win7%20Release%20%28NVIDIA%29/builds/13074
This reverts commit 489ffc4d69656c2dbfdbe07e3fa6e38baeb3e072.
Change-Id: I8241c6d658f4f31af91b89af1141d3d778ff7c70
Reviewed-on: https://chromium-review.googlesource.com/249131
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Tested-by: Jamie Madill <jmadill@chromium.org>
|
|
f4780c1c
|
2015-02-11T16:33:11
|
|
Use correct non-square register count in structs.
For struct varyings with nested structs, we would count registers
incorrectly, and produce D3D link errors.
This fixes tests in the dEQP's shaders.linkage.varying.struct.
BUG=angle:910
Change-Id: I47ea6dba36bf57cf94a7e7f30997c6c9096c2b40
Reviewed-on: https://chromium-review.googlesource.com/247243
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
|
|
489ffc4d
|
2015-02-11T16:33:07
|
|
Allow varying structs to match between stages.
We would always expand a struct name to always include its symbol
ID. This workaround fixed scoped structs with the same name. It
would also block any possiblity of linking the structs successfully.
Instead we can use the workaround only on inner-scoped structs, and
leave global structs, which are by definition uniquely named, as
they are.
This fixes several tests in dEQP's shader.linkage.varying.struct.
BUG=angle:910
Change-Id: I81b8dadc7ea493152aff0c44d607114eaaabb142
Reviewed-on: https://chromium-review.googlesource.com/247242
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Tested-by: Jamie Madill <jmadill@chromium.org>
|
|
2857f489
|
2015-02-09T15:35:29
|
|
Fix struct uniform packing.
Our current code would not adapt properly for members that did
not fit in the previous register. Instead, use the correct adjusted
value as returned from the block layout encoder.
This fixes a dEQP WebGL test: gles2/shaders/linkage.
BUG=angle:910
Change-Id: Id77d0c76ce767665b3db97cb4d14e8008254fd9f
Reviewed-on: https://chromium-review.googlesource.com/247241
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
55e79e09
|
2015-02-09T15:35:00
|
|
Implement equality ops for nested structs.
This fixes the WebGL test glsl_misc_struct_equals as well as
several dEQP tests in functional.shaders.struct.
BUG=391957
BUG=angle:910
Change-Id: I09f3cd3f51bbc3541b64dbcfddfe01884ddba6f5
Reviewed-on: https://chromium-review.googlesource.com/247083
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
b3dced29
|
2015-01-12T14:54:55
|
|
Implementing gl_InstanceID in the HLSL compiler.
Fixes:
dEQP-GLES3.functional.instanced.draw_arrays_instanced.instance_id
dEQP-GLES3.functional.instanced.draw_arrays_instanced.mixed
dEQP-GLES3.functional.instanced.draw_elements_instanced.instance_id
dEQP-GLES3.functional.instanced.draw_elements_instanced.mixed
BUG=angle:601
Change-Id: I6e120eebc90d00e025fc58f096064e6ed1da826b
Reviewed-on: https://chromium-review.googlesource.com/246911
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Tested-by: Gregoire Payen de La Garanderie <Gregory.Payen@imgtec.com>
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
|
|
0fbd128c
|
2015-02-02T14:46:09
|
|
Extension behavior is now reset between each shader translation unit.
The extension behavior was being shared between translation units,
this was causing states to be cached between shader compilers. This
has been fixed now by adding a new ResetExtensionBehavior() function.
A unit test has also been added for testing extensions when compiling
shaders. A test has been included which tests that the internal state
of the extension behavior is being reset properly.
BUG=453543
Change-Id: Icb2a07019b5db972dc75cdbbdece4b7e9757c682
Reviewed-on: https://chromium-review.googlesource.com/245522
Tested-by: David Yen <dyen@chromium.org>
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
|
|
37997145
|
2015-01-28T10:06:34
|
|
Defer dependent HLSL global var inits.
Some global initializers depend on other globals, for instance a
varying or attribute value. Since we use a static proxy variable for
these varyings, we need to initialize the global static after we
initialize the proxy in the shader preamble. This fixes a long-
standing compiler bug.
We should also add a WebGL test for this.
BUG=angle:878
Change-Id: I71db103a6b8c24fb862e0d8b32293da9bc2e8103
Reviewed-on: https://chromium-review.googlesource.com/243581
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
32aab01d
|
2015-01-27T14:12:26
|
|
Use a stack for OutputHLSL info log output.
Previously we would always reference mBody in several intermediate
output methods. This made using these traversals from within the
header, or for utility methods, very difficult. Instead, use a stack
where we write to the top InfoLog, and can push/pop from the stack.
This gives us more flexibility.
BUG=angle:878
Change-Id: I8a6c0382bad18b44d75158274c701db13d4d4e65
Reviewed-on: https://chromium-review.googlesource.com/243580
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
|
|
3ae6465f
|
2015-01-26T15:51:39
|
|
Fix lots of variable shadowing in ANGLE
BUG=angle:877
Change-Id: I3df0fffb19f5ecbe439fbc2a8d6d239a5dc6b638
Reviewed-on: https://chromium-review.googlesource.com/243334
Tested-by: Austin Kinross <aukinros@microsoft.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
1be8870b
|
2015-01-19T16:56:44
|
|
Avoid precision emulation overhead on unused values
Avoid rounding intermediate values when the intermediate value is not
consumed. For example, this avoids rounding the return value of
assignment, so "b = a;" becomes "b = frm(a);" instead of "frm(b =
frm(a))".
BUG=angle:874
TEST=compiler_tests
Change-Id: Ifcdb53fb1d07a2cf24e429cc237c2d0262dc32f8
Reviewed-on: https://chromium-review.googlesource.com/241852
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
Tested-by: Olli Etuaho <oetuaho@nvidia.com>
|
|
74cafab1
|
2015-01-23T23:17:32
|
|
Revert "Fix lots of variable shadowing in ANGLE"
Caused WebGL CTS failures on the texture-npot test:
https://www.khronos.org/registry/webgl/sdk/tests/conformance/textures/texture-npot.html
This reverts commit c67e6e9fade44ef8938724e82db11db725e9c8e5.
Change-Id: I089e99859231e0d657084ac3647257c650a9da92
Reviewed-on: https://chromium-review.googlesource.com/243041
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Tested-by: Geoff Lang <geofflang@chromium.org>
|
|
c67e6e9f
|
2015-01-21T16:01:07
|
|
Fix lots of variable shadowing in ANGLE
BUG=angle:877
Change-Id: I15168ae32605b26aee08274464ffe68adb5a7e87
Reviewed-on: https://chromium-review.googlesource.com/242351
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Tested-by: Austin Kinross <aukinros@microsoft.com>
|
|
e6664f06
|
2015-01-09T16:22:24
|
|
Added PointSprites Support for renderers that do not support Geometry Shaders
Change-Id: Iae9ac5f8fbba68dba5e49ccda7bb7eebb05c8e9a
Reviewed-on: https://chromium-review.googlesource.com/240450
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Tested-by: Geoff Lang <geofflang@chromium.org>
|
|
31b5fc62
|
2015-01-16T12:13:36
|
|
Add support for bitwise operations in ESSL3
Add support for <<, >>, &, |, ^, and their compound assignment variants
<<=, >>=, &=, |=, ^=. Also add support for bitwise not (~).
BUG=angle:870
Change-Id: I5e6a835409589556d5d58d58078fdf505cfd8da5
Reviewed-on: https://chromium-review.googlesource.com/241850
Tested-by: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
7700ff65
|
2015-01-15T12:16:29
|
|
Add basic support for ESSL3 vec2 (un)pack functions
The functions are emulated on HLSL, and use the native functions on
OpenGL 4.2+ and GLES3.0. Emulation for OpenGL versions <= 4.1 is not yet
implemented.
BUG=angle:865
Change-Id: I6803a1767dacdb3dca12f13924651fd38fcacb75
Reviewed-on: https://chromium-review.googlesource.com/240961
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Tested-by: Olli Etuaho <oetuaho@nvidia.com>
|
|
abf6dadd
|
2015-01-14T14:45:16
|
|
Implement matrix inverse built-in
Inverse is emulated in HLSL by calculating the cofactor matrix and
dividing that with the determinant. This results in the transpose of the
inverse as is required. Better performing options might exist especially
for 4x4 matrices, but this is enough for a working implementation.
BUG=angle:859
Change-Id: I5185797cc1ed86865f5f4342707abdc2977a186b
Reviewed-on: https://chromium-review.googlesource.com/240331
Tested-by: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
d68157fc
|
2015-01-16T12:24:17
|
|
Fix issues related to modulus operator
Make sure that "scalar %= vector" is not approved by the compiler, and
that % and %= are only exposed on GLES3.
BUG=angle:854
Change-Id: I3ac7eb607bd86a6caa905d2bef5d397688ad3fd3
Reviewed-on: https://chromium-review.googlesource.com/241410
Tested-by: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Gregoire Payen de La Garanderie <Gregory.Payen@imgtec.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
80a5a6c6
|
2015-01-12T15:35:27
|
|
Clean up BuiltInFunctionEmulator public interface
This removes all language-specific bits from BuiltInFunctionEmulator
parent class, and makes the public interface of BuiltInFunctionEmulator
minimal.
Writing comments around emulated function definitions is removed from
OutputHLSL, they are not necessary as the emulated function definitions
are just another part of the shader header.
Change-Id: I9abf57d86f4e37b0674d7dfafe653298f205dd27
Reviewed-on: https://chromium-review.googlesource.com/240230
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Nicolas Capens <capn@chromium.org>
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
Tested-by: Olli Etuaho <oetuaho@nvidia.com>
|
|
e39706d0
|
2014-12-30T16:40:36
|
|
Implement simple ESSL3 matrix functions
Add support for built-in functions outerProduct, determinant, transpose
and the variations of matrixCompMult that were previously unsupported.
BUG=angle:859
Change-Id: Ie2b9cf83cd80c5a886c6d4eb190c7ce25a32d0a4
Reviewed-on: https://chromium-review.googlesource.com/239873
Reviewed-by: Nicolas Capens <capn@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
Tested-by: Olli Etuaho <oetuaho@nvidia.com>
|
|
e17e3197
|
2015-01-02T12:47:59
|
|
Use BuiltInFunctionEmulatorHLSL for all emulated functions
Implementation of missing built-in functions is a separate concern from
outputting the intermediate tree itself as HLSL, so it makes sense to
have all of the built-in emulation in a class that is separate from
OutputHLSL. Being able to reuse the same logic for different emulated
functions also makes the code more compact.
Change-Id: Id503dc3a5c5e743ec65722add56d6ba216a03a7f
Reviewed-on: https://chromium-review.googlesource.com/239872
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Nicolas Capens <capn@chromium.org>
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
Tested-by: Olli Etuaho <oetuaho@nvidia.com>
|
|
2aafa18b
|
2015-01-08T19:04:48
|
|
Fix null check after addUnaryMath is called for a built-in function
The intermTypedNode pointer null check should be done before the pointer
is used, not after. In practice the pointer should never be null if
IntermUnary::promote() is consistent with the built-in function table,
but it's useful to have the null check as a fail-safe when developing.
Change-Id: I24e0d7399ef9d628f474e99fbca08dbd67fdd8c3
Reviewed-on: https://chromium-review.googlesource.com/240411
Tested-by: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
9e0478f6
|
2015-01-13T11:13:54
|
|
Move the block layout code to translator.
This code is easily accessible from the translator, with the proper
export calls. This facilitates adding a common static library, since
this code calls some methods in translator.
BUG=angle:773
Change-Id: I0c50098ec3f67c2df7749b3c2518be0a9fd939e2
Reviewed-on: https://chromium-review.googlesource.com/240093
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
Tested-by: Jamie Madill <jmadill@chromium.org>
|
|
f6bdb312
|
2015-01-09T15:21:38
|
|
Refactor defining emulated functions in BuiltInFunctionEmulator
This removes the fixed enumeration of emulated functions in favor of a
dynamic map. This makes the code more compact and flexible. The main
benefit is that maintaining the list emulated functions is a lot simpler
now.
Change-Id: Ic9951a496b9f021c76ad5b4c3daccd89af5ac093
Reviewed-on: https://chromium-review.googlesource.com/239871
Tested-by: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Nicolas Capens <capn@chromium.org>
|
|
5c9cd3d1
|
2014-12-18T13:04:25
|
|
Implement hyperbolic function support for ESSL 3.00
Emulating arc hyperbolic functions is required on HLSL, where they do
not exist natively. For this, BuiltInFunctionEmulator is split into GLSL
and HLSL subclasses. The GLSL subclass handles the pre-existing built-in
emulation implemented for working around OSX bugs, and the HLSL subclass
handles emulating asinh, acosh and atanh on HLSL.
BUG=angle:855
Change-Id: I0dfeffb862ac27ba7f9ecf5492ec31d9d952b273
Reviewed-on: https://chromium-review.googlesource.com/236861
Reviewed-by: Nicolas Capens <capn@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Tested-by: Olli Etuaho <oetuaho@nvidia.com>
|
|
e8d2c072
|
2015-01-08T16:33:54
|
|
Implement float-integer conversions for ESSL 3.00
The implementation uses asint, asuint and asfloat in the HLSL output.
BUG=angle:865
Change-Id: I6b48298e18c7b3b0bdeac522b375ebc4eab7cf4e
Reviewed-on: https://chromium-review.googlesource.com/239520
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Tested-by: Olli Etuaho <oetuaho@nvidia.com>
|
|
4fd18b1b
|
2014-12-22T12:32:05
|
|
Emulate large and negative viewports on D3D11 Feature Level 9_3
Like D3D9, D3D11 Feature Level 9_3 doesn't support large or negative
viewports. We have to emulate these in the vertex shader.
BUG=angle:858
Change-Id: I2bd53e3921dc3590cc7193164d73596deafca9ea
Reviewed-on: https://chromium-review.googlesource.com/236040
Tested-by: Austin Kinross <aukinros@microsoft.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
21c1e456
|
2014-12-29T11:33:41
|
|
Fix a translator crash with index expressions.
This crash happened with certain bad shaders which used temporary
values as array (or other) index expresisons.
Fixes the crash covered in the WebGL test
"conformance/bugs/undefined-index-should-not-crash"
BUG=angle:857
Change-Id: I13e2ba6d5f1ab0846ac902021bc0b57cbb37d759
Reviewed-on: https://chromium-review.googlesource.com/237460
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Tested-by: Jamie Madill <jmadill@chromium.org>
|
|
be954a23
|
2014-12-23T00:05:28
|
|
Implement support for the binary operator '%' in the translator.
BUG=angle:854
Change-Id: If116de132dc83d93255749b54c1919a75abcb65c
Reviewed-on: https://chromium-review.googlesource.com/236330
Tested-by: Gregoire Payen de La Garanderie <Gregory.Payen@imgtec.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
185de884
|
2014-12-22T15:17:52
|
|
Update ANGLE's translator to Bison 3.
BUG=angle:462
Change-Id: I2c1c18027dee1c3b4efb87374caaadbf58367841
Reviewed-on: https://chromium-review.googlesource.com/236930
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
|
|
6c85047a
|
2014-12-02T16:23:17
|
|
Reject compound assignments of the type scalar op= vector/matrix
scalar op vector/matrix produces a vector/matrix, which can't be
assigned to a scalar. Handle this correctly for addition, subtraction and
division. Multiplication was already handled correctly as a special case.
BUG=angle:832
TEST=WebGL conformance tests
Change-Id: I318cae8bf353a5c58c588876ce3f29d18389263c
Reviewed-on: https://chromium-review.googlesource.com/232601
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Tested-by: Olli Etuaho <oetuaho@nvidia.com>
|
|
2c43325d
|
2014-12-03T12:36:54
|
|
Fix double delete with invariant varyings.
The compiler would leave some TString variables lying around
after the pool gets released, leading to a potential crash.
BUG=angle:846
Change-Id: I484ed9b14bba9bf653f6ed4001ae79f87791b0dd
Reviewed-on: https://chromium-review.googlesource.com/232780
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
Reviewed-by: Kenneth Russell <kbr@chromium.org>
|
|
2ec386bb
|
2014-12-03T14:44:38
|
|
Rename IsSampler to IsSamplerType.
BUG=angle:733
Change-Id: I62aece16c11aefdbf13c0b5faf83040fdb8555e6
Reviewed-on: https://chromium-review.googlesource.com/232960
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Tested-by: Geoff Lang <geofflang@chromium.org>
|
|
352beffc
|
2014-11-19T13:45:55
|
|
Remove RemoveAllTreeNodes, since it was a no-op
IntermNode operator delete() or any of the IntermNode destructors don't
do anything, since all the AST memory is allocated on the PoolAllocator.
Because of this, RemoveAllTreeNodes was simply a no-op, and redundant
with the PoolAllocator deallocation procedure, and could confuse people
reading the code to think that IntermNodes should be deleted
individually, when in fact this is not the case.
BUG=angle:831
Change-Id: Ie1ccaa51986aabf267280d92a8e76ca9f97a19e5
Reviewed-on: https://chromium-review.googlesource.com/230730
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Tested-by: Olli Etuaho <oetuaho@nvidia.com>
|
|
ea7a2121
|
2014-11-17T16:15:57
|
|
Add GLSL/ESSL validator/translator support for GL_EXT_shader_framebuffer_fetch.
BUG=angle:834
Change-Id: I2d4e25909a8e1266b9bb7f1d4421324143157c8a
Reviewed-on: https://chromium-review.googlesource.com/231032
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Tested-by: Erik Dahlström <ed@opera.com>
|
|
60305f14
|
2014-11-18T13:25:26
|
|
Fix error in dumping direct struct indexes.
The parser would become confused over the purported array size
of struct indexes. In reality they were always a single direct
index into a struct, but it would take the object size of the
represented type (EG, a vec4 would have size 4) and deference
out-of-bounds memory.
BUG=434033
Change-Id: I92349aa04e6faadc766cb28c04e28d5f19c4e1ec
Reviewed-on: https://chromium-review.googlesource.com/230530
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Nicolas Capens <capn@chromium.org>
|
|
853dc1ab
|
2014-11-06T17:25:48
|
|
Add mediump and lowp precision emulation support for GLSL output
This implements the rounding as specified in WEBGL_debug_shader_precision
extension proposal for desktop GLSL and ESSL output. The bulk of the new
functionality is added in the form of a new EmulatePrecision AST
traverser, which inserts calls to the rounding routines angle_frm and
angle_frl in the appropriate places, and writes the rounding routines
themselves to the shader.
Compound assignments which are subject to emulation are transformed from
"x op= y" to "angle_compound_op_frm(x, y)", a call to a function which
does the appropriate rounding and places the result of the operation to
x.
The angle_ prefixed names should not clash with user-defined names if
name hashing is on. If name hashing is not on, the precision emulation
can only be used if the angle_ prefix is reserved for use by ANGLE.
To support the rounding routines in output, a new operator type is added
for internal helper function calls, which are not subject to name
hashing.
In ESSL output, all variables are forced to highp when precision
emulation is on to ensure consistency with how precision emulation
performs on desktop.
Comprehensive tests for the added code generation are included.
BUG=angle:787
Change-Id: I0d0ad9327888f803a32e79b64b08763c654c913b
Reviewed-on: https://chromium-review.googlesource.com/229631
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Tested-by: Olli Etuaho <oetuaho@nvidia.com>
|
|
0a73dd85
|
2014-11-19T16:18:08
|
|
Fix include guards.
BUG=angle:733
Change-Id: I08b2c11c4831f1161c178c1842b10e807185aced
Reviewed-on: https://chromium-review.googlesource.com/230831
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Tested-by: Geoff Lang <geofflang@chromium.org>
|
|
e371f1d7
|
2014-11-21T11:25:22
|
|
Update the DISALLOW_COPY_AND_ASSIGN macro to use c++ operator deletion.
Also remove the TSymbol copy constructor which is not used.
BUG=angle:836
Change-Id: I4f35f554c90d01dc2132d244a1974d9a8dc89bbd
Reviewed-on: https://chromium-review.googlesource.com/231231
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shannon Woods <shannonwoods@chromium.org>
Tested-by: Geoff Lang <geofflang@chromium.org>
|
|
21203702
|
2014-11-13T16:16:21
|
|
Fix precision tracking of constructor return values
Precision should be set for constructor return values if they are of a
built-in type. Structs should not be precision qualified.
BUG=angle:787
Change-Id: Ie5efd5be25a788ff6f01c5b989254572c00231eb
Reviewed-on: https://chromium-review.googlesource.com/229560
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Nicolas Capens <capn@chromium.org>
Tested-by: Olli Etuaho <oetuaho@nvidia.com>
|
|
80bacde5
|
2014-11-10T12:07:37
|
|
Use the [[flatten]] attribute only when a loop is present.
Flattening branch-heavy shaders that contained no loops caused regressions.
As a temporary workaround we only flatten ifs when there exists a loop.
BUG=395048
Change-Id: I95c40f0249643b98c62304a0f2a4563561d1fbbc
Reviewed-on: https://chromium-review.googlesource.com/228722
Reviewed-by: Shannon Woods <shannonwoods@chromium.org>
Tested-by: Corentin Wallez <cwallez@chromium.org>
|
|
76acee83
|
2014-11-04T13:44:03
|
|
Name mangle function prototypes and print them in interm output
This patch changes function prototype handling so that they get assigned
the same kind of a mangled name as function definitions and function
calls. This name is now also printed in interm output so that function
prototypes can be accurately identified in the interm output.
BUG=angle:821
TEST=compiler_tests
Change-Id: Ia150b8ac5b816b8096c964767cd8666bdee28539
Reviewed-on: https://chromium-review.googlesource.com/227390
Reviewed-by: Nicolas Capens <capn@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Tested-by: Olli Etuaho <oetuaho@nvidia.com>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
4de44cb6
|
2014-10-29T18:03:46
|
|
Change ShaderLang APIs from c style to c++ style.
BUG=angle:816
TEST=gpu_unittests,angle_unittests,webgl_conformance
Change-Id: I0b46c11f6055a82511bb946a6dc491360835526e
Reviewed-on: https://chromium-review.googlesource.com/226410
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
Tested-by: Zhenyao Mo <zmo@chromium.org>
|
|
db9b40b0
|
2014-10-29T15:00:04
|
|
Reject shaders of a version that the compiler doesn't support.
For example, WebGL 1.0 compiler should not compile WebGL 2.0 shaders.
BUG=angle:
TEST=815
Change-Id: Iaec66fa5127426778aff6e3891e2c214048d7457
Reviewed-on: https://chromium-review.googlesource.com/226380
Tested-by: Zhenyao Mo <zmo@chromium.org>
Reviewed-by: Shannon Woods <shannonwoods@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
409078f1
|
2014-10-28T13:23:18
|
|
Remove ShGetVariableInfo() and related code.
BUG=angle:775
TEST=chromium builds and runs fine
Change-Id: Ic62d3a3c9a8f034880b77a96f7f1c6be2691985e
Reviewed-on: https://chromium-review.googlesource.com/226004
Tested-by: Zhenyao Mo <zmo@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shannon Woods <shannonwoods@chromium.org>
|
|
2a517272
|
2014-10-27T16:09:57
|
|
Fix an issue with separate invariant statement.
Basically we end up with an extra "invariant xxx ;;" on GL backend.
This is not handled correctly by Mac drivers and also out shader translator.
BUG=angle:776
TEST=webgl conformance on mac/windows
Change-Id: If32867efba64ab0d3e6e690155790b90d736439f
Reviewed-on: https://chromium-review.googlesource.com/225780
Tested-by: Zhenyao Mo <zmo@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
d2a67b96
|
2014-10-21T16:42:57
|
|
Fix precision tracking for built-in function return values
Previously, the type of the return value of all function calls was set to
the type of the return value in the function signature. This did not
carry precision information.
This patch changes this so that the return value precision is set
correctly for built-in functions. For single-argument math functions, it
mostly depends on that addUnaryMath sets the type of the return value to
be the same as the type of the operand. The type is replaced but the
precision information from the operand type is retained when needed. For
multi-argument math functions, precision is determined based on all the
nodes in the aggregate after the type has been set. For texture
functions, the precision is set according the sampler type as per ESSL
1.0 spec. For textureSize, the precision is always highp as per ESSL 3.0
spec.
BUG=angle:787
Change-Id: I48448e3ffe38656b91177dee9b60dd07a03cd095
Reviewed-on: https://chromium-review.googlesource.com/224951
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Nicolas Capens <capn@chromium.org>
Tested-by: Olli Etuaho <oetuaho@nvidia.com>
|
|
b5e17750
|
2014-10-22T10:57:10
|
|
Get rid of use of "static const std::string".
BUG=angle:807
TEST=angle_unittests
Change-Id: Ifa4d713deeb25d52a7aafc362a7e4630024fd511
Reviewed-on: https://chromium-review.googlesource.com/225004
Tested-by: Zhenyao Mo <zmo@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
0783efd8
|
2014-10-21T15:51:59
|
|
Fix initialization sequence translation bug.
BUG=angle:805
TEST=https://www.khronos.org/registry/webgl/sdk/tests/conformance/glsl/misc/expression-list-in-declarator-initializer.html
Change-Id: I94fbdd0824dbe73034f8bf022aa53627582ad48b
Reviewed-on: https://chromium-review.googlesource.com/224813
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Tested-by: Zhenyao Mo <zmo@chromium.org>
|
|
70a0b2a1
|
2014-10-21T11:48:39
|
|
Fix varying interpolation parsing.
This was broken sometime in the CollectVariables refactor.
BUG=angle:803
Change-Id: Iaa09449f02290c4547f87c1560465dc8998d957c
Reviewed-on: https://chromium-review.googlesource.com/224104
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
Reviewed-by: Shannon Woods <shannonwoods@chromium.org>
|
|
f9004131
|
2014-10-20T18:26:48
|
|
Always include precision in interm output if it's available
This helps with debugging precision propagation issues.
BUG=angle:787
Change-Id: Ia969481c8d933455cdafef4ae25c6ab3946bc1c2
Reviewed-on: https://chromium-review.googlesource.com/224281
Reviewed-by: Nicolas Capens <capn@chromium.org>
Reviewed-by: Shannon Woods <shannonwoods@chromium.org>
Tested-by: Shannon Woods <shannonwoods@chromium.org>
|
|
7c1cfd61
|
2014-10-15T14:59:57
|
|
Make ShBuiltInResources comparable with memcmp
Chromium builds a std::map with ShBuiltInResources as part of the key.
Comparator for == and < are needed for the map implementation.
Currently Chromium uses memcmp as the comparator. Padding
in ShBuiltInResources causes uninitialized reads.
Fix this by clearing the padding with memset during ShBuiltInResources
initialization.
Change-Id: I78aa3c59ce165503831aa2a67c96cf8af316c152
Reviewed-on: https://chromium-review.googlesource.com/223431
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Tested-by: Shannon Woods <shannonwoods@chromium.org>
|
|
94ac7b78
|
2014-10-15T18:22:08
|
|
Invariant related processing.
* Fix a bug in PreProcessor for STDGL pragma.
* Record all invariant settings and set them in ShaderVariable.
* Write #pragma STDGL invariant(all) in GL
BUG=angle:776
TEST=https://www.khronos.org/registry/webgl/sdk/tests/conformance/glsl/misc/shaders-with-invariance.html
Change-Id: Ie28b75480deed79f0c9f26e3b98f1778d1290182
Reviewed-on: https://chromium-review.googlesource.com/223610
Tested-by: Zhenyao Mo <zmo@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
5e0c80ad
|
2014-10-10T10:11:54
|
|
Use attributes to avoid unrolling and flatten conditionals.
[loop] and [flatten] help avoid unrolling make more shaders compile
successfully. When unrolling has to happen, an error X3531 is generated
so we have to try compiling again without these attributes.
BUG=395048,395286
Change-Id: I91ea8ac3a822ab1f1ac24907d42326e3c6c9d9af
Reviewed-on: https://chromium-review.googlesource.com/222810
Tested-by: Nicolas Capens <capn@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
964df49d
|
2014-10-13T11:54:39
|
|
Fix a crash with the WebGL conformance test suite.
Undefined behavior caused by an overflowed enum was causing
the translator symbol table stack to not get popped correctly
when the compiler completed, causing dangling symbols who's storage
was reclaimed and reused when the allocation pool was popped.
The error occurred in the "shader-with-reserved-words" test, which
passes when the compiler fails due to the use of reserved words as
identifiers. As such, this test would pass even if the GPU process
crashes but further tests in the test suite would fail.
BUG=angle::785, 786
Change-Id: I365cb55f962f8dfe409f40532effeb10b8189432
Reviewed-on: https://chromium-review.googlesource.com/223093
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
Reviewed-by: Nicolas Capens <capn@chromium.org>
Tested-by: Gus Fernandez <gusfernandez@chromium.org>
|
|
de1e00e1
|
2014-10-09T16:55:32
|
|
Implement support of unary operator "+" in translator.
BUG=angle:779
TEST=conformance/glsl/misc/struct-unary-operators.html
Change-Id: Ia827e07dcfc8ad3bbbc078e54336815be9027945
Reviewed-on: https://chromium-review.googlesource.com/222720
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Tested-by: Zhenyao Mo <zmo@chromium.org>
|
|
fa41aa08
|
2014-10-06T17:40:13
|
|
Perform short-circuit unfolding on separate declarations.
BUG=415694
Change-Id: I812abb21d2ab4af0b63631a23026d5860df61672
Reviewed-on: https://chromium-review.googlesource.com/221945
Tested-by: Nicolas Capens <capn@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Shannon Woods <shannonwoods@chromium.org>
|
|
d974db43
|
2014-10-07T10:50:19
|
|
Split combined declarations into separate statements.
BUG=415694
Change-Id: I7afb08a8a5ed10bbc6f7d23638daca6982f7c88b
Reviewed-on: https://chromium-review.googlesource.com/221455
Tested-by: Nicolas Capens <capn@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Shannon Woods <shannonwoods@chromium.org>
|
|
ed13636a
|
2014-10-03T13:23:01
|
|
Add type comparison, type retrieval, original name retrieval to ShaderVariable.
This is needed to effectively use the new APIs to get shader variable info.
BUG=angle::770
TEST=ShaderVariableTest
Change-Id: Ia591eb567868ebe898f4a7449c64167ad212f59b
Reviewed-on: https://chromium-review.googlesource.com/221388
Tested-by: Zhenyao Mo <zmo@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Reviewed-by: Shannon Woods <shannonwoods@chromium.org>
|
|
e61209af
|
2014-09-26T12:01:17
|
|
Add option to support EXT_draw_buffers with NV_draw_buffers
After this patch, it is possible to set a flag to change
EXT_draw_buffers extension directives to NV_draw_buffers in ESSL.
This enables users of ANGLE to emulate EXT_draw_buffers by using
NV_draw_buffers in combination with GLES3.0.
Change-Id: I5dacdbd6cd0d0362424ea3791557342c42efd4bd
Reviewed-on: https://chromium-review.googlesource.com/219941
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
Tested-by: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
a2fbb840
|
2014-09-03T09:40:47
|
|
Move CollectVariables to sh namespace.
BUG=angle:466
Change-Id: I903ea840e333dfeb44f242a1759aed39974d0510
Reviewed-on: https://chromium-review.googlesource.com/213505
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
Reviewed-by: Nicolas Capens <capn@chromium.org>
Tested-by: Jamie Madill <jmadill@chromium.org>
|
|
54ad4f81
|
2014-09-03T09:40:46
|
|
Use the CollectVariables path on the HLSL translator.
This approach consolidates our two methods, and lets us reuse the
same code for both methods of variable collection.
BUG=angle:466
Change-Id: Ie92f76ff0b6d0d0dbfd211a234d0ab86290fa798
Reviewed-on: https://chromium-review.googlesource.com/213504
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Nicolas Capens <capn@chromium.org>
|
|
a6f267f9
|
2014-08-27T11:44:15
|
|
Fix row-major layout tracking in interface blocks.
Some block field types, such as nested structs, were bugged. This
only affects our "CollectVariables" path, not our current HLSL
UBO path.
BUG=angle:466
Change-Id: I2b8daf58aa7ec1ad06a80d38f57e76087eacccdc
Reviewed-on: https://chromium-review.googlesource.com/213503
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Nicolas Capens <capn@chromium.org>
|
|
b547ddf5
|
2014-08-25T16:20:46
|
|
Fix interface block static use tracking.
The current code couldn't handle some uses of interface blocks,
such as blocks with instance names.
BUG=angle:466
Change-Id: I0a3746f277af0538cede30232532c6788412da1c
Reviewed-on: https://chromium-review.googlesource.com/213502
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Nicolas Capens <capn@chromium.org>
|
|
42bcf32e
|
2014-08-25T16:20:46
|
|
Refactor ShaderVariables to store fields in the base.
Instead of only storing structure information in Varyings, Uniforms
and Interface Block Fields, store it in the base class. Also only
store base variable information for struct fields, instead of fully
typed information. This works because stuff like interpolation type,
invariance, and other properties are for the entire variable, not
individual fields.
Also add new fields for interface block instance name, varying
invariance and structure name for all struct types.
BUG=angle:466
Change-Id: If03fc071e6becb7aad6dea5093989bba7daee69e
Reviewed-on: https://chromium-review.googlesource.com/213501
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Nicolas Capens <capn@chromium.org>
|
|
3b5c2dae
|
2014-08-19T15:23:32
|
|
Add a new invariant declaration operator.
BUG=angle:711
Change-Id: I54a48b636a68c317b8d44ee2d578847b80095289
Reviewed-on: https://chromium-review.googlesource.com/213500
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
Tested-by: Jamie Madill <jmadill@chromium.org>
|
|
33a74bde
|
2014-08-18T15:47:59
|
|
Fix std140 UBO layouts.
A call to "prePadding" instaed of "prePaddingString" was confusing
the HLSL output engine.
A separate bug was causing HLSL errors because HLSL puts all cbuffer
members in a flattened namespace, which caused our internal padding
variables to overlap.
BUG=angle:725
Change-Id: I69a01fefa430a83e433385c64a532a69e6851ae8
Reviewed-on: https://chromium-review.googlesource.com/212930
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Nicolas Capens <capn@chromium.org>
|
|
ffd7387a
|
2014-08-21T13:49:16
|
|
Prevent accessing more arguments than provided.
BUG=390111
Change-Id: Iecc2ac2354a82cca937a823e5c588c662264e36c
Reviewed-on: https://chromium-review.googlesource.com/213551
Tested-by: Nicolas Capens <capn@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
5f438061
|
2014-08-20T16:38:34
|
|
Only set declaration operator if not already set.
This allows us to return different operators from single
declarations, which will be useful for treating invariant
declarations as different operators.
BUG=angle:711
Change-Id: Id278b91854bbefe8e635380d7b27198198236fef
Reviewed-on: https://chromium-review.googlesource.com/212939
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Nicolas Capens <capn@chromium.org>
|
|
47e3ec08
|
2014-08-20T16:38:33
|
|
Add a helper method to parse invariant declarations.
This pulls out more functionality from the grammar into simple
c++ source files.
BUG=angle:711
Change-Id: I19121d710dc1543585361cb53a0deb2ea0479db9
Reviewed-on: https://chromium-review.googlesource.com/212938
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Nicolas Capens <capn@chromium.org>
|
|
5c09702f
|
2014-08-20T16:38:32
|
|
Add a getNamedVariable helper method to TParseContext.
This method will be useful in more than one place, since we need
to get a TType from an indentifier when parsing invariant
declarations.
BUG=angle:711
Change-Id: I1c1befbdcc93ea626428fb4e313b8c6326c158f6
Reviewed-on: https://chromium-review.googlesource.com/212937
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Nicolas Capens <capn@chromium.org>
|
|
b9b5c105
|
2014-08-20T17:28:54
|
|
Rename intermediate.h to Intermediate.h.
This was breaking the Linux build.
Change-Id: I8f63527cfa37ee774ea5d1e6eb0043a4c7ccc734
Reviewed-on: https://chromium-review.googlesource.com/213300
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Brandon Jones <bajones@chromium.org>
|
|
b1a85f48
|
2014-08-19T15:23:24
|
|
Rename compiler intermediate source files.
This prevents confusion between "TIntermediate" and "TIntermNode".
BUG=angle:711
Change-Id: Ib7a086382a479db3f77bf2ab06ce321aa7b35d13
Reviewed-on: https://chromium-review.googlesource.com/212936
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
Reviewed-by: Nicolas Capens <capn@chromium.org>
|
|
b8c0a832
|
2014-08-15T16:41:12
|
|
Amend comment about nameless structs & layout qualifiers
Change-Id: I1177c808bffd2beba7d52bd8f8869125a1624698
Reviewed-on: https://chromium-review.googlesource.com/212700
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Nicolas Capens <capn@chromium.org>
Tested-by: Shannon Woods <shannonwoods@chromium.org>
|
|
bc75f36b
|
2014-08-11T14:08:19
|
|
Fix nameless struct handling.
BUG=401296
The addition of layout qualifier handling in es3 development inadvertently
broke handling of nameless structs.
Change-Id: I805bab7a981d1f7f6227ae043720296fc3454662
Reviewed-on: https://chromium-review.googlesource.com/211860
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
Tested-by: Shannon Woods <shannonwoods@chromium.org>
|
|
daf56572
|
2014-08-06T16:18:30
|
|
For SCALARIZE_VEC_AND_MAT_CONSTRUCTOR_ARGS, assign precision to temp variables.
Otherwise on Windows or other platforms with GLES backend, using this workaround
will trigger shader compile failure.
For the moment, to simplify the workaround, for any missing precisions in float,
we always assign the highest available precion to it.
BUG=angle:695
TEST=webgl conformance tests
Change-Id: I810579442bc7fc61d6a52b76aff31a779046fa22
Reviewed-on: https://chromium-review.googlesource.com/211253
Tested-by: Zhenyao Mo <zmo@chromium.org>
Reviewed-by: Kenneth Russell <kbr@chromium.org>
|
|
e740addb
|
2014-07-18T17:01:01
|
|
Add compiler option SH_REGENERATE_STRUCT_NAMES.
BUG=angle:701
TEST=webgl conformance tests
Change-Id: I13b35900956e7d840d5891a5bab90a400347cd6f
Reviewed-on: https://chromium-review.googlesource.com/209229
Tested-by: Zhenyao Mo <zmo@chromium.org>
Reviewed-by: Kenneth Russell <kbr@chromium.org>
|
|
a2ad4e8a
|
2014-07-17T14:16:32
|
|
Export shader variables from the translator DLL.
This will allow us to use these methods when compiling the translator
as a DLL.
BUG=angle:466,697
Change-Id: Ic9169fb7c69fe0bf5f98addfc128a30ee6b2159d
Reviewed-on: https://chromium-review.googlesource.com/208752
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
|
|
1c28e1f0
|
2014-08-04T11:37:54
|
|
Fix shaders with invariant keyword.
We would trigger assertion failures in Debug mode, and fail to
parse and translate correctly in Release.
BUG=angle:711
Change-Id: Ibb7f33b288376617598578f48c7bbdbdec044279
Reviewed-on: https://chromium-review.googlesource.com/210822
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Nicolas Capens <capn@chromium.org>
|
|
f4e39bfd
|
2014-08-01T17:22:17
|
|
Fix non-square matrix-to-matrix constructors.
This fixes some broken tests in dEQP:
functional.shaders.conversions.matrix_to_matrix
BUG=angle:712
Change-Id: I0538595f2913a2c1d4f0da901d65d608a6580d19
Reviewed-on: https://chromium-review.googlesource.com/210882
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Nicolas Capens <capn@chromium.org>
|
|
cf3af0bd
|
2014-08-01T17:22:16
|
|
Fix non-square scalar-to-matrix constructors.
This fixes some broken tests in dEQP:
functional.shaders.conversions.scalar_to_matrix
BUG=angle:712
Change-Id: Ia01d720307ea6ca70da266b2085a878eaaab2412
Reviewed-on: https://chromium-review.googlesource.com/210881
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Nicolas Capens <capn@chromium.org>
|
|
e294bb87
|
2014-07-17T14:16:26
|
|
Add new shader inspection APIs.
Each new entry point corresponds to one of the variable types:
varyings, attributes, uniforms, output variables, and interface
blocks. They return a pointer to the vector with all of the
parsed variables, which then the app can copy to its own memory.
Currently we do not support the staticUse field in the HLSL
translator.
BUG=angle:466
Change-Id: I7dc09e761ab070feef5360ad27740110c44853b3
Reviewed-on: https://chromium-review.googlesource.com/208750
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
Reviewed-by: Nicolas Capens <capn@chromium.org>
|
|
13cfd276
|
2014-07-17T14:16:28
|
|
Move shader variables header to include folder.
This allows the API to query for clear type introspection into the
parsed GL types from the translator. The returned types are not
expanded and have properly nested fields.
This patch uses the types from ShaderVars.h to return GL type
information. The app must include this header to get access to
the types structs.
BUG=angle:466
Change-Id: I28ad0d6f11a964804dd234ef0d00651f665d1ae3
Reviewed-on: https://chromium-review.googlesource.com/208751
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
|
|
a3fe2b4e
|
2014-07-18T10:33:13
|
|
Update non-default constructors in shadervars.h.
Most of these constructors are unused. Remove the unused ones,
and change the usage of existing constructors to be consistent.
BUG=angle:466,697
Change-Id: I455dd314036e1dfcb8c4690bab577b81dd0e060c
Reviewed-on: https://chromium-review.googlesource.com/208355
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Nicolas Capens <capn@chromium.org>
|
|
4836d22a
|
2014-07-24T06:55:51
|
|
Fix ASSERT when rewriting else-if blocks with no else.
The code assumed an else-if would end in an else. We can also save a
few allocations in the cases where there is no else.
BUG=angle:699
Change-Id: I550857366775b4a34aea97e117ef732297d3f448
Reviewed-on: https://chromium-review.googlesource.com/208681
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Nicolas Capens <capn@chromium.org>
|
|
e04a5b7b
|
2014-07-18T10:33:12
|
|
Remove sh::InterfaceBlock member info.
We can compute the interface block member info entirely on the
API side. This will allow us to get rid of some un-necessary
code in the compiler.
BUG=angle:466
Change-Id: I664ffc82de5f2723156e51f4e9ffc07e4de162aa
Reviewed-on: https://chromium-review.googlesource.com/207781
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Nicolas Capens <capn@chromium.org>
|
|
28f70c3a
|
2014-07-18T10:33:10
|
|
Remove sh::Uniform::registerIndex and elementIndex.
With the previous cleanups, these fields aren't needed any longer.
We can also clean up some unused methods and simplify existing code.
BUG=angle:466
Change-Id: I96df8d152324bda5e6868b5eccdf52bdc09155e9
Reviewed-on: https://chromium-review.googlesource.com/207256
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Nicolas Capens <capn@chromium.org>
|
|
9fe25e9e
|
2014-07-18T10:33:08
|
|
Add a uniform register query to the translator.
This returns the uniform index that we assigned for default uniforms.
All the dependent structure offsets can be determined from the base
register, so we won't have to store uniform information in the shader
variable.
BUG=angle:466
Change-Id: I0dd05251e8dba00c20d09fd865dfb150de56738e
Reviewed-on: https://chromium-review.googlesource.com/207254
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
Reviewed-by: Nicolas Capens <capn@chromium.org>
|
|
e40d1e9c
|
2014-07-16T17:40:36
|
|
Fix style violations.
BUG=angle:650
TEST=no behavior change
Change-Id: I3096615a181b1ec2c18ce60566c3d6249975b84e
Reviewed-on: https://chromium-review.googlesource.com/208569
Tested-by: Zhenyao Mo <zmo@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
cd68fe79
|
2014-07-11T10:45:44
|
|
Add a compiler option to rewrite vec/mat constructors
If one of the parameters is a vec/mat, expand it into scalars.
This is to work around Linux NVIDIA/AMD and Mac NVIDIA driver bugs.
BUG=angle:695
TEST=webgl conformance test
Change-Id: I35e1e25167d99f873dcb03bfb57a30e84b1aeed5
Reviewed-on: https://chromium-review.googlesource.com/207479
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Tested-by: Zhenyao Mo <zmo@chromium.org>
|
|
fc43d273
|
2014-07-11T17:02:02
|
|
Remove the sh::InterfaceBlock::dataSize member.
We can replace this by doing the same calculation in the HLSL-side
code.
BUG=angle:466
Change-Id: Iecae4a92e9037e851419ce73e6267094ee8071a2
Reviewed-on: https://chromium-review.googlesource.com/207251
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
|
|
d4116ff3
|
2014-07-11T17:02:01
|
|
Remove sh::InterfaceBlock::registerIndex.
This value is HLSL-only and we can use the new query API to hide it
from GLSL programs.
BUG=angle:466
Change-Id: I75dc2fbbf1b29b1f6d561568174a15dea1f5b130
Reviewed-on: https://chromium-review.googlesource.com/207250
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
|
|
4e1fd412
|
2014-07-10T17:50:10
|
|
Store a map of interface block registers.
The shader translator can return the assigned register for a
block via a new API. This will let us delete the member variable
in interface blocks for the register -- a nice thing for GLSL.
BUG=angle:466
Change-Id: I9bc38e0cd031e32f90787be42c2324fc7c79dbf9
Reviewed-on: https://chromium-review.googlesource.com/206828
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
Reviewed-by: Nicolas Capens <capn@chromium.org>
Tested-by: Jamie Madill <jmadill@chromium.org>
|
|
d5512cd4
|
2014-07-10T17:50:08
|
|
Collect shader outputs and interface block information.
This paves the way for returning ES3-specific info from the shader
translator with the new query methods.
BUG=angle:466
Change-Id: Ib13cdb604854cdf11e9dc00dd94f18eadc946561
Reviewed-on: https://chromium-review.googlesource.com/206770
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
|
|
23a8a433
|
2014-07-09T13:27:42
|
|
Store compact and expanded shader variables.
The current shader API ShGetVariableInfo relies on an expanded
list of shader variables. That means that struct, or user-defined
variables, are expanded into separate entries for the app to
easily query struct members. The new API will preserve the struct
layout, so we can store both to support both the old and new
queries.
BUG=angle:466
Change-Id: Id30a1d7d1bb49c7e745510e0d699f94ad3184b9c
Reviewed-on: https://chromium-review.googlesource.com/206569
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Nicolas Capens <capn@chromium.org>
|