|
8270ebbd
|
2020-05-08T14:00:18
|
|
Vulkan: Refactor and clean up XFB code.
This is a refactor-only change mostly. It makes the classes work
more similarly to how the other classes in the Vk back-end work. Also
removes some redundant code. Moves the buffer caching into begin for a
more dirty-bits like approach.
Bug: angleproject:4622
Change-Id: I34ac13e1d05b48e3267937c760d195493a76ed02
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2191172
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
85c076ee
|
2020-02-20T17:54:35
|
|
Vulkan: Make mVariableInfoMap a gl::ShaderMap<>
The ShaderInterfaceVariableInfoMap information is specific to each
shader stage, since the locations are determined for each shader stage.
This change makes mVariableInfoMap a gl::ShaderMap<> to handle this,
which will make it easier to compile separable programs, determine the
variable locations, and transform the SPIR-V.
Bug: angleproject:3570
Change-Id: I28b71a37efe54bbcfe1dcd445fa03ee71e74f0a6
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2062741
Commit-Queue: Tim Van Patten <timvp@google.com>
Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
|
|
abaa3573
|
2020-02-20T10:23:02
|
|
Vulkan: Only calculate variable locations once
Variable locations and descriptor set/binding values are calculated
multiple times:
- Compiling GLSL->SPIR-V
- Creating the Vulkan pipeline layout
- Updating descriptor sets
These values should instead be calculated once and reused throughout
since they won't change without recompiling the shader program.
Bug: angleproject:3570
Change-Id: I5d8767b3b2e2f741aade7fec9991eea53ee2eb98
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2067101
Commit-Queue: Tim Van Patten <timvp@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
68083e89
|
2020-03-04T15:55:53
|
|
Vulkan: Move cached samplers/images and has*() to ProgramExecutable
The active samplers and images are being moved from Program into
ProgramExecutable to unify interacting with them for Programs and
ProgramPipelines
Also, create some helper functions for gl::Program that ProgramExecutable can
call to make it easier for ProgramPipeline to respond to similar
queries for each of the Programs in the ProgramPipeline.
Bug: angleproject:3570
Change-Id: I0b37f1a379e56b9659d82d92f6d7a546beee11cd
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2087648
Commit-Queue: Tim Van Patten <timvp@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
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>
|
|
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>
|
|
c713abfd
|
2019-12-23T12:03:02
|
|
Vulkan:Transform/feedback instanced draw support
These fixes allow dEQP 3.1 KHR-GLES31.core.vertex_attrib_binding.basic-input*
test cases to pass.
This fixes a bug in instanced drawing with transform feedback buffers
where we were overwriting the initial transform feedback output as new
instances were drawn. To fix this, the vertices in each draw are passed
into a uniform value and the output is offset based on the current instance
and the number of vertices in the draw.
It also fixes a validation error where transform feedback descriptor
was sometimes setting a buffer range of 0. This is not allowed, so in
the 0 case we pull the actual buffer size from the bufferHelper object.
Bug: angleproject:4236
Change-Id: Ib72898a0e6caab96c446c1e996a6124d2c001193
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1979600
Commit-Queue: Tobin Ehlis <tobine@google.com>
Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
Reviewed-by: Tobin Ehlis <tobine@google.com>
|
|
67d8b63a
|
2019-12-23T11:35:52
|
|
Vulkan:Update Vulkan Vertex Attribute Offsets
This fixes most of the test for
dEQP 3.1 KHR-GLES31.core.vertex_attrib_binding.basic-input*
The bug fixes is that we were not correctly setting the vertex attribute
offset for vertex attribs that were converted into their own buffer.
We kept the attrib offset from the frontend as if the converted attribs
were in the original buffer, but converted vtx attrib buffers in the VK
backend are tightly packed from the start of the buffer so when converting
the actual offset should be 0.
Also, in order to avoid a VK validation error, this change includes a tmp
workaround to make sure transform feedback output buffer range is never 0,
but sets VK_WHOLE_SIZE in that case. A follow-on fix that focuses on
transform feedback fixes will address this validation error more fully.
Bug: angleproject:4145
Bug: angleproject:4236
Change-Id: I8c218954725945414a8f18beb4f964b90da7062a
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1980906
Commit-Queue: Tobin Ehlis <tobine@google.com>
Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
caa6eccd
|
2019-10-27T13:46:56
|
|
Vulkan: Implement Transform Feedback support via extension
Implemented transform feedback extension path. Where
VK_EXT_transform_feedback is supported, extension path will be taken
over an emulation path. Extension path has advantages in terms of
performance.
BUG=angleproject:3206
Test: dEQP-GLES3.functional.transform_feedback.*
angle_end2end_tests --gtest_filter=TransformFeedbackTest*
Change-Id: Ia07c23afb289d9c67073469a97b714ec96f5265a
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1882767
Commit-Queue: Mohan Maiya <m.maiya@samsung.com>
Reviewed-by: Mohan Maiya <m.maiya@samsung.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
|
|
61c6aecc
|
2019-11-28T14:30:18
|
|
Vulkan: Fold read access into write flags on buffer writes
This could lead to a subtle bug:
Say we use a buffer as a storage buffer and write to it. We then must
issue a memory barrier before using it as a uniform buffer. However we
would set the SHADER_READ bit as a read mask on a storage buffer
access. This seems like it could lead to a missing barrier.
Bug: angleproject:4178
Change-Id: I486002739b7fb000ffacc0a1e996784b7875e7ba
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1943034
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
|
|
f10bf6bf
|
2019-09-26T10:27:18
|
|
Vulkan: Implement multi-threaded GL.
The main component of this change is to make vk::BufferHelper,
vk::ImageHelper and vk::SyncHelper use a common path. We introduce a
new "vk::SharedGarbage" helper class that stores small lists of garbage
from individual objects like an ImageHelper or BufferHelper. The
SharedGarbage is stored in the RendererVk with the ResourceUse of the
helper object. The ResourceUse tells RendererVk when it is safe to
destroy the GarbageObjects.
New "onGraphAccess" commands are added in a few places to enable the
common garbage collection path. A couple Context-only resources like
default attributes now are referenced where they were not before.
Also reorganizes some functions so we can add a few helpful ASSERTs
to our graph dependencies. Added "updateCurrentAccessNodes" for this.
Also adds a "RendererScoped" helper to replace many uses of
"ContextScoped".
The multithreading EGL tests mostly pass but have some remaining
flakiness so cannot yet be enabled.
Bug: angleproject:2464
Change-Id: Ia3e3ae8848d731abf3f21ebe04c33e381e130be0
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1808444
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
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>
|
|
6d653c02
|
2019-08-14T14:09:02
|
|
Vulkan: Set empty buffer to xfb descriptor set as an initial buffer
When we have xfb descriptor set without buffer bindings it causes
errors in Vulkan validation layer. So we set empty buffer by default.
BUG=angleproject:3681
Tests: dEQP-GLES3.functional.*transform_feedback*
dEQP-GLES3.functional.lifetime.attach.deleted_input.buffer_vertex_array
Change-Id: I4e7c9c9ee661f1fc92bf01fb78a2212c1a423eaa
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1753387
Commit-Queue: Hyunchang Kim <hckim.kim@samsung.com>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jamie Madill <jmadill@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>
|
|
54d51f32
|
2019-08-07T15:15:10
|
|
Vulkan: Fix crash with glBeginTransformFeedback
The TransformFeedbackVk::onBeginEnd() method wasn't calling updateQueueSerial(),
which was causing CommandGraphResource::hasChildlessWritingNode() to use an old
mCurrentWritingNode, which had already been freed (i.e. Visual Studio showed it
pointing to memory that is 0xdddddddd--which means that mCurrentWritingNode has
been freed, but is still being used).
Unfortunately, there are still other crashes affecting these tests, but they
are the same set (and yes, there are multiple, and they are random) that cause
most of the "KHR-GLES3.copy_tex_image_conversions.required.*" tests to crash).
Bug: angleproject:3674
Change-Id: I5cd44018ea0beb25cb218e562d5b863be6cbd450
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1742972
Commit-Queue: Ian Elliott <ianelliott@google.com>
Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
|
|
29fba5e0
|
2019-07-04T17:08:41
|
|
Vulkan: Prepare for variable-stage pipelines
Compute (single-stage pipeline) is upcoming, but this change prepares
GlslangWrapper to handle any number of stages (mostly). Additionally,
this change binds each resource to each stage based on whether it's
active, so that we don't hit the per-stage limit of resources by binding
every resource to every stage.
Bug: angleproject:3633
Bug: angleproject:3562
Change-Id: Ifebf691482846e0371c6e314f514226a4cfee258
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1689330
Reviewed-by: Tim Van Patten <timvp@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
55efe37c
|
2019-07-03T11:52:21
|
|
Vulkan: Cleanup buffer dependencies
onWrite now sets the dependency to make sure the order of setting
dependency and adding memory barrier is correct. onReadByBuffer is
added to handle buffer-to-buffer dependency and barrier setting
correctly without causing a graph loop. onExternalWrite is added so
that BufferVk doesn't have to track write access flags.
Additionally, setting write dependencies now include both read and write
flags. This is in preparation for SSBO support where the buffer can be
used to read data in addition to write.
Bug: angleproject:3561
Change-Id: I2028186ea14459cd159cf79f6d640df54538fc62
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1687119
Reviewed-by: Tim Van Patten <timvp@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
0bfa5504
|
2019-06-03T10:40:10
|
|
Vulkan: Emulate Transform Feedback with vertex shader output
In ES 3.0 and 3.1, only non-indexed GL_POINTS, GL_LINES and GL_TRIANGLES
is supported for transform feedback. Without tessellation and geometry
shaders, we can calculate the exact location where each vertex transform
output should be written on the CPU, and have each vertex shader
invocation write its data separately to the appropriate location in the
buffer.
This depends on the vertexPipelineStoresAndAtomics Vulkan feature.
Bug: angleproject:3205
Change-Id: I68ccbb80aece597cf20c557a0aee842360fea593
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1645678
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
ac8bafc0
|
2019-06-03T14:59:39
|
|
Remove unused bindGenericBuffer from TransformFeedback*
Bug: angleproject:3205
Change-Id: I6dc29b48155cd3c0ef98248076cf02e70c9310d9
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1643423
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
91002266
|
2018-12-12T16:05:24
|
|
Use angle::Result and pass a context pointer to TransformFeedbackImpl
BUG=angleproject:3020
Change-Id: Ib0877dd33f9a8c6ea57976642f1b904258cb6a86
Reviewed-on: https://chromium-review.googlesource.com/c/1374273
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
|
|
b980c563
|
2018-11-27T11:34:27
|
|
Reformat all cpp and h files.
This applies git cl format --full to all ANGLE sources.
Bug: angleproject:2986
Change-Id: Ib504e618c1589332a37e97696cdc3515d739308f
Reviewed-on: https://chromium-review.googlesource.com/c/1351367
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@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>
|
|
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>
|
|
73bd218e
|
2016-07-15T13:01:24
|
|
Support virtualized contexts and transform feedback in Renderer11.
Track buffer offets in the transform feedback object and dirty them when a
buffer is bound. This fixes problems when a buffer is rebound at the same
offset and maintains tracking between context switches.
BUG=angleproject:1447
BUG=angleproject:1298
Change-Id: I2f890e3ad5edacab47f624a95a502615c86cc0c8
Reviewed-on: https://chromium-review.googlesource.com/360910
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
|
|
9e54b5af
|
2016-05-25T12:57:39
|
|
Add Vulkan stubs.
Currently enabled for Windows by default.
BUG=angleproject:1319
Change-Id: I87921c579bee466465fb1e3f629bb3a40fdff659
Reviewed-on: https://chromium-review.googlesource.com/328730
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|