Commit Graph

672 Commits

Author SHA1 Message Date
Lei Zhang
9149a66ca4 Fix the corner case in version generation script.
When the given directory is not inside the SPIRV-Tools project,
describe() returns a str instance instead of bytes instance
in Python3, which will case problem when calling decode() on it.
2016-03-11 15:06:15 -05:00
Andrew Woloszyn
9dd1cd7f31 Fixed float->int16 conversion warnings in VS2013. 2016-03-07 15:55:44 -05:00
Lei Zhang
f7e63786a9 Add comments to explain why calling decode(). 2016-03-07 13:44:09 -05:00
Lei Zhang
c15683906c Run pyformat with -s 4 --force_quote_type=single. 2016-03-06 13:00:58 -05:00
Lei Zhang
703b0f7ab4 Imporve compatibility with Python3.
* Use print_function from __future__ to tackle the print syntax
   change.
 * In Python3 str and bytes are no longer the same thing. Need
   proper decode.
2016-03-06 12:58:13 -05:00
Florian Ziesche
680f9b7ef1 Don't check kernel entry-point signatures.
Recognize SpvOpInBoundsPtrAccessChain and SpvOpPtrAccessChain as opcodes
returning a pointer.

 * spvOpcodeIsPointer: recognize SpvOpInBoundsPtrAccessChain and SpvOpPtrAccessChain as opcodes returning a pointer

 * isValid<SpvOpEntryPoint>: don't check kernel function signatures (these don't have to be 'void main(void)')

 * added tests for kernel OpEntryPoint, OpInBoundsPtrAccessChain and OpPtrAccessChain, as well as facilities to actually test kernel/OpenCL SPIR-V

 * fixed pow and pown specification (both should take 2 parameters), spec bug reported at https://www.khronos.org/bugzilla/show_bug.cgi?id=1469

 * use ASSERT_TRUE instead of ASSERT_EQ

 * added pow and pown test (pow(val, 2.0f) and pown(val, 3))

Revert " * fixed pow and pown specification (both should take 2 parameters), spec bug reported at https://www.khronos.org/bugzilla/show_bug.cgi?id=1469"

This reverts commit c3d5a87e73.

Revert " * added pow and pown test (pow(val, 2.0f) and pown(val, 3))"

This reverts commit 7624aec720.
2016-03-02 15:27:26 -05:00
Dejan Mircevski
c31a31942b Make libspirv.h more C friendly.
In C, `#include <stdbool.h>` so `bool` is recognized.

Add a `typedef` for `spv_context_t`.
2016-03-01 12:38:59 -05:00
Lei Zhang
2923806314 Remove stale code. 2016-02-26 15:38:42 -05:00
Lei Zhang
712bed0227 Fix issues reported by cppcheck.
Remove code not being used, add explicit to constructors, and
add missing fields in constructors.
2016-02-25 16:16:28 -05:00
Andrew Woloszyn
96c80a1b5a Added missing <cstdint> in bitutils.
This was breaking MSVC2013.
2016-02-24 15:26:05 -05:00
David Neto
3deecefde5 If no tag in the repo, then show the commit hash 2016-02-24 12:42:13 -05:00
Andrew Woloszyn
1d52555f93 Actually find the python executable before use.
Also change PYTHON_EXE to PYTHON_EXECUTABLE to match what
the cmake documentation says.
2016-02-24 10:24:36 -05:00
David Neto
b38ac4bae6 Use subprocess.Popen, hoping for Windows portability
Replaces use of subprocess.check_output
2016-02-23 18:09:50 -05:00
Lei Zhang
b6ccd0d891 Remove spv_validate_options_t and change tests accrodingly.
Users always want to run all the checks. The spv_validate_options_t
mechanism, which provides little benefits to users, complicates the
internal implementation and also makes the tests exercise different
paths as users do.

