Граф коммитов

3502 Коммитов

Автор SHA1 Сообщение Дата
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
David Neto e8e3712c3b Assembler test for OpExecutionMode 2015-10-26 12:55:33 -04:00
David Neto f6498bfc73 Assembler test for OpEntryPoint 2015-10-26 12:55:33 -04:00
Dejan Mircevski 58fc88e2ee Simplify format indication in CompileSuccesfully(). 2015-10-26 12:55:33 -04:00
Lei Zhang 4005670363 Limit the use of spvCheck and spvCheckReturn to validator.
spvCheck is indeed just an if-statement. Defining such a macro
doesn't help much.
2015-10-26 12:55:33 -04:00
David Neto 7114ffea06 Update readme with latest news. 2015-10-26 12:55:33 -04:00
Lei Zhang 4e092d3ac3 Move bitwisecast.h to source/ and add include guard. 2015-10-26 12:55:33 -04:00
David Neto a48678ab92 Fix an infinite loop during message generation.
Rename getWord to spvGetWord and unit test it.
2015-10-26 12:55:33 -04:00