diff options
| author | bunnei <bunneidev@gmail.com> | 2018-04-15 03:19:57 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-04-15 03:19:57 -0400 |
| commit | bb0c3fc828f63929a1eef9d0f75493fffb19b8bc (patch) | |
| tree | f0c06f5bbcc0f8e7ea6d3681060c12936e887359 /src/video_core/renderer_opengl/gl_state.cpp | |
| parent | 2b9a6b32816a627371e19e83a3735aa899e75740 (diff) | |
| parent | c9b511da084bcf1655a7e844ee0d80e46ce681c9 (diff) | |
Merge pull request #328 from Subv/constbuffers
GPU: Upload the shader Constant Buffers as SSBOs to the GPU
Diffstat (limited to 'src/video_core/renderer_opengl/gl_state.cpp')
| -rw-r--r-- | src/video_core/renderer_opengl/gl_state.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/video_core/renderer_opengl/gl_state.cpp b/src/video_core/renderer_opengl/gl_state.cpp index 6da3a7781..7b8a15ed2 100644 --- a/src/video_core/renderer_opengl/gl_state.cpp +++ b/src/video_core/renderer_opengl/gl_state.cpp @@ -202,6 +202,20 @@ void OpenGLState::Apply() const { } } + // Constbuffers + for (u32 stage = 0; stage < draw.const_buffers.size(); ++stage) { + for (u32 buffer_id = 0; buffer_id < draw.const_buffers[stage].size(); ++buffer_id) { + auto& current = cur_state.draw.const_buffers[stage][buffer_id]; + auto& new_state = draw.const_buffers[stage][buffer_id]; + if (current.enabled != new_state.enabled || current.bindpoint != new_state.bindpoint || + current.ssbo != new_state.ssbo) { + if (new_state.enabled) { + glBindBufferBase(GL_SHADER_STORAGE_BUFFER, new_state.bindpoint, new_state.ssbo); + } + } + } + } + // Lighting LUTs if (lighting_lut.texture_buffer != cur_state.lighting_lut.texture_buffer) { glActiveTexture(TextureUnits::LightingLUT.Enum()); |
