diff options
| author | 2016-12-05 22:59:18 -0800 | |
|---|---|---|
| committer | 2016-12-05 22:59:18 -0800 | |
| commit | c0d9e4e43572b3bcc69092ababbca010aca404d1 (patch) | |
| tree | 8e95674fe6280a5e5c4b926bddd69f1b12f2c23d /src | |
| parent | Merge pull request #2200 from j-selby/fix-mingw-crash (diff) | |
| parent | ASSERT that shader was linked successfully (diff) | |
| download | yuzu-c0d9e4e43572b3bcc69092ababbca010aca404d1.tar.gz yuzu-c0d9e4e43572b3bcc69092ababbca010aca404d1.tar.xz yuzu-c0d9e4e43572b3bcc69092ababbca010aca404d1.zip | |
Merge pull request #2264 from JayFoxRox/print-shader
Print shaders in case of error
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.cpp | 4 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_shader_util.cpp | 14 |
2 files changed, 14 insertions, 4 deletions
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index 3f2255e06..ba65db419 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp | |||
| @@ -1083,7 +1083,9 @@ void RasterizerOpenGL::SetShader() { | |||
| 1083 | GLint block_size; | 1083 | GLint block_size; |
| 1084 | glGetActiveUniformBlockiv(current_shader->shader.handle, block_index, | 1084 | glGetActiveUniformBlockiv(current_shader->shader.handle, block_index, |
| 1085 | GL_UNIFORM_BLOCK_DATA_SIZE, &block_size); | 1085 | GL_UNIFORM_BLOCK_DATA_SIZE, &block_size); |
| 1086 | ASSERT_MSG(block_size == sizeof(UniformData), "Uniform block size did not match!"); | 1086 | ASSERT_MSG(block_size == sizeof(UniformData), |
| 1087 | "Uniform block size did not match! Got %d, expected %zu", | ||
| 1088 | static_cast<int>(block_size), sizeof(UniformData)); | ||
| 1087 | glUniformBlockBinding(current_shader->shader.handle, block_index, 0); | 1089 | glUniformBlockBinding(current_shader->shader.handle, block_index, 0); |
| 1088 | 1090 | ||
| 1089 | // Update uniforms | 1091 | // Update uniforms |
diff --git a/src/video_core/renderer_opengl/gl_shader_util.cpp b/src/video_core/renderer_opengl/gl_shader_util.cpp index fe07aa6eb..4da241d83 100644 --- a/src/video_core/renderer_opengl/gl_shader_util.cpp +++ b/src/video_core/renderer_opengl/gl_shader_util.cpp | |||
| @@ -4,6 +4,7 @@ | |||
| 4 | 4 | ||
| 5 | #include <vector> | 5 | #include <vector> |
| 6 | #include <glad/glad.h> | 6 | #include <glad/glad.h> |
| 7 | #include "common/assert.h" | ||
| 7 | #include "common/logging/log.h" | 8 | #include "common/logging/log.h" |
| 8 | #include "video_core/renderer_opengl/gl_shader_util.h" | 9 | #include "video_core/renderer_opengl/gl_shader_util.h" |
| 9 | 10 | ||
| @@ -31,7 +32,7 @@ GLuint LoadProgram(const char* vertex_shader, const char* fragment_shader) { | |||
| 31 | if (info_log_length > 1) { | 32 | if (info_log_length > 1) { |
| 32 | std::vector<char> vertex_shader_error(info_log_length); | 33 | std::vector<char> vertex_shader_error(info_log_length); |
| 33 | glGetShaderInfoLog(vertex_shader_id, info_log_length, nullptr, &vertex_shader_error[0]); | 34 | glGetShaderInfoLog(vertex_shader_id, info_log_length, nullptr, &vertex_shader_error[0]); |
| 34 | if (result) { | 35 | if (result == GL_TRUE) { |
| 35 | LOG_DEBUG(Render_OpenGL, "%s", &vertex_shader_error[0]); | 36 | LOG_DEBUG(Render_OpenGL, "%s", &vertex_shader_error[0]); |
| 36 | } else { | 37 | } else { |
| 37 | LOG_ERROR(Render_OpenGL, "Error compiling vertex shader:\n%s", &vertex_shader_error[0]); | 38 | LOG_ERROR(Render_OpenGL, "Error compiling vertex shader:\n%s", &vertex_shader_error[0]); |
| @@ -51,7 +52,7 @@ GLuint LoadProgram(const char* vertex_shader, const char* fragment_shader) { | |||
| 51 | if (info_log_length > 1) { | 52 | if (info_log_length > 1) { |
| 52 | std::vector<char> fragment_shader_error(info_log_length); | 53 | std::vector<char> fragment_shader_error(info_log_length); |
| 53 | glGetShaderInfoLog(fragment_shader_id, info_log_length, nullptr, &fragment_shader_error[0]); | 54 | glGetShaderInfoLog(fragment_shader_id, info_log_length, nullptr, &fragment_shader_error[0]); |
| 54 | if (result) { | 55 | if (result == GL_TRUE) { |
| 55 | LOG_DEBUG(Render_OpenGL, "%s", &fragment_shader_error[0]); | 56 | LOG_DEBUG(Render_OpenGL, "%s", &fragment_shader_error[0]); |
| 56 | } else { | 57 | } else { |
| 57 | LOG_ERROR(Render_OpenGL, "Error compiling fragment shader:\n%s", | 58 | LOG_ERROR(Render_OpenGL, "Error compiling fragment shader:\n%s", |
| @@ -75,13 +76,20 @@ GLuint LoadProgram(const char* vertex_shader, const char* fragment_shader) { | |||
| 75 | if (info_log_length > 1) { | 76 | if (info_log_length > 1) { |
| 76 | std::vector<char> program_error(info_log_length); | 77 | std::vector<char> program_error(info_log_length); |
| 77 | glGetProgramInfoLog(program_id, info_log_length, nullptr, &program_error[0]); | 78 | glGetProgramInfoLog(program_id, info_log_length, nullptr, &program_error[0]); |
| 78 | if (result) { | 79 | if (result == GL_TRUE) { |
| 79 | LOG_DEBUG(Render_OpenGL, "%s", &program_error[0]); | 80 | LOG_DEBUG(Render_OpenGL, "%s", &program_error[0]); |
| 80 | } else { | 81 | } else { |
| 81 | LOG_ERROR(Render_OpenGL, "Error linking shader:\n%s", &program_error[0]); | 82 | LOG_ERROR(Render_OpenGL, "Error linking shader:\n%s", &program_error[0]); |
| 82 | } | 83 | } |
| 83 | } | 84 | } |
| 84 | 85 | ||
| 86 | // If the program linking failed at least one of the shaders was probably bad | ||
| 87 | if (result == GL_FALSE) { | ||
| 88 | LOG_ERROR(Render_OpenGL, "Vertex shader:\n%s", vertex_shader); | ||
| 89 | LOG_ERROR(Render_OpenGL, "Fragment shader:\n%s", fragment_shader); | ||
| 90 | } | ||
| 91 | ASSERT_MSG(result == GL_TRUE, "Shader not linked"); | ||
| 92 | |||
| 85 | glDeleteShader(vertex_shader_id); | 93 | glDeleteShader(vertex_shader_id); |
| 86 | glDeleteShader(fragment_shader_id); | 94 | glDeleteShader(fragment_shader_id); |
| 87 | 95 | ||