yuzu/src/video_core/renderer_vulkan
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
..
declarations.h renderer_vulkan: Add declarations file 2019-02-12 18:33:02 -03:00
maxwell_to_vk.cpp maxwell_to_gl: Use GL_CLAMP to emulate Clamp wrap mode 2019-05-30 13:21:01 -03:00
maxwell_to_vk.h maxwell_to_vk: Initial implementation 2019-03-04 04:06:05 -03:00
vk_buffer_cache.cpp vk_scheduler: Drop execution context in favor of views 2019-07-07 03:30:22 -03:00
vk_buffer_cache.h vk_scheduler: Drop execution context in favor of views 2019-07-07 03:30:22 -03:00
vk_device.cpp vk_device: Let formats array type be deduced 2019-05-26 03:09:06 -03:00
vk_device.h vk_device: Enable features when available and misc changes 2019-05-26 01:41:34 -03:00
vk_memory_manager.cpp vk_memory_manager: Reorder constructor initializer list in terms of member declaration order 2019-02-27 11:08:19 -05:00
vk_memory_manager.h vk_memory_manager: Implement memory manager 2019-02-19 03:42:28 -03:00
vk_resource_manager.cpp video_core: Add missing override specifiers 2019-03-27 12:24:52 -04:00
vk_resource_manager.h video_core: Add missing override specifiers 2019-03-27 12:24:52 -04:00
vk_sampler_cache.cpp video_core: Abstract vk_sampler_cache into a templated class 2019-04-02 15:54:11 -03:00
vk_sampler_cache.h vk_sampler_cache: Remove unused includes 2019-07-07 13:40:36 -04:00
vk_scheduler.cpp vk_scheduler: Drop execution context in favor of views 2019-07-07 03:30:22 -03:00
vk_scheduler.h vk_scheduler: Drop execution context in favor of views 2019-07-07 03:30:22 -03:00
vk_shader_decompiler.cpp shader_ir: Implement VOTE 2019-08-21 14:50:38 -03:00
vk_shader_decompiler.h vk_shader_decompiler: Misc fixes 2019-05-26 01:48:04 -03:00
vk_stream_buffer.cpp vk_scheduler: Drop execution context in favor of views 2019-07-07 03:30:22 -03:00
vk_stream_buffer.h vk_scheduler: Drop execution context in favor of views 2019-07-07 03:30:22 -03:00
vk_swapchain.cpp vk_swapchain: Implement a swapchain manager 2019-03-29 00:00:51 -03:00
vk_swapchain.h vk_swapchain: Implement a swapchain manager 2019-03-29 00:00:51 -03:00