|
9f693aa3
|
2022-10-22T14:45:59
|
|
Implement an allow list for PLS
In order to guarantee no data is lost while using the
EXT_shader_pixel_local_storage extension, we need to restrict
applications to a small subset of commands while pixel local storage is
active. This CL implements the allow list for GL entrypoints using
wildcard matching inside the code generator, and adds custom validation
for the more specific restrictions that go into effect when PLS is
active.
Bug: angleproject:7279
Change-Id: I5dd48bd93c10e8775f32be32a4fcf17855eb2f0e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3932552
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Chris Dalton <chris@rive.app>
|
|
135022e4
|
2022-10-11T00:03:11
|
|
Vulkan: Create robust pipelines based on context state
Previously, pipelines were made robust based on whether any context in
the share group has so far been made robust. This means that pipelines
created on non-robust contexts would still be compiled as robust.
Inefficiency aside, this was buggy because robustness was not part of
the pipeline cache key, so if a pipeline was created as non-robust
first, then recreated in a robust context, it would reuse the non-robust
variant.
With VK_EXT_pipeline_protected_access, a similar situation arises for
context protected-ness. However, it is incorrect in that case to create
pipelines as protected unnecessarily.
This change makes pipeline robustness a part of the pipeline cache key,
in preparation for protectedness to be added similarly. Compute
programs may now generate multiple pipelines as a result too.
Bug: angleproject:7629
Change-Id: Ie95f10eff878f8c8b221c1018da44385c7aad15e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3943534
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
|
|
4ebdac79
|
2022-08-29T16:25:46
|
|
Vulkan: Ensure we sync the draw FB before beingQuery.
Bug: chromium:1354271
Change-Id: I5fe3649d9d39de37d0a59c80a4f31a17d1a72838
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3863145
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
8b2aff28
|
2022-09-12T10:27:28
|
|
Implement the ANGLE_shader_pixel_local_storage API
Implements the OpenGL ES API for ANGLE_shader_pixel_local_storage and
adds thorough validation and testing as outlined in the spec. This
feature is still implemented entirely in the frontend, but the extension
now works end-to-end with a passing test suite, and can be used
externally. Over time we can start gradually moving the implementation
into backends as appropriate.
Bug: angleproject:7279
Bug: angleproject:7647
Change-Id: I1c861a0fca96423be02e17bbe1fb7f57b99ea63f
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3886462
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Chris Dalton <chris@rive.app>
|
|
2796cbfd
|
2022-09-15T16:18:47
|
|
GLES1: Implement logic op through ANGLE_logic_op
Bug: angleproject:7654
Change-Id: I88c784d87c1cb7cb7e5ccf8f020203553513bbb3
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3899381
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
|
|
97926f80
|
2022-09-15T00:10:49
|
|
GL: Implement GL_ANGLE_logic_op
Enabled only on Desktop GL where logic op is available.
Bug: angleproject:7654
Change-Id: I3c17ffb5b21abf31aec247319a625526f1bec37d
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3898316
Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
d375547c
|
2022-08-12T15:54:39
|
|
Do not link program pipeline in glUseProgramStages
1. The commit 3a9f18f135fe82 caused a link to occur everytime
glUseProgramStages is called. This is redundant since the program
pipeline can be linked just before usage, thus allowing for multiple
stages to be bound before linking the executable.
2. Mark PPO as a dirty object and link the PPO in dirty object handler
3. Early return if the same program is being bound to the same stage
of the pipeline.
4. Added ProgramPipelineObjectBenchmark perf test that switches programs
before a draw and observed following data -
1. vulkan profile -
1. wall_time before patch - 102000 ns
2. wall_time after patch - 38000 ns
2. vulkan_null profile -
1. wall_time before patch - 125000 ns
2. wall_time after patch - 52000 ns
Bug: angleproject:5102
Bug: angleproject:6566
Test: ContextNoErrorPPOTest31.*Vulkan
Test: ProgramPipelineTest31.*Vulkan
Test: ProgramPipelineObjectBenchmark*
Change-Id: Idbc2fcb4875bbd040e9ec847eb2a8f96f287173c
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3830170
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: mohan maiya <m.maiya@samsung.com>
|
|
c517463a
|
2022-07-28T00:00:00
|
|
Add NoUnclampedBlendColor limitation
Although ES 3.0 and ES 2.0 with floating-point color
buffer extensions must support unclamped constant
blend color, some drivers clamp it anyway.
To let applications know the effective behavior, ANGLE
state management has been expanded to simulate what
the OpenGL ES driver is doing.
So far, this bug has been confirmed only on Adreno GPUs.
Unconditionally enabled this limitation on D3D9 as it
cannot support unclamped blend color by design.
Bug: angleproject:7536
Change-Id: I7e28a5553e79669d8482d48c6e79bdd811971ade
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3791350
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
|
|
785353fd
|
2022-05-24T12:40:16
|
|
Support Desktop OpenGL context creation in end2end tests
Validation of Desktop GL versions and profile masks is unimplemented.
Bug: angleproject:7360
Change-Id: Ifae94215b6aada895c2b02318a1d05c9515e9b96
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3664916
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
|
|
97a6e581
|
2022-05-30T16:50:26
|
|
Vulkan: Useful implementation of program binaries
ANGLE already serializes the pipeline state for the sake of
OES_get_program_binary. This serialization had limited usefulness
however, since the Vulkan driver hasn't actually created any pipelines
yet (which is a costly part of program creation).
Simultaneously, ANGLE deferred Vulkan pipeline creation to draw time,
which causes hitching.
In this change, a handful of Vulkan pipelines are precreated at
link time; those at least that are sure to create different blobs in the
pipeline cache (different spec consts or SPIR-V generation). These
pipelines are created in the program executable's cache. The cache is
then merged into the shared renderer cache (for potential blob reuse by
other programs).
With this, two goals are achieved:
- Most pipelines created at draw time hit the pipeline cache, avoiding
costly compilation.
- When the program binary is retrieved, the contents of the program
executable's pipeline cache is also returned. On reload, the cache is
recovered, resulting in faster startup.
Bug: angleproject:5881
Change-Id: I46c5451a7d0b16dffd40e44015e094640886880b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3671977
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
fea19567
|
2022-05-17T17:44:06
|
|
Vulkan: Remove removeEarlyFragmentTestsOpt flag
* Removed removeEarlyFragmentTestsOptimization and the related
SPIRV transformation and variables.
* Removed mUsesEarlyFragmentTestsOptimization.
* Removed SH_EARLY_FRAGMENT_TESTS_OPTIMIZATION.
* Merged updateUsesEarlyFragmentTestsOptimization() into
updateFragmentInoutRange().
Bug: angleproject:7347
Change-Id: I7299bd4e8ab5363e5cf06eb48419d4f469106e12
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3648217
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
|
|
bb3afdf4
|
2022-05-17T16:08:06
|
|
Drop support for 64xMSAA+
Hardware that supports anything more than 32xMSAA is rare (practically
only Nvidia). That high number of samples is hardly useful either way.
This change reduces the number of words for the sample mask to 1,
reducing the amount of state needed to track it.
Bug: angleproject:7328
Change-Id: Iea9add1cbeef494ff9bb383b10c82b839d1e53a4
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3652738
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
21ad9b3c
|
2022-04-07T09:57:26
|
|
Vulkan: Add generic descriptors for DS cache.
With the new design, the descriptor set cache keys include all
identifying information needed to reconstruct the update descriptor
sets calls except the specific resource handles. The places for the
resource handles are held by serials intead. When we miss the cache,
we no longer need a second step to then construct the update calls,
and can build the update calls directly from the key structures in
combination with a list of resource handles.
Bug: angleproject:6776
Change-Id: If1660a557585a75e9aa2560d6a38c56b62f555c8
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3484981
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
02b96848
|
2022-04-21T16:32:31
|
|
Vulkan: Add support for GL_QCOM_shading_rate
Layer GL_QCOM_shading_rate over VK_KHR_fragment_shading_rate
Test: ShadingRateQcomTest*
Bug: angleproject:7172
Change-Id: I3f040dbfad3906facd4349937fed2ce9a464b824
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3599874
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: mohan maiya <m.maiya@samsung.com>
|
|
62ca6449
|
2022-04-13T09:36:40
|
|
Reland "Fix BlendStateExt::mMaxColorMask initialization"
This is a reland of commit 50d008a7efcab80f34eb742148d05389b2ed247e
Besides fixing the BlendStateExt color mask initialization bug,
the following changes were made:
* All fields were made private with accessor functions.
* A new assertion was added that ensures 64-bit storage for factors
and equations. This allowed dropping one redundant mask.
* Two new helper functions were added.
* BlendStateExt::mMaxDrawBuffers was renamed to mDrawBufferCount.
* The BlendStateExt class is now aligned to 8 bytes with an assertion.
* Expanded test coverage.
Also fixed incorrect usage of BlendStateExt fields in:
* StateManagerGL::syncBlendFromNativeContext
* StateManagerGL::restoreBlendNativeContext
Original change's description:
> Fix BlendStateExt::mMaxColorMask initialization
>
> This variable should not have its unused bits set.
>
> To avoid confusion with other masks of the same class,
> the variable was renamed to mAllColorMask.
>
> Bug: angleproject:7200
> Change-Id: I72542d49ff8da3dbb8d61c5034ce37c1e8fcc6e1
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3581990
> Reviewed-by: Jamie Madill <jmadill@chromium.org>
> Reviewed-by: Geoff Lang <geofflang@chromium.org>
> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Bug: angleproject:7200
Change-Id: I87a5fe0f9dfbbf5e525b9120f772aa9adb39ce5f
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3593234
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
|
|
cdd97fb8
|
2022-03-24T17:41:30
|
|
Reland "Vulkan: Fix invalid access with display texture share group."
This is a reland of 1099b5ef2279cfe1988a39c8e011aada59c650f1.
Original change's description:
> Vulkan: Fix invalid access with display texture share group.
> Create bufferpool that owns by RendererVk.
> If we are using EGL_ANGLE_display_texture_share_group
> extension, use the bufferpool owned RendererVk,
> otherwise, use the bufferpool owned by EGL::ShareGroup.
> The bufferpool lifetime will remain consistent with
> texture lifetime.
> Bug: chromium:1299211
> Change-Id: Ie4e87cea1dfd20dabab24e2afed6ddd92e469888
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3531155
> Reviewed-by: Charlie Lao <cclao@google.com>
> Reviewed-by: Geoff Lang <geofflang@chromium.org>
> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Bug: chromium:1299211
Change-Id: I4b8f5bcb30297f2c5f24e02404fd96011f9d843b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3550038
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
73ec28af
|
2022-03-23T21:13:45
|
|
Revert "Vulkan: Fix invalid access with display texture share group."
This reverts commit 1099b5ef2279cfe1988a39c8e011aada59c650f1.
Reason for revert: suspect culprit of 1309304
Original change's description:
> Vulkan: Fix invalid access with display texture share group.
>
> Create bufferpool that owns by RendererVk.
> If we are using EGL_ANGLE_display_texture_share_group
> extension, use the bufferpool owned RendererVk,
> otherwise, use the bufferpool owned by EGL::ShareGroup.
> The bufferpool lifetime will remain consistent with
> texture lifetime.
>
> Bug: chromium:1299211
> Change-Id: Ie4e87cea1dfd20dabab24e2afed6ddd92e469888
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3531155
> Reviewed-by: Charlie Lao <cclao@google.com>
> Reviewed-by: Geoff Lang <geofflang@chromium.org>
> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Bug: chromium:1299211, 1309304
Change-Id: Ibdc119ef6bb52352858114d72a0f1c0edcd4da5e
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3546288
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Reviewed-by: Shrek Shao <shrekshao@google.com>
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
|
|
1099b5ef
|
2022-03-17T17:20:44
|
|
Vulkan: Fix invalid access with display texture share group.
Create bufferpool that owns by RendererVk.
If we are using EGL_ANGLE_display_texture_share_group
extension, use the bufferpool owned RendererVk,
otherwise, use the bufferpool owned by EGL::ShareGroup.
The bufferpool lifetime will remain consistent with
texture lifetime.
Bug: chromium:1299211
Change-Id: Ie4e87cea1dfd20dabab24e2afed6ddd92e469888
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3531155
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
|
|
29e25468
|
2022-01-07T07:02:53
|
|
Account for EGL 1.5 version when dealing with robustness
EGL 1.5 spec allows for EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY
and EGL_CONTEXT_OPENGL_ROBUST_ACCESS enums to be passed in to
eglCreateContext. Update the validation layer and queries to account
for the new enums.
Bug: angleproject:6883
Tests: KHR-NoContext.es32.context_flags.*flag*
Tests: KHR-NoContext.es32.robustness.*reset*
Change-Id: I7088e0dca08cea2cfdcf1877b6d999c0e0336e5e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3373133
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: mohan maiya <m.maiya@samsung.com>
|
|
3064920a
|
2022-01-19T11:48:57
|
|
Capture/Replay: Serialize ActiveTexturesCache.
Also add group scope to samplers.
Bug: angleproject:3570
Change-Id: I616a54d95544af1e3c4eeff196806e5bfb20292e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3402100
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Reviewed-by: Tim Van Patten <timvp@google.com>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
158ecba6
|
2022-01-07T16:40:26
|
|
Vulkan: Remove cached Impl pointers from ContextVk.
These pointers were a common source of programming error, where
sometimes they wouldn't be updated when they were needed. Instead
we can pull the objects directly from the GLES state. We added
them initially to attempt a performance improvement, but it's
likely they didn't significantly decrease memory accesses or the
number of instructions we process for GLES calls. Hence removing
them should be an improvement in safety without a perf loss.
Bug: angleproject:6864
Change-Id: I54107686992065a514077c71d173b804e295515e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3378904
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
ef637366
|
2021-11-19T22:38:56
|
|
Revert the order of texture sync and frame buffer object sync
This change reverts the sync order swap done in
CL a280c671f178daf73da447d1030773b58b534998,
to address a performance issue in TRex.
The crash that sync order swap was
trying to resolve was addressed by
another CL 0fcad6260a3e3943fb84657a3a7f488d1e155fb7.
Bug: angleproject:6014
Change-Id: Ie49628295b6dcd5d012dc795bf123865b1a7f893
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3292636
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
3a9f18f1
|
2021-10-18T10:44:38
|
|
Refactor program pipeline handling.
In preparation for moving more code from gl::Program to
gl::ProgramExecutable so it can be shared with ProgramPipeline.
Bug: angleproject:6566
Change-Id: Icb7ecccb37ae8e0d7d5fef8968f0dd7ef6fe6150
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3226305
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
49ac15a5
|
2021-09-20T11:29:01
|
|
Optimize VAO bindings.
This CL makes the XFB binding tracking WebGL-only. That will
speed up VAO binding changes in non-WebGL considerably.
Also has a few inline micro-optimizations that may not have
a large effect.
Bug: angleproject:6371
Change-Id: Ib0a26a3b956dcd6ff78626e5cd6514b46270d882
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3170116
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
1ca1589f
|
2021-09-13T10:56:58
|
|
Give GLES extension bools a vendor suffix.
This is in preparation for auto-generation which will give all of
these bools suffixes.
Bug: angleproject:6379
Change-Id: I7e3f6c9b644c41a2165e6bf7b62d661fd352a250
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3158503
Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
df957576
|
2021-08-31T23:02:51
|
|
Avoid redundant blend state dirty bit setting
This change no-ops a number of blend-related state setting functions
when the state doesn't actually change given the parameters.
Bug: angleproject:6298
Change-Id: I156e20685089aa71bd64eae560153e5def891d63
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3133823
Reviewed-by: Sunny Sun <sunny.sun@arm.com>
Reviewed-by: Tim Van Patten <timvp@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
b2238a3c
|
2021-08-16T08:23:00
|
|
Capture/Replay: MEC consistency improvements.
Fixes a few very small bugs in MEC. The current program wasn't always
captured correctly. Also texture bindings were not always left in the
right state. Fixes this by tracking the currently bound GL state
between the "shared" and "aux" MEC capture functions. Also updates the
vertex array capture to detect when to use ES 2.0 semantics. ES 3.1
is left unimplemented as it was before.
Bug: angleproject:5133
Change-Id: I5f03b8ffbdccec2664fda4698581b166a36fabdd
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3097809
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
|
|
7e040640
|
2021-08-16T08:43:17
|
|
libANGLE: Minor cleanups.
Removes a couple duplicated cached members in gl::State. Also a few
other small refactorings.
Bug: angleproject:5133
Change-Id: I0c6cd4c6544ef1690a4ce95d40dac70c688c7092
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3097808
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
|
|
934ffac6
|
2021-08-05T15:43:32
|
|
Vulkan: Propagate BufferData changes to shader storage buffer binding
This CL adds context to the observer list of shader storage buffer. When
BufferData is called on the current bound shader storage buffer, context
gets notified and DIRTY_BIT_SHADER_STORAGE_BUFFER_BINDING gets set.
Bug: b/195678877
Change-Id: Id8a5266942e33f0a834d7c57fdde75f57e93d347
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3076177
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
e28fb127
|
2021-08-05T14:32:16
|
|
Vulkan: Propagate BufferData changes to atomic counter binding
This CL adds context to the observer list of atomic counter buffer
so that it gets notified when BufferData is called on atomic counter
buffer and set dirty bit accordingly.
Bug: b/195678877
Change-Id: I924cf12ef54b5986d5c56b9e3b71584039490206
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3076170
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
217acac2
|
2021-07-21T12:42:56
|
|
Vulkan: Add support for EXT_primitive_bounding_box
1. Added support for EXT_primitive_bounding_box extension
2. Renamed shader variable gl_BoundingBoxEXT[] to ANGLEBoundingBox[]
Bug: angleproject:3576
Test: dEQP-GLES31.functional.primitive_bounding_box.*
Change-Id: I15fa9af50c6fd8e86d225670ddd8eb39f6e65d35
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3053618
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
d2b659f9
|
2021-03-25T15:40:58
|
|
EGL: implement EGL_EXT_protected_content Context
Add Validation check to Contexts and Surfaces
Add Vulkan protected memory features and properties
Add protected member to Surfaces and Contexts
Implement hasProtectedContent in Vulkan
Add QueueFamily helper, extent DeviceQueueMap
Protected Swapchains always on for Android
Add EGLProtectedContentTest
Test: angle_end2end_test --gtest_filter=EGLProtectedContentTest
Bug: angleproject:3965
Change-Id: I9352b1e594f71bb4e89cee7137a468940d186b1b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2800413
Commit-Queue: Mohan Maiya <m.maiya@samsung.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
a280c671
|
2021-05-24T19:05:44
|
|
Vulkan: Move framebuffer dirty bits handling after texture
When texture changes, it notify the observer. Framebuffer object is one
of the observer and is able to respond to the changes in texture object.
In this specific case, when texture called TextureVk::releaseImage and
requires framebuffer object to syncState and call
TextureVk::initRenderTargets. The problem right now is that framebuffer
object's dirty bits are processed before texture, which means if the
texture is being used by currently bound framebuffer object, it will not
trigger the FBO's dirty bit handling. This CL moves container object
dirty bit (DIRTY_OBJECT_DRAW_FRAMEBUFFER and
DIRTY_OBJECT_READ_FRAMEBUFFER) after texture/image object's dirty bits.
Bug: chromium:1212206
Bug: chromium:1197431
Change-Id: I95723da1ce5b8936d66692242f2e25e7a73bafe6
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2915764
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Ian Elliott <ianelliott@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
0c77f3ad
|
2021-03-10T15:58:00
|
|
Vulkan: Implement shader buffers descriptor cache.
Implements a descriptor set cache for UBOs, SSBOs, and atomic counter
buffers. Storage Images and framebuffer fetch input attachments are
not yet included. Requires moving the buffer barrier handling into
ContextVk, similarly to how we handle the barriers for Textures.
The packed description key for the descriptors uses a "fast" vector
with a basic minimum size. For most cases of a few buffers this will
fit easily in stack memory, but for larger programs with many buffers
we fit this into heap memory. The key has a large upper bound due to
the high ES 3.2 requirements and the need to index several values such
as the offset and binding size.
We use dynamic offsets for uniform buffers when possible. This ensures
applications like Manhattan 3.1 that use sets of common buffers with
changing offsets hit the cache most of the time.
Because of resource limits we pick at compilation time whether to use
dynamic or static descriptor sets. Mostly this applies to tests that
use a large number of uniform buffers. A future implementation could
be smart and would recompile the program with heuristics to use a
minimal number of dynamic indices.
Reduces the number of descriptor set updates from ~300 -> ~30 per frame
in Manhattan 3.1 and in Asphalt 9 from 900+ to as low as 0 per frame.
Bug: angleproject:5736
Change-Id: I5c2a3881bec90d301dab15cc86c8a70e60674ad7
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2757515
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
fbfecbe2
|
2021-04-07T11:26:13
|
|
Capture/Replay: Add PPO/glProgramUniform support
Command and Conquer: Rivals requires additional frame capture API
support:
- Program Pipeline Objects
- glProgramUniform*
Bug: angleproject:5830
Change-Id: I159086f92d2dfead0a513cd17fadeda7df92f408
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2809891
Commit-Queue: Tim Van Patten <timvp@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
|
|
716b2cba
|
2021-03-12T14:46:53
|
|
Use bitset masks for active shader buffers.
This switches the tracking for the uniform, shader storage, and atomic
counter buffers to use bitset masks to determine where there are
active buffers. This will make iterating these buffer sets faster.
Also renames the limit for atomic counter buffers to be consistent
with the other buffer types.
Also applies the implementation limit to atomic counter buffer
bindings. This fixes out-of-bounds access on some Linux platforms that
expose a large number of bindings.
Bug: angleproject:5736
Change-Id: Ice801645697592d1dda6aebf0cb69767594cc0c5
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2757509
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
81dcf078
|
2021-03-08T11:21:31
|
|
Reland "Vulkan: Support EXT_sRGB_write_control"
This is a reland of 6073af536cf627742696823edc82c9b0a481a8bc
with 2 changes -
1. Don't enable the extension even in nonConformant mode
2. Don't enable VK_KHR_image_format_list for swiftshader
Original change's description:
> Vulkan: Support EXT_sRGB_write_control
>
> Implement support for EXT_sRGB_write_control. This extension
> requires VK_KHR_image_format_list to be supported.
>
> The spec requires this functionality to work with glBlitFramebuffer
> as well but support for that will be added in a follow up change.
> As such, this extension is only exposed in non-conformant mode.
>
> Bug: angleproject:5075
> Tests: SRGBFramebufferTest.*Vulkan*
> Change-Id: I59b38f6cd810a3d0d67ec29f4f19c25f65f70862
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2617243
> Commit-Queue: Mohan Maiya <m.maiya@samsung.com>
> Reviewed-by: Jamie Madill <jmadill@chromium.org>
> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Bug: angleproject:5075
Change-Id: I8e149d196a39c3c4769bfa8690792f3c53831299
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2762647
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Mohan Maiya <m.maiya@samsung.com>
|
|
b27740f3
|
2021-03-09T16:15:15
|
|
Revert "Vulkan: Support EXT_sRGB_write_control"
This reverts commit 6073af536cf627742696823edc82c9b0a481a8bc.
Reason for revert: crbug.com/1186140
Original change's description:
> Vulkan: Support EXT_sRGB_write_control
>
> Implement support for EXT_sRGB_write_control. This extension
> requires VK_KHR_image_format_list to be supported.
>
> The spec requires this functionality to work with glBlitFramebuffer
> as well but support for that will be added in a follow up change.
> As such, this extension is only exposed in non-conformant mode.
>
> Bug: angleproject:5075
> Tests: SRGBFramebufferTest.*Vulkan*
> Change-Id: I59b38f6cd810a3d0d67ec29f4f19c25f65f70862
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2617243
> Commit-Queue: Mohan Maiya <m.maiya@samsung.com>
> Reviewed-by: Jamie Madill <jmadill@chromium.org>
> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Bug: angleproject:5075,chromium:1186140
Change-Id: Ib0d4d60fe7434fb950f99db2c210aab9af7d2d0e
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2743663
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Commit-Queue: Peng Huang <penghuang@chromium.org>
|
|
6073af53
|
2021-03-08T11:21:31
|
|
Vulkan: Support EXT_sRGB_write_control
Implement support for EXT_sRGB_write_control. This extension
requires VK_KHR_image_format_list to be supported.
The spec requires this functionality to work with glBlitFramebuffer
as well but support for that will be added in a follow up change.
As such, this extension is only exposed in non-conformant mode.
Bug: angleproject:5075
Tests: SRGBFramebufferTest.*Vulkan*
Change-Id: I59b38f6cd810a3d0d67ec29f4f19c25f65f70862
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2617243
Commit-Queue: Mohan Maiya <m.maiya@samsung.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
f6784006
|
2021-02-08T16:39:04
|
|
Modify data type of ActiveTextureMask and ImageUnitMask
ActiveTextureMask and ImageUnitMask need more than 64bits. We
can now use the BitSetArray datatype and avoid the perf penalty
of using std::bitset
Bug: angleproject:3877
Tests: angle_perftests.exe --gtest_filter=TexturesBenchmark*
Change-Id: Ic82e09d1aa2c1904d06ad48ba6200f35896665ac
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2664734
Commit-Queue: Mohan Maiya <m.maiya@samsung.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
f1cbcaba
|
2021-02-07T13:37:49
|
|
Use const reference when possible
When retrieving BitSet masks return a const reference
of the mask to avoid invoking the copy-constructor.
Bug: angleproject:3877
Change-Id: I9f724a4864f3db17aa6f1ab74b81053c65313764
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2681767
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Mohan Maiya <m.maiya@samsung.com>
|
|
54242b8f
|
2021-02-04T12:20:57
|
|
Vulkan: Leverage ExtendedDirtyBitType
Expand ExtendedDirtyBitType to include bit for clip distance,
mipmap generation hint and shader derivative hint. Handle these
dirty bits in ContextVk::syncState
Bug: angleproject:5611
Change-Id: If8d1646334e737f81ac72cdddb8fe3ba613b4b94
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2676173
Commit-Queue: Mohan Maiya <m.maiya@samsung.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
89f50584
|
2021-02-03T08:51:04
|
|
Vulkan: Add ExtendedDirtyBitType bitset
ExtendedDirtyBitType qualifies DIRTY_BIT_EXTENDED dirtybit.
Clip control code path can now set the appropriate ExtendedDirtyBitType
when there is a change in state. Also remove the ClipSpaceOrigin member
in the Vulkan backend that cached front-end state.
Bug: angleproject:5471
Tests: dEQP-GLES2.functional.clip_control.*
Change-Id: I8dbb509ef940e7905439d32483fd67a8fc171a6e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2673062
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Mohan Maiya <m.maiya@samsung.com>
|
|
80a4223e
|
2021-01-28T17:51:31
|
|
Vulkan: Handle changes to viewport when clip origin is modified
The expected view port is different from current viewport translation
when the clip origin is the upper left. So now, it has four different
view port translations based on clip origin and y-flip of framebuffer.
- add query and state management for EXT_clip_control
- add dirty bit for clip control
- change viewport, scissor and cull face when clip origin changes
Bug: angleproject:5471
Tests: dEQP-GLES2.functional.clip_control.*
Change-Id: I78dc752c3287b09f25496034e0d0d2724138010c
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2615863
Commit-Queue: Mohan Maiya <m.maiya@samsung.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
b912eec5
|
2020-11-27T11:08:41
|
|
Vulkan: Support GL_EXT_tessellation_shader.
Shader translator changes done in http://crrev.com/c/2633936
Adds a new DIRTY_BIT_PATCH_VERTICES state to Context.
Supportes state query and transform feedback.
4 test suppressions remain as follow-up fixes.
Adds a new varying packing mode for a simple Vulkan rule set.
Based on work by Mohan Maiya (m.maiya@samsung.com).
Test: dEQP-GLES31.functional.tessellation.*
Bug: angleproject:3572
Change-Id: I4cad2cca30adb754fd12c83027673906541f566a
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2568234
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Mohan Maiya <m.maiya@samsung.com>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
043fcf18
|
2021-01-07T13:23:57
|
|
Support create ANGLE EGLContext from an external EGLContext
For Android WebView, Android creates an EGLContext, EGLSurface
and FBO, and makeCurrent on them, and then calls WebView draw
function to draw the WebView content on the current EGLSurface or
binded FBO. So to use ANGLE in WebView, this CL adds a way to
create ANGLE EGLContext from an external EGLContext, and save
and restore GL state in eglMakeCurrent().
Bug: angleproject:5509
Change-Id: I874986813117f125e23e975ea1adc51ac5b3a631
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2615239
Commit-Queue: Peng Huang <penghuang@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
|
|
2ed9671a
|
2021-01-12T09:44:03
|
|
State: Provide reference to image unit binding vector
This allows iterating through the entries without creating a copy
of the vector. This was causing an assertion in FrameCapture when
deconstructing the copy, which we don't need.
RefCountObject.h (~BindingPointer): ! Assert failed in ~BindingPointer
(src/libANGLE/RefCountObject.h:93): mObject == nullptr
It also probably matches the intent of the function.
Test: Aztec Ruins MEC
Bug: angleproject:4048
Change-Id: I9588af3859b4d3edb5859530def1bb3992530403
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2622610
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Cody Northrop <cnorthrop@google.com>
|
|
39b777c6
|
2020-10-29T16:55:06
|
|
Capture/Replay: Two cleanups.
This changes from returning a vector to directly returning a
pointer to the binary data for the serialized state.
The second cleanup is to use a ContextID as a wrapped type
which simplifies the output formatting code.
Bug: angleproject:5247
Change-Id: Ieb8afdb9326a12968dd2d69c05e1ed811b93abff
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2506198
Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
7bbe497a
|
2020-10-16T14:46:45
|
|
Vulkan: Implement EXT_texture_sRGB_decode
Implement EXT_texture_sRGB_decode. This builds on the existing
functionality from EXT_texture_sRGB_override, with 2 major edge
cases:
1. sRGB_decode allows the texture state to be overridden by
sampler state, which is implemented by forcing a a texture state
sync during updateActiveTextures if a texture is bound to the same
unit as a sampler with that state
2. texelFetch calls require us to reenable decoding, regardless
of decode state. We add a new compiler pass
(FlagSamplersWithTexelFetch) to mark samplers that are used with
texelFetch in order to support this.
This change also re-enables EXT_texture_sRGB_R8, which was disabled
due to a dEQP bug that this change will bypass.
Bug: angleproject:3609
Bug: angleproject:4503
Test: dEQP.GLES31/functional_srgb_texture_decode_skip_decode_*
Test: GLES31/functional_state_query_texture_*_srgb_decode_*
Test: GLES31/functional_state_query_sampler_*_srgb_decode_*
Test: GLES31/functional_debug_negative_coverage_*_srgb_decode_*
Test: GLES31/functional_android_extension_pack_extensions_ext_texture_srgb_decode
Test: angle_end2end_tests --gtest_filter=SRGBTextureTest.*Vulkan*
Change-Id: I4a67e487dc82e2f57c8c87d4bcd8ef442b6fe220
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2359481
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
0f55e3e5
|
2020-09-11T01:15:18
|
|
Reland "Remove redundant BlendStateArray tracking"
Rebase the original CL and update capture/replay state
serialization
Original CL reviewed-on:
https://chromium-review.googlesource.com/c/angle/angle/+/2169093
Bug: angleproject:4394
Bug: chromium:1085996
Bug: chromium:1086582
Bug: chromium:1086585
Bug: chromium:1086586
Change-Id: If0fba8b6e185540aed57d22eaf0ff79ec142209e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2404442
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
9f5eb0b8
|
2020-10-05T08:18:05
|
|
Vulkan: Add OES_sample_shading extension support
Support OES_sample_shading extension if the underlying
Vulkan ICD supports sampleRateShading.
Bug: angleproject:3587
Tests: dEQP-GLES31.functional.sample_shading.*
Change-Id: I1b324c1ad3ea3b2157d3cbe0abcdf7085aa4231b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2444213
Commit-Queue: Mohan Maiya <m.maiya@samsung.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
001c7e8c
|
2020-09-21T13:25:46
|
|
Vulkan: Link PPO during draw validation
From the OpenGL ES 3.1 spec:
11.1.3.11 Validation
It is not always possible to determine at link time if a program object
can execute successfully, given that LinkProgram can not know the state
of the remainder of the pipeline. Therefore validation is done when the
first rendering command which triggers shader invocations is issued, to
determine if the set of active program objects can be executed.
For draws, this CL moves the PPO link operation to ValidateDrawStates()
to generate PPO link failures within ANGLE's validation layer, so we
fail any rendering commands during command validation.
For dispatch, PPOs are linked during Context::prepareForDispatch(),
where the PPO is converted from draw to compute, since that conversion
requires a re-link. This re-link shouldn't fail due to errors that would
have been caught during validation, since the compute shader must have
successfully linked before it can be included in the PPO in the first
place. We don't re-link when converting back to draw, since it's
possible there are validation errors (which we want to catch during
validation of the next rendering command).
Bug: angleproject:5064
Test: dEQP.GLES31/functional_separate_shader_validation_es31_*
Test: ContextNoErrorTest31.DrawWithPPO
Test: ProgramPipelineTest31.VerifyPpoLinkErrorSignalledCorrectly
Change-Id: Ibb249e893c007a83cc6b813f848a660bfa34ecb0
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2422375
Commit-Queue: Tim Van Patten <timvp@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Ian Elliott <ianelliott@google.com>
|
|
a9dcf0ea
|
2020-09-21T09:44:18
|
|
Fix early fragment tests optimization condition.
The optimization should check of "alpha to coverage" is enabled, not
just sample coverage.
Bug: angleproject:4508
Bug: angleproject:5045
Bug: b/168493024
Change-Id: I0e52ddd4c92f9a6ea8a0e7cf56db71ce9ff3c5de
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2422078
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
41c93c55
|
2020-09-01T11:34:32
|
|
Vulkan: Bug fix in atomic counter buffer count calculation
When binding a new atomic counter buffer to a slot it is
necessary to take into account the previous binding of that
slot. This rectifies a bug introduced in f7b607c63c
Bug: angleproject:3566
Test: angle_unittests.exe --gtest_filter=AtomicCounterBufferTest31.AtomicCounterBuffer*
Change-Id: If78954d27c3345e8620294a84e839058d7dd7b9a
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2388431
Commit-Queue: Mohan Maiya <m.maiya@samsung.com>
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
f7b607c6
|
2020-08-29T16:34:30
|
|
Vulkan: Optimize atomic counter buffer offset calculations
Call writeAtomicCounterBufferDriverUniformOffsets method
only if there are valid atomic counter buffers
Bug: angleproject:3566
Change-Id: I03c3fd2095e30381597bfc66acae0ccbf828d401
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2383787
Commit-Queue: Mohan Maiya <m.maiya@samsung.com>
Reviewed-by: back sept 10 - Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
4f7edbe1
|
2020-06-03T14:51:50
|
|
State: Add dirty object for active textures.
Checking sampler completeness after every sampler related
state change is inefficient. Defer sampler completeness
check to draw time.
Based on a CL by hckim.kim@samsung.com.
Bug: angleproject:4765
Tests: angle_perftests.exe --gtest_filter=TexturesBenchmark.*
Change-Id: I7e971371e40b3044ca3d5ca39bfe7fc600620c3e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2268577
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
ea3f501e
|
2020-08-18T11:13:33
|
|
Feedback Loop Redesign 3/3: Remove feedback loop tracking.
We now we detect feedback loops by tracking the Framebuffers that the
Texture is bound to. We still have the old tracking method that counts
sampler and image bindings in the code as well.
This CL removes the old front-end tracking for feedback loops. It's no
longer used by any back-ends. This removal should reduce CPU overhead
around Texture and Program binding changes. Reverts the image binding
tracking to the simpler scheme that tracks if a Texture has ever been
bound as an Image. This should practically have little or no perf
effect and we can reinstate some simpler tracking in the future if
required.
Bug: angleproject:4500
Bug: angleproject:4959
Change-Id: Idc625d6e4c519919f97a4dc72dd9c35d262706fb
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2363210
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tobin Ehlis <tobine@google.com>
Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
|
|
e689d316
|
2020-08-14T22:51:03
|
|
Vulkan: Don't end RenderPass on DS feedback loops.
Instead of always switching the Framebuffer to mask out depth/stencil
loops we now switch the RenderPass to a "read-only" depth/stencil mode.
Reduces the RenderPass count in Manhattan from 18->15. There are still
a couple extra RenderPasses inserted that we can get rid. We can merge
a few RenderPasses by retroactively changing a started RenderPass to
"read-only" when there are no prior recorded depth writes or clears.
Also adds a test to count the number of RenderPasses ANGLE generates in
DS feedback loop situaions.
Bug: angleproject:4959
Change-Id: I1855a45959655fc27ccd47a3469c1c672fc8fd9e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2357973
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
6eb7756d
|
2020-08-07T17:41:39
|
|
Vulkan: tell ContextVk when swapchain is re-created
For an app that only draws to the swapchain, if the swapchain is
recreated with a different rotation (as done by the ANGLE perf tests
when switching from Angry Birds 2 to Candy Crush), ContextVk is not
informed, and so the new rotation is ignored. Use the
subject-observer pattern to set the appropriate dirty bits.
Test: run_angle_perftests --gtest_filter=TracePerfTest.Run/vulkan_angry*:*vulkan_candy* --verbose --local-output
Bug: angleproject:4910
Bug: b/163126746
Change-Id: Ib5303e9c4095db1b3e736911f483589e40a73d0c
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2341768
Commit-Queue: Ian Elliott <ianelliott@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
|
|
48ba75ac
|
2020-08-06T15:26:53
|
|
Remove TextureCommand
TextureCommand::GenerateMipmap can be moved into gl::Command allowing us
to remove TextureCommand.
Bug: angleproject:4753
Test: CQ
Change-Id: Idc546df519e199ffd3a8b8e03b9868cd9152e9ef
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2338823
Commit-Queue: Tim Van Patten <timvp@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
|
|
81370214
|
2020-07-29T12:54:02
|
|
Pass the Command when sync'ing dirty objects
A new enum is being created that contains command types, which are then
passed to each dirty object when they are synced. This allows the
syncState() methods to perform special handling for each command type.
This change is in preparation for optimizing resolving multisample
images with glBlit, since the render pass needs to be updated before
it's ended.
Bug: angleproject:4753
Change-Id: I77701f79418d35cff689e864c8a8b47b6fca0255
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2327335
Commit-Queue: Tim Van Patten <timvp@google.com>
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
4cf2501c
|
2020-07-27T13:19:27
|
|
Add extension EGL_ANGLE_display_semaphore_share_group
For sharing semaphores globally.
Bug: angleproject:4877
Change-Id: I472e0902fd04ca8350d74e6c0ae6925ee930ccf9
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2319370
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
db88baa8
|
2020-07-23T11:12:46
|
|
Serializes GL context states and reformats frame_capture_utils
Adds the ability to serialize GL context states.
Adds serialization of GL context states to serializeContext method so
that capture replay regression testing now compares the GL context
states.
Reformats frame_capture_utils to make most serialization methods
private, except for the ones called by other classes and template
methods.
Bug: angleproject:4817
Change-Id: I2d53c88be3d503268bd6e2e5058b5fabe0644f67
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2314829
Commit-Queue: Manh Nguyen <nguyenmh@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
|
|
80d7725d
|
2020-07-15T15:14:17
|
|
Use Subject/Observer pattern for Programs/Executables in PPOs
This CL updates the frontend to use the subject/observer pattern for
Programs and ProgramExecutables in PPOs.
This allows us to remove the hack that iterated through all PPOs and
marking them all dirty when a Program is re-linked. Instead, just the
PPOs the Program is bound to are signalled, and only when the Program
is in a PPO.
Additionally the necessary PPOs are signalled when an Executable's
textures are updated, rather than iterating through all PPOs and
signalling them.
Bug: angleproject:4559
Test: CQ
Change-Id: Iaefb88c64c13259e921c8dfe95cf640247d17f85
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2300705
Commit-Queue: Tim Van Patten <timvp@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
|
|
cf63d872
|
2020-07-02T09:59:58
|
|
Vulkan: Use mipmap hint when generating mipmaps
If the application asks for GL_FASTEST, this uses VK_FILTER_NEAREST
instead of VK_FILTER_LINEAR.
Bug: angleproject:4551
Change-Id: I6c10758104bd63dd477ea853a3b0464665f371ed
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2279132
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
ec010006
|
2020-06-15T16:36:05
|
|
Revert "Remove redundant BlendStateArray tracking"
This reverts commit c746ac65e9d64aa74065ee30d7e7e810088c429c.
Reason for revert: Possible performance regression
BUG=chromium:1085996
Original change's description:
> Remove redundant BlendStateArray tracking
>
> Keep legacy BlendState for now.
>
> Bug: angleproject:4394
> Change-Id: Icba2b2f3a071d0f838a5480ff94869d35b776d94
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2169093
> Reviewed-by: Geoff Lang <geofflang@chromium.org>
> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
> Commit-Queue: Kenneth Russell <kbr@chromium.org>
TBR=geofflang@chromium.org,kbr@chromium.org,jonahr@google.com,jmadill@chromium.org,lexa.knyazev@gmail.com
# Not skipping CQ checks because original CL landed > 1 day ago.
Bug: angleproject:4394
Change-Id: Id05b382e951a7256805cffe696325b6b6d940e96
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2246719
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
c39d25ae
|
2020-06-01T12:42:33
|
|
Update State to check mExecutable
A user may be using Program Pipelines, rather than monolithic Programs,
so State should check if mExecutable is valid, rather than mProgram,
since that indicates the presence of either a PPO or a Program.
Exercising these paths requires additional tests:
SimpleStateChangeTestComputeES31PPO::DeleteImageTextureInUse()
Texture2DTestES31PPO::TexStorage()
Texture2DTestES31PPO::SingleTextureMultipleSamplers()
These new tests exposed bugs in the PPO implementation where updates to
the active Program's ProgramExecutable were not being propagated to the
Executables of the PPO's containing that Program. In these particular
cases, updates to the active samplers/images/textures were not being
copied to the PPO's Executable.
Bug: angleproject:3570
Test: end2end tests listed above
Change-Id: I297cac2d0367f180dd7fa01a1ee7ba53996867c4
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2225417
Commit-Queue: Tim Van Patten <timvp@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
29bb612e
|
2020-05-28T10:32:26
|
|
Add egl::ShareGroup class to abstract the share context group
Vulkan backend has a barrier tracker that tracks memory barrier needs of
all shared resources. Because the buffer/texture objects are shared
resources within a shared group, the tracker can not live in a context.
Putting it in a device/renderer requires locks. It fits perfectly in a
shareGroup object. The work is already done at API level to handle the
mutex lock for shared context access so that no extra lock needs to be
taken in the backend. This CL adds egl::ShareGroup class that represents
the object that are shared among all share context group. At the front
end this usually will include all the shared resource managers (not done
in this CL). The ShareGroup object is accessible from gl::State object.
This CL also adds ability for backend driver to allocate implementation
specific ShareGroupImpl object. Vulkan backend will then use it to keeps
the barrier tracker and other things that naturally fits the share group
concept.
Bug: angleproject:4664
Change-Id: Ifcd975cbdf5130022e21c41397894afc28f572e7
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2217252
Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
c746ac65
|
2020-04-27T03:55:20
|
|
Remove redundant BlendStateArray tracking
Keep legacy BlendState for now.
Bug: angleproject:4394
Change-Id: Icba2b2f3a071d0f838a5480ff94869d35b776d94
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2169093
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Commit-Queue: Kenneth Russell <kbr@chromium.org>
|
|
4f343f3e
|
2020-05-13T14:11:51
|
|
Reland "Add support for GL_CHROMIUM_texture_filtering"
This is a reland of 38780ae3921d2570316119a881adfb9520e7e296 modulo the
changes to disable VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT, as
this was causing problems. With this landed, the extension will not work
on SwiftShader until we find a way to allow this extension through the
validation layers.
Bug: b/146423360
Bug: b/154620295
Change-Id: Ie09fc507c01a47be3bb227bc78771660170ba5d3
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2199639
Commit-Queue: Antonio Maiorano <amaiorano@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
3b82fdcf
|
2020-05-12T23:44:07
|
|
Revert "Add support for GL_CHROMIUM_texture_filtering"
This reverts commit 38780ae3921d2570316119a881adfb9520e7e296.
Reason for revert:
Breaks SWANGLE-VK:
05-12 23:42:28.612 22836 22861 D libEGL : dlopen_ext from APK (libEGL_angle.so) success at 0x79f4485a10
05-12 23:42:28.617 22836 22861 D libEGL : dlopen_ext from APK (libGLESv1_CM_angle.so) success at 0x79f4485eb0
05-12 23:42:28.619 22836 22861 D libEGL : dlopen_ext from APK (libGLESv2_angle.so) success at 0x79f4485c60
05-12 23:42:28.624 14223 14223 D StatusBar: disable<e i a s b h r c s > disable2<q i n >
05-12 23:42:28.633 14014 14057 V DisplayPowerController: Brightness [0.19986142] reason changing to: 'automatic', previous reason: 'automatic [ dim ]'.
05-12 23:42:28.635 22836 22861 D vulkan : searching for layers in '/data/app/~~0AfWfBsFEO78tqKlnanevg==/org.khronos.gl_cts-NOs3SGclHqlbcqe-08gHrw==/lib/arm64'
05-12 23:42:28.635 22836 22861 D vulkan : searching for layers in '/data/app/~~0AfWfBsFEO78tqKlnanevg==/org.khronos.gl_cts-NOs3SGclHqlbcqe-08gHrw==/base.apk!/lib/arm64-v8a'
05-12 23:42:28.632 22836 22836 W .khronos.gl_cts: type=1400 audit(0.0:218): avc: denied { ptrace } for scontext=u:r:zygote:s0 tcontext=u:r:untrusted_app_25:s0:c512,c768 tclass=process permissive=0 b/77925912 app=org.khronos.gl_cts
05-12 23:42:28.636 14014 14034 I EventSequenceValidator: Transition from ACTIVITY_LAUNCHED to ACTIVITY_FINISHED
05-12 23:42:28.637 22836 22861 F SwiftShader: external/swiftshader/src/Vulkan/libVulkan.cpp:425 vkCreateInstance TRACE_ASSERT: pCreateInfo->pNext sType = 1000247000
--------- beginning of crash
05-12 23:42:28.637 22836 22861 F libc : Fatal signal 6 (SIGABRT), code -1 (SI_QUEUE) in tid 22861 (.khronos.gl_cts), pid 22836 (.khronos.gl_cts)
Original change's description:
> Add support for GL_CHROMIUM_texture_filtering
>
> Chromium enables a custom extension, GL_CHROMIUM_texture_filtering, when
> using SwiftShaderGL, to enable high precision filtering. This change
> makes it so ANGLE also handles this same extension when using the
> SwiftShaderVK backend, by enabling the new
> VK_GOOGLE_sampler_filtering_precision custom extension.
>
> Bug: b/146423360
> Bug: b/154620295
> Change-Id: I69cafc1ccf5970a3d220ac7e13ec3c8fdd4a9643
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2185822
> Commit-Queue: Antonio Maiorano <amaiorano@google.com>
> Commit-Queue: Jamie Madill <jmadill@chromium.org>
> Reviewed-by: Jamie Madill <jmadill@chromium.org>
TBR=geofflang@chromium.org,jmadill@chromium.org,amaiorano@google.com
# Not skipping CQ checks because original CL landed > 1 day ago.
Bug: b/146423360, b/154620295
Change-Id: I803d7a7baac81cf178b59c4bf2789346ec1d3f87
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2197168
Reviewed-by: Tim Van Patten <timvp@google.com>
Commit-Queue: Tim Van Patten <timvp@google.com>
|
|
38780ae3
|
2020-05-06T16:05:02
|
|
Add support for GL_CHROMIUM_texture_filtering
Chromium enables a custom extension, GL_CHROMIUM_texture_filtering, when
using SwiftShaderGL, to enable high precision filtering. This change
makes it so ANGLE also handles this same extension when using the
SwiftShaderVK backend, by enabling the new
VK_GOOGLE_sampler_filtering_precision custom extension.
Bug: b/146423360
Bug: b/154620295
Change-Id: I69cafc1ccf5970a3d220ac7e13ec3c8fdd4a9643
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2185822
Commit-Queue: Antonio Maiorano <amaiorano@google.com>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
12b6a82e
|
2020-04-03T18:31:22
|
|
No-Op draws when no active VS and/or FS is present
Re-land CL with WebGL fixes:
This required some extra pointer checking during validation to handle
the fact that a Program and/or ProgramExecutable may not be present when
attempting to draw. This isn't an error, just undefined behavior, which
we (eventually) treat as a no-op.
According to the OpenGL ES 3.1 spec:
7.3. PROGRAM OBJECTS
If there is no active program for the vertex or fragment shader
stages, the results of vertex and fragment shader execution will
respectively be undefined. However, this is not an error.
To handle this, if no VS or FS is present in the active Program/PPO,
we will no-op the draw command.
Bug: angleproject:3570
Test: KHR-GLES31.core.sepshaderobjs.StateInteraction
Change-Id: I70d688bf344a78cf3b4fd66c995ae03ce4b9b807
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2185156
Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Tim Van Patten <timvp@google.com>
|
|
57d95828
|
2020-04-30T17:35:50
|
|
Revert "Add type for attribute locations."
This reverts commit 9349c14344b2d1fd6bc357063b602bc2626c140f
and commit d43b057435e6c9e3194dd20627681ffca0c0808e.
It's no longer needed after we bind attribute locations before link.
Original CL message:
This will allow the capture/replay tool to easily intercept and label
attribute locations for remapping.
There's some inconsistency in implementation in the GL desktop front-
end. This is a quick fix and the full implementation is left for when
we implement the full desktop GL API set.
Bug: angleproject:4598
Change-Id: Ic510159d4d1982eff41560503cabf983a1be0381
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2174076
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
9349c143
|
2020-04-29T16:36:17
|
|
Add type for attribute locations.
This will allow the capture/replay tool to easily intercept and label
attribute locations for remapping.
There's some inconsistency in implementation in the GL desktop front-
end. This is a quick fix and the full implementation is left for when
we implement the full desktop GL API set.
Bug: angleproject:4598
Change-Id: Ibf11bcb8669d27265ea376494a2e3124825cf3be
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2171933
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
|
|
6193fd69
|
2020-03-07T21:19:05
|
|
OpenGL: Implement OES_draw_buffers_indexed
OpenGL state sync issues as few GL commands as possible to update the
blend state regardless of an application input.
Enhanced ClearTestES3.MaskedIndexedClearMultipleAttachments
regression test.
Disabled OES_draw_buffers_indexed on Windows/AMD/OpenGL.
Bug: angleproject:4394
Change-Id: I244ac2975678bc559634152cf4eb997d9dbe83d0
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2145874
Commit-Queue: Kenneth Russell <kbr@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
dadd1986
|
2020-04-21T01:50:00
|
|
Implement GL_APPLE_clip_distance
- Built-in variable gl_ClipDistance has been added to compiler.
- Desktop GL: gl_ClipDistance is supported since GL 3.0. Enable/Disable
each gl_ClipDistances[i] works out of the box via glEnable().
- Vulkan/Metal: Use uniform variable to control writing to each
gl_ClipDistance. One bit flag controls one element in the gl_ClipDistance
array. The writing to the disabled element in vertex shader will be
ignored, and turned into zero assignment instead.
- Direct3D/Mobile GL: Not implemented yet.
- Added ClipDistanceTest to gl_tests and compiler unittests.
- GL_APPLE_clip_distance is a subset of GL_EXT_clip_cull_distance, so
GL_EXT_clip_cull_distance could be implemented in future if needed.
Bug: angleproject:4452
Change-Id: I571ac8b56826989808a680226a04bec4cf59988e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2084324
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
dee4d7a5
|
2020-04-10T10:22:56
|
|
Vulkan: Early fragment tests optimization
Checks if early fragment tests as an optimization is feasible and enable
it if we can. In the link time, if context state diagrees with
optimization (in rare case), then remove the
ExecutionModeEarlyFragmentTests sprv op code.
Bug: angleproject:4508
Change-Id: Ifbb06c0ffb050a9f3ddb16ab50362e908b4b9cf6
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2136490
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
|
|
405f8e7b
|
2020-02-24T17:38:10
|
|
Vulkan: Support Program Pipeline Objects
Add support for PPOs to the Vulkan back end.
Bug: angleproject:3570
Change-Id: I5403456929847c185467b008d810f31ecfcb60cc
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2072652
Commit-Queue: Tim Van Patten <timvp@google.com>
Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
|
|
c9c4e4ed
|
2020-04-02T10:29:52
|
|
Track rendering feedback loops by-context.
This fixes an issue where feedback loops detection would trigger false
positives based on texture use in multiple contexts.
1) there are two contexts, C1 and C2, sharing resources
2) in C1, there is a texture T bound to GL_TEXTURE_2D, and a program in
use that will sample C1
3) in C2, a framebuffer is created and T is bound to it
This fix indexes each set of active bindings in an object by ContextID.
We can potentially redo this solution in the future if this proves to
have too much tracking overhead.
Includes a test writen by Ken Russell.
Bug: angleproject:4517
Change-Id: I67012e68947c42d863dca193972576c82d5f3712
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2134406
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Kenneth Russell <kbr@chromium.org>
|
|
1cc49bb2
|
2020-04-02T11:57:07
|
|
Squash State::mContext and State::mID.
These were both id values for the context. This CL consolidates to the
monotonically increasing ID since it is both safer and easier to debug.
Makes life easier when indexing feedback loops by context ID.
Bug: angleproject:4517
Change-Id: I28b40fed4e6e68ea72742f7defde5f8638f4cd47
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2134408
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
Commit-Queue: Courtney Goeltzenleuchter <courtneygo@google.com>
|
|
68083e89
|
2020-03-04T15:55:53
|
|
Vulkan: Move cached samplers/images and has*() to ProgramExecutable
The active samplers and images are being moved from Program into
ProgramExecutable to unify interacting with them for Programs and
ProgramPipelines
Also, create some helper functions for gl::Program that ProgramExecutable can
call to make it easier for ProgramPipeline to respond to similar
queries for each of the Programs in the ProgramPipeline.
Bug: angleproject:3570
Change-Id: I0b37f1a379e56b9659d82d92f6d7a546beee11cd
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2087648
Commit-Queue: Tim Van Patten <timvp@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
7e0699a2
|
2020-02-05T17:04:06
|
|
Create the ProgramExecutable Class
The ProgramExecutable class is being created to collect data structures
that are common to both Programs and ProgramPipelines, as well as any
shared functions. This allows callers to request the current
ProgramExecutable from the State and make
Program-/ProgramPipeline-specific queries without needing to know
exactly which responded. This will also allow the necessary data
structures to only be populated and stored within the ProgramExecutable
when necessary and reused as often as necessary.
Bug: angleproject:3570
Change-Id: I101f08ab03421894667b4a426a04d2147489f0e1
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2040512
Commit-Queue: Tim Van Patten <timvp@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
b91d2630
|
2020-03-24T13:17:58
|
|
Speculative fix for assertion failure with samplers.
This was crashing for example here:
https://chromium-swarm.appspot.com/task?id=4b174a9710848410
https://chromium-swarm.appspot.com/task?id=4b214baec2ee7e10
With this stack:
libglesv2!gl::TextureState::isBoundAsSamplerTexture
libglesv2!gl::Texture::onUnbindAsSamplerTexture
libglesv2!gl::State::unsetActiveTexture+0x9
libglesv2!gl::State::updateActiveTextureState+0x2d2
libglesv2!gl::State::updateActiveTexture+0x3aa
libglesv2!gl::State::setSamplerTexture+0x4a1
libglesv2!gl::Context::bindTexture+0x1ab
libglesv2!gl::BindTexture+0x99
chrome!GrGLFunction+0x1f
chrome!GrGLGpu::bindTexture+0x1a0
chrome!GrGLProgram::bindTextures+0x1b9
chrome!GrGLOpsRenderPass::onBindTextures+0x50
chrome!GrOpsRenderPass::bindTextures+0x106
chrome!GrOpFlushState::bindTextures+0xf
chrome!`anonymous namespace'::FillRectOp::onExecute+0xd3
It's unclear how we could end up with a Texture bound that doesn't go
through the normal setter functions. I did see a potential hole where
textures might not get an unbind call when a Context is torn down. This
could lead to bugs in multi-context situations.
This protects the set/unset functions in a helper class to ensure we
always call onBind/onUnbind and forces the destructor to call unbind.
Bug: angleproject:4490
Change-Id: Ied64e02bbe3a37efcab6cbdd4bf2d1b6dcb8b3ac
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2118254
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
|
|
07467b4a
|
2020-03-20T10:40:56
|
|
Remove GL_CHROMIUM_path_rendering
Bug: chromium:1063193
Bug: angleproject:4270
Change-Id: I35b24b7d8d892181955e49dd2495655bc57cb0df
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2112275
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
|
|
b1eb44bf
|
2020-03-18T15:33:13
|
|
Track if a Texture is bound as a sampler.
This will more easily allow us to detect rendering feedback loops.
We'll need to support feedback loops to enable Manhattan.
Bug: angleproject:4490
Change-Id: I442deebd89dcf0139411688eaa204c5e5b2c2799
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2109334
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
|
|
c55fbc40
|
2020-03-01T16:23:05
|
|
Capture/Replay: Fill out more ES 3.0 state in mid-execution capture
Test: Manhattan mid-execution capture working
Bug: angleproject:3662
Bug: angleproject:4091
Change-Id: Id7f1a3f667229e4d5abedb3ada25d44db250605a
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2080592
Commit-Queue: Cody Northrop <cnorthrop@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
e682bc57
|
2020-03-01T16:19:32
|
|
Capture/Replay: Add Sampler Object support to mid-execution capture
Test: Manhattan mid-execution capture working
Bug: angleproject:3662
Bug: angleproject:4091
Change-Id: Iafa528e2a25efe1c49eb49ecc429eac8f25c162c
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2080591
Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Cody Northrop <cnorthrop@google.com>
|
|
605ab763
|
2020-02-24T19:43:32
|
|
D3D11: Implement OES_draw_buffers_indexed
Existing CONSTANT_COLOR/CONSTANT_ALPHA limitation was generalized to independent blend states with draw call invalidation and a new end2end test. dEQP tests that are incompatible with this limitation result in INVALID_OPERATION and are marked as FAIL.
D3D11 renderer always normalizes and deduplicates requested blend states based on their enabled features and bound framebuffer.
Bug: angleproject:4394
Change-Id: I284796e18be71de1b5bfb087d36f6a45be4c3f70
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2070575
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
54bd0005
|
2020-03-01T16:13:23
|
|
Capture/Replay: Add Query Object support to mid-execution capture
Test: Manhattan mid-execution capture working
Bug: angleproject:3662
Bug: angleproject:4091
Change-Id: I3e0d0fb1692b1fda08fd057d528f70aa5e50ef1c
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2070900
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
Commit-Queue: Cody Northrop <cnorthrop@google.com>
|
|
b8c6521a
|
2020-02-14T14:23:08
|
|
Reland "Move sampleAlphaToCoverage out of blendState"
This is a reland of f6e73131c528b1317067624bc71c3ce41a48f9aa
Aligned BlendStateKey fields
Original change's description:
> Move sampleAlphaToCoverage out of blendState
>
> This is the second step towards exposing OES_draw_buffers_indexed (that defines independent blend state for each draw buffer). This flag is global in all graphics APIs, however D3D11 technically puts it in the blend state.
>
> D3D11: BlendStateKey was extended to keep existing D3D11 state caching semantics.
>
> D3D9: a comment was added explaining why this feature was never implemented there.
>
> Bug: angleproject:4394
> Change-Id: Ie6a294eeb6fcf4c868a1f1001c4f7efd61692ccd
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2057063
> Reviewed-by: Jamie Madill <jmadill@chromium.org>
> Reviewed-by: Geoff Lang <geofflang@chromium.org>
> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Bug: angleproject:4394
Change-Id: Ia7aed863f0f9f6066daf1b02ecade3256f494062
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2066698
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
bd4e756a
|
2020-02-17T09:49:45
|
|
Const-ify the validation layer.
Enforces that the validation layers should be working pretty much read-
only with the exeption of updating caches. Requires a few tricks:
- updates EP code generation to add 'const' to pointer parameters
- enables a kludge const_cast to enable the robust query extension
- makes some members of Framebuffer mutable to work around syncState
- makes 'is' queries and other methods in Context/State const
Will allow us to more safely expose the no_error extension.
Bug: angleproject:1280
Change-Id: Id9756757854c9e68fc096ecec8d93759fbe6b3a4
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2060689
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
38bb9fdf
|
2020-02-19T13:02:00
|
|
Revert "Move sampleAlphaToCoverage out of blendState"
This reverts commit f6e73131c528b1317067624bc71c3ce41a48f9aa.
Reason for revert: Crashes on Win10 FYI x64 Debug (NVIDIA) and Win7 FYI Debug (AMD) in the webgl CTS
Original change's description:
> Move sampleAlphaToCoverage out of blendState
>
> This is the second step towards exposing OES_draw_buffers_indexed (that defines independent blend state for each draw buffer). This flag is global in all graphics APIs, however D3D11 technically puts it in the blend state.
>
> D3D11: BlendStateKey was extended to keep existing D3D11 state caching semantics.
>
> D3D9: a comment was added explaining why this feature was never implemented there.
>
> Bug: angleproject:4394
> Change-Id: Ie6a294eeb6fcf4c868a1f1001c4f7efd61692ccd
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2057063
> Reviewed-by: Jamie Madill <jmadill@chromium.org>
> Reviewed-by: Geoff Lang <geofflang@chromium.org>
> Commit-Queue: Geoff Lang <geofflang@chromium.org>
TBR=geofflang@chromium.org,jmadill@chromium.org,lexa.knyazev@gmail.com
Change-Id: I650624b5dfb7f2777c316906b9145a411243f42f
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: angleproject:4394
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2062605
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
|
|
f6e73131
|
2020-02-14T14:23:08
|
|
Move sampleAlphaToCoverage out of blendState
This is the second step towards exposing OES_draw_buffers_indexed (that defines independent blend state for each draw buffer). This flag is global in all graphics APIs, however D3D11 technically puts it in the blend state.
D3D11: BlendStateKey was extended to keep existing D3D11 state caching semantics.
D3D9: a comment was added explaining why this feature was never implemented there.
Bug: angleproject:4394
Change-Id: Ie6a294eeb6fcf4c868a1f1001c4f7efd61692ccd
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2057063
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
|
|
caf7becc
|
2020-02-11T19:05:11
|
|
Move dither from blend state to rasterizer state
Dither is technically not a part of blend state so it was removed from there as a first step towards exposing OES_draw_buffers_indexed (that defines independent blend state for each draw buffer).
Rasterizer state seems to be the closest (although also not accurate) place for it to keep code changes to a minimum. ANGLE's D3D11, Vulkan, and Metal renderers ignore dithering altogether.
Bug: angleproject:4394
Change-Id: Ib138624b9218851d18cd63e2033e8e8ac8ca71d9
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2050464
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
52ef28dc
|
2020-01-24T09:55:01
|
|
Vulkan: Update active textures before setupDraw().
The linear command graph prohibits rendering outside the render pass
*after* we begin a renderpass. The prior code would render outside a
render pass (changing image layouts) even after a RenderPass was
started in setupDraw(). The new code changes the image layouts in
ContextVk::syncState so we no longer need to "prepend" image layout
changes after we started a RenderPass. Now we record layout changes
followed by the draw calls or other renderpass ops.
Bug: angleproject:4029
Bug: angleproject:3539
Change-Id: I420858907ac38f995400c1b566c856d966a4e979
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2015940
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Tobin Ehlis <tobine@google.com>
|
|
564eb6f2
|
2019-11-22T16:46:02
|
|
Implement EGL_IMG_context_priority
Change RendererVk to have 3 VkQueues instead of one.
Each queue has a priority. To match extension: Low, Med, High.
gl::Context contains priority.
ContextVk contains a reference to one of the queues.
Every call to vulkan that uses queue, uses the associated context queue.
Bug: angleproject:3962
Change-Id: Ibd913a07a81c77bd975921d6dbae6a222842e88b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1978154
Commit-Queue: Jeff Vigil <j.vigil@samsung.com>
Commit-Queue: Mohan Maiya <m.maiya@samsung.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
52cb2a1a
|
2020-01-07T14:06:25
|
|
Allow SamplerVideoWEBGL can sampler compatible texture type
For current WEBGL_video_image implementation, VideoImage texture type translates to its
native texture type in blink layer.
A refactory for this implementation is required but is complicated and need much time.
Currently, we need a workaround in ANGLE to support this extension.
Current end2end tests can monitor this workaround well.
BUG=chromium:776222, angleproject:3889
Change-Id: I864bc2734cfffc8c5aea6166466767e3fb31c1c7
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1989864
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
27db2458
|
2019-10-03T13:46:28
|
|
Optimize disabling ARB_texture_rectangle
In https://crrev.com/c/1838418 I added the ability to disable
ARB_texture_rectangle so that we can use it in the WebGL implementation
but disable it when compiling user shaders. Unfortunately disabling
and re-enabling the extension causes the shader translator to be
reinitialized which turns out to be more expensive than the actual
work of shader translation, at least for small shaders. It's slow enough
to cause timeouts in WebKit's WebGL conformance test runs.
This introduces an alternate method of disabling ARB_texture_rectangle
in the translator which is much faster because it avoids reinitializing
the translator.
Bug: angleproject:3956
Change-Id: I5d31b683ff19a59bdfd289cfd3c609f64ef5e25b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1991969
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: James Darpinian <jdarpinian@chromium.org>
|
|
5c0e6e52
|
2019-11-08T17:05:38
|
|
Capture/Replay: Implement more state for mid-execution replay.
Includes much more state serialization. Notably Vertex Arrays were
missing as well as multiple GL render states. Also fixes many
serialization bugs. For example, we would not be using the correct
client array and pack/unpack state in the mid-execution capture. Also
depth/stencil attachments were missing from the capture.
Also fixes the replay sample to work with non-zero starting frames.
With these fixes we can run mid-execution replay of the T-Rex demo.
Bug: angleproject:3611
Change-Id: I6945eb9b30a5137be996956b43f074a0a750b333
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1895112
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|