summaryrefslogtreecommitdiffstats
path: root/src/video_core/shader/decode/warp.cpp (follow)
Commit message (Collapse)AuthorAgeFilesLines
* video_core/shader: Resolve instances of variable shadowingLioncash2019-10-241-3/+4
| | | | Silences a few -Wshadow warnings.
* shader_ir/warp: Implement SHFLReinUsesLisp2019-09-171-0/+47
|
* shader_ir: Implement VOTEReinUsesLisp2019-08-211-0/+55
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.