mirror of
https://github.com/libretro/RetroArch
synced 2025-03-28 08:37:41 +00:00
Add SHADER_CTL_COMPILE_PROGRAM
This commit is contained in:
parent
79ef0268e5
commit
86cb092b02
@ -92,7 +92,7 @@ struct shader_program_data
|
||||
|
||||
typedef struct cg_shader_data
|
||||
{
|
||||
shader_program_data_t prg[GFX_MAX_SHADERS];
|
||||
struct shader_program_data prg[GFX_MAX_SHADERS];
|
||||
unsigned active_idx;
|
||||
unsigned cg_attrib_idx;
|
||||
CGprofile cgVProf;
|
||||
@ -105,7 +105,7 @@ typedef struct cg_shader_data
|
||||
CGcontext cgCtx;
|
||||
} cg_shader_data_t;
|
||||
|
||||
static void cg_uniform_set_parameter(void *data, shader_program_data_t *shader_data, void *uniform_data)
|
||||
static void cg_uniform_set_parameter(void *data, struct shader_program_data *shader_data, void *uniform_data)
|
||||
{
|
||||
struct uniform_info *param = (struct uniform_info*)data;
|
||||
CGparameter *cg_param = (CGparameter*)uniform_data;
|
||||
@ -611,7 +611,7 @@ static void gl_cg_deinit(void *data)
|
||||
static bool gl_cg_compile_program(
|
||||
void *data,
|
||||
unsigned idx,
|
||||
shader_program_data_t *program,
|
||||
void *program_data,
|
||||
struct shader_program_info *program_info)
|
||||
{
|
||||
const char *list = NULL;
|
||||
@ -620,6 +620,7 @@ static bool gl_cg_compile_program(
|
||||
char *listing_f = NULL;
|
||||
char *listing_v = NULL;
|
||||
unsigned i, argc = 0;
|
||||
struct shader_program_data *program = (struct shader_program_data*)program_data;
|
||||
cg_shader_data_t *cg_data = (cg_shader_data_t*)data;
|
||||
|
||||
argv[argc++] = "-DPARAMETER_UNIFORM";
|
||||
@ -940,7 +941,7 @@ static bool gl_cg_load_preset(void *data, const char *path)
|
||||
}
|
||||
|
||||
static void gl_cg_set_pass_attrib(
|
||||
shader_program_data_t *program,
|
||||
struct shader_program_data *program,
|
||||
struct cg_fbo_params *fbo,
|
||||
const char *attr)
|
||||
{
|
||||
@ -1260,6 +1261,7 @@ const shader_backend_t gl_cg_backend = {
|
||||
gl_cg_init,
|
||||
gl_cg_deinit,
|
||||
gl_cg_set_params,
|
||||
gl_cg_compile_program,
|
||||
gl_cg_use,
|
||||
gl_cg_num,
|
||||
gl_cg_filter_type,
|
||||
|
@ -264,7 +264,7 @@ typedef struct glsl_shader_data
|
||||
char glsl_alias_define[1024];
|
||||
unsigned glsl_active_index;
|
||||
unsigned gl_attrib_index;
|
||||
shader_program_data_t prg[GFX_MAX_SHADERS];
|
||||
struct shader_program_data prg[GFX_MAX_SHADERS];
|
||||
GLuint gl_teximage[GFX_MAX_TEXTURES];
|
||||
GLint gl_attribs[PREV_TEXTURES + 2 + 4 + GFX_MAX_SHADERS];
|
||||
state_tracker_t *gl_state_tracker;
|
||||
@ -431,12 +431,16 @@ static bool gl_glsl_link_program(GLuint prog)
|
||||
static bool gl_glsl_compile_program(
|
||||
void *data,
|
||||
unsigned idx,
|
||||
shader_program_data_t *program,
|
||||
void *program_data,
|
||||
struct shader_program_info *program_info)
|
||||
{
|
||||
glsl_shader_data_t *glsl = (glsl_shader_data_t*)data;
|
||||
struct shader_program_data *program = (struct shader_program_data*)program_data;
|
||||
GLuint prog = glCreateProgram();
|
||||
|
||||
if (!program)
|
||||
program = &glsl->prg[idx];
|
||||
|
||||
if (!prog)
|
||||
goto error;
|
||||
|
||||
@ -533,13 +537,13 @@ static bool gl_glsl_load_source_path(struct video_shader_pass *pass,
|
||||
}
|
||||
|
||||
static bool gl_glsl_compile_programs(
|
||||
glsl_shader_data_t *glsl, shader_program_data_t *program)
|
||||
glsl_shader_data_t *glsl, struct shader_program_data *program)
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
for (i = 0; i < glsl->shader->passes; i++)
|
||||
{
|
||||
shader_program_data_t prg;
|
||||
struct shader_program_data prg;
|
||||
struct shader_program_info shader_prog_info;
|
||||
const char *vertex = NULL;
|
||||
const char *fragment = NULL;
|
||||
@ -1050,7 +1054,7 @@ error:
|
||||
static float t = 0;
|
||||
|
||||
#endif
|
||||
static void glsl_uniform_set_parameter(void *data, shader_program_data_t *shader_data, void *uniform_data)
|
||||
static void glsl_uniform_set_parameter(void *data, struct shader_program_data *shader_data, void *uniform_data)
|
||||
{
|
||||
struct uniform_info *param = (struct uniform_info*)data;
|
||||
|
||||
@ -1711,6 +1715,7 @@ const shader_backend_t gl_glsl_backend = {
|
||||
gl_glsl_init,
|
||||
gl_glsl_deinit,
|
||||
gl_glsl_set_params,
|
||||
gl_glsl_compile_program,
|
||||
gl_glsl_use,
|
||||
gl_glsl_num,
|
||||
gl_glsl_filter_type,
|
||||
|
@ -194,11 +194,12 @@ static void hlsl_set_params(void *data, void *shader_data,
|
||||
static bool hlsl_compile_program(
|
||||
void *data,
|
||||
unsigned idx,
|
||||
shader_program_data_t *program,
|
||||
void *program_data,
|
||||
struct shader_program_info *program_info)
|
||||
{
|
||||
hlsl_shader_data_t *hlsl = (hlsl_shader_data_t*)data;
|
||||
d3d_video_t *d3d = (d3d_video_t*)hlsl->d3d;
|
||||
shader_program_data_t *program = (shader_program_data_t*)program_data;
|
||||
LPDIRECT3DDEVICE d3d_device_ptr = (LPDIRECT3DDEVICE)d3d->dev;
|
||||
HRESULT ret, ret_fp, ret_vp;
|
||||
ID3DXBuffer *listing_f = NULL;
|
||||
|
@ -153,10 +153,20 @@ static struct video_shader *shader_null_get_current_shader(void *data)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static bool shader_null_compile_program(
|
||||
void *data,
|
||||
unsigned idx,
|
||||
void *program_data,
|
||||
struct shader_program_info *program_info)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
const shader_backend_t shader_null_backend = {
|
||||
shader_null_init,
|
||||
shader_null_deinit,
|
||||
shader_null_set_params,
|
||||
shader_null_compile_program,
|
||||
shader_null_use,
|
||||
shader_null_num,
|
||||
shader_null_filter_type,
|
||||
|
@ -223,6 +223,15 @@ bool video_shader_driver_ctl(enum video_shader_driver_ctl_state state, void *dat
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case SHADER_CTL_COMPILE_PROGRAM:
|
||||
{
|
||||
struct shader_program_info *program_info = (struct shader_program_info*)data;
|
||||
if (!current_shader || !program_info)
|
||||
return false;
|
||||
return current_shader->compile_program(program_info->data,
|
||||
program_info->idx, NULL, program_info);
|
||||
}
|
||||
break;
|
||||
case SHADER_CTL_USE:
|
||||
{
|
||||
video_shader_ctx_info_t *shader_info = (video_shader_ctx_info_t*)data;
|
||||
|
@ -65,6 +65,7 @@ enum video_shader_driver_ctl_state
|
||||
SHADER_CTL_GET_FEEDBACK_PASS,
|
||||
SHADER_CTL_MIPMAP_INPUT,
|
||||
SHADER_CTL_SET_COORDS,
|
||||
SHADER_CTL_COMPILE_PROGRAM,
|
||||
SHADER_CTL_SCALE,
|
||||
SHADER_CTL_INFO,
|
||||
SHADER_CTL_SET_MVP,
|
||||
@ -92,14 +93,14 @@ enum shader_uniform_type
|
||||
|
||||
struct shader_program_info
|
||||
{
|
||||
void *data;
|
||||
const char *vertex;
|
||||
const char *fragment;
|
||||
const char *combined;
|
||||
unsigned idx;
|
||||
bool is_file;
|
||||
};
|
||||
|
||||
typedef struct shader_program_data shader_program_data_t;
|
||||
|
||||
struct uniform_info
|
||||
{
|
||||
enum shader_uniform_type type;
|
||||
@ -155,6 +156,8 @@ typedef struct shader_backend
|
||||
const void *prev_info,
|
||||
const void *feedback_info,
|
||||
const void *fbo_info, unsigned fbo_info_cnt);
|
||||
bool (*compile_program)(void *data, unsigned idx,
|
||||
void *program_data, struct shader_program_info *program_info);
|
||||
|
||||
void (*use)(void *data, void *shader_data, unsigned index, bool set_active);
|
||||
unsigned (*num_shaders)(void *data);
|
||||
|
Loading…
x
Reference in New Issue
Block a user