mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-23 06:09:50 -06:00
also check for glsl errors on linking, activation GLSL_DEBUG again (slowdown on shader compilation)
This commit is contained in:
@ -28,9 +28,6 @@
|
|||||||
|
|
||||||
#include "GLUtil.h"
|
#include "GLUtil.h"
|
||||||
|
|
||||||
// this should be removed in future, but as long as glsl is unstable, we should really read this messages
|
|
||||||
#define DEBUG_GLSL
|
|
||||||
|
|
||||||
GLWindow GLWin;
|
GLWindow GLWin;
|
||||||
cInterfaceBase *GLInterface;
|
cInterfaceBase *GLInterface;
|
||||||
|
|
||||||
|
@ -69,6 +69,9 @@ bool OpenGL_ReportFBOError(const char *function, const char *file, int line);
|
|||||||
#define GL_REPORT_PROGRAM_ERROR() (void)0
|
#define GL_REPORT_PROGRAM_ERROR() (void)0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// this should be removed in future, but as long as glsl is unstable, we should really read this messages
|
||||||
|
#define DEBUG_GLSL
|
||||||
|
|
||||||
// Isn't defined if we aren't using GLEW 1.6
|
// Isn't defined if we aren't using GLEW 1.6
|
||||||
#ifndef GL_ONE_MINUS_SRC1_ALPHA
|
#ifndef GL_ONE_MINUS_SRC1_ALPHA
|
||||||
#define GL_ONE_MINUS_SRC1_ALPHA 0x88FB
|
#define GL_ONE_MINUS_SRC1_ALPHA 0x88FB
|
||||||
|
@ -145,6 +145,7 @@ bool PixelShaderCache::CompilePixelShader(FRAGMENTSHADER& ps, const char* pstrpr
|
|||||||
char szTemp[MAX_PATH];
|
char szTemp[MAX_PATH];
|
||||||
sprintf(szTemp, "ps_%d.txt", result);
|
sprintf(szTemp, "ps_%d.txt", result);
|
||||||
FILE *fp = fopen(szTemp, "wb");
|
FILE *fp = fopen(szTemp, "wb");
|
||||||
|
fwrite(infoLog, strlen(infoLog), 1, fp);
|
||||||
fwrite(pstrprogram, strlen(pstrprogram), 1, fp);
|
fwrite(pstrprogram, strlen(pstrprogram), 1, fp);
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
delete[] infoLog;
|
delete[] infoLog;
|
||||||
|
@ -184,6 +184,48 @@ void ProgramShaderCache::SetBothShaders(GLuint PS, GLuint VS)
|
|||||||
SetProgramBindings(entry);
|
SetProgramBindings(entry);
|
||||||
|
|
||||||
glLinkProgram(entry.prog_id);
|
glLinkProgram(entry.prog_id);
|
||||||
|
|
||||||
|
#if defined(_DEBUG) || defined(DEBUGFAST) || defined(DEBUG_GLSL)
|
||||||
|
GLsizei length = 0;
|
||||||
|
glGetProgramiv(entry.prog_id, GL_INFO_LOG_LENGTH, &length);
|
||||||
|
if (length > 1)
|
||||||
|
{
|
||||||
|
GLsizei charsWritten;
|
||||||
|
GLchar* infoLog = new GLchar[length];
|
||||||
|
glGetProgramInfoLog(entry.prog_id, length, &charsWritten, infoLog);
|
||||||
|
ERROR_LOG(VIDEO, "Program info log:\n%s", infoLog);
|
||||||
|
char szTemp[MAX_PATH];
|
||||||
|
sprintf(szTemp, "p_%d.txt", entry.prog_id);
|
||||||
|
FILE *fp = fopen(szTemp, "wb");
|
||||||
|
fwrite(infoLog, length, 1, fp);
|
||||||
|
delete[] infoLog;
|
||||||
|
|
||||||
|
glGetShaderiv(VS, GL_SHADER_SOURCE_LENGTH, &length);
|
||||||
|
GLchar* src = new GLchar[length];
|
||||||
|
glGetShaderSource(VS, length, &charsWritten, src);
|
||||||
|
fwrite(src, strlen(src), 1, fp);
|
||||||
|
delete [] src;
|
||||||
|
|
||||||
|
glGetShaderiv(PS, GL_SHADER_SOURCE_LENGTH, &length);
|
||||||
|
src = new GLchar[length];
|
||||||
|
glGetShaderSource(PS, length, &charsWritten, src);
|
||||||
|
fwrite(src, strlen(src), 1, fp);
|
||||||
|
delete [] src;
|
||||||
|
fclose(fp);
|
||||||
|
}
|
||||||
|
|
||||||
|
GLint linkStatus;
|
||||||
|
glGetProgramiv(entry.prog_id, GL_LINK_STATUS, &linkStatus);
|
||||||
|
if (linkStatus != GL_TRUE)
|
||||||
|
{
|
||||||
|
// Compile failed
|
||||||
|
ERROR_LOG(VIDEO, "Program linking failed; see info log");
|
||||||
|
|
||||||
|
// Don't try to use this shader
|
||||||
|
glDeleteProgram(entry.prog_id);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
glUseProgram(entry.prog_id);
|
glUseProgram(entry.prog_id);
|
||||||
|
|
||||||
|
@ -131,6 +131,7 @@ bool VertexShaderCache::CompileVertexShader(VERTEXSHADER& vs, const char* pstrpr
|
|||||||
char szTemp[MAX_PATH];
|
char szTemp[MAX_PATH];
|
||||||
sprintf(szTemp, "vs_%d.txt", result);
|
sprintf(szTemp, "vs_%d.txt", result);
|
||||||
FILE *fp = fopen(szTemp, "wb");
|
FILE *fp = fopen(szTemp, "wb");
|
||||||
|
fwrite(infoLog, strlen(infoLog), 1, fp);
|
||||||
fwrite(pstrprogram, strlen(pstrprogram), 1, fp);
|
fwrite(pstrprogram, strlen(pstrprogram), 1, fp);
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
delete[] infoLog;
|
delete[] infoLog;
|
||||||
|
Reference in New Issue
Block a user