2
1
Fork 0
mirror of https://github.com/yuzu-emu/yuzu.git synced 2024-07-04 23:31:19 +01:00
yuzu/src
ReinUsesLisp 420cc13248 renderer_opengl: Add assembly program code paths
Add code required to use OpenGL assembly programs based on
NV_gpu_program5. Decompilation for ARB programs is intended to be added
in a follow up commit. This does **not** include ARB decompilation and
it's not in an usable state.

The intention behind assembly programs is to reduce shader stutter
significantly on drivers supporting NV_gpu_program5 (and other required
extensions). Currently only Nvidia's proprietary driver supports these
extensions.

Add a UI option hidden for now to avoid people enabling this option
accidentally.

This code path has some limitations that OpenGL compatibility doesn't
have:
- NV_shader_storage_buffer_object is limited to 16 entries for a single
OpenGL context state (I don't know if this is an intended limitation, an
specification issue or I am missing something). Currently causes issues
on The Legend of Zelda: Link's Awakening.
- NV_parameter_buffer_object can't bind buffers using an offset
different to zero. The used workaround is to copy to a temporary buffer
(this doesn't happen often so it's not an issue).

On the other hand, it has the following advantages:
- Shaders build a lot faster.
- We have control over how floating point rounding is done over
individual instructions (SPIR-V on Vulkan can't do this).
- Operations on shared memory can be unsigned and signed.
- Transform feedbacks are dynamic state (not yet implemented).
- Parameter buffers (uniform buffers) are per stage, matching NVN and
hardware's behavior.
- The API to bind and create assembly programs makes sense, unlike
ARB_separate_shader_objects.
2020-05-19 18:00:04 -03:00
..
audio_core fix logic error & scale sample volume based on voice volume 2020-05-11 12:56:15 -04:00
common time_zone: Use std::chrono::seconds for strong typing. 2020-05-12 18:44:07 -04:00
core yuzu: Add frontend settings for assembly shaders 2020-05-19 17:53:17 -03:00
input_common input_common: fix build when SDL2 is disabled 2020-05-02 21:47:17 +02:00
tests Merge pull request #3697 from lioncash/declarations 2020-04-23 02:18:52 -04:00
video_core renderer_opengl: Add assembly program code paths 2020-05-19 18:00:04 -03:00
web_service Replace externals with Conan (#3735) 2020-05-08 17:09:29 -04:00
yuzu yuzu: Add frontend settings for assembly shaders 2020-05-19 17:53:17 -03:00
yuzu_cmd yuzu: Add frontend settings for assembly shaders 2020-05-19 17:53:17 -03:00
yuzu_tester GPU: Add Fast GPU Time Option. 2020-04-23 08:52:57 -04:00
.clang-format
CMakeLists.txt