mirror of
https://github.com/libretro/ppsspp.git
synced 2025-02-01 14:24:02 +00:00
GLES: Keep the GLRShader desc around.
This way we can also log it on link errors. It's not much data.
This commit is contained in:
parent
48a07474f8
commit
3380ab8705
@ -44,12 +44,11 @@
|
||||
#include "GPU/GLES/DrawEngineGLES.h"
|
||||
#include "FramebufferManagerGLES.h"
|
||||
|
||||
Shader::Shader(GLRenderManager *render, const char *code, const char *desc, uint32_t glShaderType, bool useHWTransform, uint32_t attrMask, uint64_t uniformMask)
|
||||
Shader::Shader(GLRenderManager *render, const char *code, const std::string &desc, uint32_t glShaderType, bool useHWTransform, uint32_t attrMask, uint64_t uniformMask)
|
||||
: render_(render), failed_(false), useHWTransform_(useHWTransform), attrMask_(attrMask), uniformMask_(uniformMask) {
|
||||
PROFILE_THIS_SCOPE("shadercomp");
|
||||
isFragment_ = glShaderType == GL_FRAGMENT_SHADER;
|
||||
source_ = code;
|
||||
std::string descstr(desc);
|
||||
#ifdef SHADERLOG
|
||||
#ifdef _WIN32
|
||||
OutputDebugStringUTF8(code);
|
||||
@ -57,7 +56,7 @@ Shader::Shader(GLRenderManager *render, const char *code, const char *desc, uint
|
||||
printf("%s\n", code);
|
||||
#endif
|
||||
#endif
|
||||
shader = render->CreateShader(glShaderType, source_, descstr);
|
||||
shader = render->CreateShader(glShaderType, source_, desc);
|
||||
}
|
||||
|
||||
Shader::~Shader() {
|
||||
@ -609,7 +608,7 @@ Shader *ShaderManagerGLES::CompileFragmentShader(FShaderID FSID) {
|
||||
return nullptr;
|
||||
}
|
||||
std::string desc = FragmentShaderDesc(FSID);
|
||||
return new Shader(render_, codeBuffer_, desc.c_str(), GL_FRAGMENT_SHADER, false, 0, uniformMask);
|
||||
return new Shader(render_, codeBuffer_, desc, GL_FRAGMENT_SHADER, false, 0, uniformMask);
|
||||
}
|
||||
|
||||
Shader *ShaderManagerGLES::CompileVertexShader(VShaderID VSID) {
|
||||
@ -618,7 +617,7 @@ Shader *ShaderManagerGLES::CompileVertexShader(VShaderID VSID) {
|
||||
uint64_t uniformMask;
|
||||
GenerateVertexShader(VSID, codeBuffer_, &attrMask, &uniformMask);
|
||||
std::string desc = VertexShaderDesc(VSID);
|
||||
return new Shader(render_, codeBuffer_, desc.c_str(), GL_VERTEX_SHADER, useHWTransform, attrMask, uniformMask);
|
||||
return new Shader(render_, codeBuffer_, desc, GL_VERTEX_SHADER, useHWTransform, attrMask, uniformMask);
|
||||
}
|
||||
|
||||
Shader *ShaderManagerGLES::ApplyVertexShader(int prim, u32 vertType, VShaderID *VSID) {
|
||||
@ -668,7 +667,7 @@ Shader *ShaderManagerGLES::ApplyVertexShader(int prim, u32 vertType, VShaderID *
|
||||
uint32_t attrMask;
|
||||
uint64_t uniformMask;
|
||||
GenerateVertexShader(vsidTemp, codeBuffer_, &attrMask, &uniformMask);
|
||||
vs = new Shader(render_, codeBuffer_, VertexShaderDesc(vsidTemp).c_str(), GL_VERTEX_SHADER, false, attrMask, uniformMask);
|
||||
vs = new Shader(render_, codeBuffer_, VertexShaderDesc(vsidTemp), GL_VERTEX_SHADER, false, attrMask, uniformMask);
|
||||
}
|
||||
|
||||
vsCache_.Insert(*VSID, vs);
|
||||
|
@ -125,7 +125,7 @@ public:
|
||||
|
||||
class Shader {
|
||||
public:
|
||||
Shader(GLRenderManager *render, const char *code, const char *desc, uint32_t glShaderType, bool useHWTransform, uint32_t attrMask, uint64_t uniformMask);
|
||||
Shader(GLRenderManager *render, const char *code, const std::string &desc, uint32_t glShaderType, bool useHWTransform, uint32_t attrMask, uint64_t uniformMask);
|
||||
~Shader();
|
||||
GLRShader *shader;
|
||||
|
||||
|
@ -156,10 +156,10 @@ void GLQueueRunner::RunInitSteps(const std::vector<GLRInitStep> &steps) {
|
||||
ELOG("Error in shader compilation! %s\n", infoLog);
|
||||
ELOG("Shader source:\n%s\n", (const char *)code);
|
||||
#endif
|
||||
ERROR_LOG(G3D, "Error in shader compilation for: %s", step.create_shader.desc);
|
||||
ERROR_LOG(G3D, "Error in shader compilation for: %s", step.create_shader.shader->desc.c_str());
|
||||
ERROR_LOG(G3D, "Info log: %s", infoLog);
|
||||
ERROR_LOG(G3D, "Shader source:\n%s\n", (const char *)code);
|
||||
Reporting::ReportMessage("Error in shader compilation: info: %s\n%s\n%s", infoLog, step.create_shader.desc, (const char *)code);
|
||||
Reporting::ReportMessage("Error in shader compilation: info: %s\n%s\n%s", infoLog, step.create_shader.shader->desc.c_str(), (const char *)code);
|
||||
#ifdef SHADERLOG
|
||||
OutputDebugStringUTF8(infoLog);
|
||||
#endif
|
||||
@ -167,7 +167,6 @@ void GLQueueRunner::RunInitSteps(const std::vector<GLRInitStep> &steps) {
|
||||
step.create_shader.shader->failed = true;
|
||||
}
|
||||
delete[] step.create_shader.code;
|
||||
delete[] step.create_shader.desc;
|
||||
step.create_shader.shader->valid = true;
|
||||
break;
|
||||
}
|
||||
|
@ -199,9 +199,8 @@ struct GLRInitStep {
|
||||
} create_texture;
|
||||
struct {
|
||||
GLRShader *shader;
|
||||
// These char arrays need to be allocated with new[].
|
||||
// This char arrays needs to be allocated with new[].
|
||||
char *code;
|
||||
char *desc; // For error logging.
|
||||
GLuint stage;
|
||||
} create_shader;
|
||||
struct {
|
||||
|
@ -75,6 +75,7 @@ public:
|
||||
bool valid = false;
|
||||
// Warning: Won't know until a future frame.
|
||||
bool failed = false;
|
||||
std::string desc;
|
||||
};
|
||||
|
||||
class GLRProgram {
|
||||
@ -227,16 +228,13 @@ public:
|
||||
return step.create_buffer.buffer;
|
||||
}
|
||||
|
||||
GLRShader *CreateShader(GLuint stage, std::string code, std::string desc) {
|
||||
GLRShader *CreateShader(GLuint stage, const std::string &code, const std::string &desc) {
|
||||
GLRInitStep step{ GLRInitStepType::CREATE_SHADER };
|
||||
step.create_shader.shader = new GLRShader();
|
||||
step.create_shader.shader->desc = desc;
|
||||
step.create_shader.stage = stage;
|
||||
step.create_shader.code = new char[code.size() + 1];
|
||||
memcpy(step.create_shader.code, code.data(), code.size() + 1);
|
||||
if (!desc.empty()) {
|
||||
step.create_shader.desc = desc.size() ? new char[desc.size() + 1] : nullptr;
|
||||
memcpy(step.create_shader.desc, desc.data(), desc.size() + 1);
|
||||
}
|
||||
initSteps_.push_back(step);
|
||||
return step.create_shader.shader;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user