From a295a3eb56a3bd0fef815d640cc632af089cdf59 Mon Sep 17 00:00:00 2001 From: degasus Date: Sat, 4 May 2013 23:30:13 +0200 Subject: ogl: report shader compilation issues in the same way as other backends --- .../Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 26 ++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) (limited to 'Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp') diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 153fe748f1..8689ecbd4e 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -23,6 +23,7 @@ u32 ProgramShaderCache::s_ubo_buffer_size; bool ProgramShaderCache::s_ubo_dirty; static StreamBuffer *s_buffer; +static int num_failures = 0; LinearDiskCache g_program_disk_cache; static GLuint CurrentProgram = 0; @@ -287,11 +288,19 @@ bool ProgramShaderCache::CompileShader ( SHADER& shader, const char* vcode, cons glGetProgramInfoLog(pid, length, &charsWritten, infoLog); ERROR_LOG(VIDEO, "Program info log:\n%s", infoLog); char szTemp[MAX_PATH]; - sprintf(szTemp, "%sp_%d.txt", File::GetUserPath(D_DUMP_IDX).c_str(), pid); + sprintf(szTemp, "%sbad_p_%d.txt", File::GetUserPath(D_DUMP_IDX).c_str(), num_failures++); std::ofstream file; OpenFStream(file, szTemp, std::ios_base::out); file << infoLog << s_glsl_header << vcode << s_glsl_header << pcode; file.close(); + + PanicAlert("Failed to link shaders!\nThis usually happens when trying to use Dolphin with an outdated GPU or integrated GPU like the Intel GMA series.\n\nIf you're sure this is Dolphin's error anyway, post the contents of %s along with this error message at the forums.\n\nDebug info (%s, %s, %s):\n%s", + szTemp, + g_ogl_config.gl_vendor, + g_ogl_config.gl_renderer, + g_ogl_config.gl_version, + infoLog); + delete [] infoLog; } if (linkStatus != GL_TRUE) @@ -328,11 +337,24 @@ GLuint ProgramShaderCache::CompileSingleShader (GLuint type, const char* code ) glGetShaderInfoLog(result, length, &charsWritten, infoLog); ERROR_LOG(VIDEO, "PS Shader info log:\n%s", infoLog); char szTemp[MAX_PATH]; - sprintf(szTemp, "%sps_%d.txt", File::GetUserPath(D_DUMP_IDX).c_str(), result); + sprintf(szTemp, + "%sbad_%s_%04i.txt", + File::GetUserPath(D_DUMP_IDX).c_str(), + type==GL_VERTEX_SHADER ? "vs" : "ps", + num_failures++); std::ofstream file; OpenFStream(file, szTemp, std::ios_base::out); file << infoLog << s_glsl_header << code; file.close(); + + PanicAlert("Failed to compile %s shader!\nThis usually happens when trying to use Dolphin with an outdated GPU or integrated GPU like the Intel GMA series.\n\nIf you're sure this is Dolphin's error anyway, post the contents of %s along with this error message at the forums.\n\nDebug info (%s, %s, %s):\n%s", + type==GL_VERTEX_SHADER ? "vertex" : "pixel", + szTemp, + g_ogl_config.gl_vendor, + g_ogl_config.gl_renderer, + g_ogl_config.gl_version, + infoLog); + delete[] infoLog; } if (compileStatus != GL_TRUE) -- cgit v1.2.3 From cb5b9c0327c1223975b2fdae28b0db7ef5a92b77 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sun, 5 May 2013 23:22:21 -0500 Subject: [Android] Add GLSLES3 to the GLSL version enums. Add in the version and precision qualifier to the shader header. --- Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp') diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 8689ecbd4e..d24ab5a6a0 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -501,6 +501,7 @@ void ProgramShaderCache::CreateHeader ( void ) GLSL_VERSION v = g_ogl_config.eSupportedGLSLVersion; snprintf(s_glsl_header, sizeof(s_glsl_header), "#version %s\n" + "%s\n" // default precision "%s\n" // tex_rect "%s\n" // ubo @@ -528,9 +529,10 @@ void ProgramShaderCache::CreateHeader ( void ) "%s\n" "#define COLOROUT(name) %s\n" - , v==GLSL_120 ? "120" : v==GLSL_130 ? "130" : "140" + , v==GLSLES3 ? "300 es" : v==GLSL_120 ? "120" : v==GLSL_130 ? "130" : "140" + , v==GLSLES3 ? "precision highp float;" : "" , v<=GLSL_130 ? "#extension GL_ARB_texture_rectangle : enable" : "#define texture2DRect texture" - , g_ActiveConfig.backend_info.bSupportsGLSLUBO && v!=GLSL_140 ? "#extension GL_ARB_uniform_buffer_object : enable" : "" + , g_ActiveConfig.backend_info.bSupportsGLSLUBO && v Date: Mon, 6 May 2013 06:43:04 -0500 Subject: [Android] More GLES3 things. Disable Framedumping and MSAA rendering. Remove the HLSL->GLSL shader defines since Qualcomm doesn't support this in their shader compiler. Now they get chosen in our shader generator instead. --- Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) (limited to 'Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp') diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index d24ab5a6a0..1b5ab26c73 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -103,6 +103,7 @@ void SHADER::SetProgramVariables() void SHADER::SetProgramBindings() { +#ifndef USE_GLES3 if (g_ActiveConfig.backend_info.bSupportsDualSourceBlend) { // So we do support extended blending @@ -120,7 +121,7 @@ void SHADER::SetProgramBindings() // ogl2 shaders don't need to bind output colors. // gl_FragColor already point to color channel } - +#endif // Need to set some attribute locations glBindAttribLocation(glprogid, SHADER_POSITION_ATTRIB, "rawpos"); @@ -516,11 +517,6 @@ void ProgramShaderCache::CreateHeader ( void ) "#define float3 vec3\n" "#define float4 vec4\n" - // hlsl to glsl function translation - "#define frac(x) fract(x)\n" - "#define saturate(x) clamp(x, 0.0f, 1.0f)\n" - "#define lerp(x, y, z) mix(x, y, z)\n" - // glsl 120 hack "%s\n" "%s\n" -- cgit v1.2.3 From 39c9516197c208bb918ce87b968ad32e703b4413 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Fri, 17 May 2013 21:12:21 -0500 Subject: [Android] Qualcomm driver has a bug where it returns an invalid length for GL_INFO_LOG_LENGTH with glGetShaderiv. Qualcomm drivers seem to max out at ~512bytes returned from glGetShaderInfoLog so this is a reasonable max. --- Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp') diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 1b5ab26c73..1c85177352 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -334,6 +334,12 @@ GLuint ProgramShaderCache::CompileSingleShader (GLuint type, const char* code ) if (compileStatus != GL_TRUE || (length > 1 && DEBUG_GLSL)) { GLsizei charsWritten; +#ifdef USE_GLES3 + // This is a bug in the Qualcomm OpenGL Driver + // The length returned is garbage length so we need to set a default max + // XXX: Check if qualcomm driver here + length = 1024; // Qualcomm driver maxes out at 512 bytes returned from glGetShaderInfoLog anyway +#endif GLchar* infoLog = new GLchar[length]; glGetShaderInfoLog(result, length, &charsWritten, infoLog); ERROR_LOG(VIDEO, "PS Shader info log:\n%s", infoLog); @@ -527,7 +533,7 @@ void ProgramShaderCache::CreateHeader ( void ) , v==GLSLES3 ? "300 es" : v==GLSL_120 ? "120" : v==GLSL_130 ? "130" : "140" , v==GLSLES3 ? "precision highp float;" : "" - , v<=GLSL_130 ? "#extension GL_ARB_texture_rectangle : enable" : "#define texture2DRect texture" + , v==GLSLES3 ? "" : v<=GLSL_130 ? "#extension GL_ARB_texture_rectangle : enable" : "#define texture2DRect texture" , g_ActiveConfig.backend_info.bSupportsGLSLUBO && v Date: Thu, 23 May 2013 21:07:01 +0200 Subject: add new statistics for gpu buffer streaming --- Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp') diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 1c85177352..2df1f47760 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -171,6 +171,8 @@ void ProgramShaderCache::UploadConstants() glBindBufferRange(GL_UNIFORM_BUFFER, 1, s_buffer->getBuffer(), offset, s_ps_data_size); glBindBufferRange(GL_UNIFORM_BUFFER, 2, s_buffer->getBuffer(), offset + s_vs_data_offset, s_vs_data_size); s_ubo_dirty = false; + + ADDSTAT(stats.thisFrame.bytesUniformStreamed, s_ubo_buffer_size); } } -- cgit v1.2.3 From 703a51e4c06b4177a23a36861ace2516b8b5b1bf Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Tue, 11 Jun 2013 08:33:56 -0500 Subject: [Android] Start of *working* GLES3 support. Needs to be able to compile in Windows still. --- Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp') diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 2df1f47760..4588317ab8 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -3,6 +3,7 @@ // Refer to the license.txt file included. #include "ProgramShaderCache.h" +#include "DriverDetails" #include "MathUtil.h" #include "StreamBuffer.h" #include "Debugger.h" @@ -532,15 +533,15 @@ void ProgramShaderCache::CreateHeader ( void ) "%s\n" "%s\n" "#define COLOROUT(name) %s\n" - + , v==GLSLES3 ? "300 es" : v==GLSL_120 ? "120" : v==GLSL_130 ? "130" : "140" , v==GLSLES3 ? "precision highp float;" : "" , v==GLSLES3 ? "" : v<=GLSL_130 ? "#extension GL_ARB_texture_rectangle : enable" : "#define texture2DRect texture" , g_ActiveConfig.backend_info.bSupportsGLSLUBO && v Date: Tue, 11 Jun 2013 08:38:45 -0500 Subject: Build Fix --- Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp') diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 4588317ab8..d07dbb6246 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -540,8 +540,8 @@ void ProgramShaderCache::CreateHeader ( void ) , g_ActiveConfig.backend_info.bSupportsGLSLUBO && v Date: Tue, 11 Jun 2013 08:41:30 -0500 Subject: Build Fix 2x --- Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp') diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index d07dbb6246..90cf401687 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -3,7 +3,7 @@ // Refer to the license.txt file included. #include "ProgramShaderCache.h" -#include "DriverDetails" +#include "DriverDetails.h" #include "MathUtil.h" #include "StreamBuffer.h" #include "Debugger.h" -- cgit v1.2.3