|
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>
|
|
6494c415
|
2018-11-05T15:46:04
|
|
ES31: Add swizzle support in SSBO (Part 1)
This patch adds the swizzle process if the swizzle node is the last node in
ssbo access chain.
Bug: angleproject:1951
Change-Id: Iecc95baa45e8cc40be9111a15398c7e858bfb99e
Reviewed-on: https://chromium-review.googlesource.com/c/1341234
Commit-Queue: Jiajia Qin <jiajia.qin@intel.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
efe061bd
|
2018-11-13T16:44:40
|
|
Optimize HLSL zero initializer
Currently we initialize a variable using zero initializer. Take the
below variable for example:
uint var[4];
We translate it to:
uint var[4] = { 0, 0, 0, 0};
If the array size is large, we have to use very long zero initializer.
The problem is that it's very slow for D3D drivers to compile.
This CL uses the 'static' trick below to solve the problem:
static uint _ANGLE_ZEROS_[256];
...
uint var[516] = {_ANGLE_ZEROS_, _ANGLE_ZEROS_, 0, 0, 0, 0};
For 'static', if the declaration does not include an initializer, the
value is set to zero.
https://docs.microsoft.com/en-us/windows/desktop/direct3dhlsl/dx-graphics-hlsl-variable-syntax
Bug: chromium:898030
Change-Id: Ia3f6574b5ddaffa94bf971140eba95835ee105ee
Reviewed-on: https://chromium-review.googlesource.com/c/1332805
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Jie A Chen <jie.a.chen@intel.com>
|
|
6aab06e0
|
2018-11-20T14:04:11
|
|
Don't allow unary operators on void types.
BUG=900058
Change-Id: Ice8976ddd9cbc9c90162cf7fae2b8f91ddcfcef3
Reviewed-on: https://chromium-review.googlesource.com/c/1344590
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
|
|
b81ff9e6
|
2018-10-26T17:20:50
|
|
ES31: Add std430 encoder.
Bug: angleproject:1951
Change-Id: I5e469ee5f13604102b0ee268d5bf9f5ac4809ecd
Reviewed-on: https://chromium-review.googlesource.com/c/1278098
Commit-Queue: Jiajia Qin <jiajia.qin@intel.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
|
|
cd47a379
|
2018-11-11T11:08:16
|
|
Add SH_INIT_SHARED_VARIABLES flag
This option is used to initialize shared variables to zero at the
beginning of shader execution to avoid compute shaders being able to
read undefined values that could be coming from another webpage or
application.
It's implemented by declaring variables with initial value for HLSL.
For GLSL, it's not allowed to use declaraction initializer for shared
variables, so we need to explicitly assign them to zero at the
beginning of main(). This implementation is only for HLSL.
Bug: chromium:898030
Change-Id: Ic5906500bf4a35cd9a071923f82f32c5e2991be3
Reviewed-on: https://chromium-review.googlesource.com/c/1330310
Commit-Queue: Jie A Chen <jie.a.chen@intel.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
48f63f90
|
2018-10-26T17:20:50
|
|
ES31: add row major matrix support (part 2)
This patch implements read/write vector data in matrix or matrix data directly
in a shader storage block with row_major qualifier.
Bug: angleproject:1951
Change-Id: Id7847e2245b09414709361412a95c4dd84b9ee97
Reviewed-on: https://chromium-review.googlesource.com/c/1304019
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Jiajia Qin <jiajia.qin@intel.com>
|
|
5d2dfa46
|
2018-11-03T09:28:17
|
|
ES31: Add array of arrays support in SSBO
Bug: angleproject:1951
Change-Id: I5e92b75a59a3ab24a34b827ae6f968961b8bea49
Reviewed-on: https://chromium-review.googlesource.com/c/1317376
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Jiajia Qin <jiajia.qin@intel.com>
|
|
1bf18ce9
|
2018-10-19T15:34:02
|
|
Implement GL_ANGLE_multi_draw
This patch adds entrypoints glMultiDrawArraysANGLE,
glMultiDrawElementsANGLE, glMultiDrawArraysInstancedANGLE,
annd glMultiDrawElementsInstancedANGLE
Bug: chromium:890539
Change-Id: Ic9c374c53892460f44ca6e73a253b78473ac2dff
Reviewed-on: https://chromium-review.googlesource.com/c/1282268
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Commit-Queue: Austin Eng <enga@chromium.org>
|
|
a6e8a0c5
|
2018-11-02T15:11:50
|
|
ES31: Simplify IsInShaderStorageBlock function
Bug: angleproject:1951
Change-Id: I0501502fa2201953a3dad4b18103ff5ae20db1bf
Reviewed-on: https://chromium-review.googlesource.com/c/1314298
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
|
|
5ca3e5a0
|
2018-10-31T11:13:29
|
|
Fix ShaderStorageBlockOutputHLSL::writeEOpIndexDirectOrIndirectOutput
https://chromium-review.googlesource.com/c/1304017 removed str()
wrapping values passed to TInfoSinkBase::operator<<().
This broke ANGLE roll
https://chromium-review.googlesource.com/c/chromium/src/+/1309331
failing compile on linux-libfuzzer-asan-rel bot.
Looks like libfuzzer compiler has a bug, not being able to find
sh::BlockLayoutEncoder::BytesPerComponent.
Wrapping it in str() works around this.
Bug: angleproject:1951
Change-Id: I2deb573667dc1e88d352bad1933c269ec36cf398
Reviewed-on: https://chromium-review.googlesource.com/c/1309975
Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
d60e42f8
|
2018-10-25T16:33:16
|
|
ES31: add row major matrix support (part 1)
This is the first patch to enable row major matrix suppot in series. This patch
ensures that we can get correct location when we load/store data from matrix.
Currently, only scalar data load/store works well.
mat2x3 data
The location of data[x][y] will be:
data.offset + x * scalarStride + y * matrixStride //row_major
data.offset + x * matrixStride + y * scalarStride //column_major
Bug: angleproject:1951
Change-Id: I5bd7bad7d293219ba610f18eeafc56e70e36de43
Reviewed-on: https://chromium-review.googlesource.com/c/1304017
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Jiajia Qin <jiajia.qin@intel.com>
|
|
4a22f4b0
|
2018-10-23T14:36:47
|
|
ES31: Add atomic_uint support to HLSL translator
This is the first commit in a series to enable atomic counter buffers.
Adds support for atomic counters to the GLSL->HLSL translator using
RWByteAddressBuffer.
Bug: angleproject:1729
Test: angle_end2end_tests
Change-Id: I3b7e08f9256dc9bdbcc02ad8910040f2bc14aeac
Reviewed-on: https://chromium-review.googlesource.com/c/1291329
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
|
|
df73a8e5
|
2018-10-25T16:11:20
|
|
ES31: Use std::map<const TField *, BlockMemberInfo> to save ssbo info
Bug: angleproject:1951
Change-Id: I9d6a19c0d63065db69985845a1cd68cfd4b99d1f
Reviewed-on: https://chromium-review.googlesource.com/c/1298913
Commit-Queue: Jiajia Qin <jiajia.qin@intel.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
|
|
8edb7188
|
2018-10-10T15:54:23
|
|
ES31: Add structure field member support in SSBO
This patch adds the structure field member support in SSBO. To support it,
below things are done:
1. Calculate the offset and arrayStride in SSBO structure.
2. Support array of arrays translation.
Bug: angleproject:1951
Change-Id: If8f233e6388d5bb905e78c39a85112d394298138
Reviewed-on: https://chromium-review.googlesource.com/c/1278097
Commit-Queue: Jiajia Qin <jiajia.qin@intel.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
fefaba5b
|
2018-10-26T16:16:53
|
|
Regenerate hashes for the builtin symbol table.
BUG=chromium:890539
Change-Id: Ia5bdf652dc37a466560071b4fe2cdc7d89ff941f
Reviewed-on: https://chromium-review.googlesource.com/c/1302837
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Geoff Lang <geofflang@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>
|
|
b8543630
|
2018-10-02T19:46:14
|
|
Support GL_OES_texture_border_clamp
Added support for GL_TEXTURE_BORDER_COLOR and GL_CLAMP_TO_BORDER in
OpenGL/OpenGLES, Direct3D9 and Direct3D11 backends.
For integer textures in OpenGLES3 contexts these additional entry points
are available now:
void glTexParameterIivOES(enum target, enum pname, const int *params);
void glTexParameterIuivOES(enum target, enum pname, const uint *params);
void glGetTexParameterIivOES(enum target, enum pname, int *params);
void glGetTexParameterIuivOES(enum target, enum pname, uint *params);
void glSamplerParameterIivOES(uint sampler, enum pname, const int *params);
void glSamplerParameterIuivOES(uint sampler, enum pname, const uint *params);
void glGetSamplerParameterIivOES(uint sampler, enum pname, int *params);
void glGetSamplerParameterIuivOES(uint sampler, enum pname, uint *params);
BUG=angleproject:2890
TEST=angle_end2end_tests.TextureBorderClamp*
Change-Id: Iee3eeb399d8d7851b3b30694ad8f21a2111f5828
Reviewed-on: https://chromium-review.googlesource.com/c/1257824
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
672267fc
|
2018-10-19T17:01:17
|
|
ES31: Fix that asuint can't accept bool value
This change fixes below errors:
error X3013: 'asuint': no matching 1 parameter intrinsic function
error X3013: Possible intrinsic functions are:
error X3013: asuint(double, out uint x, out uint y)
error X3013: asuint(float|half|int|uint)
When we store a boolean value, we should cast it to uint firstly. Then do the
store.
Bug: angleproject:1951
Change-Id: I8931e540d701ef72bb82846496c698acef1ba1fb
Reviewed-on: https://chromium-review.googlesource.com/c/1295831
Commit-Queue: Jiajia Qin <jiajia.qin@intel.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
19603b9e
|
2018-10-18T17:25:33
|
|
ES31: Allow function call, unary, ternary operators in SSBO
When we meet function call, unary or ternary operator in SSBO access chain,
we should transfer the process of them to OutputHLSL.
Bug: angleproject:1951
Change-Id: I740940ac4eee4c5ed52239f14b1d32b1f9cf9385
Reviewed-on: https://chromium-review.googlesource.com/c/1290470
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Jiajia Qin <jiajia.qin@intel.com>
|
|
7818a85c
|
2018-09-06T15:02:04
|
|
Implement GL_ANGLE_texture_multisample API part
Support GL_ANGLE_texture_multisample extension.
This patch adds enums of multisampled texture and texStorage2DMultisampleANGLE
API.
TEST=angle_end2end_tests.exe --gtest_filter=TextureMultisampleTest*
TEST=angle_end2end_tests.exe --gtest_filter=NegativeTextureMultisampleTest.Negtive*
BUG=angleproject:2275
Change-Id: I2cab997edc33aa2d0be6082381545335423f64e0
Reviewed-on: https://chromium-review.googlesource.com/c/804613
Commit-Queue: Yizhou Jiang <yizhou.jiang@intel.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
64b7c4ff
|
2018-10-19T11:38:04
|
|
Use angle::Result in front-end (Part 3)
Handles the gl::Framebuffer class and its implementation.
Bug: angleproject:2491
Change-Id: I3b9c0609e9277264ccdb370596500562df3b7d15
Reviewed-on: https://chromium-review.googlesource.com/c/1280743
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
1d8a783c
|
2018-10-09T13:59:56
|
|
Re-land: "ES31: Add vector and matrix support in SSBO for D3D"
Re-land skips ProgramInterfaceTestES31.GetProgramInterface/ES3_1_D3D11 to pass
the bots. In fact, ProgramInterfaceTestES31.GetProgramInterface/ES3_1_D3D11 is
not a regression. The reverted CL added more SSBO features and triggered the
failure. To enable ProgramInterfaceTestES31.GetProgramInterface/ES3_1_D3D11,
we should support SSBO in render pipeline. This needs to bind SSBO to UAV
registers in link time instead of compile time since output variables also
occupies the UAVs. Let's enable this test when we support SSBO in render
pipeline. Currently, we shouldn't block the SSBO implementation in some common
features.
Bug: angleproject:1951
Change-Id: Ic339e8327e79335e6db1d86bedf0072635976f5f
Reviewed-on: https://chromium-review.googlesource.com/c/1282277
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Jiajia Qin <jiajia.qin@intel.com>
|
|
a1ac3fe8
|
2018-10-10T12:29:31
|
|
ES31: Support textureGather[Offset] on int/uint formats on D3D11
This patch implements the translation of textureGather[Offset] on
integer and unsigned integer format textures on D3D11.
According to MSDN, Gather[Red|Green|Blue|Alpha] can be used on integer
and unsigned integer format textures with float texture coordinates:
https://docs.microsoft.com/en-us/windows/desktop/direct3dhlsl/dx-graphics-hlsl-to-gather
Currently the dEQP tests on TextureGather[Offset] on cube map textures
in integer or unsigned formats still cannot pass. This issue is under
investigation.
Bug: angleproject:2826
Test: dEQP-GLES31.functional.texture.gather.basic.2d.*
dEQP-GLES31.functional.texture.gather.basic.2d_array.*
dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.*
dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.*
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.*
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.*
Change-Id: If049dc395fb17cd34dec902630e3a1154e5d4806
Reviewed-on: https://chromium-review.googlesource.com/c/1271926
Commit-Queue: Jiawei Shao <jiawei.shao@intel.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
c97e3f66
|
2018-10-12T15:49:06
|
|
Revert "ES31: Add vector and matrix support in SSBO for D3D"
This reverts commit 671809e62e807eb0f890a5d53eee1f8cb5fb825e.
Reason for revert: Regresses angle_end2end_test:
ProgramInterfaceTestES31.GetProgramInterface/ES3_1_D3D11
Warning: compileToBinary(232):
C:\fakepath(36,21-40): error X4509: UAV registers live in the same name space as outputs, so they must be bound to at least u1, manual bind to slot u0 failed
The new test and this CL landed at nearly the same time. This CL breaks the test but it wasn't run on the CQ.
Failure link:
https://ci.chromium.org/p/chromium/builders/luci.chromium.ci/Win10%20FYI%20Release%20%28NVIDIA%29/2717
Original change's description:
> ES31: Add vector and matrix support in SSBO for D3D
>
> Bug: angleproject:1951
>
> Change-Id: I19d4218b28770464e4cb38027cce694e2a817b5b
> Reviewed-on: https://chromium-review.googlesource.com/c/1269827
> Commit-Queue: Jiajia Qin <jiajia.qin@intel.com>
> Reviewed-by: Geoff Lang <geofflang@chromium.org>
TBR=geofflang@chromium.org,jmadill@chromium.org,cwallez@chromium.org,jiajia.qin@intel.com
Change-Id: I54cda962e1361372f06e9e3bd667fa9c0ecf38dc
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: angleproject:1951
Reviewed-on: https://chromium-review.googlesource.com/c/1278102
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
671809e6
|
2018-10-09T13:59:56
|
|
ES31: Add vector and matrix support in SSBO for D3D
Bug: angleproject:1951
Change-Id: I19d4218b28770464e4cb38027cce694e2a817b5b
Reviewed-on: https://chromium-review.googlesource.com/c/1269827
Commit-Queue: Jiajia Qin <jiajia.qin@intel.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
3026f115
|
2018-10-09T12:13:38
|
|
ES31: Collect shader storage blocks info for d3d.
This change collects shader storage blocks info for d3d backend. With this
change, program interface APIs can get correct SSBO information for D3D.
Bug: angleproject:1920
Change-Id: I6e2414494d0e8240bcb1d0ddc3d9a292eb7158ee
Reviewed-on: https://chromium-review.googlesource.com/c/1269824
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Jiajia Qin <jiajia.qin@intel.com>
|
|
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>
|
|
6f591c97
|
2018-09-21T11:20:47
|
|
Clean up TCompiler members and style
Some dead code and duplicate data are cleaned up from the compiler.
Several parameters can be accessed directly from ShBuiltInResources
instead of creating a copy in TCompiler.
This also encapsulates some TCompiler member functions as private and
changes the remaining unprefixed TCompiler member variable names to
start with the m prefix.
BUG=angleproject:2068
TEST=angle_unittests
Change-Id: I6690aaf538b17e0f45460660272a21f82f1808a0
Reviewed-on: https://chromium-review.googlesource.com/c/1267503
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
6d765b07
|
2018-09-28T14:16:06
|
|
ES31: Fix some bugs in ShaderStorageBlockOutputHLSL
When EOpIndexDirect/EOpIndexIndirect/EOpIndexDirectStruct/TIntermSwizzle
appear in [] in ssbo access chain, we should transfer the process of them to
OutputHLSL.
For example:
instance.v[gl_GlobalInvocationID.x] = data;
// becomes
float_Store(dx_instance, 0 + 16 * gl_GlobalInvocationID.x, _data);
instance.v[s.index[0].x] = data;
// becomes
float_Store(dx_instance, 0 + 16 * _s.index[0].x, _data);
Bug: angleproject:1951
Change-Id: I333e238400a10a799a6294f8759cf9c4ef2451c8
Reviewed-on: https://chromium-review.googlesource.com/c/1250661
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Jiajia Qin <jiajia.qin@intel.com>
|
|
19b51d29
|
2018-09-19T15:14:45
|
|
ES31: Support textureGather[Offset] on shadow samplers
This patch implements translating textureGather[Offset] into HLSL
when the sampler is a shadow sampler. The related HLSL function
should be GatherCmp().
According to the definition of textureGatherOffset():
([ESSL 3.1] Chapter 8.9.3 Page 138)
- gvec4 textureGatherOffset(gsampler2D sampler, vec2 P,
ivec2 offset, [,int comp])
- vec4 textureGatherOffset(sampler2DShadow sampler, vec2 P,
float refZ, ivec2 offset)
We need to add parameter "refZ" before "offset" when the sampler
is a shadow sampler.
Bug: angleproject:2826
Test: dEQP-GLES31.functional.texture.gather.basic.2d.depth32f.*
dEQP-GLES31.functional.texture.gather.basic.2d_array.depth32f.*
dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.*
dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.depth32f.*
dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.depth32f.*
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.depth32f.*
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.depth32f.*
Change-Id: I9a7d095dd3cfa41aaefd14d012ed1f309abfc6d5
Reviewed-on: https://chromium-review.googlesource.com/c/1244081
Commit-Queue: Jiawei Shao <jiawei.shao@intel.com>
Reviewed-by: Jiajia Qin <jiajia.qin@intel.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
|
|
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>
|
|
0ca09753
|
2018-09-24T11:00:50
|
|
Add GLES3 support for EXT_blend_func_extended
This adds GLES3 API support for EXT_blend_func_extended. The patch
includes the API entrypoints, validation and also implementation on
the desktop GL backend.
Instead of having built-in fragment color variables, ESSL 3.00 has
custom output variables, which can now be bound to either primary or
secondary output color locations. The "index" set to a custom output
variable determines whether it's used a primary or secondary blending
source color.
The shader layout qualifier takes precedence over the bind call. This
is not specified in the EXT spec, but is specified in desktop OpenGL
specs.
BUG=angleproject:1085
TEST=angle_end2end_tests
Change-Id: Ia24e8e5dadcc165e5e8fbd7c653c7fab6217db88
Reviewed-on: https://chromium-review.googlesource.com/c/1249361
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
c3bef3e7
|
2018-10-03T07:35:09
|
|
Allow 'defined' in define in non-WebGL.
This is needed to pass dEQP conformance. Several of the harder dEQP
tests around this behaviour are excluded from the mustpass list. This
is presumably because the behaviours weren't implemented portably.
Nevertheless we need to support conformant behaviour for GLES 2.0
Contexts for the most simple uses.
This also leaves the error behaviour intact for WebGL specs.
Bug: angleproject:1335
Change-Id: Ia80b4f71475efa928488ee6c2ee35c566d4602d4
Reviewed-on: https://chromium-review.googlesource.com/c/1242013
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
1dfd8ae2
|
2018-10-01T15:59:59
|
|
Improve test coverage of constant folding
Clean up some TODOs in the code as well as add tests to make sure that
ANGLE treats expressions indexing into constant arrays as constant
expressions in different contexts. This complements the existing tests
in ConstantFoldingTest.
BUG=angleproject:2298
TEST=angle_unittests
Change-Id: I779bf03891f7d06f14d293e69101c05d7dbf57b6
Reviewed-on: https://chromium-review.googlesource.com/1254067
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
a78092cb
|
2018-09-26T14:16:13
|
|
Support ESSL 3.00 EXT_blend_func_extended shaders
This adds support for the index layout qualifier that's used in
EXT_blend_func_extended to set whether a fragment output should be
bound to the primary or secondary blend source color.
Output locations are now validated correctly so that two outputs can
have the same location as long as they have a different index. Some
tests are fixed to allow this.
BUG=angleproject:1085
TEST=angle_unittests
Change-Id: I1de3ad1406398952287791eca367562bed59d380
Reviewed-on: https://chromium-review.googlesource.com/1245982
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
a602f906
|
2018-09-11T14:40:24
|
|
ES31: Support shader storage buffer in D3D-API side.
Bug: angleproject:1951
Test: angle_end2end_tests
Change-Id: I0d8a4f8cf00fc7fd2d85315138e2b7457fd0b90c
Reviewed-on: https://chromium-review.googlesource.com/1242846
Commit-Queue: Jiajia Qin <jiajia.qin@intel.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
cf8ad760
|
2018-09-21T09:11:35
|
|
ES31: Support translating textureGatherOffset into HLSL
This patch implements the translation from GLSL texture function
textureGatherOffset into HLSL by using the optional "offset"
parameter of Texture2D.Gather[Red|Green|Blue|Alpha].
This patch also defines the implementation-dependent limit
MIN_PROGRAM_TEXTURE_GATHER_OFFSET and MAX_PROGRAM_TEXTURE_GATHER_OFFSET
on D3D11. According to MSDN, the valid range of "offset" used in
Gather should be [-32, 31].
https://docs.microsoft.com/en-us/windows/desktop/direct3dhlsl/gather4-po--sm5---asm-
This patch also refactors OutputTextureGatherFunctionBody() so that
some redundant code can be removed.
BUG=angleproject:2826
TEST=dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.rgba8.*
dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.rgba8.*
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8.*
dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8.*
(without texture_swizzle)
Change-Id: Id0f411257b64c8a97428f16b1a86950ec6d36e2f
Reviewed-on: https://chromium-review.googlesource.com/1237303
Reviewed-by: Jiajia Qin <jiajia.qin@intel.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Jiawei Shao <jiawei.shao@intel.com>
|
|
b36a4816
|
2018-09-25T10:15:11
|
|
Vulkan: Add OpenGL line segment rasterization.
Line rasterization rules are implemented using a shader patch. The
patch does a small test and discards pixels that are outside of the
OpenGL line region.
The feature is disabled on Android until we can determine the root
cause of the test failures.
Bug: angleproject:2598
Change-Id: Ic76c5e40fa3ceff7643e735e66f5a9050240c80b
Reviewed-on: https://chromium-review.googlesource.com/1120153
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
74c179bb
|
2018-09-24T10:53:23
|
|
Vulkan: Refresh descriptor sets on driver uniform change.
In some state change scenarios the driver uniforms would be updated but
not reapplied to the current state. Fix this by setting the descriptor
sets dirty when we dirty the driver uniforms.
Includes a test using gl_DepthRange. Also fixes a bug with the upcoming
line segment rasterization emulation.
Bug: angleproject:2598
Bug: angleproject:2845
Change-Id: Ia66f3c86f9770ceb145069eec879fd8725111a76
Reviewed-on: https://chromium-review.googlesource.com/1240413
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
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>
|
|
a977acc8
|
2018-09-19T12:46:05
|
|
ES31: Support translating textureGather into HLSL - Part I
This patch is the first one in the series of supporting GLSL texture
function textureGather/textureGatherOffset on D3D11.
According to ESSL 3.1 SPEC (Chapter 8.9.3, Page 130), the definition
of textureGather on sampler2D is:
gvec4 textureGather (gsampler2D sampler, vec2 P[, int comp])
The parameter "comp" is optional, and if it is specified, the value
of "comp" must be a constant integer expression with a value of 0, 1,
2, or 3, identifying the x, y, z, or w postswizzled component of the
four-component vector lookup result for each texel, respectively. If
comp is not specified, it is treated as 0.
According to the definition above, textureGather is equivalent to
Texture2D.Gather[Red|Green|Blue|Alpha] in HLSL, where we can use a
switch-case expression to choose the right HLSL texture function.
The features listed here will be implemented in the following patches:
1. Support textureGatherOffset
2. Support textureGather[Offset] on isamplers and usamplers
3. Support textureGather[Offset] on textures when swizzle is on
4. Support textureGather[Offset] on shadow samplers
BUG=angleproject:2826
TEST=dEQP-GLES31.functional.texture.gather.basic.2d.rgba8.*
dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.*
(without texture_swizzle)
dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8.*
(without texture_swizzle)
Change-Id: Iff2ed4f8b65dad613cb0bafdfd19f8f0528e832c
Reviewed-on: https://chromium-review.googlesource.com/1232980
Commit-Queue: Jiawei Shao <jiawei.shao@intel.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
|
|
017bda42
|
2018-09-14T18:11:50
|
|
Fix the ASSERT error
This change adds shader type checking before entering
initializeOutputVariables.
BUG: angleproject:2821
Change-Id: Ib931031f2fc187f1f2a1821a09664bbe172a5e90
Reviewed-on: https://chromium-review.googlesource.com/1226229
Commit-Queue: Jiajia Qin <jiajia.qin@intel.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
|
|
2da04538
|
2018-08-24T13:59:44
|
|
Add sampler2DMSArray support to HLSL output
This is done with small adjustments to TextureFunctionHLSL. Most of
the functionality was already in place before.
This changes the categorization of sampler types in BasicTypes.h
helper functions: 2D array samplers are no longer treated as 2D
samplers, but the two categories are now entirely disjoint. This
makes TextureFunctionHLSL a little bit simpler.
BUG=angleproject:2775
TEST=angle_unittests, angle_end2end_tests
Change-Id: I84d9b56c37b1aaa01ee5921b6f17f8a78698fce2
Reviewed-on: https://chromium-review.googlesource.com/1188562
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
8e9d2340
|
2018-09-10T13:29:37
|
|
Vulkan: Fix FragCoord scaling when a viewport is applied.
We were using the pivot based on the viewport dimensions which is
only valid if the viewport is the size of the framebuffer. The more
correct pivot size is actually based on the Framebuffer height.
Also updates the driver uniforms block to be a bit simpler.
Bug: angleproject:2598
Change-Id: I1cb500cded7141d10e8db6862b6ed29758cc7fb4
Reviewed-on: https://chromium-review.googlesource.com/1214205
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Frank Henigman <fjhenigman@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>
|
|
fb19e084
|
2018-09-06T15:39:09
|
|
Vulkan: Correct gl_FragCoord with default FBO.
The viewport flipping we use would give incorrect values. Correct
them using the same logic we do for gl_PointCoord.
Also corrects the viewport scale driver uniform. It was not being
updated after the draw framebuffer setting was adjusted.
Also corrects the naming of the replaced builtin variables so it
can't possibly conflict with a user variable.
This was affecting the OpenGL line raster emulation.
Bug: angleproject:2598
Change-Id: I843b5ac7b02160a5ec81a6f8ed2d937b0937198b
Reviewed-on: https://chromium-review.googlesource.com/1208515
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Reviewed-by: Frank Henigman <fjhenigman@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
dff32a0d
|
2018-08-28T14:35:50
|
|
Support multisample arrays in shader programs
The added tests check that using textureSize() and texelFetch() on
textures with a fixed point format return expected results. texelFetch
is also covered for integer format textures.
dEQP GLES 3.1 tests also cover a variety of multisampled array texture
formats.
BUG=angleproject:2775
TEST=angle_end2end_tests, angle_deqp_gles31_tests
Change-Id: I99b422e24b39e3563ed72f0fb85c9c1907df807d
Reviewed-on: https://chromium-review.googlesource.com/1196521
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
70a4ef10
|
2018-08-30T15:55:41
|
|
Vulkan: Fix depth range scaling.
We were using a formula that didn't work for some of the clipping
tests.
Bug: angleproject:2601
Change-Id: I60d965c2701656ad590c3b250c2cc777fb432421
Reviewed-on: https://chromium-review.googlesource.com/1194919
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
f0d0408a
|
2018-08-28T16:02:13
|
|
Use OES_texture_storage_multisample_2d_array
There's an OES extension for multisample texture arrays,
OES_texture_storage_multisample_2d_array. Change references from
ANGLE_texture_multisample_array to the native extension in the shader
compiler.
ANGLE still needs to have robust behavior for out-of-range texel
fetches that's not found in the original extension, but this does not
need to be spelled out in the extension spec.
BUG=angleproject:2775
TEST=angle_unittests
Change-Id: Ie80ae767cc92ccaf7389af28789f45547f86978f
Reviewed-on: https://chromium-review.googlesource.com/1193266
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
3e217f65
|
2018-08-28T16:55:20
|
|
Rename UniformHLSL to ResourcesHLSL
In future, atomic counter and shader storage block will be added into UniformHLSL since
they all need the UAV register. So this change renames UniformHLSL to ResourcesHLSL.
Bug: angleproject:1951
Change-Id: Ie9eda090763fbb516468c138e65e111eb12fe514
Reviewed-on: https://chromium-review.googlesource.com/1193322
Commit-Queue: Jiajia Qin <jiajia.qin@intel.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
|
|
1e1b731a
|
2018-08-28T13:27:23
|
|
Vulkan: Clean up point coord translation.
Use - 0.5 instead of + -0.5 in FlipGLPointCoord.
Bug: angleproject:2673
Change-Id: I819dcc45f9098ea64085eb71af8920fe99b67c62
Reviewed-on: https://chromium-review.googlesource.com/1194454
Reviewed-by: Tobin Ehlis <tobine@google.com>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
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>
|
|
35bc74d6
|
2018-08-03T14:07:59
|
|
ES31: Support atomic functions on D3D11 - Part II
This patch adds the support of translating atomicExchange and
atomicCompSwap without return value on D3D11 back-ends.
As the last parameter of the HLSL intrinsic functions
InterlockedExchange and InterlockedCompareExchange is not optional,
when there is a call of either atomicExchange or atomicCompSwap
without return value, we add a temporary variable for it, so that
we can directly translate all of such calls in outputHLSL.cpp.
BUG=angleproject:2682
TEST=angle_end2end_tests
Change-Id: I7e9c6d3c7d1846c865909b2f5a26592846c82582
Reviewed-on: https://chromium-review.googlesource.com/1161744
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Jiawei Shao <jiawei.shao@intel.com>
|
|
203b26f2
|
2018-07-25T10:30:43
|
|
ES31: Translate compute shader HLSL system variables in compile time
This patch moves the implementation of translating compute shader
builtin variables from link time to compile time.
Unlike graphics shaders that require the information from other
shader stages, we actually have enough information to translate
compute shader builtin variables in compile time.
Many redundant codes in DynamicHLSL have been removed after this
refactor.
BUG=angleproject:1442
Change-Id: I7458006785ff966a00a3825610adc5566652c75e
Reviewed-on: https://chromium-review.googlesource.com/1149609
Reviewed-by: Jiajia Qin <jiajia.qin@intel.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Jiawei Shao <jiawei.shao@intel.com>
|
|
76301e09
|
2018-07-19T11:48:30
|
|
Vulkan: Fix compound nested sampler struct params.
Replace the struct type of binary and symbol parameter nodes with a
lookup of the struct type in the tree.
Bug: angleproject:2494
Change-Id: I1e892e0f1b1f97302d1cdce1035f51c01d0efd9e
Reviewed-on: https://chromium-review.googlesource.com/1135695
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
06235df9
|
2018-07-20T14:26:07
|
|
Make HLSL shaders use only one main function
Instead of having separate main() and gl_main() functions in HLSL
shaders, add initializing outputs and inputs directly to the main
function that's in the AST.
This works around some HLSL bugs and should not introduce name
conflicts inside main() since all the user-defined variables are
prefixed.
BUG=angleproject:2325
TEST=angle_end2end_tests
Change-Id: I5b000c96aac8f321cefe50b6a893008498eac0d5
Reviewed-on: https://chromium-review.googlesource.com/1146647
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
da41ac69
|
2018-07-19T16:45:32
|
|
Fix decorating ViewID_OVR in HLSL output
ViewID_OVR should not be decorated in HLSL output since it is an
internal variable. Make sure that DecorateVariableIfNeeded() is used
for varyings instead of just Decorate() so that the internalness is
checked correctly and ViewID_OVR doesn't get decorated.
This avoids possible name conflicts between the internal ViewID_OVR
and any user-defined variables named ViewID_OVR.
BUG=angleproject:2062
TEST=angle_end2end_tests, angle_unittests
Change-Id: I9ed9876d4b2c760e7a11b0b270a2190993e840e5
Reviewed-on: https://chromium-review.googlesource.com/1143398
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
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>
|
|
9ff9c773
|
2018-07-11T13:08:18
|
|
Vulkan: Add driver uniforms for point coords flipping
This new driver uniform allows us to dynamically decide if we
flip the y coordinate of the gl_PointCoord variable.
We only flip the coordinate if we render downside-up, and otherwise
we cancel the flipping since the y coordinate doesn't need
modification anymore.
This completes all end2end and deqp gles2 tests success when viewport
flipping is enabled on Windows Nvidia.
Bug: angleproject: 2673
Change-Id: I570e01ef4965933428375f6ebd8eac83ef16fbff
Reviewed-on: https://chromium-review.googlesource.com/1133584
Commit-Queue: Luc Ferron <lucferron@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@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>
|
|
84c11c53
|
2018-07-11T10:12:39
|
|
Vulkan: Implement sampler structs as function args.
Bug: angleproject:2494
Change-Id: Ia8e374846427b7140ab2565ae5b9b18409a76d96
Reviewed-on: https://chromium-review.googlesource.com/1117323
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
|
|
a6a7842f
|
2018-06-28T08:32:54
|
|
ES31: Support atomic functions on D3D11 - Part I
This patch is the first one of the implementation of atomic
functions in D3D11.
There are mainly two differences in the usage of GLSL and HLSL
atomic functions:
1. All GLSL atomic functions have return values, which all
represent the original value of the shared or ssbo variable;
while all HLSL atomic functions don't, and the original value
can be stored in the last parameter of the function call.
2. For HLSL atomic functions, the last parameter that stores the
original value is optional except for InterlockedExchange and
InterlockedCompareExchange. Missing original_value in the call
of InterlockedExchange and InterlockedCompareExchange results
in a compile error from HLSL compiler.
To handle these differences, we plan to implement the translation
in two steps:
1. Support direct translations from GLSL atomic functions to HLSL
ones.
Direct translation can only handle the following two situations:
(1) The sentence is a GLSL atomic function call without requesting
a return value and it is not atomicExchange or atomicCompSwap:
e.g.
GLSL: atomicAdd(mem, value);
-> HLSL: InterlockedAdd(mem, value);
(2) The sentence is a simple assignment expression: its right is
a GLSL atomic function call and its left is a declared variable.
e.g.
GLSL: oldValue = atomicAdd(mem, value);
-> HLSL: InterlockedAdd(mem, value, oldValue);
2. Support atomic functions in the situations that don't support
direct translations.
We will modify the intermediate tree to make direct translation work
on all these situations.
e.g.
atomicExchange(mem, value);
-> int oldValue;
oldValue = atomicExchange(mem, value);
int oldValue = atomicAdd(mem, value);
-> int oldValue;
oldValue = atomicAdd(mem, value);
return atomicAdd(mem, value);
-> int temp;
temp = atomicAdd(mem, value);
return temp;
for (i = 0; i < atomicAdd(mem, value); ++i)
-> int temp;
temp = atomicAdd(mem, value);
for (i = 0; i < temp; ++i)
{
...
temp = atomicAdd(mem, value);
}
int result = isTrue ? atomicAdd(mem, value) : 0;
-> int result;
if (isTrue)
{
result = atomicAdd(mem, value);
}
else
{
result = 0;
}
This patch completes Step 1 which mainly focus on the translation
from GLSL atomic functions to HLSL ones.
BUG=angleproject:2682
TEST=angle_end2end_tests
Change-Id: I3b655b6e286dad4fd97f255f7fe87521c94db30c
Reviewed-on: https://chromium-review.googlesource.com/1121835
Commit-Queue: Jiawei Shao <jiawei.shao@intel.com>
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
|
|
569b9cb9
|
2018-07-07T21:44:35
|
|
Fix run_code_generation.py hash calculation.
Open files with mode 'r' instead of 'rb' so the hash calculation
produces the same results on Linux and Windows.
Recalculate the hashes and proc_table_autogen.cpp which was out of date.
BUG=angleproject:2711
Change-Id: I31562c96ce36e6df009c44c565fe9a3f1b5ba6c4
Reviewed-on: https://chromium-review.googlesource.com/1128549
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Frank Henigman <fjhenigman@chromium.org>
|
|
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>
|
|
b7c4f2b9
|
2018-07-09T12:01:30
|
|
translator: Refactor interface block layout qualifiers.
This will make it easier to insert internal uniform layouts in Vulkan.
Bug: angleproject:2717
Change-Id: Ic1a76848337cc67a57698913c584d8596bf4f27e
Reviewed-on: https://chromium-review.googlesource.com/1127300
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Luc Ferron <lucferron@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
d8b1c5c5
|
2018-06-20T12:08:46
|
|
Return ImmutableString from ArrayString()
This makes the compiler a few kilobytes smaller, and prepares getting
rid of TString altogether.
BUG=angleproject:2267
TEST=angle_unittests
Change-Id: I93a003fe27b99bef72f872fa1066e2e108f934c5
Reviewed-on: https://chromium-review.googlesource.com/1107713
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
8fbd9d96
|
2018-06-21T15:27:44
|
|
Use ImmutableString in ImageFunctionHLSL
This code is analoguous to the code in TextureFunctionHLSL and is now
implemented in a similar manner.
BUG=angleproject:2267
TEST=angle_unittests, angle_end2end_tests
Change-Id: Ie3503766217dad4f3848f2d4b2fc3f62b3edce0c
Reviewed-on: https://chromium-review.googlesource.com/1110366
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
71a151fd
|
2018-06-26T16:07:42
|
|
Vulkan: Use TSymbolTable in ExtractStructSamplers.
This will enable more code reuse when handling sampler struct as
function arguments. We can add the sampler structs to the symbol table
stack when they are function arguments.
Bug: angleproject:2494
Change-Id: I9eeb1d3822e34cd43535e1b16a98864545755d22
Reviewed-on: https://chromium-review.googlesource.com/1117322
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
|
|
cdf50444
|
2018-06-26T15:05:42
|
|
Add test for sampler struct rewriting indexing.
The concern originally was that rewriting sampler structs could lead to
incorrect behaviour for indexing. The test attempts to cover this but
doesn't repro. It possibly is not an issue.
Bug: angleproject:2494
Change-Id: Ibc34b08b5cee3b6ff82d150a64f1768aae64396f
Reviewed-on: https://chromium-review.googlesource.com/1117321
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Luc Ferron <lucferron@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
ac1a377d
|
2018-06-26T15:05:38
|
|
Vulkan: Split tree ops into separate files.
This makes the design consistent. Added new files for
NameEmbeddedStructs and RewriteStructSamplers.
Bug: angleproject:2665
Bug: angleproject:2494
Change-Id: If7d22a6ce9a86d51d38f68787006b7a28957861e
Reviewed-on: https://chromium-review.googlesource.com/1108086
Reviewed-by: Jamie Madill <jmadill@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>
|
|
f54e93d6
|
2018-06-20T11:46:42
|
|
Vulkan: Implement nested sampler structs.
Nested structs are handled similarly as to non-nested samplers in
structs. They are extracted and named according to the same
pattern.
Also enables functional.shaders.random.all_features.fragment*
The remaining work in the samplers-in-structs implementation is to
translate function arguments.
Bug: angleproject:2494
Bug: angleproject:2595
Change-Id: If8170feb71137d4036d352b2b0078518647d48a1
Reviewed-on: https://chromium-review.googlesource.com/1101569
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
|
|
10887984
|
2018-06-20T11:46:41
|
|
Vulkan: Sampler structs in arrays.
Samplers are extracted from arrays of struct uniforms similarly as
with non-arrays. They are named according to the variable name,
array element and sampler field name.
Nested structs to come later.
Bug: angleproject:2494
Change-Id: Ie2f5f7bd1f747e73b3c6b505b2b1043cfe1073b5
Reviewed-on: https://chromium-review.googlesource.com/1101568
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
|
|
a75aa3b2
|
2018-06-21T10:38:28
|
|
ES31: Support compute shader shared variables in HLSL
This patch implements 'shared' variables in compute shader on D3D11
back-ends. GLSL shared variables are translated into 'groupshared'
ones in HLSL.
Note that although HLSL allows initializing the variables with
'groupshared' qualifier, currently we do not initialize them because:
1. It is very slow to for d3d11 drivers to compile the compute shader if
we add the code to initialize a shared variable with large array size.
2. It seems unnecessary to do so and in GLSL it is not allowed to
initialize a shared variable in the declaration. (ESSL 3.1, Chapter
4.3.8)
BUG=angleproject:2682
TEST=angle_end2end_tests
Change-Id: Ica8247e1b98059968612a36e369718ef113a598c
Reviewed-on: https://chromium-review.googlesource.com/1109587
Reviewed-by: Jiajia Qin <jiajia.qin@intel.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Jiawei Shao <jiawei.shao@intel.com>
|
|
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>
|
|
1a3bbaa8
|
2018-01-25T11:41:31
|
|
Use ImmutableString instead of TString in QualifierTypes
This avoids unnecessary pool allocations when generating errors. Most
of the returned strings are static.
BUG=angleproject:2267
TEST=angle_unittests
Change-Id: Ia9b26898d499985d61e629fddde7aded4714eddf
Reviewed-on: https://chromium-review.googlesource.com/885818
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
e033999e
|
2018-06-20T11:46:40
|
|
Vulkan: Add struct sampler parsing.
Vulkan requires all uniforms to be declared in a block. Uniform
blocks can't have store samplers. Thus we can't use structs in
samplers with Vulkan GLSL.
To work around this limitation we extract samplers from structs
and move them into standalone types. The samplers are named
according to the variable and struct fields.
Arrays of structs and nested structs to come later.
Bug: angleproject:2494
Change-Id: I83a94ab082c6ce7ee68ec1290751ecee18820683
Reviewed-on: https://chromium-review.googlesource.com/1101567
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
Commit-Queue: 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>
|
|
72e3589c
|
2018-06-20T11:43:08
|
|
Refactor debug output of types
Instead of passing around strings from TType::getCompleteString(),
add a stream operator to InfoSinkBase that takes a TType. This makes
the compiler executable a few kilobytes smaller and will help with
getting rid of TString altogether.
BUG=angleproject:2267
TEST=angle_unittests
Change-Id: I31a6693b40a28824b3959e19ad3c0a2ce0f0a35f
Reviewed-on: https://chromium-review.googlesource.com/1107712
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
f5557acc
|
2018-06-15T09:46:58
|
|
translator: Store symbol type in TField.
This allows us to keep a separate symbol type for each field in a
struct. This can allow us to assign internal names to struct types.
It could also allow us to add internal fields to user defined stucts.
Bug: angleproject:2665
Change-Id: I6a129107d9db66c54b98b07684c3ead5801712ba
Reviewed-on: https://chromium-review.googlesource.com/1101565
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
|
|
50cf2be0
|
2018-06-15T09:46:57
|
|
Reformat some style in touched files.
This was triggered by running the code generation script.
Bug: angleproject:2665
Change-Id: Id639c78eb618182ee1859678590cf0f559b572c2
Reviewed-on: https://chromium-review.googlesource.com/1101564
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Luc Ferron <lucferron@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
06a22620
|
2018-05-18T16:48:41
|
|
ES31: Use indices to access image variables in built-in image functions
In order to implement glBindImageTexture to bind a layer of 3D/2DArray/Cube
texture, use indices to access image variables when translating built-in
image functions.
There is a conflict when transferring image2D/iimage2D/uimage2D variables to
an user defined function. For example,
layout(r32ui, binding = 0) readonly uniform highp uimage2D uImage_1;
layout(r32ui, binding = 1) readonly uniform highp uimage2D uImage_2;
uvec4 lod_fun(uimage2D img, ivec2 p)
{
return imageLoad(img, p);
}
void main()
{
uvec4 value_1 = lod_fun(uImage_1, ivec2(gl_LocalInvocationID.xy));
uvec4 value_2 = lod_fun(uImage_2, ivec2(gl_LocalInvocationID.xy));
}
If uImage_1 binds to a 2D texture, and uImage_2 binds to a layer of 3D texture,
uImage_1 will be translated to Texture2D type, and uImage_2 will be translated to
Texture3D type, "img" type of lod_fun will be translated Texture2D, so uImage_2
cannot be transferred to lod_fun as a parameter.
Indices without Texture/RWTexture information could handle this situation easily.
BUG=angleproject:1987
TEST=angle_end2end_tests.ComputeShaderTest.*
Change-Id: I7647395f0042f613c5d6e9eeb49392ab6252e21e
Reviewed-on: https://chromium-review.googlesource.com/1065797
Commit-Queue: Xinghua Cao <xinghua.cao@intel.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
|
|
ad2ae93e
|
2018-06-11T15:31:17
|
|
Vulkan: Clamp the point size range to have a min value of 1.0
Bug: angleproject:2658
Change-Id: I32ff9aa27b064d9977eea0b83b18c52c4e42e38d
Reviewed-on: https://chromium-review.googlesource.com/1096054
Commit-Queue: Luc Ferron <lucferron@chromium.org>
Reviewed-by: Geoff Lang <geofflang@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>
|
|
e18b8147
|
2018-06-07T11:53:19
|
|
Vulkan: Fix point coord management
The gl_PointCoord.y coordinate needs to be flipped
around the X axis in Vulkan to have correct results.
Bug: angleproject:2457
Change-Id: I0d87ad28366623c2be0867c610cc35678a4af43f
Reviewed-on: https://chromium-review.googlesource.com/1090824
Reviewed-by: Luc Ferron <lucferron@chromium.org>
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
Commit-Queue: Luc Ferron <lucferron@chromium.org>
|
|
c3907efa
|
2018-06-08T13:03:15
|
|
Always use custom float parsing in GLSL
We now always use custom parsing code for parsing floats in GLSL
shaders. Previously this code was only used in corner cases that
stringstream parsing did not handle according to the GLSL spec.
This is slightly faster in compiler perftests, and results in a
smaller binary as well.
Some new test cases are added to make sure that the custom float
parsing behaves correctly.
BUG=chromium:849245
TEST=angle_unittests, angle_perftests
Change-Id: I2a88ec6a8b427016e34519d72bc98216947a4c64
Reviewed-on: https://chromium-review.googlesource.com/1092697
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
79216620
|
2018-05-29T19:19:54
|
|
Use stringstream with locale override.
Add test for compiling float literals in locales with comma decimal separators.
Handle inexplicable test setlocale failure on Android,Linux. (Require success on other platforms)
Skip setting the locale on Android, which is always C locale in C++, but for some
reason std::locale::classic isn't implemented as a no-op.
Bug: angleproject:2607
Test: angle_unittests
Change-Id: I7c97cb56c01335db46f532fb8af3f9a4f2a30564
Reviewed-on: https://chromium-review.googlesource.com/1077789
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
2a12b3d5
|
2018-05-23T13:42:13
|
|
ES31: Add struct uniform block support in compute shader for D3D
BUG=angleproject:2577
TEST=angle_end2end_tests
Change-Id: I4d84a10508458444d559013e658ae88cd2923f91
Reviewed-on: https://chromium-review.googlesource.com/1069989
Commit-Queue: Jiajia Qin <jiajia.qin@intel.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
8073a951
|
2018-05-09T16:41:39
|
|
Enable warning for non-virtual destructors
Virtual functions are removed from TSymbol, so the warning for
non-virtual destructor found in a class with virtual functions can be
enabled.
BUG=angleproject:2417
TEST=angle_unittests
Change-Id: Icd0ea2c77ce826739fbe954137f8ee78e6ef5386
Reviewed-on: https://chromium-review.googlesource.com/1051830
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
|
|
67d2cd07
|
2018-05-07T10:27:22
|
|
Issue a clearer warning about negative modulus operands
This also adds unit tests for negative modulus operands.
BUG=chromium:839468
TEST=angle_unittests
Change-Id: I6ab5959ba4f7045d2bde71d246695ef0983c5608
Reviewed-on: https://chromium-review.googlesource.com/1046055
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
|
|
983460e6
|
2018-05-02T17:57:39
|
|
Rewrite repeated assignments to swizzled vectors on NVIDIA
This works around the most common instances of a bug that reproduces
on some NVIDIA OpenGL drivers prior to version 397.31.
BUG=chromium:798117
TEST=angle_end2end_tests
Change-Id: Iafc6a9a64e56fa98b42117149fe6867040e932e5
Reviewed-on: https://chromium-review.googlesource.com/1042190
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
197d5294
|
2018-04-25T14:29:00
|
|
Wrap all preprocessor code in the angle namespace.
BUG=836820
BUG=801364
Change-Id: I08b6a2f9f12b689e09df6efd916c313e71e8a051
Reviewed-on: https://chromium-review.googlesource.com/1028581
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
|
|
f827123d
|
2018-04-25T13:08:24
|
|
Handle negative float to uint conversion robustly
Converting a negative float to uint is undefined in the GLSL ES 3.00.6
spec.
However, it improves portability if we don't trigger undefined results
in C++ in this case. To do this, we cast negative floats first to
signed integer before casting them to unsigned integer.
We also issue a warning about an undefined conversion in case a
negative float was converted to uint.
BUG=chromium:835868
TEST=angle_unittests
Change-Id: I9835a739ec80699d420a4f91a3bfa112c9a13604
Reviewed-on: https://chromium-review.googlesource.com/1026681
Reviewed-by: Jamie Madill <jmadill@chromium.org>
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>
|
|
3ec304db
|
2018-04-18T14:14:25
|
|
Vulkan: Support struct initializers in shaders
Also adds a new test in GLSLTest to validate the initialization of
a struct on the same line as its declaration.
Bug: angleproject:2459
Change-Id: Ib37e20378f8ec76541db26392663bcba03390756
Reviewed-on: https://chromium-review.googlesource.com/1017340
Commit-Queue: Luc Ferron <lucferron@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
|
|
f1d3c20c
|
2018-04-16T07:44:27
|
|
Vulkan: Fix the issue with unused attributes / varyings
When an attribute, a uniform or a varying isn't used, we now remove
their layout and in/out qualifiers so that the shader can still refer
to these var names.
Bug: angleproject:2456
Change-Id: I5f1241d91bd46f663750adfab2562ef87ce69ae5
Reviewed-on: https://chromium-review.googlesource.com/1014009
Commit-Queue: Luc Ferron <lucferron@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
|
|
c90d4d38
|
2018-04-17T13:11:15
|
|
Fix problematic query in TOutputGLSLBase::visitDeclaration.
There was an invalid derefernce that for some reason was not
caught on the bots.
Bug: angleproject:2456
No-Try: True
Change-Id: I088e9671122fd25077027cb2eb577aa099fdcacf
Reviewed-on: https://chromium-review.googlesource.com/1015287
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Luc Ferron <lucferron@chromium.org>
|