- Oct 15, 2019
-
-
Lioncash authored
Allows usages of the constructor to avoid an unnecessary copy.
-
- Sep 21, 2019
-
-
ReinUsesLisp authored
In the process remove implementation of SUATOM.MIN and SUATOM.MAX as these require a distinction between U32 and S32. These have to be implemented with imageCompSwap loop.
-
ReinUsesLisp authored
* Implement SULD as float. * Remove conditional declaration of GL_ARB_shader_viewport_layer_array.
-
- Sep 17, 2019
-
-
ReinUsesLisp authored
-
- Sep 10, 2019
-
-
ReinUsesLisp authored
-
- Sep 06, 2019
-
-
ReinUsesLisp authored
-
- Sep 05, 2019
-
-
ReinUsesLisp authored
-
ReinUsesLisp authored
This instruction writes to a memory buffer shared with threads within the same work group. It is known as "shared" memory in GLSL.
-
- Aug 21, 2019
-
-
ReinUsesLisp authored
Implement VOTE using Nvidia's intrinsics. Documentation about these can be found here https://developer.nvidia.com/reading-between-threads-shader-intrinsics Instead of using portable ARB instructions I opted to use Nvidia intrinsics because these are the closest we have to how Tegra X1 hardware renders. To stub VOTE on non-Nvidia drivers (including nouveau) this commit simulates a GPU with a warp size of one, returning what is meaningful for the instruction being emulated: * anyThreadNV(value) -> value * allThreadsNV(value) -> value * allThreadsEqualNV(value) -> true ballotARB, also known as "uint64_t(activeThreadsNV())", emits VOTE.ANY Rd, PT, PT; on nouveau's compiler. This doesn't match exactly to Nvidia's code VOTE.ALL Rd, PT, PT; Which is emulated with activeThreadsNV() by this commit. In theory this shouldn't really matter since .ANY, .ALL and .EQ affect the predicates (set to PT on those cases) and not the registers.
-
- Jul 20, 2019
-
-
Fernando Sahmkow authored
This commit takes care of implementing the F16 Variants of the conversion instructions and makes sure conversions are done.
-
ReinUsesLisp authored
-
- Jul 09, 2019
-
-
Fernando Sahmkow authored
-
Fernando Sahmkow authored
-
- Jun 21, 2019
-
-
Fernando Sahmkow authored
-
ReinUsesLisp authored
-
ReinUsesLisp authored
-
- Jun 07, 2019
-
-
ReinUsesLisp authored
Hardware testing revealed that SSY and PBK push to a different stack, allowing code like this: SSY label1; PBK label2; SYNC; label1: PBK; label2: EXIT;
-
- Jun 06, 2019
-
-
ReinUsesLisp authored
Reflect std::shared_ptr nature of Node on initializers and remove constant members in nodes. Add some commentaries.
-
ReinUsesLisp authored
Analysis passes do not have a good reason to depend on shader_ir.h to work on top of nodes. This splits node-related declarations to their own file and leaves the IR in shader_ir.h
-
- Jun 05, 2019
-
-
ReinUsesLisp authored
Instead of having a vector of unique_ptr stored in a vector and returning star pointers to this, use shared_ptr. While changing initialization code, move it to a separate file when possible. This is a first step to allow code analysis and node generation beyond the ShaderIR class.
-
- May 23, 2019
-
-
Lioncash authored
This allows for forming comment nodes without making unnecessary copies of the std::string instance. e.g. previously: Comment(fmt::format("Base address is c[0x{:x}][0x{:x}]", cbuf->GetIndex(), cbuf_offset)); Would result in a copy of the string being created, as CommentNode() takes a std::string by value (a const ref passed to a value parameter results in a copy). Now, only one instance of the string is ever moved around. (fmt::format returns a std::string, and since it's returned from a function by value, this is a prvalue (which can be treated like an rvalue), so it's moved into Comment's string parameter), we then move it into the CommentNode constructor, which then moves the string into its member variable).
-
- May 21, 2019
-
-
ReinUsesLisp authored
-
- May 20, 2019
-
-
ReinUsesLisp authored
-
- May 19, 2019
-
-
Lioncash authored
constexpr internally links by default, so the inline specifier is unnecessary.
-
Lioncash authored
Many of these constructors don't even need to be templated. The only ones that need to be templated are the ones that actually make use of the parameter pack. Even then, since std::vector accepts an initializer list, we can supply the parameter pack directly to it instead of creating our own copy of the list, then copying it again into the std::vector.
-
Lioncash authored
shader/shader_ir: Remove unnecessary template parameter packs from Operation() overloads where applicable These overloads don't actually make use of the parameter pack, so they can be turned into regular non-template function overloads.
-
Lioncash authored
These don't actually modify instance state, so they can be marked as const member functions
-
Lioncash authored
Given the class contains quite a lot of non-trivial types, place the constructor and destructor within the cpp file to avoid inlining construction and destruction code everywhere the class is used.
-
- May 03, 2019
-
-
ReinUsesLisp authored
-
ReinUsesLisp authored
-
ReinUsesLisp authored
-
ReinUsesLisp authored
-
ReinUsesLisp authored
-
- Apr 26, 2019
-
-
ReinUsesLisp authored
-
ReinUsesLisp authored
-
- Apr 16, 2019
-
-
ReinUsesLisp authored
Operations done before the main half float operation (like HAdd) were managing a packed value instead of the unpacked one. Adding an unpacked operation allows us to drop the per-operand MetaHalfArithmetic entry, simplifying the code overall.
-
ReinUsesLisp authored
-
ReinUsesLisp authored
-
- Apr 14, 2019
-
-
ReinUsesLisp authored
-
- Apr 08, 2019
-
-
Fernando Sahmkow authored
-