|
4b7bac78
|
2020-02-15T12:17:12
|
|
Vulkan: Throttle when way ahead of device.
This CL adds a fence wait when we get more than 100 serials behind the
device. This fixes an ASSERT when unit tests or offscreen performance
tests get way ahead of the device.
Bug: angleproject:3630
Bug: angleproject:4281
Change-Id: I90f9af1b2ceb2b1cd9f2f638d6d84caaeeb83bb1
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2057351
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Ian Elliott <ianelliott@google.com>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
efd2a669
|
2020-02-15T08:45:46
|
|
Vulkan: Command graph linearization for SemaphoreVk.
This doesn't seem to be tested in the default CQ configuration.
Bug: angleproject:4029
Change-Id: If0acd5c78602324433b63498e2de8c16881023de
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2057354
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Michael Spang <spang@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
2dd40d7f
|
2020-02-15T07:32:26
|
|
Vulkan: Free pool allocation leak with graph disabled.
Our secondary command buffer pools were leaking memory every submit.
This change pops the secondary command buffer pool allocator scope
after commands are flushed during a submit.
Fixes the memory leak observable on any Vulkan application.
Bug: angleproject:4029
Bug: angleproject:4403
Change-Id: I3d0f8d53456336ef0b03c6d37425fb76c88d1551
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2057349
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
798a8375
|
2020-02-14T12:48:21
|
|
Vulkan: Add more debug labels handling with graph off.
Bug: angleproject:4029
Change-Id: Ia3c88af5f9fa1a7940d7f809ded599c064126be7
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2055555
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
|
|
12a36dd9
|
2020-02-14T12:48:20
|
|
Vulkan: Add debug utils functions to wrapper.
Also adds a more consistent way of checking if the debug utils
extension is enabled.
Enables adding support for the debug utils markers with the command
graph disabled.
Bug: angleproject:4029
Change-Id: I5f8762921b06f54e400c25764012ab70e10bfb8d
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2055554
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
9f4ab98d
|
2020-02-13T12:49:05
|
|
Return angle::Result from more label functions.
This is necessary for the new Vulkan implementation.
Bug: angleproject:4029
Change-Id: I07ef54145252ff102c74179361436587bb330fc7
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2055553
Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
ef599fb0
|
2020-02-11T18:19:16
|
|
Vulkan: Fold glClear into draw call when command graph is disabled
This sets ContextVk::mRenderPassCommandBuffer properly when glClear get
called so that it wonr end up start anotyer render pass during setupDraw
call.
Bug: angleproject:4395
Change-Id: Id2110719ad4d70b4c410062466d32381fb5e1f88
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2050966
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
3b82506a
|
2020-02-11T09:35:38
|
|
Vulkan: Command graph linearization (Step 5).
Implements ES 3.1 support.
Bug: angleproject:4029
Change-Id: I3c08602cf4ec64621bfdb40cd40d142b666e6edf
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2046052
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
|
|
b40d48a6
|
2020-02-09T10:38:40
|
|
Vulkan: Remove ensure init from updateActiveImages.
The ensure should already be triggered from the front-end.
Bug: angleproject:3539
Bug: angleproject:3887
Change-Id: Ic7ee10f9c767440e55befb929b414c0c894754c9
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2046051
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
3c066404
|
2020-02-05T12:43:12
|
|
Vulkan: Command graph linearization (Step 4).
Implements GLES 3.0 functionality for the new command recording style.
Tested with angle_end2end_tests. dEQP/CTS testing will come later.
Bug: angleproject:4029
Change-Id: Ibdc4f1355a7b880946699ec227fd9807f4a27af9
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2040197
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
8257ac30
|
2020-02-07T14:17:08
|
|
Vulkan: Defer RenderPass image barriers.
We accumulate image barriers in two places:
* for GL sampler textures
* for GL framebuffer attachments (Render Targets)
Then we issue the barriers together in a single call before the RP.
This fixes a bug where we were missing a layout transition in some
cases when transitioning between a sampler and a render target. It
should also be faster to issue a single barrier before a RP than issue
several smaller barriers.
Bug: angleproject:3539
Bug: angleproject:4029
Change-Id: I180b770f0df6b44d209e5c618ba36bcc1c6372e4
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2044236
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
|
|
9681190d
|
2020-02-05T12:51:25
|
|
Make Debug marker functions return angle::Result.
Allows error handling in these functions. Necessary for the Vulkan
back-end.
Bug: angleproject:4209
Change-Id: I2092e58e719c6ee562807e1c7e8ad26988342855
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2040196
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
ca035803
|
2020-02-06T17:24:48
|
|
Vulkan: Add missing wrapper functions for XFB.
Found when working on the command graph refactor. Also replace the
offsets array with nullptr which should have the same effect.
Bug: angleproject:4029
Change-Id: I72e31c5403c645d72619e14aafef612e454183f1
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2043270
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
f1b2c4be
|
2020-02-05T10:22:19
|
|
Vulkan: Fix overlay with command graph disabled.
Also fixes the missing RenderPass count in the new command recorder.
Bug: angleproject:4029
Change-Id: If7f0cf9e80ef815781ad2684ad1d93a3ed4912ad
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2037786
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tobin Ehlis <tobine@google.com>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
20b1259a
|
2020-02-05T17:08:05
|
|
Vulkan: Command graph linearization (Step 2).
ES 2.0 is feature complete.
Passes all of the angle_end2end_tests with the new linear command
recording method. Also runs the T-Rex benchmark without any obvious
glitches. Likely has issues with creating too many RenderPasses. ES3
is mostly untouched.
Bug: angleproject:4029
Change-Id: Ic5acf3d768495fbffd07b07bf0a6f2b5787c51f8
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2012900
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
3e691bb9
|
2020-02-03T14:25:03
|
|
Vulkan: Count active renderpasses in overlay.
Useful debugging information for benchmarks. Also helpful when working
with the command graph to ensure we don't regress performance.
Bug: angleproject:4029
Bug: angleproject:4320
Change-Id: Ibe224c40a3acaca9231bf3869486a0f8bba07ba0
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2036402
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Tobin Ehlis <tobine@google.com>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
1736c47b
|
2020-01-31T11:16:41
|
|
Vulkan: Remove transient cmd buffer workaround
We no longer need this workaround. Also mCommandPoolFreeList dead code.
Bug: angleproject:3508
Change-Id: Ib73ddd431eb1bf9a55c3421111af4df5976cc1fb
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2033485
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tobin Ehlis <tobine@google.com>
Commit-Queue: Tobin Ehlis <tobine@google.com>
|
|
c73475fb
|
2020-01-29T11:37:05
|
|
Vulkan: Fix UtilsVk dirtying driver uniforms descriptor set binding
Most UtilsVk functions bind a descriptor set to index 0 (same as driver
uniforms). If that happens to close a render pass, all is well as
starting a new render pass ensures all descriptor sets are rebound.
However, if the render pass is not closed, or if a dispatch call is
issued (which never rebinds descriptor sets if not explicitly
necessary), then the driver uniforms descriptor set may end up never
rebound, causing a validation error (and possible crash or corruption).
This change makes sure that UtilsVk notifies the context when it binds a
descriptor set. The context then dirties the driver uniforms binding
as appropriate.
Bug: angleproject:4272
Change-Id: Ief20c7884fbe39712f844247489812afc70b30a9
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2027938
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
d9884d3e
|
2020-01-29T15:26:39
|
|
Vulkan: Don't dirty index/vertex buffers on each syncState.
This will help for the command graph refactor so we can set up the
command buffer barriers before we start the render pass for draw.
Bug: angleproject:3539
Bug: angleproject:4029
Change-Id: If5a55db6ac1e06609a3a1e2245d7ab351152886a
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2028450
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
a1f1cce6
|
2020-01-27T11:34:58
|
|
Vulkan: updateActiveImages: process each image once
There are two issues with processing the images multiple times:
- The graph trips up because on the first addWriteDependency, the
current writer pointer of the image will be set to the recorder, and
which on the next addWriteDependency creates a self-dependency.
- We transition the layout of the whole of the image, so doing that
multiple times is inefficient.
Bug: angleproject:4312
Change-Id: Ibae72e8698edf5db97139f48d68624d3e9a1d5db
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2022355
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Ian Elliott <ianelliott@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@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>
|
|
3712b2e4
|
2020-01-24T17:08:30
|
|
Vulkan: Command graph linearization (Step 1).
This initial prototype introduces a new feature to the Vulkan back-end
that disables the deferred command recording. The intent is to have a
lower CPU overhead during submission calls which currently walk a DAG.
The feature is not complete. Currently it only passes the ANGLE
SimpleOperationTests. Moreover it is extremely simple and only allows
use of one command buffer at a time. In the future we'll allow open
command buffers for recording outside and inside render pass commands
at the same time. We'll also support collapsing RenderPasses together
for some use cases.
Currently the prototype only passes "SimpleOperationTest". There are
quite a few unimplemented features like queries, XFB, etc.
Bug: angleproject:4029
Change-Id: I82760986683f55e37ac4ea559de6f4cffb6ef84e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1953485
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tobin Ehlis <tobine@google.com>
|
|
abaeb415
|
2020-01-20T20:33:23
|
|
Vulkan: Fix setupDraw when VK_EXT_transform_feedback is not enabled
There's no dirty bit handler if VK_EXT_transform_feedback disabled, but
we're setting that dirty bit in syncState. This results in calling a null
method pointer. Skip the invalidate if the extension is not enabled.
gl::LogMessage::~LogMessage() at ./../../third_party/angle/src/common/debug.cpp:0
rx::ContextVk::setupDraw(gl::Context const*, gl::PrimitiveMode, int, int, int, gl::DrawElementsType, void const*, angle::BitSetT<11ul, unsigned long, unsigned long>, rx::vk::priv::SecondaryCommandBuffer**) at ./../../third_party/angle/src/libANGLE/renderer/vulkan/ContextVk.cpp:844
rx::ContextVk::drawArrays(gl::Context const*, gl::PrimitiveMode, int, int) at ./../../third_party/angle/src/libANGLE/renderer/vulkan/ContextVk.cpp:1698
gl::Context::drawArrays(gl::PrimitiveMode, int, int) at ./../../third_party/angle/src/libANGLE/Context.inl.h:112
gl::DrawArrays(unsigned int, int, int) at ./../../third_party/angle/src/libGLESv2/entry_points_gles_2_0_autogen.cpp:926
(anonymous namespace)::AttributeLayoutNonIndexed::Draw(int, unsigned int, unsigned short const*) at ./../../third_party/angle/src/tests/gl_tests/AttributeLayoutTest.cpp:431
(anonymous namespace)::AttributeLayoutTest::Run(bool) at ./../../third_party/angle/src/tests/gl_tests/AttributeLayoutTest.cpp:305
[This stack is from the added assert; calling a null function pointer
crashes without producing a useful stack trace.]
Bug: angleproject:4326
Change-Id: I036ae322bddc4865229fa3fe7ea72a4344b99f83
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2011408
Commit-Queue: Michael Spang <spang@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
579c5940
|
2020-01-17T13:20:21
|
|
Vulkan: Rename onGraphAccess to onResourceAccess.
Clarifies the function for the upcoming command graph linearization.
Bug: angleproject:4029
Change-Id: Ib50997c007053757de533f69c155a92d7555e0b2
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2003235
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
441b72f0
|
2020-01-16T14:48:39
|
|
Vulkan: Make ContextVk own ResourceUseList.
This moves the resource use tracking functionality out of CommandGraph.
Making the list a separate class helps the implementation avoid tricky
circular include problems.
Bug: angleproject:4029
Change-Id: I3288fc685b21e949f12b0796109a2b7bb117c249
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2002931
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
4ff1651e
|
2020-01-16T12:42:27
|
|
Vulkan: Add ResourceUseList helper.
This abstracts away the ResourceUse tracking from CommandGraph. Pulling
it out will allow us to more easily swap resource use tracking into
ContextVk. The command graph is eventually going away so we need to
move functionality out of CommandGraph.
Bug: angleproject:4029
Change-Id: Icc3bcc824510b03e91f8ff010a82751a81516bfa
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2002930
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
c4053a9e
|
2020-01-03T15:03:32
|
|
Vulkan: Reduce the frequency of driver uniform binds
Bind the driver uniforms set only when actually updating them.
Bug: angleproject:4261
Change-Id: Ie1f1ab61eef58c5e0c713d285050c79c4cfccb32
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1986928
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Mohan Maiya <m.maiya@samsung.com>
|
|
8fde1151
|
2020-01-09T14:22:35
|
|
Vulkan: fix default uniform descriptor rebind on program change
When the program binding changes, we set the descriptor sets binding
dirty bit if the program had any textures, UBOs, SSBOs, images or atomic
counters. The check for default uniforms was missing. So if the two
programs had no resources and were only using default uniforms, then
drawing with one after the other didn't update the descriptor set
binding of the default uniforms for the second draw.
Bug: angleproject:4277
Change-Id: I631a1619658ee713484cfaee99fe1e39987e16e7
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1993408
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
|
|
4ffc254e
|
2020-01-08T09:58:24
|
|
Only initialize the timestamp query pools if the extension is available.
Also added a few assertions to ensure that timestamp queries aren't attempted
when support is missing.
Bug: angleproject:4114
Change-Id: Ie6d7d5face59f9bc137aebd86c9d0e965773e6e6
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1992184
Commit-Queue: Eric Binet <ericbinet@google.com>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
c8d7f047
|
2020-01-07T10:06:07
|
|
Vulkan: Update number of samples when changing draw framebuffer
This fixes a crash (preceeded by Vulkan validation errors) when running
the following test:
--gtest_filter=dEQP.KHR_GLES31/core_texture_storage_multisample_FunctionalTests_blitting_multisampled_depth_attachment* --use-angle=vulkan
The problem is that GraphicsPipelineDesc::updateRasterizationSamples()
is rarely called (e.g. glBindFramebuffer). The above dEQP test changes
between draw attachments that do and don't have multisampling enabled.
The number of samples is set (the first time) to have multisampling
enabled, and never changed, even though other attachments don't have
multisampling.
FramebufferVk::syncState() now calls updateRasterizationSamples(). That
fix uncovered a latent problem: when an application destroys all
framebuffers (including the draw framebuffer), the ContextVk still
points at the old draw framebuffer's FramebufferVk (now freed). This
is fixed with new plubming to clean-up ContextVk::mDrawFramebuffer.
Bug: angleproject:4240
Change-Id: I151ec40ab821efc07c26323c34275c9165ad2ed5
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1983393
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Ian Elliott <ianelliott@google.com>
|
|
c713abfd
|
2019-12-23T12:03:02
|
|
Vulkan:Transform/feedback instanced draw support
These fixes allow dEQP 3.1 KHR-GLES31.core.vertex_attrib_binding.basic-input*
test cases to pass.
This fixes a bug in instanced drawing with transform feedback buffers
where we were overwriting the initial transform feedback output as new
instances were drawn. To fix this, the vertices in each draw are passed
into a uniform value and the output is offset based on the current instance
and the number of vertices in the draw.
It also fixes a validation error where transform feedback descriptor
was sometimes setting a buffer range of 0. This is not allowed, so in
the 0 case we pull the actual buffer size from the bufferHelper object.
Bug: angleproject:4236
Change-Id: Ib72898a0e6caab96c446c1e996a6124d2c001193
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1979600
Commit-Queue: Tobin Ehlis <tobine@google.com>
Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
Reviewed-by: Tobin Ehlis <tobine@google.com>
|
|
5fd73782
|
2019-08-09T11:46:46
|
|
Vulkan: Use volk to load vk* func ptrs
Thanks to Jamie Madill for some fixes to get all CI test passing w/ volk.
This change updates all ANGLE targets that use Vulkan to dyanmically
link all of the VK entrypoints using the volk OSS library from
https://github.com/zeux/volk.
It's only two source files so baking them directly into ANGLE repo.
Also it's used in both the tests and libANGLE trees so added to
src/common/third_party/volk dir.
Updated volk and the renderer to track latest instance and device
that were loaded and renderer will refresh vk* function pointers if
the current and previous device and/or instance don't match. This
prevents errors in the test framework as we transition between
backends, especially between VK HW & SwiftShader ICDs.
This change rolls the Vulkan Loader forward to use the latest loader
version which no longer allows static linking but requires dynamic
linking.
Bug: angleproject:3740
Bug: angleproject:4092
Bug: angleproject:4162
Bug: angleproject:4210
Bug: angleproject:4225
Change-Id: I8a0b7d24c9545bbfdfaa4b9357a9bfe6793e0140
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1965640
Commit-Queue: Tobin Ehlis <tobine@google.com>
Reviewed-by: Tobin Ehlis <tobine@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
caa6eccd
|
2019-10-27T13:46:56
|
|
Vulkan: Implement Transform Feedback support via extension
Implemented transform feedback extension path. Where
VK_EXT_transform_feedback is supported, extension path will be taken
over an emulation path. Extension path has advantages in terms of
performance.
BUG=angleproject:3206
Test: dEQP-GLES3.functional.transform_feedback.*
angle_end2end_tests --gtest_filter=TransformFeedbackTest*
Change-Id: Ia07c23afb289d9c67073469a97b714ec96f5265a
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1882767
Commit-Queue: Mohan Maiya <m.maiya@samsung.com>
Reviewed-by: Mohan Maiya <m.maiya@samsung.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
|
|
27c89d2b
|
2019-11-25T10:22:01
|
|
Vulkan: fix BufferVk::map() synchronization
4398b2b6a2ac13034dff249d8c049c4047b5fed2 made finishToSerial() in
BufferVk::map() conditional to whether the serial is in use to work
around a performance regression. Notes:
- Prior to 087f1384f233792921d34c0ca5b5a90fac75b070, finishToSerial
already did that, but that check was inadvertently removed.
- finishToSerial waits for the smallest serial that's bigger than or
equal to the requested serial.
- The flush() call in BufferVk::map() was conditional to whether the
serial is in use, but it really meant to check whether the buffer has
pending commands in the graph.
The end result is that there was an unnecessary flush in BufferVk::map()
if we had to wait for a previous serial to finish.
This change makes the flush conditional to whether the buffer has
pending commands in the graph, and the finishToSerial call to whether
the serial is not yet finished.
Bug: angleproject:3994
Change-Id: Idca436ef2439bcc8c59396a07b2591c1dfadd669
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1932341
Reviewed-by: Brandon Schade <b.schade@samsung.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
c373dfd8
|
2019-11-22T08:48:22
|
|
Vulkan : Handle dirty state correctly when there are muiltiple VAOs
If vertex array object binding is changed, we need to update
the pipeline cache with the attribute information of the newly
bound VAO. We cache the strides of attributes because emulated
attributes will have strides that don't match the stride info
cached in its binding struct. Also added a test case that
switches between multiple VAOs.
Bug: angleproject:4127
Test: angle_end2end_tests.exe --gtest_filter=SimpleStateChangeTestES31.MultipleVertexArrayObjectRendering
Change-Id: I4f23aec33d5aa5988baa41f3c63db5534daf75ca
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1917453
Reviewed-by: Tobin Ehlis <tobine@google.com>
Commit-Queue: Tobin Ehlis <tobine@google.com>
|
|
a825eb70
|
2019-11-21T11:37:17
|
|
Implement BaseVertex draw calls for Vulkan, OpenGL, NULL contexts.
This adds support for the following functions:
- glDrawElementsBaseVertex
- glDrawRangeElementsBaseVertex
- glDrawElementsInstancedBaseVertex
Bug: angleproject:3582
Bug: angleproject:3402
Bug: angleproject:4166
Change-Id: I83770f62e3a918c0965fd4ca8c7d9e598b8b4154
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1929083
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
968df09e
|
2019-11-11T16:48:14
|
|
Treat VK_TIMEOUT as an error
The fence wait time was increased to 120 seconds, so we don't expect
VK_TIMEOUT to be returned by a healty GPU. This change makes it so that
when VK_TIMEOUT is returned, we will treat this as an error and
propagate it to the GLES application as a GL_INVALID_OPERATION.
It is expected that the GL application will re-initialize ANGLE which
will also reinitialize the Vulkan device (and hopefully clean up the
error). This is not our final design for ANGLE's VK_TIMEOUT handling,
since we expect to expand our Vulkan device lost error handling when
implementing the GLES 3.2 robustness requirements. This will likely
improve ANGLE's VK_TIMEOUT handling as well.
Bug: angleproject:4043
Test: Manually force VK_TIMEOUT (lower kMaxFenceWaitTimeNs)
Change-Id: I2449ad214ada176014a1702a9b3417d4498d070f
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1910722
Commit-Queue: Tim Van Patten <timvp@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
|
|
b3c4dffd
|
2019-11-12T14:42:23
|
|
Vulkan: Fix glMemoryBarrier* implementation
The indirect bit handling is no longer necessary, as setup*Indirect
functions already add the barriers if necessary. The framebuffer bit
is unnecessary as the image layout transition from storage image to
framebuffer attachment would already add the necessary barrier. Image
access bit was indeed necessary, but so is shader storage bit which is
added.
Bug: angleproject:3574
Bug: angleproject:3879
Bug: angleproject:3934
Change-Id: I9da722e7a34941932731335af2313783295031ba
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1913080
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
052167bc
|
2019-08-13T14:09:04
|
|
Vulkan: Mipmap is unconditionally enabled in ANGLE
ANGLE always enables the Mipmap. The fix does redefining
the image with mipmaps and replace the origin one only
when it is necessary.
Bug: angleproject:3737
Change-Id: Ia33a16fd7feae303fb114988059c4eec58c4232d
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1750627
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Reviewed-by: Ian Elliott <ianelliott@google.com>
|
|
1efcbdb6
|
2019-10-22T12:32:04
|
|
Vulkan: Fix sampler object lifetime.
Using the same scheme as we do for VkImageViews we can track VkSampler
lifetime using SharedResourceUse. This fixes the race condition that
could occur when samplers are deleted in one Context while being used
in another.
This fixes the last known resource lifetime issue. The multithreading
tests should now pass without validation errors.
Also adds regression tests to angle_end2end_tests.
Bug: angleproject:2464
Change-Id: I9dbed5062a0863b240ddf1a9b5d28560334934de
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1869548
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Ian Elliott <ianelliott@google.com>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
df9a7500
|
2019-10-21T15:32:27
|
|
Remove forceNonZeroScissor workaround
The original driver bug no longer exists after upgrading the bots. This
workaround has the side effect causing the bug 3867.
Bug: angleproject:3407
Bug: angleproject:3867
Change-Id: I64f2e41729f209a1cef5ba49140650207666992c
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1870845
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
68591eff
|
2019-10-13T15:05:23
|
|
Vulkan: Store ImageView access in the graph.
This will ensure we don't destroy the image views when they are still
in use by other Contexts.
Bug: angleproject:2464
Change-Id: I1d3ba2ad241250e31ea32873446c4cb23971750d
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1843236
Reviewed-by: Tim Van Patten <timvp@google.com>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
7f418fc2
|
2019-10-01T07:56:53
|
|
Vulkan: lineloop support for DrawArrayIndirect
Add support for lineloops.
Includes a compute shader for generating an index
buffer to draw lineloop.
Instancing turns out to be a special case for indirect draws if we
have vertex attributes that need to be emulated (e.g. divisor too
large or native vertex format not available).
Test: dEQP.GLES31/functional_draw_indirect_*
angle_end2end_tests --gtest_filter=LineLoopIndirectTest.*/*
dEQP.GLES3/functional_draw_*
Bug: angleproject:3564
Change-Id: I1fdabe2c8a690c8b6df9e252e1e839e08796bcca
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1834682
Commit-Queue: Courtney Goeltzenleuchter <courtneygo@google.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
16944ed2
|
2019-10-16T14:05:51
|
|
Vulkan: Fix ASSERT that could be triggered on some swaps.
Unclear why this wasn't reproducing on our integrated tests. Seems to
affect most Vulkan tests.
Regression likely introduced with the multithreading code.
Bug: angleproject:2464
Change-Id: I62a0c1a4f5e5bf63efdef2a979d9b2efb6a1ea81
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1864314
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
8896e18e
|
2019-10-08T16:07:52
|
|
Fix the missing global memory barriers
This adds the transtlations of GL_SHADER_IMAGE_ACCESS_BARRIER_BIT, and
GL_FRAMEBUFEER_BARRIER_BIT to the vulkan backend.
Bug: angleproject:3934
Change-Id: I2bd86a16b461cf7dc01d0d4386f49365a5292446
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1847172
Commit-Queue: Jie A Chen <jie.a.chen@intel.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
f750d86a
|
2019-10-01T17:52:37
|
|
Trigger a flush() when the command graph contains too many objects
If an App repeatedly issues GL commands like glTextImage2D without a
finish/flush/draw, it's possible for ANGLE to exhaust the available
Vulkan memory allocations and exceed
VkPhysicalDeviceLimits::maxMemoryAllocationCount. When this occurs,
the Vulkan validation layers will trigger an error and cause dEQP
tests to fail.
This change will query the backend if a flush() should be performed
during each of the GL delete calls, and perform it if necessary. This
will cause a queue submission and a Serial increment, allowing the
allocated memory to be freed, preventing the validation errors.
Bug: angleproject:3818
Test: KHR-GLES3.copy_tex_image_conversions.forbidden.renderbuffer_cubemap_*
Change-Id: I26d0a47aa7bca10c25bc8141f1523afbab0b3b5b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1834781
Commit-Queue: Tim Van Patten <timvp@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
514d5e28
|
2019-09-25T14:37:44
|
|
Vulkan: Remove global finish in ContextVk::onDestroy.
Should be no longer necessary with shared garbage collection in
RendererVk.
Bug: angleproject:2464
Change-Id: I8ebd910cf36dd0b18d83d32981db28599d443ec3
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1825445
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
f03259ad
|
2019-09-19T11:31:40
|
|
Vulkan: lineloop support for DrawElementsIndirect
Add support for lineloops.
Includes a compute shader for converting lineloop index
buffer with optional restart into linestrip.
Test:
dEQP.GLES31/functional_draw_indirect_*
angle_end2end_tests --gtest_filter=LineLoopIndirectTest.*/*
Bug: angleproject:3564
Change-Id: I12d08db1c8d99867f0611e53be50193647695260
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1797106
Commit-Queue: Courtney Goeltzenleuchter <courtneygo@google.com>
Reviewed-by: Tobin Ehlis <tobine@google.com>
|
|
f10bf6bf
|
2019-09-26T10:27:18
|
|
Vulkan: Implement multi-threaded GL.
The main component of this change is to make vk::BufferHelper,
vk::ImageHelper and vk::SyncHelper use a common path. We introduce a
new "vk::SharedGarbage" helper class that stores small lists of garbage
from individual objects like an ImageHelper or BufferHelper. The
SharedGarbage is stored in the RendererVk with the ResourceUse of the
helper object. The ResourceUse tells RendererVk when it is safe to
destroy the GarbageObjects.
New "onGraphAccess" commands are added in a few places to enable the
common garbage collection path. A couple Context-only resources like
default attributes now are referenced where they were not before.
Also reorganizes some functions so we can add a few helpful ASSERTs
to our graph dependencies. Added "updateCurrentAccessNodes" for this.
Also adds a "RendererScoped" helper to replace many uses of
"ContextScoped".
The multithreading EGL tests mostly pass but have some remaining
flakiness so cannot yet be enabled.
Bug: angleproject:2464
Change-Id: Ia3e3ae8848d731abf3f21ebe04c33e381e130be0
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1808444
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
087f1384
|
2019-09-26T10:19:36
|
|
Vulkan: Introduce CommandQueue helper class.
Wraps the functionality of managing monitoring workloads of commands
being sent to the VkQueue. In the future this will likely move to the
RendererVk class. This refactor allows the move to be easier to manage
and will let us more easily change ownership in the future if we have
to again.
Bug: angleproject:2464
Change-Id: I061bc2ba939d7004d74d00b976a753a53c96445c
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1804884
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
71c1138d
|
2019-08-16T12:23:04
|
|
Vulkan: Emulate instanced attrib divisor
This sets instancedArrays[ANGLE|EXT] extenstions as always
supported regardless of underlying Vulkan HW's max vertex attrib
divisor.
Then detect instances where app sets a divisor that isn't supported
by hardware and emulate those cases. Emulations is accomplished by
copying the instanced attribs to a new buffer where each attrib is
present once per instance, using the attrib divisor value as a
factor to replicate the attribs, and then setting the actual divisor
value for the draw to "1".
Also, we only store 8 bits for the divisor used in the PSO, so this
code also handles emulation of the case where divisor is > 255.
This is passing all of the drawInstanced/Elements dEQP tests
where divisor has to be emulated.
Also enabled end2end InstancingTestES3 for Vulkan backend.
Bug: angleproject:2672
Change-Id: I9932f9eab49b16a19e8bbd35dacaf3b5a27a213f
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1758689
Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
Commit-Queue: Tobin Ehlis <tobine@google.com>
|
|
3c2a5230
|
2019-09-23T11:07:18
|
|
Vulkan: 8bit index support for DrawElementsIndirect
Add partial support for DrawElementsIndirect.
This supports all primitives types except lineloop.
Includes a compute shader for converting 8bit index
buffers to 16bit index buffers where the index buffer range
is defined in a GPU buffer.
Test:
dEQP.GLES31/functional_draw_indirect_*
Bug: angleproject:3564
Change-Id: Ibe9c55323e46a398f0b703cd8597a72ba6790570
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1792948
Commit-Queue: Courtney Goeltzenleuchter <courtneygo@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
7c8e276c
|
2019-09-23T11:06:39
|
|
Vulkan: Add support for DrawArraysIndirect
Add partial support for DrawArraysIndirect.
This supports all primitives types except lineloop.
Test:
dEQP.GLES31/functional_draw_indirect_*
Bug: angleproject:3564
Change-Id: I065417a848390070c9f116db6fd3f90c12fb3886
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1811873
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tobin Ehlis <tobine@google.com>
Commit-Queue: Courtney Goeltzenleuchter <courtneygo@google.com>
|
|
33ffed01
|
2019-09-26T10:19:35
|
|
Vulkan: Clean up garbage APIs.
Instead of dumping resources to a context, we use the release APIs
consistently. Refactoring/cleanup change only. Should have very litte
impact on runtime behaviour.
Bug: angleproject:2464
Change-Id: I2dc7f8316c466f7ccfad50a7b792ba0ee7bc2e49
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1804883
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
29f7916f
|
2019-09-25T14:37:35
|
|
Vulkan: Store current Serial in RendererVk.
This gives a stronger ordering on serials than if they're acquired by
the ContextVk. Part of the steps of implementing multithreaded GL on
Vulkan.
Implements a "globalFinish" method in RendererVk that is triggered on
ContextVk destruction. This helped fixed some racy object deletion
situations where the ContextVk could have queued work that uses deleted
objects. Flush all the Contexts before destruction to avoid these
hanging deleted objects.
Bug: angleproject:2464
Change-Id: I244e9bbf6cd47b272c7cbca45b0fb1eb46d626fc
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1791268
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
b540da89
|
2019-09-19T14:19:12
|
|
Vulkan: Use ResourceUse to track object lifetime.
With the new resource tracking scheme the CommandGraph, tracking a
"Context serial" aka "current" serial is no longer necessary for
CommandGraphResources. Serial tracking has been moved to the shared
ResourceUse struct that gets updated on a command submission. Thus
we don't need to store the serial as a current separate piece of info
in BufferHelper/ImageHelper.
Will lead to further redesign for the multi-threading support for
Vulkan.
Bug: angleproject:2464
Change-Id: I1ae4bcc27fcfb93422b4ab4c9682a458e482f295
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1785990
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
01f7e545
|
2019-09-23T13:40:59
|
|
Vulkan: Make SharedResourceUse a custom type.
Gives us better performance when using the command graph. Performance
regressed significantly in "Vulkan: Track resource usage via counter."
Perf test scores:
before CL: 1060
after CL: 1245
this CL: 1085
The small remaining regression can be investigated more fully in the
future. It's possible there is some small acceptable regression when
switching the command graph design for multithreading.
Test: angle_perftests (DrawCall*vulkan_null*manyvbos*)
Bug: angleproject:2464
Change-Id: I5e625999a8e8b3e1a045908c51e549f472cd4209
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1817102
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
d7f28aae
|
2019-09-19T14:19:10
|
|
Vulkan: Pass CommandGraph when updating serials.
This is in preparation for storing a pointer to a shared resource use
structure.
Bug: angleproject:2464
Change-Id: I8f4ba1c71de6ad6a27ac06fc8012a0e94267cc16
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1785988
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
bf4268a3
|
2019-09-17T13:33:56
|
|
Fix misc VS2019 bool conversion warnings
BUG=angleproject:3921
Change-Id: I06de5131f98b27c2556ed60dd7228c9cfa154802
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1811858
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
db09eb68
|
2019-09-18T13:40:39
|
|
Increase the max fence wait time in debug builds
Also minor refactor to avoid duplicating the constant by having
both RendererVk and ContextVk retrieve the wait time via new
member function RendererVk::getMaxFenceWaitTimeNs().
BUG=angleproject:3915
Change-Id: I9a283a4e0f34a6a1f840c350dc667f4fc27f59e4
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1810066
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
050b124d
|
2019-06-30T03:26:18
|
|
Reland "Vulkan: Debug overlay"
This is a reland of e54d0f90d1a165404236fd7abd1b05ddd041a686
This was reverted due to a build failure as a result of a missing
virtual destructor in the widget base class.
Original change's description:
> Vulkan: Debug overlay
>
> A debug overlay system for the Vulkan backend designed with efficiency
> and runtime configurability in mind. Overlay widgets are of two
> fundamental types:
>
> - Text widgets: A single line of text with small, medium or large font.
> - Graph widgets: A bar graph of data.
>
> Built on these, various overlay widget types are defined that gather
> statistics. Five such types are defined with one widget per type as
> example:
>
> - Count: A widget that counts something. VulkanValidationMessageCount
> is an overlay widget of this type that shows the number of validation
> messages received from the validation layers.
> - Text: A generic text. VulkanLastValidationMessage is an overlay
> widget of this type that shows the last validation message.
> - PerSecond: A value that gets reset every second automatically. FPS is
> an overlay widget of this type that simply gets incremented on every
> swap().
> - RunningGraph: A graph of last N values. VulkanCommandGraphSize is an
> overlay of this type. On every vkQueueSubmit, the number of nodes in
> the command graph is accumulated. On every present(), the value is
> taken as the number of nodes for the whole duration of the frame.
> - RunningHistogram: A histogram of last N values. Input values are in
> the [0, 1] range and they are ranked to N buckets for histogram
> calculation. VulkanSecondaryCommandBufferPoolWaste is an overlay
> widget of this type. On vkQueueSubmit, the memory waste from command
> buffer pool allocations is recorded in the histogram.
>
> Overlay font is placed in libANGLE/overlay/ which gen_overlay_fonts.py
> processes to create an array of bits, which is processed at runtime to
> create the actual font image (an image with 3 layers).
>
> The overlay widget layout is defined in overlay_widgets.json which
> gen_overlay_widgets.py processes to generate an array of widgetss, each
> of its respective type, and sets their properties, such as color and
> bounding box. The json file allows widgets to align against other
> widgets as well as against the framebuffer edges.
>
> Two compute shaders are implemented to efficiently render the UI:
>
> - OverlayCull: This shader creates a bitset of Text and Graph widgets
> whose bounding boxes intersect a corresponding subgroup processed by
> OverlayDraw. This is done only when the enabled overlay widgets are
> changed (a feature that is not yet implemented) or the surface is
> resized.
> - OverlayDraw: Using the bitsets generated by OverlayCull, values that
> are uniform for each workgroup (set to be equal to hardware subgroup
> size), this shader loops over enabled widgets that can possibly
> intersect the pixel being processed and renders and blends in texts
> and graphs. This is done once per frame on present().
>
> Currently, to enable overlay widgets an environment variable is used.
> For example:
>
> $ export ANGLE_OVERLAY=FPS:VulkanSecondaryCommandBufferPoolWaste
> $ ./hello_triangle --use-angle=vulkan
>
> Possible future work:
>
> - On Android, add settings in developer options and enable widgets based
> on those.
> - Spawn a small server in ANGLE and write an application that sends
> enable/disable commands remotely.
> - Implement overlay for other backends.
>
> Bug: angleproject:3757
> Change-Id: If9c6974d1935c18f460ec569e79b41188bd7afcc
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1729440
> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Bug: angleproject:3757
Change-Id: I47915d88b37b6f882c686c2de13fca309a10b572
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1780897
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
fc58af47
|
2019-09-02T07:46:44
|
|
Revert "Vulkan: Debug overlay"
This reverts commit e54d0f90d1a165404236fd7abd1b05ddd041a686.
Reason for revert: causes compile failure on Linux CFI bot.
Sample build: https://ci.chromium.org/p/chromium/builders/ci/Linux%20CFI/14810
Sample log: https://logs.chromium.org/logs/chromium/buildbucket/cr-buildbucket.appspot.com/8903575125463586160/+/steps/compile/0/stdout?format=raw
Original change's description:
> Vulkan: Debug overlay
>
> A debug overlay system for the Vulkan backend designed with efficiency
> and runtime configurability in mind. Overlay widgets are of two
> fundamental types:
>
> - Text widgets: A single line of text with small, medium or large font.
> - Graph widgets: A bar graph of data.
>
> Built on these, various overlay widget types are defined that gather
> statistics. Five such types are defined with one widget per type as
> example:
>
> - Count: A widget that counts something. VulkanValidationMessageCount
> is an overlay widget of this type that shows the number of validation
> messages received from the validation layers.
> - Text: A generic text. VulkanLastValidationMessage is an overlay
> widget of this type that shows the last validation message.
> - PerSecond: A value that gets reset every second automatically. FPS is
> an overlay widget of this type that simply gets incremented on every
> swap().
> - RunningGraph: A graph of last N values. VulkanCommandGraphSize is an
> overlay of this type. On every vkQueueSubmit, the number of nodes in
> the command graph is accumulated. On every present(), the value is
> taken as the number of nodes for the whole duration of the frame.
> - RunningHistogram: A histogram of last N values. Input values are in
> the [0, 1] range and they are ranked to N buckets for histogram
> calculation. VulkanSecondaryCommandBufferPoolWaste is an overlay
> widget of this type. On vkQueueSubmit, the memory waste from command
> buffer pool allocations is recorded in the histogram.
>
> Overlay font is placed in libANGLE/overlay/ which gen_overlay_fonts.py
> processes to create an array of bits, which is processed at runtime to
> create the actual font image (an image with 3 layers).
>
> The overlay widget layout is defined in overlay_widgets.json which
> gen_overlay_widgets.py processes to generate an array of widgetss, each
> of its respective type, and sets their properties, such as color and
> bounding box. The json file allows widgets to align against other
> widgets as well as against the framebuffer edges.
>
> Two compute shaders are implemented to efficiently render the UI:
>
> - OverlayCull: This shader creates a bitset of Text and Graph widgets
> whose bounding boxes intersect a corresponding subgroup processed by
> OverlayDraw. This is done only when the enabled overlay widgets are
> changed (a feature that is not yet implemented) or the surface is
> resized.
> - OverlayDraw: Using the bitsets generated by OverlayCull, values that
> are uniform for each workgroup (set to be equal to hardware subgroup
> size), this shader loops over enabled widgets that can possibly
> intersect the pixel being processed and renders and blends in texts
> and graphs. This is done once per frame on present().
>
> Currently, to enable overlay widgets an environment variable is used.
> For example:
>
> $ export ANGLE_OVERLAY=FPS:VulkanSecondaryCommandBufferPoolWaste
> $ ./hello_triangle --use-angle=vulkan
>
> Possible future work:
>
> - On Android, add settings in developer options and enable widgets based
> on those.
> - Spawn a small server in ANGLE and write an application that sends
> enable/disable commands remotely.
> - Implement overlay for other backends.
>
> Bug: angleproject:3757
> Change-Id: If9c6974d1935c18f460ec569e79b41188bd7afcc
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1729440
> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
> Reviewed-by: Jamie Madill <jmadill@chromium.org>
TBR=geofflang@chromium.org,syoussefi@chromium.org,jmadill@chromium.org
Bug: angleproject:3757
Change-Id: Ib08e2e7b1a9449ca097673acb11655df5d2bbf31
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1778862
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
|
|
912e52d8
|
2019-08-23T00:25:09
|
|
Vulkan: Storage image support
Image bindings are placed after atomic counters in the "resources"
descriptor set.
There are two issues yet to be addressed:
- GL can create a 2D (array) view of a 3D image, but this is not allowed
in Vulkan. If this cannot be made possible, emulation needs to be
done.
https://github.com/KhronosGroup/Vulkan-Docs/issues/1033
- GL can create an image view of a texture with a different format and
have the data reinterpreted. This is not currently done.
Bug: angleproject:3563
Change-Id: I95c4d92c50bb033212a9a67f3f2d6f97c074c7bf
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1767366
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
e54d0f90
|
2019-06-30T03:26:18
|
|
Vulkan: Debug overlay
A debug overlay system for the Vulkan backend designed with efficiency
and runtime configurability in mind. Overlay widgets are of two
fundamental types:
- Text widgets: A single line of text with small, medium or large font.
- Graph widgets: A bar graph of data.
Built on these, various overlay widget types are defined that gather
statistics. Five such types are defined with one widget per type as
example:
- Count: A widget that counts something. VulkanValidationMessageCount
is an overlay widget of this type that shows the number of validation
messages received from the validation layers.
- Text: A generic text. VulkanLastValidationMessage is an overlay
widget of this type that shows the last validation message.
- PerSecond: A value that gets reset every second automatically. FPS is
an overlay widget of this type that simply gets incremented on every
swap().
- RunningGraph: A graph of last N values. VulkanCommandGraphSize is an
overlay of this type. On every vkQueueSubmit, the number of nodes in
the command graph is accumulated. On every present(), the value is
taken as the number of nodes for the whole duration of the frame.
- RunningHistogram: A histogram of last N values. Input values are in
the [0, 1] range and they are ranked to N buckets for histogram
calculation. VulkanSecondaryCommandBufferPoolWaste is an overlay
widget of this type. On vkQueueSubmit, the memory waste from command
buffer pool allocations is recorded in the histogram.
Overlay font is placed in libANGLE/overlay/ which gen_overlay_fonts.py
processes to create an array of bits, which is processed at runtime to
create the actual font image (an image with 3 layers).
The overlay widget layout is defined in overlay_widgets.json which
gen_overlay_widgets.py processes to generate an array of widgetss, each
of its respective type, and sets their properties, such as color and
bounding box. The json file allows widgets to align against other
widgets as well as against the framebuffer edges.
Two compute shaders are implemented to efficiently render the UI:
- OverlayCull: This shader creates a bitset of Text and Graph widgets
whose bounding boxes intersect a corresponding subgroup processed by
OverlayDraw. This is done only when the enabled overlay widgets are
changed (a feature that is not yet implemented) or the surface is
resized.
- OverlayDraw: Using the bitsets generated by OverlayCull, values that
are uniform for each workgroup (set to be equal to hardware subgroup
size), this shader loops over enabled widgets that can possibly
intersect the pixel being processed and renders and blends in texts
and graphs. This is done once per frame on present().
Currently, to enable overlay widgets an environment variable is used.
For example:
$ export ANGLE_OVERLAY=FPS:VulkanSecondaryCommandBufferPoolWaste
$ ./hello_triangle --use-angle=vulkan
Possible future work:
- On Android, add settings in developer options and enable widgets based
on those.
- Spawn a small server in ANGLE and write an application that sends
enable/disable commands remotely.
- Implement overlay for other backends.
Bug: angleproject:3757
Change-Id: If9c6974d1935c18f460ec569e79b41188bd7afcc
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1729440
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
56ba54cc
|
2019-08-08T13:03:34
|
|
Support separate read and draw surfaces in eglMakeCurrent
Update ANGLE's default framebuffer implementation to support reading
and writing to different surfaces within the same framebuffer.
Bug: angleproject:2620
Test: EGLSurfaceTest[3]
Change-Id: I4b1ea04ca87a751f80cf190bf3adec148fc4fce3
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1744746
Commit-Queue: Tim Van Patten <timvp@google.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
57ad1e12
|
2019-08-23T14:53:26
|
|
Vulkan: Introduce ContextScoped
Scoped is changed to DeviceScoped and a ContextScoped class is added.
The former destroys objects at the end of scope, and the latter releases
them.
Bug: angleproject:3757
Change-Id: Ia0bbded53e94af9c8c72c77d07306d6724c6c409
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1769060
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
cd31f286
|
2019-06-25T14:22:41
|
|
Implement Draw base vertex and base instance functions
This patch implements functionality of glDrawArraysInstancedBaseInstanceANGLE,
glDrawElementsInstancedBaseVertexBaseInstanceANGLE,
glMultiDrawArraysInstancedBaseInstanceANGLE,
and glMultiDrawElementsInstancedBaseVertexBaseInstanceANGLE
Workaround for OpenGL driver on Mac:
gl_VertexID on Mac with AMD GPU doesn't include baseVertex value.
So replace gl_VertexID with (gl_VertexID + angle_BaseVertex) if any.
Workaround for Vulkan GLSL:
gl_InstanceIndex on Vulkan includes baseInstance. So replace
gl_InstanceIndex with (gl_InstanceIndex - angle_BaseInstance) when
angle_BaseInstance is declared.
Bug: chromium:891861, angleproject:3402
Change-Id: Ia1d94b5d4d7da7e635468c05c962c4f7eb1b1919
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1750126
Commit-Queue: Shrek Shao <shrekshao@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
83a369bb
|
2019-08-14T10:39:34
|
|
Vulkan: Improve cubemap emulation seam handling
Changes seamful cubemap emulation to always compute the derivative,
emulating the bias parameter by scaling the provided derivatives.
This results in more accurate mipmap levels for seams within primitives.
There are some artifacts as a result of how derivatives are calculated,
but this matches the native driver.
Bug: angleproject:3243
Bug: angleproject:3732
Change-Id: Icb976e2a7e14cb4210645571edc037d4e607bd0d
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1754383
Commit-Queue: James Dong <dongja@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
1d5aaa6c
|
2019-08-06T11:20:13
|
|
Vulkan: support dynamic indices in array of arrays
Expands existing struct-sampler rewrite to flatten arrays of arrays.
This allows us to support dynamically-uniform array indexing, which is
core in ES 3.2.
Samplers inside (possibly nested) structs are broken apart as before,
and then if the type resulting from merging the array sizes of the field
and its containing structs is an array of array, the array is flattened.
Also adds an offset parameter to functions taking in arrays to account
for this translation.
As a result of outer array sizes leaking into function signatures,
functions taking arrays of different sizes are duplicated according to
how the function is invoked.
Bug: angleproject:3604
Change-Id: Ic9373fd12a38f19bd811eac92e281055a63c1901
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1744177
Commit-Queue: James Dong <dongja@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
cdecd97c
|
2019-06-25T14:22:41
|
|
Add Draw base vertex and base instance function entrypoints
Split from https://chromium-review.googlesource.com/c/angle/angle/+/1705035/27
This patch adds entrypoints glDrawArraysInstancedBaseInstanceANGLE,
glDrawElementsInstancedBaseVertexBaseInstanceANGLE,
glMultiDrawArraysInstancedBaseInstanceANGLE,
and glMultiDrawElementsInstancedBaseVertexBaseInstanceANGLE
Implementation will come in a later separate patch.
Bug: chromium:891861, angleproject:3402
Change-Id: I18e19b850cddd79be4798b9ae7efe0680a050c7f
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1750125
Commit-Queue: Shrek Shao <shrekshao@google.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
5a2553a7
|
2019-08-07T14:44:12
|
|
Vulkan: Emulate subgroup ops in seamful cubemap emulation
Where subgroup ops are not available, they are emulated as such:
Code with subgroup ops:
float lH = subgroupQuadSwapHorizontal(layer);
float lV = subgroupQuadSwapVertical(layer);
float lD = subgroupQuadSwapDiagonal(layer);
bool isHelperH = subgroupQuadSwapHorizontal(gl_HelperInvocation);
bool isHelperV = subgroupQuadSwapVertical(gl_HelperInvocation);
if (gl_HelperInvocation)
{
layer = !isHelperH ? lH : !isHelperV ? lV : lD;
}
Emulated code:
float nonHelperLayer = gl_HelperInvocation ? 0.0 : layer;
float lH = abs(dFdxFine(nonHelperLayer));
float lV = abs(dFdyFine(nonHelperLayer));
float lD = abs(dFdxFine(lV));
float isHelperDiffH = abs(dFdxFine(float(gl_HelperInvocation)));
bool isNonHelperH = isHelperDiffH > 0.5;
float isHelperDiffV = abs(dFdyFine(float(gl_HelperInvocation)));
bool isNonHelperV = isHelperDiffV > 0.5;
if (gl_HelperInvocation)
{
layer = isNonHelperH ? lH : isNonHelperV ? lV : lD;
}
Both paths are supported as on nvidia devices the emulated code
misbehaves. This change therefore effectively only enables seamful cube
map emulation on Android where subgroup operations are not supported.
Bug: angleproject:3243
Bug: angleproject:3732
Change-Id: I9664d9760756758748183eb121c626f176789f3a
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1742222
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
7e48c9eb
|
2019-08-06T17:17:19
|
|
Add explicit integer casts
WebKit uses the -Wshorten-64-to-32 flag which warns on these cases.
Bug: 3439
Change-Id: I8c1de60da0f173ca2036e2120e79b857f5f2775f
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1740866
Commit-Queue: James Darpinian <jdarpinian@chromium.org>
Reviewed-by: Kenneth Russell <kbr@chromium.org>
|
|
d7500aa8
|
2019-08-02T15:52:39
|
|
Vulkan: Regression issue on AngryBird for read bandwidth
Use AllGraphicsShaderReadOnly as the image layout for graphics path.
Bug: angleproject:3473
Change-Id: I1e653890e69f347b2aba4a0156a5d5b86109fd0e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1732617
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
4c833efb
|
2019-07-11T11:29:35
|
|
Vulkan: Enable sampler objects
This is the initial implementation to get GLES3.0 Sampler Objects
working on the Vulkan backend.
When samplers are dirty, a corresponding Vulkan sampler object will be
created with associated state and textures are flagged as dirty anytime
sampler bindings change.
Then when handling textures dirty, any bound sampler objects are pulled
from active texture units. When sampler objects are bound, their state
is used instead of the built-in texture's sampler state.
This change also adds a test that uses the same texture object with
different sampler objects to test a corner case that dEQP misses.
Bug: angleproject:3208
Change-Id: I643d9c9d5cb92fecc02dad815a07bcf349534c70
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1706897
Commit-Queue: Tobin Ehlis <tobine@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
93560ef5
|
2019-07-25T16:13:02
|
|
Vulkan: Seamful cube map emulation
In GLSL, a cube texture is sampled with one of textureCube* functions.
This function takes a 3D coordinate which is a vector from the center of
the cube and identifies a direction to sample from. GLES2.0 has the
following table that translates this 3D coordinate (Rx, Ry, Rz) to a
face and ST coordinates within that face. This table can be found in
Section 3.7.5 (Cube Map Texture Selection).
A compiler pass is implemented in ANGLE that replaces samplerCube
declarations with a sampler2DArray. The textureCube* functions are
replaced with the corresponding texture* functions with the translated
coordinates according to that table.
Gradients provided to textureCubeGrad are translated using the same
formulae, which is not precise but the spec specifies this projection to
be implementation dependent.
Helper invocations enabled through WQM (whole quad mode) cause a
nuisance in that the extrapolated varyings used as coordinates in a
textureCube call could have a different major axis (and therefore face)
from the non-helper invocations that lie within the geometry.
subgroupQuadSwap* operations are used in conjunction with
gl_HelperInvocation to make sure the helper threads calculate texture
UVs in the same face as the non-helper invocations.
Bug: angleproject:3300
Bug: angleproject:3240
Bug: angleproject:3243
Bug: angleproject:3732
Change-Id: I0cb6a9b1f2e1e6a392b5baca1c7118ed1c502ccf
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1715977
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
ed5f7e4d
|
2019-06-07T15:54:00
|
|
Vulkan: Use a persistent CommandPool
Previously transient CommandPool is used for CommandBuffer allocation,
it is created and destroyed per frame. However, profiling found that
CommandPool destroy is very inefficient. So this commit removed the
previous logic and use two preallocated resetable CommandPools (One for
Primary and One for Secondary)
Bug: angleproject:3508
Change-Id: I8b36f2738b082811c3177935c61b10e01acb6947
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1648667
Commit-Queue: Tobin Ehlis <tobine@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
44e690ca
|
2019-07-22T16:42:55
|
|
Vulkan: Support unaligned atomic counter buffer binding
GLES doesn't require any implementation-specified alignment requirement
for atomic counter buffers. They are emulated with Vulkan storage
buffers, which do have restrictions.
The storage buffers are bound at aligned offsets, and the remaining
offsets are passed to the shader as uniform values. This means that the
driver uniforms are now also bound to the compute pipeline.
Bug: angleproject:3566
Change-Id: I1a3429438f76d95e33cb5c6ef2c9370a10d900d6
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1713095
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
626a7280
|
2019-07-08T15:11:59
|
|
Vulkan: Implement framebuffers without attachments
It is possible to render to a framebuffer object that has no
attachments. However, the rasterization of primitives is always
based on the area and characteristics of the bound framebuffer.
These characteristics (size, number of samples, etc.) would normally be
defined by the attached images. If no images are attached, these
characteristics are defined by their default values.
Bug: angleproject:3579
Test: dEQP-GLES31.functional.fbo.*no_attachments*
Test: dEQP-GLES31.functional.state_query.framebuffer_default.*
Change-Id: I9580b924ac810db573cd8df96273fbb01bbb1f73
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1690688
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
Commit-Queue: Tim Van Patten <timvp@google.com>
|
|
82523300
|
2019-08-01T09:49:26
|
|
Vulkan: Recycle VkFence in checkCommandsCompleted
VkFence is intended to be recycled after used up, however, there is one
place that VkFence get destroyed directly after usage due to an
implementation flaw. This CL fixed it up.
Bug: angleproject:3556
Change-Id: I9ee44556329b9cee39ccdfef540f3c1b5180cd36
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1731575
Reviewed-by: Tobin Ehlis <tobine@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Tobin Ehlis <tobine@google.com>
|
|
02407743
|
2019-07-22T10:56:35
|
|
Vulkan: implement indirect dispatch
Implements indirect dispatch for Vulkan backend. Layout of dispatch
structure is the same as OpenGL, so we pass in the buffer directly.
Test: ./angle_deqp_gles31_no_gtest --deqp-egl-display-type=angle-vulkan -n 'dEQP-GLES31.functional.compute.indirect_dispatch.*'
Bug: angleproject:3601
Change-Id: I94c6b1a86d3c24c1ca1bb6a78529b38909a2b91f
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1710024
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: James Dong <dongja@google.com>
|
|
b82d8633
|
2019-07-15T11:23:08
|
|
Vulkan: Atomic counter buffer support
Vulkan doesn't treat atomic counters especially, and they are emulated
with atomic access to storage buffers.
A single atomic counter buffer binding per pipeline is supported. All
the atomic counters identify an offset within this buffer. The shader
is modified to include a storage buffer definition with
`uint counters[];` as the only field.
A compiler pass replaces atomic counter definitions with variables that
hold the corresponding offset parameter, as well as changing atomic_uint
types to just uint (as the offset). Where an atomic counter variable is
used, it is replaced with the offset variable (plus the array index, if
array). At the same time, built-in `atomicCounter*` functions are
replaced with a corresponding `atomic*` function and
`memoryBarrierAtomicCounter` is replaced with `memoryBarrierBuffer`.
Bug: angleproject:3566
Change-Id: Iefb3d47de6a5cb3072bfa0cb94a46ac6a886d369
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1704635
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
87dc17b5
|
2019-07-22T11:41:27
|
|
Vulkan: Generalize buffers desc set name to include images
And atomic counter buffers which are emulated with storage buffers.
Bug: angleproject:3566
Change-Id: I102763900c779c3a84661491bad53aec384461f7
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1713086
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
a71549b1
|
2019-05-28T09:44:43
|
|
Vulkan: Intermittent failures in many GLES2 CTS
The stage mask in vkCmdPipelineBarrier is incorrectly set.
Bug: angleproject:3473
Change-Id: I4fea5994a391b0db0f81183f1c4d4ba47d387acb
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1631849
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
2e43b0f5
|
2019-07-11T17:09:54
|
|
Vulkan: Implement memory barriers
Bug: angleproject:3574
Change-Id: I13d8f4fcd6f1bf9bf3496c91c2c697076e2491bd
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1699005
Reviewed-by: Tobin Ehlis <tobine@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
f92fc916
|
2019-07-15T22:39:23
|
|
Vulkan: Compute shader support
A DispatchHelper class is created as the equivalent of FramebufferHelper
as a command graph resource. There's currently a single dispatcher and
all dispatch calls are recorded on that. Context dirty bits are set up
in such a way that graphics and compute workloads are independently
handled, so that issuing a dispatch call wouldn't cause a framebuffer's
render pass to rebind resources.
Bug: angleproject:3562
Change-Id: Ib96db48297074d99b04324e44b067cfbfd43e333
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1688504
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
c4c48b65
|
2019-07-15T22:34:18
|
|
Vulkan: Prefix context pipeline and dirty bits with Graphics
In preparation for compute pipeline and dirty bits.
Bug: angleproject:3562
Change-Id: I611b97fee1e500fdad32355d096254fd787c4ddd
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1703525
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
998a37c9
|
2019-07-15T22:13:14
|
|
Vulkan: merge bindGraphics/ComputeDescriptorSets
The two called bindDescriptorSets with a fixed GRAPHICS or COMPUTE bind
point enum value. The differentation however would result in
unnecessary code duplication with upcoming compute support.
Bug: angleproject:3562
Change-Id: Ica4400c573a90fda168c64ad777d87aa83256e48
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1703524
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
6f0780f8
|
2019-07-15T22:04:46
|
|
Vulkan: Rename CommandBufferOwner to RenderPassOwner
It's really only used to track the render pass command buffer. The
change is made in preparation for compute, where the dispatcher command
buffer can change without affecting the render pass.
Bug: angleproject:3562
Change-Id: Ia8246de731d5c6a272fa17d6f8952dc981eca36e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1703523
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
a9ec8749
|
2019-07-11T11:31:47
|
|
Vulkan: override format for mismatched attribs
Prevents Vulkan validation error by replacing the input format for any
mismatched vertex attributes with a format compatible to what the shader
expects.
Bug: angleproject:3436
Change-Id: Ia52f29c084d82bbc4e9149102cd4b5fc25ccb9b3
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1698567
Commit-Queue: Courtney Goeltzenleuchter <courtneygo@google.com>
Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
a1754dc8
|
2019-06-26T13:36:43
|
|
Vulkan: Recycle vkFence
This CL introduces a Recycler to reuse unreferenced vk::Fence, reducing
CPU time spent on vk::Fence init&destroy. Save around 15% of CPU time
for most glmark2 tests.
Bug: angleproject:3556
Change-Id: Ice5054305321c466c5be3bc368d04091f074729c
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1679239
Commit-Queue: Tobin Ehlis <tobine@google.com>
Reviewed-by: Tobin Ehlis <tobine@google.com>
|
|
3fe8c3a3
|
2019-07-04T15:49:54
|
|
Refactor the wait/signalSemaphore entry points to be on the Semaphore object
Convert the texture ID parameters into optimized vectors of Texture objects.
BUG=angleproject:3656
Change-Id: Iffe824ade2a919c9771642ae501ff04712ca43ce
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1688505
Reviewed-by: Michael Spang <spang@chromium.org>
|
|
1cde0eab
|
2019-07-03T10:58:32
|
|
Vulkan: Add storage buffer support
The storage buffers are placed in the same descriptor set as uniform
buffers. Some refactoring is done to reuse code that handles UBOs to
handle SSBOs as well. A good number of tests still fail as they test
SSBOs in conjunction with compute shaders.
Bug: angleproject:3561
Change-Id: Ia33c1f68e6f6402c746f5919ede87b2c308cf81c
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1687126
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
0966f3f8
|
2019-07-08T13:18:03
|
|
Vulkan: Remove flush semaphore chain
This avoids using an unbounded number of semaphores in between calls to
swapbuffers. Using two semaphores should be sufficient to synchronize
swaps.
In addition, fix tracking of VkPipelineStageFlags by creating a 2nd
vector parallel to the semaphores vector. The last fix assumed there
could only be 2 wait semaphores, but that bound only applied to signal
semaphores. After this change, there can only be one signal semaphore,
but there's still no bound to wait semaphores.
Bug: angleproject:3637
Change-Id: I7fbba67fa4bbdf62b9e9d530a924acd5236705d3
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1688435
Commit-Queue: Michael Spang <spang@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
da904484
|
2019-07-02T10:49:14
|
|
Vulkan: Implement glInvalidate[Sub]Framebuffer
Additionally, fixes an issue where the read framebuffer was affecting
the render pass desc given to the pipeline. This fix is included with
this CL as its test depends on glInvalidateFramebuffer.
This issue was revealed by 071d2a44 changing the order in which read and
draw framebuffers were synced. Previously, read was synced first,
dirtying the pipeline and then draw was synced fixing it. With the
order reversed, the read framebuffer is the last to changes the
pipeline, leaving it in an invalid state.
Bug: angleproject:3201
Bug: angleproject:3202
Change-Id: Ibebf732a3e3cc081e4865f79dcbaedb467fd9038
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1682468
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
0bfa5504
|
2019-06-03T10:40:10
|
|
Vulkan: Emulate Transform Feedback with vertex shader output
In ES 3.0 and 3.1, only non-indexed GL_POINTS, GL_LINES and GL_TRIANGLES
is supported for transform feedback. Without tessellation and geometry
shaders, we can calculate the exact location where each vertex transform
output should be written on the CPU, and have each vertex shader
invocation write its data separately to the appropriate location in the
buffer.
This depends on the vertexPipelineStoresAndAtomics Vulkan feature.
Bug: angleproject:3205
Change-Id: I68ccbb80aece597cf20c557a0aee842360fea593
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1645678
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
d43eee64
|
2019-06-14T11:12:51
|
|
Vulkan: Increase size of driver uniforms buffer.
This should prevent applications that use a lot of updates from getting
bottlenecked on buffer and descriptor set updates.
Bug: angleproject:3504
Change-Id: I8fc88b5f13858b8858d88f7e6f43af022c3f6a75
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1647030
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
c773ab98
|
2019-06-25T17:11:58
|
|
Vulkan: Recycle dynamic buffer storage.
This adds a free list to the dynamic buffer storage. Buffers are added
to the free list when the retained buffers are released. They are taken
from the free list when we allocate a new buffer. We only allocate
a new buffer in the ring when we run out of free buffers. This reduces
the amount of time we spend in allocation for frequent updates.
Now that we're recycling buffers inside of DynamicBuffer we also need
to be a bit more careful about when we allow ourselves to reuse them.
If they're still in use by the GPU we should not try to modify them.
Bug: angleproject:3082
Change-Id: Ibee5a7e2fe4a17f4a2f7af6bc6bcce54bdc413c2
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1646548
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tobin Ehlis <tobine@google.com>
|
|
7f2520f1
|
2019-06-26T11:18:33
|
|
Vulkan: Refactor DynamicBuffer::init.
This will allow us to more easily create a white box test that sets a
very small initial size for a dynamic buffer.
Bug: angleproject:3082
Change-Id: Ic02bbee83ee8e0f4bfe182e9448c2ce60dea66d5
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1667645
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tobin Ehlis <tobine@google.com>
|
|
dfd76005
|
2019-06-14T11:15:52
|
|
Vulkan: Don't update pipeline when only textures change.
We could expand this functionality in the future to only update the
pipeline when a signficiant bit of pipeline state changes. For now this
is mostly a proof of concept.
Significantly improves performance in the textures microbenchmark.
Bug: angleproject:3117
Change-Id: I3957dd2f08d7d89694f94ddbe45eeeeb620bac0a
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1650790
Reviewed-by: Tobin Ehlis <tobine@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|