1134 Commits

Author SHA1 Message Date
Neil Roberts
2d53904999 Take into account the number of locations taken up by a uniform
When assigning uniform locations it now takes into account the number
of locations occupied by the type. For uniforms, all types except
arrays and structs take up one location. For arrays the base location
count is multiplied by the array dimensions and for structs it is the
sum of the locations of each member.
2018-03-21 12:03:39 +01:00
Neil Roberts
1fe4a44759 Add locations to opaque types for OpenGL 2018-03-21 12:03:39 +01:00
Rex Xu
b126550b1a Add additional error check for fragment shader outputs
Int64 and uint64 are disallowed as fragment shader outputs, similar to
double.
2018-03-21 15:27:38 +08:00
John Kessenich
e7e081bda9 PP: don't give errors on some tokens under #if 0 (or similar).
Fixes #1295.

Tokens that are accepted by any version of HLSL or GLSL should be
allowed when #ifdef'd off, such that errors are not reported.
2018-03-19 00:43:18 -06:00
John Kessenich
5d610ee1dc Implement SPV_GOOGLE_hlsl_functionality1.
Enabled via -fhlsl_functionality1
2018-03-16 20:21:44 -06:00
John Kessenich
cd23a47566
Merge pull request #1291 from ben-clayton/add-nv-nopersp
Add support for GL_NV_shader_noperspective_interpolation
2018-03-16 15:50:38 -06:00
John Kessenich
fb1e40b4de
Merge pull request #1299 from KhronosGroup/fix-conversions
Fix conversions
2018-03-16 11:30:09 -06:00
John Kessenich
647fccaf2f AST: Fix shift conversions, which don't require matching types.
The base and shift amount need to be integers, but not of the same type.
This fixes #1296 and replaces #1297.
2018-03-15 21:11:36 -06:00
John Kessenich
6e899be5ec Non-functional: Rationalize operators handled by the split addConversion() functions.
Historically, addConversion() was split to handle binary node <-> node conversions
from non-binary node -> type conversions. However, the split wasn't entirely clean
WRT HLSL design and left duplication of case statements, which are misleading, and
this commit cleans up.
2018-03-15 19:58:49 -06:00
John Kessenich
137a24dffa AST: Remove convertToBasicType() which was obfuscating the conversion design.
Reinforces that conversion rules are operation-specific.
Side effect is that HLSL logical-operator conversions are more direct
(e.g. float -> bool, rather than float -> int -> bool).
2018-03-15 19:32:27 -06:00
John Kessenich
075c8c11e2
Merge pull request #1294 from dgkoch/dgkoch_build_fixes4
Fix build several build errors
2018-03-14 01:05:56 -06:00
Daniel Koch
bfe0952118 Fix build several build errors
glslang/SPIRV/SpvBuilder.cpp:2533:27: error: comparison of integers of different signs: 'int' and 'size_type' (aka 'unsigned long') [-Werror,-Wsign-compare]
        for (int c = 0; c < accessChain.swizzle.size(); ++c)
                        ~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.

glslang/hlsl/hlslParseHelper.cpp:69:5: error: field 'cullDistanceInput' will be initialized after field 'clipDistanceOutput' [-Werror,-Wreorder]
    cullDistanceInput(nullptr),
    ^
1 error generated.

glslang/glslang/MachineIndependent/attribute.cpp:85:16: error: comparison of integers of different signs: 'int' and 'size_type' (aka 'unsigned long') [-Werror,-Wsign-compare]
    if (argNum >= args->getSequence().size())
        ~~~~~~ ^  ~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.
2018-03-13 17:06:51 -04:00
Baldur Karlsson
34cd7630f8 Replace en-dash with simple ASCII hyphen
* This means the source file is ASCII instead of (assumed) UTF-8 and
  doesn't cause warnings when compiling on non-western codepages.
