Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge pull request #790 from lioncash/ogl-cleanup
Small OGL cleanup
  • Loading branch information
lioncash committed Aug 17, 2014
2 parents e3e1869 + 7e3d105 commit 15a3b30
Show file tree
Hide file tree
Showing 16 changed files with 225 additions and 94 deletions.
3 changes: 2 additions & 1 deletion Source/Core/VideoBackends/OGL/FramebufferManager.h
Expand Up @@ -42,7 +42,8 @@
// There may be multiple XFBs in GameCube RAM. This is the maximum number to
// virtualize.

namespace OGL {
namespace OGL
{

struct XFBSource : public XFBSourceBase
{
Expand Down
34 changes: 26 additions & 8 deletions Source/Core/VideoBackends/OGL/GLUtil.cpp
Expand Up @@ -54,13 +54,20 @@ GLuint OpenGL_CompileProgram(const char* vertexShader, const char* fragmentShade
GLsizei stringBufferUsage = 0;
glGetShaderiv(vertexShaderID, GL_COMPILE_STATUS, &Result);
glGetShaderInfoLog(vertexShaderID, 1024, &stringBufferUsage, stringBuffer);
if (Result && stringBufferUsage) {

if (Result && stringBufferUsage)
{
ERROR_LOG(VIDEO, "GLSL vertex shader warnings:\n%s%s", stringBuffer, vertexShader);
} else if (!Result) {
}
else if (!Result)
{
ERROR_LOG(VIDEO, "GLSL vertex shader error:\n%s%s", stringBuffer, vertexShader);
} else {
}
else
{
DEBUG_LOG(VIDEO, "GLSL vertex shader compiled:\n%s", vertexShader);
}

bool shader_errors = !Result;
#endif

Expand All @@ -70,13 +77,20 @@ GLuint OpenGL_CompileProgram(const char* vertexShader, const char* fragmentShade
#if defined(_DEBUG) || defined(DEBUGFAST) || defined(DEBUG_GLSL)
glGetShaderiv(fragmentShaderID, GL_COMPILE_STATUS, &Result);
glGetShaderInfoLog(fragmentShaderID, 1024, &stringBufferUsage, stringBuffer);
if (Result && stringBufferUsage) {

if (Result && stringBufferUsage)
{
ERROR_LOG(VIDEO, "GLSL fragment shader warnings:\n%s%s", stringBuffer, fragmentShader);
} else if (!Result) {
}
else if (!Result)
{
ERROR_LOG(VIDEO, "GLSL fragment shader error:\n%s%s", stringBuffer, fragmentShader);
} else {
}
else
{
DEBUG_LOG(VIDEO, "GLSL fragment shader compiled:\n%s", fragmentShader);
}

shader_errors |= !Result;
#endif

Expand All @@ -87,9 +101,13 @@ GLuint OpenGL_CompileProgram(const char* vertexShader, const char* fragmentShade
#if defined(_DEBUG) || defined(DEBUGFAST) || defined(DEBUG_GLSL)
glGetProgramiv(programID, GL_LINK_STATUS, &Result);
glGetProgramInfoLog(programID, 1024, &stringBufferUsage, stringBuffer);
if (Result && stringBufferUsage) {

if (Result && stringBufferUsage)
{
ERROR_LOG(VIDEO, "GLSL linker warnings:\n%s%s%s", stringBuffer, vertexShader, fragmentShader);
} else if (!Result && !shader_errors) {
}
else if (!Result && !shader_errors)
{
ERROR_LOG(VIDEO, "GLSL linker error:\n%s%s%s", stringBuffer, vertexShader, fragmentShader);
}
#endif
Expand Down
14 changes: 6 additions & 8 deletions Source/Core/VideoBackends/OGL/NativeVertexFormat.cpp
Expand Up @@ -35,7 +35,7 @@ GLVertexFormat::~GLVertexFormat()
glDeleteVertexArrays(1, &VAO);
}

inline GLuint VarToGL(VarType t)
static inline GLuint VarToGL(VarType t)
{
static const GLuint lookup[5] = {
GL_UNSIGNED_BYTE, GL_BYTE, GL_UNSIGNED_SHORT, GL_SHORT, GL_FLOAT
Expand Down Expand Up @@ -75,24 +75,22 @@ void GLVertexFormat::Initialize(const PortableVertexDeclaration &_vtx_decl)

SetPointer(SHADER_POSITION_ATTRIB, vertex_stride, vtx_decl.position);

for (int i = 0; i < 3; i++) {
for (int i = 0; i < 3; i++)
SetPointer(SHADER_NORM0_ATTRIB+i, vertex_stride, vtx_decl.normals[i]);
}

for (int i = 0; i < 2; i++) {
for (int i = 0; i < 2; i++)
SetPointer(SHADER_COLOR0_ATTRIB+i, vertex_stride, vtx_decl.colors[i]);
}

for (int i = 0; i < 8; i++) {
for (int i = 0; i < 8; i++)
SetPointer(SHADER_TEXTURE0_ATTRIB+i, vertex_stride, vtx_decl.texcoords[i]);
}

SetPointer(SHADER_POSMTX_ATTRIB, vertex_stride, vtx_decl.posmtx);

vm->m_last_vao = VAO;
}

void GLVertexFormat::SetupVertexPointers() {
void GLVertexFormat::SetupVertexPointers()
{
}

}
3 changes: 2 additions & 1 deletion Source/Core/VideoBackends/OGL/PerfQuery.h
Expand Up @@ -3,7 +3,8 @@
#include <array>
#include "VideoCommon/PerfQueryBase.h"

namespace OGL {
namespace OGL
{

class PerfQuery : public PerfQueryBase
{
Expand Down
12 changes: 8 additions & 4 deletions Source/Core/VideoBackends/OGL/PostProcessing.cpp
Expand Up @@ -164,24 +164,28 @@ void OpenGLPostProcessing::Update(u32 width, u32 height)
void OpenGLPostProcessing::ApplyShader()
{
// shader didn't changed
if (m_config.GetShader() == g_ActiveConfig.sPostProcessingShader) return;
if (m_config.GetShader() == g_ActiveConfig.sPostProcessingShader)
return;

m_enable = false;
m_shader.Destroy();
m_uniform_bindings.clear();

// shader disabled
if (g_ActiveConfig.sPostProcessingShader == "") return;
if (g_ActiveConfig.sPostProcessingShader == "")
return;

// so need to compile shader
std::string code = m_config.LoadShader();

if (code == "") return;
if (code == "")
return;

code = LoadShaderOptions(code);

// and compile it
if (!ProgramShaderCache::CompileShader(m_shader, s_vertex_shader, code.c_str())) {
if (!ProgramShaderCache::CompileShader(m_shader, s_vertex_shader, code.c_str()))
{
ERROR_LOG(VIDEO, "Failed to compile post-processing shader %s", m_config.GetShader().c_str());
return;
}
Expand Down
32 changes: 20 additions & 12 deletions Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp
Expand Up @@ -111,7 +111,8 @@ void SHADER::SetProgramBindings()
glBindAttribLocation(glprogid, SHADER_NORM1_ATTRIB, "rawnorm1");
glBindAttribLocation(glprogid, SHADER_NORM2_ATTRIB, "rawnorm2");

for (int i=0; i<8; i++) {
for (int i = 0; i < 8; i++)
{
char attrib_name[8];
snprintf(attrib_name, 8, "tex%d", i);
glBindAttribLocation(glprogid, SHADER_TEXTURE0_ATTRIB+i, attrib_name);
Expand Down Expand Up @@ -153,12 +154,12 @@ void ProgramShaderCache::UploadConstants()
}
}

GLuint ProgramShaderCache::GetCurrentProgram(void)
GLuint ProgramShaderCache::GetCurrentProgram()
{
return CurrentProgram;
}

SHADER* ProgramShaderCache::SetShader ( DSTALPHA_MODE dstAlphaMode, u32 components )
SHADER* ProgramShaderCache::SetShader(DSTALPHA_MODE dstAlphaMode, u32 components)
{
SHADERUID uid;
GetShaderId(&uid, dstAlphaMode, components);
Expand Down Expand Up @@ -216,7 +217,8 @@ SHADER* ProgramShaderCache::SetShader ( DSTALPHA_MODE dstAlphaMode, u32 componen
}
#endif

if (!CompileShader(newentry.shader, vcode.GetBuffer(), pcode.GetBuffer())) {
if (!CompileShader(newentry.shader, vcode.GetBuffer(), pcode.GetBuffer()))
{
GFX_DEBUGGER_PAUSE_AT(NEXT_ERROR, true);
return nullptr;
}
Expand All @@ -229,7 +231,7 @@ SHADER* ProgramShaderCache::SetShader ( DSTALPHA_MODE dstAlphaMode, u32 componen
return &last_entry->shader;
}

bool ProgramShaderCache::CompileShader ( SHADER& shader, const char* vcode, const char* pcode )
bool ProgramShaderCache::CompileShader(SHADER& shader, const char* vcode, const char* pcode)
{
GLuint vsid = CompileSingleShader(GL_VERTEX_SHADER, vcode);
GLuint psid = CompileSingleShader(GL_FRAGMENT_SHADER, pcode);
Expand Down Expand Up @@ -275,12 +277,14 @@ bool ProgramShaderCache::CompileShader ( SHADER& shader, const char* vcode, cons
file.close();

if (linkStatus != GL_TRUE)
{
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",
filename.c_str(),
g_ogl_config.gl_vendor,
g_ogl_config.gl_renderer,
g_ogl_config.gl_version,
infoLog);
}

delete [] infoLog;
}
Expand All @@ -299,7 +303,7 @@ bool ProgramShaderCache::CompileShader ( SHADER& shader, const char* vcode, cons
return true;
}

GLuint ProgramShaderCache::CompileSingleShader (GLuint type, const char* code )
GLuint ProgramShaderCache::CompileSingleShader(GLuint type, const char* code)
{
GLuint result = glCreateShader(type);

Expand Down Expand Up @@ -332,13 +336,15 @@ GLuint ProgramShaderCache::CompileSingleShader (GLuint type, const char* code )
file.close();

if (compileStatus != GL_TRUE)
{
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",
type == GL_VERTEX_SHADER ? "vertex" : "pixel",
filename.c_str(),
g_ogl_config.gl_vendor,
g_ogl_config.gl_renderer,
g_ogl_config.gl_version,
infoLog);
}

delete[] infoLog;
}
Expand Down Expand Up @@ -372,12 +378,12 @@ void ProgramShaderCache::GetShaderId(SHADERUID* uid, DSTALPHA_MODE dstAlphaMode,
}
}

ProgramShaderCache::PCacheEntry ProgramShaderCache::GetShaderProgram(void)
ProgramShaderCache::PCacheEntry ProgramShaderCache::GetShaderProgram()
{
return *last_entry;
}

void ProgramShaderCache::Init(void)
void ProgramShaderCache::Init()
{
// We have to get the UBO alignment here because
// if we generate a buffer that isn't aligned
Expand Down Expand Up @@ -421,7 +427,7 @@ void ProgramShaderCache::Init(void)
last_entry = nullptr;
}

void ProgramShaderCache::Shutdown(void)
void ProgramShaderCache::Shutdown()
{
// store all shaders in cache on disk
if (g_ogl_config.bSupportsGLSLCache && !g_Config.bEnableShaderDebugging)
Expand Down Expand Up @@ -468,7 +474,7 @@ void ProgramShaderCache::Shutdown(void)
s_buffer = nullptr;
}

void ProgramShaderCache::CreateHeader ( void )
void ProgramShaderCache::CreateHeader()
{
GLSL_VERSION v = g_ogl_config.eSupportedGLSLVersion;
snprintf(s_glsl_header, sizeof(s_glsl_header),
Expand Down Expand Up @@ -520,7 +526,7 @@ void ProgramShaderCache::CreateHeader ( void )
}


void ProgramShaderCache::ProgramShaderCacheInserter::Read ( const SHADERUID& key, const u8* value, u32 value_size )
void ProgramShaderCache::ProgramShaderCacheInserter::Read(const SHADERUID& key, const u8* value, u32 value_size)
{
const u8 *binary = value+sizeof(GLenum);
GLenum *prog_format = (GLenum*)value;
Expand All @@ -540,7 +546,9 @@ void ProgramShaderCache::ProgramShaderCacheInserter::Read ( const SHADERUID& key
entry.shader.SetProgramVariables();
}
else
{
glDeleteProgram(entry.shader.glprogid);
}
}


Expand Down
22 changes: 14 additions & 8 deletions Source/Core/VideoBackends/OGL/ProgramShaderCache.h
Expand Up @@ -25,9 +25,15 @@ class SHADERUID

bool operator <(const SHADERUID& r) const
{
if (puid < r.puid) return true;
if (r.puid < puid) return false;
if (vuid < r.vuid) return true;
if (puid < r.puid)
return true;

if (r.puid < puid)
return false;

if (vuid < r.vuid)
return true;

return false;
}

Expand Down Expand Up @@ -72,18 +78,18 @@ class ProgramShaderCache

typedef std::map<SHADERUID, PCacheEntry> PCache;

static PCacheEntry GetShaderProgram(void);
static GLuint GetCurrentProgram(void);
static PCacheEntry GetShaderProgram();
static GLuint GetCurrentProgram();
static SHADER* SetShader(DSTALPHA_MODE dstAlphaMode, u32 components);
static void GetShaderId(SHADERUID *uid, DSTALPHA_MODE dstAlphaMode, u32 components);

static bool CompileShader(SHADER &shader, const char* vcode, const char* pcode);
static GLuint CompileSingleShader(GLuint type, const char *code);
static void UploadConstants();

static void Init(void);
static void Shutdown(void);
static void CreateHeader(void);
static void Init();
static void Shutdown();
static void CreateHeader();

private:
class ProgramShaderCacheInserter : public LinearDiskCacheReader<SHADERUID, u8>
Expand Down
3 changes: 2 additions & 1 deletion Source/Core/VideoBackends/OGL/RasterFont.cpp
Expand Up @@ -8,7 +8,8 @@

// globals

namespace OGL {
namespace OGL
{

static const int char_width = 8;
static const int char_height = 13;
Expand Down
2 changes: 1 addition & 1 deletion Source/Core/VideoBackends/OGL/RasterFont.h
Expand Up @@ -13,7 +13,7 @@ class RasterFont
{
public:
RasterFont();
~RasterFont(void);
~RasterFont();
static int debug;

void printMultilineText(const std::string& text, double x, double y, double z, int bbWidth, int bbHeight, u32 color);
Expand Down

0 comments on commit 15a3b30

Please sign in to comment.