|
b96f3abd
|
2023-02-03T13:12:29
|
|
Vulkan: Make Context::mLastSubmittedSerial to QueueSerial
Right now Context::mLastSubmittedSerial and mLastFlushedSerial are all
Serial type instead of QueueSerial. Most places we do need QueueSerial.
This CL changes them to QueueSerial type. This simplifies and improves
code readability. No actual functional change is expected with this CL.
Bug: b/267806287
Change-Id: Ib00cae2637ee9ed95e5fc00060c63017b04e26c5
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4219944
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
53b65950
|
2023-01-27T13:17:13
|
|
Vulkan: Fold ThreadSafeCommandProcessor back to CommandProcessor
In earlier CL crrev.com/c/4156637, I added ThreadSafeCommandProcessor to
wrap CommandProcessor public APIs with a mutex lock. This CL folds
ThreadSafeCommandProcessor back into CommandProcessor so that we only
have one class to deal with. CommandProcessor itself is thread safe
already, we really do not need mutex for that. The only place that might
still need the mutex in ThreadSafeCommandProcessor is that while we wait
for mTasks to become empty, previously the lock in
ThreadSafeCommandProcessor will block context from submitting new work
to mTasks. In order to keep that behavior, mSubmissionMutex is added
just for this purpose.
Bug: b/266605181
Change-Id: If8844a3000712bf4fcf89a4f8098b7a745a30e99
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4198480
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
6fb2da90
|
2023-01-30T17:43:59
|
|
Do not use std::locale in Vulkan memory allocation tracker
As Chromium is built without RTTI, but it may be running on top of
system libstdc++ built with RTTI, std::locale should not be used
with an inherited facet. This will crash trying to dynamic_cast
the facet.
This change also avoids having different formats depending on the
locale. If, in the future, a format is wanted for improving log
readability, then a custom helper should be added, instead of
using std::locale.
Bug: chromium:957519
Change-Id: Id836d6df63448c7d62845d3f47e2acb9b254ddf3
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4202875
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
0cdecfad
|
2023-01-27T10:38:31
|
|
Vulkan: Merge ThreadSafeCommandQueue back into CommandQueue
In earlier CL crrev.com/c/4156637, I added ThreadSafeCommandQueue to
wrap CommandQueue public APIs with a mutex lock. Then in the following
CLs we have switched CommandProcessor and RendererVk to use
ThreadSafeCommandQueue. Now CommandQueue class is only been used by
ThreadSafeCommandQueue. This CL folds ThreadSafeCommandQueue back into
CommandQueue so that we only have one CommandQueue class to deal with.
This CL groups the CommandQueue's public and private APIs into separate
groups.
Bug: b/266605181
Change-Id: I94c6c949e0ed14583c38284a216f7a3e2010e98d
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4118856
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
54f44639
|
2023-01-17T13:07:57
|
|
Vulkan: Make RendererVk only have one CommandQueue object
Right now RendererVk have two CommandQueue objects: one owned by
RendererVk (used for synchronous submission) and another owned by
CommandProcessor (used for async submission). Since async submission is
a feature flag that will never change once RendererVk initialized, we
are only using one CommandQueue. This CL changes CommandProcessor's
mCommandQueue to a pointer that points to RendererVk::mCommandQueue.
The added benefit of this is that it allows me to remove bunch of
CommandQueue property query APIs from CommandProcessor since these
property has nothing to do with "command". CommandProcessor class is
actually reduced to command processing.
Bug: b/266605181
Change-Id: I1f33db14ee29e2c0aa7850de98b2d7c3823126b6
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4174874
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
00b94fda
|
2023-01-17T11:12:14
|
|
Vulkan: CommandProcessor::WaitForWorkComplete only if needed
When async command queue enabled, there is another queue (mTask) in
CommandProcessor object. When we wait for a queueSerial to finish, right
now we always flush everything from CommandProcessor (i.e, wait until
mTask is empty), even though the work in mTask is unrelated to this
queueSerial that waiting for. With the work of previous CLs, now we can
actually wait for mTask to empty only if there is still pending
submission of queueSerial.
This CL also renames ComandProcessor::ensureNoPendingWork to
waitForQueueSerialToBeSubmitted to reflect what it does (it does not
wait for GPU to finish).
Bug: b/261098465
Change-Id: I0114dadd86a84f75bf8b71735f0adc0dbb9b6bf2
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4174873
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
6a5e61cd
|
2023-01-11T16:49:52
|
|
Vulkan: Make ThreadSafeCommandQueue's wait without lock
This CL makes all wait functions in ThreadSafeCommandQueue class to wait
without holding the lock, so that other contexts can still submitting
commands or make calls into CommandQueue. To make this work,
Shared<Fence> has been refactored into SharedFence class which is RAII
and manages refcounted VkFence object. It's copy constructor simply adds
a reference to the underline fence object, so that the local copy of a
SharedFence object guarantees underline vkfence will remain valid. RAII
makes sure that local copy of SharedFence will not leak refcount. The
ThreadSafeCommandQueue wait functions makes a local copy of SharedFence
so that it can unlock and wait and then relock.
This CL also adds a new test for this:
EGLMultiContextTest.ThreadBCanSubmitWhileThreadAWaiting
Bug: b/261106868
Change-Id: I96ecfa1d9f7a3dc646ff2287d789313a9f8fb75d
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4159871
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
|
|
13aee254
|
2023-01-13T14:01:56
|
|
Move memory allocation info vars to separate class
* Moved the RendererVk variables related to memory allocation to a new
class, MemoryAllocationTracker.
* Note: The existing variable "mMemoryAllocationTracker" has been
renamed to "mMemoryAllocationRecord" to avoid confusion.
* Added a custom locale using the class MemoryLogNumberFormat, since
the original method did not include formatting on some Android
devices.
Bug: b/262029018
Change-Id: I23acf37119da02e6430de6b5d360307982ecf9bb
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4174738
Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Ivan Neulander <ineula@google.com>
Reviewed-by: Charlie Lao <cclao@google.com>
|
|
77d19e39
|
2023-01-11T14:03:18
|
|
Vulkan: Add ThreadSafeCommandQueue class
This is preparation CL for the next few CLs. Instead of having
RendererVk owns mCommandQueueMutex and takes lock before calling
CommandQueue APIs, this CL creates a ThreadSafeCommandQueue wrapper
class that wraps CommandQueue class' public APIs with a mMutex. Right
now this is purely a mechanical change, expecting no real functional or
behavior differences. But in the future CLs, we are going to implement
some APIs without holding lock while doing the wait. This also
conceptually cleaner that a mutex lock should protect data not methods.
Because of this, this CL also adds OneOffCommandPool class to wrap
around all oneoff command buffers with its own lock. The same change
also applied to CommandProcessor class by adding a
ThreadSafeCommandProcessor class (this will be removed in later CLs).
This CL also removes CommandQueueInterface base class and made all these
virtual functions no longer virtual, thus reduces the overhead associate
with calling virtual functions.
Bug: b/261106868
Change-Id: Ifdc0085cef7f00d840b4ef3fa602172fed3c0fb1
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4156637
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
ffbb65bc
|
2022-11-28T13:31:48
|
|
Vulkan: Use VK_EXT_swapchain_maintenance1 for present fences
Bug: angleproject:7878
Change-Id: Ic3a43c663789a6489cff261848d9ad4a408ca53a
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4088905
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Ian Elliott <ianelliott@google.com>
|
|
48e40ef6
|
2023-01-06T13:35:21
|
|
Add per-heap memory allocation trackers
* For each member of MemoryAllocationType, we now have a per-heap
counter to keep track of the allocation size in each available heap.
* mActivePerHeapMemoryAllocationsSize
* mActivePerHeapMemoryAllocationsCount (debug mode only)
* Added the memory type index to onMemoryAlloc() and onMemoryDealloc()
as an input. It can then be used to determine the used memory heap
index for that allocation using the memory properties defined in the
renderer.
* checkForCurrentMemoryAllocations() will now log the heap index of the
current memory allocations in debug mode and during an OOM crash.
* logPendingMemoryAllocation() will now log the heap index of the
pending allocation during an OOM crash.
* Renamed constexpr values used for tracking for more consistency.
* kTrackMemoryAllocation -> kTrackMemoryAllocationSizes
* kDebugMemoryAllocationLogs -> kTrackMemoryAllocationDebug
Bug: b/262029018
Change-Id: I178a3556b3107edc0c72c6b23ea2f2d6b12da947
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4149431
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Reviewed-by: Ivan Neulander <ineula@google.com>
|
|
2550fe9a
|
2023-01-14T21:21:24
|
|
Vulkan: Drop usage of VK_EXT_debug_report
This extension has been deprecated for 6 years in favor of
VK_EXT_debug_utils.
Bug: angleproject:7959
Change-Id: I51923a6821a6a18854ef94e0ca85c328bc8c6da5
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4167833
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
301ed545
|
2022-12-20T20:16:22
|
|
Vulkan: Pass context to layout getters
In preparation for a change that optionally uses read/write
depth/stencil layouts. Context is used to test for the
supportsMixedReadWriteDepthStencilLayouts feature to know whether those
layouts are supported or that a fallback must be chosen.
Bug: angleproject:7899
Bug: b/192477489
Change-Id: I1453dc9d060453a3806ad0f261b94368fe01fb29
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4116735
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
d6dea33b
|
2022-12-19T13:39:34
|
|
Vulkan: Remove CommandQueue::mGarbageQueue
With recent work of per active context queue serial, mGarbageQueue
behaves almost identical to normal mSharedGarbage now. This CL removed
mGarbageQueue and added garbage into Remove mSharedGarbage instead.
Bug: b/263166501
Change-Id: I6bce47b4535283e7bd0f0c8823b9629cc25f9d94
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4117712
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
b227cf2f
|
2022-12-19T12:43:37
|
|
Make pending memory allocation type atomic
* This is to prevent TSAN failures due to data race in
setPendingMemoryAlloc().
Bug: b/262029018
Change-Id: I5f2f13ecbe762102692bb910a5baa5b25fa42abe
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4115479
Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
|
|
cd540095
|
2022-12-12T13:13:14
|
|
Vulkan: Add memory log at allocation error
* Added logging memory allocation information in handleError() in the
event of an error from ANGLE_VK_TRY.
* Used for the handleError() in ContextVk.
* Updated the name and message of the function to log allocations.
* checkForCurrentMemoryAllocations()
* Added logging memory heap stats, including budget and usage.
* logMemoryHeapStats()
* In the renderer, added the feature flag indicating whether the
platform supports the memory budget extension.
* Uses VK_EXT_memory_budget.
* Added the enum class MemoryLogSeverity, which is used to select
the severity level of the memory log.
* Added logging pending memory allocation information.
* logPendingMemoryAllocation()
* If the last unsuccessful memory allocation was unsuccessful, its
information will be added to the log.
Bug: b/262029018
Change-Id: I97343c1553936aed23d763f3e0c00d495f9ee810
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4089531
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Reviewed-by: Kaiyi Li <kaiyili@google.com>
|
|
ea36cf1c
|
2022-12-19T09:55:45
|
|
Vulkan: Feature for VK_EXT_rasterization_order_attachment_access
This change just adds the feature. A follow up change will actually
start using the extension.
Bug: angleproject:7899
Bug: b/192477489
Change-Id: I19c078ebe57a7819b3aa3e95d4436cefa34ba85b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4113912
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
|
|
684ff60b
|
2022-06-21T10:52:31
|
|
Vulkan: Add shared ring buffer cmd alloc feature
* Added RingBufferAllocator.cpp with implementation.
* Main classes:
* RingBufferAllocator (fast allocation with bulk deallocation)
* SharedRingBufferAllocator (wrapper to help with shared use and
multiple threads)
* Implemented "angle_enable_vulkan_shared_ring_buffer_cmd_alloc"
feature. (Disabled by default)
* Details (from the original CL)
* The angle::PoolAllocator replaced with
angle::RingBufferAllocator.
* Before, there was separate angle::PoolAllocator per each
CommandBufferHelper. Now, a single angle::RingBufferAllocator
is shared between multiple CommandBufferHelper objects.
* Commands data from multiple CommandBufferHelpers is
tightly packed without fragmentation.
* Significantly less memory overhead, observed with enabled
async queue.
* Moved the parts of the code related to the allocators into the
classes in the new AllocatorHelperPool and AllocatorHelperRing files
for better management. The allocator can be switched by changing the
following BUILD flag:
`angle_enable_vulkan_shared_ring_buffer_cmd_alloc`
* It is connected to the following macro:
ANGLE_ENABLE_VULKAN_SHARED_RING_BUFFER_CMD_ALLOC
* The two main allocator classes in each file are aliased as:
* SecondaryCommandBlockAllocator (in CommandBufferHelper objects)
* SecondaryCommandBlockPool (in SecondaryCommandBuffer)
* Also added placeholder functions for VulkanSecondaryCommandBuffer.
* Added descriptions regarding the two allocators.
* renderer/vulkan/doc/Allocators.md
Credit: Original CL authored by Igor Nazarov <i.nazarov@samsung.com>
Bug: angleproject:6401
Bug: b/256666069
Change-Id: I0f24793eef6334bf4ff8e327b9665338807dad37
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3715968
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
|
|
702018d2
|
2022-12-08T13:29:24
|
|
Vulkan: Make PipelineHelper go through normal collectGarbage
Right now there are two different type of garbages. Objects like buffer
or VkImage that can be used by different contexts and are GPU tracked as
they are been used. These objects goes to RendererVk::mSharedGarbage.
The one time use objects or objects are not been tracked as they are
been accessed, they add to the context's garbage list and their mUse
gets updated when commands gets submitted. With new per active context
queue serial, the update of mUse can be immediate and low cost ( write
to an entry in the array), so there really isn't a good need to keep
two garbage list. This CL only deals with PipelineHelper object that
makes it goes through general collectGarbage code path instead of
ContextVk::mCurrentGarabge, since the PipelineHelper object is already
mUse tracked properly.
Bug: angleproject:7862
Change-Id: Ie77229683828590546f06938add057cf5610835b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4089984
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
|
|
1193b664
|
2022-10-11T01:00:40
|
|
Vulkan: Use VK_EXT_pipeline_protected_access
This extension allows pipelines to be restricted to protected or
unprotected command buffers only.
Bug: angleproject:7714
Change-Id: Id07be4c2ffd7ca19b8b4a2a869828bc11e89e467
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3943535
Reviewed-by: Charlie Lao <cclao@google.com>
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
|
|
ca263d4a
|
2022-11-23T12:11:49
|
|
Vulkan: Remove UsedInRunningCommands
The only difference of UsedInRunningCommands() and hasUnfinishedUse() is
the latter excludes the case where it has not submitted yet. But all
usages are already checked if it has been submitted or not. This CL
removes UsedInRunningCommands and uses hasUnfinishedUse instead.
Bug: b/255414841
Change-Id: I94ef0b63a0c888219cffcdfcecfa0a095fee616b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4053262
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
2d87551d
|
2022-12-05T10:47:40
|
|
Vulkan: Make mLargestAllocatedIndex atomic
TSAN is complaining mLargestAllocatedIndex not thread safe. This CL
makes it atomic and make it mean " the largest queue index we have ever
allocated/seen" so that it will be thread safe. It is impossible to use
a queueIndex before it been allocated. But it is still possible that
some mUse still referencing a queueIndex after it is been released. The
only downside is that we may get into slightly less optimal code path
for GetBatchCountUpToSerials if we ever get into more than 64 queueIndex
and then get bellow 64 again, but that should not a real concern.
Bug: angleproject:7860
Change-Id: I4c99bae24e9d72298253e43f8d108444a8f46ebc
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4080590
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
58d7ace2
|
2022-11-22T16:08:07
|
|
Vulkan: Add memory allocation log support in debug
* Added a memory tracker to the renderer object to keep track of the
memory allocations and deallocations in more detail.
* This feature is used for debugging only.
* To enable it, set angle_enable_memory_alloc_logging=true in GN args
(added in renderer/vulkan/BUILD).
* It is related to ANGLE_ENABLE_MEMORY_ALLOC_LOGGING in the code.
* The tracker are updated in the memory allocation tracking functions
if the feature is enabled. (The counter is always updated, even if
the feature is disabled.)
* At the end of a RendererVk object, it checks for and logs any
remaining allocated memory from MemoryAllocationType members.
* The data is stored in the map object "mMemoryAllocationTracker".
The key used for it is currently of type angle::BacktraceInfo.
* If angle_enable_unwind_backtrace_support is disabled, or not on
Android, the key is an empty object.
* MemoryAllocInfoMapKey is used as a key to access the allocation
information.
Bug: b/242641395
Change-Id: If701a4bdea2f8738a830ee47e0c7c5cdacf95b87
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4050103
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
|
|
2e5ca217
|
2022-11-18T10:44:49
|
|
Vulkan: Let each current context has its own QueueSerial.
This CL makes every current context has its own queueSerial. At context
creation time or when context becomes current, it allocates a QueueIndex
from renderer. When it becomes non-current, it releases QueueIndex for
others to reuse. This way we significantly reduces the max number of
QueueIndexs for reasonable usage. Each CommandBuffer has its own unique
QueueSerial and we use that to determine if a resource is being used by
the given CommandBuffer. The QueueSerial for RenderPassCommands is
deferred until renderPass starts, and when we generate queueSerial for
renderPassCommands, we also reserve a range of serials for
outsideRenderPassCommands so that we can do incremental submission of
outsideRenderPassCommands without need to close renderPassCommands. In
rare situation, if that reserved serials runs out, we also close
renderPassCommands to ensure the ordering of serials matches ordering of
command buffers.
With per current context queue serial, this CL is able to set resource
queue serial as it is being used. This CL completely removes usage of
ResourceUseList class since it was introduced due to deferred setSerial.
This CL also get rid of refCount from ResourceUse since there we no
longer add it to a ResourceUseList. With that, we also able to remove
SharedResourceUse class since access to ResourceUse itself is now thread
safe since we are able to make a copy of it when we add it to
GarbageList.
Because RenderPassCommands now has its own unique QueueSerial as it
encodes command, we can use it to detect if a resource is being used by
it or not, thus this CL also removes usage of CommandBufferID.
Bug: b/255414841
Change-Id: I36dcbeaa7bc996f04e6c04bf9ad44cd0d630f61a
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4038096
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
8ee1b89f
|
2022-11-04T13:10:37
|
|
Refactor pixel local storage options
The various different PLS options were getting scattered and unruly. We
are also in need of more backend-specific PLS options that would be
difficult to add as-is. This CL refactors them into a single
"ShPixelLocalStorageOptions" struct that gets initialized all in one
place, and shared between the compiler and the backends.
Bug: angleproject:7279
Change-Id: Ic58dccb8d1ba350a0b6cc5848ce15bd687e30fad
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4006715
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Chris Dalton <chris@rive.app>
|
|
7dd8478e
|
2022-11-17T10:11:02
|
|
Vulkan: Make ResourceUse::serial an FastVector of Serials
In preparation for per context queue serial, this CL makes
ResourceUse::serial a FastVector of Serial. Right now we still limited
to one serial index so that it still work the same way as before. This
CL adds necessary data type and change the function names to reflect
that tracking GPU progress needs a ResourceUse object instead of a
single Serial number.
Bug: b/255414841
Change-Id: Ic60cdf5ec8da45d1821f65a55947f5c553f65737
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4034548
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
6384f76b
|
2022-11-16T21:47:04
|
|
Vulkan: Move PipelineCacheAccess to namespace vk
In preparation for a change that uses it in that namespace.
Bug: angleproject:7369
Change-Id: Icc75b8839d702fd3e6d3d00c1d8f81619cdd89cc
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4031150
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
b2f55ec3
|
2022-11-14T16:07:19
|
|
Vulkan: Add memory allocation/deallocation counter
* Added a counter to the renderer object to keep track of the
memory allocations and deallocations per allocation type.
* The counters are updated with the functions onMemoryAlloc() and
onMemoryDealloc(), which can be added next to the allocation or
deallocation point.
* Currently used for buffer memory and image memory.
* Removed some of the redundant arguments from vk_helper and
suballocation functions.
Bug: b/242641395
Change-Id: I58b38f619df7bef0ba5fa3373a8db5aed0ef142c
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4014164
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
68b47e58
|
2022-11-16T10:46:59
|
|
Vulkan: Initial support for VK_EXT_graphics_pipeline_library
When available, this change uses VK_EXT_graphics_pipeline_library to
create pipelines. Currently, it is only used when
graphicsPipelineLibraryFastLinking is available. This restricts the use
of this extension to devices where monolithic pipelines are not any more
performant than linked libraries.
A future change adds support for other implementations by providing
async pipeline creation.
Bug: angleproject:7369
Change-Id: I1e3b7ac4aa56e75c7d6f4d0d5ea91cb0b862e581
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4031489
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Reviewed-by: Steven Noonan <steven@valvesoftware.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
8378032e
|
2022-11-15T11:47:55
|
|
Vulkan: Remove get API for mLastCompletedQueueSerial
In preparation for per context queue serial, this CL makes
mLastSubmittedQueueSerial and mLastCompletedQueueSerial private to
CommandQueue. Before this CL, we have a get function to return the last
submitted serial and last completed serial and passing these serials
around. This works because the serial is a single uint64_t number. With
per context queue serial, this will be an array of serials and there is
potential risk associated with access it from different threads. This CL
makes these serials private to CommandQueue and when you want to know if
GPU is completed with resource, you ask RendererVk/CommandQueue
directly. This way we can ensure they have thread safe access in the
CommandQueue (no lock is necessary, but all access will be restricted to
one class).
Bug: b/255414841
Change-Id: Ica565decce4a80588e0b447e179a2b634b55d7c3
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4021676
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
70cf2322
|
2022-11-16T10:25:07
|
|
Vulkan: Move async pipeline cache sync feature to backend
Bug: b/246683126
Change-Id: I194e488e04580cee7055c0674091f1228984edf9
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4031486
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Solti Ho <solti@google.com>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
9483002d
|
2022-11-14T16:01:15
|
|
Vulkan: Clean up submitFrame/submitCommands
ContextVK has two functions, submitFrame, and submitCommands.
ContextVk::SubmitFrame means to be frame boundary or FBO boundary,
usually refers to submission triggered by API, for example,
glFlush/glFinish or FBO switches. ContextVk::submitCommands was added
later to mean any kind of submission. It could be triggered by internal
logic, for example, when we think we have accumulated too much staged
updates. The odd thing is that ContextVk::submitFrame calls
ContextVk::submitCommands, which calls RendererVk::submitFrame. I
believe this is because when we introduced ContextVk::submitCommands, we
did not bother rename RendererVk's API. This CL renames
RendererVk::submitFrame and CommandQueue::submitFrame and
CommandProcessor::submitFrame to submitCommands to be consistent with
ContextVk's function names.
This CL also removes unused function ContextVk::isSerialInUse()
This CL also removes unnecessary vk:: namespace in CommandProcessor
Bug: b/259148812
Change-Id: If074e381168950143ad56a728f23caa298e5f355
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4027284
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
|
|
dd560015
|
2022-09-28T14:40:01
|
|
Reland "Vulkan: Implement EGL_EXT_device_drm[_render_node]"
This is a reland of commit 8900cbf96a3127880b1667d2242dc13a98cfe029
Original change's description:
> Vulkan: Implement EGL_EXT_device_drm[_render_node]
>
> These extensions are needed by Exo for zwp_linux_dmabuf v4 support.
>
> Unfortunately `VkPhysicalDeviceDrmPropertiesEXT` doesn't give us the
> information about the filesystem layout, needed by the EGL version.
> As ChromeOS is currently the only user, implement the extension only for
> Linux where we can reasonably assume `/dev/dri/...` file paths.
>
> We do not, however, limit us to the GBM backend - having the extension
> working in e.g. a nested X11 or Wayland environment is quite helpful.
>
> Bug: angleproject:7686
> Change-Id: I6de14e68ffbc479450bd22a182bc138365efb516
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3996703
> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Bug: angleproject:7686
Change-Id: I66dfd7aa51f76cb9668dbfbd0f3e1f32123bff7c
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4003941
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Jonah Ryan-Davis <jonahr@google.com>
Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
|
|
71d28a9b
|
2022-11-02T13:19:20
|
|
Vulkan: Remove unused ShaderAndSerial
The serial in the ShaderAndSerial is unused. This CL removed
ShaderAndSerial and replaced with ShaderModule directly.
Bug: b/257116399
Change-Id: I50d42af7818a12888309a80423531d75135e0bfd
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3998747
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
319f8228
|
2022-11-03T16:58:07
|
|
Revert "Vulkan: Implement EGL_EXT_device_drm[_render_node]"
This reverts commit 8900cbf96a3127880b1667d2242dc13a98cfe029.
Reason for revert: anglebug.com/7811
Original change's description:
> Vulkan: Implement EGL_EXT_device_drm[_render_node]
>
> These extensions are needed by Exo for zwp_linux_dmabuf v4 support.
>
> Unfortunately `VkPhysicalDeviceDrmPropertiesEXT` doesn't give us the
> information about the filesystem layout, needed by the EGL version.
> As ChromeOS is currently the only user, implement the extension only for
> Linux where we can reasonably assume `/dev/dri/...` file paths.
>
> We do not, however, limit us to the GBM backend - having the extension
> working in e.g. a nested X11 or Wayland environment is quite helpful.
>
> Bug: angleproject:7686
> Change-Id: I6de14e68ffbc479450bd22a182bc138365efb516
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3996703
> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Bug: angleproject:7686
Change-Id: I703351e93c4befbd3415b9ba04730066ee9c6afd
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4003857
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Commit-Queue: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
|
|
8900cbf9
|
2022-09-28T14:40:01
|
|
Vulkan: Implement EGL_EXT_device_drm[_render_node]
These extensions are needed by Exo for zwp_linux_dmabuf v4 support.
Unfortunately `VkPhysicalDeviceDrmPropertiesEXT` doesn't give us the
information about the filesystem layout, needed by the EGL version.
As ChromeOS is currently the only user, implement the extension only for
Linux where we can reasonably assume `/dev/dri/...` file paths.
We do not, however, limit us to the GBM backend - having the extension
working in e.g. a nested X11 or Wayland environment is quite helpful.
Bug: angleproject:7686
Change-Id: I6de14e68ffbc479450bd22a182bc138365efb516
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3996703
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
fbd7d5fa
|
2022-10-17T17:20:09
|
|
Move thread pool classes to common/
In preparation for access by image_util files.
Bug: b/250688943
Change-Id: I24777269a5071eae9a60f939635d01ed7246461f
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3961454
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
8e644365
|
2022-10-11T11:47:55
|
|
Vulkan: Rearrange state specification for pipeline libraries
This change splits pipeline state setup based on whether the complete
pipeline is being created or only a subset of it. However, no partial
pipelines are yet created, that will be done in a following CL.
Bug: angleproject:7369
Change-Id: Ife34c4bc39641ab8f06e7c78502f95a6bc16d15d
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3949917
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
|
|
5ddf631c
|
2022-10-04T11:17:45
|
|
Vulkan: Choose host visiable device local based on heap size.
set preferDeviceLocalMemoryHostVisible based on the
host visiable device local and device local heap memory heap size.
Bug: b/246909451
Change-Id: I1e63931baceda02396b0eb8f24671949920ac2a5
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3934479
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Hailin Zhang <hailinzhang@google.com>
Reviewed-by: Mateusz Przybylski <mprzybyl@google.com>
|
|
391644f4
|
2022-08-24T14:59:21
|
|
Vulkan: Use VK_EXT_rasterization_order_attachment_access
When available, this extension makes coherent framebuffer fetch /
advanced blend official.
Bug: angleproject:7604
Change-Id: Ifc552a0fa7a3612a3fc568feb61d6dd348e856ff
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3855698
Reviewed-by: Chris Dalton <chris@rive.app>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
493bab09
|
2022-09-15T14:20:41
|
|
Add an ShPixelLocalStorageType enum
Adds ShPixelLocalStorageType to ShCompileOptionsPLS and adds a
getNativePixelLocalStorageType() call to ContextImpl. For now this enum
only tells the translater whether PLS formats needs to be packed into
r32 images, but it will soon also be able to select framebuffer fetch,
native pixel local storage, and other PLS implementations.
Bug: angleproject:7279
Change-Id: Ifbd419b20550b8711ae3044782177806796216f1
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3900498
Commit-Queue: Chris Dalton <chris@rive.app>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
91deedba
|
2022-09-02T00:02:19
|
|
Vulkan: Use VK_EXT_pipeline_robustness
In this change, the global robustBufferAccess feature is disabled.
Using this extension, this behavior is enabled for pipelines created for
programs built in GL contexts that have robustness enabled.
Includes a fix for transform feedback emulation where pausing transform
feedback didn't actually stop it from writing output (and overrunning
the empty buffer). Until now, the perpetual robustBufferAccess had
worked around this.
Bug: angleproject:5845
Change-Id: Ib413dff5435e9d1f482bea1d1d0f20c5f09ad8a5
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3872507
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
ff46a03a
|
2022-08-25T20:19:02
|
|
Vulkan: Use VK_EXT_multisampled_render_to_single_sampled
Previously, the GOOGLEX version was used. The EXT version is favored
now.
Bug: angleproject:4836
Change-Id: Ie41d750b0729f0b3a14d1937fbf2dd386b65dd59
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3857993
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
4330a827
|
2022-08-19T02:59:26
|
|
Reland "Vulkan: Use VK_EXT_primitive_topology_list_restart"
This reverts commit 29d18b303189bf31b3af3a85c3df6013114eebc8.
Reason for revert: Fixed VVL suppressions not working
Original change's description:
> Revert "Vulkan: Use VK_EXT_primitive_topology_list_restart"
>
> This reverts commit e79c9cd63053b6cb7c33235f3a0a0310255df073.
>
> Reason for revert: Causing timeouts on some headless tests: anglebug.com/7579
>
> Original change's description:
> > Vulkan: Use VK_EXT_primitive_topology_list_restart
> >
> > From ANGLE's point of view, there is nothing to do with this extension
> > other than enable a feature that silences a validation error.
> >
> > Bug: angleproject:3832
> > Change-Id: I094343d09c322e2848a65a5bc775d0f21388fb46
> > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3562380
> > Reviewed-by: Jamie Madill <jmadill@chromium.org>
> > Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
> > Reviewed-by: mohan maiya <m.maiya@samsung.com>
>
> Bug: angleproject:3832
> Change-Id: Ifec7c9eaea1d3a949f15e0b6d868742f53cf8377
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3838391
> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
> Reviewed-by: Geoff Lang <geofflang@chromium.org>
> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Bug: angleproject:3832
Change-Id: Ia79b1f3b716f0df1991f605704135b4af48fb639
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3841366
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
29d18b30
|
2022-08-18T18:18:04
|
|
Revert "Vulkan: Use VK_EXT_primitive_topology_list_restart"
This reverts commit e79c9cd63053b6cb7c33235f3a0a0310255df073.
Reason for revert: Causing timeouts on some headless tests: anglebug.com/7579
Original change's description:
> Vulkan: Use VK_EXT_primitive_topology_list_restart
>
> From ANGLE's point of view, there is nothing to do with this extension
> other than enable a feature that silences a validation error.
>
> Bug: angleproject:3832
> Change-Id: I094343d09c322e2848a65a5bc775d0f21388fb46
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3562380
> Reviewed-by: Jamie Madill <jmadill@chromium.org>
> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
> Reviewed-by: mohan maiya <m.maiya@samsung.com>
Bug: angleproject:3832
Change-Id: Ifec7c9eaea1d3a949f15e0b6d868742f53cf8377
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3838391
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
e79c9cd6
|
2022-03-30T23:06:54
|
|
Vulkan: Use VK_EXT_primitive_topology_list_restart
From ANGLE's point of view, there is nothing to do with this extension
other than enable a feature that silences a validation error.
Bug: angleproject:3832
Change-Id: I094343d09c322e2848a65a5bc775d0f21388fb46
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3562380
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: mohan maiya <m.maiya@samsung.com>
|
|
fa3d7d5c
|
2022-08-05T00:57:40
|
|
Make PLS coherent on Vulkan
Uses the VK_EXT_fragment_shader_interlock extension to make the shader
image implementation of PLS coherent on Vulkan.
This extension is supported on AMD, Apple, NVIDIA, and Intel.
Bug: angleproject:7279
Change-Id: Ic0253eb20932eb6be0b1f433ba454e48b57be2f5
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3813816
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Chris Dalton <chris@rive.app>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
876da4ae
|
2022-08-09T22:30:24
|
|
Vulkan: Query support for VK_KHR_imageless_framebuffer
In preparation for using it.
Bug: angleproject:7553
Change-Id: I579af8ce2c0dd1d58bf750ee494e06a071b798fa
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3823620
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
|
|
f7d4c614
|
2022-03-30T23:33:27
|
|
Vulkan: Use VK_EXT_primitives_generated_query
This Vulkan extension implements OpenGL's primitives generated query.
The heavy lifting in ANGLE's implementation was done when this query was
emulated with pipeline statistics query. This change simply switches
pipeline statistics query usage to this dedicated query when available.
Bug: angleproject:5430
Change-Id: I5d2c7d64e4627bcbd33d428d6a7c836b1129e5fd
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3813815
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Ian Elliott <ianelliott@google.com>
Commit-Queue: Yuxin Hu <yuxinhu@google.com>
|
|
7fe0694c
|
2022-07-14T16:42:30
|
|
Vulkan: Use push constants for driver uniforms
* Updated the driver uniforms so they would be defined as push
constants in SPIR-V. Their data would be updated via
pushConstants() when handling the driver uniform dirty bits.
* Updated TOutputVulkanGLSL to be able to generate the push
constants as required.
* When handling the driver uniform dirty bits, we no longer
allocate a buffer.
* Removed the driver uniform descriptor set from the pipeline
layout.
* Removed the binding-related functions and flags for the driver
uniforms.
* In invalidateGraphicsDescriptorSet(), DIRTY_BIT_DESCRIPTOR_SETS
is used instead of DIRTY_BIT_DRIVER_UNIFORMS_BINDING. (Same for
invalidateComputeDescriptorSet())
* DIRTY_BIT_DRIVER_UNIFORMS_BINDING is replaced with
DIRTY_BIT_DRIVER_UNIFORMS in other places.
* Removed mDriverUniform and DriverUniformsDescriptorSet from
ContextVk.
* Added mSupportedVulkanShaderStageMask to RendererVk, which is used
in creating the pipeline layout and updating the push constants.
* Added a TODO note for driverUniformsDescriptorSetIndex.
Bug: angleproject:6858
Change-Id: I91037d378528962a816b12ff3f21249ee17b7652
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3782570
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
053d152d
|
2022-07-04T21:20:34
|
|
Vulkan: Resolve GoogleX MSRTSS conflict with EXT
Now that the extension is public, rename the old symbols to GoogleX as
they have shipped previously. This reverts defd99dc4.
Bug: chromium:1088005
Change-Id: I5ac7f73e24084e26a8b2d9cf742c7ab9b3c80984
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3744362
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Ian Elliott <ianelliott@google.com>
|
|
81a69da6
|
2022-06-30T09:56:54
|
|
Vulkan: min/mag filters follow chroma filter value
The Vulkan spec states that for those formats lacking support for
VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT
the min and mag filter must be equal to the sampler YCbCr conversion's
chroma filter. Having the min/mag filters follow the chroma filter
leads to simpler and more efficient code.
Also update getPreferredFilterForYUV function to return existing
filter value when preferLinearFilterForYUV feature is disabled.
Bug: angleproject:7382
Bug: angleproject:7392
Tests: Texture2DTestES3YUV.TexStorage2DYuvFilterModes*
Tests: ImageTestES3.SourceYUVAHBTargetExternalYUVSampleLinearFiltering/ES3_Vulkan
Change-Id: I550ef8feede1dc6c3a0d8e32f790113e90ef7a4b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3739582
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: mohan maiya <m.maiya@samsung.com>
|
|
723cc880
|
2022-06-10T17:55:54
|
|
Reland "Reland "Vulkan: Destroy DescriptorSet cache when it becomes invalid""
This is a reland of commit 551a26aeedbfd971d6199c8eddb433a4f4ff871c
Original change's description:
> Reland "Vulkan: Destroy DescriptorSet cache when it becomes invalid"
>
> This is a reland of commit 0779ccbcd427dcb00e53afa6385fb4e8e2377993 with
> the fix for angleproject:7466. When DescriptorPoolhelper gets
> release/destroyed, we ensure all sharedCacheKeys are destroyed.
>
> Original change's description:
> > Vulkan: Destroy DescriptorSet cache when it becomes invalid
> >
> > When a new texture descriptorSet is allocated, we store one reference of
> > the cache key in ProgramExecutableVk and all TextureVks that it
> > associated with. When any of the TextureVk is destroyed or its view
> > destroyed, we immediately erase the descriptorSet from the cache and
> > track GPU progress and free the descriptorSet when it's GPU completed.
> > That way we delete the dead descriptorSet that will for sure never been
> > reused ASAP so that its space is avialable for reuse.
> >
> > Bug: b/235523746
> > Change-Id: Ib1b9662a254eea5a3f410dc6d5d89fca6727a647
> > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3700226
> > Reviewed-by: Lingfeng Yang <lfy@google.com>
> > Commit-Queue: Charlie Lao <cclao@google.com>
> > Reviewed-by: Ian Elliott <ianelliott@google.com>
> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
>
> Bug: b/235523746
> Bug: angleproject:7466
> Change-Id: I4413bec27ea0ca830010e2ca15036c2e667141c0
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3726964
> Reviewed-by: Ian Elliott <ianelliott@google.com>
> Commit-Queue: Charlie Lao <cclao@google.com>
> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Bug: b/235523746
Bug: angleproject:7466
Change-Id: I6b88b884841c5dbc625ee7e0c52c45af09dec199
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3741027
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Ian Elliott <ianelliott@google.com>
|
|
4b745c2b
|
2022-07-01T01:25:36
|
|
Revert "Reland "Vulkan: Destroy DescriptorSet cache when it becomes invalid""
This reverts commit 551a26aeedbfd971d6199c8eddb433a4f4ff871c.
Reason for revert: Blink test failures at: https://ci.chromium.org/ui/p/chromium/builders/ci/WebKit%20Linux%20MSAN/15546/overview
Original change's description:
> Reland "Vulkan: Destroy DescriptorSet cache when it becomes invalid"
>
> This is a reland of commit 0779ccbcd427dcb00e53afa6385fb4e8e2377993 with
> the fix for angleproject:7466. When DescriptorPoolhelper gets
> release/destroyed, we ensure all sharedCacheKeys are destroyed.
>
> Original change's description:
> > Vulkan: Destroy DescriptorSet cache when it becomes invalid
> >
> > When a new texture descriptorSet is allocated, we store one reference of
> > the cache key in ProgramExecutableVk and all TextureVks that it
> > associated with. When any of the TextureVk is destroyed or its view
> > destroyed, we immediately erase the descriptorSet from the cache and
> > track GPU progress and free the descriptorSet when it's GPU completed.
> > That way we delete the dead descriptorSet that will for sure never been
> > reused ASAP so that its space is avialable for reuse.
> >
> > Bug: b/235523746
> > Change-Id: Ib1b9662a254eea5a3f410dc6d5d89fca6727a647
> > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3700226
> > Reviewed-by: Lingfeng Yang <lfy@google.com>
> > Commit-Queue: Charlie Lao <cclao@google.com>
> > Reviewed-by: Ian Elliott <ianelliott@google.com>
> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
>
> Bug: b/235523746
> Bug: angleproject:7466
> Change-Id: I4413bec27ea0ca830010e2ca15036c2e667141c0
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3726964
> Reviewed-by: Ian Elliott <ianelliott@google.com>
> Commit-Queue: Charlie Lao <cclao@google.com>
> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Bug: b/235523746
Bug: angleproject:7466
Change-Id: Icdde2752c462b7ebbb51d46fd35ce749b5caf377
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3739585
Reviewed-by: Ian Elliott <ianelliott@google.com>
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Auto-Submit: Ian Elliott <ianelliott@google.com>
Commit-Queue: Ian Elliott <ianelliott@google.com>
|
|
551a26ae
|
2022-06-10T17:55:54
|
|
Reland "Vulkan: Destroy DescriptorSet cache when it becomes invalid"
This is a reland of commit 0779ccbcd427dcb00e53afa6385fb4e8e2377993 with
the fix for angleproject:7466. When DescriptorPoolhelper gets
release/destroyed, we ensure all sharedCacheKeys are destroyed.
Original change's description:
> Vulkan: Destroy DescriptorSet cache when it becomes invalid
>
> When a new texture descriptorSet is allocated, we store one reference of
> the cache key in ProgramExecutableVk and all TextureVks that it
> associated with. When any of the TextureVk is destroyed or its view
> destroyed, we immediately erase the descriptorSet from the cache and
> track GPU progress and free the descriptorSet when it's GPU completed.
> That way we delete the dead descriptorSet that will for sure never been
> reused ASAP so that its space is avialable for reuse.
>
> Bug: b/235523746
> Change-Id: Ib1b9662a254eea5a3f410dc6d5d89fca6727a647
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3700226
> Reviewed-by: Lingfeng Yang <lfy@google.com>
> Commit-Queue: Charlie Lao <cclao@google.com>
> Reviewed-by: Ian Elliott <ianelliott@google.com>
> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Bug: b/235523746
Bug: angleproject:7466
Change-Id: I4413bec27ea0ca830010e2ca15036c2e667141c0
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3726964
Reviewed-by: Ian Elliott <ianelliott@google.com>
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
f8690429
|
2022-06-27T13:50:44
|
|
Revert "Vulkan: Destroy DescriptorSet cache when it becomes invalid"
This reverts commit 0779ccbcd427dcb00e53afa6385fb4e8e2377993.
Reason for revert: crashes in blink_web_tests on linux-rel
https://ci.chromium.org/ui/p/chromium/builders/try/linux-rel/1051045/overview
Original change's description:
> Vulkan: Destroy DescriptorSet cache when it becomes invalid
>
> When a new texture descriptorSet is allocated, we store one reference of
> the cache key in ProgramExecutableVk and all TextureVks that it
> associated with. When any of the TextureVk is destroyed or its view
> destroyed, we immediately erase the descriptorSet from the cache and
> track GPU progress and free the descriptorSet when it's GPU completed.
> That way we delete the dead descriptorSet that will for sure never been
> reused ASAP so that its space is avialable for reuse.
>
> Bug: b/235523746
> Change-Id: Ib1b9662a254eea5a3f410dc6d5d89fca6727a647
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3700226
> Reviewed-by: Lingfeng Yang <lfy@google.com>
> Commit-Queue: Charlie Lao <cclao@google.com>
> Reviewed-by: Ian Elliott <ianelliott@google.com>
> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Bug: b/235523746, angleproject:7466
Change-Id: I7e5067de2f2add08af1f9804cc2e952238b2e942
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3726097
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
|
|
0779ccbc
|
2022-06-10T17:55:54
|
|
Vulkan: Destroy DescriptorSet cache when it becomes invalid
When a new texture descriptorSet is allocated, we store one reference of
the cache key in ProgramExecutableVk and all TextureVks that it
associated with. When any of the TextureVk is destroyed or its view
destroyed, we immediately erase the descriptorSet from the cache and
track GPU progress and free the descriptorSet when it's GPU completed.
That way we delete the dead descriptorSet that will for sure never been
reused ASAP so that its space is avialable for reuse.
Bug: b/235523746
Change-Id: Ib1b9662a254eea5a3f410dc6d5d89fca6727a647
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3700226
Reviewed-by: Lingfeng Yang <lfy@google.com>
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Ian Elliott <ianelliott@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
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>
|
|
0f8f760d
|
2022-06-07T17:52:52
|
|
Disable KHR_no_error for Android/SwiftShader
Speculatively fix crash in Skia on ANGLE that has been happening.
In addition, prevent other crashes in the future.
Bug: b/220069903
Change-Id: I01b9896a6feb8be524849dafbc1df9526fc98754
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3694160
Commit-Queue: Ian Elliott <ianelliott@google.com>
Auto-Submit: Ian Elliott <ianelliott@google.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
53ec886e
|
2022-05-30T16:49:11
|
|
Vulkan: Externally synchronize the pipeline cache
In preparation for a future change that requires this as it may perform
pipeline cache merges during creation of pipelines.
Bug: angleproject:5881
Change-Id: Ic7921b781aa773ae23b60a0bb6fa2111b1fc401e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3679479
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
eb282de0
|
2022-05-20T18:36:46
|
|
Vulkan: Add feature to use VK_FILTER_LINEAR for YUVConversionInfo
VK_FILTER_NEAREST is default for chromaFilter in ConversionInfo.
Add feature to allow VK_FILTER_LINEAR to be used instead. This
feature controls the quality when sampling YUV images.
Bug: angleproject:7382
Change-Id: I3f67d7620d94b5b33c42754adfef84b97c798637
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3684351
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Trevor Black <vantablack@google.com>
Reviewed-by: mohan maiya <m.maiya@samsung.com>
Commit-Queue: Brandon Schade <b.schade@samsung.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
1ce69722
|
2022-05-18T13:05:22
|
|
Vulkan: Track used command buffers in ResourceUse.
The list of command buffers to ResourceUse will replace tracking
resources in a CommandBufferHelper. Currently the two tracking
methods live side-by-side, and the old method will be removed in
a future CL.
Bug: angleproject:5664
Change-Id: Ia04d77e72c508e10b549db8c8dd5f0472e4edc83
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3656069
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
a2fe4445
|
2022-05-26T12:42:39
|
|
Vulkan: Sync pipeline cache only when truly changed
The Vulkan pipeline cache was considered dirty when ANGLE added a new
pipeline. However, a new pipeline doesn't necessarily translate to new
blobs in the pipeline cache.
With this change, the cache is synced only if its size has changed.
Bug: angleproject:5881
Change-Id: I0226426680f1e6b0e2bfde66ea6409362b8e72c9
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3668835
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
|
|
7c83a363
|
2022-05-16T22:22:44
|
|
Vulkan: Dynamic state for rasterizer discard enable
Interaction with primitives generated query are tested by those tests
added in
https://chromium-review.googlesource.com/c/angle/angle/+/2976181
Bug: angleproject:5906
Change-Id: I0ab9f54995504be770a93bf13337a5ffe20bf7eb
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3651582
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
2fdd7bfd
|
2022-05-17T13:31:58
|
|
Vulkan: Support binding 2D slice of a 3D texture to an image unit
Support binding a 3d texture as a 2d texture by specifying that it is
non-layered during glBindImageTexture and expose support for
EGL_KHR_gl_texture_3D_image when VK_EXT_image_2d_view_of_3d vulkan
extension is supported.
Tests: ComputeShaderTest.BindImageTexture3D
dEQP-GLES31.functional.image_load_store.3d.*single_layer
Bug: angleproject:7320
Change-Id: Ie2f0dfcdf302a4aa58990f74329ca36e62cd3902
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3648586
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: mohan maiya <m.maiya@samsung.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
bedb3075
|
2022-05-16T09:46:11
|
|
Do not call RendererVK::handleDeviceLost() for device lost
RendererVK::handleDeviceLost() need to hold the mCommandQueueMutex
for releasing some resources. For some cases, Locking
mCommandQueueMutex may cause deadlock, because the same lock has been
acquired by the same thread. Fix the problem by not calling
RendererVK::handleDeviceLost() for device lost. It is OK, because
RendererVK::onDestroy() will call handleDeviceLost() if the device
is lost already.
Bug: chromium:1273643
Change-Id: Iaaa77bdf429b703363d4155323b91baf5947d95e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3644641
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
4e5da2d2
|
2022-05-11T13:58:07
|
|
Vulkan: Dynamic state for cull mode
Bug: angleproject:5906
Change-Id: I3d7b888e7999d4892ff71d636ea16a2edcf7a27f
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3642800
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
d8d396db
|
2022-04-07T09:57:25
|
|
Vulkan: Add shared descriptor set caches.
This allows programs with the same sets of descriptors to
share descriptor sets. Currently there is no cache eviction.
This CL adds a new "Meta" class to manage the descriptor set
caches. Each shared descriptor pool is unique to a descriptor
set layout. The descriptor set cache is moved into the pool
class. Now every instance of a descriptor pool in ANGLE has
easy access to a descriptor set cache as well.
Bug: angleproject:6776
Change-Id: I06982e0349f5a87e4578e769fa356ce8e7ab49f0
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3424660
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
333da2cf
|
2022-05-03T16:21:41
|
|
Vulkan: Limit the total bytes of suballocation garbages in flight
This CL tracks the total number of bytes of suballocation garbage. It
checks against the limit so that when there are excessive garbages in
flight, we will wait for GPU to finish and free up some of these memory
before continue. That way we will ensure we do not end up accumulating
too much memory and end up with low memory kill on mobile devices.
Bug: b/230538246
Change-Id: Ic8292db5617bcee4ec3abe8632f54edfd249cfaa
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3617226
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
51dc3c3e
|
2022-05-02T18:11:26
|
|
Vulkan: Force prune when there are lots of suballocations destroyed
If there are a lot of suballocations destroyed, there is bigger chance
that some buffers become empty and we might able to trim down excessive
empty buffers. This CL tracks the suballocations destroyed at each
cleanupGarbage call and use that information to force immediate
pruneEmptyBuffers call.
Bug: b/230538246
Change-Id: Icca2ea731639545c635c09d58a8606d67405e1a6
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3620981
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
3eb2bcf7
|
2022-04-27T16:13:04
|
|
Vulkan: Fix syncval errors with DONT_CARE for unused attachments
DONT_CARE is a write operation for synchronization purposes. ANGLE
doesn't synchronize depth/stencil attachments that are not written to,
as it uses the read-only layout.
This change makes sure LOAD/STORE_OP_NONE are used instead of DONT_CARE
for attachments that are not used, even if they don't have defined
contents. This allows ANGLE to continue to not do additional
synchronization.
Bug: angleproject:5371
Bug: angleproject:5962
Bug: angleproject:6411
Bug: angleproject:6584
Change-Id: I539379aa34f6655f00e798e8c4a5c57f40f7a12d
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3612182
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
|
|
394fb0d3
|
2022-04-26T17:17:58
|
|
Vulkan: Don't take lock for getLastCompletedQueueSerial
getLastCompletedQueueSerial() is simply returning a uint64_t serial
number. There is no need to take a mutex lock. This CL uses atomic for
mLastCompletedQueueSerial and removed the lock as well as removed the
virtual function call. This also avoid the annoyance with mutex lock,
that if you call getLastCompletedQueueSerial in places that has other
lock held, you may end up with deadlock. This CL avoids that trouble all
together other than improves performance.
Bug: b/230759914
Change-Id: I9dc688d410e4c6bca7fc70ae4f9fe0c3acc2e005
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3607500
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
4aae5815
|
2022-04-22T13:21:03
|
|
Vulkan: Overlay widgets for submission statistics
Bug: angleproject:7084
Change-Id: I68e69bda43862f9f2711c25a28dbe4745c19a45c
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3602832
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@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>
|
|
2db718ed
|
2022-04-21T23:13:02
|
|
Vulkan: Skip empty submissions
A number of places in ANGLE perform an implicit flush; eglSwapBuffers(),
glFenceSync() etc. Sometimes these flushes are unnecessary because
there is nothing to submit. Additionally, an application may
unnecessarily issue glFlush() with nothing recorded.
In this change, empty command buffers are automatically not submitted,
optimizing these unnecessary flushes away.
Bug: angleproject:7084
Change-Id: Iecb865b6b9ef8045dfecda7b5221874f7031b42e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3600837
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
5014ce66
|
2022-04-18T18:05:20
|
|
Vulkan: Add orphaned list for non-empty BufferBlocks.
In the fix for chromium:1299211, we added a new pool in the RendererVk
and pick which pool to use at the getDefaultBufferPool() call. This CL
fixes the original problem differently. In this CL we still uses the
ShareGroup's pool. When display global texture is enabled, we orphan the
non-empty buffer blocks into renderer and check and destroyed from
garbage collection code. This way we still only deal with one buffer
pool and all logic is mostly in context destroy code path, which I
believe is a better solution.
Bug: b/223428306
Change-Id: Ib465a11f7e3656df09cc891416ff57f086a8184b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3573390
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
d2fd28ca
|
2022-04-07T01:38:35
|
|
Vulkan: Relax advanced blend on VK extension requirement
The GL spec actually requires that advanced blend be used on color
output 0, so the check for advancedBlendMaxColorAttachments >= 8 was
actually unnecessary.
Bug: angleproject:3586
Change-Id: I32ce2a5912390d1a9a5d742ef0ca7cacc636e064
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3575739
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
8f904363
|
2022-03-31T12:30:19
|
|
Vulkan: Move memory allocation initialization code into function
No functional change expected. This CL wraps all initialization code for
VMA allocator and memory suballocation memoryType and alignment
calculation into its own function.
Bug: b/223428306
Change-Id: Id630bbae035912ad41c51c2bb1cd02c2e438b442
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3563506
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
fe28a429
|
2022-03-30T15:34:49
|
|
Vulkan: Create buffer for vertex array if robust enabled
If robust access is enabled (i.e., chrome), we want to ensure vulkan
driver never access beyond that OpenGL buffer boundary. But with
suballocation from BufferPool, we are using the same VkBuffer for all
suballocations from the same BufferBlock. this combined with the fact
that there is no size information in the vkCmdBindVertexBuffers, it
means vulkan driver can not properly ensure vertex access not go beyond
the subrange. It can only guarantee not access beyond the entire
VkBuffer size. This CL creates a dedicated vkBuffer object and bind it
to the suballocation of the vkDeviceMemory so that vulkan driver will
see the exact range of the subrange instead of entire buffer. Since we
may allocated more memory than actual requested size and the extra
paddings are not zero filled , user size is used to create this
vkBuffer. This is only enabled when robust access is enabled.
This CL also ported webgl conformance test
out-of-bounds-index-buffers.html and out-of-bounds-array-buffers.html
to end2end test.
Bug: chromium:1310038
Change-Id: I3499ae600028149b1039082e5011232b3e4e5e80
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3553940
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
36e142c1
|
2022-03-25T12:10:17
|
|
Vulkan: Fix deadlock in device loss
When the device is lost, the commands queue is cleaned up. This
shouldn't be done immediately if the device loss is generated from the
command queue itself (due to mutual exclusion requirements). For
example, CommandQueue::checkCompletedCommands() loops over
mInFlightCommands, whose body contains ANGLE_VK_TRY. On device loss,
that macro invokes CommandQueue::handleDeviceLost which clears
mInFlightCommands.
In this change, handleDeviceLost() defers device loss handling if the
mutex is already taken. A new class is added, ScopedCommandQueueLock,
that handles device loss at the end of the scope (i.e. when the command
queue operation is finished) by calling handleDeviceLostNoLock() before
releasing the lock.
Bug: chromium:1304907
Bug: angleproject:7129
Change-Id: Ifb67cfdad9595cec51a6a58b69f629aede489725
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3552088
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Peng Huang <penghuang@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
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>
|
|
98bb4f32
|
2022-02-23T16:51:32
|
|
Vulkan: Implement advanced blend through extension
This change exposes GL_KHR_blend_equation_advanced if
VK_EXT_blend_operation_advanced is supported. No emulation is yet
implemented.
Bug: angleproject:3586
Change-Id: Ie7a442c22e028e3aa45ccef52db320e205664d49
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3487951
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
b72718d2
|
2022-02-22T16:18:45
|
|
Vulkan: Fix the data race for mUse from two threads
A data race of mUse object between two threads can occur with the
following sequences:
1) You use the buffer in the context, it adds into mResourceUseList
2) You release the buffer. Now it goes into mGarbageList, even though it
is still in the mResourceUseList.
Now this mUse object has references from two lists, the mGarbageList and
mResourceUseList, and they do not use the same mutex lock. This means
the race could happen and corrupt the mUse data. The same thing could
happen with ImageHelper object as well. This quick fix also grabs
mGrabageMutex while processing mResourceUseList. This CL creates a new
garbage list to hold garbage that has not been submitted to vulkan. And
this list will only accessed from submission thread and with
mGarbageMutex lock held. The advantage of this is that mSharedGarbage
will only have objects that already submitted, which means it is in FIFO
order so that we can break out the loop as soon as we see an uncompleted
garbage.
This bug was exposed by
MultithreadingTest.MultiContextClear/ES3_Vulkan_SwiftShader on
linux-tsan-test
Bug: angleproject:7045
Change-Id: I264c970579aaa53373a61ff067fa0e21eb410ae6
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3482158
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Ian Elliott <ianelliott@google.com>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
51967b4f
|
2022-02-11T13:01:54
|
|
Vulkan: Fix enabling external fences and semaphores
These capabilities are Instance extensions
need fixed to enable Native fences for Android
Bug: angleproject:7009
Change-Id: I9f07dc88cabd52712ebde28ba938662d7773c8b5
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3457743
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: mohan maiya <m.maiya@samsung.com>
|
|
3adace15
|
2022-01-10T22:53:19
|
|
Don't expose detailed driver version info to webGL
WebGL's GL_RENDERER string now only includes basic version information
on all backends. This is controlled through a bool passed through
getBackendVersionString.
Bug: angleproject:6777
Change-Id: Ie4e3d91d22c96f175a8139fac1c66e985ed9e1b7
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3380263
Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Sean Risser <srisser@google.com>
|
|
19f40531
|
2022-02-11T11:17:22
|
|
Vulkan: Enable subgroup feature in GenerateMipmap.comp
Enable subgroup feature to optimize shaders used for generating
mipmaps. Remove definition of SPD_NO_WAVE_OPERATIONS to enable
subgroups. Regenerate all internal shaders with target as
vulkan 1.1 to enable subgroup feature.
Bug: angleproject:7006
Change-Id: I36f50f3d27517fedb52e3028a8f6288347b1bfa0
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3453288
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: mohan maiya <m.maiya@samsung.com>
|
|
f7f26956
|
2022-02-10T13:33:32
|
|
Vulkan: Fix two bugs exposed by moving mEmptyBuffer to suballocation
There are two bugs exposed when I try to switch mEmptyBuffer to use
suballocation. 1) BufferHelper::initializeNonZeroMemory() for device
local memory uses GPU to do zero fill, but it is missing an
vkEndCommandBuffer call. 2) glTexSubImage2D call try to pick
glCopyuBufferToImage code path and we are not checking against pixel
format. Vulkan spec requires offset must be number of pixel size and we
are using "4" for pixel size which does not work for RGB format.
Bug: b/205337962
Change-Id: Ibca6a60ebd6afc5e2bca07b9cc6a43ebdd240f15
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3449348
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Ian Elliott <ianelliott@google.com>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
d285d6a7
|
2021-11-23T23:12:00
|
|
Vulkan: Use VK_EXT_depth_clip_control
Bug: angleproject:6679
Change-Id: Iea3b7a2d8db630dcea19836732de8f9e0a7a568f
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3298356
Reviewed-by: mohan maiya <m.maiya@samsung.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
1b9774f5
|
2022-01-26T13:37:03
|
|
Vulkan: Force submit updates to immutable textures
Submit immutable texture updates recorded in outside renderpass
commands when the following conditions are met -
1. "forceSubmitImmutableTextureUpdates" feature is enabled
2. The texture is immutable
This works around a problem that manifests in some applications
that do not perform appropriate synchronization of shared contexts.
Bug: angleproject:6929
Test: EGLContextSharingTestNoSyncTextureUploads.*
Change-Id: I2a237046e2cc53650eb8dc07e3697f7481df9b02
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3418138
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: mohan maiya <m.maiya@samsung.com>
|
|
d9fcebb8
|
2022-02-07T14:11:58
|
|
Vulkan: Make framebuffer fetch syncval errors more specific
The errors are very generic, so now they are only suppressed if
framebuffer fetch is used by the application.
This change partially relands 2eeb87488.
Bug: angleproject:6951
Change-Id: I55f444d19360d3066f1d4b0959d25e676dbb1a38
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3444341
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Ian Elliott <ianelliott@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
9208dcc6
|
2022-02-07T18:23:12
|
|
Revert "Vulkan: Enable framebuffer fetch on SwiftShader"
This reverts commit 2eeb8748867c529474200d302f21f20ab461b9b4.
Reason for revert: Breaks tests for ANGLE-to-Chromium autoroller
Original change's description:
> Vulkan: Enable framebuffer fetch on SwiftShader
>
> Bug: angleproject:6951
> Change-Id: I10eeb58be9e8639c0519fc47f327a0894155b755
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3437409
> Reviewed-by: Jamie Madill <jmadill@chromium.org>
> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Bug: angleproject:6951
Change-Id: I35eaf2b7411d1bf055484bbb32f7e681286edd42
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3442370
Reviewed-by: Ian Elliott <ianelliott@google.com>
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Ian Elliott <ianelliott@google.com>
|
|
2eeb8748
|
2022-02-03T13:10:54
|
|
Vulkan: Enable framebuffer fetch on SwiftShader
Bug: angleproject:6951
Change-Id: I10eeb58be9e8639c0519fc47f327a0894155b755
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3437409
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
bc3be5a8
|
2022-01-27T12:12:58
|
|
Vulkan: Add a dedicated suballocation garbage list
Suballocations are the most common garbage objects in most usage cases.
The current garbage collection code will construct a garbage object from
suballocation and then construct a SharedGarbage object with a
std::vector that holds only one element. And then it adds this
SharedGarbage to the garbage list. This CL tries to avoid create
std::vector with just one element and avoid the cost of switch statement
for each garbage object by adding a new dedicated garbage list that only
holds the suballocation garbages, which is the most common garbages in
the system. With gardenscapes running offscreen with --minimum-gpu-work,
it reduces CPU overhead from 2.55ms to 2.20ms on Pixel6.
Bug: b/215768827
Change-Id: Ia2872442462917c0caadb263769a1cbf3dd7366f
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3414356
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
2d3ce72d
|
2022-01-20T10:13:06
|
|
Refactor shared library load to avoid allocations.
Fixes a leak of an angle::Library detected in the EGL loader.
Bug: angleproject:6937
Change-Id: I623aa6172b98a35465e1d2641b92f67bdc5d24e7
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3403060
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
a7970889
|
2022-01-24T11:50:27
|
|
Vulkan: Use queue instead of vector for mSharedGarbageList
The garbage collector code is iterating the mSharedGarbageList from
begin to end and if the garbage object is completed, we destroy it and
erase it from the vector. This is done one by one. The problem with that
is each erase call end up moving the remaining vector to ahead by one,
and this process is repeated for each completed element. This is O(N^2)
problem and really magnifies when you have many garbage objects. Since
we only add garbage when it is GPU pending, so most of these garbages
are in sort of fifo order anyway. This CL changes the garbage list from
vector to queue so that erase becomes pop and this becomes a O(N)
problem. This reduces CPU overhead as measured with minimize-gpu-work
for gardenscapes from 10ms to 2ms due to suballocation generates lots of
garbages. But this CL is a general improvement for the garbage
collection performance.
Bug: b/215768827
Change-Id: I002aadf75f958d8b79eb6281a2608597776e908d
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3414354
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
15439f8e
|
2022-01-13T14:58:41
|
|
Vulkan: Remove BufferMemoryAllocator
This class was added in crrev.com/c/3036256. The original intention was
to use VMA to implement buffer suballocation. Because VMA itself does
not support buffer suballocation, I was thinking to use VMA custom pool
to implement it and this class was intended to wrap all these
functionality into one class. But now thanks to Jamie's effort, VMA
exported generic suballocation algorithm via API and we have implemented
buffer suballocation using that virtual allocation API. So this
BufferMemoryAllocator class is really no longer useful. This CL mostly
reverted that CL and flatten out the buffer allocation call to directly
use VMA's Allocator object.
Bug: b/205337962
Change-Id: I0336056e440f39e2ff49fee8e0ff4b1f355cefe4
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3244022
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
5adee916
|
2022-01-11T13:09:55
|
|
Wrap some global vulkan methods which depend on env variables
ANGLE scoped sets some envion variables during initialization.
Those env variables will change some vulkan global methods behavior.
So to make sure those global methods have same behavior, this CL
wraps those global methods, and sets those envion variables before
call those vulkan methods.
Bug: chromium:1264439
Change-Id: Ie4e29884fcf5b67f4e53ddd3c90a9ade7b226a1f
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3379209
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Peng Huang <penghuang@chromium.org>
|
|
acd8fc76
|
2021-12-16T01:05:02
|
|
Vulkan: Distinguish RP and outside-RP command buffer types
What goes inside and outside a render pass command buffer is largely
mutually exclusive. Moreover, the size and frequency of allocations is
different between the two.
This change distinguishes the C++ types used for inside and outside
render pass command buffers:
- The type now documents which command buffer a function is able to
receive.
- `isRenderPass` flag passing, checking and asserting is largely
removed.
- A follow up change experiments with using different (Vulkan vs ANGLE)
secondary command buffers for inside and outside RP command buffers.
- A future change could specialize the pool behaviors per command buffer
type.
Bug: angleproject:6811
Change-Id: Ia4bc669d26ac7e94e8a0dfb9b361666c82f42cc3
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3344373
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|