diff options
Diffstat (limited to 'src')
5 files changed, 21 insertions, 9 deletions
diff --git a/src/video_core/renderer_opengl/gl_resource_manager.cpp b/src/video_core/renderer_opengl/gl_resource_manager.cpp index a787e27d2..0ebcec427 100644 --- a/src/video_core/renderer_opengl/gl_resource_manager.cpp +++ b/src/video_core/renderer_opengl/gl_resource_manager.cpp | |||
| @@ -2,6 +2,7 @@ | |||
| 2 | // Licensed under GPLv2 or any later version | 2 | // Licensed under GPLv2 or any later version |
| 3 | // Refer to the license.txt file included. | 3 | // Refer to the license.txt file included. |
| 4 | 4 | ||
| 5 | #include <string_view> | ||
| 5 | #include <utility> | 6 | #include <utility> |
| 6 | #include <glad/glad.h> | 7 | #include <glad/glad.h> |
| 7 | #include "common/common_types.h" | 8 | #include "common/common_types.h" |
| @@ -82,11 +83,13 @@ void OGLSampler::Release() { | |||
| 82 | handle = 0; | 83 | handle = 0; |
| 83 | } | 84 | } |
| 84 | 85 | ||
| 85 | void OGLShader::Create(const char* source, GLenum type) { | 86 | void OGLShader::Create(std::string_view source, GLenum type) { |
| 86 | if (handle != 0) | 87 | if (handle != 0) { |
| 87 | return; | 88 | return; |
| 88 | if (source == nullptr) | 89 | } |
| 90 | if (source.empty()) { | ||
| 89 | return; | 91 | return; |
| 92 | } | ||
| 90 | 93 | ||
| 91 | MICROPROFILE_SCOPE(OpenGL_ResourceCreation); | 94 | MICROPROFILE_SCOPE(OpenGL_ResourceCreation); |
| 92 | handle = GLShader::LoadShader(source, type); | 95 | handle = GLShader::LoadShader(source, type); |
diff --git a/src/video_core/renderer_opengl/gl_resource_manager.h b/src/video_core/renderer_opengl/gl_resource_manager.h index b05cb641c..f48398669 100644 --- a/src/video_core/renderer_opengl/gl_resource_manager.h +++ b/src/video_core/renderer_opengl/gl_resource_manager.h | |||
| @@ -4,6 +4,7 @@ | |||
| 4 | 4 | ||
| 5 | #pragma once | 5 | #pragma once |
| 6 | 6 | ||
| 7 | #include <string_view> | ||
| 7 | #include <utility> | 8 | #include <utility> |
| 8 | #include <glad/glad.h> | 9 | #include <glad/glad.h> |
| 9 | #include "common/common_types.h" | 10 | #include "common/common_types.h" |
| @@ -127,7 +128,7 @@ public: | |||
| 127 | return *this; | 128 | return *this; |
| 128 | } | 129 | } |
| 129 | 130 | ||
| 130 | void Create(const char* source, GLenum type); | 131 | void Create(std::string_view source, GLenum type); |
| 131 | 132 | ||
| 132 | void Release(); | 133 | void Release(); |
| 133 | 134 | ||
diff --git a/src/video_core/renderer_opengl/gl_shader_cache.cpp b/src/video_core/renderer_opengl/gl_shader_cache.cpp index eb49a36bf..a07d56ef0 100644 --- a/src/video_core/renderer_opengl/gl_shader_cache.cpp +++ b/src/video_core/renderer_opengl/gl_shader_cache.cpp | |||
| @@ -22,6 +22,7 @@ | |||
| 22 | #include "video_core/memory_manager.h" | 22 | #include "video_core/memory_manager.h" |
| 23 | #include "video_core/renderer_opengl/gl_arb_decompiler.h" | 23 | #include "video_core/renderer_opengl/gl_arb_decompiler.h" |
| 24 | #include "video_core/renderer_opengl/gl_rasterizer.h" | 24 | #include "video_core/renderer_opengl/gl_rasterizer.h" |
| 25 | #include "video_core/renderer_opengl/gl_resource_manager.h" | ||
| 25 | #include "video_core/renderer_opengl/gl_shader_cache.h" | 26 | #include "video_core/renderer_opengl/gl_shader_cache.h" |
| 26 | #include "video_core/renderer_opengl/gl_shader_decompiler.h" | 27 | #include "video_core/renderer_opengl/gl_shader_decompiler.h" |
| 27 | #include "video_core/renderer_opengl/gl_shader_disk_cache.h" | 28 | #include "video_core/renderer_opengl/gl_shader_disk_cache.h" |
diff --git a/src/video_core/renderer_opengl/gl_shader_util.cpp b/src/video_core/renderer_opengl/gl_shader_util.cpp index 9e74eda0d..4bf0d6090 100644 --- a/src/video_core/renderer_opengl/gl_shader_util.cpp +++ b/src/video_core/renderer_opengl/gl_shader_util.cpp | |||
| @@ -2,6 +2,7 @@ | |||
| 2 | // Licensed under GPLv2 or any later version | 2 | // Licensed under GPLv2 or any later version |
| 3 | // Refer to the license.txt file included. | 3 | // Refer to the license.txt file included. |
| 4 | 4 | ||
| 5 | #include <string_view> | ||
| 5 | #include <vector> | 6 | #include <vector> |
| 6 | #include <glad/glad.h> | 7 | #include <glad/glad.h> |
| 7 | #include "common/assert.h" | 8 | #include "common/assert.h" |
| @@ -11,7 +12,8 @@ | |||
| 11 | namespace OpenGL::GLShader { | 12 | namespace OpenGL::GLShader { |
| 12 | 13 | ||
| 13 | namespace { | 14 | namespace { |
| 14 | const char* GetStageDebugName(GLenum type) { | 15 | |
| 16 | std::string_view StageDebugName(GLenum type) { | ||
| 15 | switch (type) { | 17 | switch (type) { |
| 16 | case GL_VERTEX_SHADER: | 18 | case GL_VERTEX_SHADER: |
| 17 | return "vertex"; | 19 | return "vertex"; |
| @@ -25,12 +27,17 @@ const char* GetStageDebugName(GLenum type) { | |||
| 25 | UNIMPLEMENTED(); | 27 | UNIMPLEMENTED(); |
| 26 | return "unknown"; | 28 | return "unknown"; |
| 27 | } | 29 | } |
| 30 | |||
| 28 | } // Anonymous namespace | 31 | } // Anonymous namespace |
| 29 | 32 | ||
| 30 | GLuint LoadShader(const char* source, GLenum type) { | 33 | GLuint LoadShader(std::string_view source, GLenum type) { |
| 31 | const char* debug_type = GetStageDebugName(type); | 34 | const std::string_view debug_type = StageDebugName(type); |
| 32 | const GLuint shader_id = glCreateShader(type); | 35 | const GLuint shader_id = glCreateShader(type); |
| 33 | glShaderSource(shader_id, 1, &source, nullptr); | 36 | |
| 37 | const GLchar* source_string = source.data(); | ||
| 38 | const GLint source_length = static_cast<GLint>(source.size()); | ||
| 39 | |||
| 40 | glShaderSource(shader_id, 1, &source_string, &source_length); | ||
| 34 | LOG_DEBUG(Render_OpenGL, "Compiling {} shader...", debug_type); | 41 | LOG_DEBUG(Render_OpenGL, "Compiling {} shader...", debug_type); |
| 35 | glCompileShader(shader_id); | 42 | glCompileShader(shader_id); |
| 36 | 43 | ||
diff --git a/src/video_core/renderer_opengl/gl_shader_util.h b/src/video_core/renderer_opengl/gl_shader_util.h index 03b7548c2..1b770532e 100644 --- a/src/video_core/renderer_opengl/gl_shader_util.h +++ b/src/video_core/renderer_opengl/gl_shader_util.h | |||
| @@ -38,7 +38,7 @@ void LogShaderSource(T... shaders) { | |||
| 38 | * @param source String of the GLSL shader program | 38 | * @param source String of the GLSL shader program |
| 39 | * @param type Type of the shader (GL_VERTEX_SHADER, GL_GEOMETRY_SHADER or GL_FRAGMENT_SHADER) | 39 | * @param type Type of the shader (GL_VERTEX_SHADER, GL_GEOMETRY_SHADER or GL_FRAGMENT_SHADER) |
| 40 | */ | 40 | */ |
| 41 | GLuint LoadShader(const char* source, GLenum type); | 41 | GLuint LoadShader(std::string_view source, GLenum type); |
| 42 | 42 | ||
| 43 | /** | 43 | /** |
| 44 | * Utility function to create and compile an OpenGL GLSL shader program (vertex + fragment shader) | 44 | * Utility function to create and compile an OpenGL GLSL shader program (vertex + fragment shader) |