Commit Graph

2109 Commits

Author SHA1 Message Date
David Neto
8576c9c327 Support Image operand MinLod 2015-10-26 12:55:33 -04:00
David Neto
2d1b5e5bba Assembler supports new builtins in Rev32
They are VertexIndex and InstanceIndex.
2015-10-26 12:55:33 -04:00
David Neto
49c299b094 Assembler support for Nontemporal memory access 2015-10-26 12:55:33 -04:00
Lei Zhang
85c6f79081 Define two macros to simplify code for ExecutionMode operands. 2015-10-26 12:55:33 -04:00
David Neto
c09d3857ff Fix permissions on test/TextToBinary.Barrier.cpp 2015-10-26 12:55:33 -04:00
David Neto
aa0c3a5c07 Support Dim InputTarget 2015-10-26 12:55:33 -04:00
David Neto
9819adf4cb Support StorageClass PushConstant 2015-10-26 12:55:33 -04:00
David Neto
3e52dd915d Support ExecutionMode IndependentForwardProgress 2015-10-26 12:55:33 -04:00
David Neto
16df562ad3 Assembler test for Memory Semantics enum
Enables mask expression parsing for Memory Semantics arguments,
e.g. on OpMemoryBarrier.
2015-10-26 12:55:33 -04:00
Andrew Woloszyn
13804e5d63 All values now represent symbolic names instead of mixed with numeric.
Also removed un-necessary heap-allocation of spv_named_id_table.
This removed the necessity to expose a function to create/destroy it
and simplified the interface.
2015-10-26 12:55:33 -04:00
Lei Zhang
a66952d38c Remove executable file mode bits on source files. 2015-10-26 12:55:33 -04:00
David Neto
dbaf40718a Update to Rev32 headers. Part 1.
Just enough fixes to code make it build and pass tests.

Core changes:
 - Fix spelling for: NoPerspective, NonWritable, NonReadable,
 - Remove NoStaticUse, RelaxedMask

GLSL changes:
 - Fixed spelling for: InverseSqrt, FaceForward, MatrixInverse,
   SmoothStep, FindILsb, FindSMsb, FindUMsb
 - Replace Mix with IMix and FMix
 - Remove AddCarry, SubBorrow, MulExtended

Replace header OpenCLLib.h with OpenCL.std.h

TODO:
 - Regenerate the core instruction syntax table (source/opcode.inc)
 - Add test coverage for new enums and instructions.
2015-10-26 12:55:33 -04:00
Andrew Woloszyn
e0d351b3ad Switched VecTypeHint to take a LiteralNumber instead of an ID 2015-10-26 12:55:33 -04:00
Andrew Woloszyn
fabeeb863b Removed duplicate code due to what looks like a merge issue 2015-10-26 12:55:33 -04:00
David Neto
74af05f012 Cleanups for EnumCase
Make it a class, since it has non-trivial behaviour for converting
the enumerated value to a uint32_t value. (Comply with style guide.)

Merge EnumCaseWithOperands into EnumCase.
2015-10-26 12:55:33 -04:00
David Neto
1b5fd4962e Put the test fixture into spvtest namespace.
All test utility code should go into the spvtest namespace.
2015-10-26 12:55:33 -04:00
Andrew Woloszyn
815cb95247 Fix MSVC build for boolean opeartions on enums. 2015-10-26 12:55:33 -04:00
David Neto
cde47431bd Fix the Supported Features section. 2015-10-26 12:55:33 -04:00
David Neto
a570570e17 Readme: Assembler supports all of Rev31, for 32-bit code
Also say that we have fixed problems building with MSVC 2013.
Also document other recent changes.
2015-10-26 12:55:33 -04:00
David Neto
d1dd2fbd7c Put const back on const char* in test case structs 2015-10-26 12:55:33 -04:00
Andrew Woloszyn
f2d0775f1b A bunch of small fixes to build in MSVC2013.
Fixed an issue where some of the tests were testing
the wrong word with the wrong operation. (| != ||).

Coalesced the many versions of EnumCase into one.
Added a get_value() to EnumCase to convert to a uint32_t.

Replaces ASSERT_TRUE(pointer), with ASSERT_NE(nullptr, pointer),
so that we do not do implicit pointer->bool conversion.

Removed const from some test structs since gtest needs to be
able to swap them.
2015-10-26 12:55:33 -04:00
David Neto
ee1b3bb3bb Assembler support for image operands from Rev31
Rev32 and later add many more image operands, and
rearrange their values.
2015-10-26 12:55:33 -04:00
Lei Zhang
184c76dbaf Let EncodeAndDecodeSuccessfully remove preamble comments. 2015-10-26 12:55:33 -04:00
Lei Zhang
6d41581c93 Clean up code for encoding literal operands. 2015-10-26 12:55:33 -04:00
David Neto
3fca4cddee Remove SPV_OPERAND_TYPE_VARIABLE_MEMORY_ACCESS
If a memory mask operand is present, it is a mask.  The mask appears
only once, so just use SPV_OPERAND_TYPE_OPTIONAL_MEMORY_MASK.

