1
0
Fork 0
forked from suyu/suyu
suyu/src/common
ReinUsesLisp 4e35177e23 shader_ir: Implement VOTE
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-08-21 14:50:38 -03:00
..
logging general: Use deducation guides for std::lock_guard and std::unique_lock 2019-04-01 12:53:47 -04:00
x64 common: Remove dependency on xbyak 2018-11-21 03:43:41 -05:00
alignment.h Common/Alignment: Add noexcept where required. 2019-07-19 21:49:54 -04:00
assert.h Permit a Null Shader in case of a bad host_ptr. 2019-04-07 07:52:01 -04:00
binary_find.h texture_cache: Address Feedback 2019-07-05 09:46:53 -04:00
bit_field.h common/bit_util: Fix bad merge duplicating the copy constructor 2019-03-20 23:48:37 -04:00
bit_util.h texture_cache: Optimize GetMipBlockHeight and GetMipBlockDepth 2019-06-20 21:36:12 -03:00
cityhash.cpp Port #4182 from Citra: "Prefix all size_t with std::" 2018-09-15 15:21:06 +02:00
cityhash.h Port #4182 from Citra: "Prefix all size_t with std::" 2018-09-15 15:21:06 +02:00
CMakeLists.txt shader_ir: Implement VOTE 2019-08-21 14:50:38 -03:00
color.h common/vector_math: Move Vec[x] types into the Common namespace 2019-02-26 22:38:36 -05:00
common_funcs.h texture_cache: Address Feedback 2019-07-05 09:46:53 -04:00
common_paths.h file_util: Add shader directory 2019-02-06 22:20:57 -03:00
common_types.h gpu: Move GPUVAddr definition to common_types. 2019-03-20 22:36:02 -04:00
detached_tasks.cpp general: Use deducation guides for std::lock_guard and std::unique_lock 2019-04-01 12:53:47 -04:00
detached_tasks.h Review comments - part 5 2018-10-02 16:04:10 +02:00
file_util.cpp common/file_util: Remove unnecessary return at end of void StripTailDirSlashes() 2019-05-23 14:33:29 -04:00
file_util.h common/file_util: Make GetCurrentDir() return a std::optional 2019-05-23 14:24:13 -04:00
hash.h Port #4182 from Citra: "Prefix all size_t with std::" 2018-09-15 15:21:06 +02:00
hex_util.cpp common/hex_util: Combine HexVectorToString() and HexArrayToString() 2019-06-12 17:54:05 -04:00
hex_util.h common/hex_util: Reserve std::string memory ahead of time 2019-06-12 17:54:11 -04:00
lz4_compression.cpp common/lz4_compression: Remove #pragma once directive from the cpp file 2019-04-03 22:07:04 -04:00
lz4_compression.h common/{lz4_compression, zstd_compression}: Add missing header guards 2019-04-15 13:00:08 -04:00
math_util.h common/math_util: Provide a template deduction guide for Common::Rectangle 2019-05-31 04:44:02 -03:00
memory_hook.cpp core: Move PageTable struct into Common. 2019-03-16 22:05:40 -04:00
memory_hook.h core: Move PageTable struct into Common. 2019-03-16 22:05:40 -04:00
microprofile.cpp Integrate the MicroProfile profiling library 2015-08-24 22:16:28 -03:00
microprofile.h Sources: Run clang-format on everything. 2016-09-18 09:38:01 +09:00
microprofileui.h Common: Remove section measurement from profiler (#1731) 2016-04-29 00:07:10 -07:00
misc.cpp Port #4182 from Citra: "Prefix all size_t with std::" 2018-09-15 15:21:06 +02:00
multi_level_queue.h common/multi_level_queue: Silence truncation warning in iterator operator++ 2019-04-05 15:35:46 -04:00
page_table.cpp gpu: Rewrite virtual memory manager using PageTable. 2019-03-20 22:36:02 -04:00
page_table.h gpu: Rewrite virtual memory manager using PageTable. 2019-03-20 22:36:02 -04:00
param_package.cpp citra_qt/configuration: misc input tab improvements 2018-10-06 15:43:49 +02:00
param_package.h citra_qt/configuration: misc input tab improvements 2018-10-06 15:43:49 +02:00
quaternion.h common/vector_math: Move Vec[x] types into the Common namespace 2019-02-26 22:38:36 -05:00
ring_buffer.h ring_buffer: Use std::atomic_size_t in a static assert 2018-09-18 23:36:04 -04:00
scm_rev.cpp.in gl_shader_disk_cache: Invalidate shader cache changes with CMake hash 2019-02-06 22:20:57 -03:00
scm_rev.h gl_shader_disk_cache: Invalidate shader cache changes with CMake hash 2019-02-06 22:20:57 -03:00
scope_exit.h common/scope_exit: Replace std::move with std::forward in ScopeExit() 2019-04-11 20:01:33 -04:00
string_util.cpp am: Deglobalize software keyboard applet 2018-11-18 10:53:47 -05:00
string_util.h am: Deglobalize software keyboard applet 2018-11-18 10:53:47 -05:00
swap.h common/swap: Improve codegen of the default swap fallbacks 2019-04-12 00:07:39 -04:00
telemetry.cpp common/telemetry: Migrate core-independent info gathering to common 2018-08-14 18:57:46 -04:00
telemetry.h compatdb: Use a seperate endpoint for testcase submission 2018-10-28 13:23:02 +01:00
thread.cpp common/thread: Remove unused functions 2019-03-29 13:26:21 -04:00
thread.h general: Use deducation guides for std::lock_guard and std::unique_lock 2019-04-01 12:53:47 -04:00
thread_queue_list.h common/thread_queue_list: Remove unnecessary dependency on boost 2019-03-16 05:01:39 -04:00
threadsafe_queue.h general: Use deducation guides for std::lock_guard and std::unique_lock 2019-04-01 12:53:47 -04:00
timer.cpp Port #3972 from Citra: "common/timer: use std::chrono, avoid platform-dependent code" 2018-07-29 14:58:30 +02:00
timer.h Port #3972 from Citra: "common/timer: use std::chrono, avoid platform-dependent code" 2018-07-29 14:58:30 +02:00
uint128.cpp common/uint128: Add missing top-file source text 2019-03-20 22:38:25 -04:00
uint128.h common/uint128: Add missing header guard 2019-03-20 22:39:00 -04:00
uuid.cpp mii_manager: Cleanup and optimization 2019-04-25 08:07:57 -04:00
uuid.h mii: Implement Delete and Destroy file 2019-04-25 08:07:57 -04:00
vector_math.h common/vector_math: Move Vec[x] types into the Common namespace 2019-02-26 22:38:36 -05:00
web_result.h web_backend: Make Client use the PImpl idiom 2018-10-10 22:29:35 -04:00
zstd_compression.cpp common/zstd_compression: Remove #pragma once directive from source file 2019-05-04 01:54:29 -04:00
zstd_compression.h common/{lz4_compression, zstd_compression}: Add missing header guards 2019-04-15 13:00:08 -04:00