|
fc4fc174
|
2024-12-10T22:01:28
|
|
Vulkan: Prevent crash with D/S FF without D/S attachment
The spec says that the values for gl_LastFragDepth/StencilARM are
undefined if there is no depth/stencil attachment. This "just" works on
tiling GPUs, because reading input attachments simply translates to
reading _something_ from the tile memory.
For ANGLE, the situation is a little more complicated. ANGLE has to
bind descriptors for input attachments (because non-tilers read from the
input attachment descriptor instead of using the knowledge that input
and color/depth/stencil attachments are one and the same thing in tile
memory). When a depth/stencil attachment is missing, there is no image
to bind to the descriptor set.
ANGLE cannot skip binding an image to the descriptor set, because
OpImageRead (translated from subpassLoad()) attempts to access the
input descriptor; skipping this causes an internal crash in SwiftShader
for example.
ANGLE cannot bind a bogus image as input attachment, as Vulkan requires
that input attachments are also color/depth/stencil attachments.
ANGLE _could_ bind a bogus image as input attachment and also as
depth/stencil attachment. This is rather risky, as it then also has to
be careful to make sure that depth/stencil attachment is never actually
used (i.e. it affects the depth/stencil state, load/store ops etc).
In this change, the shader itself is modified to remove references to
the depth/stencil input attachments if the attachment is missing. This
is rather inefficient, as it means the pipeline warmup will not produce
a usable pipeline, but it's accepted as a workaround for something apps
shouldn't really be doing.
Bug: angleproject:376572258
Change-Id: I0de68252b61615cb82cba7d1730699aadf41e92f
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6085368
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
08c1724f
|
2024-10-11T14:29:00
|
|
Vulkan: Support GL_ARM_shader_framebuffer_fetch_depth_stencil
Bug: angleproject:352364582
Change-Id: I63fd78314fa7ebccbf366c252e309a9c0f09c8c1
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5938150
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
323187d9
|
2024-10-11T13:48:51
|
|
Vulkan: Fix color attachment limit with framebuffer fetch
ANGLE incorreclty assumed that the input descriptor limit is at least as
big as the color attachment limit. This is not true on Intel/windows
where 8 color attachments are available but only 7 input descriptors.
With this change, the color attachment limit is dropped to 7 in such a
case so that framebuffer fetch can continue to be supported.
Bug: angleproject:372873263
Change-Id: If836563b47399a23b293b74815f6bccb21aaf47c
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5919759
Reviewed-by: Alexey Knyazev <lexa.knyazev@gmail.com>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
8fcd4a50
|
2023-09-19T14:08:14
|
|
Cleanup POD struct usage to make them more consistent
In recent months, I have made many CLs to wrap various data structures
into a trivially copy-able struct. Some of them uses different
terminology. This CL replaces all of these to use a consistent name
"pod" in the struct, and "mPod" in a class.
This CL also turns ActiveVariable methods into macros to remove the code
duplication.
This CL also moves ProgramInput/ProgramOutput struct implementations
from Program.cpp to ProgramExecutable.cpp
Bug: b/275102061
Change-Id: Ia2a4210a9ea633f3d323bebe674ee74f8b90b363
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4877335
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Roman Lavrov <romanl@google.com>
|
|
f5842350
|
2023-08-21T00:00:00
|
|
Vulkan: Flatten secondary fragment output arrays
Added a SPIR-V transformation that makes them private
and copies their values into regular fragment outputs.
Fixed: angleproject:8336
Change-Id: Ide62dd183426e0de70fd4ac6d2b8c6a4b4b33994
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4875327
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
|
|
b4852ef9
|
2023-02-08T14:18:06
|
|
Vulkan: Drop support for Vulkan 1.0
Bug: angleproject:7959
Change-Id: Ib673679ea1a503af22b37092dbff1ee1fd34fba6
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4233092
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Ian Elliott <ianelliott@google.com>
|
|
204c07a5
|
2023-09-07T10:49:08
|
|
Initialize bitfield using constructor
default member initializer for bit-field is a C++20 extension. This CL
changes it to use constructor to avoid build failure.
Bug: b/296433003
Change-Id: I33a45394644719b160f71eadca3a85a4d92f5c4e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4849554
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
632ded9e
|
2023-09-01T13:43:11
|
|
Load ShaderInterfaceVariableInfoMap data members with readStruct
This CL groups the remaining data members of
ShaderInterfaceVariableInfoMap into a POD (plain old data) struct and
load it with readSTruct call (and save it with writeStruct).
This CL also uses readVector for
mDefaultUniformBlocks[shaderType]->uniformLayout instead of individual
reads of each basic elements.
Bug: b/296433003
Change-Id: I48b508822cb414cea75a6e384a0794f245460f57
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4833690
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Roman Lavrov <romanl@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
014e584f
|
2023-08-21T15:51:30
|
|
Vulkan: Separate out XFB data from ShaderInterfaceVariableInfo
Right now the transform feedback data is embedded in the
ShaderInterfaceVariableInfo. This caused ShaderInterfaceVariableInfo
becomes non-trivial copy-able. This CL moves transform feedback related
data out and into its own array, and entire vector of
ShaderInterfaceVariableInfo is now memcpied. Further, most programs
don't use transform feedback. Right now because transform feedback data
is embedded in the ShaderInterfaceVariableInfo, it bloated the size of
ShaderInterfaceVariableInfo even if you do not use XFB. This CL makes
transform feedback variable info data a std::unique_ptr so that if not
used, it is just a nullptr. When we load/save the structure, the ones
that has nullptr gets skipped.
Bug: b/296433003
Change-Id: I61940a683611717ab0445fcbf44b89b1b7166ee4
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4799344
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Roman Lavrov <romanl@google.com>
|
|
57388ab2
|
2023-08-24T14:44:48
|
|
Vulkan: Make sure ProgramVk has no members other than executable
The program is really just an interface to the executable. It should
not hold on to any data on its own. The SpvProgramInterfaceInfo member
did not even need to be a member, and was left over from previous
refactorings.
Bug: angleproject:8297
Change-Id: I4edb53c1c8b27e242a62fb4fc253ade58bd8dde1
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4812137
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
|
|
cfd9ccd0
|
2023-08-09T17:21:20
|
|
Reland: Vulkan: Move SPIR-V set up to link job
This is a reland of 10f54902e816fa7e4cf314384e00590e2b9bfa1d
Bug: angleproject:8297
Change-Id: I701b750a13ac5b17df67dee5b6c37c13c60f5b10
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4793219
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
f3c1de36
|
2023-08-17T15:29:24
|
|
Make shader recompile while parallel linking safe
Prior to this change, Program* objects held references to Shader*
objects. This poses a problem where a shader recompile can race with a
program link, if the program link is done in parallel.
As a result, a good chunk of the link job is done serially and under the
share group lock. After this change, that is no longer a problem, and
most of the link can be made lockless/parallelized.
This change separates out the "compiled state" from the rest of the
shader state. This was already done for the front-end state (for the
sake of caching), but is also now done for the backends that need it.
The compiled state in turn is placed in a shared_ptr, and is shared with
the program. When a shader is compiled, its own shared_ptr is replaced
with a new object, leaving all programs currently compiling unaffected
and using the previous compilation results.
Once a program is linked, its references to compiled shader states is
updated.
Bug: angleproject:8297
Change-Id: Iff7094a37088fbad99c6241f1c48b0bd4c820eb2
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4791065
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
|
|
4ba4af61
|
2023-08-17T11:28:18
|
|
Revert recompile blocking on link
Causing timeouts on some platforms. An alternative implementation will
follow.
This change also reverts two changes that depend on it:
Vulkan: Move SPIR-V set up to link job
10f54902e816fa7e4cf314384e00590e2b9bfa1d.
Vulkan: Move default uniform init to link job
d8cd4dcdc9c55c88f030f7fca41357e99e600ed2.
Bug: angleproject:8297
Change-Id: I9a258460e7bcaeac214be5e63c16c20681e0bcde
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4789843
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
|
|
10f54902
|
2023-08-09T17:21:20
|
|
Vulkan: Move SPIR-V set up to link job
Bug: angleproject:8297
Change-Id: I2c7eb0281d181560c8fa3ace007b1e547b6cf18e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4764619
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
|
|
c1ba8e6f
|
2023-06-20T16:03:20
|
|
Vulkan: Flatten shader interface variable maps
This change removes duplicate entries added in the shader shader
interface variable maps. One level of arrayness (indexed by shader
type) is removed from these maps as now there is only a single entry
per linked resource/etc.
Bug: angleproject:7220
Change-Id: Ibf2d06a0e1f68e68797c2066f36e14cb9e667f77
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4628677
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
681ca074
|
2023-06-16T15:03:13
|
|
Vulkan: Deduplicate SpvAssignLocations call in program pipeline
Some logic already in SpvGetShaderSpirvCode was duplicated for program
pipelines. In particular, this necessitated exposing UniformBindingInfo
which is an internal detail of SpvAssignLocations.
In a follow up, UniformBindingInfo will be removed altogether.
Bug: angleproject:7220
Change-Id: I9fa60c716de6dfb0d3a72c4f4dd3822043bab308
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4622010
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Roman Lavrov <romanl@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
b37df0c7
|
2023-06-16T12:05:03
|
|
Vulkan: Don't output SPIR-V debug info in release
Now that the SPIR-V transformer no longer relies on names, we can avoid
generating them in the compiler in the first place.
This both removes the need for stripping them out and makes the shaders
(which are cached) a bit smaller.
Bug: angleproject:7220
Change-Id: Ie636ac0ee62cf2730a409872041d22c066fc22ff
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4615238
Reviewed-by: Roman Lavrov <romanl@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
|
|
24f4007b
|
2023-06-08T00:41:55
|
|
Vulkan: Use SPIR-V ids instead of names in the transformer
This change removes the SPIR-V transformer's reliance on type and
variable names. As a result:
- String hashing is removed from the info map data structure and the
SPIR-V transformer
- The ID discovery class is entirely removed
- Internal variable names have become a detail of the compiler alone
(and are no longer exposed as part of the compiler interface)
- Some front-end name tracking is removed ("parentStructMappedName",
etc)
This change also properly cleans up xfb emulation types that were
previously left over.
This change allows the SPIR-V compiler to emit user strings as-is
instead of prefixing them with `u_` leading to more readable debug
shaders. Additionally, it will make it possible not to emit debug info
at all. Both of these changes will be done in follow ups.
Bug: angleproject:7220
Change-Id: Iaa127496209a27aaae2e0d14c41b22fffb0b72a2
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4600610
Reviewed-by: Roman Lavrov <romanl@google.com>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
21f16cb1
|
2023-06-09T17:30:38
|
|
Disable clang-format on ANGLE features autogen outputs
Updates the script to produce reasonably formatted code without
clang-format.
Autogen files moved to autogen/ sub-directories because clang-format
does not support per-file settings ;(
This allows to run this codegen very quickly
(~50ms on my machine)
Bug: angleproject:8193
Change-Id: Ie84282090d574ebb4debe3edcfd82f983f27a5ff
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4604578
Commit-Queue: Roman Lavrov <romanl@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
93eee5d2
|
2023-05-18T16:33:25
|
|
Vulkan: Add the Sample decoration when sample shading
The Vulkan spec was clarified that per-sample interpolation is not
necessarily done when sample shading is enabled in the API. In this
change, a SPIR-V transformation is added to add the Sample decoration to
whatever varying is missing it when sample shading is enabled in the
API.
Bug: b/283017896
Change-Id: I121c740add6fc015c9140e6a04d37ea5300c8e57
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4544591
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
|
|
c3209b13
|
2022-12-13T16:05:51
|
|
Vulkan: Remove GlslangWrapperVk
This class was just forwarding functions, and had over time become too
thin.
Bug: angleproject:7220
Change-Id: I7ae84ba017478d5c36b1e6d5f98a52d6b1cffb66
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4103744
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
|
|
40c17b58
|
2022-12-13T15:35:23
|
|
Vulkan: Move SPIR-V transform to vulkan/
No longer used by metal/.
Bug: angleproject:7220
Change-Id: Idb3a6369fefbcf87e7993daa652c8702ec53c20f
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4104002
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Yuxin Hu <yuxinhu@google.com>
|