Refactor frame_is_reversed - shader drivers should no longer

be dependent upon global state
This commit is contained in:
twinaphex 2015-09-16 11:14:43 +02:00
parent 78d0a87004
commit 576626ead0
8 changed files with 31 additions and 18 deletions

View File

@ -38,7 +38,7 @@
#include <rhash.h>
#include "../../dynamic.h"
#include "../../rewind.h"
#include "../video_state_tracker.h"
#if 0
@ -266,7 +266,6 @@ static void gl_cg_set_params(void *data, unsigned width, unsigned height,
const struct gfx_tex_info *feedback_info = (const struct gfx_tex_info*)_feedback_info;
const struct gfx_tex_info *fbo_info = (const struct gfx_tex_info*)_fbo_info;
driver_t *driver = driver_get_ptr();
global_t *global = global_get_ptr();
cg_shader_data_t *cg = (cg_shader_data_t*)driver->video_shader_data;
(void)data;
@ -279,13 +278,13 @@ static void gl_cg_set_params(void *data, unsigned width, unsigned height,
set_param_2f(cg->prg[cg->active_idx].tex_size_f, tex_width, tex_height);
set_param_2f(cg->prg[cg->active_idx].out_size_f, out_width, out_height);
set_param_1f(cg->prg[cg->active_idx].frame_dir_f,
global->rewind.frame_is_reverse ? -1.0 : 1.0);
state_manager_frame_is_reversed() ? -1.0 : 1.0);
set_param_2f(cg->prg[cg->active_idx].vid_size_v, width, height);
set_param_2f(cg->prg[cg->active_idx].tex_size_v, tex_width, tex_height);
set_param_2f(cg->prg[cg->active_idx].out_size_v, out_width, out_height);
set_param_1f(cg->prg[cg->active_idx].frame_dir_v,
global->rewind.frame_is_reverse ? -1.0 : 1.0);
state_manager_frame_is_reversed() ? -1.0 : 1.0);
if (cg->prg[cg->active_idx].frame_cnt_f || cg->prg[cg->active_idx].frame_cnt_v)
{

View File

@ -963,7 +963,6 @@ static void gl_glsl_set_params(void *data, unsigned width, unsigned height,
const struct gfx_tex_info *fbo_info = (const struct gfx_tex_info*)_fbo_info;
struct glsl_attrib *attr = (struct glsl_attrib*)attribs;
driver_t *driver = driver_get_ptr();
global_t *global = global_get_ptr();
glsl_shader_data_t *glsl = (glsl_shader_data_t*)driver->video_shader_data;
if (!glsl)
@ -1002,7 +1001,7 @@ static void gl_glsl_set_params(void *data, unsigned width, unsigned height,
}
if (uni->frame_direction >= 0)
glUniform1i(uni->frame_direction, global->rewind.frame_is_reverse ? -1 : 1);
glUniform1i(uni->frame_direction, state_manager_frame_is_reversed() ? -1 : 1);
for (i = 0; i < glsl->shader->luts; i++)

View File

@ -15,8 +15,10 @@
*/
#include "shader_hlsl.h"
#include "../video_shader_parse.h"
#include "../d3d/d3d.h"
#include "../../rewind.h"
static const char *stock_hlsl_program =
"void main_vertex\n"
@ -117,7 +119,6 @@ static void hlsl_set_params(void *data, unsigned width, unsigned height,
(void)_feedback_info;
const struct gfx_tex_info *fbo_info = (const struct gfx_tex_info*)_fbo_info;
driver_t *driver = driver_get_ptr();
global_t *global = global_get_ptr();
hlsl_shader_data_t *hlsl = (hlsl_shader_data_t*)driver->video_shader_data;
if (!hlsl)
@ -135,13 +136,13 @@ static void hlsl_set_params(void *data, unsigned width, unsigned height,
set_param_2f(hlsl->prg[hlsl->active_idx].tex_size_f, tex_size, hlsl->prg[hlsl->active_idx].f_ctable);
set_param_2f(hlsl->prg[hlsl->active_idx].out_size_f, out_size, hlsl->prg[hlsl->active_idx].f_ctable);
set_param_1f(hlsl->prg[hlsl->active_idx].frame_cnt_f, frame_cnt, hlsl->prg[hlsl->active_idx].f_ctable);
set_param_1f(hlsl->prg[hlsl->active_idx].frame_dir_f, global->rewind.frame_is_reverse ? -1.0 : 1.0, hlsl->prg[hlsl->active_idx].f_ctable);
set_param_1f(hlsl->prg[hlsl->active_idx].frame_dir_f, state_manager_frame_is_reversed() ? -1.0 : 1.0, hlsl->prg[hlsl->active_idx].f_ctable);
set_param_2f(hlsl->prg[hlsl->active_idx].vid_size_v, ori_size, hlsl->prg[hlsl->active_idx].v_ctable);
set_param_2f(hlsl->prg[hlsl->active_idx].tex_size_v, tex_size, hlsl->prg[hlsl->active_idx].v_ctable);
set_param_2f(hlsl->prg[hlsl->active_idx].out_size_v, out_size, hlsl->prg[hlsl->active_idx].v_ctable);
set_param_1f(hlsl->prg[hlsl->active_idx].frame_cnt_v, frame_cnt, hlsl->prg[hlsl->active_idx].v_ctable);
set_param_1f(hlsl->prg[hlsl->active_idx].frame_dir_v, global->rewind.frame_is_reverse ? -1.0 : 1.0, hlsl->prg[hlsl->active_idx].v_ctable);
set_param_1f(hlsl->prg[hlsl->active_idx].frame_dir_v, state_manager_frame_is_reversed() ? -1.0 : 1.0, hlsl->prg[hlsl->active_idx].v_ctable);
/* TODO - set lookup textures/FBO textures/state parameters/etc */
}

View File

@ -30,6 +30,7 @@
#include "runloop.h"
#include "runloop_data.h"
#include "retroarch.h"
#include "rewind.h"
#include "performance.h"
#include "input/input_remapping.h"
#include "record/record_driver.h"
@ -294,9 +295,7 @@ void retro_init_libretro_cbs(void *data)
**/
void retro_set_rewind_callbacks(void)
{
global_t *global = global_get_ptr();
if (global->rewind.frame_is_reverse)
if (state_manager_frame_is_reversed())
{
pretro_set_audio_sample(audio_driver_sample_rewind);
pretro_set_audio_sample_batch(audio_driver_sample_batch_rewind);

View File

@ -64,6 +64,8 @@ repeat {
size thisstart;
#endif
static bool frame_is_reversed;
size_t state_manager_raw_maxsize(size_t uncomp)
{
/* bytes covered by a compressed block */
@ -588,3 +590,13 @@ void init_rewind(void)
pretro_serialize(state, global->rewind.size);
state_manager_push_do(global->rewind.state);
}
bool state_manager_frame_is_reversed(void)
{
return frame_is_reversed;
}
void state_manager_set_frame_is_reversed(bool value)
{
frame_is_reversed = value;
}

View File

@ -22,9 +22,9 @@
extern "C" {
#endif
#include <stdint.h>
#include <stddef.h>
#include <boolean.h>
#include <stdint.h>
typedef struct state_manager state_manager_t;
@ -68,6 +68,10 @@ size_t state_manager_raw_compress(const void *src, const void *dst, size_t len,
*/
void state_manager_raw_decompress(const void *patch, size_t patchlen, void *data, size_t datalen);
bool state_manager_frame_is_reversed(void);
void state_manager_set_frame_is_reversed(bool value);
#ifdef __cplusplus
}
#endif

View File

@ -167,10 +167,10 @@ static void check_rewind(settings_t *settings,
{
static bool first = true;
if (global->rewind.frame_is_reverse)
if (state_manager_frame_is_reversed())
{
audio_driver_frame_is_reverse();
global->rewind.frame_is_reverse = false;
state_manager_set_frame_is_reversed(false);
}
if (first)
@ -188,7 +188,7 @@ static void check_rewind(settings_t *settings,
if (state_manager_pop(global->rewind.state, &buf))
{
global->rewind.frame_is_reverse = true;
state_manager_set_frame_is_reversed(true);
audio_driver_setup_rewind();
rarch_main_msg_queue_push_new(MSG_REWINDING, 0,
@ -243,7 +243,7 @@ static void check_slowmotion(settings_t *settings, global_t *global,
if (settings->video.black_frame_insertion)
video_driver_cached_frame();
if (global->rewind.frame_is_reverse)
if (state_manager_frame_is_reversed())
rarch_main_msg_queue_push_new(MSG_SLOW_MOTION_REWIND, 0, 30, true);
else
rarch_main_msg_queue_push_new(MSG_SLOW_MOTION, 0, 30, true);

View File

@ -157,7 +157,6 @@ typedef struct global
/* Rewind support. */
state_manager_t *state;
size_t size;
bool frame_is_reverse;
} rewind;
struct