mirror of
https://github.com/CTCaer/RetroArch.git
synced 2025-02-21 20:22:43 +00:00
Refactor frame_is_reversed - shader drivers should no longer
be dependent upon global state
This commit is contained in:
parent
78d0a87004
commit
576626ead0
@ -38,7 +38,7 @@
|
|||||||
#include <rhash.h>
|
#include <rhash.h>
|
||||||
|
|
||||||
#include "../../dynamic.h"
|
#include "../../dynamic.h"
|
||||||
|
#include "../../rewind.h"
|
||||||
#include "../video_state_tracker.h"
|
#include "../video_state_tracker.h"
|
||||||
|
|
||||||
#if 0
|
#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 *feedback_info = (const struct gfx_tex_info*)_feedback_info;
|
||||||
const struct gfx_tex_info *fbo_info = (const struct gfx_tex_info*)_fbo_info;
|
const struct gfx_tex_info *fbo_info = (const struct gfx_tex_info*)_fbo_info;
|
||||||
driver_t *driver = driver_get_ptr();
|
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;
|
cg_shader_data_t *cg = (cg_shader_data_t*)driver->video_shader_data;
|
||||||
|
|
||||||
(void)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].tex_size_f, tex_width, tex_height);
|
||||||
set_param_2f(cg->prg[cg->active_idx].out_size_f, out_width, out_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,
|
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].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].tex_size_v, tex_width, tex_height);
|
||||||
set_param_2f(cg->prg[cg->active_idx].out_size_v, out_width, out_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,
|
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)
|
if (cg->prg[cg->active_idx].frame_cnt_f || cg->prg[cg->active_idx].frame_cnt_v)
|
||||||
{
|
{
|
||||||
|
@ -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;
|
const struct gfx_tex_info *fbo_info = (const struct gfx_tex_info*)_fbo_info;
|
||||||
struct glsl_attrib *attr = (struct glsl_attrib*)attribs;
|
struct glsl_attrib *attr = (struct glsl_attrib*)attribs;
|
||||||
driver_t *driver = driver_get_ptr();
|
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;
|
glsl_shader_data_t *glsl = (glsl_shader_data_t*)driver->video_shader_data;
|
||||||
|
|
||||||
if (!glsl)
|
if (!glsl)
|
||||||
@ -1002,7 +1001,7 @@ static void gl_glsl_set_params(void *data, unsigned width, unsigned height,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (uni->frame_direction >= 0)
|
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++)
|
for (i = 0; i < glsl->shader->luts; i++)
|
||||||
|
@ -15,8 +15,10 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "shader_hlsl.h"
|
#include "shader_hlsl.h"
|
||||||
|
|
||||||
#include "../video_shader_parse.h"
|
#include "../video_shader_parse.h"
|
||||||
#include "../d3d/d3d.h"
|
#include "../d3d/d3d.h"
|
||||||
|
#include "../../rewind.h"
|
||||||
|
|
||||||
static const char *stock_hlsl_program =
|
static const char *stock_hlsl_program =
|
||||||
"void main_vertex\n"
|
"void main_vertex\n"
|
||||||
@ -117,7 +119,6 @@ static void hlsl_set_params(void *data, unsigned width, unsigned height,
|
|||||||
(void)_feedback_info;
|
(void)_feedback_info;
|
||||||
const struct gfx_tex_info *fbo_info = (const struct gfx_tex_info*)_fbo_info;
|
const struct gfx_tex_info *fbo_info = (const struct gfx_tex_info*)_fbo_info;
|
||||||
driver_t *driver = driver_get_ptr();
|
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;
|
hlsl_shader_data_t *hlsl = (hlsl_shader_data_t*)driver->video_shader_data;
|
||||||
|
|
||||||
if (!hlsl)
|
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].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_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_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].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].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_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_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 */
|
/* TODO - set lookup textures/FBO textures/state parameters/etc */
|
||||||
}
|
}
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
#include "runloop.h"
|
#include "runloop.h"
|
||||||
#include "runloop_data.h"
|
#include "runloop_data.h"
|
||||||
#include "retroarch.h"
|
#include "retroarch.h"
|
||||||
|
#include "rewind.h"
|
||||||
#include "performance.h"
|
#include "performance.h"
|
||||||
#include "input/input_remapping.h"
|
#include "input/input_remapping.h"
|
||||||
#include "record/record_driver.h"
|
#include "record/record_driver.h"
|
||||||
@ -294,9 +295,7 @@ void retro_init_libretro_cbs(void *data)
|
|||||||
**/
|
**/
|
||||||
void retro_set_rewind_callbacks(void)
|
void retro_set_rewind_callbacks(void)
|
||||||
{
|
{
|
||||||
global_t *global = global_get_ptr();
|
if (state_manager_frame_is_reversed())
|
||||||
|
|
||||||
if (global->rewind.frame_is_reverse)
|
|
||||||
{
|
{
|
||||||
pretro_set_audio_sample(audio_driver_sample_rewind);
|
pretro_set_audio_sample(audio_driver_sample_rewind);
|
||||||
pretro_set_audio_sample_batch(audio_driver_sample_batch_rewind);
|
pretro_set_audio_sample_batch(audio_driver_sample_batch_rewind);
|
||||||
|
12
rewind.c
12
rewind.c
@ -64,6 +64,8 @@ repeat {
|
|||||||
size thisstart;
|
size thisstart;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static bool frame_is_reversed;
|
||||||
|
|
||||||
size_t state_manager_raw_maxsize(size_t uncomp)
|
size_t state_manager_raw_maxsize(size_t uncomp)
|
||||||
{
|
{
|
||||||
/* bytes covered by a compressed block */
|
/* bytes covered by a compressed block */
|
||||||
@ -588,3 +590,13 @@ void init_rewind(void)
|
|||||||
pretro_serialize(state, global->rewind.size);
|
pretro_serialize(state, global->rewind.size);
|
||||||
state_manager_push_do(global->rewind.state);
|
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;
|
||||||
|
}
|
||||||
|
6
rewind.h
6
rewind.h
@ -22,9 +22,9 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <boolean.h>
|
#include <boolean.h>
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
typedef struct state_manager state_manager_t;
|
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);
|
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
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -167,10 +167,10 @@ static void check_rewind(settings_t *settings,
|
|||||||
{
|
{
|
||||||
static bool first = true;
|
static bool first = true;
|
||||||
|
|
||||||
if (global->rewind.frame_is_reverse)
|
if (state_manager_frame_is_reversed())
|
||||||
{
|
{
|
||||||
audio_driver_frame_is_reverse();
|
audio_driver_frame_is_reverse();
|
||||||
global->rewind.frame_is_reverse = false;
|
state_manager_set_frame_is_reversed(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (first)
|
if (first)
|
||||||
@ -188,7 +188,7 @@ static void check_rewind(settings_t *settings,
|
|||||||
|
|
||||||
if (state_manager_pop(global->rewind.state, &buf))
|
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();
|
audio_driver_setup_rewind();
|
||||||
|
|
||||||
rarch_main_msg_queue_push_new(MSG_REWINDING, 0,
|
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)
|
if (settings->video.black_frame_insertion)
|
||||||
video_driver_cached_frame();
|
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);
|
rarch_main_msg_queue_push_new(MSG_SLOW_MOTION_REWIND, 0, 30, true);
|
||||||
else
|
else
|
||||||
rarch_main_msg_queue_push_new(MSG_SLOW_MOTION, 0, 30, true);
|
rarch_main_msg_queue_push_new(MSG_SLOW_MOTION, 0, 30, true);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user