mirror of
https://git.suyu.dev/suyu/suyu
synced 2024-11-06 07:17:53 +00:00
420cc13248
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. |
||
---|---|---|
.. | ||
gl_buffer_cache.cpp | ||
gl_buffer_cache.h | ||
gl_device.cpp | ||
gl_device.h | ||
gl_fence_manager.cpp | ||
gl_fence_manager.h | ||
gl_framebuffer_cache.cpp | ||
gl_framebuffer_cache.h | ||
gl_query_cache.cpp | ||
gl_query_cache.h | ||
gl_rasterizer.cpp | ||
gl_rasterizer.h | ||
gl_resource_manager.cpp | ||
gl_resource_manager.h | ||
gl_sampler_cache.cpp | ||
gl_sampler_cache.h | ||
gl_shader_cache.cpp | ||
gl_shader_cache.h | ||
gl_shader_decompiler.cpp | ||
gl_shader_decompiler.h | ||
gl_shader_disk_cache.cpp | ||
gl_shader_disk_cache.h | ||
gl_shader_manager.cpp | ||
gl_shader_manager.h | ||
gl_shader_util.cpp | ||
gl_shader_util.h | ||
gl_state_tracker.cpp | ||
gl_state_tracker.h | ||
gl_stream_buffer.cpp | ||
gl_stream_buffer.h | ||
gl_texture_cache.cpp | ||
gl_texture_cache.h | ||
maxwell_to_gl.h | ||
renderer_opengl.cpp | ||
renderer_opengl.h | ||
utils.cpp | ||
utils.h |