Commit Graph

1525 Commits

Author SHA1 Message Date
Rex Xu
c9e3c3c941 Parser: Implement extension GL_AMD_gpu_shader_half_float.
- Add built-in types: float16_t, f16vec, f16mat.
- Add support of half float constant: hf, HF.
- Extend built-in floating-point operators: +, -, *, /, ++, --, +=, -=,
  *=, /=, ==, !=, >=, <=, >, <.
- Add support of type conversions: float16_t -> XXX, XXX -> float16_t.
- Add new built-in functions.
2016-09-30 16:13:06 +08:00
John Kessenich
b1672fa0de Merge pull request #525 from steve-lunarg/implicit-size
HLSL: allow implicit size in array declarations
2016-09-27 23:15:22 -06:00
steve-lunarg
265c0618b1 HLSL: allow implicit array sizing.
In HLSL array sizes need not be provided explicitly in all circumstances.
For example, this is valid (note no number between the [ ]):

  // no explicit array size
  uniform float g_array[] = { 1, 2, 3, 4, 5 };

This PR does not attempt to validate most invalid cases.

A new test is added to verify the resulting linker objects.
2016-09-27 14:28:26 -06:00
John Kessenich
16a99a3804 Merge pull request #524 from DominikWitczakAMD/517_include_amd_extensions_by_default
#517: Enable AMD extensions by default
2016-09-27 09:48:38 -06:00
Dominik Witczak
daff1a2523 #517: Enable AMD extensions by default 2016-09-27 10:30:14 +02:00
John Kessenich
5fc501ff07 Merge pull request #520 from amdrexu/bugfix
SPV: OpGroupBroadcast is unable to handle vector operand.
2016-09-26 17:45:25 -06:00
John Kessenich
f38978edb6 Merge pull request #522 from steve-lunarg/glsl-binding-test
GLSL: Add IO map tests
2016-09-26 17:40:17 -06:00
steve-lunarg
ad0752e8fa GLSL: Add binding map tests
This PR adds a GLSL equivalent to the HLSL binding mapping tests for offsets and auto-numbering.
The shaders are as equivalent as possible.  The bindings of the base results match exactly
between the two.
2016-09-26 17:02:44 -06:00
Rex Xu
b707205b0d SPV: OpGroupBroadcast is unable to handle vector operand. 2016-09-26 15:53:40 +08:00
John Kessenich
10f7fc739c HLSL: Reverse what the driver is told about row/column majorness, matching the row-column reversal. 2016-09-25 20:26:03 -06:00
John Kessenich
88712f1a21 Merge pull request #519 from amdrexu/bugfix
SPV: Still have to specify SPIR-V extension for gl_SubGroupSizeARB and gl_SubGroupInvocationARB.
2016-09-23 17:31:31 -06:00
Rex Xu
36876e6408 SPV: Still have to specify SPIR-V extension for gl_SubGroupSizeARB and gl_SubGroupInvocationARB. 2016-09-23 22:13:43 +08:00
John Kessenich
e53274dfc1 Merge pull request #518 from steve-lunarg/flatten-fix
Fix defects in uniform array flattening
2016-09-22 21:52:44 -06:00
steve-lunarg
cf43e66125 Fix defects in uniform array flattening
Fix for two defects as follows:

- The IO mapping traverser was not setting inVisit, and would skip some AST nodes.
  Depending on the order of nodes, this could have prevented the binding from
  showing up in the generated SPIR-V.

- If a uniform array was flattened, each of the flattened scalars from the array
  is still a (now-scalar) uniform.  It was being converted to a temporary.
2016-09-22 15:58:06 -06:00
John Kessenich
02df206c9e Merge pull request #516 from amdrexu/feature3
SPV: Implement the extension SPV_KHR_shader_ballot
2016-09-22 10:54:18 -06:00
John Kessenich
4455258a08 HLSL: Merge pull request #515 from steve-lunarg/flatten-uniform-array
HLSL: Flatten uniform arrays
2016-09-22 10:01:37 -06:00
steve-lunarg
e0b9debda2 Flatten uniform arrays
This checkin adds a --flatten-uniform-arrays option which can break
uniform arrays of samplers, textures, or UBOs up into individual
scalars named (e.g) myarray[0], myarray[1], etc.  These appear as
individual linkage objects.

