[Android] Qualcomm glGetShaderInfoLog returns a max of 1024 bytes(tested) for the log, and glGetShaderiv with GL_INFO_LOG_LENGTH /always/ returns 0 on compile failure.
This commit is contained in:
parent
fbb82ccab3
commit
6143594db6
|
@ -28,6 +28,7 @@ namespace DriverDetails
|
||||||
BugInfo m_qualcommbugs[] = {
|
BugInfo m_qualcommbugs[] = {
|
||||||
{BUG_NODYNUBOACCESS, 300, 14.0, -1.0},
|
{BUG_NODYNUBOACCESS, 300, 14.0, -1.0},
|
||||||
{BUG_BROKENCENTROID, 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;
|
std::map<std::pair<Vendor, Bug>, BugInfo> m_bugs;
|
||||||
|
|
|
@ -42,6 +42,16 @@ namespace DriverDetails
|
||||||
// When MSAA is disabled, it acts like a regular in/out
|
// When MSAA is disabled, it acts like a regular in/out
|
||||||
// Tends to cause the driver to render full white or black
|
// Tends to cause the driver to render full white or black
|
||||||
BUG_BROKENCENTROID,
|
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
|
// Initializes our internal vendor, device family, and driver version
|
||||||
|
|
|
@ -335,15 +335,13 @@ GLuint ProgramShaderCache::CompileSingleShader (GLuint type, const char* code )
|
||||||
glGetShaderiv(result, GL_COMPILE_STATUS, &compileStatus);
|
glGetShaderiv(result, GL_COMPILE_STATUS, &compileStatus);
|
||||||
GLsizei length = 0;
|
GLsizei length = 0;
|
||||||
glGetShaderiv(result, GL_INFO_LOG_LENGTH, &length);
|
glGetShaderiv(result, GL_INFO_LOG_LENGTH, &length);
|
||||||
|
|
||||||
|
if (DriverDetails::HasBug(DriverDetails::BUG_BROKENINFOLOG))
|
||||||
|
length = 1024;
|
||||||
|
|
||||||
if (compileStatus != GL_TRUE || (length > 1 && DEBUG_GLSL))
|
if (compileStatus != GL_TRUE || (length > 1 && DEBUG_GLSL))
|
||||||
{
|
{
|
||||||
GLsizei charsWritten;
|
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];
|
GLchar* infoLog = new GLchar[length];
|
||||||
glGetShaderInfoLog(result, length, &charsWritten, infoLog);
|
glGetShaderInfoLog(result, length, &charsWritten, infoLog);
|
||||||
ERROR_LOG(VIDEO, "PS Shader info log:\n%s", infoLog);
|
ERROR_LOG(VIDEO, "PS Shader info log:\n%s", infoLog);
|
||||||
|
|
Loading…
Reference in New Issue