Commit graph

452 commits

Author SHA1 Message Date
steve-lunarg
d9cb832f9c HLSL: allow promotion from 1-vector types to scalars, e.g, float<-float1
Previously, an error was thrown when assigning a float1 to a scalar float,
or similar for other basic types.  This allows that.

Also, this allows calling functions accepting scalars with float1 params,
so for example sin(float1) will work.  This is a minor change in
HlslParseContext::findFunction().
2016-11-13 14:44:46 -07:00
Johannes van Waveren
d1300753f7 update 2016-10-21 17:30:50 +09:00
Johannes van Waveren
2f4c832d47 Merge remote-tracking branch 'upstream/master' 2016-10-21 17:21:46 +09:00
Johannes van Waveren
8e1e717cae fixed MSVC 2015 compile warnings 2016-10-21 17:21:12 +09:00
steve-lunarg
6cb1637f37 Move promote methods to TIntermediate class
A need arose to use capabilities from TIntermediate during
node promotion.  These methods have been moved from virtual
methods on the TIntermUnary and TIntermBinary nodes to methods
on TIntermediate, so it is easy for them construct new nodes
and so on.

This is done as a separate commit to verify that no test results
are changed as a result.
2016-10-19 12:57:22 -06:00
steve-lunarg
e5921f1309 HLSL: Fix unary and binary operator type conversion issues
This fixes defects as follows:

1. handleLvalue could be called on a non-L-value, and it shouldn't be.

2. HLSL allows unary negation on non-bool values.  TUnaryOperator::promote
   can now promote other types (e.g, int, float) to bool for this op.

3. HLSL allows binary logical operations (&&, ||) on arbitrary types, similar
   (2).

4. HLSL allows mod operation on arbitrary types, which will be promoted.
   E.g, int % float -> float % float.
2016-10-18 16:56:37 -06:00
John Kessenich
5d45eadedc HLSL: Turn on tests for groupshared. 2016-10-16 12:22:20 -06:00
John Kessenich
b50fd17acb HLSL: Support SV_Coverage and SV_DispatchThreadId; catch SV_GroupIndex. 2016-10-16 12:12:11 -06:00
John Kessenich
4a3467933e Build: Fix unsigned/signed warning. 2016-10-16 11:50:46 -06:00
John Kessenich
1fabc0f697 Merge pull request #548 from baldurk/vs2010-compile-fixes
VS2010 compile fixes
2016-10-15 23:09:31 -06:00
steve-lunarg
8b0227ced9 HLSL: phase 3b: Texture methods remember and return vector size.
Also makes a (correct) test change for global -> temp vars.
2016-10-14 18:44:32 -06:00
steve-lunarg
4f2da27aec HLSL: phase 3a: Add sub-vec4 rwtexture formats (qualifier.layoutFormat)
This PR sets the TQualifier layoutFormat according to the HLSL image type.
For instance:

  RWTexture1D <float2> g_tTex1df2;

becomes ElfRg32f.  Similar on Buffers, e.g, Buffer<float4> mybuffer;

The return type for image and buffer loads is now taken from the storage format.
Also, the qualifier for the return type is now (properly) a temp, not a global.
2016-10-14 18:44:32 -06:00
baldurk
75c3bf68e9 Add strtoull wrapper for VS2010, pointing to MS implementation 2016-10-13 19:24:23 +02:00
Alex Szpakowski
f887785990 fixup! Address some compiler warnings. 2016-10-11 16:16:47 -03:00
Alex Szpakowski
49ad2b72a1 Address some compiler warnings.
- Add explicit casts from long to int.
- Comment out method argument names that are unused.
- Always initialize a boolean variable before it's read.
2016-10-08 22:07:20 -03:00
John Kessenich
19bdf90eba SPV: Distinguish between SPV and non-SPV rules for member overlap. 2016-10-07 11:50:25 -06:00
John Kessenich
087a454af2 HLSL: Add shape conversions for return values. 2016-10-06 16:56:54 -06:00
John Kessenich
ed33e05762 HLSL: Do structure conversion for return type struct-punning on non-entry-point functions. 2016-10-06 13:06:13 -06:00
John Kessenich
c056adcddd Allow for larger binding numbers. 65K instead of 255. 2016-10-05 12:31:24 -06:00
steve-lunarg
8ffc36aecc add reflection queries to return a TType. Fix minor issue with interface names.
- Add new queries: TProgram::getUniformTType and getUniformBlockTType,
  which return a const TType*, or nullptr on a bad index.  These are valid for
  any source language.

- Interface name for HLSL cbuffers is taken from the (only) available declaration name,
  whereas before it was always an empty string, which caused some troubles with reflection
  mapping them all to the same index slot.  This also makes it appear in the SPIR-V binary
  instead of an empty string.

- Print the binding as part of the reflection textual dump.

- TType::clone becomes const.  Needed to call it from a const method, and anyway it doesn't
  change the object it's called on.

- Because the TObjectReflection constructor is called with a TType *reference* (not pointer)
  so that it's guaranteed to pass in a type, and the "badReflection" value should use a nullptr
  there, that now has a dedicated static method to obtain the bad value.  It uses a private
  constructor, so external users can't create one with a nullptr type.
2016-10-02 16:57:58 -06:00
John Kessenich
de97fe0ad4 Non-functional: Rationalizing parse helper hierarchy, step 3 (effected editable symbols and IO resize). 2016-10-01 18:44:38 -06:00
John Kessenich
a2a5dd474e Non-functional: Rationalizing parse helper hierarchy, step 2 (effected error messaging and cascading errors). 2016-10-01 18:07:57 -06:00
John Kessenich
273060c2d3 Non-functional: Rationalizing parse helper hierarchy, step 1 (effected memory of HLSL keyword map). 2016-10-01 17:47:40 -06:00
John Kessenich
a08c929d8e HLSL: Line numbers only: Set locations (line numbers) on synthesized flattening code. 2016-10-01 17:17:55 -06:00
John Kessenich
d8fe2ca8e5 HLSL: Handle flattened I/O structs passed to function *out* parameters. 2016-10-01 17:11:21 -06:00
John Kessenich
c86d38bb2b Non-functional: Better use of .isParamOutput() and some other methods. 2016-10-01 13:30:37 -06:00
John Kessenich
ba56e23e8a Fix typo in error message. 2016-10-01 12:36:19 -06:00
John Kessenich
f571d0c037 Non-functional: Use isOpaque() instead of compare against EbtSampler. 2016-10-01 12:35:01 -06:00
John Kessenich
3e47f5f7c8 Merge pull request #523 from amdrexu/feature2
Parser: Implement extension GL_AMD_gpu_shader_half_float.
2016-09-30 09:54:17 -06:00
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
df98cc26d5 Add amend ability for anonymous blocks, so they can grow between function bodies. 2016-09-29 23:59:26 -06:00
John Kessenich
21e7e32126 HLSL: Fix merge conflict. 2016-09-29 10:27:57 -06:00
John Kessenich
4e55988a47 HLSL Tests: Tests for previous commit, to make it easier to see what's changing. 2016-09-29 10:25:15 -06:00
John Kessenich
6dbc0a7a33 Support a uniform block to hold global uniform variables.
Used initially just by HLSL, for $Global.  Could be an option
for GLSL -> Vulkan.
2016-09-29 10:25:15 -06:00
John Kessenich
e82061de08 HLSL: Rationalize combination of type arrayness and name arrayness. 2016-09-29 10:25:15 -06: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
6714bcc2ca HLSL: Fix result type of passing a flattened-aggregate to a function. 2016-09-21 17:50:12 -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
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
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
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