From 0032821864a679d09c252249c74d1bf8deef9baa Mon Sep 17 00:00:00 2001 From: ReinUsesLisp Date: Wed, 10 Apr 2019 15:56:12 -0300 Subject: gl_device: Implement interface and add uniform offset alignment --- src/video_core/renderer_opengl/gl_device.cpp | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 src/video_core/renderer_opengl/gl_device.cpp (limited to 'src/video_core/renderer_opengl/gl_device.cpp') diff --git a/src/video_core/renderer_opengl/gl_device.cpp b/src/video_core/renderer_opengl/gl_device.cpp new file mode 100644 index 000000000..b7ca3dca4 --- /dev/null +++ b/src/video_core/renderer_opengl/gl_device.cpp @@ -0,0 +1,27 @@ +// Copyright 2019 yuzu Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include +#include + +#include "video_core/renderer_opengl/gl_device.h" + +namespace OpenGL { + +namespace { +template +T GetInteger(GLenum pname) { + GLint temporary; + glGetIntegerv(pname, &temporary); + return static_cast(temporary); +} +} // Anonymous namespace + +Device::Device() = default; + +void Device::Initialize() { + uniform_buffer_alignment = GetInteger(GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT); +} + +} // namespace OpenGL -- cgit v1.2.3 From f15c59a164a7c4deafb77e9fc698cdf9a08691ce Mon Sep 17 00:00:00 2001 From: ReinUsesLisp Date: Wed, 10 Apr 2019 18:03:52 -0300 Subject: gl_shader_decompiler: Use variable AOFFI on supported hardware --- src/video_core/renderer_opengl/gl_device.cpp | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) (limited to 'src/video_core/renderer_opengl/gl_device.cpp') diff --git a/src/video_core/renderer_opengl/gl_device.cpp b/src/video_core/renderer_opengl/gl_device.cpp index b7ca3dca4..b6d9e0ddb 100644 --- a/src/video_core/renderer_opengl/gl_device.cpp +++ b/src/video_core/renderer_opengl/gl_device.cpp @@ -5,6 +5,7 @@ #include #include +#include "common/logging/log.h" #include "video_core/renderer_opengl/gl_device.h" namespace OpenGL { @@ -18,10 +19,27 @@ T GetInteger(GLenum pname) { } } // Anonymous namespace -Device::Device() = default; - -void Device::Initialize() { +Device::Device() { uniform_buffer_alignment = GetInteger(GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT); + has_variable_aoffi = TestVariableAoffi(); +} + +bool Device::TestVariableAoffi() { + const GLchar* AOFFI_TEST = R"(#version 430 core +uniform sampler2D tex; +uniform ivec2 variable_offset; +void main() { + gl_Position = textureOffset(tex, vec2(0), variable_offset); +} +)"; + const GLuint shader{glCreateShaderProgramv(GL_VERTEX_SHADER, 1, &AOFFI_TEST)}; + GLint link_status{}; + glGetProgramiv(shader, GL_LINK_STATUS, &link_status); + glDeleteProgram(shader); + + const bool supported{link_status == GL_TRUE}; + LOG_INFO(Render_OpenGL, "Renderer_VariableAOFFI: {}", supported); + return supported; } } // namespace OpenGL -- cgit v1.2.3