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>
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>
The default framebuffer is initialized with just one drawbuffer slot
so the number of drawbuffers needs to be validated before checking if
a buffer is attached.
BUG=angleproject:2831
TEST=angle_end2end_tests
Change-Id: I960c39357853d1cd4575b06a992cff33223ab3df
Reviewed-on: https://chromium-review.googlesource.com/c/1264518
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Using x = {}; before filling out each field, we can be sure any missing
field is 0 initialized. This in turn helps us not have to specify
certain fields that are generally unused (at the moment), such
as pNext.
Bug: angleproject:2860
Change-Id: Ia1fa2db3ecfb316673a02ac0c5e13e47e055a19f
Reviewed-on: https://chromium-review.googlesource.com/c/1259764
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
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>
Instead of returning a small struct from LinkProgram calls we use
angle::Result. Linking can have 3 cases:
- the link was successful -> angle::Result::Continue
- the link failed -> angle::Result::Incomplete
- there was an internal error -> angle::Result::Stop
Note that any unexpected Incomplete is still an error. Each function
that accepts Incomplete must check explicitly.
This is the last user of ErrorOrResult.
Bug: angleproject:2491
Change-Id: Idba23be27efe4b561720a4bdd8fe486b40779497
Reviewed-on: https://chromium-review.googlesource.com/c/1255645
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Yuly Novikov <ynovikov@google.com>
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>
This saves a lot of extra work when updating a Texture.
Bug: angleproject:2763
Change-Id: I87e310ef4f847713123bd24711e1166949ff95d2
Reviewed-on: https://chromium-review.googlesource.com/c/1254043
Reviewed-by: Yuly Novikov <ynovikov@google.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Instead of deferring this work, we can process it immediately. We have
access to the information we need in the prior and current states so
can optimize the update more effectively.
Bug: angleproject:2763
Change-Id: I77482b0ea490fddf403ccc4a4f32665301fd6e7a
Reviewed-on: https://chromium-review.googlesource.com/c/1254042
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
In CL #1207216, the #include in blit11 and shader file name had
capitilization mismatches, which caused a clang error. This fixes the
issue.
Bug: angleproject:2762
Change-Id: I4760843beedaabfb83228e40289efaa6a767dec3
Reviewed-on: https://chromium-review.googlesource.com/c/1262017
Commit-Queue: Brandon1 Jones <brandon1.jones@intel.com>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
DEBUG was useful for developing and turning on the code, but it's too
verbose to be used with the Android Q release.
Bug: angleproject:2794
Change-Id: I092567c25414cbba7f36ab94e191b1dcfe39fbcb
Reviewed-on: https://chromium-review.googlesource.com/c/1260102
Commit-Queue: Ian Elliott <ianelliott@google.com>
Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
This hides the logic for manipulating the current layout and barriers
into the image helper. This will make it easier to implement implicit
pipeline barriers. It allows us to remove the updateLayout() hack.
Bug: angleproject:2828
Change-Id: I3e59872e66064e6b105c1f398b4212fb3a6be1a7
Reviewed-on: https://chromium-review.googlesource.com/1255506
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
This makes the vk::CommandBuffer class closer to an auto-generated
wrapper class.
Bug: angleproject:2828
Change-Id: I91ba03914a60d5612707dd240fcda25b86cf2c46
Reviewed-on: https://chromium-review.googlesource.com/1255505
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
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>
This changes the program query to resolve the link if required. If the
validation layer is skipped the link is resolved in the gl::Context.
Resolving the link on program query allows us to avoid resolving the
link on most of the gl::Program query APIs.
This improves inlining and particularly affects uniform update. It
fixes a performance regression introduced by the parallel shader
linking extension. Gives a 17% increased score on a uniform benchmark.
Also fixes two missing cases of checking for the extension in our
validation code.
Note that some bugs might still exist when the validation layer is
disabled.
Bug: angleproject:2851
Change-Id: I5d725eede3fa147cedf2ce0129791b3412a97a61
Reviewed-on: https://chromium-review.googlesource.com/1255509
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Yuly Novikov <ynovikov@google.com>
This cleans up the code slightly and removes a few if checks.
Also fixes a potential edge case with ProgramBinary called on a program
that is in-use.
Bug: angleproject:2763
Change-Id: Ibe0ab20ed44f593bb6c2b0612871680a7df1a15f
Reviewed-on: https://chromium-review.googlesource.com/1254041
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Yuly Novikov <ynovikov@google.com>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Dot files are a graph format that can be visualized with GraphViz.
Giving a small visualization output can help diagnose problems with
the graph. For example extra edges or incorrect dependencies.
Bug: angleproject:2379
Change-Id: I544cba11c5e33579b06fef2fb41bad60066a64e4
Reviewed-on: https://chromium-review.googlesource.com/1254383
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tobin Ehlis <tobine@google.com>
This enum was validated but not implemented.
TEST=RequestExtensionTest.Queries
BUG=890689
Change-Id: I7285e45cef53b197d61cd0dfa9d2bacb70e23e64
Reviewed-on: https://chromium-review.googlesource.com/1255142
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuly Novikov <ynovikov@google.com>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
This fixes format support tables in formatutils.cpp and formatutilsgl.cpp
to conform to the core and extension GLES specs,
for a large portion of the formats.
ExtsOnly SupportRequirement was enhanced to accept multiple sets of extensions.
Format is supported if all the extensions in one of the sets are available.
Also fixes determining support for extensions based on those formats.
And some fixes to tests which fail due to more strict format support.
Bug: angleproject:2567
Change-Id: I6050fff9c597f658fdcea2477bff59a603cdb7e8
Reviewed-on: https://chromium-review.googlesource.com/1105612
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Yuly Novikov <ynovikov@google.com>
The address of each attribute in a vertex buffer must be aligned
according to its format. See section 20.3 of vkspec.
Currently we don't handle this when using DynamicBuffer as vertex
input buffer. This loosely fixes the issue by using max alignment for
all formats.
BUG=angleproject:2797,angleproject:2405
Change-Id: I2b27950dacc8fda75dcb646ef4b4d66ff27d629a
Reviewed-on: https://chromium-review.googlesource.com/1234281
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Chrome needs this extension to be exposed to load the query entry points,
even for emulated query types.
BUG=angleproject:2855
Change-Id: I09dbb45c391df64d67858f9131c45b164947a707
Reviewed-on: https://chromium-review.googlesource.com/1255507
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Only one flag ("reverseRowOrder") from PixelPackState was being used,
so instead of including the entire struct in PackPixelsParams, just
include the one flag.
BUG=angleproject:2718
Change-Id: I32e8b30383d198ecba9bf1719c32dda0938fc969
Reviewed-on: https://chromium-review.googlesource.com/1242210
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Yuly Novikov <ynovikov@google.com>
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>
Tests often need to call gl functions to set up program related state
after glCreateProgram has been called but prior to glLinkProgram is
called. Add a callback function to the CompileProgram utility function
to fulfill this need. This reduces code duplication considerably in
several tests.
An alternative way to improve CompileProgram would be to split it into
several different utility functions. This might be slightly easier to
read, but would also be a larger refactoring and require more checks
at the call site.
This will make it easier to implement EXT_blend_func_extended tests,
which need to bind fragment outputs to different slots.
BUG=angleproject:1085
TEST=angle_end2end_tests
Change-Id: I3ac8b7bdc21c6a1f14517bc7df0cf6f35abd7612
Reviewed-on: https://chromium-review.googlesource.com/1254062
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Device recovery is not possible but device loss can be tracked.
BUG=angleproject:2787
Change-Id: Ib94dd557b6b005a560b7a64275b176f7b1777211
Reviewed-on: https://chromium-review.googlesource.com/1194458
Reviewed-by: Tobin Ehlis <tobine@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Instead of starting recording blit commands immediately we can
record them closer to where we write to the Image directly. This makes
it a bit easier to move towards hiding the command buffers. And easier
to move to using implicitly generated barriers.
Bug: angleproject:2828
Change-Id: Ida7d4081dd41c8ee19c7dc3fb234df1bb065794d
Reviewed-on: https://chromium-review.googlesource.com/1254382
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Frank Henigman <fjhenigman@chromium.org>
This reverts commit 799da6d18c.
Reason for revert:Crashes have slowed down but there were two changes around the same time that may have caused it. Relanding this to see if things improve.
Original change's description:
> Revert "D3D11: Resolve multisampled EGL surfaces at eglSwapBuffers"
>
> An increased crash rate in rx::NativeWindow11Win32::createSwapChain has been
> seen around the same time as this patch landed. Speculatively reverting.
>
> BUG=887403
>
> This reverts commit a49f60fee7.
>
> Change-Id: Id1b08efbf47196f17f4a5e509a29f7d628b07b49
> Reviewed-on: https://chromium-review.googlesource.com/1238884
> Reviewed-by: Geoff Lang <geofflang@chromium.org>
> Commit-Queue: Geoff Lang <geofflang@chromium.org>
TBR=geofflang@chromium.org
# Not skipping CQ checks because original CL landed > 1 day ago.
Bug: 887403
Change-Id: Id862fbb1c0e764470f0b7f6bdb97bf6bab95d26b
Reviewed-on: https://chromium-review.googlesource.com/1251701
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
There were two code paths using nearly identical code. Fix this by
generalizing the helper method slightly.
Refactoring change only.
Bug: angleproject:2828
Change-Id: I39caccfaad4880e566e995483b8e8fb46d67d3da
Reviewed-on: https://chromium-review.googlesource.com/1249563
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Frank Henigman <fjhenigman@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
The cache is initialized from the application's blob cache and is
occasionally written back to it for disk storage.
Bug: angleproject:2516
Change-Id: I4cba4b00a7b9641c2983ef07159bc62cd10a5519
Reviewed-on: https://chromium-review.googlesource.com/1241373
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Yuly Novikov <ynovikov@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
We had two separate minor bugs. 1) missing a flush of the image data
and 2) missing an initial barrier to set the image to TRANSFER_DST.
Bug: angleproject:2652
Bug: angleproject:2653
Change-Id: I485aafc5c9055b5efb101cb2bc3ebab0588d2639
Reviewed-on: https://chromium-review.googlesource.com/1249564
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Frank Henigman <fjhenigman@chromium.org>
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>
It seems conceptually easier to understand that a vk::Framebuffer is
the resource used in graph. Rather than making the GraphResource be
integrated into the FramebufferVk class itself. This means that the
only objects that are graph resources are Vulkan objects: Images,
Buffers, and Framebuffers.
Refactoring change only.
Bug: angleproject:2828
Change-Id: I59d60643182287d4b1fcf9730a3c3a0da5b65973
Reviewed-on: https://chromium-review.googlesource.com/1249561
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Frank Henigman <fjhenigman@chromium.org>
Don't make TextureVk/RenderbufferVk/SurfaceVk/BufferVk own the
manipulation of the command graph. Instead put the operations close to
the buffers and images used to render.
This will lead towards implementing implicit barriers on the command
graph resources.
Bug: angleproject:2828
Change-Id: I07b742b6792c60285b280d6454f90e963d667e0e
Reviewed-on: https://chromium-review.googlesource.com/1246983
Reviewed-by: Frank Henigman <fjhenigman@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
When inserting uniform layout info into the default uniform block, the array
sizes need to match but insertion was skipped when the uniform was a sampler.
This caused heap corruption when uniform data was written to the wrong offset
in the buffer.
BUG=angleproject:2859
Change-Id: Ia58a68870e2a4805391266dfe73fe8c8d238931d
Reviewed-on: https://chromium-review.googlesource.com/1249562
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>