kc3-lang/angle/src/compiler

Branch :


Log

Author Commit Date CI Message
fc7fab72 2015-03-06 12:03:18 Fix matrix compound multiplication Matrix compound multiplication was lacking transposes. Add them so that results match normal multiplication. BUG=angleproject:938 TEST=dEQP-GLES3.functional.shaders.matrix.mul_assign.* Change-Id: I4c5159de0727afb4ee2831586f04fa817619de7a Reviewed-on: https://chromium-review.googlesource.com/256366 Tested-by: Olli Etuaho <oetuaho@nvidia.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Zhenyao Mo <zmo@chromium.org>
51585037 2015-03-05 19:40:42 Remove unnecessary ifdef APPLE from built-in emulation The emulation is already toggled by a compilation flag, so having it behind an ifdef only adds unnecessary complexity, particularly when testing changes to the emulation code. BUG=angleproject:865 Change-Id: Idf7854c2b5323609880b527ed806440dcc8ac091 Reviewed-on: https://chromium-review.googlesource.com/256365 Tested-by: Olli Etuaho <oetuaho@nvidia.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Zhenyao Mo <zmo@chromium.org>
8efc5ad5 2015-03-03 17:21:10 Initialize BuiltInFunctionEmulator outside Compiler This moves GLSL output specific code from the Compiler class to the GLSL/ESSL translators. BUG=angleproject:865 Change-Id: I2d552e9cdb41f7d8ddfee7b0249a99d629a6d7d7 Reviewed-on: https://chromium-review.googlesource.com/255471 Reviewed-by: Jamie Madill <jmadill@chromium.org> Tested-by: Olli Etuaho <oetuaho@nvidia.com>
72ba85bf 2015-03-04 14:23:26 Fix regression in addFunctionCallOrMethod Fix a crash when parsing a shader with incorrect constructor arguments. BUG=angleproject:911 TEST=WebGL conformance tests Change-Id: I3459612f36185db861a361fa916cc6b671795037 Reviewed-on: https://chromium-review.googlesource.com/255870 Reviewed-by: Zhenyao Mo <zmo@chromium.org> Tested-by: Zhenyao Mo <zmo@chromium.org>
95cd3c68 2015-03-03 16:45:32 Move some output out of BuiltInFunctionEmulator subclasses This paves the way for getting rid of the BuiltInFunctionEmulator subclasses in favor of initializing the BuiltInFunctionEmulator dynamically in Compiler subclasses. The eventual goal is getting rid of GLSL output specific functionality in Compiler, which should be language-agnostic. BUG=angle:865 Change-Id: Ibb114b905785c7343b2726c97699268c982536a0 Reviewed-on: https://chromium-review.googlesource.com/255470 Reviewed-by: Zhenyao Mo <zmo@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Tested-by: Olli Etuaho <oetuaho@nvidia.com>
c4ba3bef 2015-03-02 14:42:24 Refactor addFunctionCallOrMethod out of glslang.y TEST=angle_unittests BUG=angle:911 Change-Id: I6d4c0f0bfbf9e6252e241ae5bb1b6acdb463fce6 Reviewed-on: https://chromium-review.googlesource.com/255451 Tested-by: Olli Etuaho <oetuaho@nvidia.com> Reviewed-by: Zhenyao Mo <zmo@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
5dbece59 2015-02-27 20:35:38 Implement trunc, round, roundEven (Emulated roundEven) BUG=angle:934 Change-Id: If33256bf3707f3f0202147276c71f08c65518205 Reviewed-on: https://chromium-review.googlesource.com/254842 Reviewed-by: Olli Etuaho <oetuaho@nvidia.com> Tested-by: Olli Etuaho <oetuaho@nvidia.com>
2cd7a0ed 2015-02-27 13:57:32 Remove switch fall-through on HLSL Remove fall-through from non-empty labels in switch statements. Tested with dEQP-GLES3.functional.shaders.*switch*. All pass except for tests that require dFdx/dFdy, which fail for an unrelated reason. Additional test coverage could still be useful for cases where a label is terminated by a continue or return statement. BUG=angle:921 Change-Id: I4741867789a9308d66d0adeabdaf83907106e2d2 Reviewed-on: https://chromium-review.googlesource.com/254550 Tested-by: Olli Etuaho <oetuaho@nvidia.com> Reviewed-by: Zhenyao Mo <zmo@chromium.org>
687ef22c 2015-03-03 10:58:05 Fix derivatives being related to an extension on ESSL3 dFdx, dFdy and fwidth are parts of the core language in ESSL3. This fixes a regression from the patch "Set symbol extension at insertion". BUG=angle:926 Change-Id: I6c0bbce3afad1f064ff115a16e23ea79bd584e49 Reviewed-on: https://chromium-review.googlesource.com/255450 Reviewed-by: Zhenyao Mo <zmo@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Olli Etuaho <oetuaho@nvidia.com> Tested-by: Olli Etuaho <oetuaho@nvidia.com>
05b6b7fc 2015-03-02 17:08:09 Add an SH_GLSL_CORE_OUTPUT profile. So we could generate shaders for Apple using core GL profile. By switching to core profile, we still pass most WebGL conformance tests 1.0.2 on Linux, but not all, so apparently more work is needed. However, I think it's OK to check this CL in because this output profile will be only used behind a chromium switch. BUG=angleproject:933 TEST=webgl conformance tests Change-Id: Iad70e1aebf82349d3fc5f4116c1d6bc4448193fd Reviewed-on: https://chromium-review.googlesource.com/255282 Tested-by: Zhenyao Mo <zmo@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
7749005a 2015-03-03 18:36:05 Fix min built-in function support One of the recent change that uses generic types to compact the symbol table initialization has introduced a bug in 'min' function implementation, just fixing it here. TEST= dEQP tests: dEQP-GLES3.functional.shaders.operator.common_functions.min.lowp_uvec* Change-Id: I0e3d386c89bc07c3b656ec5029b8ce57f663cf46 Reviewed-on: https://chromium-review.googlesource.com/255369 Reviewed-by: Olli Etuaho <oetuaho@nvidia.com> Tested-by: Olli Etuaho <oetuaho@nvidia.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
c9d9b30a 2015-02-20 23:02:15 Set symbol extension at insertion. BUG=angle:926 Change-Id: I4c96ae89c79d720d99bde803541c3158ba4629ab Reviewed-on: https://chromium-review.googlesource.com/251662 Tested-by: Nicolas Capens <capn@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
05ae50dc 2015-02-20 10:16:47 Add basic support for HLSL output of switch and case This patch outputs switch and case statements in HLSL, but ignores fall-through. Switch statements that include fall-through cause the platform HLSL compiler to generate errors. BUG=angle:921 Change-Id: I10efbfb45076cf4fd79840698abafd8111e597d4 Reviewed-on: https://chromium-review.googlesource.com/251527 Reviewed-by: Olli Etuaho <oetuaho@nvidia.com> Tested-by: Olli Etuaho <oetuaho@nvidia.com>
01cd8afa 2015-02-20 10:39:20 Add GLSL output of switch and case BUG=angle:921 Change-Id: I0d752440ce6ffdfcc005f1a6123694bdfeb1b067 Reviewed-on: https://chromium-review.googlesource.com/251526 Tested-by: Olli Etuaho <oetuaho@nvidia.com> Reviewed-by: Zhenyao Mo <zmo@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
c8716df9 2015-02-26 17:17:22 Fix an issue with handling an error case inside ValidateSwitch In case a condition with a wrong type is given to a case statement, it generates an error but the compiler recovers. This caused ValidateSwitch to assert. Fix this. BUG=angle:921 Change-Id: I7949798cab923c2b168817471896470c6c611878 Reviewed-on: https://chromium-review.googlesource.com/254080 Reviewed-by: Zhenyao Mo <zmo@chromium.org> Tested-by: Olli Etuaho <oetuaho@nvidia.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
482907eb 2015-02-23 16:56:33 Set symbol operations at insertion. BUG=angle:926 Change-Id: Ifc8f62ebe1277214a4d3fbd5c56eb5faeff8e389 Reviewed-on: https://chromium-review.googlesource.com/251650 Reviewed-by: Jamie Madill <jmadill@chromium.org> Tested-by: Nicolas Capens <capn@chromium.org> Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
e9cc469f 2015-02-19 16:00:13 Accept mismatching auxiliary interpolations. The ES3.1 spec, and discussion on Khronos.org, confirm that dEQP is correct in accepting mismatching centroid specifiers in shader linkage. Mismatching flat/smooth is still a link error. Fixes: shaders.linkage.varying.rules.differing_interpolation_2 Change-Id: I3016f4147e7c1b16b02371ee95866c8daf826212 Reviewed-on: https://chromium-review.googlesource.com/251205 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Zhenyao Mo <zmo@chromium.org> Tested-by: Jamie Madill <jmadill@chromium.org>
5cc9ac85 2015-02-20 11:27:56 Fix shadow samplers with textureProj and vertex shaders. Fixes: dEQP-GLES3.functional.shaders.texture_functions.textureproj.sampler2dshadow_fragment dEQP-GLES3.functional.shaders.texture_functions.textureproj.sampler2dshadow_bias_fragment dEQP-GLES3.functional.shaders.texture_functions.textureprojoffset.sampler2dshadow_fragment dEQP-GLES3.functional.shaders.texture_functions.textureprojoffset.sampler2dshadow_bias_fragment and some of: dEQP-GLES3.functional.shaders.texture_functions.texture*.sampler2dshadow_vertex BUG=angle:925 Change-Id: I080e379ded95469f0486ae9c8bb1756842118a2d Reviewed-on: https://chromium-review.googlesource.com/251530 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Nicolas Capens <capn@chromium.org> Tested-by: Jamie Madill <jmadill@chromium.org>
ac5274df 2015-02-20 10:19:08 Add validation for the structure of switch statements Implement a traverser to check for the following errors: -More than one default or replicated constant expression -No statement between a label and the end of a switch statement -Statements in a switch statement before the first case statement -Mismatch between the type of init-expression and type of a case label -Case or default label nested inside other control flow nested within the corresponding switch Tested by manually disabling shading language version checks for switch and by manually enabling case statements in a Chromium build and checking that the expected errors are generated. BUG=angle:921 Change-Id: I99c49c17c8b520849adbe4d8521e46cb10e20e41 Reviewed-on: https://chromium-review.googlesource.com/251524 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Olli Etuaho <oetuaho@nvidia.com> Tested-by: Olli Etuaho <oetuaho@nvidia.com>
3c1dfb5a 2015-02-20 11:34:03 Add stubs for switch and case output BUG=angle:921 Change-Id: I58bd645a8d53ef5bad9b680e54c8948d50932fca Reviewed-on: https://chromium-review.googlesource.com/251525 Reviewed-by: Zhenyao Mo <zmo@chromium.org> Tested-by: Olli Etuaho <oetuaho@nvidia.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
73941deb 2015-02-25 14:34:49 Disable the HLSL code in Angle if it is not being used. We're only using the HLSL code in Windows so it's not necessary to compile and distribute it on other platforms. This adds a defined ANGLE_ENABLE_HLSL that can be checked in files that are used by non-HLSL code as well. Mostly the HLSL code is just not include by the build system. Details of the space savings (heavily truncated) Total change: -165717 bytes =========================== -606 - Source: angle/src/common/utilities.cpp -627 - Source: angle/src/compiler/translator/FlagStd140Structs.cpp -695 - Source: /usr/include/c++/4.8/bits/stl_algo.h -710 - Source: angle/src/compiler/translator/TranslatorHLSL.cpp -713 - Source: angle/src/compiler/translator/IntermNode.h -863 - Source: /usr/include/c++/4.8/bits/stl_map.h -935 - Source: angle/src/compiler/translator/blocklayout.cpp -1515 - Source: angle/src/compiler/translator/BuiltInFunctionEmulator.cpp -1655 - Source: angle/src/compiler/translator/UnfoldShortCircuit.cpp -2375 - Source: /usr/include/c++/4.8/bits/vector.tcc -3135 - Source: angle/src/compiler/translator/RewriteElseBlocks.cpp -4656 - Source: angle/src/compiler/translator/UtilsHLSL.cpp -5265 - Source: angle/src/compiler/translator/BuiltInFunctionEmulatorHLSL.cpp -6505 - Source: /usr/include/c++/4.8/bits/stl_tree.h -11480 - Source: angle/src/compiler/translator/UniformHLSL.cpp -13580 - Source: angle/src/compiler/translator/StructureHLSL.cpp -18964 - Source: ?? (constant strings and a few vtbls) -89332 - Source: angle/src/compiler/translator/OutputHLSL.cpp Change-Id: I23ccc98abd0a21f847dd34f9482800b3ba679d56 Reviewed-on: https://chromium-review.googlesource.com/251528 Tested-by: bratell at Opera <bratell@opera.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
53f076fa 2015-02-20 10:55:14 Add basic error checks for switch and case Check that the case labels have constant scalar integers, and that switch statements are initialized with scalar integers. Also check that case and default labels do not exist outside switch statements. Allow break statements inside switch statements. Tested by manually disabling shading language version checks for switch in a Chromium build and checking that the expected errors are generated. BUG=angle:921 Change-Id: Ibe83d0db52958c493ded5640d4babf670dc02d55 Reviewed-on: https://chromium-review.googlesource.com/251523 Reviewed-by: Zhenyao Mo <zmo@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Tested-by: Olli Etuaho <oetuaho@nvidia.com>
a3a36664 2015-02-17 13:46:51 Implement parsing switch statements Put in some groundwork for parsing switch statements and case labels in the parser, including definitions for IntermNode classes. Intermediate functions for adding the statements are stubbed to only generate errors for now. Tested by manually disabling shading language version checks for switch in a Chromium build and checking that the expected errors are generated. BUG=angle:921 Change-Id: I064b3e0c4c1b724a083cf5bc78eebfdd3794eb1b Reviewed-on: https://chromium-review.googlesource.com/250380 Reviewed-by: Olli Etuaho <oetuaho@nvidia.com> Tested-by: Olli Etuaho <oetuaho@nvidia.com>
49300865 2015-02-20 14:54:49 Refactor validating jump statements out of glslang.y Move the logic to ParseContext. This will simplify changing the logic for the break statement that is needed to implement switch. BUG=angle:921, angle:911 TEST=WebGL conformance tests Change-Id: Ib8bbc7075c05d345e90377202b5446fb3307f94c Reviewed-on: https://chromium-review.googlesource.com/251522 Tested-by: Olli Etuaho <oetuaho@nvidia.com> Reviewed-by: Zhenyao Mo <zmo@chromium.org>
f3cc4aef 2015-02-23 13:51:25 Use generic types to compact the symbol table initialization. Just like in the spec text, use symbolic types that represent multiple concrete types. The few signatures that get generated more than once are only added to the symbol table once because it ignores duplicates. BUG=angle:926 Change-Id: I216f03d22502b724dbefc87c5a021d6021c3a434 Reviewed-on: https://chromium-review.googlesource.com/251620 Reviewed-by: Jamie Madill <jmadill@chromium.org> Tested-by: Nicolas Capens <capn@chromium.org>
6b19d765 2015-02-19 09:40:39 Implement missing variants of abs/sign This change adds ANGLE support for abs/sign variants introduced in ESSL3. BUG=angle:923 TEST=Unit tests, dEQP tests Unit Tests: TypeTrackingTest.BuiltInAbsSignFunctionFloatResultTypeAndPrecision TypeTrackingTest.BuiltInAbsSignFunctionIntResultTypeAndPrecision dEQP tests passing 100% because of this change: dEQP-GLES3.functional.shaders.builtin_functions.common.abs dEQP-GLES3.functional.shaders.builtin_functions.common.sign Change-Id: I2a3b028611f0eaaac3c031f8926d34a0e146663d Reviewed-on: https://chromium-review.googlesource.com/251491 Reviewed-by: Olli Etuaho <oetuaho@nvidia.com> Tested-by: Olli Etuaho <oetuaho@nvidia.com>
29190088 2015-02-20 16:42:54 Make Angle code 40 KB smaller by using string literals directly. The implicit conversion of hundreds of string literals to TString generated a lot of machine code. By keeping them as string literals all the way the code will be smaller and faster. This is the change with clang for x64 (note VisitUnary in particular): Total change: -41392 bytes ========================== 2 added, totalling +469 bytes across 1 sources 2 removed, totalling -472 bytes across 1 sources 5 shrunk, for a net change of -41389 bytes (54126 bytes before, 12737 bytes after) across 1 sources 279692 unchanged, totalling 51433327 bytes ------------------------------------------------------------------------------------------------------------------------------------ -41392 - Source: /home/bratell/src/chromium/src/third_party/angle/src/compiler/translator/OutputHLSL.cpp - (gained 469, lost 41861) ------------------------------------------------------------------------------------------------------------------------------------ New symbols: +328: sh::OutputHLSL::outputConstructor(Visit, TType const&, char const*, TVector<TIntermNode*> const*) type=t, size=328 bytes +141: sh::OutputHLSL::outputTriplet(Visit, char const*, char const*, char const*) type=t, size=141 bytes Removed symbols: -133: sh::OutputHLSL::outputTriplet(Visit, std::basic_string<char, std::char_traits<char>, pool_allocator<char> > const&, std::basic_string<char, std::char_traits<char>, pool_allocator<char> > const&, std::basic_string<char, std::char_traits<char>, pool_allocator<char> > const&) type=t, size=133 bytes -339: sh::OutputHLSL::outputConstructor(Visit, TType const&, std::basic_string<char, std::char_traits<char>, pool_allocator<char> > const&, TVector<TIntermNode*> const*) type=t, size=339 bytes Shrunk symbols: -388: sh::OutputHLSL::writeEmulatedFunctionTriplet(Visit, char const*) type=t, (was 628 bytes, now 240 bytes) -714: sh::OutputHLSL::visitBranch(Visit, TIntermBranch*) type=t, (was 1017 bytes, now 303 bytes) -9738: sh::OutputHLSL::visitAggregate(Visit, TIntermAggregate*) type=t, (was 17609 bytes, now 7871 bytes) -14132: sh::OutputHLSL::visitBinary(Visit, TIntermBinary*) type=t, (was 17627 bytes, now 3495 bytes) -16417: sh::OutputHLSL::visitUnary(Visit, TIntermUnary*) type=t, (was 17245 bytes, now 828 bytes) Change-Id: Id0f87d72f6d7f1ab7b543f0d28d5a8b7c7db9ec7 Reviewed-on: https://chromium-review.googlesource.com/251090 Reviewed-by: Geoff Lang <geofflang@chromium.org> Tested-by: bratell at Opera <bratell@opera.com>
80d934bb 2015-02-19 10:16:12 Enable MSVS warning 4512. Fix up the missing DISALLOW_COPY_AND_ASSIGN macros and various small problems preventing us from turning on this warning. This should ensure we more often use the DISALLOW macro going forward. Change-Id: I2e1a9d23a31a51279a577fad8dffb8c1530e2ee8 Reviewed-on: https://chromium-review.googlesource.com/251100 Tested-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cooper Partin <coopp@microsoft.com> Tested-by: Cooper Partin <coopp@microsoft.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>
7c1f6f19 2015-02-19 18:56:09 Revert "Implement missing variants of abs/sign" This for some reason is failing angle_unittests: http://build.chromium.org/p/chromium.gpu.fyi/builders/Win7%20Release%20%28NVIDIA%29/builds/13296 Happens across platforms. This reverts commit 3e142e47cc5b40564bcdba4252fd326bc28ca343. Change-Id: Ideb20457546c0dec10c9584182cc8d5ead42309d Reviewed-on: https://chromium-review.googlesource.com/251160 Reviewed-by: Jamie Madill <jmadill@chromium.org> Tested-by: Jamie Madill <jmadill@chromium.org>
b6e07a6a 2015-02-16 12:22:10 Implement ESSL3 modf This is the first built-in function that has an out parameter, so l-value checks are added for built-ins. BUG=angle:918 Change-Id: Ifd5befe955224f706f864e25107879c9cdce9e9f Reviewed-on: https://chromium-review.googlesource.com/250780 Tested-by: Olli Etuaho <oetuaho@nvidia.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Zhenyao Mo <zmo@chromium.org>
3e142e47 2015-02-19 09:40:39 Implement missing variants of abs/sign This change adds ANGLE support for abs/sign variants introduced in ESSL3. BUG=angle:923 TEST=dEQP tests Tests passing 100% because of this change: dEQP-GLES3.functional.shaders.builtin_functions.common.abs dEQP-GLES3.functional.shaders.builtin_functions.common.sign Change-Id: If22032be2c1ed08451275262e311ef5ac613d45e Reviewed-on: https://chromium-review.googlesource.com/251060 Reviewed-by: Olli Etuaho <oetuaho@nvidia.com> Tested-by: Olli Etuaho <oetuaho@nvidia.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
3eab00a0 2015-02-12 16:02:39 Fix constant folding integer modulus Constant folding % used to generate results from division instead of results from modulus. Fix this and introduce a test for this and other integer constant folding, that checks that the right constant values are found in the IntermNode tree. BUG=angle:916 TEST=angle_unittests Change-Id: I75e59b7734eb206378a1b2957af0a5437a90097c Reviewed-on: https://chromium-review.googlesource.com/249691 Reviewed-by: Gregoire Payen de La Garanderie <Gregory.Payen@imgtec.com> Tested-by: Olli Etuaho <oetuaho@nvidia.com> Reviewed-by: Nicolas Capens <capn@chromium.org>
0c1726e6 2015-02-18 14:35:02 Implement isnan/isinf This change adds ANGLE support for isnan/isinf. BUG=angle:922 TEST=dEQP tests: dEQP-GLES3.functional.shaders.builtin_functions.common.isnan.* (high precision tests still fail) Tests passing 100% because of this change: dEQP-GLES3.functional.shaders.builtin_functions.common.isinf.* Reduced number of errors in tests: EQP-GLES3.functional.shaders.constant_expressions.builtin_functions.common.isnan.* dEQP-GLES3.functional.shaders.constant_expressions.builtin_functions.common.isinf_* Change-Id: I52bf18b59365ea7031746ae840550162d7e6b96e Reviewed-on: https://chromium-review.googlesource.com/250761 Reviewed-by: Olli Etuaho <oetuaho@nvidia.com> Tested-by: Olli Etuaho <oetuaho@nvidia.com> Reviewed-by: Nicolas Capens <capn@chromium.org>
2b45573b 2015-02-17 20:24:59 Implement missing vector relational functions This change adds ANGLE support for following vector relational function variants introduced in GLES3: bvec lessThan(uvec x, uvec y) bvec lessThanEqual(uvec x, uvec y) bvec greaterThan(uvec x, uvec y) bvec greaterThanEqual(uvec x, uvec y) bvec equal(uvec x, uvec y) bvec notEqual(uvec x, uvec y) BUG=angle:920 TEST=dEQP tests Reduced number of errors in tests: dEQP-GLES3.functional.shaders.constant_expressions.builtin_functions.vector_relational.* Change-Id: Id45ce77b35f39403e587a577622271d8e9815225 Reviewed-on: https://chromium-review.googlesource.com/250377 Reviewed-by: Nicolas Capens <capn@chromium.org> Reviewed-by: Olli Etuaho <oetuaho@nvidia.com> Tested-by: Olli Etuaho <oetuaho@nvidia.com>
a3a5cc6a 2015-02-13 13:12:22 Expose the IntermNode tree generated in the compiler for testing This refactoring makes it possible for tests to access the IntermNode tree produced by compilation by calling compileTree(). Removing ParseContext usage from OutputHLSL has the additional benefit of better separation between parsing and output. BUG=angle:916 Change-Id: Ib40954832316328772a5c1dcbbe6b46b238e4e65 Reviewed-on: https://chromium-review.googlesource.com/249723 Reviewed-by: Olli Etuaho <oetuaho@nvidia.com> Tested-by: Olli Etuaho <oetuaho@nvidia.com>
42077bb1 2015-02-16 15: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-13 10: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-11 11: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-12 12: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-12 10: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-12 15: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-11 16: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-11 16: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-09 15: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-09 15: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-12 14: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-02 14: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-28 10: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-27 14: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-26 15: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-19 16: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-23 23: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-21 16: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-09 16: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-16 12: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-15 12: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-14 14: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-16 12: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-12 15: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-30 16: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-02 12: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-08 19: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-13 11: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-09 15: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-18 13: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-08 16: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-22 12: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-29 11: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-23 00: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-22 15: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-02 16: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-03 12: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-03 14: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-19 13: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-17 16: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-18 13: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-06 17: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-19 16: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-21 11: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-13 16: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-10 12: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-04 13: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-29 18: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-29 15: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-28 13: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-27 16: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-21 16: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-22 10: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-21 15: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-21 11: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-20 18: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-15 14: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-15 18: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-10 10: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-13 11: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-09 16: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-06 17: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-07 10: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-03 13: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-26 12: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>