|
d0146e07
|
2020-05-12T14:47:11
|
|
Vulkan: Rename SurfaceRotationType to SurfaceRotation
Follow-on CL per request in
https://chromium-review.googlesource.com/c/angle/angle/+/2191425/3/src/libANGLE/renderer/renderer_utils.h#48
Bug: angleproject:4436
Change-Id: I2ee8c65a0dbcf2eee4c9c7f4252abf16a578cad3
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2197614
Commit-Queue: Ian Elliott <ianelliott@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
d705f18f
|
2020-05-11T13:53:13
|
|
Vulkan: Add immediate scissored clears.
This allows us to avoid using draw commands with pipelines for
scissored clears. This prevents some tests from generating
large numbers of VkPipelines.
Bug: angleproject:4517
Bug: angleproject:4617
Change-Id: Id4a44000078098a60aa89233cfef30b75727d108
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2194473
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
e9dcffb1
|
2020-05-11T17:36:33
|
|
Vulkan: Enhance ReadPixels to deal with pre-rotation
Depending on the orientation, the source image may be row-major
or column-major; with positive or negative x/y-axis pitches.
Regardless of the orientation, the destination remains
row-major.
Bug: angleproject:4436
Bug: b/150329975
Change-Id: Ia1287f7036f07548d35128f1761feadf721cd78a
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2191425
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
Commit-Queue: Ian Elliott <ianelliott@google.com>
|
|
d657e1d7
|
2020-04-24T13:13:18
|
|
Vulkan: Defer framebuffer clears.
This works by storing the deferred clears in the ImageHelper's staging
buffers. We apply the deferred clears onto the RenderPass right before
we begin to draw. Storing the clears in the ImageHelper solves problems
where we clear GL Textures in a Framebuffer and then unbind the
Textures and sample from them. Or do other commands like CopyTexImage.
Note that because the staging buffer clears only handle full-image
clears we need to immediately apply some scissored clears where before
we would use the RP. This should be a pretty rare occurrence and it is
possible to optimize that in the future.
Reduces the RenderPass count in the Manhattan "frame 10" trace from max
22 to max 20. May improve perf slightly on Android or may have effects
too small to measure. Should not regress performance.
Bug: angleproject:4517
Change-Id: I02150d531022afb903f1058f070937ec6337bd88
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2142711
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
fbc2f063
|
2020-04-24T13:00:11
|
|
Vulkan: Refactor AttachmentOpsArray.
Will allow for more flexibly setting ops when we defer clears.
Bug: angleproject:4517
Change-Id: I7d9116bc92e90eb41a1030fea242eadf1cc74562
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2165629
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
3cb9c4be
|
2020-03-13T13:56:47
|
|
Statically link vulkan-loader on Mac
Disable angle_shared_libvulkan on Mac since we are the only client.
Re-add codepaths to support this.
Bug: angleproject:4477
Change-Id: Ie128c83adaae741636541bbfd6105d160d874a8d
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2102954
Commit-Queue: Jonah Ryan-Davis <jonahr@google.com>
Reviewed-by: Tobin Ehlis <tobine@google.com>
|
|
03c18fbd
|
2020-04-13T16:01:01
|
|
Vulkan: Skip load if depth/stencil value are undefined
EGL1.5 spec says depth/stencil data are undefined after swap. This CL
will track the depth/stencil data and mark it as undefined and skip the
load if it is undefined.
Bug: b/153885625
Change-Id: Ifb3d88d442da547fa78c1eae091cbae08a20d0ab
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2148179
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
8c67c079
|
2020-04-16T14:42:15
|
|
Vulkan: store ImageLayout in PackedAttachmentOpsDesc
The layout in the PackedAttachmentOpsDesc only have 5 bits, not enough
for raw VKImageLayout enums. This change will store vk::ImageLayout
which are ANGLE defined and packed for 5 bits and able to handle the
extension bits of VKImageLayout.
Bug: b/153885625
Change-Id: Ida268a974094188d8aeee39c61019eef30a60507
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2153845
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
1033d55d
|
2020-04-07T14:01:24
|
|
Pass binding enum to Framebuffer::syncState.
Will allow us to determine if we're clearing the read or draw FBO. Then
we can stash clears for the draw FBO only and issue them immediately
for the read FBO in the Vulkan back-end.
Bug: angleproject:4517
Change-Id: Ifc043317d6156a75749b13f9d2c44a17e14ee378
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2139997
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Reviewed-by: Tim Van Patten <timvp@google.com>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
c916fe8a
|
2020-04-02T16:57:49
|
|
Don't call syncState inside FBO queries.
This prevents a syncState ordering issue that was confusing FBO sync
when robust resource init is enabled. Also cleans up some redundant
format processing for the half float extensions.
Bug: angleproject:4517
Change-Id: Ieb13fc5203cf824a3e8affda96ea5cbbd89d78ee
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2134411
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
dd00f16b
|
2020-04-02T14:04:44
|
|
Vulkan: Fix FBO cache when updating disabled attachments.
Fix this by consistently checking if the attachment is enabled when we
update the serials.
Also includes a regression test and more ASSERTs.
Bug: angleproject:4540
Change-Id: I154d23cad71f1674d893390f923f45c643a58925
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2134409
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
Reviewed-by: Tobin Ehlis <tobine@google.com>
|
|
b83b0f5e
|
2020-01-31T15:09:17
|
|
Add support for NV_read_depth, NV_read_stencil and NV_depth_buffer_float2 extensions
This cl adds the ability for the ReadPixels function to read other
attachments than the color attachment. Checks were added for both
depth and stencil attachments.
A new test was added (DepthStencilFormatsTest.DepthStencilReadback)
to test this new functionality. As the name mentions, it's used to
test reading from the depth and stencil attachments using ReadPixels.
Bug: angleproject:4295
Change-Id: I6fe9be11f05d6055a5883b4315f870e7c0ac41ad
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2031702
Commit-Queue: Alexis Hétu <sugoi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
d03b15b2
|
2020-03-26T17:22:18
|
|
Vulkan: Mask out Depth/Stencil RTs in feedback loops.
This should enable some cases of limited support for feedback loops
with depth/stencil buffers. For example with Manhattan and the Vulkan
back-end.
Increases the number of RenderPasses in Manhattan slightly. This will
regress performance slightly until we can work out a better solution
that is also conformant with the spec.
Bug: angleproject:4517
Change-Id: I2758e6b4c2a930474c09cdc0950f3b6c34541089
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2106670
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
|
|
13c139e7
|
2020-03-21T15:25:50
|
|
Support masking out DS feedback loops in RenderTargetCache.
Currently this is a pure refactor and doesn't change any functionality.
In a follow-up we can us this bit to mask out DS RTs when Manhattan and
other apps render with feedback loops.
Bug: angleproject:4517
Change-Id: I80ccd022d90a781506791110d11be195db8cd3e9
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2112936
Reviewed-by: Cody Northrop <cnorthrop@google.com>
|
|
6fead375
|
2020-03-21T14:06:19
|
|
Vulkan: No-op redundant FB state changes.
This uses a trick by comparing the prior to the updated FB description
to filter out rendundant changes. Will allow the front-end syncState to
sometimes noisily report state changes when there aren't any in the
back-end. Ideally we wouldn't generate any updates when there aren't
real changes. However because Manhattan often transitons between a few
zero states it gets a bit difficult to determine in the front-end.
Also adds a no-op for redundant samples changes in the front-end.
Fixes a regression in the number of RenderPasses in Manhattan from work
to support rendering feedback loops.
Bug: angleproject:4490
Change-Id: Ibf83d584107a4561da7ad47a2d3fb543e63e31f1
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2112935
Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
4fb3c28f
|
2020-03-19T19:10:45
|
|
Vulkan: Fix Framebuffer cache depth/stencil issue.
The DrawBuffers resetting logic didn't update the depth/stencil serial.
Fix this and add a regression test that would crash in this situation.
Note that the Manhattan benchmark could trigger this under some cases.
Bug: angleproject:4322
Bug: angleproject:4490
Change-Id: Ie4b24efeb5991ecaa85bf8f964f77476bd6f167d
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2111333
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
|
|
175227ba
|
2020-03-06T14:30:06
|
|
Vulkan:FramebufferVk cache draw buffer handling
Dirty draw buffers are causing cache clears on Manhattan.
Instead of clearing out the entire FramebufferVk cache when draw
buffers are dirty, reset the cache signature and regenerate it.
This change also contains a fix to make sure that we're not generating
serials for a draw buffer that's disabled.
Thanks Jamie Madill!
Bug: angleproject:4442
Change-Id: I0d48a2d6d95e74898a11bdde0fedbce77c82a3a3
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2091862
Reviewed-by: Tobin Ehlis <tobine@google.com>
Commit-Queue: Tobin Ehlis <tobine@google.com>
|
|
5d7ccc30
|
2020-03-09T14:24:30
|
|
Revert "Vulkan: Fix store ops with linear command recording."
This reverts commit a61e273ac3ca88cb95b7bebac0d31a62644049a0.
Reason for revert: Causes rendering artifacts in "Aztec Ruins".
Bug: angleproject:4444
Original change's description:
> Vulkan: Fix store ops with linear command recording.
>
> DiscardFramebuffer was being ignored in the new linear path. Fix this
> by using the correct APIs. Also cleans up some of the access to the
> "RenderPassCommandBuffer" struct in ContextVk. Add a new accessor that
> returns the RenderPass without a flush that ensures it is only called
> when a RenderPass is already started.
>
> Bug: angleproject:4029
> Change-Id: Ibd199f3a371c0f91b448a0b34c8752dc8b76c284
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2057329
> Reviewed-by: Charlie Lao <cclao@google.com>
> Commit-Queue: Jamie Madill <jmadill@chromium.org>
TBR=tobine@google.com,jmadill@chromium.org,cclao@google.com
# Not skipping CQ checks because original CL landed > 1 day ago.
Bug: angleproject:4029
Change-Id: I7d925b88c438a20ebe4a48634568addda7a64d60
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2093157
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tobin Ehlis <tobine@google.com>
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
ff60abaf
|
2020-02-28T14:06:07
|
|
Vulkan:Disable FramebufferVk cache on Apple
Currently hitting a crash on Apple so disabling FramebufferVk cache.
Bug: angleproject:4442
Change-Id: I3824252210aeeaf9919c8d17730395b394a50862
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2080661
Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Commit-Queue: Tobin Ehlis <tobine@google.com>
|
|
aa09ca69
|
2020-02-24T13:33:30
|
|
Vulkan: Update ContextVk command buffer access methods.
Use the following names:
- flushAndBeginRenderPass
- endRenderPassAndGetCommandBuffer
- flushAndGetPrimaryCommandBuffer
This clarifies that a flush is part of the method.
Bug: angleproject:4029
Change-Id: I6c870761339ea7aa39c83142200781ba39ad6a4b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2068129
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
a741abb9
|
2020-02-21T16:37:37
|
|
Vulkan: Rename CommandGraphResource to Resource.
Also renames the h and cpp files to ResourceVk (to keep distinct from
other resource.h/cpp files) and renames 'onResourceAccess' to 'retain'.
Cleans up a few remaining mentions of the command graph in comments.
Bug: angleproject:4029
Change-Id: Ifc8e880c8cea3fc48a4aec4730191c88aa35a076
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2065920
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
d3aad0f4
|
2020-02-20T08:59:58
|
|
Vulkan: Remove command graph size overlay widget.
No longer applicable without the command graph.
Bug: angleproject:4029
Change-Id: If75e3aca56eb18567074e14ceb23b3fd7a0afb3d
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2065919
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
c58458e6
|
2020-02-19T14:51:41
|
|
Vulkan: Remove CommandGraph code.
Also updates relevant comments to no longer refer to a graph.
Bug: angleproject:4029
Change-Id: Ic29716e9ae4926870f902947d49d8fee7af98662
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2057804
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
cf2ec3b1
|
2020-01-31T16:55:50
|
|
Vulkan:Add FramebufferVk cache
This adds a FramebufferVk cache. Cache signature is based on unique Serial
values that are assigned to ImageHelper objects backing all color and DS
rendertargets as well as level/layer values unique to the imageView.
Update the Serials and cache signature at FramebufferVk::syncState() time.
L0 cache is a currently active framebuffer.
L1 cache retrieves previously created framebuffer from new cache.
If neither of those hit, create new FramebufferVk and add to L1.
Bug: angleproject:4322
Change-Id: I3f585271798ddfb9e5f194020adca8cf8a6b19dd
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2033869
Commit-Queue: Tobin Ehlis <tobine@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
|
|
a61e273a
|
2020-02-19T14:51:40
|
|
Vulkan: Fix store ops with linear command recording.
DiscardFramebuffer was being ignored in the new linear path. Fix this
by using the correct APIs. Also cleans up some of the access to the
"RenderPassCommandBuffer" struct in ContextVk. Add a new accessor that
returns the RenderPass without a flush that ensures it is only called
when a RenderPass is already started.
Bug: angleproject:4029
Change-Id: Ibd199f3a371c0f91b448a0b34c8752dc8b76c284
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2057329
Reviewed-by: Charlie Lao <cclao@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>
|
|
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>
|
|
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>
|
|
71153201
|
2020-01-29T14:42:30
|
|
Vulkan: Disable restartRenderPassAfterLoadOpClear workaround
This workaround was added due to qualcomm driver bug b/129281932. But
this has been fixed with recent drivers. Removing the WR here so that it
will not negatively affect performance.
Bug: angleproject:4344
Change-Id: Iea2ec86082a0ced64bfe843bf916c6bdb2aea60b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2029210
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Tobin Ehlis <tobine@google.com>
|
|
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>
|
|
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>
|
|
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>
|
|
4576f1d0
|
2019-12-05T10:10:48
|
|
Vulkan: Implement multisample textures
This functionality is exercised by running angle_deqp_gles31_tests with the
following sets of command arguments:
--gtest_filter=dEQP.GLES31/functional_texture_multisample* --use-angle=vulkan
--gtest_filter=dEQP.GLES31/functional_state_query_texture_level_texture_2d_multisample* --use-angle=vulkan
--gtest_filter=dEQP.GLES31/functional_state_query_texture_texture_2d_multisample_texture_immutable* --use-angle=vulkan
The following are some high-level design notes:
- Texture::setStorageMultisample() handles converting the "requested number of
samples" to the actual number of samples used (e.g. converting 3 to 4),
supported by the underlying back-end). The actual number used is stored in
gl::TextureState::mImageDescs, for use by other GLES commands.
- ANGLE uses the Vulkan standard sample locations/positions. If the underlying
Vulkan driver's VkPhysicalDeviceLimits::standardSampleLocations is false,
ANGLE limits itself to GLES 2.0 (i.e. before GLES 3.0 which adds multisample
renderbuffers).
- The Vulkan specification currently doesn't support ANGLE providing support
for GLES 1-sample textures, because of the following Vulkan specification
statement:
- If the image was created with VkImageCreateInfo::samples equal to
VK_SAMPLE_COUNT_1_BIT, the instruction must: have MS = 0.
- At least one Vulkan driver returns different
VkPhysicalDeviceLimits::*SampleCounts for different formats. Because of
this, ANGLE does a logical-AND of all values in order to only support the
commonly-available numbers of samples.
The detailed design document is located at:
https://docs.google.com/document/d/1NiM8gAR74iGGXGTE6IP1ChdDUZjhtXRuJdtEp_wGFEM/edit?usp=sharing
Bug: angleproject:3565
Bug: angleproject:4103
Bug: angleproject:4104
Bug: angleproject:4196
Bug: angleproject:4197
Bug: angleproject:4198
Change-Id: I28921badf9568427799b0af347198b5df06c2db0
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1919982
Commit-Queue: Ian Elliott <ianelliott@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
bb35bb4e
|
2019-10-29T17:17:04
|
|
Vulkan: Implement simple case ANGLE_get_image.
A couple cases are left unimplemented:
Incomplete/unused Textures. This leads to a slightly more tricky
implementation. Since we need to read back from the staging buffer
we will need to flush the Image contents to a temporary buffer.
Depth/stencil readback. Requires a more complex pixel packing
step.
3D/Cube/2D Array readback. Also requires a more complex packing
step.
Bug: angleproject:3944
Change-Id: Ic5d9a606177ba7e3e5ab945feb5f555afa11741f
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1879964
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
|
|
96ba0f12
|
2019-10-28T13:51:42
|
|
Vulkan: Move readPixels logic to ImageHelper.
This logic will be shared with ANGLE_get_image. Cleans up some of the
graph access logic so it can work easily with TextureVk/RenderbufferVk.
Bug: angleproject:3944
Change-Id: If069528f27b2c291d52de892c707562875b95227
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1879962
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
|
|
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>
|
|
beacd8c8
|
2019-10-17T14:34:02
|
|
Vulkan: Rename format fields.
Renames 'angleFormat' to 'intendedFormat'. Also renames 'bufferFormat'
and 'imageFormat' to 'actualImageFormat' and 'actualBufferFormat'. This
renaming should make it clearer to the reader what the meaning of the
different format fields are. Intended format is the front-end format
and the actual formats are the formats we pass to Vulkan. Also updates
the documentation.
Bug: angleproject:4009
Change-Id: If61bf7250e88f7ed3d452718574c963d718e27b2
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1866077
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
a14555a7
|
2019-10-13T15:05:22
|
|
Vulkan: Refactor RenderTargetVk ImageViews.
Instead of storing a pointer to an ImageView, store a
pointer to an ImageViewHelper. The level and layer index
are all that's needed to pull the right image view from
the ImageViewHelper.
Will make it easier to store ImageView references in the
graph to track lifetime.
Bug: angleproject:2464
Change-Id: I773fa79a89ceefc99ff70e4eed4985f9f01fe26a
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1857549
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Ian Elliott <ianelliott@google.com>
Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
|
|
2d0e5b55
|
2019-08-27T13:49:07
|
|
GL_EXT_multisampled_render_to_texture extension. Part 2.
For textures that use this extension, a multisampled texture is
implicitly created for the texture.
Upon write or read, the multisampled texture is either return
to be drawn to or resolved and returned as a single sampled texture.
This is the functionality change with end2end tests.
Bug: angleproject:980428
Change-Id: I5776875a132fed7a3f4f00fb02f9e8e250684630
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1773717
Commit-Queue: Rafael Cintron <rafael.cintron@microsoft.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
88bc4d3d
|
2019-10-04T20:41:24
|
|
Vulkan: Get rid of "fetch" level/layer image views.
Instead always use 2D array views when rendering to cube maps. We need
to keep the "fetch" image view for the main image for emulating
seamless cube map textures on GL 2.0. We also use it for some texture
copying init. These uses could potentially be replaced with sample
instructions if we wanted to remove this last "fetch" view.
Bug: angleproject:3975
Change-Id: I90f9be9fc6542d8ec27f6722132c1b27acf72176
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1842226
Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
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>
|
|
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>
|
|
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>
|
|
6caa2652
|
2019-09-11T08:06:13
|
|
Vulkan: Support float textures and renderbuffers
Fixed support in the vulkan backend for legacy
GLES2.0 formats (luminance, alpha,
luminance_alpha)
Correctly exposed the following extensions:
OES_texture_float
OES_texture_half_float
OES_texture_float_linear
OES_texture_half_float_linear
EXT_color_buffer_float
EXT_color_buffer_half_float
Some of the above extensions have different
requirements depending on other extension support
and the context client version, and were
incorrectly assuming the most restrictive
requirements to be exposed.
Implemented end2end tests for:
OES_texture_float
OES_texture_half_float
OES_texture_float_linear
OES_texture_half_float_linear
EXT_color_buffer_float
EXT_color_buffer_half_float
Bug: angleproject:2898
Bug: angleproject:2726
Test: ./angle_end2end_tests --gtest_filter='Texture2DFloatTest*'
Change-Id: I7024aa1393eadafb5a0fb83c23e9035aae650b67
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1740276
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
7e44ec26
|
2019-08-26T15:59:48
|
|
GL_EXT_multisampled_render_to_texture extension. Part 1.
Adding new parameters for extension without adding any real code change. Since no new code paths were added, we expect all tests to pass as before.
Bug: angleproject:980428
Change-Id: I551b46a66f422eabd357fd021e00cf266a991efb
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1772377
Commit-Queue: Rafael Cintron <rafael.cintron@microsoft.com>
Reviewed-by: Rafael Cintron <rafael.cintron@microsoft.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
0b1fbcff
|
2019-08-30T15:05:12
|
|
Vulkan: Make vk::ImageView pointers const
Bug: angleproject:3563
Change-Id: I8b6415dd9508941d093f36e7ded72d25f571b6f3
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1779204
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@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>
|
|
c972435b
|
2019-08-20T14:55:43
|
|
Vulkan: Support non-pow2 buffer alignments
Bug: angleproject:2898
Change-Id: I7c8e548a1a449f48225516c37d830ecc201b064d
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1762496
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>
|
|
eb0479e2
|
2019-07-24T14:15:56
|
|
Vulkan: Texture 3D and 2DArray layers as framebuffer attachments
Support glFramebufferTextureLayer by correctly handling layers
from 3D and 2DArray textures. Modeled after CubeMap layers support.
Bug: angleproject:3188
Bug: angleproject:3189
Change-Id: Ic73a6017134e9d2b49beed103487454397a97167
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1738436
Reviewed-by: Tim Van Patten <timvp@google.com>
Commit-Queue: Cody Northrop <cnorthrop@google.com>
|
|
dc2c5c5a
|
2019-08-02T09:32:18
|
|
Vulkan: Initial Implementation of PBO support (software only)
This contains support for both pixel unpack buffers (i.e. for glTex*Image*)
and pixel pack buffers (i.e. for glReadPixels).
Bug: angleproject:3209
Bug: angleproject:3210
Change-Id: I077cccbffb96fb5f0198922bc7c1850a7eb3f616
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1723096
Commit-Queue: Ian Elliott <ianelliott@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
8a43b8c7
|
2019-08-02T08:47:13
|
|
Vulkan: Fix incorrect alignment logic in readPixels
Framebuffers previously assumed a readPixels buffer alignment
of 4 bytes, which causes issues when attempting to read with
a format larger than 4 bytes per pixel. Change the default
alignment to match the size of the largest know Vulkan format
Bug: angleproject:3731
Change-Id: I6cd26a99e6f3b2f30084d403630c17f51a0ecedf
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1727731
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@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>
|
|
97123e3f
|
2019-07-08T15:11:16
|
|
Vulkan: Fix support for framebuffer discard extension
Bug: angleproject:3664
Change-Id: Ifc08a53771c1e114c4169780e7fc984f2552b263
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1688182
Reviewed-by: Michael Spang <spang@chromium.org>
Commit-Queue: 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>
|
|
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>
|
|
3ea463bf
|
2019-06-19T14:21:33
|
|
Move event tracer back into common.
Requires that we update the TRACE_EVENT macros to accept a platform as
an argument. The refactor isn't complete. In order to finish we'd need
to ensure we have the Display's PlatformMethods available at all sites.
Unblocks adding trace events directly in the perf tests.
Bug: angleproject:1892
Bug: angleproject:3117
Change-Id: Iee0ca086ccfe23acab3fc186fb042f018711a94c
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1664794
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
b407e1a0
|
2019-06-03T17:15:51
|
|
Vulkan: implement ES3 blit
Augment the resolve shaders to be able to stretch and blit too. The
UtilsVk resolve function is accordingly expanded to include blit.
Bug: angleproject:3200
Change-Id: I30b172a5e388089735ab494f55cbfdc2781a8bf9
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1635753
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
de70a713
|
2019-06-03T17:05:16
|
|
Vulkan: Rename Resolve* shaders to BlitResolve
In preparation for adding blit functionality.
Bug: angleproject:3200
Change-Id: I77b6b6cbe90b26ee23c25edebaa2b130f3c2987a
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1641626
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
6d9b8908
|
2019-05-29T13:18:31
|
|
Vulkan: Merge Color and Depth/Stencil resolve shaders
There is a good deal of overlap in the way these shaders calculate
offsets, flip etc. This change merges the two shaders together, as well
as the UtilsVk functions that invoke them.
This is in preparation for adding blit functionality to the same
shader.
Bug: angleproject:3200
Change-Id: Id7c2cf12e05db1802ae497766fb361fe4bef6479
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1635750
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
|
|
172e5d37
|
2019-05-29T10:00:50
|
|
Vulkan: Implement universal stencil resolve
This is done by resolving stencil into a temporary buffer and copying
that into the stencil aspect of the resolved image.
Bug: angleproject:3200
Change-Id: I29111b44db2cb093acc4544034fbe61178f055a1
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1635709
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
f2a1c384
|
2019-05-21T16:32:49
|
|
Vulkan: Implement multisampled framebuffers
Simultaneously implements ANGLE_framebuffer_multisample and ES3
multisampled framebuffers.
Additionally, implements ES3 framebuffer blitting where multisampled
framebuffers are involved.
Bug: angleproject:3203
Bug: angleproject:3204
Bug: angleproject:3200
Change-Id: I5694a30f71168e807688a9568e3742b81d907918
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1622667
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
|
|
ee244c77
|
2019-05-06T10:30:18
|
|
Vulkan: Move command graph and garbage to ContextVk.
To support multithreading, contexts should manage their own command graphs
and garbage. This allows safe access to vulkan resources such as command pools
without thread synchronization.
BUG=angleproject:2464
Change-Id: I930149bc9f0793028761ee05ab50b8c0a4dec98a
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1516515
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
6722009e
|
2019-05-20T11:12:53
|
|
Vulkan: Handle dirty RTs with state messages.
Prior to this CL we were handling dirty state change notifications by
flushing the RT Images just prior to use or just after they were
changed. This could lead to a few redundant checks in several places.
It also meant we needed an owner pointer from the RT to the parent
Image. This pointer would be null for Surfaces and Renderbuffers.
This cleans up the image flushing logic to be handled by dirty bit
notifications. When an app updates an attached Texture with TexSubImage
or related calls it will send a notification to the Framebuffer. The
Framebuffer then sets a dirty contents bit that is handled in the
implementation. In Vulkan this means flushing the dirty bits.
Requires adding a flag to the FramebufferImpl class to determine if we
need to syncState before we checkStatus. Adding the option allows us to
only call syncState for the GL back-end. Not calling syncState allows
the robust resource init operation to happen *before* we syncState.
Which in turn allows FramebuffeVk to initialize the VkImages in one go.
Added new regression tests for Texture updates. This might not cover
all cases. I found it was very hard to trigger some of the resource
update staging in TextureVk.
Bug: angleproject:3427
Change-Id: Idfa177436ba7fcb9d398f2b67922e085f778f82a
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1601552
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
b16d69c3
|
2019-05-13T16:28:27
|
|
Vulkan: Add support for surface multisampling
A multisample image is created for the surface if multisampling is
enabled. Prior to present, this multisample image is resolved into the
swapchain image.
FramebufferVk::readPixelsImpl similarly has got the ability to resolve
the region of interest into a temporary image prior to readback.
Tests are added to render a point, line and a triangle on a 4x
multisampled surface.
Bug: angleproject:3204
Change-Id: I34aca502fa1918b5cbf000ff11521c350372e051
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1610188
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
9fa248e1
|
2019-05-06T14:55:18
|
|
Vulkan: Implement EXT_draw_buffers
In GLES, color attachments are referenced by their indices. These
indices match between the API and GLSL. For example, if a shader has:
layout(location=0) out color;
layout(location=3) out roughness;
Then GLES would bind and enable GL_COLOR_ATTACHMENT0 and
GL_COLOR_ATTACHMENT3.
In Vulkan, the framebuffer object and the corresponding renderpass
define the color attachments, and they don't allow gaps in color
attachments as GLES does. A render subpass creates the mapping between
the color attachments as defined in the framebuffer and the attachments
used by the shader (with possible gaps).
This change packs the enabled GL color attachments for the sake of the
framebuffer, and sets the subpass up in such a way that the shaders
continue to use the same color output indices as GLES.
In the example above, we have the attachment indices as follows:
Status | GLES | GLSL | RenderPass | Subpass
enabled 0 0 0 0
disabled 1 - VK_ATTACHMENT_UNUSED
disabled 2 - VK_ATTACHMENT_UNUSED
enabled 3 3 1 1
That is, the array of color attachments in the Vulkan
framebuffer/renderpass is:
[0] = GL color attachment 0
[1] = GL color attachment 3
And the array of color attachment references in the Vulkan render
subpass is:
[0] = 0 (index 0 of the renderpass attachment array)
[1] = VK_ATTACHMENT_UNUSED
[2] = VK_ATTACHMENT_UNUSED
[3] = 1 (index 1 of the renderpass attachment array)
Bug: angleproject:2394
Change-Id: Ib6cd2b60882643ea152986eee453270d09cd4aed
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1595442
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
776694cd
|
2019-05-08T10:28:55
|
|
Change all ANGLE workarounds to use struct definition with info.
Change each workaround from a simple bool to a struct with info
including name, workaround set, description, and bug IDs. This will help
with future workaround integration with Chrome.
Bug: angleproject:1621
Change-Id: Ia27c180abaf845e280060c803e5994cc3152a057
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1593917
Commit-Queue: Jonah Ryan-Davis <jonahr@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
0631e19b
|
2019-04-18T16:09:12
|
|
Vulkan: Rename Vulkan "Texture" format to "Image"
Also adds some comments to vk_format_utils.h.
Bug: angleproject:3372
Change-Id: I529b9b189e4cdfd400c3c981a47139727d9954ab
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1565062
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
2249d4a7
|
2019-04-05T16:48:55
|
|
Vulkan: remove clear depth ability from clearWithDraw
This partially reverts the following change:
60ec8f576 Vulkan: break dependency to the depthClamp feature
The feature is no longer necessary, and simplifies the usage of
utility shaders.
Bug: angleproject:2361
Change-Id: I1e87ac8d2517c5a3b50e3d0cddd55c852e0e3e7d
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1555313
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Tobin Ehlis <tobine@google.com>
|
|
127990f9
|
2019-04-04T13:52:04
|
|
Vulkan: Use render pass loadOp for scissored clears
At this point, every clear is done through render pass loadOp, except
masked color or stencil clears. The only fallback is clearWithDraw,
that can clear both color and stencil at the same time.
Bug: angleproject:2361
Change-Id: I805fc12475e832ad2f573f665cdfeb766e61a6d0
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1553740
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tobin Ehlis <tobine@google.com>
|
|
edef895a
|
2019-04-04T10:03:09
|
|
Vulkan: make sure clear value is completely initialized
If clearing only depth or stencil, the other channels contained garbage.
Additionally, this removes the clearing of emulated channels. Emulated
textures are cleared once, and they don't need to be recleared.
Bug: angleproject:2361
Change-Id: I01aa6be116d44f6c0115a1c25322db2e579a7b23
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1553739
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
f6c937f8
|
2019-04-02T17:04:08
|
|
Vulkan: fix masked stencil clear
Previously, masked stencil clear was done by clearing every stencil bit
to the ClearValue & Mask. The correct behavior as implemented in this
change is to clear only the bits that are set in Mask. This can only be
done through a draw call, with ClearValue as the stencil reference, and
Mask as the stencil write mask.
Note: this change relies on the depthClamp Vulkan feature which is not
available on ARM.
Bug: angleproject:3241
Change-Id: I0a181c32f881ee813f144e7bdd6f42c8ea6f1966
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1548442
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tobin Ehlis <tobine@google.com>
|
|
27f115aa
|
2019-04-01T10:33:21
|
|
Vulkan: clean up framebuffer clear
The Qualcomm bug workaround is changed such that clears still go through
the render pass loadOp, but the render pass is immediately closed. This
allows us to remove a few fallback methods.
Bug: angleproject:2361
Change-Id: I24c3884a183f8bb40673e922773f70faffad848f
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1545524
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
43997017
|
2019-03-30T23:24:01
|
|
Vulkan: fix non-float clear with draw
Instead of using one draw call that clears all attachments, multiple
draw calls are issued that clear a single attachment each. This allows
us to have a manageable number of variations for the ImageClear.frag
shader, now that non-float format support is introduced.
Bug: angleproject:3187
Change-Id: Ic0c1067a396250bd80f31d00cad5a272acff8be8
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1545523
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
892d1805
|
2019-03-27T14:21:34
|
|
Vulkan: Have the WindowSurfaceVk own the submit semaphores.
Chaining of submit semaphores is only needed for window surfaces because they
are required for the first usage of the swap chain image and final present
of the image.
Move ownership of the submit semaphores from RendererVk to WindowSurfaceVk and
update all calls to finish and flush to be piped through a ContextVk which
tracks the currently bound window surface.
BUG=angleproject:2464
Change-Id: I4b3083124d7910a5dee297afc219e3a3f28057f2
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1542257
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
db4ed317
|
2019-03-29T00:32:45
|
|
Vulkan: glClearBuffer* implementation
Refactors FramebufferVk::clear such that specific render targets could
be cleared, with clear values not necessarily set through glClearColor
etc.
FramebufferVk::clearWithRenderPassOp is modified so that loadOp and
clear values are set after the render pass has been registered in the
graph. This allows multiple glClearBuffer calls to coalesce into the
same render pass.
glClearBuffer calls are then implemented simply as calls to the
refactored clear function with the appropriate parameters.
Bug: angleproject:3187
Change-Id: I2fdfcbea5bf244f63ec981b91caca47f5ee3cd3a
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1545204
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
f1153b03
|
2019-03-27T11:22:54
|
|
Vulkan: Clear DS through render pass even if color is masked
Other than for a Qualcomm driver bug workaround, this makes a few
fallbacks unnecessary.
Bug: angleproject:2361
Change-Id: I8bdc8efba69527ca89bfa7b646a9d41e07f4f895
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1541669
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
5a604a5f
|
2019-03-27T14:22:50
|
|
Ensure framebuffer is up-to-date before drawing
The dEQP-GLES2.functional.fbo.render.texsubimage.between_render_tex2d*
test was failing because a TexSubImage call modifying the framebuffer
wasn't being applied before a subsequent DrawElements call and thus
getting an incorrect result.
Bug: angleproject:3249
Test: angle_deqp_gles2_tests --gtest_filter=dEQP.GLES2/functional_fbo_render_texsubimage_between_render_tex2d_rgb --use-angle=vulkan
Change-Id: I90f791957e6536c5c62fb731d52cd486ab5c05c1
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1542361
Commit-Queue: Courtney Goeltzenleuchter <courtneygo@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
0c128e15
|
2019-03-25T23:50:14
|
|
Vulkan: Use render pass ops to clear images when possible
On tiling GPUs, render pass loadOp and stencilLoadOp can be used to very
cheaply clear an image as it is being render to. This change uses this
feature to clear render targets when possible.
Bug: angleproject:2361
Change-Id: Ic4bdc908873f4802760d549f4893f84a47beac0f
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1500576
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
02a579e9
|
2019-03-27T14:21:20
|
|
Vulkan: roll Vulkan repos to v1.1.102
Bug: angleproject:3320
Change-Id: Ia24f9bc2499f36c6aab810db00bb6408920222fd
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1541719
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
6854940d
|
2019-03-25T23:30:49
|
|
Vulkan: Correct RenderTargetVk extents to image mip
RenderTargetVk::getImageExtents() was always returning the base level
extents of the image it was viewing. This resulted in incorrect extents
being provided to various framebuffer- and renderpass-related
declarations. The function is renamed to `getExtents()` and returns the
appropriate mip extents.
Bug: angleproject:2361
Change-Id: I059a8d19fcb140c9095107d935aa3e5cb1852fc2
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1537327
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
2660b503
|
2019-03-21T12:08:40
|
|
Vulkan: Restore CommandBuffer to namespace vk
Moved vk::CommandBuffer and vk::SecondaryCommandBuffer to vk::priv:: and
aliased vk::CommandBuffer to one or the other. This allows the rest of
the classes to continue seeing vk::CommandBuffer as they used to do.
Used a special alias for the primary command buffer that gets submitted
(vk::PrimaryCommandBuffer).
Bug: angleproject:3136
Change-Id: I61236fd182230991db7395d05e3da3be5e3f45be
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1534456
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
a8ff8814
|
2019-03-05T07:06:32
|
|
Vulkan:Optimize SecondaryCommandBuffers
RELAND of this commit. Had to fix fuzzer build errors.
Optimize performance of SecondaryCommandBuffers and enable them as the
default build option.
To disable this set angle_enable_custom_vulkan_cmd_buffers=false in
your build args.
This CL enhances the PoolAllocator to have a "fast" mode that can
be enabled at class creation. This mode uses an alignment of 1 byte and
enables a fastAllocation() call that avoids some bookkeeping overhead.
The SecondaryCommandBuffer uses this fastAllocation() function.
Furthermore the fast path of fast allocate, using the current page,
is inlined for maximum speed.
Jamie Madill also updated the SecondaryCommandBuffers to pre-allocate
blocks so that the commands occur linearly in memory. This speeds up
processing with improved cache coherency and minimizes overhead when
recording commands.
Also the core Draw functions and their state updates are all inlined
as well as the common functions to initialize commands and to copy
command pointer data.
This change also includes some new, custom commands. One is
imageBarrier that is a specialized version of pipelineBarrier that only
performs a single image layout transition.
There are customized versions of various Draw commands to minimize
copying of parameters.
There are also specialized commands to bind[Graphics|Compute]Pipeline
that have the pipeline type built in to the command.
More custom commands and command data size optimizations will be made
in follow-on commits.
Bug: angleproject:3136
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1497418
Commit-Queue: Tobin Ehlis <tobine@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Change-Id: I621d8f8893308fca240b32390928e8ba0036cf06
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1535385
Reviewed-by: Tobin Ehlis <tobine@google.com>
|
|
896e7811
|
2019-03-22T14:56:33
|
|
Revert "Vulkan:Optimize SecondaryCommandBuffers"
This reverts commit 2219b18c984ed69251f3db3c7b5fd69a2fa68c77.
Reason for revert: Failing to compile on ASAN builders:
https://ci.chromium.org/p/chromium/builders/try/linux-libfuzzer-asan-rel/134782
Currently blocking roll.
Original change's description:
> Vulkan:Optimize SecondaryCommandBuffers
>
> Optimize performance of SecondaryCommandBuffers and enable them as the
> default build option.
> To disable this set angle_enable_custom_vulkan_cmd_buffers=false in
> your build args.
>
> This CL enhances the PoolAllocator to have a "fast" mode that can
> be enabled at class creation. This mode uses an alignment of 1 byte and
> enables a fastAllocation() call that avoids some bookkeeping overhead.
> The SecondaryCommandBuffer uses this fastAllocation() function.
> Furthermore the fast path of fast allocate, using the current page,
> is inlined for maximum speed.
> Jamie Madill also updated the SecondaryCommandBuffers to pre-allocate
> blocks so that the commands occur linearly in memory. This speeds up
> processing with improved cache coherency and minimizes overhead when
> recording commands.
> Also the core Draw functions and their state updates are all inlined
> as well as the common functions to initialize commands and to copy
> command pointer data.
>
> This change also includes some new, custom commands. One is
> imageBarrier that is a specialized version of pipelineBarrier that only
> performs a single image layout transition.
> There are customized versions of various Draw commands to minimize
> copying of parameters.
> There are also specialized commands to bind[Graphics|Compute]Pipeline
> that have the pipeline type built in to the command.
> More custom commands and command data size optimizations will be made
> in follow-on commits.
>
> Bug: angleproject:3136
> Change-Id: I35453cc2656bc8c51f0d84d1adef106900aca9a5
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1497418
> Commit-Queue: Tobin Ehlis <tobine@google.com>
> Reviewed-by: Jamie Madill <jmadill@chromium.org>
TBR=tobine@google.com,syoussefi@chromium.org,jmadill@chromium.org
Change-Id: I1c0bfe864ff343eb8ea6c88556523f8715c981d5
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: angleproject:3136
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1535998
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
2219b18c
|
2019-03-05T07:06:32
|
|
Vulkan:Optimize SecondaryCommandBuffers
Optimize performance of SecondaryCommandBuffers and enable them as the
default build option.
To disable this set angle_enable_custom_vulkan_cmd_buffers=false in
your build args.
This CL enhances the PoolAllocator to have a "fast" mode that can
be enabled at class creation. This mode uses an alignment of 1 byte and
enables a fastAllocation() call that avoids some bookkeeping overhead.
The SecondaryCommandBuffer uses this fastAllocation() function.
Furthermore the fast path of fast allocate, using the current page,
is inlined for maximum speed.
Jamie Madill also updated the SecondaryCommandBuffers to pre-allocate
blocks so that the commands occur linearly in memory. This speeds up
processing with improved cache coherency and minimizes overhead when
recording commands.
Also the core Draw functions and their state updates are all inlined
as well as the common functions to initialize commands and to copy
command pointer data.
This change also includes some new, custom commands. One is
imageBarrier that is a specialized version of pipelineBarrier that only
performs a single image layout transition.
There are customized versions of various Draw commands to minimize
copying of parameters.
There are also specialized commands to bind[Graphics|Compute]Pipeline
that have the pipeline type built in to the command.
More custom commands and command data size optimizations will be made
in follow-on commits.
Bug: angleproject:3136
Change-Id: I35453cc2656bc8c51f0d84d1adef106900aca9a5
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1497418
Commit-Queue: Tobin Ehlis <tobine@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
134425c7
|
2019-03-15T17:02:17
|
|
Vulkan:Integrate SecondaryCommandBuffers
Integrate the custom SecondaryCommandBuffer type into the CommandGraph
nodes by adding new ANGLE_USE_CUSTOM_VULKAN_CMD_BUFFERS define that can
be set in the BUILD gn args with angle_enable_custom_vulkan_cmd_buffers
set to "true."
Initially the custom cmd buffers are disabled by default.
This adds some support functions to SecondaryCommandBuffer to make the
integration easier by matching the wrapped cmd buffer interface:
initialize(), end(), valid().
Bug: angleproject:3136
Change-Id: Ib910554583192550757bb8ce89914e3ea8737988
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1526556
Commit-Queue: Tobin Ehlis <tobine@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
028df5f5
|
2019-02-13T12:57:10
|
|
Vulkan: Implement transfer path for texture copy
This is primarily in preparation for compressed texture copy, but has
the following side effect:
- When transfer is possible, it's faster than draw
- When texture format does not support draw (but transfer is possible),
it will avoid copying through CPU.
Bug: angleproject:2670
Change-Id: I49e1b51e6ccec875db3f971106687c7d48c4916f
Reviewed-on: https://chromium-review.googlesource.com/c/1470595
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
|
|
4a298703
|
2019-01-18T10:49:36
|
|
Vulkan: Support creating EGL images from non-zero mipmaps of textures.
Store a mip offset in TextureVK to apply to all operations on the ImageHelper.
There is no need to store the mip offset in RenderbufferVk because it creates
the resource with the mip offset on the call to setStorageEGLImageTarget.
Store a mipmap level in the RenderTargetVk object so that clear operations
will target the correct mipmap of the image.
BUG=angleproject:2668
Change-Id: Ie976e3dd3a8de8135a7fbb8c84bd51eec0dddce8
Reviewed-on: https://chromium-review.googlesource.com/c/1422059
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
4a41914b
|
2019-02-05T08:50:30
|
|
Vulkan: Add trace markers
Add systrace markers for various RendererVk::finish paths in order to
quickly identify cause of finishes. Also added marker to commandPool
destroy which is currently a known hotspot on some devices.
Bug: angleproject:2528
Change-Id: I5a2fc741679a58445d71a2edd6204cf9e869d236
Reviewed-on: https://chromium-review.googlesource.com/c/1454277
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
7dafe3eb
|
2019-01-28T11:39:15
|
|
Vulkan: optimize image memory barriers
Each image was tracking its current layout, but not the pipeline stage
it was used. Additionally, the barrier access masks were inferred from
the layout. This incurred two inefficiencies:
- The src pipeline stage mask often included all stages, causing
unnecessarily heavy barriers.
- The access masks included all possible accesses by a layout, which in
some cases was overkill, like VK_ACCESS_MEMORY_WRITE_BIT for
VK_IMAGE_LAYOUT_GENERAL (which will eventually used for compute shader
output).
This change instead creates an enum where each element represents the
layout, the stage and access masks when transitioning into the layout
and the stage and access masks when transitioning out of that layout.
The image will instead track a value of this enum (instead of
VkImageLayout), which allows it to create the layout transition barriers
as tight as possible, since it includes all the necessary information.
Bug: angleproject:2999
Change-Id: I91535ce06d10530a6fc217ad3b94b7e288521e25
Reviewed-on: https://chromium-review.googlesource.com/c/1440074
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
c759b8b4
|
2019-01-03T15:16:50
|
|
Vulkan: More Vertex Array optimizations.
Inlines a number of Vulkan vertex array methods.
Also changes the way vertex buffers are bound. Note that Vulkan doesn't
support NULL buffer bindings. Thus we create an emulated NULL buffer
to work around the problem of having gaps in the bound vertex buffers.
This allows us to use a single bind call for ranges of vertex buffers
even when there are gaps.
Also changes how vertex array dirty bits are reset. Instead of calling
memset to clear the affected buffers we pass a mutable pointer to the
Vertex Array sync state. This allows us to only reset the dirty bits
that we sync. This saves on the memory clearing time.
Improves perf by about 10% in the Vulkan VBO state change test.
Bug: angleproject:3014
Change-Id: Ib7b742dff7897fc891606a652ea0b64255a24c86
Reviewed-on: https://chromium-review.googlesource.com/c/1390360
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
29b49417
|
2019-01-07T14:03:06
|
|
Make copy texture test more extensive
By doing the copy multiple times, we exercise both paths where the
destination is already initialized and when it's not.
This adds tests for all combinations of formats and flags.
Bug: angleproject:2958
Change-Id: I56afb44496acd1b4d5a8527f4dbee29afbac9c81
Reviewed-on: https://chromium-review.googlesource.com/c/1398643
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
dbc605ce
|
2019-01-04T16:39:14
|
|
Vulkan: Optimize VBO state changes.
Also has some minor optimizations for the front-end.
12% improvement on the Vulkan VBO change test.
Bug: angleproject:3014
Change-Id: I38e1a8194edfc14bfe57424be348cb9688e928f4
Reviewed-on: https://chromium-review.googlesource.com/c/1369286
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
f83a28a6
|
2018-12-09T03:48:34
|
|
Vulkan: Shader path for framebuffer-to-texture copy
Part 1 in a series of changes to perform image copies on the GPU.
Bug: angleproject:2958
Change-Id: I6264a880865c4738c0866f2dc71af63425fc4118
Reviewed-on: https://chromium-review.googlesource.com/c/1370724
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
c3dc5d48
|
2018-12-30T12:12:04
|
|
Merge gl::Context and gl::ContextState.
This reduces the number of indrections when accessing the Extensions
or Caps structures. It will provide a small speed-up to some methods.
It also cleans up the code.
Bug: angleproject:2966
Change-Id: Idddac70758c42c1c2b75c885d0cacc8a5c458685
Reviewed-on: https://chromium-review.googlesource.com/c/1392391
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Markus Tavenrath <matavenrath@nvidia.com>
|
|
e321940c
|
2018-12-08T16:54:14
|
|
Vulkan: Move image clear functionality to UtilsVk
DispatchUtilsVk is renamed to UtilsVk and the functionality in
framebuffer's clearWithDraw() is moved to that class. Eventually, more
fragment-shader-based internal algorithms will be added to this class as
well.
Bug: angleproject:2958
Change-Id: I4753c9cb3288b59cd1ed60fe7a57b9f189704322
Reviewed-on: https://chromium-review.googlesource.com/c/1369284
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|