diff options
| author | 2022-01-03 00:39:59 +0100 | |
|---|---|---|
| committer | 2022-01-03 00:39:59 +0100 | |
| commit | ae7da0b12dd8aef115d741eb60d00ddf8ed357df (patch) | |
| tree | 09d269fe3838d1f8aa5672d2af06cbeb9b45d81f /src/video_core | |
| parent | Merge pull request #7659 from ameerj/overlap-overflow (diff) | |
| parent | glsl: Add boolean reference workaround (diff) | |
| download | yuzu-ae7da0b12dd8aef115d741eb60d00ddf8ed357df.tar.gz yuzu-ae7da0b12dd8aef115d741eb60d00ddf8ed357df.tar.xz yuzu-ae7da0b12dd8aef115d741eb60d00ddf8ed357df.zip | |
Merge pull request #7629 from ameerj/nv-driver-fixes
shaders: Add fixes for NVIDIA drivers 495+
Diffstat (limited to 'src/video_core')
| -rw-r--r-- | src/video_core/renderer_opengl/gl_device.cpp | 10 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_device.h | 10 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_shader_cache.cpp | 2 |
3 files changed, 15 insertions, 7 deletions
diff --git a/src/video_core/renderer_opengl/gl_device.cpp b/src/video_core/renderer_opengl/gl_device.cpp index 0764ea6e0..e62912a22 100644 --- a/src/video_core/renderer_opengl/gl_device.cpp +++ b/src/video_core/renderer_opengl/gl_device.cpp | |||
| @@ -182,17 +182,13 @@ Device::Device() { | |||
| 182 | shader_backend = Settings::ShaderBackend::GLSL; | 182 | shader_backend = Settings::ShaderBackend::GLSL; |
| 183 | } | 183 | } |
| 184 | 184 | ||
| 185 | if (shader_backend == Settings::ShaderBackend::GLSL && is_nvidia && | 185 | if (shader_backend == Settings::ShaderBackend::GLSL && is_nvidia) { |
| 186 | !Settings::values.renderer_debug) { | ||
| 187 | const std::string_view driver_version = version.substr(13); | 186 | const std::string_view driver_version = version.substr(13); |
| 188 | const int version_major = | 187 | const int version_major = |
| 189 | std::atoi(driver_version.substr(0, driver_version.find(".")).data()); | 188 | std::atoi(driver_version.substr(0, driver_version.find(".")).data()); |
| 190 | |||
| 191 | if (version_major >= 495) { | 189 | if (version_major >= 495) { |
| 192 | LOG_WARNING(Render_OpenGL, "NVIDIA drivers 495 and later causes significant problems " | 190 | has_cbuf_ftou_bug = true; |
| 193 | "with yuzu. Forcing GLASM as a mitigation."); | 191 | has_bool_ref_bug = true; |
| 194 | shader_backend = Settings::ShaderBackend::GLASM; | ||
| 195 | use_assembly_shaders = true; | ||
| 196 | } | 192 | } |
| 197 | } | 193 | } |
| 198 | 194 | ||
diff --git a/src/video_core/renderer_opengl/gl_device.h b/src/video_core/renderer_opengl/gl_device.h index de9e41659..95c2e8d38 100644 --- a/src/video_core/renderer_opengl/gl_device.h +++ b/src/video_core/renderer_opengl/gl_device.h | |||
| @@ -152,6 +152,14 @@ public: | |||
| 152 | return need_fastmath_off; | 152 | return need_fastmath_off; |
| 153 | } | 153 | } |
| 154 | 154 | ||
| 155 | bool HasCbufFtouBug() const { | ||
| 156 | return has_cbuf_ftou_bug; | ||
| 157 | } | ||
| 158 | |||
| 159 | bool HasBoolRefBug() const { | ||
| 160 | return has_bool_ref_bug; | ||
| 161 | } | ||
| 162 | |||
| 155 | Settings::ShaderBackend GetShaderBackend() const { | 163 | Settings::ShaderBackend GetShaderBackend() const { |
| 156 | return shader_backend; | 164 | return shader_backend; |
| 157 | } | 165 | } |
| @@ -200,6 +208,8 @@ private: | |||
| 200 | bool has_sparse_texture_2{}; | 208 | bool has_sparse_texture_2{}; |
| 201 | bool warp_size_potentially_larger_than_guest{}; | 209 | bool warp_size_potentially_larger_than_guest{}; |
| 202 | bool need_fastmath_off{}; | 210 | bool need_fastmath_off{}; |
| 211 | bool has_cbuf_ftou_bug{}; | ||
| 212 | bool has_bool_ref_bug{}; | ||
| 203 | 213 | ||
| 204 | std::string vendor_name; | 214 | std::string vendor_name; |
| 205 | }; | 215 | }; |
diff --git a/src/video_core/renderer_opengl/gl_shader_cache.cpp b/src/video_core/renderer_opengl/gl_shader_cache.cpp index 29c6e1a5f..ec558a9af 100644 --- a/src/video_core/renderer_opengl/gl_shader_cache.cpp +++ b/src/video_core/renderer_opengl/gl_shader_cache.cpp | |||
| @@ -214,6 +214,8 @@ ShaderCache::ShaderCache(RasterizerOpenGL& rasterizer_, Core::Frontend::EmuWindo | |||
| 214 | .has_broken_fp16_float_controls = false, | 214 | .has_broken_fp16_float_controls = false, |
| 215 | .has_gl_component_indexing_bug = device.HasComponentIndexingBug(), | 215 | .has_gl_component_indexing_bug = device.HasComponentIndexingBug(), |
| 216 | .has_gl_precise_bug = device.HasPreciseBug(), | 216 | .has_gl_precise_bug = device.HasPreciseBug(), |
| 217 | .has_gl_cbuf_ftou_bug = device.HasCbufFtouBug(), | ||
| 218 | .has_gl_bool_ref_bug = device.HasBoolRefBug(), | ||
| 217 | .ignore_nan_fp_comparisons = true, | 219 | .ignore_nan_fp_comparisons = true, |
| 218 | .gl_max_compute_smem_size = device.GetMaxComputeSharedMemorySize(), | 220 | .gl_max_compute_smem_size = device.GetMaxComputeSharedMemorySize(), |
| 219 | }, | 221 | }, |