diff --git a/gfx/drivers_shader/shader_gl_cg.c b/gfx/drivers_shader/shader_gl_cg.c index 913b7a69ec..ffc2326edb 100644 --- a/gfx/drivers_shader/shader_gl_cg.c +++ b/gfx/drivers_shader/shader_gl_cg.c @@ -609,8 +609,9 @@ static void gl_cg_deinit(void *data) listing_##type = strdup(list); \ } -static bool gl_cg_compile_program(void *data, unsigned idx, - const char *prog, bool path_is_file) +static bool gl_cg_compile_program(void *data, + unsigned idx, + struct shader_program_info *program_info) { const char *argv[2 + GFX_MAX_SHADERS]; bool ret = true; @@ -627,24 +628,24 @@ static bool gl_cg_compile_program(void *data, unsigned idx, } argv[argc] = NULL; - if (path_is_file) + if (program_info->is_file) { cg_data->prg[idx].fprg = cgCreateProgramFromFile( cg_data->cgCtx, CG_SOURCE, - prog, cg_data->cgFProf, "main_fragment", argv); + program_info->combined, cg_data->cgFProf, "main_fragment", argv); CG_GL_SET_LISTING(cg_data, f); cg_data->prg[idx].vprg = cgCreateProgramFromFile( cg_data->cgCtx, CG_SOURCE, - prog, cg_data->cgVProf, "main_vertex", argv); + program_info->combined, cg_data->cgVProf, "main_vertex", argv); CG_GL_SET_LISTING(cg_data, v); } else { cg_data->prg[idx].fprg = cgCreateProgram(cg_data->cgCtx, CG_SOURCE, - prog, cg_data->cgFProf, "main_fragment", argv); + program_info->combined, cg_data->cgFProf, "main_fragment", argv); CG_GL_SET_LISTING(cg_data, f); cg_data->prg[idx].vprg = cgCreateProgram(cg_data->cgCtx, CG_SOURCE, - prog, cg_data->cgVProf, "main_vertex", argv); + program_info->combined, cg_data->cgVProf, "main_vertex", argv); CG_GL_SET_LISTING(cg_data, v); } @@ -722,7 +723,12 @@ static void gl_cg_set_program_base_attrib(void *data, unsigned i) static bool gl_cg_load_stock(void *data) { - if (!gl_cg_compile_program(data, 0, stock_cg_gl_program, false)) + struct shader_program_info program_info; + + program_info.combined = stock_cg_gl_program; + program_info.is_file = false; + + if (!gl_cg_compile_program(data, 0, &program_info)) { RARCH_ERR("Failed to compile passthrough shader, is something wrong with your environment?\n"); return false; @@ -747,10 +753,15 @@ static bool gl_cg_load_plain(void *data, const char *path) if (path) { + struct shader_program_info program_info; + + program_info.combined = path; + program_info.is_file = true; + RARCH_LOG("Loading Cg file: %s\n", path); strlcpy(cg_data->shader->pass[0].source.path, path, sizeof(cg_data->shader->pass[0].source.path)); - if (!gl_cg_compile_program(data, 1, path, true)) + if (!gl_cg_compile_program(data, 1, &program_info)) return false; } else @@ -829,13 +840,16 @@ static bool gl_cg_load_imports(void *data) static bool gl_cg_load_shader(void *data, unsigned i) { + struct shader_program_info program_info; cg_shader_data_t *cg_data = (cg_shader_data_t*)data; + program_info.combined = cg_data->shader->pass[i].source.path; + program_info.is_file = true; + RARCH_LOG("Loading Cg shader: \"%s\".\n", cg_data->shader->pass[i].source.path); - if (!gl_cg_compile_program(cg_data, i + 1, - cg_data->shader->pass[i].source.path, true)) + if (!gl_cg_compile_program(data, i + 1, &program_info)) return false; return true; diff --git a/gfx/drivers_shader/shader_glsl.c b/gfx/drivers_shader/shader_glsl.c index 04dc432a2d..4375f847f5 100644 --- a/gfx/drivers_shader/shader_glsl.c +++ b/gfx/drivers_shader/shader_glsl.c @@ -419,12 +419,14 @@ static bool gl_glsl_link_program(GLuint prog) return true; } -static GLuint gl_glsl_compile_program(glsl_shader_data_t *glsl, +static GLuint gl_glsl_compile_program( + void *data, unsigned idx, struct shader_program_info *program_info) { GLuint vert = 0; GLuint frag = 0; + glsl_shader_data_t *glsl = (glsl_shader_data_t*)data; GLuint prog = glCreateProgram(); if (!prog)