|
d838178d
|
2019-03-04T11:07:47
|
|
Vulkan: Rename vk::Shared* to vk::RefCounted*
To be specific regarding what being "shared" entails. Also, avoids
confusion w.r.t to an upcoming vk::Shared class.
Bug: angleproject:2464
Change-Id: Ib9c112bbb822ae30dab39c75a8cde25dd79b2258
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1499693
Reviewed-by: Jamie Madill <jmadill@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
4d153383
|
2019-02-26T15:08:11
|
|
Reland "Vulkan: Implement debug markers"
This reverts commit 0c01e36783b20a0177c653490cb4f8ea4a896075.
Reason for revert: Its dependency that was reverted has now relanded:
https://chromium-review.googlesource.com/c/angle/angle/+/1489153
Original change's description:
> Revert "Vulkan: Implement debug markers"
>
> This reverts commit 983e446921946734fe47217c345a8fe2f079319d.
>
> Reason for revert: Depends on a CL that's reverted: https://chromium-review.googlesource.com/c/angle/angle/+/1470605
>
> Original change's description:
> > Vulkan: Implement debug markers
> >
> > Covers both GL_KHR_debug and GL_EXT_debug_marker.
> >
> > Debug markers are used to specify events or hierarchically categorize a
> > set of commands within the command buffer. When debugging, this allows
> > for quicker navigation to the draw calls of interest, and otherwise
> > provides context to debug output.
> >
> > Bug: angleproject:2853
> > Change-Id: Id65e11fc877d9e70b6fd0fae7f0bbbcb1164bf10
> > Reviewed-on: https://chromium-review.googlesource.com/c/1403956
> > Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
> > Reviewed-by: Jamie Madill <jmadill@chromium.org>
> > Reviewed-by: Geoff Lang <geofflang@chromium.org>
>
> TBR=geofflang@chromium.org,jmadill@chromium.org,syoussefi@chromium.org
>
> Change-Id: I7fcfc8683195d396aec61848719f52c0fa049ece
> No-Presubmit: true
> No-Tree-Checks: true
> No-Try: true
> Bug: angleproject:2853
> Reviewed-on: https://chromium-review.googlesource.com/c/1470606
> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
TBR=geofflang@chromium.org,jmadill@google.com,syoussefi@chromium.org
Bug: angleproject:2853
Change-Id: Ie19ae103244d54dcf7108d5f61c24e318fc44057
Reviewed-on: https://chromium-review.googlesource.com/c/1489154
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@google.com>
|
|
52047de4
|
2018-11-13T17:22:36
|
|
Vulkan: support instanced draws. (reland)
Enable instanced draws with the Vulkan backend.
So far it only works when Vulkan has VK_EXT_vertex_attribute_divisor.
BUG=angleproject:2672
Change-Id: Ib6655625776344305911a1a742c85f17638cee8f
Reviewed-on: https://chromium-review.googlesource.com/c/1469263
Reviewed-by: Frank Henigman <fjhenigman@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Frank Henigman <fjhenigman@chromium.org>
|
|
0c01e367
|
2019-02-13T21:27:23
|
|
Revert "Vulkan: Implement debug markers"
This reverts commit 983e446921946734fe47217c345a8fe2f079319d.
Reason for revert: Depends on a CL that's reverted: https://chromium-review.googlesource.com/c/angle/angle/+/1470605
Original change's description:
> Vulkan: Implement debug markers
>
> Covers both GL_KHR_debug and GL_EXT_debug_marker.
>
> Debug markers are used to specify events or hierarchically categorize a
> set of commands within the command buffer. When debugging, this allows
> for quicker navigation to the draw calls of interest, and otherwise
> provides context to debug output.
>
> Bug: angleproject:2853
> Change-Id: Id65e11fc877d9e70b6fd0fae7f0bbbcb1164bf10
> Reviewed-on: https://chromium-review.googlesource.com/c/1403956
> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
> Reviewed-by: Jamie Madill <jmadill@chromium.org>
> Reviewed-by: Geoff Lang <geofflang@chromium.org>
TBR=geofflang@chromium.org,jmadill@chromium.org,syoussefi@chromium.org
Change-Id: I7fcfc8683195d396aec61848719f52c0fa049ece
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: angleproject:2853
Reviewed-on: https://chromium-review.googlesource.com/c/1470606
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
983e4469
|
2019-01-18T16:04:50
|
|
Vulkan: Implement debug markers
Covers both GL_KHR_debug and GL_EXT_debug_marker.
Debug markers are used to specify events or hierarchically categorize a
set of commands within the command buffer. When debugging, this allows
for quicker navigation to the draw calls of interest, and otherwise
provides context to debug output.
Bug: angleproject:2853
Change-Id: Id65e11fc877d9e70b6fd0fae7f0bbbcb1164bf10
Reviewed-on: https://chromium-review.googlesource.com/c/1403956
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
341304d8
|
2019-02-12T20:58:54
|
|
Revert "Vulkan: support instanced draws."
This reverts commit 199a9f385f5489b957fe1e42bf08f3f40edd38ca.
Reason for revert: Causes a validation error when the extension is not present. See failures here: https://ci.chromium.org/p/chromium/builders/luci.chromium.try/win-angle-rel/693
Original change's description:
> Vulkan: support instanced draws.
>
> Enable instanced draws with the Vulkan backend.
> So far it only works when Vulkan has VK_EXT_vertex_attribute_divisor.
>
> BUG=angleproject:2672
>
> Change-Id: I9445ba64282fa00a6eaee207b15efa2c7a9abbd3
> Reviewed-on: https://chromium-review.googlesource.com/c/1334973
> Commit-Queue: Frank Henigman <fjhenigman@chromium.org>
> Reviewed-by: Jamie Madill <jmadill@chromium.org>
TBR=fjhenigman@chromium.org,jmadill@chromium.org,syoussefi@chromium.org
Change-Id: Iffccc2cca259bcd19c068a87a415d4e196901f45
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: angleproject:2672
Reviewed-on: https://chromium-review.googlesource.com/c/1468201
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
199a9f38
|
2018-11-13T17:22:36
|
|
Vulkan: support instanced draws.
Enable instanced draws with the Vulkan backend.
So far it only works when Vulkan has VK_EXT_vertex_attribute_divisor.
BUG=angleproject:2672
Change-Id: I9445ba64282fa00a6eaee207b15efa2c7a9abbd3
Reviewed-on: https://chromium-review.googlesource.com/c/1334973
Commit-Queue: Frank Henigman <fjhenigman@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
85ca1895
|
2019-01-16T13:27:15
|
|
Vulkan: Store reference to context command buffer.
This frees us from checking the FB every draw. Slightly reduces time
spent in all draw methods. Improvement seen on the draw call overhead
tests. Scores went from 28.17 ns/draw to 26.76 ns/draw on my machine.
In a future improvement we could make this command buffer a dirty bit.
Currently it's a bit slower to call a handler function due to the
dispatch table. Likely we could optimize this by reverting back to a
dirty bit switch and inlining the handler functions. That is left for
future work.
Vulkan is happy enough to run multiple RenderPasses and bind different
Pipelines in the same command buffer. But ANGLE defers RenderPass init
until we submit our work. Thus we can only support one RenderPass per
secondary buffer.
Test: angle_perftests DrawCall*/vulkan_null
Bug: angleproject:3014
Change-Id: I89fd0d9e0822400a5c5a16acb5a9c400a0e71ab5
Reviewed-on: https://chromium-review.googlesource.com/c/1393905
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
633d5e69
|
2018-12-23T19:58:01
|
|
Vulkan: Put viewport and scissor back in pipeline desc.
Turns out this is much faster than using dynamic state. When we
support multiple viewports it might be easier to use dynamic
state since we won't need to make an overly large pipeline
description. We could support both methods using a flag to
indicate the viewport and/or scissor regions are invalid.
Until then we can remove the pipeline and scissor dirty bits.
Improves perf by about 15% in the Vulkan VBO state change test.
Bug: angleproject:3013
Change-Id: I4572250626a9a0f0ca3451b17e8f0de186416cae
Reviewed-on: https://chromium-review.googlesource.com/c/1390359
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
3f0c4a56
|
2019-01-10T10:20:35
|
|
Vulkan: Faster state transitions.
Implements a transition table from Pipeline Cache entry to
state change neighbouring Pipeline Cache entries. We use
a 64-bit mask to do a quick scan over the pipeline desc.
This ends up being a lot faster than doing a full hash
and memcmp over the pipeline description.
Note that there could be future optimizations to this design.
We might keep a hash map of the pipeline transitions instead
of a list. Or use a sorted list. This could speed up the search
when there are many transitions for cache entries. Also we could
skip the transition table and opt to do a full hash when there
are more than a configurable number of dirty states. This might
be a bit faster in some cases. Likely this will be something we
can add performance tests for in the future.
Documentation is also added in a README file for the Vulkan back
end. This will be extended over time.
Improves performance about 30-35% on the VBO state change test.
Bug: angleproject:3013
Change-Id: I793f9e3efd8887acf00ad60e4ac2502a54c95dee
Reviewed-on: https://chromium-review.googlesource.com/c/1369287
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
|
|
80766cfa
|
2019-01-10T10:20:34
|
|
Vulkan: Update individual VAO attribs when dirty.
This simplifies the dirty state updates in VertexArrayVk. It also lets
us use a smaller dirty bit mask when a single attribute is marked dirty
in a vertex array.
Improves performance by about 1-2% in the VBO state change test. Will
allow for better performance using a pipeline transition table.
Bug: angleproject:3013
Change-Id: I25c5172b3f41b7abac6b8273c8f9cd42eb46cc9f
Reviewed-on: https://chromium-review.googlesource.com/c/1403958
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Commit-Queue: Jamie Madill <jmadill@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>
|
|
0c667215
|
2019-01-01T14:40:36
|
|
Pass ErrorSet to ContextImpl constructor.
This removes the need for the setErrorSet method.
Also update some egl::Error TODO bugs.
Bug: angleproject:2491
Change-Id: I0aba07c4a53b579835a88c3dacae294f752e6b17
Reviewed-on: https://chromium-review.googlesource.com/c/1392393
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: 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>
|
|
8dc27f99
|
2018-11-29T11:45:44
|
|
Use packed enum for DrawElementsType.
The packing and unpacking take a few extra instructions. But it
completely obviates the need for any switches in the validation code.
Speed is slightly faster or the similar depending on the back-end.
Also add gl_angle_ext.xml to GL entry point generator inputs. This was
missing and would cause the code generation to miss certain changes.
Bug: angleproject:2985
Change-Id: I1ea41a71db71135000166ead8305ec42d22ff7b3
Reviewed-on: https://chromium-review.googlesource.com/c/1351729
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
4f6592fa
|
2018-11-27T16:37:45
|
|
Remove gl::Error.
Removes several TODOs. Only egl::Error remains.
Also slightly decreases binary size.
Bug: angleproject:2491
Change-Id: I3a9d1c22eb0884ca9e37362463fddd0083faf826
Reviewed-on: https://chromium-review.googlesource.com/c/1337462
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
|
|
c30f45d3
|
2018-11-12T16:37:59
|
|
Vulkan: Rename PipelineDesc/Cache to Graphics&
PipelineDesc describes a Vertex-Fragment pipeline and PipelineCache (not
to be confused with vk::PipelineCache) implements a cache of such
pipeline objects.
In preparation for Compute support, these data structures are prefixed
with Graphics.
Bug: angleproject:2959
Change-Id: I9181586fb946b787216ca0b2ad6340f90c3ab55f
Reviewed-on: https://chromium-review.googlesource.com/c/1333971
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
666818ea
|
2018-11-14T09:54:33
|
|
Use angle::Result in front-end (Part 8)
Refactors the gl::Texture class and a few related methods. Also reduces
binary size by up to 4k.
Bug: angleproject:2491
Change-Id: Ib9a69d7f507b0dce35abb17b90532f812bf43214
Reviewed-on: https://chromium-review.googlesource.com/c/1291845
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
|
|
d856ca48
|
2018-10-31T16:55:12
|
|
Vulkan: add clear test for emulated stencil or depth formats
S8_UINT and D24_UNORM_X8_UINT are the only formats currently that are
single-aspect and are possibly emulated with a packed depth-stencil
format if it's not supported. A flag to FeaturesVk has been added as a
way to force this behavior for the sake of testing.
This test is added to ensure the correct clear algorithm is used for
this case. Additionally, this case is detected and the other aspect is
forcefully cleared to 0 whenever the original aspect is cleared.
Bug: angleproject:2815
Change-Id: Ief3039d66bbf46468213b9e3224f7cc7541c3a2e
Reviewed-on: https://chromium-review.googlesource.com/c/1312453
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
bc5834cd
|
2018-11-06T11:13:50
|
|
Vulkan: Use dynamic state for Viewport and Scissor.
This reduces the size of the pipeline cache descriptor under 256 bytes.
Further improves the speed of cache query. Has the minor cost of
needing more state application during a new command buffer or render
pass.
Bug: angleproject:2522
Change-Id: I3d71e457a36084ac4748d04fe3c9bab4caad503c
Reviewed-on: https://chromium-review.googlesource.com/c/1316888
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
77abad8d
|
2018-10-25T17:03:48
|
|
Remove Context::gatherParams.
This won't be used in the future. It saves a few instructions on each
entry point.
Also refactors a bit of touched code. Also adds in a missed entry
point: "glTexStorage2DMultisampleANGLE".
Removes related code and moves remaining helper code in params.h into a
new file entry_point_utils.h.
In total this patch series reduces overhead by up to 5%.
Bug: angleproject:2933
Change-Id: Ifb49564597cde6ba82dfc3e185227619fdc62612
Reviewed-on: https://chromium-review.googlesource.com/c/1299478
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
bfe31c42
|
2018-10-25T17:03:47
|
|
Remove uses of DrawCallParams.
Packing and referencing this structure was causing unnecessary draw
call overhead. This improves performance on all the back-ends. Impacts
the GL back-end the most.
In total this patch series reduces overhead by up to 5%.
Bug: angleproject:2933
Change-Id: Ief416ab874e481baf960d02965978a311214a146
Reviewed-on: https://chromium-review.googlesource.com/c/1299477
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
|
|
32643cea
|
2018-10-19T11:38:03
|
|
Use angle::Result in front-end (Part 2)
Handles the gl::Context class and its implementation.
Bug: angleproject:2491
Change-Id: I7b7eb0897d131a194f6b563b7e01756fd7adb7e1
Reviewed-on: https://chromium-review.googlesource.com/c/1280742
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
78bcd2be
|
2018-10-16T15:05:20
|
|
Vulkan: Fix deleting in-use descriptor sets.
Sequences of many frames with uniform updates could lead to a bug where
we attempt to delete descriptor sets that are still in use. To trigger
the bug we need to write enough uniform data to trigger a descriptor
set to be freed. This would correctly trigger refresh sets in the
Program. But if there was a second program idle in the background that
also allocated descriptors from the old pool, the bug would manifest.
Fix this by storing a shared handle to the descriptor pool in the
Program. The dynamic descriptor pool won't recycle descriptor pools
internally unless there are zero outstanding references to the pool.
We could also improve this in a resource sharing situation by keeping
a single shared dynamic descriptor pool per share group.
Includes a contribution from tobine@google.com that adds a test to
cover the bug.
Bug: angleproject:2863
Change-Id: Id585b85f33f8cfa3772ceff3af512d1e4fb0b75a
Reviewed-on: https://chromium-review.googlesource.com/c/1271919
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
9d0bb3d4
|
2018-10-09T20:29:13
|
|
Pass bit mask to ContextImpl::syncState.
This can be used to mask out inappropriate local dirty bits.
Bug: angleproject:2763
Change-Id: Ie46e464df0dc719c963ff9f7066d42eb5a028262
Reviewed-on: https://chromium-review.googlesource.com/c/1264062
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Yuly Novikov <ynovikov@google.com>
|
|
6f755b21
|
2018-10-09T12:48:54
|
|
Use angle::Result in front-end. (Part 1)
This covers most of the hot paths used in draw calls. Gives in the
order of a 5% reduction in draw call overhead.
Bug: angleproject:2491
Change-Id: I2d53afb1163eaceed61fb9cd9ce6c1267c85c0fa
Reviewed-on: https://chromium-review.googlesource.com/c/1258149
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
563fbaa0
|
2018-10-02T11:22:01
|
|
Vulkan: Implement occlusion queries
Begin and end queries insert an execution barrier in the command graph
to ensure the commands around them are not reordered w.r.t to the query.
Also, these commands cannot be recorded in separate secondary command
buffers. Therefore, special-function nodes are created to perform the
begin and end query calls on the final primary command buffer.
Bug: angleproject:2855
Change-Id: Ie216dfdd6a2009deaaf744fd15d2db6899dd93e9
Reviewed-on: https://chromium-review.googlesource.com/c/1259762
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
b36a4816
|
2018-09-25T10:15:11
|
|
Vulkan: Add OpenGL line segment rasterization.
Line rasterization rules are implemented using a shader patch. The
patch does a small test and discards pixels that are outside of the
OpenGL line region.
The feature is disabled on Android until we can determine the root
cause of the test failures.
Bug: angleproject:2598
Change-Id: Ic76c5e40fa3ceff7643e735e66f5a9050240c80b
Reviewed-on: https://chromium-review.googlesource.com/1120153
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
74c179bb
|
2018-09-24T10:53:23
|
|
Vulkan: Refresh descriptor sets on driver uniform change.
In some state change scenarios the driver uniforms would be updated but
not reapplied to the current state. Fix this by setting the descriptor
sets dirty when we dirty the driver uniforms.
Includes a test using gl_DepthRange. Also fixes a bug with the upcoming
line segment rasterization emulation.
Bug: angleproject:2598
Bug: angleproject:2845
Change-Id: Ia66f3c86f9770ceb145069eec879fd8725111a76
Reviewed-on: https://chromium-review.googlesource.com/1240413
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
8e9d2340
|
2018-09-10T13:29:37
|
|
Vulkan: Fix FragCoord scaling when a viewport is applied.
We were using the pivot based on the viewport dimensions which is
only valid if the viewport is the size of the framebuffer. The more
correct pivot size is actually based on the Framebuffer height.
Also updates the driver uniforms block to be a bit simpler.
Bug: angleproject:2598
Change-Id: I1cb500cded7141d10e8db6862b6ed29758cc7fb4
Reviewed-on: https://chromium-review.googlesource.com/1214205
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Frank Henigman <fjhenigman@chromium.org>
|
|
ef6023ea
|
2018-09-06T16:24:38
|
|
Vulkan: Make ContextVk driver uniforms a dirty bit.
This makes the update lazier and won't trigger as many times during
state changes. It also makes a command buffer available during the
update so we can use barriers if necessary.
Bug: angleproject:2598
Bug: angleproject:2727
Change-Id: I23ac91c84f6b1f4bad14b3354d19402e5978791e
Reviewed-on: https://chromium-review.googlesource.com/1211730
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Frank Henigman <fjhenigman@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
2b858c2f
|
2018-09-03T13:58:14
|
|
Vulkan: More micro-optimizations to setupDraw.
Still a hotspot but much improved.
Bug: angleproject:2786
Change-Id: Ie68ff314e6c952f281b48f6d9af37b5dcd194d6a
Reviewed-on: https://chromium-review.googlesource.com/1194882
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Frank Henigman <fjhenigman@chromium.org>
|
|
ef3b9b46
|
2018-08-30T16:18:38
|
|
Vulkan: Add ContextVk dirty bits.
These dirty bits mostly track state needed for the command buffer. It
should speed up ContextVk::setupDraw by skipping unset dirty bits
instead of using boolean checks.
Improves perf slightly on the Vulkan null draw call test.
Bug: angleproject:2786
Change-Id: I071ce558c522732a17ad101d097ee4d10740abf1
Reviewed-on: https://chromium-review.googlesource.com/1194300
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Frank Henigman <fjhenigman@chromium.org>
|
|
37386b02
|
2018-08-30T16:18:37
|
|
Vulkan: Cache object pointers in ContextVk.
Small performance optimization.
Bug: angleproject:2786
Change-Id: Ib01c1762d438ffb72ec25bf05135a7d3271d6aee
Reviewed-on: https://chromium-review.googlesource.com/1188954
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Frank Henigman <fjhenigman@chromium.org>
|
|
88fc6da3
|
2018-08-30T16:18:36
|
|
Vulkan: Mega-refactor to VertexArrayVk.
This moves a lot of the code in VertexArrayVk into ContextVk. Having
the code in a centralized place makes the code a bit more organized
since the Context is reponsible for binding state to the command
buffers. It also makes it easier to use dirty bits to track the command
buffer state.
Bug: angleproject:2786
Change-Id: I5cefbb14028e8f3fe651f26e997ca88f8f1c7628
Reviewed-on: https://chromium-review.googlesource.com/1188953
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
5a4c932a
|
2018-07-16T11:01:58
|
|
Vulkan: Implement "default" vertex attributes.
Rendering from disabled attributes is implemented using small dynamic
buffers. The buffers use a stride of zero so the same vertex data is
pulled for every index.
This fixes all the disable attribute tests in dEQP.
Bug: angleproject:2444
Change-Id: I04fe139076da3e3ff723bed8eb17e333b4cb0ddf
Reviewed-on: https://chromium-review.googlesource.com/1136664
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
84c662b9
|
2018-07-12T15:56:55
|
|
Vulkan: Store program textures cache.
The program textures update needs to call into the incomplete textures
cache. Moving this step into an update mechanism allows us to avoid
some complexity of calling the incomplete textures cache inside the
ProgramVk class.
This enables further refactors for draw call shader patching and line
segment raster.
Bug: angleproject:2598
Change-Id: I0fd81ca58d2641572a2dd444992ccddd99ebc823
Reviewed-on: https://chromium-review.googlesource.com/1127301
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
06ca634e
|
2018-07-12T15:56:53
|
|
Vulkan: Refactor for draw call shader patching.
This refactors a few methods to enable draw call shader patching. The
shader serials in the Pipeline description are inserted right before
we query the pipeline cache. This is done during a draw call. Also
renames the 'QueueSerial' member of the ObjectAndSerial class to just
'Serial' to more accurately reflect it usage in ShaderAndSerial.
Also changes the GlslangWrapper class to have all static methods. If we
need to store state we can revert these changes at some point.
Also splits the GlslangWrapper link call into two static calls. One
call is called to get the linked source code. The second call compiles
the linked sources into shader code. Only the second call will be
necessary for draw call shader patching to implement OpenGL line
rasterization in Vulkan.
Bug: angleproject:2598
Change-Id: I7bad3c3eeab1fb062c15a840836db4a28f841a26
Reviewed-on: https://chromium-review.googlesource.com/1127158
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
e835609c
|
2018-07-12T12:36:47
|
|
Vulkan: Implement gl_DepthRange support using driver uniform
Bug: angleproject:2592
Change-Id: Iec3d111df4d8e5cef205c8afb177f0514ffac5c8
Reviewed-on: https://chromium-review.googlesource.com/1135448
Commit-Queue: Luc Ferron <lucferron@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
21061026
|
2018-07-12T23:56:30
|
|
Vulkan: Use angle::Result error handling.
Introduces a vk::Context class to contain an error handler and Renderer
pointer. This abtracts the common code path for ContextVk + DisplayVk.
Removes vk::Error in favor of the POD angle::Result class. There are a
few remaining usages of gl::Error that will have to be cleaned up when
we can change the front-end APIs.
Bug: angleproject:2713
Change-Id: I5e68f223d595c6c561b59d6a85759e5738ed43c6
Reviewed-on: https://chromium-review.googlesource.com/1128924
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Frank Henigman <fjhenigman@chromium.org>
|
|
9ff9c773
|
2018-07-11T13:08:18
|
|
Vulkan: Add driver uniforms for point coords flipping
This new driver uniform allows us to dynamically decide if we
flip the y coordinate of the gl_PointCoord variable.
We only flip the coordinate if we render downside-up, and otherwise
we cancel the flipping since the y coordinate doesn't need
modification anymore.
This completes all end2end and deqp gles2 tests success when viewport
flipping is enabled on Windows Nvidia.
Bug: angleproject: 2673
Change-Id: I570e01ef4965933428375f6ebd8eac83ef16fbff
Reviewed-on: https://chromium-review.googlesource.com/1133584
Commit-Queue: Luc Ferron <lucferron@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
5396f2a6
|
2018-07-12T08:24:23
|
|
Return Error from onMakeCurrent
- Preliminary change for gl_PointCoords fix for Vulkan.
Bug: angleproject:2673
Change-Id: Ie43e8aeccf75a8daa4a137b98292d848522ea2f0
Reviewed-on: https://chromium-review.googlesource.com/1134877
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Luc Ferron <lucferron@chromium.org>
|
|
82eda93f
|
2018-07-09T15:10:22
|
|
Vulkan: Fix for framebuffer blit and Y flip
- The depth/stencil related tests are now disabled since I found out
that the tests are too simple to find issues if there is a flip since
they use only a single color and no gradient / checked board.
This is left to implement in the Vulkan backend later on.
Bug: angleproject:2673
Change-Id: I8f7091d4b9c8c3bec0353ebab28304b6209ea350
Reviewed-on: https://chromium-review.googlesource.com/1129629
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Luc Ferron <lucferron@chromium.org>
|
|
834a3a10
|
2018-07-09T13:32:39
|
|
Vulkan: Add driver uniforms set.
This will be used to specify the applied Vulkan. We will use this to
implement OpenGL line rasterization rules.
Bug: angleproject:2717
Change-Id: I3395bf620a01c4b84b19a00037d05f148e5523f3
Reviewed-on: https://chromium-review.googlesource.com/1120151
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Luc Ferron <lucferron@chromium.org>
|
|
caa55cd7
|
2018-07-05T13:19:35
|
|
Vulkan: Support EGL_ANGLE_surface_orientation for vertical surface flipping.
This is a simpler way of flipping when the client is aware of the extension.
This allows Chrome to render with the correct orientation.
BUG=angleproject:2709
Change-Id: I52216b765a42930f2be043a07fe441a9f875a14d
Reviewed-on: https://chromium-review.googlesource.com/1127342
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Luc Ferron <lucferron@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
|
|
189ad877
|
2018-07-09T13:32:37
|
|
Return an Error from ContextImpl::syncState.
This will allow the Vulkan back-end to call Vulkan commands that return
VkResult within syncState.
Bug: angleproject:2717
Change-Id: I05e1379e71acaac56bcc9493c8561e82da000934
Reviewed-on: https://chromium-review.googlesource.com/1120150
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Luc Ferron <lucferron@chromium.org>
|
|
bf6dc379
|
2018-06-28T15:24:19
|
|
Vulkan: Flip viewport on y for the backbuffer only
- Hide the implementation behind a feature flag, currently
disabled permanently as I'm working on fixing the different
failures.
- SimpleOperationTest.* passing
Bug: angleproject:2673
Change-Id: Ic86520c3cc478d62bebbaeaf4c6b33c439a67b0f
Reviewed-on: https://chromium-review.googlesource.com/1119089
Commit-Queue: Luc Ferron <lucferron@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
1266d20a
|
2018-06-29T09:11:34
|
|
Vulkan: Add Features class.
This class will control optional features in the Vulkan back-end. It
allows toggling the feature support from a centralized place. This can
be useful for performance or correctness testing.
Add a placeholder feature for line segment raster. We can also use a
feature for enabling backbuffer flipping.
Bug: angleproject:2598
Bug: angleproject:2673
Change-Id: I8ddec2dba2181d5b014267be68aee9d2cb015ccf
Reviewed-on: https://chromium-review.googlesource.com/1120149
Reviewed-by: Luc Ferron <lucferron@chromium.org>
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
0bb940a8
|
2018-06-22T09:59:34
|
|
Vulkan: Edge case test and fix for alpha channel masks
The contextVk color mask needed to be updated when we
were syncing the state of the framebufferVk to make sure
the right mask gets applied in the test described in
ClearTest.cpp
Bug: angleproject:2685
Bug: angleproject:2597
Change-Id: I575028aad4cd495bf4ec1484cc870940dcde92d5
Reviewed-on: https://chromium-review.googlesource.com/1112038
Commit-Queue: Luc Ferron <lucferron@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
edeaa835
|
2018-06-22T09:18:41
|
|
Vulkan: Fix mixed descriptor pool updates.
When updating the Uniforms and Textures pools at different rates we
could trigger an ANGLE bug. We would sometimes reset and free the
currently bound descriptors. We can fix this by using separate
descriptor pools for each descriptor set.
Bug: angleproject:2678
Change-Id: I605b558531e7745484e16156a3af5eac40ffcc79
Reviewed-on: https://chromium-review.googlesource.com/1110662
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Luc Ferron <lucferron@chromium.org>
|
|
5fd3693e
|
2018-06-19T14:55:50
|
|
Vulkan: Mask the alpha channel for draw when needed
When the angleFormat we have has no alpha channel, but the actual
texture underneath has one, we shouldn't be drawing over the alpha
channel, so we apply a mask on it when we're in this situation.
Bug: angleproject:2597
Change-Id: Ia7110709e6ee32bb61988d08f5049e4e80e7e24e
Reviewed-on: https://chromium-review.googlesource.com/1106759
Commit-Queue: Luc Ferron <lucferron@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
316c6065
|
2018-05-29T10:49:45
|
|
Vulkan: Call GraphResource instead of GraphNode.
We don't need to use the CommandGraphNode class directly. This CL
consolidates our code so we never call the GraphNodes class directly.
Instead we call operations on GraphResource. This should simplify the
interaction with APIs from the various graph and dependency management
classes in the Vulkan back-end.
A new concept of 'starting' vs 'appending' commands is introduced.
Appending tries to avoid starting new command buffers when possible.
Should not change how the graphs are constructed, and mostly be a
refactoring change. There may be minor behaviour changes to some
commands.
Bug: angleproject:2539
Change-Id: Ia971e5cacb1164b9b3b22fa4a0a55b954d81f10e
Reviewed-on: https://chromium-review.googlesource.com/1052068
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Frank Henigman <fjhenigman@chromium.org>
|
|
d0a7d10f
|
2018-05-07T12:40:20
|
|
ES3.1: Set unordered access view related resource limits on D3D11
This patch sets the implementation-dependent resources limits related
to unordered access views (images, shader storage blocks, atomic
counter buffers and fragment shader outputs) on D3D11 back-ends.
For pixel shaders, the render targets and unordered access views share
the same resource slots when being written out, so we plan to allocate
these slots as follows:
- As there are 8 slots for UAVs and RTVs in feature level 11_0, currently
we assign 1 slot for atomic counter buffer and 7 slots that are shared
among images, shader storage blocks and fragment shader outputs.
- As there are 64 slots for UAVs and RTVs in feature level 11_1, currently
we assign 4 slots for atomic counter buffers and 60 slots that are
shared among images, shader storage blocks and fragment shader
outputs.
We also limit the maximum number of draw buffers to 7 if we create ES 3.1
context on D3D11 feature level is 11_0 because the value of combined shader
output resources is 7.
This patch also labels several dEQP cases from "FAIL" to "SKIP" because
since the resource limits on ssbos, atomic counter buffers and images
in rendering pipeline are set in D3D11 back-ends, the GLSL programs in
these cases can pass all the related link checks, thus these cases will
crash due to reaching the unimplemented parts when they are running on
ANGLE D3D11 back-ends.
BUG=angleproject:2345
TEST=dEQP-GLES31.functional.state_query.integer.max_compute_atomic_counter_buffers_*
dEQP-GLES31.functional.state_query.integer.max_compute_shader_storage_blocks_*
dEQP-GLES31.functional.state_query.integer.max_atomic_counter_buffer_bindings_*
dEQP-GLES31.functional.state_query.integer.max_combined_atomic_counter_buffers_*
dEQP-GLES31.functional.state_query.integer.max_image_units_*
dEQP-GLES31.functional.state_query.integer.max_combined_image_uniforms_*
dEQP-GLES31.functional.state_query.integer.max_shader_storage_buffer_bindings_*
dEQP-GLES31.functional.state_query.integer.max_combined_shader_storage_blocks_*
dEQP-GLES31.functional.state_query.integer.max_combined_shader_output_resources_*
Change-Id: I56a4e6c60d4f6f5bd6f238ae8ce425fb5072a4a3
Reviewed-on: https://chromium-review.googlesource.com/1046372
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
|
|
493f9571
|
2018-05-24T19:52:15
|
|
Add PrimitiveMode packed GLenum.
Bug: angleproject:2574
Change-Id: I3d7bd7ca0d69a364a611dc04799ea34906fc4a6c
Reviewed-on: https://chromium-review.googlesource.com/1067114
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
|
|
90968360
|
2018-05-04T08:47:22
|
|
Vulkan: Incomplete textures support
2D multisample is out of scope since its ES 3 only.
Bug: angleproject:2499
Change-Id: Id5f81d713a2882ba2a91b7d3f281d71a3e9289f4
Reviewed-on: https://chromium-review.googlesource.com/1046786
Commit-Queue: Luc Ferron <lucferron@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
ad3ae90a
|
2018-03-09T13:40:42
|
|
Use packed enums for QueryType.
BUG=angleproject:2169
Change-Id: I129a9d8e295859daa071a298dab9fe1895315cc0
Reviewed-on: https://chromium-review.googlesource.com/957318
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
|
|
9aef3670
|
2018-04-27T11:45:06
|
|
Vulkan: Implement masked color clears.
This implements masked color clear using clear shaders. The shaders
themselves were introduced in a prior patch. In order to get the
right setup for the draw call to trigger the shaders, we create
an internal pipeline from the pipeline cache. We also use a special
pipeline layout with only uniform buffers. The masked out color
channels are disabled via settings on the pipeline.
This fixes the dEQP masked color clear tests. It doesn't handle
masked color clears combined with the depth clear bit. It's likely
we don't have test coverage for this case.
Bug: angleproject:2455
Change-Id: I513248cc0f7e58f490fc16ac9afb40119d730ccc
Reviewed-on: https://chromium-review.googlesource.com/1031373
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
b90779eb
|
2018-04-27T11:45:01
|
|
Vulkan: Pass fewer Context pointers around.
These weren't needed in many places.
Also renames one FramebufferVk method.
Bug: angleproject:2455
Change-Id: Idb641094fa3e180a85f357533d86bd0b19db4ec8
Reviewed-on: https://chromium-review.googlesource.com/1024826
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Luc Ferron <lucferron@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
d17bdfe5
|
2018-04-05T13:50:10
|
|
Vulkan: 3 Final bugfixes to enable all dEQP depth_stencil tests
- The scissor when clearing should not be clipped against the viewport.
- The render pass was created with a render area == to the current
viewport, but the viewport can be changed by the tests multiple times
per render pass, so we should always keep the renderArea to the full
framebuffer instead.
- Enables an additional 163 dEQP tests.
- We should clip the scissor to the framebuffer dimensions instead of
the viewport. Its valid to do a cmdClearAttachments outside the
viewport, but not outside the full framebuffer's dimension.
Bug: angleproject:2443
Change-Id: I79168e9f0c782d6dec77470fef938b85ad7a8794
Reviewed-on: https://chromium-review.googlesource.com/998448
Commit-Queue: Luc Ferron <lucferron@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
6c7ab7fe
|
2018-03-31T14:19:15
|
|
Vulkan: Reorganize helper classes.
This renames ResourceVk to vk::CommandGraphResource, which should help
clarify its usage. This also moves LineLoopHandler, ImageHelper, and
the DynamicBuffer and DynamicCommandPool classes into a new vk_helpers
module. This file contains helper classes that manage other resources.
Also this makes DynamicBuffer and DynamicDescriptorPool no longer
inherit from CommandGraphResource. In the future, only Impl objects
will be allowed to be graph resources.
Bug: angleproject:2318
Change-Id: I0fa23da2ac853d90f3c822547a4a314f247cc757
Reviewed-on: https://chromium-review.googlesource.com/985200
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Frank Henigman <fjhenigman@chromium.org>
|
|
c3755fc5
|
2018-04-05T08:39:13
|
|
Vulkan: Move Streaming data to VertexArrayVk.
Instead of the ContextVk owning the translations for the various
attributes, make the VertexArrayVk own them. This way they can
handle the dirty bit state notifications directly instead of
needing their own Observers.
Bug: angleproject:2389
Change-Id: I5e571ba6c563e820a4c0d5f92db35031e6f2428a
Reviewed-on: https://chromium-review.googlesource.com/989258
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
|
|
f3614370
|
2018-03-31T14:19:14
|
|
Vulkan: Rename StreamingBuffer to DynamicBuffer.
This makes it consistent with DynamicDescriptorPool, and gives a bit
more precise definition.
Bug: angleproject:2318
Change-Id: I8953113165ebe2d0dcfc0fc923d94280180442ce
Reviewed-on: https://chromium-review.googlesource.com/985199
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Luc Ferron <lucferron@chromium.org>
|
|
32fd63bc
|
2018-03-31T11:20:35
|
|
Vulkan: Use DrawCallParams in draw methods.
This cleans up some of the vertex streaming logic.
Bug: angleproject:2389
Change-Id: I8ed2f8acd06bbdd97db40acac35e5692112a3efe
Reviewed-on: https://chromium-review.googlesource.com/989257
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
|
|
daedf4d2
|
2018-03-16T09:28:53
|
|
Vulkan: Add a DynamicDescriptorPool class.
In order to manage the life of descriptor sets better and allow
allocating descriptor sets infinitely.
Bug:angleproject:2392
Change-Id: Ia3c7145d85d697c04e8008e8d8839c428dd2e864
Reviewed-on: https://chromium-review.googlesource.com/966786
Commit-Queue: Luc Ferron <lucferron@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
5242d5bf
|
2018-02-15T07:14:35
|
|
Vulkan: Implement scissored clears.
Bug: angleproject:2356
Change-Id: I33888f9b4ebaf4b0b5af4ad59b12ad963325a790
Reviewed-on: https://chromium-review.googlesource.com/921882
Commit-Queue: Luc Ferron <lucferron@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
a53d0e18
|
2018-02-13T00:06:06
|
|
Vulkan: support indices in client memory.
glDrawElements will now work with indices and/or vertex data in client memory,
as well as in a buffer object.
Enable corresponding tests.
BUG=angleproject:1683
Change-Id: Iefb9796a48b21ed6f9a837b08b0ad3218ff6dd6b
Reviewed-on: https://chromium-review.googlesource.com/915721
Commit-Queue: Frank Henigman <fjhenigman@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
78e39b3f
|
2018-02-26T07:42:44
|
|
Vulkan: Line loops for indexed draw calls
Bug: angleproject:2335
Change-Id: Iabd6ae8181c6d3fb487f953a6fbf699db568a1c9
Reviewed-on: https://chromium-review.googlesource.com/941261
Commit-Queue: Luc Ferron <lucferron@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
360098d5
|
2018-02-21T07:33:50
|
|
Vulkan: Implement GL_LINE_LOOP support for non-indexed draw calls
Line loops aren't supported in Vulkan directly, so we use line strips with
an indexed buffer to emulate them. To hide the complexity of that, I've created
the LineLoopHandler class in vk_utils.
Bug: angleproject:2335
Change-Id: Id3e020d27e5265565e61e96d3fd0187c4fe2b152
Reviewed-on: https://chromium-review.googlesource.com/931421
Commit-Queue: Luc Ferron <lucferron@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
e703c606
|
2018-02-20T10:21:48
|
|
Add gl::RenderbufferState shared state helper.
This shared state will be read-only visible in the RenderbufferImpl
class. It mirrors existing structs for Textures, Buffers, and other
classes. It allows the implementation class to have a read-only view
as to the current GL state of an object.
This will be useful to the Vulkan back-end, which would like to know
the current Renderbuffer state before having to redefine the storage.
If the current parameters match, it might not have to redefine the
storage at all.
The solution involves passing around the gl::RenderbufferState
through various factory methods.
Also name the Renderbuffer implementation pointer consistently and
make it use std::unique_ptr.
Bug: angleproject:2347
Change-Id: Ied6e0358e24e74a7fedbe4aea692edee909b5838
Reviewed-on: https://chromium-review.googlesource.com/922457
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
17448956
|
2017-01-05T15:48:26
|
|
Vulkan: vertex attributes in client memory.
Support vertex data stored in client memory passed to glVertexAttribPointer.
Only GL_FLOAT data is supported at this time. Includes a simple test.
BUG=angleproject:1683
Change-Id: I3bc0cdefe02b02c046b0e85822019a0f1762235e
Reviewed-on: https://chromium-review.googlesource.com/425137
Commit-Queue: Frank Henigman <fjhenigman@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
f4d693c0
|
2018-02-14T16:38:16
|
|
Vulkan: Cache clear color in ContextVk.
This makes the current clear color a bit more accessible than using
the current GL state clear color directly. It is stored in the Context
using the Vulkan clear color struct.
This also cleans up the attachment clear values in FramebufferVk and
paves the way for depth/stencil clear when support for depth/stencil
exists.
Bug: angleproject:2357
Change-Id: I0553e4447249325115625a44e9f4b1623c7cb0bc
Reviewed-on: https://chromium-review.googlesource.com/919550
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
|
|
ffa4cbb6
|
2018-01-23T13:04:07
|
|
Vulkan: Implement the Pipeline cache.
This currently keeps a cache of every PSO compiled and does not trim
the cache or evict old members on memory pressure. This will be done
as a follow-up.
Improves the speed of the Draw Call microbenchmark 50x when using a
single state change.
Bug: angleproject:2163
Change-Id: I2cceb38ca57ae639f36a944f4571b627481b92da
Reviewed-on: https://chromium-review.googlesource.com/876954
Reviewed-by: Frank Henigman <fjhenigman@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
3c424b48
|
2018-01-19T12:35:09
|
|
Vulkan: Add vk_cache_utils.h.
This file contains the Pipeline and RenderPass cache utils.
Also renames renderervk_utils.h to vk_utils.h and the format utils
file.
Refactoring change only.
Bug: angleproject:2163
Change-Id: I5113a9a2c6f0b0960d38e6c2d8e391fa2d9f5f6a
Reviewed-on: https://chromium-review.googlesource.com/876505
Reviewed-by: Frank Henigman <fjhenigman@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
f2f6d379
|
2018-01-10T21:37:23
|
|
Vulkan: Add PipelineDesc.
The PipelineDesc class is a 512-byte packed description of the entire
Vulkan pipeline state. It uses the alignas keyword and some static
asserts to verify that the structures are packed. This ensures that
when ANGLE uses MurmurHash to hash the entire struct, and memcmp to
check for identity, that there are no garbage padding bits.
This CL does not implement the Pipeline cache, but it will help, since
now we have a packed type that can be used as the key to a hash map.
Bug: angleproject:2163
Change-Id: I16efa927f08d30d89a9c4c8943edd211c6878ac8
Reviewed-on: https://chromium-review.googlesource.com/829893
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Frank Henigman <fjhenigman@chromium.org>
|
|
49ac74bd
|
2017-12-21T14:42:33
|
|
Vulkan: Implement command re-ordering.
This introduces a new CommandBufferNode class. Nodes are linked
together to form a graph based on their dependencies. When the app
triggers a readback or swap, the graph is flushed entirely. This
sends the queued ANGLE Vulkan work to the Vulkan queue which is
then processed on the GPU with the right dependencies.
This design allows us to save on some unnecessary RenderPass creation
and also allows us to know what load/store ops to use. It also allows
us to take advantage of the Vulkan automatic RenderPass transitions
for performance. Load/Store ops and automatic transitions will be
implemented in later patches.
Bug: angleproject:2264
Change-Id: I0e729c719e38254202c6fedcede4e63125eb4810
Reviewed-on: https://chromium-review.googlesource.com/780849
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Frank Henigman <fjhenigman@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
62fcf62a
|
2017-11-30T16:16:12
|
|
ES31: Add DispatchComputeIndirect suport for OpenGL backend
BUG=angleproject:2270
TEST=dEQP-GLES31.functional.compute.indirect_dispatch.*
Change-Id: Id062a80188b2a37f28833aaae8e6d31bac382276
Reviewed-on: https://chromium-review.googlesource.com/802763
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
89c422ad
|
2017-11-29T18:24:20
|
|
ES31: Support memoryBarrier and memoryBarrierRegion APIs
BUG=angleproject:2280
TEST=dEQP-GLES31.functional.compute.basic.image_barrier_single
dEQP-GLES31.functional.compute.basic.image_barrier_multiple
dEQP-GLES31.functional.compute.basic.ssbo_cmd_barrier_single
dEQP-GLES31.functional.compute.basic.ssbo_cmd_barrier_multiple
dEQP-GLES31.functional.synchronization.*
Change-Id: If14debab21247dc4b446e86d1642fbc9376b6dd7
Reviewed-on: https://chromium-review.googlesource.com/798803
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
da854a27
|
2017-11-30T17:24:21
|
|
Vulkan: Clean up VAO cached resources.
We can actually store a pointer to the base ResourceVk instead of
BufferVk for updating serials. This will work a little nicer with
streaming vertex data, which won't have a BufferVk but will have an
accessible ResourceVk pointer.
Also add an element array resource pointer for serial update. This was
missing and could lead to incorrect behaviour. Also change the types
of the caches from std::vector to gl::AttribArray, which is a
std::array.
Bug: angleproject:2264
Change-Id: Ibd79b7676b5dbc3875ae9d110be477d228e01c5c
Reviewed-on: https://chromium-review.googlesource.com/798170
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
|
|
afa02a2f
|
2017-11-23T12:57:38
|
|
ContextImpl: Make flush/finish take a gl::Context.
This will more easily allow us to call gl::BindingPointer methods.
The binding pointer will be used temporarily in the command graph.
This is only temporary since we will likely not be using
BindingPointer in the end result code, but it could be necessary
for future work.
Bug: angleproject:2264
Change-Id: I33cf40ec2a1e334c4abfdcff2ad20bbcda3c9d78
Reviewed-on: https://chromium-review.googlesource.com/789532
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Frank Henigman <fjhenigman@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
5d5253a3
|
2017-11-22T14:51:12
|
|
Clean up usage of EXT_debug_marker and KHR_debug in the backends.
In RendererGL, the EXT_debug_marker functions were calling the
KHR_debug entry points, now they fall back only when EXT_debug_marker is
missing.
Separated the ContextImpl methods for the two extensions.
BUG=781164
Change-Id: I615b5965b705e55eb730ebefa6e27e0ee6d86c31
Reviewed-on: https://chromium-review.googlesource.com/786337
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
|
|
7f738d4e
|
2017-11-20T17:06:27
|
|
Vulkan: Refactor CommandBuffer helper class.
This makes the base vk::CommandBuffer class as close to the Vulkan
API as possible. It moves the extra functionality and state tracking
to a CommandBufferAndState helper class.
Also no longer stores a reference to a CommandPool in a CommandBuffer.
Eventually we won't need to free CommandBuffers explicitly, since they
can be freed en-masse by deallocating the CommandPool on a flush.
Bug: angleproject:2200
Change-Id: I5095fe89e8da935ff8273b1a402ccfd6a3ffe0df
Reviewed-on: https://chromium-review.googlesource.com/778184
Reviewed-by: Frank Henigman <fjhenigman@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
76e471e9
|
2017-10-21T09:56:01
|
|
Vulkan: Implement basic uniforms.
This implementation adds one descriptor set with two bindings: one for
default vertex uniforms and the other for fragment. It adds two
corresponding uniform buffers, and the logic for updating the
descriptor sets bound to Vulkan. It doesn't handle much in the way of
synchronization and dependency management, or uniform update.
If there are only vertex or fragment uniforms the empty uniform buffer
is omitted from the descriptor set. If both are missing, there is no
descriptor set bound.
Note that as our implementation progresses we might not be able to
initialize our descriptor sets at link time, due to streaming in
uniform data.
BUG=angleproject:2167
Change-Id: I4ce4c3879ab454114df43bfac8d87ddf817fc045
Reviewed-on: https://chromium-review.googlesource.com/706340
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
|
|
ebf7299e
|
2017-10-13T14:09:45
|
|
Vulkan: Minimal dirty bits for ContextVk.
Currently this won't speed up performance much, if at all, since we
don't even really support state changes. It sets the stage for using
a pipeline cache later, with better state change support. It also
makes implementing descriptor sets for Textures a bit simpler, since
we can just update descriptor sets when the dirty bits tell us of a
Texture change.
Add cache structures to VertexArrayVk and ContextVk so we only need
to update the structures before we create a new pipeline. When we
support pipeline caching, we will most likely be updating a compact
representation for fast cache query.
BUG=angleproject:1898
BUG=angleproject:2167
Change-Id: Id545f2c67c06d8b6e8b7eb63ca70464f6b9a51f6
Reviewed-on: https://chromium-review.googlesource.com/713586
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Frank Henigman <fjhenigman@chromium.org>
|
|
d03a849d
|
2017-10-03T15:46:06
|
|
Vulkan: Implement very basic DrawElements.
This implements getIndexRange for index validation, without any
caching. Vulkan does support a version of robust access, but it would
require the robust context creation attribute. Also, it differs slight
from the OpenGL spec.
Also note that this implementation does not create the index buffer
with the correct usage bits, but seems to work and doesn't produce an
error in the validation layers. We should probably update them.
This CL also doesn't impement index support for immediate data,
offsets, or the unsigned short index type.
BUG=angleproject:2167
Change-Id: I580930f85e23034b483f3ece62eb1faf8024d624
Reviewed-on: https://chromium-review.googlesource.com/681874
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Frank Henigman <fjhenigman@chromium.org>
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
|
|
a336b90f
|
2017-08-02T16:05:21
|
|
ES31: Impl program pipeline object management entries for GL backend.
The program pipeline object management entries are:
GenProgramPipelines
DeleteProgramPipelines
BindProgramPipeline
IsProgramPipeline
BUG:angleproject:2123
Change-Id: I114d054b90caf2ee3f9befef7439552a1c309bc4
Reviewed-on: https://chromium-review.googlesource.com/629978
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
06ef36b9
|
2017-09-09T23:32:46
|
|
Add top-level state sync for Samplers.
This also reformats the Sampler class to use a shared state struct
with the implementation. It removes the call to sync the sampler
state from the StateManagerGL::setGenericShaderState method, since
it should all be handled at the front-end now.
Also rename 'syncImplState' to 'syncState' methods.
BUG=angleproject:1387
Change-Id: I5f0219b719aee99aaaa486ec188b2af0c9128e6a
Reviewed-on: https://chromium-review.googlesource.com/648054
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
70b5bb00
|
2017-08-28T13:32:37
|
|
Rename gl::FenceSync to gl::Sync.
The spec refers to Sync objects, FenceSyncs being a subtype. The
motivation for this fix is to clear up the FenceSync_ entry point for
auto-generation.
BUG=angleproject:1309
Change-Id: I94c440476d701628575e7a3eea68b6dd110f41c3
Reviewed-on: https://chromium-review.googlesource.com/636516
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
1da00653
|
2017-06-20T17:16:25
|
|
Remove IndexRange in DrawElements functions
This change will remove IndexRange parameter in DrawElements functions.
And calculate it until we truly need it. Meanwhile we add direct
drawing path to avoid retrieving index range for DrawElements*
functions in D3D11 backend. This change may not bring much performance
improvement since we still need to retrieve index range in validation
at the beginning of every DrawElements* call entry point.
BUG=angleproject:1393
Change-Id: I86a8739c0893954c94eb398db62820ced7871565
Reviewed-on: https://chromium-review.googlesource.com/544634
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
4928b7ca
|
2017-06-20T12:57:39
|
|
Proliferate gl::Context everywhere.
This gives the D3D back-end access to the GL state almost anywhere.
This uses the onDestroy hook for Textures to push errors up from
destructors, although they still don't quite make it to the Context.
There are places, such as in EGL object (Context/Surface) destruction,
where we end up calling through to GL implementation internals without
having access to a gl::Context. We handle this via a proxy Context
to a Display, basically a null context, that has access to impl-side
state like the Renderer pointer if necessary. It does not have access
to the normal GL state.
Also Pass gl::Context to RefCountObject::release(). Since we're using
destroy() methods now, we should not ever call the destructor directly.
BUG=angleproject:1156
Change-Id: Ie4c32ad6bf6caaff0289901f30b5c6bafa2ce259
Reviewed-on: https://chromium-review.googlesource.com/529707
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
fe54834f
|
2017-06-19T11:13:24
|
|
Proliferate gl::Context.
This enables a few small things: it will enable making the platform
a property of the Display rather than a global. The same goes for the
global logging annotator. Also it ensures all back-end implementations
have access to the GL / EGL state when available.
Also introduces a smart pointer helper class to angleutils for objects
that prefer to be destroyed with a context (gl::Context/egl::Display)
parameter. We were using std::unique_ptr in a few places that would
not work well with these objects.
BUG=angleproject:1156
Change-Id: I59e288a3d6f766ff8a0f4b48ff3a1fbf7489daba
Reviewed-on: https://chromium-review.googlesource.com/529706
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
c564c070
|
2017-06-01T12:45:42
|
|
Pass gl::Context to impl methods instead of ContextImpl.
In some cases we might have to call back into the GL layer, passing
the Context, and if we just have a ContextImpl pointer this isn't
possible. It also removes the need for SafeGetImpl.
BUG=angleproject:2044
Change-Id: I6363e84b25648c992c25779d4c43f795aa2866d6
Reviewed-on: https://chromium-review.googlesource.com/516835
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
876429b7
|
2017-04-20T15:46:24
|
|
Update gl2.h and update entry points.
Some method signatures were updated. Types like GLclampf and GLvoid
were replaced with other equivalents.
BUG=angleproject:1309
Change-Id: I05e8e2072c5a063d87ad96a855b907424661e680
Reviewed-on: https://chromium-review.googlesource.com/475011
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
0c0dc345
|
2017-03-24T14:18:51
|
|
Vulkan: Defer command buffer submission.
This packs more rendering commands into fewer command buffers.
Instead of using a single command buffer per-command, create a
buffer and record commands into it until we need to present the
frame. More sophisticated management will be necessary in the future
when we can do other types of copied and read-back from image data.
This also reduces the number of Fences we use for checking if the
device is finished with resources. Instead of creating a Fence
per-command-buffer, it creates one per-swap.
BUG=angleproject:1898
Change-Id: I9c6033bc04289fd8f936c0df914afc51fc434b29
Reviewed-on: https://chromium-review.googlesource.com/445800
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
2b39659d
|
2017-03-29T15:36:04
|
|
ES31: Implement glDispatchCompute for OpenGL backend
This patch refers to https://chromium-review.googlesource.com/c/380639/
BUG=angleproject:1955
TESTCASE=angle_end2end_tests
Change-Id: Iafd7a6ba2d71c0b332d9267a1260d9dbd9800c02
Reviewed-on: https://chromium-review.googlesource.com/462089
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Yunchao He <yunchao.he@intel.com>
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
72106562
|
2017-03-24T14:18:50
|
|
Vulkan: Only re-create pipeline on state change.
This speeds up the simple perf test, but it is a very simple
optimization that does not have a cache of pipelines or anything
sophisticated.
BUG=angleproject:1898
Change-Id: Iec126bc73bf28f8bb33662a2f70670588f010d72
Reviewed-on: https://chromium-review.googlesource.com/444850
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
5a53d54e
|
2017-02-16T21:24:10
|
|
Remove unneeded ContextImpl::syncState parameter.
The 'state' parameter passed to ContextImpl::syncState() is already
available in ContextImpl as mState.getState().
BUG=none
Change-Id: I13283664579fa04ae67b1d1bbc0cb4426a950b97
Reviewed-on: https://chromium-review.googlesource.com/444099
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
df68a6f0
|
2017-01-13T17:29:53
|
|
Vulkan: Implement a simple graphics pipeline.
BUG=angleproject:1580
Change-Id: Iceaed896db22dc9eefa3f1bee7d6142fcfb20368
Reviewed-on: https://chromium-review.googlesource.com/412267
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
|
|
7b57b9d7
|
2017-01-13T09:33:38
|
|
Vulkan: Implement basic Clear and ReadPixels.
This enables the simple operations clear test on Vulkan. The current
implementation is very synchronous - it will block and finish the
current command buffer if there is any possibility of a race.
BUG=angleproject:1319
Change-Id: If01fe9a19ed6f539639a38786193d3626164cada
Reviewed-on: https://chromium-review.googlesource.com/367754
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
d9671226
|
2016-11-29T16:30:31
|
|
Implement ES3.1 glDraw*Indirect entry points for OpenGL
BUG=angleproject:1595
TEST=dEQP-GLES31.functional.draw_indirect.*
Change-Id: I82f5d0864e70d6e7abdccf5f10330ddfa099ec62
Reviewed-on: https://chromium-review.googlesource.com/417250
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
|
|
8f775607
|
2016-11-03T16:45:34
|
|
Introduce a gl::BufferState class.
This state can share vital pieces of information with the impl.
The most elementary state is the buffer size, which then the
impl doesn't need to replicate.
BUG=angleproject:1579
Change-Id: I341393c64a6e49de65c1d53b1bad2fa143209862
Reviewed-on: https://chromium-review.googlesource.com/406644
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|