|
c09ae15c
|
2019-02-01T14:16:32
|
|
Enable -Wextra-semi and -Wextra-semi-stmt.
This will prevent users from accidentally making semicolon errors in
the future.
Bug: chromium:926235
Change-Id: I79a6fa376fb1ad8f0fcf1b65b1f572a035d1f4e9
Reviewed-on: https://chromium-review.googlesource.com/c/1446493
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Nico Weber <thakis@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
153e0224
|
2018-12-07T13:31:31
|
|
Add gl_DrawID emulation for ESSL3 with ANGLE_multi_draw
Bug: chromium:890539
Change-Id: I3d9a9429608afb454f076013f3ed844e115c56cc
Reviewed-on: https://chromium-review.googlesource.com/c/1368784
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Austin Eng <enga@chromium.org>
|
|
b980c563
|
2018-11-27T11:34:27
|
|
Reformat all cpp and h files.
This applies git cl format --full to all ANGLE sources.
Bug: angleproject:2986
Change-Id: Ib504e618c1589332a37e97696cdc3515d739308f
Reviewed-on: https://chromium-review.googlesource.com/c/1351367
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
7cf9cd24
|
2018-10-09T15:27:32
|
|
Add flags to shader translator to emulate gl_DrawID
Adds support for translating gl_DrawID for implementation of
GL_ANGLE_multi_draw.
Currently the change only supports and allows emulation of the
draw id using a uniform variable named `gl_DrawID`. This uniform is
mapped in the translated shader to a hashed name that does not
use the gl_ namespace
Bug: chromium:890539
Change-Id: I08a246ca911e88e733ccdf22f1ed69dcae948e05
Reviewed-on: https://chromium-review.googlesource.com/c/1271957
Commit-Queue: Austin Eng <enga@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
|
|
c4533eae
|
2018-09-19T15:23:29
|
|
Enable ANGLE_texture_multisample in glsl in es 3.0
Enable gsampler2dMS, texelFetch, textureSize in glslang in
es 3.0 if ANGLE_texture_multisample is supported.
Bug: angleproject:2275
TEST=SamplerMultisampleEXTTest.TextureMultisampleEXTEnabled
Change-Id: Ibfa367970db3ae790f3822e57eb50090843dc6db
Reviewed-on: https://chromium-review.googlesource.com/c/867521
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Yizhou Jiang <yizhou.jiang@intel.com>
|
|
5476e805
|
2018-10-05T13:23:03
|
|
Fix constructing void array zero nodes
Correctly sized void arrays can be needed after parsing has recovered
from an error and the code is trying to evaluate the constant value of
a node. Since now we just have a generic EOpConstruct op instead of
different ops for different types, we can simply remove the special
handling for void arrays in CreateZeroNode to create the arrays in the
correct size.
BUG=chromium:890581
TEST=angle_unittests
Change-Id: I48d96c9ef1d695cd8583a845fd4bd24a7aaf535c
Reviewed-on: https://chromium-review.googlesource.com/c/1264515
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
c55aefe3
|
2018-08-28T19:59:00
|
|
ES31: Support atomic functions on D3D11 - Part III
This patch is the third one to support atomic functions on D3D11.
In this patch we enable support for atomic function returns outside of
assignments (e.g. part of arithmetic operations or to index into arrays) and
when used directly initialize a variable.
Note that we are still missing the functionality to be tag loops with
[allow_uav_condition] as required by InterlockedCompareExchange.
BUG=angleproject:2682
TEST=angle_end2end_tests
Change-Id: Ia409ebb10621fd5c514cf6c76f366a320a9d9fc1
Reviewed-on: https://chromium-review.googlesource.com/1208317
Reviewed-by: Bryan Bernhart <bryan.bernhart@intel.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
|
|
a735ee2f
|
2018-05-18T13:29:09
|
|
ES31: Support shader storage block in D3D11 compiler - Part1
This patch is the first step to implement a basic skeleton to translate
shader storage block to HLSL RWByteAddressBuffer.
In GLSL each shader storage block is just one structured block and in API side
it corresponds to a buffer range where stores the whole structure.
RWStructuredBuffer is an array-like object and can have many structured
elements. The structured element doesn't support unsized array and also have
a small limitation on the element size. So we choose RWByteAddressBuffer as
the counterpart of shader storage block in HLSL.
Due to RWByteAddressBuffer does not support using an index to reference a
specific location, we must use Load and Store to process the read/write
operation of a buffer variable. Moreover, in the compiler tree, since we
can't use variable name to get the resource value in RWByteAddressBuffer,
we have to calculate the offset of buffer variable in a shader storage block,
then call the corresponding wrapper function to get the right value.
In this patch, we only process below situations:
assign_to_ssbo := ssbo_access_chain = expr_no_ssbo;
assign_from_ssbo := lvalue_no_ssbo = ssbo_access_chain;
The translation is like below:
// GLSL
#version 310 es
layout(local_size_x=8) in;
layout(std140, binding = 0) buffer blockA {
float f[8];
} instanceA;
layout(std140, binding = 1) buffer blockB {
float f[8];
};
void main()
{
float data = instanceA.f[gl_LocalInvocationIndex];
f[gl_LocalInvocationIndex] = data;
}
// HLSL
RWByteAddressBuffer _instanceA: register(u0);
RWByteAddressBuffer _blockB: register(u1);
float float_Load(RWByteAddressBuffer buffer, uint loc)
{
float result = asfloat(buffer.Load(loc));
return result;
}
void float_Store(RWByteAddressBuffer buffer, uint loc, float value)
{
buffer.Store(loc, asuint(value));
}
void gl_main()
{
float _data = float_Load(_instanceA, 0 + 16 * gl_LocalInvocationIndex);
float_Store(_blockB, 0 + 16 * gl_LocalInvocationIndex, _data);
}
We will do below things in the following patches:
1. Modify the intermediate tree to flatten all ssbo usages to:
assign_to_ssbo := ssbo_access_chain = expr_no_ssbo;
assign_from_ssbo := lvalue_no_ssbo = ssbo_access_chain;
e.g.
intanceA.a +=1;
->tmp = intanceA.a;
intanceA.a = tmp + 1;
while(++instanceA.a < 16) {
}
->
int PreIncrement(out int a)
{
a += 1;
return a;
}
tmp = instanceA.a;
while(PreIncrement(tmp) < 16) {
instanceA.a = tmp
}
2. Add offset calculation for structure and array of arrays.
TODOs have been marked in the corresponding places in this patch.
3. Improve helper functions so that they can process all possible types.
TODOs have been marked in the corresponding places in this patch.
4. Process the swizzle situation.
TODOs have been marked in the corresponding places in this patch.
A possible method is to extend current helper functions like below:
*_Load(RWByteAddressBuffer buffer, uint loc, bool isSwizzle, uint4 swizzleOffset)
Bug: angleproject:1951
Test: angle_end2end_tests
Change-Id: I68ae68d5bb77d0d5627c8272627a7f689b8dc38b
Reviewed-on: https://chromium-review.googlesource.com/848215
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Jiajia Qin <jiajia.qin@intel.com>
|
|
8ca60805
|
2018-08-23T14:10:02
|
|
Add 2D MS array sampler support to compiler
This also places textureSize(gsampler2DMS) correctly in the ESSL 3.10
builtins instead of ESSL 3.00 builtins.
BUG=angleproject:2775
TEST=angle_unittests
Change-Id: Ieb0f7a7424a5558a5569af6d4fcbcc9b12ec9840
Reviewed-on: https://chromium-review.googlesource.com/1186466
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
e835609c
|
2018-07-12T12:36:47
|
|
Vulkan: Implement gl_DepthRange support using driver uniform
Bug: angleproject:2592
Change-Id: Iec3d111df4d8e5cef205c8afb177f0514ffac5c8
Reviewed-on: https://chromium-review.googlesource.com/1135448
Commit-Queue: Luc Ferron <lucferron@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
1283ef62
|
2018-07-12T10:15:42
|
|
translator: Add TIntermPreprocessorDirective.
This new node type can be used to inject preprocessor directives into
the intermediate tree. Outputting the preprocessor directive is easy
for the GLSL back-end. This can be used to implement workarounds such
as the OpenGL line rasterization rules on Vulkan.
Also fixes the build that was broken on Win/x64 with a prior change and
makes more methods in IntermNode.h const.
Bug: angleproject:2598
Change-Id: Ifd6d0ac7912ccf2137997bb9a0187fd063023d5e
Reviewed-on: https://chromium-review.googlesource.com/1133420
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
c9c259cc
|
2018-06-13T11:03:22
|
|
Add a shared traverse() function for most node types
The traversal logic for many node types is essentially the same. Use
a single traverse() function for all simple node types instead of
having different ones for each node type. Special traversal code is
only needed for those node types where the traversal logic is
overridden in specific traversers or which do special bookkeeping.
This makes traverser behavior a bit more consistent: InVisit calls are
now done for all node types, including if/else, ternary and loop
nodes. Also false returned from visit function will always skip
traversing the next children of that node.
This reduces shader_translator binary size on Windows by 8 kilobytes.
The added helper functions will also make it easier to implement
alternative more efficient traversers.
Unfortunately this also regresses compiler perf tests by around 2-3%.
BUG=angleproject:2662
TEST=angle_unittests, angle_end2end_tests
Change-Id: I3cb1256297b66e1db4b133b8fb84a24c349a9e29
Reviewed-on: https://chromium-review.googlesource.com/1133009
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
c0bb36cb
|
2018-07-10T11:10:31
|
|
Vulkan: Add driver uniforms to shader.
Bug: angleproject:2717
Change-Id: I542f3b0f2de21857d7fea0267f07d2d0eec78a8c
Reviewed-on: https://chromium-review.googlesource.com/1131567
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Luc Ferron <lucferron@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
b779b12c
|
2018-06-20T11:46:43
|
|
Add kEmptyImmutableString.
We can use this instead of ImmutableString("").
Bug: angleproject:2665
Change-Id: I8b3d5d3075838b9f2caa1627071202e48a5fdc83
Reviewed-on: https://chromium-review.googlesource.com/1108085
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Luc Ferron <lucferron@chromium.org>
|
|
05a449a7
|
2018-06-20T18:08:04
|
|
Replace reinterpret_cast with safer or no cast
When casting types to one another in C++, the weaker the cast,
the better.
This change replaces instances of reinterpret_cast with static_cast
or no cast where it safe and correct to do so.
BUG=angleproject:2683
Change-Id: I99c9033614a65282ae1d78cf0f4b80fabd75877a
Reviewed-on: https://chromium-review.googlesource.com/1109396
Commit-Queue: Rafael Cintron <rafael.cintron@microsoft.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
4da0d315
|
2018-06-20T11:46:38
|
|
Vulkan: Handle embedded struct uniforms.
Also known as nameless structs. Uniform structs without a struct name
would not be parsed correctly. This fixes the bug by adding a tree
transformation. The transformation gives an internally scoped name to
the embedded struct.
Bug: angleproject:2665
Change-Id: I43e4dad7d9ad64a40e382066bb136e4f8f719797
Reviewed-on: https://chromium-review.googlesource.com/1101566
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
93279812
|
2018-06-13T11:22:15
|
|
Remove unnecessary checks when traversing nodes
All children of binary and ternary nodes are guaranteed to be
non-null. We don't need to check for their existence when traversing
the tree.
BUG=angleproject:2662
TEST=angle_unittests
Change-Id: I5575058e7213d0c4b4554ca616b4298e535842d6
Reviewed-on: https://chromium-review.googlesource.com/1098670
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
f462ac1b
|
2018-06-13T10:22:43
|
|
Remove TIntermRaw
It's not used anywhere and removing it will make changing traversal
code a bit simpler.
BUG=angleproject:2662
TEST=angle_unittests
Change-Id: I4a430a09ceb538c8b0e5d1bb0a95f3fd7657c276
Reviewed-on: https://chromium-review.googlesource.com/1098671
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
37b3e596
|
2018-04-23T11:56:09
|
|
Add documentation for writing AST transformations
This adds documentation that was previously being drafted at
https://docs.google.com/document/d/1Pe3zkEZiYrtrjs7r9p0_bYFwnOO7bo0BlMYi27sakuk/edit?usp=sharing
Change-Id: I6ecd8e3e5a946960837fee8514ba130e01f9230c
Reviewed-on: https://chromium-review.googlesource.com/1023392
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
4002e92a
|
2018-04-04T16:55:34
|
|
Guard traversers used during parsing against stack overflow
Traversers used during parsing can be vulnerable to stack overflow
since the AST has not yet been validated for max depth. Make sure to
check for traversal depth in traversers used during parsing.
We set the maximum traversal depth in ValidateGlobalInitializer and
ValidateSwitchStatementList to 256, which matches the default value
for validating general AST complexity. The depth check is on
regardless of compiler options. In case the traversers go over the
maximum traversal depth, they fail validation.
BUG=angleproject:2453
TEST=angle_unittests
Change-Id: I89ba576e8ef69663ba35d7b9050a6da319f1757c
Reviewed-on: https://chromium-review.googlesource.com/995795
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
5fec7ab2
|
2018-04-04T11:58:33
|
|
Identify functions by unique id in BuiltInFunctionEmulator
Now that unique ids of all builtins are compile-time constants, we can
use them to look up functions in BuiltInFunctionEmulator. This is
simpler than using a custom struct with the name and parameters for
identifying functions.
This requires that we store a reference to a TFunction in those
TIntermUnary nodes that were created based on a function.
This decreases shader_translator binary size by about 6 KB on Windows.
BUG=angleproject:2267
BUG=chromium:823856
TEST=angle_unittests
Change-Id: Idd5a00c772c6f26dd36fdbbfbe161d22ab27c2fe
Reviewed-on: https://chromium-review.googlesource.com/995372
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
4d549932
|
2018-03-22T17:32:10
|
|
Move ReplaceVariable to tree_util directory
This was overlooked earlier when most AST transform related utilities
were moved to tree_util.
BUG=angleproject:2402
TEST=angle_unittests
Change-Id: I17d3716a434f80a9316156ca019ce49aada5c249
Reviewed-on: https://chromium-review.googlesource.com/975881
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
c26214de
|
2018-03-16T10:43:11
|
|
Move AST utilities to a subdirectory
Move AST related utilities to compiler/translator/tree_util.
BUG=angleproject:2409
TEST=angle_unittests
Change-Id: I7567c2f6f2710292029263257c7ac26e2a144ac8
Reviewed-on: https://chromium-review.googlesource.com/966032
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|