summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar ReinUsesLisp2021-01-18 19:04:27 -0300
committerGravatar ReinUsesLisp2021-02-13 02:18:04 -0300
commit0b631f22fc1c05e485defbfbc829157e4ed1fe4d (patch)
tree69befa56000910ed229730d58664ca1efb2f41a4 /src
parentgl_buffer_cache: Drop interop based parameter buffer workarounds (diff)
downloadyuzu-0b631f22fc1c05e485defbfbc829157e4ed1fe4d.tar.gz
yuzu-0b631f22fc1c05e485defbfbc829157e4ed1fe4d.tar.xz
yuzu-0b631f22fc1c05e485defbfbc829157e4ed1fe4d.zip
renderer_opengl: Remove interop
Remove unused interop code from the OpenGL backend.
Diffstat (limited to 'src')
-rw-r--r--src/video_core/renderer_opengl/gl_buffer_cache.cpp11
-rw-r--r--src/video_core/renderer_opengl/gl_buffer_cache.h12
-rw-r--r--src/video_core/renderer_opengl/gl_device.cpp5
-rw-r--r--src/video_core/renderer_opengl/gl_device.h2
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer.cpp4
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer.h7
-rw-r--r--src/video_core/renderer_opengl/renderer_opengl.cpp88
-rw-r--r--src/video_core/renderer_opengl/renderer_opengl.h3
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 @@
7#include "video_core/buffer_cache/buffer_cache.h" 7#include "video_core/buffer_cache/buffer_cache.h"
8#include "video_core/renderer_opengl/gl_buffer_cache.h" 8#include "video_core/renderer_opengl/gl_buffer_cache.h"
9#include "video_core/renderer_opengl/gl_device.h" 9#include "video_core/renderer_opengl/gl_device.h"
10#include "video_core/vulkan_common/vulkan_device.h"
11#include "video_core/vulkan_common/vulkan_instance.h"
12#include "video_core/vulkan_common/vulkan_library.h"
13#include "video_core/vulkan_common/vulkan_memory_allocator.h"
14 10
15namespace OpenGL { 11namespace OpenGL {
16namespace { 12namespace {
@@ -66,11 +62,8 @@ void Buffer::MakeResident(GLenum access) noexcept {
66 glMakeNamedBufferResidentNV(buffer.handle, access); 62 glMakeNamedBufferResidentNV(buffer.handle, access);
67} 63}
68 64
69BufferCacheRuntime::BufferCacheRuntime(const Device& device_, const Vulkan::Device* vulkan_device_, 65BufferCacheRuntime::BufferCacheRuntime(const Device& device_)
70 Vulkan::MemoryAllocator* vulkan_memory_allocator_) 66 : device{device_}, has_fast_buffer_sub_data{device.HasFastBufferSubData()},
71 : device{device_}, vulkan_device{vulkan_device_},
72 vulkan_memory_allocator{vulkan_memory_allocator_},
73 has_fast_buffer_sub_data{device.HasFastBufferSubData()},
74 use_assembly_shaders{device.UseAssemblyShaders()}, 67 use_assembly_shaders{device.UseAssemblyShaders()},
75 has_unified_vertex_buffers{device.HasVertexBufferUnifiedMemory()}, 68 has_unified_vertex_buffers{device.HasVertexBufferUnifiedMemory()},
76 stream_buffer{has_fast_buffer_sub_data ? std::nullopt : std::make_optional<StreamBuffer>()} { 69 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 @@
15#include "video_core/renderer_opengl/gl_device.h" 15#include "video_core/renderer_opengl/gl_device.h"
16#include "video_core/renderer_opengl/gl_resource_manager.h" 16#include "video_core/renderer_opengl/gl_resource_manager.h"
17#include "video_core/renderer_opengl/gl_stream_buffer.h" 17#include "video_core/renderer_opengl/gl_stream_buffer.h"
18#include "video_core/vulkan_common/vulkan_device.h"
19#include "video_core/vulkan_common/vulkan_memory_allocator.h"
20
21namespace Vulkan {
22class Device;
23class MemoryAllocator;
24} // namespace Vulkan
25 18
26namespace OpenGL { 19namespace OpenGL {
27 20
@@ -59,8 +52,7 @@ class BufferCacheRuntime {
59public: 52public:
60 static constexpr u8 INVALID_BINDING = std::numeric_limits<u8>::max(); 53 static constexpr u8 INVALID_BINDING = std::numeric_limits<u8>::max();
61 54
62 explicit BufferCacheRuntime(const Device& device_, const Vulkan::Device* vulkan_device_, 55 explicit BufferCacheRuntime(const Device& device_);
63 Vulkan::MemoryAllocator* vulkan_memory_allocator_);
64 56
65 void CopyBuffer(Buffer& dst_buffer, Buffer& src_buffer, 57 void CopyBuffer(Buffer& dst_buffer, Buffer& src_buffer,
66 std::span<const VideoCommon::BufferCopy> copies); 58 std::span<const VideoCommon::BufferCopy> copies);
@@ -132,8 +124,6 @@ private:
132 }; 124 };
133 125
134 const Device& device; 126 const Device& device;
135 const Vulkan::Device* vulkan_device;
136 Vulkan::MemoryAllocator* vulkan_memory_allocator;
137 127
138 bool has_fast_buffer_sub_data = false; 128 bool has_fast_buffer_sub_data = false;
139 bool use_assembly_shaders = false; 129 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() {
197} 197}
198} // Anonymous namespace 198} // Anonymous namespace
199 199
200Device::Device(bool has_vulkan_instance) { 200Device::Device() {
201 if (!GLAD_GL_VERSION_4_6) { 201 if (!GLAD_GL_VERSION_4_6) {
202 LOG_ERROR(Render_OpenGL, "OpenGL 4.6 is not available"); 202 LOG_ERROR(Render_OpenGL, "OpenGL 4.6 is not available");
203 throw std::runtime_error{"Insufficient version"}; 203 throw std::runtime_error{"Insufficient version"};
@@ -246,8 +246,7 @@ Device::Device(bool has_vulkan_instance) {
246 246
247 use_assembly_shaders = Settings::values.use_assembly_shaders.GetValue() && 247 use_assembly_shaders = Settings::values.use_assembly_shaders.GetValue() &&
248 GLAD_GL_NV_gpu_program5 && GLAD_GL_NV_compute_program5 && 248 GLAD_GL_NV_gpu_program5 && GLAD_GL_NV_compute_program5 &&
249 GLAD_GL_NV_transform_feedback && GLAD_GL_NV_transform_feedback2 && 249 GLAD_GL_NV_transform_feedback && GLAD_GL_NV_transform_feedback2;
250 has_vulkan_instance;
251 250
252 use_asynchronous_shaders = Settings::values.use_asynchronous_shaders.GetValue(); 251 use_asynchronous_shaders = Settings::values.use_asynchronous_shaders.GetValue();
253 use_driver_cache = is_nvidia; 252 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:
19 u32 image{}; 19 u32 image{};
20 }; 20 };
21 21
22 explicit Device(bool has_vulkan_instance); 22 explicit Device();
23 explicit Device(std::nullptr_t); 23 explicit Device(std::nullptr_t);
24 24
25 u32 GetMaxUniformBuffers(Tegra::Engines::ShaderType shader_type) const noexcept { 25 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) {
167 167
168RasterizerOpenGL::RasterizerOpenGL(Core::Frontend::EmuWindow& emu_window_, Tegra::GPU& gpu_, 168RasterizerOpenGL::RasterizerOpenGL(Core::Frontend::EmuWindow& emu_window_, Tegra::GPU& gpu_,
169 Core::Memory::Memory& cpu_memory_, const Device& device_, 169 Core::Memory::Memory& cpu_memory_, const Device& device_,
170 const Vulkan::Device* vulkan_device,
171 Vulkan::MemoryAllocator* vulkan_memory_allocator,
172 ScreenInfo& screen_info_, ProgramManager& program_manager_, 170 ScreenInfo& screen_info_, ProgramManager& program_manager_,
173 StateTracker& state_tracker_) 171 StateTracker& state_tracker_)
174 : RasterizerAccelerated(cpu_memory_), gpu(gpu_), maxwell3d(gpu.Maxwell3D()), 172 : RasterizerAccelerated(cpu_memory_), gpu(gpu_), maxwell3d(gpu.Maxwell3D()),
@@ -176,7 +174,7 @@ RasterizerOpenGL::RasterizerOpenGL(Core::Frontend::EmuWindow& emu_window_, Tegra
176 screen_info(screen_info_), program_manager(program_manager_), state_tracker(state_tracker_), 174 screen_info(screen_info_), program_manager(program_manager_), state_tracker(state_tracker_),
177 texture_cache_runtime(device, program_manager, state_tracker), 175 texture_cache_runtime(device, program_manager, state_tracker),
178 texture_cache(texture_cache_runtime, *this, maxwell3d, kepler_compute, gpu_memory), 176 texture_cache(texture_cache_runtime, *this, maxwell3d, kepler_compute, gpu_memory),
179 buffer_cache_runtime(device, vulkan_device, vulkan_memory_allocator), 177 buffer_cache_runtime(device),
180 buffer_cache(*this, maxwell3d, kepler_compute, gpu_memory, cpu_memory_, buffer_cache_runtime), 178 buffer_cache(*this, maxwell3d, kepler_compute, gpu_memory, cpu_memory_, buffer_cache_runtime),
181 shader_cache(*this, emu_window_, gpu, maxwell3d, kepler_compute, gpu_memory, device), 179 shader_cache(*this, emu_window_, gpu, maxwell3d, kepler_compute, gpu_memory, device),
182 query_cache(*this, maxwell3d, gpu_memory), 180 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 {
46class MemoryManager; 46class MemoryManager;
47} 47}
48 48
49namespace Vulkan {
50class Device;
51class MemoryAllocator;
52} // namespace Vulkan
53
54namespace OpenGL { 49namespace OpenGL {
55 50
56struct ScreenInfo; 51struct ScreenInfo;
@@ -67,8 +62,6 @@ class RasterizerOpenGL : public VideoCore::RasterizerAccelerated {
67public: 62public:
68 explicit RasterizerOpenGL(Core::Frontend::EmuWindow& emu_window_, Tegra::GPU& gpu_, 63 explicit RasterizerOpenGL(Core::Frontend::EmuWindow& emu_window_, Tegra::GPU& gpu_,
69 Core::Memory::Memory& cpu_memory_, const Device& device_, 64 Core::Memory::Memory& cpu_memory_, const Device& device_,
70 const Vulkan::Device* vulkan_device,
71 Vulkan::MemoryAllocator* vulkan_memory_allocator,
72 ScreenInfo& screen_info_, ProgramManager& program_manager_, 65 ScreenInfo& screen_info_, ProgramManager& program_manager_,
73 StateTracker& state_tracker_); 66 StateTracker& state_tracker_);
74 ~RasterizerOpenGL() override; 67 ~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 @@
27#include "video_core/renderer_opengl/gl_shader_manager.h" 27#include "video_core/renderer_opengl/gl_shader_manager.h"
28#include "video_core/renderer_opengl/renderer_opengl.h" 28#include "video_core/renderer_opengl/renderer_opengl.h"
29#include "video_core/textures/decoders.h" 29#include "video_core/textures/decoders.h"
30#include "video_core/vulkan_common/vulkan_debug_callback.h"
31#include "video_core/vulkan_common/vulkan_device.h"
32#include "video_core/vulkan_common/vulkan_instance.h"
33#include "video_core/vulkan_common/vulkan_library.h"
34#include "video_core/vulkan_common/vulkan_memory_allocator.h"
35 30
36namespace OpenGL { 31namespace OpenGL {
37namespace { 32namespace {
@@ -127,93 +122,16 @@ void APIENTRY DebugHandler(GLenum source, GLenum type, GLuint id, GLenum severit
127 break; 122 break;
128 } 123 }
129} 124}
130
131Vulkan::vk::PhysicalDevice FindPhysicalDevice(Vulkan::vk::Instance& instance) {
132 using namespace Vulkan;
133 using UUID = std::array<GLubyte, GL_UUID_SIZE_EXT>;
134
135 GLint num_device_uuids;
136 glGetIntegerv(GL_NUM_DEVICE_UUIDS_EXT, &num_device_uuids);
137 std::vector<UUID> device_uuids(num_device_uuids);
138 for (GLint index = 0; index < num_device_uuids; ++index) {
139 glGetUnsignedBytei_vEXT(GL_DEVICE_UUID_EXT, 0, device_uuids[index].data());
140 }
141 UUID driver_uuid;
142 glGetUnsignedBytevEXT(GL_DRIVER_UUID_EXT, driver_uuid.data());
143
144 for (const VkPhysicalDevice raw_physical_device : instance.EnumeratePhysicalDevices()) {
145 VkPhysicalDeviceIDProperties device_id_properties{};
146 device_id_properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES;
147
148 VkPhysicalDeviceProperties2KHR properties{
149 .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR,
150 .pNext = &device_id_properties,
151 .properties{},
152 };
153 vk::PhysicalDevice physical_device(raw_physical_device, instance.Dispatch());
154 physical_device.GetProperties2KHR(properties);
155 if (!std::ranges::equal(device_id_properties.driverUUID, driver_uuid)) {
156 continue;
157 }
158 const auto it =
159 std::ranges::find_if(device_uuids, [&device_id_properties, driver_uuid](UUID uuid) {
160 return std::ranges::equal(device_id_properties.deviceUUID, uuid);
161 });
162 if (it != device_uuids.end()) {
163 return physical_device;
164 }
165 }
166 throw vk::Exception(VK_ERROR_INCOMPATIBLE_DRIVER);
167}
168} // Anonymous namespace 125} // Anonymous namespace
169 126
170struct VulkanObjects {
171 static std::unique_ptr<VulkanObjects> TryCreate() {
172 if (!GLAD_GL_EXT_memory_object) {
173 // Interop is not present
174 return nullptr;
175 }
176 const std::string_view vendor{reinterpret_cast<const char*>(glGetString(GL_VENDOR))};
177 if (vendor == "ATI Technologies Inc.") {
178 // Avoid using GL_EXT_memory_object on AMD, as it makes the GL driver crash
179 return nullptr;
180 }
181 if (!Settings::values.use_assembly_shaders.GetValue()) {
182 // We only need interop when assembly shaders are enabled
183 return nullptr;
184 }
185#ifdef __linux__
186 LOG_WARNING(Render_OpenGL, "Interop doesn't work on Linux at the moment");
187 return nullptr;
188#endif
189 try {
190 return std::make_unique<VulkanObjects>();
191 } catch (const Vulkan::vk::Exception& exception) {
192 LOG_ERROR(Render_OpenGL, "Failed to initialize Vulkan objects with error: {}",
193 exception.what());
194 return nullptr;
195 }
196 }
197
198 Common::DynamicLibrary library{Vulkan::OpenLibrary()};
199 Vulkan::vk::InstanceDispatch dld;
200 Vulkan::vk::Instance instance{Vulkan::CreateInstance(library, dld, VK_API_VERSION_1_1)};
201 Vulkan::Device device{*instance, FindPhysicalDevice(instance), nullptr, dld};
202 Vulkan::MemoryAllocator memory_allocator{device, true};
203};
204
205RendererOpenGL::RendererOpenGL(Core::TelemetrySession& telemetry_session_, 127RendererOpenGL::RendererOpenGL(Core::TelemetrySession& telemetry_session_,
206 Core::Frontend::EmuWindow& emu_window_, 128 Core::Frontend::EmuWindow& emu_window_,
207 Core::Memory::Memory& cpu_memory_, Tegra::GPU& gpu_, 129 Core::Memory::Memory& cpu_memory_, Tegra::GPU& gpu_,
208 std::unique_ptr<Core::Frontend::GraphicsContext> context_) 130 std::unique_ptr<Core::Frontend::GraphicsContext> context_)
209 : RendererBase{emu_window_, std::move(context_)}, telemetry_session{telemetry_session_}, 131 : RendererBase{emu_window_, std::move(context_)}, telemetry_session{telemetry_session_},
210 emu_window{emu_window_}, cpu_memory{cpu_memory_}, gpu{gpu_}, 132 emu_window{emu_window_}, cpu_memory{cpu_memory_}, gpu{gpu_}, state_tracker{gpu},
211 vulkan_objects{VulkanObjects::TryCreate()}, device{vulkan_objects != nullptr}, 133 program_manager{device},
212 state_tracker{gpu}, program_manager{device}, 134 rasterizer(emu_window, gpu, cpu_memory, device, screen_info, program_manager, state_tracker) {
213 rasterizer(emu_window, gpu, cpu_memory, device,
214 vulkan_objects ? &vulkan_objects->device : nullptr,
215 vulkan_objects ? &vulkan_objects->memory_allocator : nullptr, screen_info,
216 program_manager, state_tracker) {
217 if (Settings::values.renderer_debug && GLAD_GL_KHR_debug) { 135 if (Settings::values.renderer_debug && GLAD_GL_KHR_debug) {
218 glEnable(GL_DEBUG_OUTPUT); 136 glEnable(GL_DEBUG_OUTPUT);
219 glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS); 137 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;
38 38
39namespace OpenGL { 39namespace OpenGL {
40 40
41struct VulkanObjects;
42
43/// Structure used for storing information about the textures for the Switch screen 41/// Structure used for storing information about the textures for the Switch screen
44struct TextureInfo { 42struct TextureInfo {
45 OGLTexture resource; 43 OGLTexture resource;
@@ -101,7 +99,6 @@ private:
101 Core::Memory::Memory& cpu_memory; 99 Core::Memory::Memory& cpu_memory;
102 Tegra::GPU& gpu; 100 Tegra::GPU& gpu;
103 101
104 std::unique_ptr<VulkanObjects> vulkan_objects;
105 Device device; 102 Device device;
106 StateTracker state_tracker; 103 StateTracker state_tracker;
107 ProgramManager program_manager; 104 ProgramManager program_manager;