There was an error fetching the commit references. Please try again later.
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.
Showing
- src/video_core/renderer_opengl/gl_device.cpp 7 additions, 0 deletionssrc/video_core/renderer_opengl/gl_device.cpp
- src/video_core/renderer_opengl/gl_device.h 5 additions, 0 deletionssrc/video_core/renderer_opengl/gl_device.h
- src/video_core/renderer_opengl/gl_rasterizer.cpp 72 additions, 24 deletionssrc/video_core/renderer_opengl/gl_rasterizer.cpp
- src/video_core/renderer_opengl/gl_rasterizer.h 11 additions, 5 deletionssrc/video_core/renderer_opengl/gl_rasterizer.h
- src/video_core/renderer_opengl/gl_resource_manager.cpp 9 additions, 0 deletionssrc/video_core/renderer_opengl/gl_resource_manager.cpp
- src/video_core/renderer_opengl/gl_resource_manager.h 16 additions, 0 deletionssrc/video_core/renderer_opengl/gl_resource_manager.h
- src/video_core/renderer_opengl/gl_shader_cache.cpp 80 additions, 21 deletionssrc/video_core/renderer_opengl/gl_shader_cache.cpp
- src/video_core/renderer_opengl/gl_shader_cache.h 11 additions, 4 deletionssrc/video_core/renderer_opengl/gl_shader_cache.h
- src/video_core/renderer_opengl/gl_shader_manager.cpp 83 additions, 23 deletionssrc/video_core/renderer_opengl/gl_shader_manager.cpp
- src/video_core/renderer_opengl/gl_shader_manager.h 33 additions, 23 deletionssrc/video_core/renderer_opengl/gl_shader_manager.h
- src/video_core/renderer_opengl/renderer_opengl.cpp 8 additions, 8 deletionssrc/video_core/renderer_opengl/renderer_opengl.cpp
- src/video_core/renderer_opengl/renderer_opengl.h 4 additions, 1 deletionsrc/video_core/renderer_opengl/renderer_opengl.h
Loading
Please register or sign in to comment