The "variable literals" aspect comes into play as follows: if the
Aligned bit is set in the mask, then the parser will be made to
expect the alignment value as a literal number operand that follows
the mask.  That is done through mask operand expansion.
2015-10-26 12:55:33 -04:00
David Neto
5bf88fcc95 Assembler: mask expressions where 1 bits imply operands
Properly support a memory access mask with a combination
of bits, including the Aligned bit. When the Aligned bit is
set, the parser should expect an alignment value literal operand.
2015-10-26 12:55:33 -04:00
David Neto
fbf5cf4591 Document the syntax of mask expressions 2015-10-26 12:55:33 -04:00
David Neto
36b0c0f6b3 Assembler support for simple mask expressions
For example, support combining mask enums with "|",
such as "NotNaN|AllowRecip" for the fast math mode.

This is supported for mask values that don't modify the
expected operand pattern:
 - fast math mode
 - function control
 - loop control
 - selection control

TODO: disassembler support to print them as mask expressions.
2015-10-26 12:55:33 -04:00
David Neto
388c40d9c6 Generalize spvOperandTableNameLookup to take string length.
This is preparation for parsing mask expressions.
2015-10-26 12:55:33 -04:00
Dejan Mircevski
e3a19c0d63 Forbid !<integer> preceding or succeeding '='. 2015-10-26 12:55:33 -04:00
David Neto
b30a0c529b Assembler test for Dim, ImageFormat enums.
Adds SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT, and the
translation tables for its values from the spv::ImageFormat values.
2015-10-26 12:55:33 -04:00
David Neto
8382de2670 Document inability to use names from 3.12, 1.13
You can't use names from 3.12 Image Channel Order and
3.13 Image Channel Data Type since in the intstruction grammar,
they are only used as return values, but never named arguments
to instructions.
2015-10-26 12:55:33 -04:00
David Neto
f7ee0ca5da Use generalized EnumCase in AccessQualifier assembly tests
This is in preparation for coming tests that will also
use the templated EnumCase instead of making their
own structs.

Also reformat AccessQualifier test.
2015-10-26 12:55:33 -04:00
Dejan Mircevski
ba569fb1aa Handle IDs among !<integer> operands. 2015-10-26 12:55:33 -04:00
David Neto
5f33d31d89 Assembler test for SamplerAddressingMode, SamplerFilterMode
Uses OpConstantSampler instruction.
2015-10-26 12:55:33 -04:00
David Neto
5494dd4334 Assembler test for Storage Class enum values
This covers the storage classes in SPIR-V Rev31.  Rev32 has more.
2015-10-26 12:55:33 -04:00
Lei Zhang
b41d150b7f Support multiple word literal numbers as constants.
Add a new operand type SPV_OPERAND_TYPE_MULTIWORD_LITERAL_NUMBER
to represent those operands that can expand into multiple words.
Now only OpConstant and OpSpecConstant have such kind of operand.
2015-10-26 12:55:33 -04:00
David Neto
cebad036f7 Update CHANGES and Future Work 2015-10-26 12:55:33 -04:00
David Neto
fadbf6220e Assembler test for ExecutionScope, with OpGroupIAdd
Use spvOperandTypeStr to generalize the error message
for failure to parse an ID.
Extend spvOperandTypeStr to cover SPV_OPERAND_TYPE_EXECUTION_SCOPE.
2015-10-26 12:55:33 -04:00
David Neto
abe51c4142 Assembler test for OpTypePipe
Covers all AccessQualifier enums.

In Rev32, OpTypePipe no longer has a type argument.
Added TODOs for this.
2015-10-26 12:55:33 -04:00
David Neto
4a29131dcd Assembler test for single-valued Memory Access flag. 2015-10-26 12:55:33 -04:00
David Neto
f4fde6c60d Assembler test for single-valued FunctionControl mask
Fixed name of "Inline" enumerant.

Support for combinations of function control masks should come later.
2015-10-26 12:55:33 -04:00
Lei Zhang
97afd5c03c Remove useless variable. 2015-10-26 12:55:33 -04:00
David Neto
c0b32ecb54 Assembler test for single-valued LoopControl mask
Support for combining masks should come later.
2015-10-26 12:55:33 -04:00
David Neto
ad18c77ac9 Assembler test for single-valued SelectionControl mask
Support for combining masks should come later.
2015-10-26 12:55:33 -04:00
David Neto
d7aa15ff16 Clarify the syntax. Some named enumerants are unusable
You can't use a named enumerant if it's only meaningful
in an operand supplied as an ID to a target instruction.
The place where you'd use the name is something like an
OpConstant, but there's not enough context to bring those
names into scope, unless you're willing to tolerate
potential collisions.

Occurs for the names in:
- 3.25 Memory Semantics
- 3.27 Scope ID
- 3.29 Kernel Enqueue Flags
- 3.30 Kernel Profiling Info
2015-10-26 12:55:33 -04:00
Lei Zhang
41bf0733c6 Simplify code for handling literals in disassembler. 2015-10-26 12:55:33 -04:00
David Neto
2136ff70cc Move the syntax description into its own file 2015-10-26 12:55:33 -04:00
David Neto
c09932eb1e Add patch for generating opcode.inc syntax table. 2015-10-26 12:55:33 -04:00
Lei Zhang
a94701db39 Run clang-format. 2015-10-26 12:55:33 -04:00