aboutsummaryrefslogtreecommitdiffhomepage
AgeCommit message (Collapse)Author
2022-11-23Add OpDemoteToHelperInvocation, OpTerminateInvocationLiam
2022-11-23Add OpGroupNonUniformShuffle subgroup opBilly Laws
2022-10-22Add OpGroupNonUniformBroadcast subgroup opBilly Laws
2022-05-14cmake: Support using system SPIRV-HeadersAlexandre Bouvier
2022-04-28Include <utility> header for gcc 12voidanix
2021-07-27sirit: Add TypeSInt/TypeUInt helpersLioncash
Provides shorthands for specific signedness, so that usage code doesn't need to explicitly use raw booleans. TypeUInt(32), is easier to gloss than TypeInt(32, false), especially for those not familiar with the API.
2021-04-17sirit: Remove unnecessary std::move in OpLabelLioncash
std::move on a std::string_view doesn't do anything a regular copy wouldn't.
2021-04-17sirit: substraction -> subtraction typoLioncash
2021-04-17sirit: Resolve -Wdocumentation warningsLioncash
Amends some -Wdocumentation warnings with clang.
2021-04-17Add Derivatives Instructions.FernandoS27
2021-04-12Add OpEmitStreamVertex and OpEndStreamPrimitiveReinUsesLisp
2021-04-11Use std::nullopt when possibleReinUsesLisp
2021-04-11Remove forward references and add phi node patchingReinUsesLisp
The previous API for forward declarations broke when more than one definition was done. Forward references on instructions that are not labels were only needed for phi nodes, so it has been replaced with a deferred phi node instruction and a method to patch these after everything has been defined.
2021-03-29Add OpUnreachableReinUsesLisp
2021-03-28Add OpFunctionParameterReinUsesLisp
2021-03-19Add DemoteToHelperInvocation supportReinUsesLisp
2021-03-08Add support for sparse texture instructionsReinUsesLisp
2021-02-24Add support for self-referencing phi nodesReinUsesLisp
2021-02-20Update SPIRV-HeadersReinUsesLisp
2021-02-19Assert when an OpId has an invalid result typeReinUsesLisp
2021-02-15Assert operand's id is not zeroReinUsesLisp
2021-02-14Add support for forward declarationsReinUsesLisp
2021-02-12Add Phi supportReinUsesLisp
2021-02-07Fix global variables being added in codeReinUsesLisp
2021-02-07Add overload for decorating with enumsReinUsesLisp
Skip an explicit cast on the caller, allowing code like: Decorate(some_op, spv::Decoration::BuiltIn, spv::BuiltIn::WorkgroupId)
2020-11-26Add support for `OpGroupNonUniform{All,Any,AllEqual,Ballot}`, and fix ↵comex
`OpGroupNonUniformShuffleXor`. These Vulkan 1.1 operations can be used in place of `OpSubgroup{All,Any,AllEqual,Ballot}KHR`, among other things. For `OpGroupNonUniformShuffleXor`, which was already implemented, turns out the scope argument needs to be encoded not as an immediate, but as an id that points to a constant integer.
2020-11-26Change `count` to `string_words`comex
Co-authored-by: Rodrigo Locatti <[email protected]>
2020-11-26Fix OpExtension.comex
There were two issues: - The word0 was omitted entirely. - The word count didn't account for the nul terminator.
2020-11-25Use `requires` clauses to better disambiguate variadic and non-variadic ↵comex
overloads Suppose you try to call, say, `AddEntryPoint` with a `std::vector<Id>` as the `interfaces` argument - something that yuzu does. This can match the non-variadic overload, since `std::vector<Id>` is implicitly convertible to the argument type `std::span<const Id>`. But it can also match the variadic overload, and the compiler sees that as a 'better' match because it doesn't require implicit conversion. So it picks that overload and promptly errors out trying to convert `std::vector<Id>` to `Id`. To make the compiler pick the right overload, you would have to explicitly convert to `std::span<const Id>`, which is annoyingly verbose. To avoid this, add `requires` clauses to all variadic convenience overloads, requiring each of the variadic arguments to be convertible to the corresponding element type. If you pass a vector/array/etc., this rules out the variadic overload as a candidate, and the call goes through with the non-variadic overload. Also, use slightly different code to forward to the non-variadic overloads, that works even if the arguments need to be converted. Note: I used this in a WIP branch updating yuzu to the latest version of sirit. Note 2: I tried to run clang-format on this, but it mangled the requires clauses pretty horribly, so I didn't accept its changes. I googled it, and apparently clang-format doesn't properly support concepts yet...
2020-11-25Fix Reserve count for trinary ops.comex
2020-08-10Fix build errors on gccReinUsesLisp
2020-08-01Stream SPIR-V instructions directly to a binaryReinUsesLisp
Before this commit sirit generated a stream of tokens that would then be inserted to the final SPIR-V binary. This design was carried from the initial design of manually inserting opcodes into the code. Now that all instructions but labels are inserted when their respective function is called, the old design can be dropped in favor of generating a valid stream of SPIR-V opcodes. The API for variables is broken, but adopting the new one is trivial. Instead of calling OpVariable and then adding a global or local variable, OpVariable was removed and global or local variables are generated when they are called. Avoiding duplicates is now done with an std::unordered_set instead of using a linear search jumping through vtables.
2020-07-29Upgrade to C++20 and use std::spanReinUsesLisp
2020-06-02memory: Add OpImageTexelPointerReinUsesLisp
2020-05-15barrier: Add OpControlBarrierReinUsesLisp
2020-04-25arithmetic: Add IAddCarryReinUsesLisp
2020-01-19atomic: Fix typoReinUsesLisp
2020-01-19atomic: Add memory atomic instructionsReinUsesLisp
2019-12-15image: Remove assumed lod in image samplesReinUsesLisp
This commits breaks the API. Depth image samples assumed a lod operand, this made using Grad samples clumsy to use.
2019-12-11op: Silence -Wshadow warningReinUsesLisp
2019-12-11op: Fix implicit conversion from char* to bool warningReinUsesLisp
2019-12-09Add OpMemoryBarrierReinUsesLisp
2019-11-27Enable -Wshadow and silence warningsReinUsesLisp
2019-11-27cmake: Always treat warnings as errorsReinUsesLisp
Enable cast warnings in gcc and clang and always treat warnings as errors. GetWordCount now returns std::size_t for simplicity and the word count is asserted and casted in WordCount (now called CalculateTotalWords. Silence warnings.
2019-11-10Add OpSubgroupBallotKHR and vote instructionsReinUsesLisp
2019-11-03Add OpSubgroupReadInvocationKHRReinUsesLisp
2019-11-02Add OpGroupNonUniformShuffleXorReinUsesLisp
2019-11-01Add EmitVertex and EndPrimitiveReinUsesLisp
2019-11-01operand: Use pure virtual functionsReinUsesLisp
2019-11-01operand: Move operand_type initialization to constructorReinUsesLisp