|
99a98963
|
2021-06-10T16:11:13
|
|
Vulkan: SPIR-V Gen: Support discard
This is simply done with OpKill. If-else blocks now check if the block
is already terminated (through return, discard, continue or break)
before adding the branch to merge block.
Bug: angleproject:4889
Change-Id: I713286cf38e40f9048486d2914a4355ddbc686ac
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2953369
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
9c500951
|
2021-06-10T15:48:57
|
|
Vulkan: SPIR-V Gen: Fix user-defined blocks
The _u prefix was missing from blocks and their fields.
Bug: angleproject:4889
Change-Id: I31f3b393bc81352c8cf7a433dd652692833fc3f7
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2953368
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
5a737833
|
2021-06-10T15:19:59
|
|
Vulkan: SPIR-V Gen: Fix row-major matrices
Prior to this change, row-major and column-major matrices generated
different types. That is not correct. With this change, the same type
is generated for both. Row-major only comes into account when
calculating the alignment and offset of fields in a block.
Bug: angleproject:4889
Change-Id: Ifa03e1799a2510b90323d9d4fc2f681a3184069b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2953367
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
e48f2210
|
2021-06-10T13:23:34
|
|
Vulkan: SPIR-V Gen: Support short-circuiting && and ||
When short-circuiting is necessary (because the right-hand side has side
effects), the following code is generated in SPIR-V:
// For left && right:
result = left
if (left)
result = right
// For left || right:
result = left
if (!left)
result = right
Bug: angleproject:4889
Change-Id: Id87b56dc4a1463ed781852a23d2ba6eb2015d700
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2953366
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
64ca25f1
|
2021-06-08T17:15:49
|
|
Vulkan: SPIR-V Gen: Unary operators
The line raster emulation coded uses round() which was previously not
translated. This change implements all operations supported by
TIntermUnary nodes. Bresenham line emulation is now allowed.
Bug: angleproject:4889
Change-Id: I1ffbe3f9bf0299f7efa2c6d1e8f011fefdbb2ddb
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2951624
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
0297779c
|
2021-06-08T01:06:21
|
|
Vulkan: SPIR-V Gen: Handle invariant variables
The Invariant decoration is applied to variable declarations and block
members as necessary. When invariant is applied to a gl_PerVertex
built-in, it's applied to the appropriate member in
DeclarePerVertexBlocks.
Bug: angleproject:4889
Change-Id: Idaa8d4ab92f975381a0237d372f0a4044ff983e0
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2946116
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
18ddd131
|
2021-06-07T14:59:43
|
|
Vulkan: SPIR-V Gen: Support mediump/lowp
The mediump and lowp precisions translate to a RelaxedPrecision
decoration in SPIR-V. This change implements this decoration and
enables SPIR-V generation when emulating Bresenham lines. Prior to this
change, Bresenham line emulation resulted in a validation error due to
the vertex shader output being without RelaxedPrecision but the fragment
shader input (translated by glslang) with it.
The function that produces a new id is given a list of decorations to
apply, which itself is automatically deriven from the TType where
applicable, to minimize the risk of any id missing this decoration.
Bug: angleproject:4889
Change-Id: I30cc5a278634c5d83d63cd65b057336f9f573baa
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2946113
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
29227eef
|
2021-06-05T22:25:01
|
|
Vulkan: SPIR-V Gen: Specialization constants
With specialization constant qualifier and ids set in the node types,
the SPIR-V generation for these variables are trivially handled.
This is in preparation for enabling line raster emulation as well as
fragment shaders in general.
Bug: angleproject:4889
Change-Id: Ie4d4e47b222ac66d1e0eee29f55ac09990313580
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2939337
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
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>
|