From 0b631f22fc1c05e485defbfbc829157e4ed1fe4d Mon Sep 17 00:00:00 2001
From: ReinUsesLisp <reinuseslisp@airmail.cc>
Date: Mon, 18 Jan 2021 19:04:27 -0300
Subject: [PATCH] renderer_opengl: Remove interop

Remove unused interop code from the OpenGL backend.
---
 .../renderer_opengl/gl_buffer_cache.cpp       | 11 +--
 .../renderer_opengl/gl_buffer_cache.h         | 12 +--
 src/video_core/renderer_opengl/gl_device.cpp  |  5 +-
 src/video_core/renderer_opengl/gl_device.h    |  2 +-
 .../renderer_opengl/gl_rasterizer.cpp         |  4 +-
 .../renderer_opengl/gl_rasterizer.h           |  7 --
 .../renderer_opengl/renderer_opengl.cpp       | 88 +------------------
 .../renderer_opengl/renderer_opengl.h         |  3 -
 8 files changed, 10 insertions(+), 122 deletions(-)

diff --git a/src/video_core/renderer_opengl/gl_buffer_cache.cpp b/src/video_core/renderer_opengl/gl_buffer_cache.cpp
index 1e555098d..6da3906a4 100644
--- a/src/video_core/renderer_opengl/gl_buffer_cache.cpp
+++ b/src/video_core/renderer_opengl/gl_buffer_cache.cpp
@@ -7,10 +7,6 @@
 #include "video_core/buffer_cache/buffer_cache.h"
 #include "video_core/renderer_opengl/gl_buffer_cache.h"
 #include "video_core/renderer_opengl/gl_device.h"
