aboutsummaryrefslogtreecommitdiff
path: root/src/video_core/shader/node.h
AgeCommit message (Collapse)Author
2020-05-27shader/other: Implement MEMBAR.CTSReinUsesLisp
This silences an assertion we were hitting and uses workgroup memory barriers when the game requests it.
2020-05-26Merge pull request #3981 from ReinUsesLisp/barbunnei
shader/other: Implement BAR.SYNC 0x0
2020-05-21shader/other: Implement BAR.SYNC 0x0ReinUsesLisp
Trivially implement this particular case of BAR. Unless games use OpenCL or CUDA barriers, we shouldn't hit any other case here.
2020-05-21shader/other: Implement thread comparisons (NV_shader_thread_group)ReinUsesLisp
Hardware S2R special registers match gl_Thread*MaskNV. We can trivially implement these using Nvidia's extension on OpenGL or naively stubbing them with the ARB instructions to match. This might cause issues if the host device warp size doesn't match Nvidia's. That said, this is unlikely on proper shaders. Refer to the attached url for more documentation about these flags. https://www.khronos.org/registry/OpenGL/extensions/NV/NV_shader_thread_group.txt
2020-05-09shader_ir: Separate float-point comparisons in ordered and unorderedReinUsesLisp
This allows us to use native SPIR-V instructions without having to manually check for NAN.
2020-05-02Merge pull request #3693 from ReinUsesLisp/clean-samplersbunnei
shader/texture: Support multiple unknown sampler properties
2020-04-25shader/arithmetic_integer: Implement CC for IADDReinUsesLisp
2020-04-23shader_ir: Turn classes into data structuresReinUsesLisp
2020-04-06shader/memory: Implement RED.E.ADDReinUsesLisp
Implements a reduction operation. It's an atomic operation that doesn't return a value. This commit introduces another primitive because some shading languages might have a primitive for reduction operations.
2020-03-30shader: node - update correct commentNguyen Dac Nam
2020-03-30shader_decode: add Atomic op for common usageNguyen Dac Nam
2020-02-24shader: Simplify indexed sampler usagesReinUsesLisp
2020-02-01shader: Remove curly braces initializers on shared pointersReinUsesLisp
2020-02-01Merge pull request #3282 from FernandoS27/indexed-samplersbunnei
Partially implement Indexed samplers in general and specific code in GLSL
2020-01-26shader/memory: Implement ATOM.ADDReinUsesLisp
ATOM operates atomically on global memory. For now only add ATOM.ADD since that's what was found in commercial games. This asserts for ATOM.ADD.S32 (handling the others as unimplemented), although ATOM.ADD.U32 shouldn't be any different. This change forces us to change the default type on SPIR-V storage buffers from float to uint. We could also alias the buffers, but it's simpler for now to just use uint. While we are at it, abstract the code to avoid repetition.
2020-01-25Shader_IR: Address feedback.Fernando Sahmkow
2020-01-24Shader_IR: Propagate bindless index into the GL compiler.Fernando Sahmkow
2020-01-24Shader_IR: Implement Injectable Custom Variables to the IR.Fernando Sahmkow
2020-01-24Shader_IR: deduce size of indexed samplersFernando Sahmkow
2020-01-24Shader_IR: Implement initial code for tracking indexed samplers.Fernando Sahmkow
2020-01-16shader/memory: Implement ATOMS.ADD.U32ReinUsesLisp
2020-01-04Shader_IR: Address FeedbackFernando Sahmkow
2019-12-30Shader_IR: add the ability to amend code in the shader ir.Fernando Sahmkow
This commit introduces a mechanism by which shader IR code can be amended and extended. This useful for track algorithms where certain information can derived from before the track such as indexes to array samplers.
2019-12-16shader/texture: Implement TLD4.PTPReinUsesLisp
2019-12-10shader: Implement MEMBAR.GLReinUsesLisp
Implement using memoryBarrier in GLSL and OpMemoryBarrier on SPIR-V.
2019-12-09shader_ir/other: Implement S2R InvocationIdReinUsesLisp
2019-12-09shader_ir/memory: Implement patch storesReinUsesLisp
2019-12-06Merge pull request #3109 from FernandoS27/new-instrbunnei
Implement FLO & TXD Instructions on GPU Shaders
2019-11-22shader/texture: Deduce texture buffers from lockerReinUsesLisp
Instead of specializing shaders to separate texture buffers from 1D textures, use the locker to deduce them while they are being decoded.
2019-11-14Shader_IR: Implement TXD instruction.Fernando Sahmkow
2019-11-14Shader_IR: Implement FLO instruction.Fernando Sahmkow
2019-11-07shader_ir/warp: Implement FSWZADDReinUsesLisp
2019-11-07gl_shader_decompiler: Reimplement shuffles with platform agnostic intrinsicsReinUsesLisp
2019-10-29shader/node: Unpack bindless texture encodingReinUsesLisp
Bindless textures were using u64 to pack the buffer and offset from where they come from. Drop this in favor of separated entries in the struct. Remove the usage of std::set in favor of std::list (it's not std::vector to avoid reference invalidations) for samplers and images.
2019-10-15shader/node: std::move Meta instance within OperationNode constructorLioncash
Allows usages of the constructor to avoid an unnecessary copy.
2019-09-21gl_shader_decompiler: Use uint for images and fix SUATOMReinUsesLisp
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.
2019-09-21shader/image: Implement SULD and remove irrelevant codeReinUsesLisp
* Implement SULD as float. * Remove conditional declaration of GL_ARB_shader_viewport_layer_array.
2019-09-20Merge pull request #2855 from ReinUsesLisp/shflbunnei
shader_ir/warp: Implement SHFL for Nvidia devices
2019-09-18Merge pull request #2784 from ReinUsesLisp/smembunnei
shader_ir: Implement shared memory
2019-09-17shader_ir/warp: Implement SHFLReinUsesLisp
2019-09-10shader/image: Implement SUATOM and fix SUSTReinUsesLisp
2019-09-05gl_shader_decompiler: Keep track of written images and mark them as modifiedReinUsesLisp
2019-09-05kepler_compute: Implement texture queriesReinUsesLisp
2019-09-05shader_ir: Implement ST_SReinUsesLisp
This instruction writes to a memory buffer shared with threads within the same work group. It is known as "shared" memory in GLSL.
2019-08-21shader_ir: Implement VOTEReinUsesLisp
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.
2019-07-20Shader_Ir: Implement F16 Variants of F2F, F2I, I2F.Fernando Sahmkow
This commit takes care of implementing the F16 Variants of the conversion instructions and makes sure conversions are done.
2019-07-19shader/half_set_predicate: Fix HSETP2 implementationReinUsesLisp
2019-07-09shader_ir: Unify blocks in decompiled shaders.Fernando Sahmkow
2019-07-09shader_ir: Implement BRX & BRA.CCFernando Sahmkow
2019-06-20texture_cache: Style and CorrectionsFernando Sahmkow