2018-03-13 19:53:30 +00:00
Ben Clayton
017a567be1 Add support for GL_NV_shader_noperspective_interpolation 2018-03-13 15:55:18 +00:00
Rex Xu
a00e51b5b2 HLSL: Correct some mistakes for min16 types
- Add missing constructor ops to support float16/int16/uint16 types
- Allow half float literals
- Correct two errors of double literal parse in HLSL: extension check and
  postfix
2018-03-12 23:15:11 +08:00
siavashserver
b502a802f4
Fix memory leak upon ProcessDeferred failure. 2018-03-08 09:13:36 +03:30
John Kessenich
fb97d25c98 Merge branch 'feature' of https://github.com/amdrexu/glslang into amdrexu-feature 2018-03-07 14:29:45 -07:00
John Kessenich
f15fbc04f7 Merge branch 'bugfix' of https://github.com/amdrexu/glslang into amdrexu-bugfix 2018-03-07 14:25:46 -07:00
Rex Xu
e68a7698e6 Add more error checks for swizzleInvocations{Masked}AMD() 2018-03-07 17:22:41 +08:00
Rex Xu
cb61eec948 HLSL: Map min types to GLSL 16-bit types 2018-03-07 13:10:01 +08:00
John Kessenich
66011cb2c2 SPV: Implement Vulkan 1.1 features and extensions. 2018-03-06 16:12:04 -07:00
Rex Xu
4f5b99e37e Add more error checks for interpolateAtVertexAMD() 2018-03-06 15:01:40 +08:00
John Kessenich
c6c80a6e48 Versioning: Address #1255: Move to semantic versioning.
Still missing is automation and final decisions on mechanisms in general.
2018-03-05 22:23:17 -07:00
John Kessenich
b5b5f918c6 Non-functional: Make the vulkan version number meaning be only 0 or not 0. 2018-03-02 18:17:42 -07:00
Rex Xu
1e5d7b0b27 Implement the extension GL_AMD_gpu_shader_half_float_fetch
- Support new opaque types: f16sampler*, f16image*, f16subpassInput*.
- Add new built-in GLSL texture/image functions.
2018-03-02 16:48:03 +08:00
davidhubbard
f5ddcfc528 TBuiltIns::identifyBuiltIns: EShLangFragment fallthrough
EShLangFragment falls through to EShLangCompute, only #ifndef AMD_EXTENSIONS.
This is probably a bug.
2018-02-28 11:29:04 -06:00
John Kessenich
c5215791f5 IO mapper: Fix #1261: Supply location mapper with size computer.
This factored computeTypeLocationSize() out of needing the TIntermediate contents,
and uses it to show how to know how many locations an object needs.
However, it still does not do cross stage, or mixed location/no-location
analysis.
2018-02-27 13:31:48 -07:00
John Kessenich
d55fe86512 HLSL: Fix #1257: layout float1, int1, etc., as scalars. 2018-02-27 00:48:17 -07:00
John Kessenich
9c9c4e90df GLSL/SPV: Fix #1196: Require resources to have layout(binding=X). 2018-02-22 11:47:41 -07:00
John Kessenich
4bee531fc1 HLSL: Fix #1249: Always execute both sides of ternary "?:".
This is semantically required by HLSL, and frequently results in using
OpSelect instead of control flow.
2018-02-20 21:32:33 -07:00
John Kessenich
b587fb6208 GLSL: Fix #1247. Remove extraneous *= matrix test. 2018-02-15 12:22:25 -07:00
Rex Xu
35a3de748a Fix an issue of interpolateAtVertexAMD().
An error message should be reported if the interpolant is not an input.
2018-02-14 11:42:34 +08:00
John Kessenich
23ea3db3e5 Warning for #pragma once. GLSL and HLSL. Addresses #824. 2018-02-11 23:23:22 -07:00
John Kessenich
4ee5193b53 Non-functional: GLSL: Fix #1242; don't pass reference to nullptr. 2018-02-08 12:13:25 -07:00
John Kessenich
9ffc72d1a3
Merge pull request #1238 from zeux/pp-string-buffer
Preprocessor: Use std::string instead of std::stringstream
2018-02-06 09:47:44 -07:00
Arseny Kapoulkine
75cffdf92c Preprocessor: Use std::string instead of std::stringstream
std::stringstream has a measurable overhead for preprocessing - it
appears that operator<< does a tiny bit of extra work for appending
chars/strings and also can't be inlined in most cases on VS2015;
additionally, std::endl triggers a stream flush which also adds up.

