diff options
Diffstat (limited to 'src/video_core')
| -rw-r--r-- | src/video_core/renderer_opengl/gl_device.cpp | 14 | ||||
| -rw-r--r-- | src/video_core/vulkan_common/vulkan_device.cpp | 2 | ||||
| -rw-r--r-- | src/video_core/vulkan_common/vulkan_memory_allocator.cpp | 8 |
3 files changed, 18 insertions, 6 deletions
diff --git a/src/video_core/renderer_opengl/gl_device.cpp b/src/video_core/renderer_opengl/gl_device.cpp index 1ae5f1d62..5776fccdc 100644 --- a/src/video_core/renderer_opengl/gl_device.cpp +++ b/src/video_core/renderer_opengl/gl_device.cpp @@ -210,6 +210,12 @@ Device::Device() { const bool is_amd = vendor == "ATI Technologies Inc."; const bool is_intel = vendor == "Intel"; +#ifdef __unix__ + const bool is_linux = true; +#else + const bool is_linux = false; +#endif + bool disable_fast_buffer_sub_data = false; if (is_nvidia && version == "4.6.0 NVIDIA 443.24") { LOG_WARNING( @@ -249,7 +255,9 @@ Device::Device() { GLAD_GL_NV_gpu_program5 && GLAD_GL_NV_compute_program5 && GLAD_GL_NV_transform_feedback && GLAD_GL_NV_transform_feedback2; - use_asynchronous_shaders = Settings::values.use_asynchronous_shaders.GetValue(); + // Blocks AMD and Intel OpenGL drivers on Windows from using asynchronous shader compilation. + use_asynchronous_shaders = Settings::values.use_asynchronous_shaders.GetValue() && + !(is_amd || (is_intel && !is_linux)); use_driver_cache = is_nvidia; LOG_INFO(Render_OpenGL, "Renderer_VariableAOFFI: {}", has_variable_aoffi); @@ -261,6 +269,10 @@ Device::Device() { if (Settings::values.use_assembly_shaders.GetValue() && !use_assembly_shaders) { LOG_ERROR(Render_OpenGL, "Assembly shaders enabled but not supported"); } + + if (Settings::values.use_asynchronous_shaders.GetValue() && !use_asynchronous_shaders) { + LOG_WARNING(Render_OpenGL, "Asynchronous shader compilation enabled but not supported"); + } } Device::Device(std::nullptr_t) { diff --git a/src/video_core/vulkan_common/vulkan_device.cpp b/src/video_core/vulkan_common/vulkan_device.cpp index 34d396434..697cb16b9 100644 --- a/src/video_core/vulkan_common/vulkan_device.cpp +++ b/src/video_core/vulkan_common/vulkan_device.cpp @@ -51,7 +51,7 @@ constexpr std::array REQUIRED_EXTENSIONS{ #ifdef _WIN32 VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME, #endif -#ifdef __linux__ +#ifdef __unix__ VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME, #endif }; diff --git a/src/video_core/vulkan_common/vulkan_memory_allocator.cpp b/src/video_core/vulkan_common/vulkan_memory_allocator.cpp index 2a8b7a907..fa37aa79a 100644 --- a/src/video_core/vulkan_common/vulkan_memory_allocator.cpp +++ b/src/video_core/vulkan_common/vulkan_memory_allocator.cpp @@ -62,7 +62,7 @@ public: : memory{std::move(memory_)}, allocation_size{allocation_size_}, property_flags{properties}, shifted_memory_type{1U << type} {} -#if defined(_WIN32) || defined(__linux__) +#if defined(_WIN32) || defined(__unix__) ~MemoryAllocation() { if (owning_opengl_handle != 0) { glDeleteMemoryObjectsEXT(1, &owning_opengl_handle); @@ -114,7 +114,7 @@ public: } return owning_opengl_handle; } -#elif __linux__ +#elif __unix__ [[nodiscard]] u32 ExportOpenGLHandle() { if (!owning_opengl_handle) { glCreateMemoryObjectsEXT(1, &owning_opengl_handle); @@ -165,7 +165,7 @@ private: const u32 shifted_memory_type; ///< Shifted Vulkan memory type. std::vector<Range> commits; ///< All commit ranges done from this allocation. std::span<u8> memory_mapped_span; ///< Memory mapped span. Empty if not queried before. -#if defined(_WIN32) || defined(__linux__) +#if defined(_WIN32) || defined(__unix__) u32 owning_opengl_handle{}; ///< Owning OpenGL memory object handle. #endif }; @@ -249,7 +249,7 @@ void MemoryAllocator::AllocMemory(VkMemoryPropertyFlags flags, u32 type_mask, u6 .pNext = nullptr, #ifdef _WIN32 .handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT, -#elif __linux__ +#elif __unix__ .handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT, #else .handleTypes = 0, |
