|
6746e5dd
|
2021-06-01T22:48:14
|
|
Vulkan: SPIR-V Gen: Basic support for compute shaders
This change enables direct SPIR-V generation for compute shaders and
enables a few tests. A handful of built-in functions are translated to
support said tests.
Bug: angleproject:4889
Change-Id: I8fd6dc50ff31559a738ba680a993fb197e29fcf9
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2939330
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
ee4a5266
|
2021-06-01T14:57:24
|
|
Vulkan: SPIR-V Gen: Function calls
This change implements function calls. As a result, transform feedback
tests are enabled as well as support for transform feedback emulation
(which contains functions and if blocks).
`const` and opaque uniform function arguments take intermediate values,
while the rest take memory objects. If the argument being passed is an
unindexed lvalue, it can be directly given to the function. Otherwise a
temporary variable is made which is initialized by the parameter if
necessary (in and inout parameters) and later overwrites the parameter
if necessary (out and inout parameters).
Bug: angleproject:4889
Change-Id: I8976cdd17870c35d5a2daeed3c38de57ada931d9
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2930363
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
77831a6d
|
2021-05-31T22:41:58
|
|
Vulkan: SPIR-V Gen: If-else blocks
This change implements if-else blocks as well as a few simple binary
operations (equality, less-than etc). It builds on prior work to
generate the function in separate blocks and introduces a "conditionals"
stack to support nesting of if-else blocks, switches and loops.
Bug: angleproject:4889
Change-Id: If7694000487811837ed5946753568b41d67199f0
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2929660
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
fafd64a6
|
2021-06-01T17:08:07
|
|
Vulkan: SPIR-V Gen: Matrix decorations
Matrices in blocks require MatrixStride and one of ColMajor or RowMajor
decorations.
Bug: angleproject:4889
Change-Id: I14ddb32fd3dbc977bf41703b016dc6d1c0722475
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2930368
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
683064b7
|
2021-06-02T02:59:55
|
|
Vulkan: Fix missing operand list in OpExecutionMode parser & builder
Bug: angleproject:4889
Change-Id: Ie864031caeddfcf5202044b0f9c197b3883ceaf7
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2934782
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
c2ad5824
|
2021-05-31T12:20:27
|
|
Vulkan: SPIR-V Gen: Code blocks
This change lays the foundation for implementing branches and loops. In
SPIR-V, every block starts with an OpLabel (which identifies the block
and serves as the branch target to that block), and ends in a branch.
An `if` for example implies the existence of four blocks, the header
including code leading up to the if, the true and false blocks and the
"merge" block, including the code following the if-else blocks.
This change includes support code for generating function code split in
blocks, even though only one block is currently used.
Bug: angleproject:4889
Change-Id: I10f96b78b6f00c20bc7f9c81e854ab5543bf8fde
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2929659
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
be873929
|
2021-05-26T21:55:50
|
|
Vulkan: SPIR-V Gen: Handle constants and constructors
This change translates constants and constructors (minus type
casting). With this change, shaders such as
gl_Position = vec4(aposition, 0, 1);
are translated correctly.
Bug: angleproject:4889
Change-Id: I4463717cf880c6d05db179b98691d5cabc1a2d7c
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2920192
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
aa2626f9
|
2021-05-21T15:24:55
|
|
Vulkan: SPIR-V Gen: Handle load/store access chain
This change implements a key instruction of SPIR-V, OpAccessChain.
Inspired by glslang's implementation, a class is added (AccessChain)
that tracks "indices" into a base value. These indices could select a
field of a block, an element of an array, a column of a matrix, or a
component of a vector. Nuances (such as multi-component swizzle as an
lvalue not representable in SPIR-V) and optimizations (such as
all-literal indices to an rvalue) that are implemented in glslang have
also been implemented in this change. As a result, this change
implements all manners of loads and stores (with the exception of this
gotcha: https://github.com/KhronosGroup/glslang/issues/2637).
The change uses this feature to translate the basic shader which does
`gl_Position = positionAttr;` (by implementing EOpAssign), and enables a
test that uses this shader.
Bug: angleproject:4889
Change-Id: I22dbe5b169ce499eaac657902164aca3b0ebc193
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2911880
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
c229ccfe
|
2021-05-18T15:51:12
|
|
Vulkan: SPIR-V Gen: Handle gl_PerVertex
If not declared by the shader, default gl_PerVertex is now explicitly
declared in AST prior to SPIR-V generation. The SPIR-V generation code
then doesn't need to declare them magically.
Bug: angleproject:4889
Change-Id: Icc593bc1ccc3162487bdbae7f66bc775d098778d
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2905952
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
9bc837f6
|
2021-04-07T15:24:12
|
|
Vulkan: Generate SPIR-V directly from the translator; Part 1
This is the first change in a series to generate SPIR-V directly from
the translator's AST, instead of the generating text GLSL and feeding it
to glslang.
This change implements the majority of the work needed to map AST types
to SPIR-V types, and declare types and interface variables in SPIR-V.
Additionally, it lays the infrastructure to conditionally enabling this
path in end2end tests.
No tests are currently enabled as the change doesn't actually generate
code for function bodies yet.
Bug: angleproject:4889
Change-Id: Iacb28b6907fd48c50e4cc5a0e7ad72f6eed241d4
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2889603
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|