Code notes:

- shouldFlatten internally calls shouldFlattenIO, and shouldFlattenUniform,
  but is the only flattening query directly called.

- flattenVariable will handle structs or arrays (but not yet arrayed structs;
  this is tested an an error is generated).

- There's some error checking around unhandled situations.  E.g, flattening
  uniform arrays with initializer lists is not implemented.

- This piggybacks on as much of the existing mechanism for struct flattening
  as it can.  E.g, it uses the same flattenMap, and the same
  flattenAccess() method.

- handleAssign() has been generalized to cope with either structs or arrays.

- Extended test infrastructure to test flattening ability.
2016-09-22 08:47:48 -06:00
Rex Xu
5159664475 SPV: Implement the extension SPV_KHR_shader_ballot 2016-09-22 16:05:07 +08:00
John Kessenich
6714bcc2ca HLSL: Fix result type of passing a flattened-aggregate to a function. 2016-09-21 17:50:12 -06:00
John Kessenich
6873f3d898 Merge pull request #514 from steve-lunarg/binding-map-3
HLSL: Add location offsets per resource type
2016-09-21 08:57:31 -06:00
steve-lunarg
7f7c2ed780 HLSL: Add location offsets per resource type
This PR adds the ability to offset sampler, texture, and UBO bindings
from provided base bindings, and to auto-number bindings that are not
provided with explicit register numbers. The mechanism works as
follows:

- Offsets may be given on the command line for all stages, or
  individually for one or more single stages, in which case the
  offset will be auto-selected according to the stage being
  compiled. There is also an API to set them. The new command line
  options are --shift-sampler-binding, --shift-texture-binding, and
  --shift-UBO-binding.

- Uniforms which are not given explicit bindings in the source code
  are auto-numbered if and only if they are in live code as
  determined by the algorithm used to build the reflection
  database, and the --auto-map-bindings option is given. This auto-numbering
  avoids using any binding slots which were explicitly provided in
  the code, whether or not that explicit use was live. E.g, "uniform
  Texture1D foo : register(t3);" with --shift-texture-binding 10 will
  reserve binding 13, whether or not foo is used in live code.

- Shorter synonyms for the command line options are available.  See
  the --help output.

The testing infrastructure is slightly extended to allow use of the
binding offset API, and two new tests spv.register.(no)autoassign.frag are
added for comparing the resulting SPIR-V.
2016-09-20 20:31:27 -06:00
John Kessenich
a1e2d4952e HLSL: Move to correct parsing of annotations, improving all annotations and recent string grammar. 2016-09-20 13:22:58 -06:00
John Kessenich
2572b19e94 HLSL: Turn on reflection, with basic test file, to catch regressions.
This is not a claim that reflection is working right, only a way to
see it is occurring and catch any regression.
2016-09-19 23:12:48 -06:00
John Kessenich
6b71c400f8 HLSL: Remove extraneous built-in member decorations for IO structs used in non-IO situations. 2016-09-19 22:16:09 -06:00
John Kessenich
86f7138706 HLSL: Add string basic type and recognize string declaration grammar.
This includes the "< decl ; decl ; >" syntax which has its own namespace.
This functionality is not implemented, just silently accepted.
2016-09-19 20:29:45 -06:00
John Kessenich
eee9d536bc Track separate entry-point names and mangled names...
... and use each in the correct way at consumption sites.
This completes issue #513.
2016-09-19 18:09:30 -06:00
John Kessenich
632f575ecc Merge pull request #512 from steve-lunarg/liveness-traverser
Refactor TLiveTraverser from the former reflection traverser, for fut…
2016-09-19 17:19:25 -06:00
steve-lunarg
55717302ef Refactor TLiveTraverser from the former reflection traverser, for future use in binding mapping.
This PR factors out the code that knows how to walk just the live parts of the AST.
The traverser in reflect.cpp is renamed to TReflectionTraverser, and inherits from
TLiveTraverser, which will also be used by a future binding offset PR.

The code is now smart about the entry point name (no longer hardcoded to "main").

