diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/renderer_opengl/gl_device.cpp | 3 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_device.h | 5 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.cpp | 4 |
3 files changed, 12 insertions, 0 deletions
diff --git a/src/video_core/renderer_opengl/gl_device.cpp b/src/video_core/renderer_opengl/gl_device.cpp index 5cfa97fc2..3adf57c96 100644 --- a/src/video_core/renderer_opengl/gl_device.cpp +++ b/src/video_core/renderer_opengl/gl_device.cpp | |||
| @@ -74,6 +74,7 @@ Device::Device() { | |||
| 74 | const std::vector extensions = GetExtensions(); | 74 | const std::vector extensions = GetExtensions(); |
| 75 | 75 | ||
| 76 | const bool is_nvidia = vendor == "NVIDIA Corporation"; | 76 | const bool is_nvidia = vendor == "NVIDIA Corporation"; |
| 77 | const bool is_intel = vendor == "Intel"; | ||
| 77 | 78 | ||
| 78 | // Reserve the first UBO for emulation bindings | 79 | // Reserve the first UBO for emulation bindings |
| 79 | base_bindings[0] = BaseBindings{ReservedUniformBlocks, 0, 0, 0}; | 80 | base_bindings[0] = BaseBindings{ReservedUniformBlocks, 0, 0, 0}; |
| @@ -110,6 +111,7 @@ Device::Device() { | |||
| 110 | has_variable_aoffi = TestVariableAoffi(); | 111 | has_variable_aoffi = TestVariableAoffi(); |
| 111 | has_component_indexing_bug = TestComponentIndexingBug(); | 112 | has_component_indexing_bug = TestComponentIndexingBug(); |
| 112 | has_precise_bug = TestPreciseBug(); | 113 | has_precise_bug = TestPreciseBug(); |
| 114 | has_broken_compute = is_intel; | ||
| 113 | has_fast_buffer_sub_data = is_nvidia; | 115 | has_fast_buffer_sub_data = is_nvidia; |
| 114 | 116 | ||
| 115 | LOG_INFO(Render_OpenGL, "Renderer_VariableAOFFI: {}", has_variable_aoffi); | 117 | LOG_INFO(Render_OpenGL, "Renderer_VariableAOFFI: {}", has_variable_aoffi); |
| @@ -127,6 +129,7 @@ Device::Device(std::nullptr_t) { | |||
| 127 | has_image_load_formatted = true; | 129 | has_image_load_formatted = true; |
| 128 | has_variable_aoffi = true; | 130 | has_variable_aoffi = true; |
| 129 | has_component_indexing_bug = false; | 131 | has_component_indexing_bug = false; |
| 132 | has_broken_compute = false; | ||
| 130 | has_precise_bug = false; | 133 | has_precise_bug = false; |
| 131 | } | 134 | } |
| 132 | 135 | ||
diff --git a/src/video_core/renderer_opengl/gl_device.h b/src/video_core/renderer_opengl/gl_device.h index e7d3c48b0..5433815b9 100644 --- a/src/video_core/renderer_opengl/gl_device.h +++ b/src/video_core/renderer_opengl/gl_device.h | |||
| @@ -76,6 +76,10 @@ public: | |||
| 76 | return has_precise_bug; | 76 | return has_precise_bug; |
| 77 | } | 77 | } |
| 78 | 78 | ||
| 79 | bool HasBrokenCompute() const { | ||
| 80 | return has_broken_compute; | ||
| 81 | } | ||
| 82 | |||
| 79 | bool HasFastBufferSubData() const { | 83 | bool HasFastBufferSubData() const { |
| 80 | return has_fast_buffer_sub_data; | 84 | return has_fast_buffer_sub_data; |
| 81 | } | 85 | } |
| @@ -97,6 +101,7 @@ private: | |||
| 97 | bool has_variable_aoffi{}; | 101 | bool has_variable_aoffi{}; |
| 98 | bool has_component_indexing_bug{}; | 102 | bool has_component_indexing_bug{}; |
| 99 | bool has_precise_bug{}; | 103 | bool has_precise_bug{}; |
| 104 | bool has_broken_compute{}; | ||
| 100 | bool has_fast_buffer_sub_data{}; | 105 | bool has_fast_buffer_sub_data{}; |
| 101 | }; | 106 | }; |
| 102 | 107 | ||
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index fbb9bbac1..f97ec06f0 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp | |||
| @@ -743,6 +743,10 @@ bool RasterizerOpenGL::DrawMultiBatch(bool is_indexed) { | |||
| 743 | } | 743 | } |
| 744 | 744 | ||
| 745 | void RasterizerOpenGL::DispatchCompute(GPUVAddr code_addr) { | 745 | void RasterizerOpenGL::DispatchCompute(GPUVAddr code_addr) { |
| 746 | if (device.HasBrokenCompute()) { | ||
| 747 | return; | ||
| 748 | } | ||
| 749 | |||
| 746 | buffer_cache.Acquire(); | 750 | buffer_cache.Acquire(); |
| 747 | 751 | ||
| 748 | auto kernel = shader_cache.GetComputeKernel(code_addr); | 752 | auto kernel = shader_cache.GetComputeKernel(code_addr); |