aboutsummaryrefslogtreecommitdiffhomepage
path: root/include
AgeCommit message (Collapse)Author
2023-05-09Support variadic arguments for OpPhiGPUCode
2023-05-09Add missing GLSL instructionsGPUCode
2023-01-05Add OpGroupNonUniformElect, OpGroupNonUniformBroadcastFirstBilly Laws
2022-11-23Add OpDemoteToHelperInvocation, OpTerminateInvocationLiam
2022-11-23Add OpGroupNonUniformShuffle subgroup opBilly Laws
2022-10-22Add OpGroupNonUniformBroadcast subgroup opBilly Laws
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-14Add support for forward declarationsReinUsesLisp
2021-02-12Add Phi supportReinUsesLisp
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-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-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: 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-09Add OpMemoryBarrierReinUsesLisp
2019-11-10Add OpSubgroupBallotKHR and vote instructionsReinUsesLisp
2019-11-03Add OpSubgroupReadInvocationKHRReinUsesLisp
2019-11-02Add OpGroupNonUniformShuffleXorReinUsesLisp
2019-11-01Add EmitVertex and EndPrimitiveReinUsesLisp
2019-10-18Remove Emit entry in favor of auto-emitting codeReinUsesLisp
All instructions but OpVariable and OpLabel are automatically emitted. These functions have to call AddLocalVariable/AddGlobalVariable or AddLabel respectively.
2019-10-18Assemble uint32_t instead of uint8_tReinUsesLisp
Vulkan receives SPIR-V modules with a uint32_t alignment. Returning uint8_t forced users to invoke undefined behaviour (reinterpret_cast) or copy.
2019-09-09Revert "operand: Implement operand hashing and use hashed set for declarations"ReinUsesLisp
This reverts commit 1e665afa361d0c91b2b3a226a1c537d0b504ca11.
2019-09-09Revert "Fix declarations hashing"ReinUsesLisp
This reverts commit bb6a3421d27b19d8caa203cca96f47210a670070.
2019-09-09Fix declarations hashingReinUsesLisp
2019-09-09Add OpAny and OpAllReinUsesLisp
2019-09-09Add OpVectorExtractDynamic and OpVectorInsertDynamicReinUsesLisp
2019-07-14Relicense to The BSD 3-clause licenseReinUsesLisp
2019-06-08operand: Implement operand hashing and use hashed set for declarationsReinUsesLisp
Instead of manually searching each element in the declarations vector, use an unordered_set to emplace new declarations avoiding repetition.
2019-03-14CMakeLists: Apply compilation flags to the sirit targetLioncash
Previously this wasn't utilizing any of the compiler flags, meaning it wasn't applying any of the specified warnings. Since applying the warnings to the target, this uncovered a few warning cases, such as shadowing class variables on MSVC, etc, which have been fixed.
2019-03-14Pass std::string by value where applicable.Lioncash
By taking the std::string by value in the constructor, this allows for certain situations where copies can be elided entirely (when moving an instance into the constructor) e.g. std::string var = ... ... ... = LiteralString(std::move(var)) // Or whatever other initialization // is done. No copy will be done in this case, the move transfers it into the constructor, and then the move within the initializer list transfers it into the member variable. tl;dr: This allows the calling code to potentially construct less std::string instances by allowing moving into the parameters themselves.
2019-03-14sirit: Add missing reference argument specifier for OpLabelLioncash
2019-03-13Remove Op prefix on Type instructionsReinUsesLisp
2019-03-11Add missing instruction commentariesReinUsesLisp