Browse Source
gl_rasterizer: Disable compute shaders on Intel
Intel's proprietary driver enters in a corrupt state when compute
shaders are executed. For now, disable these.
pull/15/merge
ReinUsesLisp
6 years ago
No known key found for this signature in database
GPG Key ID: 2DFC508897B39CFE
3 changed files with
12 additions and
0 deletions
-
src/video_core/renderer_opengl/gl_device.cpp
-
src/video_core/renderer_opengl/gl_device.h
-
src/video_core/renderer_opengl/gl_rasterizer.cpp
|
|
|
@ -74,6 +74,7 @@ Device::Device() { |
|
|
|
const std::vector extensions = GetExtensions(); |
|
|
|
|
|
|
|
const bool is_nvidia = vendor == "NVIDIA Corporation"; |
|
|
|
const bool is_intel = vendor == "Intel"; |
|
|
|
|
|
|
|
// Reserve the first UBO for emulation bindings
|
|
|
|
base_bindings[0] = BaseBindings{ReservedUniformBlocks, 0, 0, 0}; |
|
|
|
@ -110,6 +111,7 @@ Device::Device() { |
|
|
|
has_variable_aoffi = TestVariableAoffi(); |
|
|
|
has_component_indexing_bug = TestComponentIndexingBug(); |
|
|
|
has_precise_bug = TestPreciseBug(); |
|
|
|
has_broken_compute = is_intel; |
|
|
|
has_fast_buffer_sub_data = is_nvidia; |
|
|
|
|
|
|
|
LOG_INFO(Render_OpenGL, "Renderer_VariableAOFFI: {}", has_variable_aoffi); |
|
|
|
@ -127,6 +129,7 @@ Device::Device(std::nullptr_t) { |
|
|
|
has_image_load_formatted = true; |
|
|
|
has_variable_aoffi = true; |
|
|
|
has_component_indexing_bug = false; |
|
|
|
has_broken_compute = false; |
|
|
|
has_precise_bug = false; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -76,6 +76,10 @@ public: |
|
|
|
return has_precise_bug; |
|
|
|
} |
|
|
|
|
|
|
|
bool HasBrokenCompute() const { |
|
|
|
return has_broken_compute; |
|
|
|
} |
|
|
|
|
|
|
|
bool HasFastBufferSubData() const { |
|
|
|
return has_fast_buffer_sub_data; |
|
|
|
} |
|
|
|
@ -97,6 +101,7 @@ private: |
|
|
|
bool has_variable_aoffi{}; |
|
|
|
bool has_component_indexing_bug{}; |
|
|
|
bool has_precise_bug{}; |
|
|
|
bool has_broken_compute{}; |
|
|
|
bool has_fast_buffer_sub_data{}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
@ -743,6 +743,10 @@ bool RasterizerOpenGL::DrawMultiBatch(bool is_indexed) { |
|
|
|
} |
|
|
|
|
|
|
|
void RasterizerOpenGL::DispatchCompute(GPUVAddr code_addr) { |
|
|
|
if (device.HasBrokenCompute()) { |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
buffer_cache.Acquire(); |
|
|
|
|
|
|
|
auto kernel = shader_cache.GetComputeKernel(code_addr); |
|
|
|
|