Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[Android] Qualcomm glGetShaderInfoLog returns a max of 1024 bytes(tes…
…ted) for the log, and glGetShaderiv with GL_INFO_LOG_LENGTH /always/ returns 0 on compile failure.
  • Loading branch information
Sonicadvance1 committed Jun 18, 2013
1 parent fbb82cc commit 6143594
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 6 deletions.
1 change: 1 addition & 0 deletions Source/Core/VideoCommon/Src/DriverDetails.cpp
Expand Up @@ -28,6 +28,7 @@ namespace DriverDetails
BugInfo m_qualcommbugs[] = {
{BUG_NODYNUBOACCESS, 300, 14.0, -1.0},
{BUG_BROKENCENTROID, 300, 14.0, -1.0},
{BUG_BROKENINFOLOG, 300, -1.0, -1.0},
};

std::map<std::pair<Vendor, Bug>, BugInfo> m_bugs;
Expand Down
10 changes: 10 additions & 0 deletions Source/Core/VideoCommon/Src/DriverDetails.h
Expand Up @@ -42,6 +42,16 @@ namespace DriverDetails
// When MSAA is disabled, it acts like a regular in/out
// Tends to cause the driver to render full white or black
BUG_BROKENCENTROID,
// Bug: INFO_LOG_LENGTH broken
// Affected devices: Qualcomm/Adreno
// Started Version: ? (Noticed on v14)
// Ended Version: -1
// When compiling a shader, it is important that when it fails,
// you first get the length of the information log prior to grabbing it.
// This allows you to allocate an array to store all of the log
// Adreno devices /always/ return 0 when querying GL_INFO_LOG_LENGTH
// They also max out at 1024 bytes(1023 characters + null terminator) for the log
BUG_BROKENINFOLOG,
};

// Initializes our internal vendor, device family, and driver version
Expand Down
10 changes: 4 additions & 6 deletions Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp
Expand Up @@ -335,15 +335,13 @@ GLuint ProgramShaderCache::CompileSingleShader (GLuint type, const char* code )
glGetShaderiv(result, GL_COMPILE_STATUS, &compileStatus);
GLsizei length = 0;
glGetShaderiv(result, GL_INFO_LOG_LENGTH, &length);

if (DriverDetails::HasBug(DriverDetails::BUG_BROKENINFOLOG))
length = 1024;

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);
Expand Down

0 comments on commit 6143594

Please sign in to comment.