Right now the tests are more like integration tests instead of
unit tests, which should be our next refactoring aim.
2016-02-23 16:19:33 -05:00
qining
4e797f8236 Implement --version for spirv-tools
'spirv-as --version', 'spirv-dis --version' and 'spirv-val --version'
will display version information.
2016-02-23 14:14:23 -05:00
Lei Zhang
9413fbbf58 getWord() should not go beyond the end of the source text.
This addresses Bug #126 where EOL is missing at the end of
source file.
2016-02-22 17:25:08 -05:00
David Neto
d1f64c6394 spirv-val help says it's a work in progress. 2016-02-22 16:43:53 -05:00
Lei Zhang
c9783ded75 Avoid closing stdin and stdout. 2016-02-19 10:15:17 -05:00
Lei Zhang
c90a820a10 Fix command line option errors in val.
* There is no -capability.
* -rules is missing.
* -id by default is turned off.
* Add -all.
2016-02-19 09:46:20 -05:00
Lei Zhang
d5bdd9dced Support outputting to stdout in the as tool. 2016-02-19 09:43:17 -05:00
Eric Engestrom
eb6ae976c6 Remove unnecessary null pointer checks
Fixes #110
2016-02-18 23:43:25 +00:00
Lei Zhang
bd354d442a Document SPIR-V binary and assembly file naming convention. 2016-02-18 16:35:24 -05:00
Lei Zhang
4a722d80a6 Use unordered_map to store defs in UseDefTracker for fast lookup. 2016-02-18 14:38:12 -05:00
Lei Zhang
6572ad725f Support using stdin to supply input in the val tool.
This allows getting output from other utilities using pipe.
2016-02-18 13:43:15 -05:00
Lei Zhang
53c30dd1bd Support using stdin to supply input in the as tool.
This allows getting output from other utilities using pipe.
2016-02-18 12:24:47 -05:00
Lei Zhang
8e5479335f Reject unknown long-named command line options in dis. 2016-02-18 11:28:26 -05:00
David Neto
e4853e8508 Fix the source organization section in README.md
It now reflects the new header file organization.
It also tells API clients what to add to the search
include path.
2016-02-17 22:30:50 -05:00
David Neto
4d2f2239bf SPIR-V Tools fully supports SPIR-V 1.0 Rev3
- Update version numbers in libspirv.h.
  Add a test for the relevant macros.
- Update the README
2016-02-17 16:01:39 -05:00
David Neto
53075ea82b Add MultiViewport capability, new in 1.0.3
Fix typos in previous tests with MultiViewport.
2016-02-17 15:29:05 -05:00
David Neto
5a70335bf1 Rearrange headers
Now we have public headers arranged as follows:
$SPIRV_TOOLS_ROOT/include/spirv-tools/libspirv.h
$SPIRV_TOOLS_ROOT/include/spirv/spirv.h
$SPIRV_TOOLS_ROOT/include/spirv/GLSL.std.450.h
$SPIRV_TOOLS_ROOT/include/spirv/OpenCL.std.h

A project should use -I$SPIRV_TOOLS_ROOT/include
and then #include "spirv-tools/libspirv.h"

The headers from the SPIR-V Registry can be accessed as "spirv/spirv."
for example.

The install target should also install the headers from the SPIR-V
Registry.  The libspirv.h header is broken otherwise.

The SPIRV-Tools library depends on the headers from the SPIR-V Registry.

The util/bitutils.h and util/hex_float.h are pulled into the internal
source tree.  Those are not part of the public API to SPIRV-Tools.
2016-02-17 14:49:44 -05:00
David Neto
d1bb51dbb0 Some GLSL extended instructions depend on capabilities. 2016-02-17 13:37:30 -05:00
David Neto
58c4e1d57a Add GLSL instructions NMin, NMax, NClamp
These appear first in GLSL.std.450 in 1.0 Rev3
2016-02-17 13:35:13 -05:00
David Neto
1d9a876f95 Test OpImageSparseRead
Also tweak the image operands test with OpImageFetch so the input assembly
more closely matches the expected output.  But don't make it a round
trip test since we want to check the assembler's ability to read the
image operand mask with out-of-order mask names.

The OpImageSparseRead assembly test is also a round trip disassembler
test.
2016-02-17 13:32:37 -05:00
Andrew Woloszyn
4ddb431b16 Fixed internal compiler error in gcc-4.9.
This showed up in mips and mips64 builds. A combination of templates
and the error reporting were causing gcc to crash. This splits up the
functionality in a way that now successfully compiles.
2016-02-17 13:07:33 -05:00
David Neto
2732f57ed2 Remove remaining float overflow value tests
Should fix tests on Windows.
2016-02-17 13:02:48 -05:00
David Neto
2889a0c21c Use syntax tables for SPIR-V 1.0 Rev3
- The SPIR-V spec generator has changed how it represents optional
  operands.  Now it tracks a separate boolean flag indicating optionality.
  However, SPIRV-Tools still wants to represent both operand class
  and optionality in the same enums space (SPV_OPERAND_TYPE_*).
  So there's extra work in the patch.

- In the spec generator, OperandImage is now OperandImageOperands.
  This affects enum translation in opcode.cpp.