-#include "video_core/vulkan_common/vulkan_device.h"
-#include "video_core/vulkan_common/vulkan_instance.h"
-#include "video_core/vulkan_common/vulkan_library.h"
-#include "video_core/vulkan_common/vulkan_memory_allocator.h"
 
 namespace OpenGL {
 namespace {
@@ -66,11 +62,8 @@ void Buffer::MakeResident(GLenum access) noexcept {
     glMakeNamedBufferResidentNV(buffer.handle, access);
 }
 
-BufferCacheRuntime::BufferCacheRuntime(const Device& device_, const Vulkan::Device* vulkan_device_,
-                                       Vulkan::MemoryAllocator* vulkan_memory_allocator_)
-    : device{device_}, vulkan_device{vulkan_device_},
-      vulkan_memory_allocator{vulkan_memory_allocator_},
-      has_fast_buffer_sub_data{device.HasFastBufferSubData()},
+BufferCacheRuntime::BufferCacheRuntime(const Device& device_)
+    : device{device_}, has_fast_buffer_sub_data{device.HasFastBufferSubData()},
       use_assembly_shaders{device.UseAssemblyShaders()},
       has_unified_vertex_buffers{device.HasVertexBufferUnifiedMemory()},
       stream_buffer{has_fast_buffer_sub_data ? std::nullopt : std::make_optional<StreamBuffer>()} {
diff --git a/src/video_core/renderer_opengl/gl_buffer_cache.h b/src/video_core/renderer_opengl/gl_buffer_cache.h
index 35c9deb51..d8b20a9af 100644
--- a/src/video_core/renderer_opengl/gl_buffer_cache.h
+++ b/src/video_core/renderer_opengl/gl_buffer_cache.h
@@ -15,13 +15,6 @@
 #include "video_core/renderer_opengl/gl_device.h"
 #include "video_core/renderer_opengl/gl_resource_manager.h"
 #include "video_core/renderer_opengl/gl_stream_buffer.h"
-#include "video_core/vulkan_common/vulkan_device.h"
-#include "video_core/vulkan_common/vulkan_memory_allocator.h"
-
-namespace Vulkan {
-class Device;
-class MemoryAllocator;
-} // namespace Vulkan
 
 namespace OpenGL {
 
@@ -59,8 +52,7 @@ class BufferCacheRuntime {
 public:
     static constexpr u8 INVALID_BINDING = std::numeric_limits<u8>::max();
 
-    explicit BufferCacheRuntime(const Device& device_, const Vulkan::Device* vulkan_device_,
-                                Vulkan::MemoryAllocator* vulkan_memory_allocator_);
+    explicit BufferCacheRuntime(const Device& device_);
 
     void CopyBuffer(Buffer& dst_buffer, Buffer& src_buffer,
                     std::span<const VideoCommon::BufferCopy> copies);
@@ -132,8 +124,6 @@ private:
     };
 
     const Device& device;
-    const Vulkan::Device* vulkan_device;
-    Vulkan::MemoryAllocator* vulkan_memory_allocator;
 
     bool has_fast_buffer_sub_data = false;
     bool use_assembly_shaders = false;
diff --git a/src/video_core/renderer_opengl/gl_device.cpp b/src/video_core/renderer_opengl/gl_device.cpp
index 0f492f006..48d5c4a5e 100644
--- a/src/video_core/renderer_opengl/gl_device.cpp
+++ b/src/video_core/renderer_opengl/gl_device.cpp
@@ -197,7 +197,7 @@ bool IsASTCSupported() {
 }
 } // Anonymous namespace
 
-Device::Device(bool has_vulkan_instance) {
+Device::Device() {
     if (!GLAD_GL_VERSION_4_6) {
         LOG_ERROR(Render_OpenGL, "OpenGL 4.6 is not available");
         throw std::runtime_error{"Insufficient version"};
@@ -246,8 +246,7 @@ Device::Device(bool has_vulkan_instance) {
 
     use_assembly_shaders = Settings::values.use_assembly_shaders.GetValue() &&
                            GLAD_GL_NV_gpu_program5 && GLAD_GL_NV_compute_program5 &&
-                           GLAD_GL_NV_transform_feedback && GLAD_GL_NV_transform_feedback2 &&
-                           has_vulkan_instance;
+                           GLAD_GL_NV_transform_feedback && GLAD_GL_NV_transform_feedback2;
 
     use_asynchronous_shaders = Settings::values.use_asynchronous_shaders.GetValue();
     use_driver_cache = is_nvidia;
diff --git a/src/video_core/renderer_opengl/gl_device.h b/src/video_core/renderer_opengl/gl_device.h
index eb62ae52d..ee053776d 100644
--- a/src/video_core/renderer_opengl/gl_device.h
+++ b/src/video_core/renderer_opengl/gl_device.h
@@ -19,7 +19,7 @@ public:
         u32 image{};
     };
 
-    explicit Device(bool has_vulkan_instance);
+    explicit Device();
     explicit Device(std::nullptr_t);
 
     u32 GetMaxUniformBuffers(Tegra::Engines::ShaderType shader_type) const noexcept {
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp
index 52499ee4c..ddc668fbc 100644
--- a/src/video_core/renderer_opengl/gl_rasterizer.cpp
+++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp
@@ -167,8 +167,6 @@ ImageViewType ImageViewTypeFromEntry(const ImageEntry& entry) {
 
 RasterizerOpenGL::RasterizerOpenGL(Core::Frontend::EmuWindow& emu_window_, Tegra::GPU& gpu_,
                                    Core::Memory::Memory& cpu_memory_, const Device& device_,
-                                   const Vulkan::Device* vulkan_device,
-                                   Vulkan::MemoryAllocator* vulkan_memory_allocator,
                                    ScreenInfo& screen_info_, ProgramManager& program_manager_,
                                    StateTracker& state_tracker_)
     : RasterizerAccelerated(cpu_memory_), gpu(gpu_), maxwell3d(gpu.Maxwell3D()),
@@ -176,7 +174,7 @@ RasterizerOpenGL::RasterizerOpenGL(Core::Frontend::EmuWindow& emu_window_, Tegra
       screen_info(screen_info_), program_manager(program_manager_), state_tracker(state_tracker_),
       texture_cache_runtime(device, program_manager, state_tracker),
       texture_cache(texture_cache_runtime, *this, maxwell3d, kepler_compute, gpu_memory),
-      buffer_cache_runtime(device, vulkan_device, vulkan_memory_allocator),
+      buffer_cache_runtime(device),
       buffer_cache(*this, maxwell3d, kepler_compute, gpu_memory, cpu_memory_, buffer_cache_runtime),
       shader_cache(*this, emu_window_, gpu, maxwell3d, kepler_compute, gpu_memory, device),
       query_cache(*this, maxwell3d, gpu_memory),
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.h b/src/video_core/renderer_opengl/gl_rasterizer.h
index 31d69a94c..3745cf637 100644
--- a/src/video_core/renderer_opengl/gl_rasterizer.h
+++ b/src/video_core/renderer_opengl/gl_rasterizer.h
@@ -46,11 +46,6 @@ namespace Tegra {
 class MemoryManager;
 }
 
-namespace Vulkan {
-class Device;
-class MemoryAllocator;
-} // namespace Vulkan
-
 namespace OpenGL {
 
 struct ScreenInfo;
@@ -67,8 +62,6 @@ class RasterizerOpenGL : public VideoCore::RasterizerAccelerated {
 public:
     explicit RasterizerOpenGL(Core::Frontend::EmuWindow& emu_window_, Tegra::GPU& gpu_,
                               Core::Memory::Memory& cpu_memory_, const Device& device_,
-                              const Vulkan::Device* vulkan_device,
-                              Vulkan::MemoryAllocator* vulkan_memory_allocator,
                               ScreenInfo& screen_info_, ProgramManager& program_manager_,
                               StateTracker& state_tracker_);
     ~RasterizerOpenGL() override;
diff --git a/src/video_core/renderer_opengl/renderer_opengl.cpp b/src/video_core/renderer_opengl/renderer_opengl.cpp
index 8fcb86581..9d2acd4d9 100644
--- a/src/video_core/renderer_opengl/renderer_opengl.cpp
+++ b/src/video_core/renderer_opengl/renderer_opengl.cpp
@@ -27,11 +27,6 @@
 #include "video_core/renderer_opengl/gl_shader_manager.h"
 #include "video_core/renderer_opengl/renderer_opengl.h"
 #include "video_core/textures/decoders.h"
-#include "video_core/vulkan_common/vulkan_debug_callback.h"
-#include "video_core/vulkan_common/vulkan_device.h"
-#include "video_core/vulkan_common/vulkan_instance.h"
-#include "video_core/vulkan_common/vulkan_library.h"
-#include "video_core/vulkan_common/vulkan_memory_allocator.h"
 
 namespace OpenGL {
 namespace {
@@ -127,93 +122,16 @@ void APIENTRY DebugHandler(GLenum source, GLenum type, GLuint id, GLenum severit
         break;
     }
 }
-
-Vulkan::vk::PhysicalDevice FindPhysicalDevice(Vulkan::vk::Instance& instance) {
-    using namespace Vulkan;
-    using UUID = std::array<GLubyte, GL_UUID_SIZE_EXT>;
-
-    GLint num_device_uuids;
-    glGetIntegerv(GL_NUM_DEVICE_UUIDS_EXT, &num_device_uuids);
-    std::vector<UUID> device_uuids(num_device_uuids);
-    for (GLint index = 0; index < num_device_uuids; ++index) {
-        glGetUnsignedBytei_vEXT(GL_DEVICE_UUID_EXT, 0, device_uuids[index].data());
-    }
-    UUID driver_uuid;
-    glGetUnsignedBytevEXT(GL_DRIVER_UUID_EXT, driver_uuid.data());
-
-    for (const VkPhysicalDevice raw_physical_device : instance.EnumeratePhysicalDevices()) {
-        VkPhysicalDeviceIDProperties device_id_properties{};
-        device_id_properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES;
-
-        VkPhysicalDeviceProperties2KHR properties{
-            .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR,
-            .pNext = &device_id_properties,
-            .properties{},
-        };
-        vk::PhysicalDevice physical_device(raw_physical_device, instance.Dispatch());
-        physical_device.GetProperties2KHR(properties);
-        if (!std::ranges::equal(device_id_properties.driverUUID, driver_uuid)) {
-            continue;
-        }
-        const auto it =
-            std::ranges::find_if(device_uuids, [&device_id_properties, driver_uuid](UUID uuid) {
-                return std::ranges::equal(device_id_properties.deviceUUID, uuid);
-            });
-        if (it != device_uuids.end()) {
-            return physical_device;
-        }
-    }
-    throw vk::Exception(VK_ERROR_INCOMPATIBLE_DRIVER);
-}
 } // Anonymous namespace
 
-struct VulkanObjects {
-    static std::unique_ptr<VulkanObjects> TryCreate() {
-        if (!GLAD_GL_EXT_memory_object) {
-            // Interop is not present
-            return nullptr;
-        }
-        const std::string_view vendor{reinterpret_cast<const char*>(glGetString(GL_VENDOR))};
-        if (vendor == "ATI Technologies Inc.") {
-            // Avoid using GL_EXT_memory_object on AMD, as it makes the GL driver crash
-            return nullptr;
-        }
-        if (!Settings::values.use_assembly_shaders.GetValue()) {
-            // We only need interop when assembly shaders are enabled
-            return nullptr;
-        }
-#ifdef __linux__
-        LOG_WARNING(Render_OpenGL, "Interop doesn't work on Linux at the moment");
-        return nullptr;
-#endif
-        try {
-            return std::make_unique<VulkanObjects>();
-        } catch (const Vulkan::vk::Exception& exception) {
-            LOG_ERROR(Render_OpenGL, "Failed to initialize Vulkan objects with error: {}",
-                      exception.what());
-            return nullptr;
-        }
-    }
-
-    Common::DynamicLibrary library{Vulkan::OpenLibrary()};
-    Vulkan::vk::InstanceDispatch dld;
-    Vulkan::vk::Instance instance{Vulkan::CreateInstance(library, dld, VK_API_VERSION_1_1)};
-    Vulkan::Device device{*instance, FindPhysicalDevice(instance), nullptr, dld};
-    Vulkan::MemoryAllocator memory_allocator{device, true};
-};
-
 RendererOpenGL::RendererOpenGL(Core::TelemetrySession& telemetry_session_,
                                Core::Frontend::EmuWindow& emu_window_,
                                Core::Memory::Memory& cpu_memory_, Tegra::GPU& gpu_,
                                std::unique_ptr<Core::Frontend::GraphicsContext> context_)
     : RendererBase{emu_window_, std::move(context_)}, telemetry_session{telemetry_session_},
-      emu_window{emu_window_}, cpu_memory{cpu_memory_}, gpu{gpu_},
-      vulkan_objects{VulkanObjects::TryCreate()}, device{vulkan_objects != nullptr},
-      state_tracker{gpu}, program_manager{device},
-      rasterizer(emu_window, gpu, cpu_memory, device,
-                 vulkan_objects ? &vulkan_objects->device : nullptr,
-                 vulkan_objects ? &vulkan_objects->memory_allocator : nullptr, screen_info,
-                 program_manager, state_tracker) {
+      emu_window{emu_window_}, cpu_memory{cpu_memory_}, gpu{gpu_}, state_tracker{gpu},
+      program_manager{device},
+      rasterizer(emu_window, gpu, cpu_memory, device, screen_info, program_manager, state_tracker) {
     if (Settings::values.renderer_debug && GLAD_GL_KHR_debug) {
         glEnable(GL_DEBUG_OUTPUT);
         glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);
diff --git a/src/video_core/renderer_opengl/renderer_opengl.h b/src/video_core/renderer_opengl/renderer_opengl.h
index f210190dd..cc19a110f 100644
--- a/src/video_core/renderer_opengl/renderer_opengl.h
+++ b/src/video_core/renderer_opengl/renderer_opengl.h
@@ -38,8 +38,6 @@ class GPU;
 
 namespace OpenGL {
 
-struct VulkanObjects;
-
 /// Structure used for storing information about the textures for the Switch screen
 struct TextureInfo {
     OGLTexture resource;
@@ -101,7 +99,6 @@ private:
     Core::Memory::Memory& cpu_memory;
     Tegra::GPU& gpu;
 
-    std::unique_ptr<VulkanObjects> vulkan_objects;
     Device device;
     StateTracker state_tracker;
     ProgramManager program_manager;