diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/renderer_opengl/gl_device.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/video_core/renderer_opengl/gl_device.cpp b/src/video_core/renderer_opengl/gl_device.cpp index b772c37d9..a14641b97 100644 --- a/src/video_core/renderer_opengl/gl_device.cpp +++ b/src/video_core/renderer_opengl/gl_device.cpp | |||
| @@ -185,12 +185,20 @@ bool IsASTCSupported() { | |||
| 185 | Device::Device() | 185 | Device::Device() |
| 186 | : max_uniform_buffers{BuildMaxUniformBuffers()}, base_bindings{BuildBaseBindings()} { | 186 | : max_uniform_buffers{BuildMaxUniformBuffers()}, base_bindings{BuildBaseBindings()} { |
| 187 | const std::string_view vendor = reinterpret_cast<const char*>(glGetString(GL_VENDOR)); | 187 | const std::string_view vendor = reinterpret_cast<const char*>(glGetString(GL_VENDOR)); |
| 188 | const auto renderer = reinterpret_cast<const char*>(glGetString(GL_RENDERER)); | 188 | const std::string_view version = reinterpret_cast<const char*>(glGetString(GL_VERSION)); |
| 189 | const std::vector extensions = GetExtensions(); | 189 | const std::vector extensions = GetExtensions(); |
| 190 | 190 | ||
| 191 | const bool is_nvidia = vendor == "NVIDIA Corporation"; | 191 | const bool is_nvidia = vendor == "NVIDIA Corporation"; |
| 192 | const bool is_amd = vendor == "ATI Technologies Inc."; | 192 | const bool is_amd = vendor == "ATI Technologies Inc."; |
| 193 | 193 | ||
| 194 | bool disable_fast_buffer_sub_data = false; | ||
| 195 | if (is_nvidia && version == "4.6.0 NVIDIA 443.24") { | ||
| 196 | LOG_WARNING( | ||
| 197 | Render_OpenGL, | ||
| 198 | "Beta driver 443.24 is known to have issues. There might be performance issues."); | ||
| 199 | disable_fast_buffer_sub_data = true; | ||
| 200 | } | ||
| 201 | |||
| 194 | uniform_buffer_alignment = GetInteger<std::size_t>(GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT); | 202 | uniform_buffer_alignment = GetInteger<std::size_t>(GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT); |
| 195 | shader_storage_alignment = GetInteger<std::size_t>(GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT); | 203 | shader_storage_alignment = GetInteger<std::size_t>(GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT); |
| 196 | max_vertex_attributes = GetInteger<u32>(GL_MAX_VERTEX_ATTRIBS); | 204 | max_vertex_attributes = GetInteger<u32>(GL_MAX_VERTEX_ATTRIBS); |
| @@ -204,7 +212,7 @@ Device::Device() | |||
| 204 | has_variable_aoffi = TestVariableAoffi(); | 212 | has_variable_aoffi = TestVariableAoffi(); |
| 205 | has_component_indexing_bug = is_amd; | 213 | has_component_indexing_bug = is_amd; |
| 206 | has_precise_bug = TestPreciseBug(); | 214 | has_precise_bug = TestPreciseBug(); |
| 207 | has_fast_buffer_sub_data = is_nvidia; | 215 | has_fast_buffer_sub_data = is_nvidia && !disable_fast_buffer_sub_data; |
| 208 | use_assembly_shaders = Settings::values.use_assembly_shaders && GLAD_GL_NV_gpu_program5 && | 216 | use_assembly_shaders = Settings::values.use_assembly_shaders && GLAD_GL_NV_gpu_program5 && |
| 209 | GLAD_GL_NV_compute_program5; | 217 | GLAD_GL_NV_compute_program5; |
| 210 | 218 | ||