yuzu/src/video_core/renderer_opengl
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
..
gl_buffer_cache.cpp {maxwell_3d,buffer_cache}: Implement memory barriers using 3D registers 2020-04-28 02:18:12 -03:00
gl_buffer_cache.h {maxwell_3d,buffer_cache}: Implement memory barriers using 3D registers 2020-04-28 02:18:12 -03:00
gl_device.cpp renderer_opengl: Add assembly program code paths 2020-05-19 18:00:04 -03:00
gl_device.h renderer_opengl: Add assembly program code paths 2020-05-19 18:00:04 -03:00
gl_fence_manager.cpp GL_Fence_Manager: use GL_TIMEOUT_IGNORED instead of a loop, 2020-04-22 20:34:32 -04:00
gl_fence_manager.h Address Feedback. 2020-04-22 11:36:24 -04:00
gl_framebuffer_cache.cpp gl_state: Remove completely 2020-02-28 17:56:35 -03:00
gl_framebuffer_cache.h gl_state: Remove completely 2020-02-28 17:56:35 -03:00
gl_query_cache.cpp gl_query_cache: Resolve use-after-move in CachedQuery move assignment operator 2020-04-15 22:20:06 -04:00
gl_query_cache.h query_cache: Address feedback 2020-02-14 17:38:27 -03:00
gl_rasterizer.cpp renderer_opengl: Add assembly program code paths 2020-05-19 18:00:04 -03:00
gl_rasterizer.h renderer_opengl: Add assembly program code paths 2020-05-19 18:00:04 -03:00
gl_resource_manager.cpp renderer_opengl: Add assembly program code paths 2020-05-19 18:00:04 -03:00
gl_resource_manager.h renderer_opengl: Add assembly program code paths 2020-05-19 18:00:04 -03:00
gl_sampler_cache.cpp Create an "Advanced" tab in the graphics configuration tab and add anisotropic filtering levels. 2020-02-27 21:34:00 -05:00
gl_sampler_cache.h video_core: Add missing override specifiers 2019-07-07 13:38:39 -04:00
gl_shader_cache.cpp renderer_opengl: Add assembly program code paths 2020-05-19 18:00:04 -03:00
gl_shader_cache.h renderer_opengl: Add assembly program code paths 2020-05-19 18:00:04 -03:00
gl_shader_decompiler.cpp gl_shader_decompiler: Properly emulate NaN behaviour on NE 2020-05-10 02:59:33 -03:00
gl_shader_decompiler.h shader_ir: Turn classes into data structures 2020-04-23 18:00:06 -03:00
gl_shader_disk_cache.cpp engines/maxwell_3d: Add TFB registers and store them in shader registry 2020-03-09 18:40:53 -03:00
gl_shader_disk_cache.h shader/registry: Store graphics and compute metadata 2020-03-09 18:40:07 -03:00
gl_shader_manager.cpp renderer_opengl: Add assembly program code paths 2020-05-19 18:00:04 -03:00
gl_shader_manager.h renderer_opengl: Add assembly program code paths 2020-05-19 18:00:04 -03:00
gl_shader_util.cpp gl_shader_cache: Address review commentaries 2019-07-15 17:38:25 -03:00
gl_shader_util.h gl_shader_util: Add parameter to handle retrievable programs 2019-02-06 22:20:57 -03:00
gl_state_tracker.cpp gl_rasterizer: Implement line widths and smooth lines 2020-04-13 01:30:34 -03:00
gl_state_tracker.h gl_rasterizer: Implement line widths and smooth lines 2020-04-13 01:30:34 -03:00
gl_stream_buffer.cpp gl_state: Remove completely 2020-02-28 17:56:35 -03:00
gl_stream_buffer.h video_core: Make ARB_buffer_storage a required extension 2019-06-20 21:36:12 -03:00
gl_texture_cache.cpp texture: Implement R8G8UI 2020-04-30 13:19:36 -04:00
gl_texture_cache.h video_core: Use native ASTC when available 2020-04-01 01:14:04 -03:00
maxwell_to_gl.h gl_rasterizer: Implement viewport swizzles with NV_viewport_swizzle 2020-05-04 17:51:30 -03:00
renderer_opengl.cpp renderer_opengl: Add assembly program code paths 2020-05-19 18:00:04 -03:00
renderer_opengl.h renderer_opengl: Add assembly program code paths 2020-05-19 18:00:04 -03:00
utils.cpp buffer_cache: Return handles instead of pointer to handles 2020-04-16 02:33:34 -03:00
utils.h buffer_cache: Return handles instead of pointer to handles 2020-04-16 02:33:34 -03:00