1. 29 May, 2020 5 commits
  2. 28 May, 2020 5 commits
  3. 27 May, 2020 2 commits
  4. 26 May, 2020 7 commits
  5. 24 May, 2020 4 commits
  6. 22 May, 2020 7 commits
  7. 21 May, 2020 8 commits
  8. 20 May, 2020 1 commit
  9. 19 May, 2020 1 commit
    • ReinUsesLisp's avatar
      renderer_opengl: Add assembly program code paths · 420cc132
      ReinUsesLisp authored
      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.
      420cc132