- In the spec generator, image operands are explicitly followed by
  Id, and VariableIds.  However, SPIRV-Tools uses the bits set
  in the image operand bitmask to control the number and meaning
  of the Ids that follow.  So in writing the opcode.inc syntax
  table, drop all operands after OperandImageOperands.

- Some enums are now more explicitly represented in the generated
  opcode.inc:
    - AccessQualifier (e.g. on OpTypeImage), in both required and
      optional flavours.
    - MemoryAccess (e.g. on loads and stores)

- Add SPV_OPERAND_TYPE_OPTIONAL_ACCESS_QUALIFIER

- Add tests for the optional AccessQualifier operand on OpTypeImage.

- Update the AccessQualifier test for OpTypeImage so it's a round
  trip test through the disassembler as well.
2016-02-16 16:47:04 -05:00
David Neto
dd8a661b70 Update capabilities for 1.0 Rev3 2016-02-16 16:44:45 -05:00
David Neto
0c0a07f0aa Don't promise particular values when float parsing fails.
This should address problems on Windows:
https://github.com/KhronosGroup/SPIRV-Tools/issues/104
2016-02-16 12:13:51 -05:00
David Neto
31c0870367 Configure gmock locally only if not already configured.
Allows an enclosing project to have already configured gmock, even
if the developer has placed the googletest sources under this
project's external/googletest directory.

Describe how to enable the tests in the two essential scenarios:
where SPIR-V Tools is standalone, or where SPIR-V Tools is configured
as a part of a larger project.
2016-02-16 11:52:15 -05:00
David Neto
77b48b5c6d Use SPIR-V headers for 1.0 Rev3
Refresh from the SPIR-V registry.
2016-02-15 09:45:20 -05:00
David Neto
c7a9a909a8 Parse overflow for fp16 like for 32- and 64-bit
In that case, set the stream fail bit, and set the maximum normal
value or lowest normal value, depending on the sign of the original
value.
2016-02-15 09:31:10 -05:00
David Neto
6bad02c320 Float literal parsing fixes
- For 32- and 64-bit floats, overflow is a parse error

  This works around a difference between Xcode's istringstream
  and other platforms.  Xcode's runtime library will happlily
  "round up" overflow values to infinity.  We want to make it fail.

- When parsing a float fails due to bad syntax, follow C++11
  behaviour for operator>> and set the value to zero.

- When parsing a 32-bit or 64-bit float overflows, follow C++11
  behaviour for operator>> and set the value to the nearest
  normal value: either max or lowest finite value for the type.

- Add FloatProxy<T>::max() and ::lowest()

- Make 16-bit overflow behaviour more consistent: we always get a
  16-bit infinity of the right sign, whether the original string
  is a normal value for 32-bit or an overflow value for 32-bit.
  That matches our earlier intent.
  Added TODO's to make 16-bit overflow always an error, just like
  for 32-bit and 64-bit.

- Simplify normal parsing of Float16 values by delegating to
  normal parsing of 32-bit floats.
2016-02-12 16:01:42 -05:00
David Neto
000cad9cc6 Reject float literals with two leading signs
E.g. --1 should be rejected.
2016-02-11 14:11:16 -05:00
David Neto
feda995c84 More parsing tests for literals with leading minus
Also checks some hex literal cases.

This addresses part of
https://github.com/KhronosGroup/SPIRV-Tools/issues/45
by removing the parseNumber case for "-0" on unsigned
integers.  We don't care about that platform difference
at the level of std::istringstream, since we reject it
at a higher parsing level.
2016-02-08 16:56:41 -05:00
Dejan Mircevski
7ef6da7b7f Make IsTypeNullable a transitive check. 2016-02-04 15:34:47 -05:00
Dejan Mircevski
4038195d81 Eliminate parameter-order check from ID-validation. 2016-02-03 12:34:52 -05:00
Dejan Mircevski
10fa696af7 Allow Op[No]Line between OpFunctionParameters.
Also ensure we don't get thrown off by too many parameters.
2016-02-03 10:26:59 -05:00
Dejan Mircevski
6428933408 Enable ctest. 2016-02-02 16:05:11 -05:00
David Neto
adb8725900 Validation of mask operand capabilities is more data driven
Use spvOperandIsConcreteMask to determine if an operand is
a bitmask.  Check its individual bits in a generic way.
2016-02-02 12:12:48 -05:00
David Neto
b5267569d1 Add spvOperandIsConcreteMask 2016-02-02 12:05:34 -05:00