Replacing this with std::string buffer gets the preprocessing time down
from 180ms to 135ms in one case, making it 1.33x faster.

Note that integer-to-string conversion is using std::to_string; in
theory this could be slower than sprintf or manual conversion, but I
haven't found these cases to affect preprocessing time in practice
(std::to_string would always use the short string buffer for
line/version numbers, and the number of calls is not too significant).
2018-02-05 16:07:39 -08:00
John Kessenich
b3f9e0a334 GLSL: Fix #1229: merge array sizes in parameter declarations. 2018-02-02 12:41:25 -07:00
John Kessenich
98e733cb58
Merge pull request #1232 from KhronosGroup/control-flow-attributes
Control flow attributes
2018-02-02 09:03:44 -07:00
John Kessenich
da0b18c3db Error message: Improve error message (will help another party id a bug). 2018-02-01 11:09:21 -07:00
John Kessenich
304765681b AST: dump attributes along with control flow. 2018-02-01 00:55:26 -07:00
John Kessenich
a2858d9bdd GLSL: Implement GL_EXT_control_flow_attributes.
See https://github.com/KhronosGroup/GLSL/pull/11.
2018-02-01 00:55:08 -07:00
John Kessenich
e18fd20d5c HLSL: Refactor attribute implementation.
- make it sharable with GLSL
- correct the case insensitivity
- remove the map; queries are not needed, all entries need processing
- make it easier to build bottom up (will help GLSL parsing)
- support semantic checking and reporting
- allow front-end dependent semantics and attribute name mapping
2018-02-01 00:30:34 -07:00
John Kessenich
eb2c0c72bf GLSL: XFB: more support for built-in block redeclarations with XFB.
- correct inheritence (or not) of the right XFB buffer
- compute implicit stride (fixes #1212)
- semantic check block-member redeclarations
- inherit stride from a member
2018-01-09 18:00:33 -07:00
John Kessenich
9c6f8cc29b Scanner: Many int16 and float16 fixes, including performance.
- fixes #1209, addresses most of #1187
- only query feature availability on seeing the feature
  (was doing it for every single token)
- correct case-sensitive checks for multi-character suffixes
2018-01-08 15:59:29 -07:00
John Kessenich
c043aadd25 Scanner: Many int64 fixes, including performance.
- partially addresses #1209 and #1187
- only query 64-bit extension on seeing use of a 64-bit literal
  (was doing it for every single token)
- correct HLSL acceptance of 64-bit literal syntax (still an int though)
- error on overflow of 32-bit literal type
2018-01-08 11:52:23 -07:00
John Kessenich
adc33b23cc Non-functional: Fix HLSL error message, and code formatting. 2018-01-08 11:47:08 -07:00
LoopDawg
c074f2bc24 g++ 5.4.0 suspected defect workaround
Fix compilation error under g++ 5.4.0.
2017-12-20 11:21:05 -07:00
John Kessenich
e1ff231235 GLSL: Fix #1193: no 'location' on uniform/buffer block. 2017-12-16 10:07:22 -07:00
John Kessenich
a0d60f2bea gcc: potentially a compiler-bug work around 2017-12-16 02:58:10 -07:00
John Kessenich
838d7afc61 SPV: HLSL: Move to correct HLSL barrier semantics, per Khronos recommendation. 2017-12-16 00:34:08 -07:00