There is an option to traverse all code (live+dead), because a consumer of the
class may wish to use it for both purposes without wanting a whole separate
class hierarchy.
2016-09-19 16:33:02 -06:00
John Kessenich
6fccb3cd75 Non-functional: Sweep through the stack for consistent with "main" and entry point.
Partially addresses issue #513.
2016-09-19 16:01:41 -06:00
John Kessenich
142785f324 HLSL: Change the final syntax-error printf to go to the infoLog.
Fixes issue #510.
2016-09-19 14:56:55 -06:00
John Kessenich
28b28140bb HLSL: Fix assert: ensure flattened shadow is EvqTemporary. 2016-09-19 00:19:49 -06:00
John Kessenich
5159d4f1af HLSL: Intercept flatten aggregates passed to a function input, and copy member-by-member. 2016-09-19 00:06:19 -06:00
John Kessenich
f911500db8 HLSL: Non-functional; make flatten semantics be about aggregates, not just structures. 2016-09-18 23:36:39 -06:00
John Kessenich
fcea302dbc HLSL: Fix bug in previous checkin when non-flattened objects are not simple l-values. 2016-09-16 21:16:04 -06:00
John Kessenich
d2ce838a58 HLSL: Handle flatten for reads from flatten structs and parameter passing. 2016-09-16 20:24:14 -06:00
John Kessenich
34e7ee79bb HLSL: Improve setting and testing of interpolation qualifiers.
Notably, use of 'linear' on a non-input could mark it as an input.
2016-09-16 18:05:44 -06:00
John Kessenich
d21baed6bc HLSL: Flatten whole-struct assigns and returns when targeting flattened I/O structs. 2016-09-16 03:20:03 -06:00
John Kessenich
f8e494c18c HLSL: Flatten all input/output structs, regardless of stage.
This is needed because an output structure can contain embedded built-ins
(like SV_Position) which should not get locations assigned.
2016-09-16 01:52:14 -06:00
John Kessenich
7dc630f3da HLSL: Flatten a return struct from an entry point and assign locations after flattening.
Locations now get assigned in order, but skipping built-ins, which can be
done post flattening.
2016-09-16 01:44:43 -06:00
John Kessenich
7f702124ec HLSL: return correct error when HLSL parsing fails.
At least partially addresses issue #510.
2016-09-15 22:49:31 -06:00
John Kessenich
315b6b9f68 Merge pull request #508 from amdrexu/bugfix
SPV: Support simultaneous l-value swizzle and dynamic component selection.
2016-09-15 22:41:37 -06:00
Rex Xu
64b9743ce0 SPV: Support simultaneous l-value swizzle and dynamic component selection. 2016-09-14 14:43:55 +08:00
John Kessenich
deb4940c17 HLSL: Register all entry-point in/out as part of the interface.
This makes the interface be invariant, whether or not individual
variables are used.
2016-09-12 11:55:47 -06:00
John Kessenich
b3e24e4359 SPV: Fix issue #506: generalize struct deep copy to include arrays. 2016-09-11 12:33:43 -06:00
John Kessenich
cd0a78a0d9 HLSL: Flatten vertex input and fragment output structures.
Vulkan can't handle structures into the vertex stage or out
of the fragment stage.
2016-09-10 11:09:24 -06:00
John Kessenich
6295c27900 Merge pull request #505 from steve-lunarg/rowmajor-fix-2a
HLSL: alias HLSL matrix-row-column onto AST matrix-column-row
2016-09-09 14:00:27 -06:00
steve-lunarg
297ae211f1 WIP: HLSL: Treat HLSL rows as GLSL columns.
WIP: HLSL: EOpGenMul arg reversal
2016-09-09 12:02:42 -06:00
John Kessenich
d4032293ce HLSL: Report an error if SPIR-V for Vulkan wasn't selected. 2016-09-09 11:43:11 -06:00
John Kessenich
a21187a7f9 Merge branch 'amdrexu-bugfix2' 2016-09-09 10:46:43 -06:00
John Kessenich
4bfb32e17b Merge branch 'bugfix2' of https://github.com/amdrexu/glslang into amdrexu-bugfix2 2016-09-09 10:46:10 -06:00