summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/video_core/renderer_opengl/gl_device.cpp3
-rw-r--r--src/video_core/renderer_opengl/gl_device.h5
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer.cpp4
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
745void RasterizerOpenGL::DispatchCompute(GPUVAddr code_addr) { 745void 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);