|
1f5f7ea3
|
2020-02-14T23:39:11
|
|
Vulkan: Fix SPIR-V transformation name-info association
Prior to this commit, when "OpName %id name" was encountered, the info
corresponding to "name" was immediately associated with %id. This is
not necessarily correct because there could be multiple ids with the
same name. For example a sampler declaration and an unrelated function
argument could have the same name. In this case, the sampler
declaration and function argument name don't even need to be in the same
shader stage.
This change modifies the SPIR-V transformation such that the name-id
mapping is tracked until the OpVariable instruction that actually
declares the variable is visited. The mapping to variable info is only
done if the storage class specified in this instruction corresponds to a
shader interface variable.
Bug: angleproject:3394
Change-Id: I35a1f6f8278e4b1ad81c9955a55e1b72d6f2e4ea
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2057248
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
e5385ea9
|
2020-01-27T13:40:18
|
|
Vulkan: Compile shaders at link time
Since line raster emulation was changed to use specialization constants,
it has been possible to compile shaders at link time. However, program
pipeline objects would have required keeping the shader sources around
for recompilation. Now that all necessary decorations are modified
directly in SPIR-V, it's possible to compile the shaders at link time
and forget about their sources. Program pipeline objects then simply
"reconfigure" the generated SPIR-V.
A next step could be to also create the Vulkan pipeline object at link
time. A number of failures due to gaps in CTS testing prevent that work
currently. In particular, in some situations the generated SPIR-V is
not per spec, for example it may contain vertex attributes with aliasing
locations, or have transform feedback capture of array elements
misconfigured.
Bug: angleproject:3394
Bug: angleproject:4253
Change-Id: I54c0884cf056b511a4a306225cc6ed2cef84d257
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2023186
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
f764fc02
|
2020-02-03T10:33:58
|
|
Fix varying linking by location
This change breaks the assumption everywhere that varyings can be
identified uniquely by name throughout all stages of the pipeline.
It further implements linking of varyings by location, if specified.
Bug: angleproject:4355
Change-Id: Ie45e48879008c3f0c22d1da3d0d26f37c655e54e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2030026
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
b91acdcf
|
2020-01-21T11:02:26
|
|
Vulkan: Cleanup glslang wrapper
There are no longer @@ QUALIFIER and or @@ LAYOUT markers. Only @@
XFB-DECL @@ and @@ XFB-OUT @@ markers remain, which are now replaced
with simple string manipulation.
Bug: angleproject:3394
Change-Id: I9c1883458d9de3ea59ac08aae57a7c8985e7afbe
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2012741
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
f1f082e1
|
2020-01-17T14:53:38
|
|
Vulkan: Set varying location & xfb decorations in SPIR-V
The shader translator outputs arbitrary location indices. Once compiled
by glslang, the SPIR-V transformer modifies these decorations. If the
transform feedback extension is used, it will also add the relevant
decorations to the varyings that are captured.
Bug: angleproject:3394
Change-Id: I5ecafd0536408612a5d4b920dbabbfabe650657c
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2008468
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
5ca050d1
|
2020-01-20T14:59:41
|
|
Vulkan: Set fragment output locations in SPIR-V
The shader translator outputs arbitrary location indices for fragment
outputs. Once compiled by glslang, the SPIR-V transformer modifies
these decorations.
Bug: angleproject:3394
Change-Id: Ib9d8336bccc392e789e4d93031fdcce9c466b7a6
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2011214
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
bef8ca7d
|
2020-01-20T14:19:05
|
|
Vulkan: Set vertex attribute locations in SPIR-V
The shader translator outputs arbitrary location indices for vertex
attributes. Once compiled by glslang, the SPIR-V transformer modifies
these decorations.
Bug: angleproject:3394
Change-Id: I88453b44e3a8770f51e79228148233ff308f1885
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2011212
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
71e6afb1
|
2020-01-14T14:12:31
|
|
Vulkan: Set set/binding in SPIR-V
This change introduces a SPIR-V transformer that modifies shader
interface variable decorations directly in SPIR-V instead of
manipulating the input GLSL. Currently, descriptor set and binding
indices are set by the transformer.
The shader translator outputs arbitrary set and binding indices. Once
compiled by glslang, the SPIR-V transformer modifies these decorations.
The ultimate goal is to be able to modify the SPIR-V again when program
pipeline objects decide a different set/binding is necessary.
Bug: angleproject:3394
Change-Id: If358265a72bf1fe9f5676562b39a632cb2e05dc4
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2001477
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
453926f5
|
2020-01-19T14:49:32
|
|
Vulkan: Remove inactive shader inputs in the translator
Inactive vertex attributes are harmless to remove. Between two
consecutive stages, the input varyings must be a subset of the previous
stage's output varyings. This means removing inactive input varyings is
also harmless.
Removing inactive output varyings is not possible though. GLSL allows a
varying to not be written by the previous stage even if it's used in the
current stage (values will be undefined, but it's not an error). This
means that an inactive output varying may still need to exist as part of
the shader interface in case the following stage has that varying as
input (and is active).
Bug: angleproject:3394
Change-Id: I7302973d2b8356d9f54a66f8259c32f245a99904
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2009986
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
f3b4e6c3
|
2020-01-13T17:07:13
|
|
Vulkan: No inactive samplers left to cleanup in glslang wrapper
Loose inactive samplers are already removed in
RemoveInactiveInterfaceVariables. In-struct samplers are always marked
active by CollectVariables if the uniform is active. If the uniform is
inactive, it is removed entirely by the translator. Thus no inactive
samplers are left for glslang wrapper to clean up.
Bug: angleproject:3394
Change-Id: Ic0fef052afa992bd612fd22ffa1e5b9aa72a17bc
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1999488
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
8dfe472c
|
2020-01-13T15:20:51
|
|
Vulkan: Output qualifiers in the translator
With the exception of varyings, every other qualifier can be directly
output by the translator. This simplifies and optimizes glslang
wrapper.
Varyings' in/out qualifiers are still placed in @@ QUALIFIER macros so
glslang wrapper can remove them, if inactive, not by commenting them
out, but by turning them into global variables.
Bug: angleproject:3394
Change-Id: I9a3d18df2cfd36a38308bf8f71ac12f1e1513ece
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1998839
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
135f8fcb
|
2020-01-13T16:18:41
|
|
Vulkan: Remove inactive uniforms in the translator
By removing inactive uniforms in the translator, glslang wrapper doesn't
need to comment them out. Additionally, inactive uniforms don't find
their way in the default uniform block, reducing its size if there's a
mix of active and inactive uniforms.
As collateral, it also fixes a bug where inactive uniforms of struct
type were not correctly removed by glslang wrapper.
Bug: angleproject:3394
Bug: angleproject:4211
Bug: angleproject:4248
Change-Id: I874747070e875fe24bf59d39d1322e319e280a16
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1999278
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
b36e46ab
|
2020-01-08T15:49:18
|
|
Vulkan: Line raster emulation through specialization constant
In preparation for compiling shaders early at link time, this change
reworks line raster emulation such that it uses specialization constants
instead of a preprocessor condition. This means drawing both triangles
and lines with this program will still result in a one-time shader
compilation.
The compilation is still done at draw time in this change.
Bug: angleproject:3394
Change-Id: I0bf91398868d7f7147456533b728906b505192b2
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1992365
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
93061d4e
|
2019-12-30T23:45:08
|
|
Vulkan: Support vertex-only line emulation draw with xfb
The code that patches the line raster emulation directive assumed both
vertex and fragment shaders would be present. This is invalid if only a
vertex shader is present.
This change adds the directive to any stage that's available. This
includes the possibility of a missing vertex shader also, which can be
useful for separable shaders and program pipeline objects.
Bug: angleproject:3394
Change-Id: I84555db81b59c318300003f7108a01f330e4259f
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1982782
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
f02490d1
|
2019-12-23T14:06:12
|
|
Vulkan: clean up arguments to glslang wrapper
Some flags were sent as parameters while an Options parameter was added.
This change moves those flags to the GlslangSourceOptions struct.
Bug: angleproject:3394
Change-Id: Iff5c1c83dd564d7bcfcbd84e6df244b7356d669d
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1984108
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@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>
|
|
44722daa
|
2019-12-06T22:31:08
|
|
Vulkan: Enable inactive SSBO with unsized array tests
The change introduced in
https://chromium-review.googlesource.com/c/angle/angle/+/1951523
removes inactive shader interface declarations. That automatically
resolves an issue where glslang wrapper doesn't handle inactive SSBO
declarations with unsized arrays, by removing those declarations at
translation time altogether.
Bug: angleproject:3714
Change-Id: I710d59546d716bfb5bc0112b5152fed20a810a52
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1954615
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
8b74bdc2
|
2019-12-10T23:15:57
|
|
Vulkan: Refactor glslang wrapper's varying location assignment
Instead of multiple ifs that test for various combination of shader
stages and calling AssignVaryingLocations for the appropriate pairs,
that function loops over all stages and assigns a location to the
varying in any stage it is active.
This change will help keep this code simpler with the introduction of
tessellation shaders.
Bug: angleproject:3571
Change-Id: Iaf3ee67990bd219080314237b314bd2770a43085
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1961096
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Reviewed-by: Tim Van Patten <timvp@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
b8e056dd
|
2019-12-11T15:02:43
|
|
Vulkan: Have the translator output in/out qualifiers
Currently, when assigning varying locations, we assign in/out qualifiers
based on whether the varying name is present between different shader
stages.
This is broken for separate shader objects as there is possibly no pair
of shaders to be able to tell which is input and which is output (by
trying to find the same varying in a stage before or after the shader).
Bug: angleproject:3571
Change-Id: Id928a3eaa16e917c81bae0b3414c41842eb2b664
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1961993
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
6381d7f1
|
2019-12-10T23:19:23
|
|
Vulkan: Avoid linear search in shader on varying location assignment
Glslang wrapper was trying to identify whether the varying is declared
in each of the out/in shaders by looping through the macro symbols that
need replacement.
This change instead adds stage information to PackedVarying assigned
when collecting varyings. Glslang wrapper then simply tests the
bitfield for the stages of interest.
Bug: angleproject:3571
Change-Id: I29614e3e62d7df88e413c1732ac04e24243f167a
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1954677
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: 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>
|
|
fab10c23
|
2019-12-04T11:34:42
|
|
Vulkan: Optimize unused uniform cleanup in glslang wrapper
Bug: angleproject:3803
Change-Id: Ib260c86c68e5b11deaec8658cd9768af9b44e086
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1949629
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
859ca039
|
2019-10-24T12:55:08
|
|
Enable "-Wshadow-field".
This warning verifies we don't give variables names that shadow
fields. This is another good warning to enable that Skia requires.
This CL also fixes a small number of points in code that used this
bad pattern. We have to disable the warning for Glslang for now.
Bug: angleproject:4046
Change-Id: I072a686e3023b60cfafa778525fe712ce1fb5a50
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1877476
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
a48f95ab
|
2019-10-14T14:49:49
|
|
Move Vulkan GlslangWrapper code to a shared location.
Metal backend will reuse Vulkan's GlslangWrapper code.
The Metal backend will use this code to translate glsl to spirv then
cross compile to Metal Shading Language using spirv-cross.
So the source code of GlslangWrapper should be moved outside vulkan folder.
Bug: angleproject:2634
Change-Id: I208062daf0d77756c9d32cfdab925b7dfdf83e05
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1858042
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|