(Cg/HLSL) Since everything goes through the shader backend interface now,

we can drop public scope on all the functions and make them static
instead
This commit is contained in:
twinaphex 2013-04-12 21:25:16 +02:00
parent e2039f8bff
commit a6db35875d
5 changed files with 83 additions and 68 deletions

View File

@ -147,7 +147,7 @@ static void gl_cg_reset_attrib(void)
cg_attrib_index = 0; cg_attrib_index = 0;
} }
bool gl_cg_set_mvp(const math_matrix *mat) static bool gl_cg_set_mvp(const math_matrix *mat)
{ {
if (cg_active && prg[active_index].mvp) if (cg_active && prg[active_index].mvp)
{ {
@ -167,7 +167,7 @@ bool gl_cg_set_mvp(const math_matrix *mat)
} \ } \
} while(0) } while(0)
bool gl_cg_set_coords(const struct gl_coords *coords) static bool gl_cg_set_coords(const struct gl_coords *coords)
{ {
if (!cg_active) if (!cg_active)
return false; return false;
@ -185,7 +185,7 @@ bool gl_cg_set_coords(const struct gl_coords *coords)
#define set_param_1f(param, x) \ #define set_param_1f(param, x) \
if (param) cgGLSetParameter1f(param, x) if (param) cgGLSetParameter1f(param, x)
void gl_cg_set_params(unsigned width, unsigned height, static void gl_cg_set_params(unsigned width, unsigned height,
unsigned tex_width, unsigned tex_height, unsigned tex_width, unsigned tex_height,
unsigned out_width, unsigned out_height, unsigned out_width, unsigned out_height,
unsigned frame_count, unsigned frame_count,
@ -378,7 +378,7 @@ static void gl_cg_deinit_context_state(void)
} }
// Full deinit. // Full deinit.
void gl_cg_deinit(void) static void gl_cg_deinit(void)
{ {
if (!cg_active) if (!cg_active)
return; return;
@ -387,6 +387,8 @@ void gl_cg_deinit(void)
gl_cg_deinit_context_state(); gl_cg_deinit_context_state();
} }
static bool gl_cg_init(const char *path);
// Deinit as much as possible without resetting context (broken on PS3), // Deinit as much as possible without resetting context (broken on PS3),
// and reinit cleanly. // and reinit cleanly.
// If this fails, we're kinda screwed without resetting everything on PS3. // If this fails, we're kinda screwed without resetting everything on PS3.
@ -774,7 +776,7 @@ static void set_program_attributes(unsigned i)
} }
} }
bool gl_cg_init(const char *path) static bool gl_cg_init(const char *path)
{ {
#ifdef HAVE_CG_RUNTIME_COMPILER #ifdef HAVE_CG_RUNTIME_COMPILER
cgRTCgcInit(); cgRTCgcInit();
@ -838,7 +840,7 @@ bool gl_cg_init(const char *path)
return true; return true;
} }
void gl_cg_use(unsigned index) static void gl_cg_use(unsigned index)
{ {
if (cg_active && prg[index].vprg && prg[index].fprg) if (cg_active && prg[index].vprg && prg[index].fprg)
{ {
@ -850,7 +852,7 @@ void gl_cg_use(unsigned index)
} }
} }
unsigned gl_cg_num(void) static unsigned gl_cg_num(void)
{ {
if (cg_active) if (cg_active)
return cg_shader->passes; return cg_shader->passes;
@ -858,7 +860,7 @@ unsigned gl_cg_num(void)
return 0; return 0;
} }
bool gl_cg_filter_type(unsigned index, bool *smooth) static bool gl_cg_filter_type(unsigned index, bool *smooth)
{ {
if (cg_active && index) if (cg_active && index)
{ {
@ -871,7 +873,7 @@ bool gl_cg_filter_type(unsigned index, bool *smooth)
return false; return false;
} }
void gl_cg_shader_scale(unsigned index, struct gfx_fbo_scale *scale) static void gl_cg_shader_scale(unsigned index, struct gfx_fbo_scale *scale)
{ {
if (cg_active && index) if (cg_active && index)
*scale = cg_shader->pass[index - 1].fbo; *scale = cg_shader->pass[index - 1].fbo;

View File

@ -20,37 +20,13 @@
#include "shader_common.h" #include "shader_common.h"
#include <stdint.h> #include <stdint.h>
bool gl_cg_init(const char *path);
bool gl_cg_reinit(const char *path); bool gl_cg_reinit(const char *path);
void gl_cg_deinit(void);
void gl_cg_set_params(unsigned width, unsigned height,
unsigned tex_width, unsigned tex_height,
unsigned out_width, unsigned out_height,
unsigned frame_count,
const struct gl_tex_info *info,
const struct gl_tex_info *prev_info,
const struct gl_tex_info *fbo_info,
unsigned fbo_info_cnt);
void gl_cg_use(unsigned index);
unsigned gl_cg_num(void);
bool gl_cg_filter_type(unsigned index, bool *smooth);
void gl_cg_shader_scale(unsigned index, struct gfx_fbo_scale *scale);
bool gl_cg_set_mvp(const math_matrix *mat);
bool gl_cg_set_coords(const struct gl_coords *coords);
// Used on PS3, but not really platform specific. // Used on PS3, but not really platform specific.
#define RARCH_CG_MAX_SHADERS 16 #define RARCH_CG_MAX_SHADERS 16
void gl_cg_set_compiler_args(const char **argv); void gl_cg_set_compiler_args(const char **argv);
bool gl_cg_load_shader(unsigned index, const char *path);
void gl_cg_invalidate_context(void); // Call when resetting GL context on PS3. void gl_cg_invalidate_context(void); // Call when resetting GL context on PS3.
extern const gl_shader_backend_t gl_cg_backend; extern const gl_shader_backend_t gl_cg_backend;

View File

@ -100,7 +100,7 @@ void hlsl_set_proj_matrix(XMMATRIX rotation_value)
#define set_param_1f(param, x, constanttable) \ #define set_param_1f(param, x, constanttable) \
if (param) constanttable->SetFloat(d3d_device_ptr, param, x) if (param) constanttable->SetFloat(d3d_device_ptr, param, x)
void hlsl_set_params(unsigned width, unsigned height, static void hlsl_set_params(unsigned width, unsigned height,
unsigned tex_width, unsigned tex_height, unsigned tex_width, unsigned tex_height,
unsigned out_width, unsigned out_height, unsigned out_width, unsigned out_height,
unsigned frame_count) unsigned frame_count)
@ -128,9 +128,6 @@ void hlsl_set_params(unsigned width, unsigned height,
set_param_1f(prg[active_index].frame_cnt_v, frame_cnt, prg[active_index].v_ctable); set_param_1f(prg[active_index].frame_cnt_v, frame_cnt, prg[active_index].v_ctable);
set_param_1f(prg[active_index].frame_dir_v, g_extern.frame_is_reverse ? -1.0 : 1.0,prg[active_index].v_ctable); set_param_1f(prg[active_index].frame_dir_v, g_extern.frame_is_reverse ? -1.0 : 1.0,prg[active_index].v_ctable);
/* TODO: Move to D3DXMATRIX here */
if(prg[active_index].mvp)
prg[active_index].v_ctable->SetMatrix(d3d_device_ptr, prg[active_index].mvp, (D3DXMATRIX*)&prg[active_index].mvp_val);
/* TODO - set lookup textures/FBO textures/state parameters/etc */ /* TODO - set lookup textures/FBO textures/state parameters/etc */
} }
@ -333,7 +330,7 @@ static bool load_preset(const char *path)
return true; return true;
} }
bool hlsl_init(const char *path, IDirect3DDevice9 * device_ptr) static bool hlsl_init(const char *path, IDirect3DDevice9 * device_ptr)
{ {
if (!device_ptr) if (!device_ptr)
return false; return false;
@ -362,7 +359,7 @@ bool hlsl_init(const char *path, IDirect3DDevice9 * device_ptr)
} }
// Full deinit. // Full deinit.
void hlsl_deinit(void) static void hlsl_deinit(void)
{ {
if (!hlsl_active) if (!hlsl_active)
return; return;
@ -370,7 +367,7 @@ void hlsl_deinit(void)
hlsl_deinit_state(); hlsl_deinit_state();
} }
void hlsl_use(unsigned index) static void hlsl_use(unsigned index)
{ {
if (hlsl_active && prg[index].vprg && prg[index].fprg) if (hlsl_active && prg[index].vprg && prg[index].fprg)
{ {
@ -380,7 +377,7 @@ void hlsl_use(unsigned index)
} }
} }
unsigned d3d_hlsl_num(void) static unsigned hlsl_num(void)
{ {
if (hlsl_active) if (hlsl_active)
return cg_shader->passes; return cg_shader->passes;
@ -388,7 +385,7 @@ unsigned d3d_hlsl_num(void)
return 0; return 0;
} }
bool hlsl_filter_type(unsigned index, bool *smooth) static bool hlsl_filter_type(unsigned index, bool *smooth)
{ {
if (hlsl_active && index) if (hlsl_active && index)
{ {
@ -401,10 +398,36 @@ bool hlsl_filter_type(unsigned index, bool *smooth)
return false; return false;
} }
void hlsl_shader_scale(unsigned index, struct gfx_fbo_scale *scale) static void hlsl_shader_scale(unsigned index, struct gfx_fbo_scale *scale)
{ {
if (hlsl_active && index) if (hlsl_active && index)
*scale = cg_shader->pass[index - 1].fbo; *scale = cg_shader->pass[index - 1].fbo;
else else
scale->valid = false; scale->valid = false;
} }
static bool hlsl_set_mvp(const math_matrix *mat)
{
/* TODO: Move to D3DXMATRIX here */
if(hlsl_active && prg[active_index].mvp)
{
prg[active_index].v_ctable->SetMatrix(d3d_device_ptr, prg[active_index].mvp, (D3DXMATRIX*)&prg[active_index].mvp_val);
return true;
}
else
return false;
}
const gl_shader_backend_t hlsl_backend = {
hlsl_init,
hlsl_deinit,
hlsl_set_params,
hlsl_use,
hlsl_num,
hlsl_filter_type,
hlsl_shader_scale,
NULL, /* hlsl_set_coords */
hlsl_set_mvp,
RARCH_SHADER_HLSL,
};

View File

@ -21,22 +21,10 @@
#include "../boolean.h" #include "../boolean.h"
#include <stdint.h> #include <stdint.h>
bool hlsl_init(const char *path, IDirect3DDevice9 *device_ptr);
void hlsl_deinit(void);
void hlsl_set_proj_matrix(XMMATRIX rotation_value); void hlsl_set_proj_matrix(XMMATRIX rotation_value);
void hlsl_set_params(unsigned width, unsigned height,
unsigned tex_width, unsigned tex_height,
unsigned out_width, unsigned out_height,
unsigned frame_count);
void hlsl_use(unsigned index);
bool hlsl_load_shader(unsigned index, const char *path);
unsigned d3d_hlsl_num(void);
#define RARCH_HLSL_MAX_SHADERS 16 #define RARCH_HLSL_MAX_SHADERS 16
extern const gl_shader_backend_t hlsl_backend;
#endif #endif

View File

@ -132,9 +132,30 @@ static void check_window(void *data)
static bool hlsl_shader_init(void) static bool hlsl_shader_init(void)
{ {
xdk_d3d_video_t *d3d = (xdk_d3d_video_t*)driver.video_data; xdk_d3d_video_t *d3d = (xdk_d3d_video_t*)driver.video_data;
const char *shader_path = g_settings.video.shader_path; const gl_shader_backend_t *backend = NULL;
return hlsl_init(shader_path, d3d->d3d_render_device); const char *shader_path = g_settings.video.shader_path;
enum rarch_shader_type type = gfx_shader_parse_type(shader_path, DEFAULT_SHADER_TYPE);
switch (type)
{
#ifdef HAVE_HLSL
case RARCH_SHADER_HLSL:
RARCH_LOG("[D3D]: Using HLSL shader backend.\n");
backend = &hlsl_backend;
break;
#endif
}
if (!backend)
{
RARCH_ERR("[GL]: Didn't find valid shader backend. Continuing without shaders.\n");
return true;
}
d3d->shader = backend;
return d3d->shader->init(shader_path);
} }
#endif #endif
@ -651,7 +672,7 @@ static void *xdk_d3d_init(const video_info_t *video, const input_driver_t **inpu
return NULL; return NULL;
} }
RARCH_LOG("D3D: Loaded %u program(s).\n", d3d_hlsl_num()); RARCH_LOG("D3D: Loaded %u program(s).\n", d3d->shader->num_func());
#endif #endif
#if 0 /* ifdef HAVE_FBO */ #if 0 /* ifdef HAVE_FBO */
@ -842,14 +863,16 @@ static bool xdk_d3d_frame(void *data, const void *frame,
d3dr->SetTexture(0, d3d->lpTexture); d3dr->SetTexture(0, d3d->lpTexture);
#ifdef HAVE_HLSL #ifdef HAVE_HLSL
hlsl_use(1); if (d3d->shader)
d3d->shader->use(1);
#endif #endif
#if 0 /* ifdef HAVE_FBO */ #if 0 /* ifdef HAVE_FBO */
if (d3d->fbo_inited) if (d3d->fbo_inited)
{ {
#ifdef HAVE_HLSL #ifdef HAVE_HLSL
hlsl_set_params(width, height, d3d->tex_w, d3d->tex_h, g_settings.video.fbo.scale_x * width, if (d3d->shader)
d3d->shader->set_params(width, height, d3d->tex_w, d3d->tex_h, g_settings.video.fbo.scale_x * width,
g_settings.video.fbo.scale_y * height, g_extern.frame_count); g_settings.video.fbo.scale_y * height, g_extern.frame_count);
#endif #endif
D3DVIEWPORT vp = {0}; D3DVIEWPORT vp = {0};
@ -865,7 +888,8 @@ static bool xdk_d3d_frame(void *data, const void *frame,
#endif #endif
{ {
#ifdef HAVE_HLSL #ifdef HAVE_HLSL
hlsl_set_params(width, height, d3d->tex_w, d3d->tex_h, d3d->win_width, if (d3d->shader)
d3d->shader->set_params(width, height, d3d->tex_w, d3d->tex_h, d3d->win_width,
d3d->win_height, g_extern.frame_count); d3d->win_height, g_extern.frame_count);
#endif #endif
} }
@ -916,7 +940,9 @@ static bool xdk_d3d_frame(void *data, const void *frame,
#ifdef HAVE_HLSL #ifdef HAVE_HLSL
hlsl_use(2); hlsl_use(2);
hlsl_set_params(g_settings.video.fbo.scale_x * width, g_settings.video.fbo.scale_y * height, g_settings.video.fbo.scale_x * d3d->tex_w, g_settings.video.fbo.scale_y * d3d->tex_h, d3d->win_width,
if (d3d->shader)
d3d->shader->set_params(g_settings.video.fbo.scale_x * width, g_settings.video.fbo.scale_y * height, g_settings.video.fbo.scale_x * d3d->tex_w, g_settings.video.fbo.scale_y * d3d->tex_h, d3d->win_width,
d3d->win_height, g_extern.frame_count); d3d->win_height, g_extern.frame_count);
#endif #endif
xdk_d3d_set_viewport(false); xdk_d3d_set_viewport(false);