Refactors pt3 (#12124)
* Remove video_pixel_get_alignment - move it to video drivers that use it * Rewrite video_driver_pixel_converter_{init/free} - get rid of p_rarch dependency * Replace some variables * (Menu) Get rid of cbs_refresh - was never set to any other function callback implementation
This commit is contained in:
parent
cb5fba6b2a
commit
a2ed065f25
|
@ -1032,7 +1032,6 @@ ifeq ($(HAVE_MENU_COMMON), 1)
|
||||||
menu/cbs/menu_cbs_select.o \
|
menu/cbs/menu_cbs_select.o \
|
||||||
menu/cbs/menu_cbs_start.o \
|
menu/cbs/menu_cbs_start.o \
|
||||||
menu/cbs/menu_cbs_info.o \
|
menu/cbs/menu_cbs_info.o \
|
||||||
menu/cbs/menu_cbs_refresh.o \
|
|
||||||
menu/cbs/menu_cbs_left.o \
|
menu/cbs/menu_cbs_left.o \
|
||||||
menu/cbs/menu_cbs_right.o \
|
menu/cbs/menu_cbs_right.o \
|
||||||
menu/cbs/menu_cbs_deferred_push.o \
|
menu/cbs/menu_cbs_deferred_push.o \
|
||||||
|
|
|
@ -243,6 +243,17 @@ void glkitview_bind_fbo(void);
|
||||||
#define gl2_renderchain_bind_backbuffer() gl2_bind_fb(0)
|
#define gl2_renderchain_bind_backbuffer() gl2_bind_fb(0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static unsigned gl2_get_alignment(unsigned pitch)
|
||||||
|
{
|
||||||
|
if (pitch & 1)
|
||||||
|
return 1;
|
||||||
|
if (pitch & 2)
|
||||||
|
return 2;
|
||||||
|
if (pitch & 4)
|
||||||
|
return 4;
|
||||||
|
return 8;
|
||||||
|
}
|
||||||
|
|
||||||
static bool gl2_shader_info(gl_t *gl,
|
static bool gl2_shader_info(gl_t *gl,
|
||||||
video_shader_ctx_info_t *shader_info)
|
video_shader_ctx_info_t *shader_info)
|
||||||
{
|
{
|
||||||
|
@ -1439,7 +1450,7 @@ static void gl2_renderchain_copy_frame(
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
glPixelStorei(GL_UNPACK_ALIGNMENT,
|
glPixelStorei(GL_UNPACK_ALIGNMENT,
|
||||||
video_pixel_get_alignment(width * gl->base_size));
|
gl2_get_alignment(width * gl->base_size));
|
||||||
|
|
||||||
/* Fallback for GLES devices without GL_BGRA_EXT. */
|
/* Fallback for GLES devices without GL_BGRA_EXT. */
|
||||||
if (gl->base_size == 4 && use_rgba)
|
if (gl->base_size == 4 && use_rgba)
|
||||||
|
@ -1492,7 +1503,7 @@ static void gl2_renderchain_copy_frame(
|
||||||
#else
|
#else
|
||||||
{
|
{
|
||||||
const GLvoid *data_buf = frame;
|
const GLvoid *data_buf = frame;
|
||||||
glPixelStorei(GL_UNPACK_ALIGNMENT, video_pixel_get_alignment(pitch));
|
glPixelStorei(GL_UNPACK_ALIGNMENT, gl2_get_alignment(pitch));
|
||||||
|
|
||||||
if (gl->base_size == 2 && !gl->have_es2_compat)
|
if (gl->base_size == 2 && !gl->have_es2_compat)
|
||||||
{
|
{
|
||||||
|
@ -2124,7 +2135,7 @@ static void gl2_update_input_size(gl_t *gl, unsigned width,
|
||||||
if (clear)
|
if (clear)
|
||||||
{
|
{
|
||||||
glPixelStorei(GL_UNPACK_ALIGNMENT,
|
glPixelStorei(GL_UNPACK_ALIGNMENT,
|
||||||
video_pixel_get_alignment(width * sizeof(uint32_t)));
|
gl2_get_alignment(width * sizeof(uint32_t)));
|
||||||
#if defined(HAVE_PSGL)
|
#if defined(HAVE_PSGL)
|
||||||
glBufferSubData(GL_TEXTURE_REFERENCE_BUFFER_SCE,
|
glBufferSubData(GL_TEXTURE_REFERENCE_BUFFER_SCE,
|
||||||
gl->tex_w * gl->tex_h * gl->tex_index * gl->base_size,
|
gl->tex_w * gl->tex_h * gl->tex_index * gl->base_size,
|
||||||
|
@ -2261,7 +2272,7 @@ static void gl2_set_texture_frame(void *data,
|
||||||
|
|
||||||
gl_load_texture_data(gl->menu_texture,
|
gl_load_texture_data(gl->menu_texture,
|
||||||
RARCH_WRAP_EDGE, menu_filter,
|
RARCH_WRAP_EDGE, menu_filter,
|
||||||
video_pixel_get_alignment(width * base_size),
|
gl2_get_alignment(width * base_size),
|
||||||
width, height, frame,
|
width, height, frame,
|
||||||
base_size);
|
base_size);
|
||||||
|
|
||||||
|
@ -2486,7 +2497,7 @@ static void gl2_pbo_async_readback(gl_t *gl)
|
||||||
gl->pbo_readback_valid[gl->pbo_readback_index] = true;
|
gl->pbo_readback_valid[gl->pbo_readback_index] = true;
|
||||||
|
|
||||||
gl2_renderchain_readback(gl, gl->renderchain_data,
|
gl2_renderchain_readback(gl, gl->renderchain_data,
|
||||||
video_pixel_get_alignment(gl->vp.width * sizeof(uint32_t)),
|
gl2_get_alignment(gl->vp.width * sizeof(uint32_t)),
|
||||||
fmt, type, NULL);
|
fmt, type, NULL);
|
||||||
gl2_renderchain_unbind_pbo();
|
gl2_renderchain_unbind_pbo();
|
||||||
}
|
}
|
||||||
|
@ -2618,11 +2629,8 @@ static void gl2_video_layout_free(gl_t *gl)
|
||||||
|
|
||||||
static void *gl2_video_layout_take_image(void *video_driver_data, struct texture_image image)
|
static void *gl2_video_layout_take_image(void *video_driver_data, struct texture_image image)
|
||||||
{
|
{
|
||||||
unsigned alignment;
|
GLuint tex = 0;
|
||||||
GLuint tex;
|
unsigned alignment = gl2_get_alignment(image.width * sizeof(uint32_t));
|
||||||
|
|
||||||
tex = 0;
|
|
||||||
alignment = video_pixel_get_alignment(image.width * sizeof(uint32_t));
|
|
||||||
|
|
||||||
glGenTextures(1, &tex);
|
glGenTextures(1, &tex);
|
||||||
|
|
||||||
|
@ -4294,7 +4302,7 @@ static bool gl2_overlay_load(void *data,
|
||||||
|
|
||||||
for (i = 0; i < num_images; i++)
|
for (i = 0; i < num_images; i++)
|
||||||
{
|
{
|
||||||
unsigned alignment = video_pixel_get_alignment(images[i].width
|
unsigned alignment = gl2_get_alignment(images[i].width
|
||||||
* sizeof(uint32_t));
|
* sizeof(uint32_t));
|
||||||
|
|
||||||
gl_load_texture_data(gl->overlay_tex[i],
|
gl_load_texture_data(gl->overlay_tex[i],
|
||||||
|
|
|
@ -1477,6 +1477,17 @@ static void gl1_gfx_set_viewport_wrapper(void *data, unsigned viewport_width,
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_OVERLAY
|
#ifdef HAVE_OVERLAY
|
||||||
|
static unsigned gl1_get_alignment(unsigned pitch)
|
||||||
|
{
|
||||||
|
if (pitch & 1)
|
||||||
|
return 1;
|
||||||
|
if (pitch & 2)
|
||||||
|
return 2;
|
||||||
|
if (pitch & 4)
|
||||||
|
return 4;
|
||||||
|
return 8;
|
||||||
|
}
|
||||||
|
|
||||||
static bool gl1_overlay_load(void *data,
|
static bool gl1_overlay_load(void *data,
|
||||||
const void *image_data, unsigned num_images)
|
const void *image_data, unsigned num_images)
|
||||||
{
|
{
|
||||||
|
@ -1517,7 +1528,7 @@ static bool gl1_overlay_load(void *data,
|
||||||
|
|
||||||
for (i = 0; i < num_images; i++)
|
for (i = 0; i < num_images; i++)
|
||||||
{
|
{
|
||||||
unsigned alignment = video_pixel_get_alignment(images[i].width
|
unsigned alignment = gl1_get_alignment(images[i].width
|
||||||
* sizeof(uint32_t));
|
* sizeof(uint32_t));
|
||||||
|
|
||||||
gl1_load_texture_data(gl->overlay_tex[i],
|
gl1_load_texture_data(gl->overlay_tex[i],
|
||||||
|
|
|
@ -1380,7 +1380,6 @@ MENU
|
||||||
#include "../menu/cbs/menu_cbs_select.c"
|
#include "../menu/cbs/menu_cbs_select.c"
|
||||||
#include "../menu/cbs/menu_cbs_start.c"
|
#include "../menu/cbs/menu_cbs_start.c"
|
||||||
#include "../menu/cbs/menu_cbs_info.c"
|
#include "../menu/cbs/menu_cbs_info.c"
|
||||||
#include "../menu/cbs/menu_cbs_refresh.c"
|
|
||||||
#include "../menu/cbs/menu_cbs_left.c"
|
#include "../menu/cbs/menu_cbs_left.c"
|
||||||
#include "../menu/cbs/menu_cbs_right.c"
|
#include "../menu/cbs/menu_cbs_right.c"
|
||||||
#include "../menu/cbs/menu_cbs_title.c"
|
#include "../menu/cbs/menu_cbs_title.c"
|
||||||
|
|
|
@ -24,6 +24,7 @@ static int deferred_push_content_list(void *data, void *userdata,
|
||||||
const char *path,
|
const char *path,
|
||||||
const char *label, unsigned type)
|
const char *label, unsigned type)
|
||||||
{
|
{
|
||||||
|
menu_displaylist_ctx_entry_t entry;
|
||||||
file_list_t *selection_buf = menu_entries_get_selection_buf_ptr(0);
|
file_list_t *selection_buf = menu_entries_get_selection_buf_ptr(0);
|
||||||
|
|
||||||
/* Must clear any existing menu search terms
|
/* Must clear any existing menu search terms
|
||||||
|
@ -35,7 +36,12 @@ static int deferred_push_content_list(void *data, void *userdata,
|
||||||
menu_driver_search_clear();
|
menu_driver_search_clear();
|
||||||
|
|
||||||
menu_navigation_set_selection(0);
|
menu_navigation_set_selection(0);
|
||||||
return action_refresh_default((file_list_t*)data, selection_buf);
|
|
||||||
|
entry.list = (file_list_t*)data;
|
||||||
|
entry.stack = selection_buf;
|
||||||
|
if (!menu_displaylist_push(&entry))
|
||||||
|
return -1;
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int menu_cbs_init_bind_content_list_switch(menu_file_list_cbs_t *cbs,
|
int menu_cbs_init_bind_content_list_switch(menu_file_list_cbs_t *cbs,
|
||||||
|
|
|
@ -1,46 +0,0 @@
|
||||||
/* RetroArch - A frontend for libretro.
|
|
||||||
* Copyright (C) 2011-2017 - Daniel De Matteis
|
|
||||||
*
|
|
||||||
* RetroArch is free software: you can redistribute it and/or modify it under the terms
|
|
||||||
* of the GNU General Public License as published by the Free Software Found-
|
|
||||||
* ation, either version 3 of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
|
||||||
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
||||||
* PURPOSE. See the GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along with RetroArch.
|
|
||||||
* If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "../menu_driver.h"
|
|
||||||
#include "../menu_cbs.h"
|
|
||||||
|
|
||||||
#ifndef BIND_ACTION_REFRESH
|
|
||||||
#define BIND_ACTION_REFRESH(cbs, name) (cbs)->action_refresh = (name)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int action_refresh_default(file_list_t *list, file_list_t *menu_list)
|
|
||||||
{
|
|
||||||
menu_displaylist_ctx_entry_t entry;
|
|
||||||
if (!menu_list)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
entry.list = list;
|
|
||||||
entry.stack = menu_list;
|
|
||||||
|
|
||||||
if (!menu_displaylist_push(&entry))
|
|
||||||
return -1;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int menu_cbs_init_bind_refresh(menu_file_list_cbs_t *cbs,
|
|
||||||
const char *path, const char *label, unsigned type, size_t idx)
|
|
||||||
{
|
|
||||||
if (!cbs)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
BIND_ACTION_REFRESH(cbs, action_refresh_default);
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
|
|
@ -221,8 +221,6 @@ int action_cb_push_dropdown_item_resolution(const char *path,
|
||||||
int action_cancel_pop_default(const char *path,
|
int action_cancel_pop_default(const char *path,
|
||||||
const char *label, unsigned type, size_t idx);
|
const char *label, unsigned type, size_t idx);
|
||||||
|
|
||||||
int action_refresh_default(file_list_t *list, file_list_t *menu_list);
|
|
||||||
|
|
||||||
int shader_action_parameter_right(unsigned type, const char *label, bool wraparound);
|
int shader_action_parameter_right(unsigned type, const char *label, bool wraparound);
|
||||||
int shader_action_preset_parameter_right(unsigned type, const char *label, bool wraparound);
|
int shader_action_preset_parameter_right(unsigned type, const char *label, bool wraparound);
|
||||||
|
|
||||||
|
@ -265,9 +263,6 @@ int menu_cbs_init_bind_right(menu_file_list_cbs_t *cbs,
|
||||||
const char *path, const char *label, unsigned type, size_t idx,
|
const char *path, const char *label, unsigned type, size_t idx,
|
||||||
const char *menu_label);
|
const char *menu_label);
|
||||||
|
|
||||||
int menu_cbs_init_bind_refresh(menu_file_list_cbs_t *cbs,
|
|
||||||
const char *path, const char *label, unsigned type, size_t idx);
|
|
||||||
|
|
||||||
int menu_cbs_init_bind_get_string_representation(menu_file_list_cbs_t *cbs,
|
int menu_cbs_init_bind_get_string_representation(menu_file_list_cbs_t *cbs,
|
||||||
const char *path, const char *label, unsigned type, size_t idx);
|
const char *path, const char *label, unsigned type, size_t idx);
|
||||||
|
|
||||||
|
|
|
@ -112,7 +112,6 @@ typedef struct menu_file_list_cbs
|
||||||
*path, const char *label, unsigned type);
|
*path, const char *label, unsigned type);
|
||||||
int (*action_left)(unsigned type, const char *label, bool wraparound);
|
int (*action_left)(unsigned type, const char *label, bool wraparound);
|
||||||
int (*action_right)(unsigned type, const char *label, bool wraparound);
|
int (*action_right)(unsigned type, const char *label, bool wraparound);
|
||||||
int (*action_refresh)(file_list_t *list, file_list_t *menu_list);
|
|
||||||
int (*action_up)(unsigned type, const char *label);
|
int (*action_up)(unsigned type, const char *label);
|
||||||
int (*action_label)(file_list_t *list,
|
int (*action_label)(file_list_t *list,
|
||||||
unsigned type, unsigned i,
|
unsigned type, unsigned i,
|
||||||
|
|
132
retroarch.c
132
retroarch.c
|
@ -1676,10 +1676,6 @@ static void menu_cbs_init(
|
||||||
* menu_cbs_deferred_push.c, then map this callback to the entry. */
|
* menu_cbs_deferred_push.c, then map this callback to the entry. */
|
||||||
menu_cbs_init_bind_deferred_push(cbs, path, label, type, idx);
|
menu_cbs_init_bind_deferred_push(cbs, path, label, type, idx);
|
||||||
|
|
||||||
/* It will try to find a corresponding callback function inside
|
|
||||||
* menu_cbs_refresh.c, then map this callback to the entry. */
|
|
||||||
menu_cbs_init_bind_refresh(cbs, path, label, type, idx);
|
|
||||||
|
|
||||||
/* It will try to find a corresponding callback function inside
|
/* It will try to find a corresponding callback function inside
|
||||||
* menu_cbs_get_string_representation.c, then map this callback to the entry. */
|
* menu_cbs_get_string_representation.c, then map this callback to the entry. */
|
||||||
menu_cbs_init_bind_get_string_representation(cbs, path, label, type, idx);
|
menu_cbs_init_bind_get_string_representation(cbs, path, label, type, idx);
|
||||||
|
@ -2280,20 +2276,20 @@ int generic_menu_entry_action(
|
||||||
cbs = selection_buf ? (menu_file_list_cbs_t*)
|
cbs = selection_buf ? (menu_file_list_cbs_t*)
|
||||||
selection_buf->list[i].actiondata : NULL;
|
selection_buf->list[i].actiondata : NULL;
|
||||||
|
|
||||||
|
if (MENU_ENTRIES_NEEDS_REFRESH(menu_st))
|
||||||
if (cbs && cbs->action_refresh)
|
|
||||||
{
|
{
|
||||||
if (MENU_ENTRIES_NEEDS_REFRESH(menu_st))
|
menu_displaylist_ctx_entry_t entry;
|
||||||
{
|
bool refresh = false;
|
||||||
bool refresh = false;
|
struct menu_state
|
||||||
struct menu_state
|
*menu_st = &p_rarch->menu_driver_state;
|
||||||
*menu_st = &p_rarch->menu_driver_state;
|
menu_list_t *menu_list = menu_st->entries.list;
|
||||||
menu_list_t *menu_list = menu_st->entries.list;
|
file_list_t *menu_stack = menu_list ? MENU_LIST_GET(menu_list, (unsigned)0) : NULL;
|
||||||
file_list_t *menu_stack = menu_list ? MENU_LIST_GET(menu_list, (unsigned)0) : NULL;
|
|
||||||
|
|
||||||
cbs->action_refresh(selection_buf, menu_stack);
|
entry.list = selection_buf;
|
||||||
menu_entries_ctl(MENU_ENTRIES_CTL_UNSET_REFRESH, &refresh);
|
entry.stack = menu_stack;
|
||||||
}
|
|
||||||
|
menu_displaylist_push(&entry);
|
||||||
|
menu_entries_ctl(MENU_ENTRIES_CTL_UNSET_REFRESH, &refresh);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_ACCESSIBILITY
|
#ifdef HAVE_ACCESSIBILITY
|
||||||
|
@ -3010,7 +3006,6 @@ void menu_entries_append(
|
||||||
cbs->action_content_list_switch = NULL;
|
cbs->action_content_list_switch = NULL;
|
||||||
cbs->action_left = NULL;
|
cbs->action_left = NULL;
|
||||||
cbs->action_right = NULL;
|
cbs->action_right = NULL;
|
||||||
cbs->action_refresh = NULL;
|
|
||||||
cbs->action_up = NULL;
|
cbs->action_up = NULL;
|
||||||
cbs->action_label = NULL;
|
cbs->action_label = NULL;
|
||||||
cbs->action_sublabel = NULL;
|
cbs->action_sublabel = NULL;
|
||||||
|
@ -3098,7 +3093,6 @@ bool menu_entries_append_enum(
|
||||||
cbs->action_content_list_switch = NULL;
|
cbs->action_content_list_switch = NULL;
|
||||||
cbs->action_left = NULL;
|
cbs->action_left = NULL;
|
||||||
cbs->action_right = NULL;
|
cbs->action_right = NULL;
|
||||||
cbs->action_refresh = NULL;
|
|
||||||
cbs->action_up = NULL;
|
cbs->action_up = NULL;
|
||||||
cbs->action_label = NULL;
|
cbs->action_label = NULL;
|
||||||
cbs->action_sublabel = NULL;
|
cbs->action_sublabel = NULL;
|
||||||
|
@ -3186,7 +3180,6 @@ void menu_entries_prepend(file_list_t *list,
|
||||||
cbs->action_content_list_switch = NULL;
|
cbs->action_content_list_switch = NULL;
|
||||||
cbs->action_left = NULL;
|
cbs->action_left = NULL;
|
||||||
cbs->action_right = NULL;
|
cbs->action_right = NULL;
|
||||||
cbs->action_refresh = NULL;
|
|
||||||
cbs->action_up = NULL;
|
cbs->action_up = NULL;
|
||||||
cbs->action_label = NULL;
|
cbs->action_label = NULL;
|
||||||
cbs->action_sublabel = NULL;
|
cbs->action_sublabel = NULL;
|
||||||
|
@ -29665,22 +29658,23 @@ static void video_driver_monitor_compute_fps_statistics(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void video_driver_pixel_converter_free(
|
static void video_driver_pixel_converter_free(
|
||||||
struct rarch_state *p_rarch)
|
video_pixel_scaler_t *scalr)
|
||||||
{
|
{
|
||||||
if (p_rarch->video_driver_scaler_ptr->scaler)
|
if (!scalr)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (scalr->scaler)
|
||||||
{
|
{
|
||||||
scaler_ctx_gen_reset(p_rarch->video_driver_scaler_ptr->scaler);
|
scaler_ctx_gen_reset(scalr->scaler);
|
||||||
free(p_rarch->video_driver_scaler_ptr->scaler);
|
free(scalr->scaler);
|
||||||
}
|
}
|
||||||
if (p_rarch->video_driver_scaler_ptr->scaler_out)
|
if (scalr->scaler_out)
|
||||||
free(p_rarch->video_driver_scaler_ptr->scaler_out);
|
free(scalr->scaler_out);
|
||||||
|
|
||||||
p_rarch->video_driver_scaler_ptr->scaler = NULL;
|
scalr->scaler = NULL;
|
||||||
p_rarch->video_driver_scaler_ptr->scaler_out = NULL;
|
scalr->scaler_out = NULL;
|
||||||
|
|
||||||
free(p_rarch->video_driver_scaler_ptr);
|
free(scalr);
|
||||||
|
|
||||||
p_rarch->video_driver_scaler_ptr = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void video_driver_free_hw_context(struct rarch_state *p_rarch)
|
static void video_driver_free_hw_context(struct rarch_state *p_rarch)
|
||||||
|
@ -29735,8 +29729,9 @@ static void video_driver_free_internal(void)
|
||||||
&& p_rarch->current_video->free)
|
&& p_rarch->current_video->free)
|
||||||
p_rarch->current_video->free(p_rarch->video_driver_data);
|
p_rarch->current_video->free(p_rarch->video_driver_data);
|
||||||
|
|
||||||
if (p_rarch && p_rarch->video_driver_scaler_ptr)
|
if (p_rarch->video_driver_scaler_ptr)
|
||||||
video_driver_pixel_converter_free(p_rarch);
|
video_driver_pixel_converter_free(p_rarch->video_driver_scaler_ptr);
|
||||||
|
p_rarch->video_driver_scaler_ptr = NULL;
|
||||||
#ifdef HAVE_VIDEO_FILTER
|
#ifdef HAVE_VIDEO_FILTER
|
||||||
video_driver_filter_free();
|
video_driver_filter_free();
|
||||||
#endif
|
#endif
|
||||||
|
@ -29750,73 +29745,59 @@ static void video_driver_free_internal(void)
|
||||||
video_driver_monitor_compute_fps_statistics();
|
video_driver_monitor_compute_fps_statistics();
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool video_driver_pixel_converter_init(
|
static video_pixel_scaler_t *video_driver_pixel_converter_init(
|
||||||
struct rarch_state *p_rarch,
|
const enum retro_pixel_format video_driver_pix_fmt,
|
||||||
|
struct retro_hw_render_callback *hwr,
|
||||||
unsigned size)
|
unsigned size)
|
||||||
{
|
{
|
||||||
struct retro_hw_render_callback *hwr =
|
|
||||||
VIDEO_DRIVER_GET_HW_CONTEXT_INTERNAL(p_rarch);
|
|
||||||
void *scalr_out = NULL;
|
void *scalr_out = NULL;
|
||||||
video_pixel_scaler_t *scalr = NULL;
|
video_pixel_scaler_t *scalr = NULL;
|
||||||
struct scaler_ctx *scalr_ctx = NULL;
|
struct scaler_ctx *scalr_ctx = NULL;
|
||||||
const enum retro_pixel_format
|
|
||||||
video_driver_pix_fmt = p_rarch->video_driver_pix_fmt;
|
|
||||||
|
|
||||||
/* If pixel format is not 0RGB1555, we don't need to do
|
/* If pixel format is not 0RGB1555, we don't need to do
|
||||||
* any internal pixel conversion. */
|
* any internal pixel conversion. */
|
||||||
if (video_driver_pix_fmt != RETRO_PIXEL_FORMAT_0RGB1555)
|
if (video_driver_pix_fmt != RETRO_PIXEL_FORMAT_0RGB1555)
|
||||||
return true;
|
return NULL;
|
||||||
|
|
||||||
/* No need to perform pixel conversion for HW rendering contexts. */
|
/* No need to perform pixel conversion for HW rendering contexts. */
|
||||||
if (hwr && hwr->context_type != RETRO_HW_CONTEXT_NONE)
|
if (hwr && hwr->context_type != RETRO_HW_CONTEXT_NONE)
|
||||||
return true;
|
return NULL;
|
||||||
|
|
||||||
RARCH_WARN("[Video]: 0RGB1555 pixel format is deprecated,"
|
RARCH_WARN("[Video]: 0RGB1555 pixel format is deprecated,"
|
||||||
" and will be slower. For 15/16-bit, RGB565"
|
" and will be slower. For 15/16-bit, RGB565"
|
||||||
" format is preferred.\n");
|
" format is preferred.\n");
|
||||||
|
|
||||||
scalr = (video_pixel_scaler_t*)malloc(sizeof(*scalr));
|
if (!(scalr = (video_pixel_scaler_t*)malloc(sizeof(*scalr))))
|
||||||
|
|
||||||
if (!scalr)
|
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
scalr->scaler = NULL;
|
scalr->scaler = NULL;
|
||||||
scalr->scaler_out = NULL;
|
scalr->scaler_out = NULL;
|
||||||
|
|
||||||
p_rarch->video_driver_scaler_ptr = scalr;
|
if (!(scalr_ctx = (struct scaler_ctx*)calloc(1, sizeof(*scalr_ctx))))
|
||||||
|
|
||||||
scalr_ctx = (struct scaler_ctx*)calloc(1, sizeof(*scalr_ctx));
|
|
||||||
|
|
||||||
if (!scalr_ctx)
|
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
p_rarch->video_driver_scaler_ptr->scaler = scalr_ctx;
|
scalr->scaler = scalr_ctx;
|
||||||
p_rarch->video_driver_scaler_ptr->scaler->scaler_type = SCALER_TYPE_POINT;
|
scalr->scaler->scaler_type = SCALER_TYPE_POINT;
|
||||||
p_rarch->video_driver_scaler_ptr->scaler->in_fmt = SCALER_FMT_0RGB1555;
|
scalr->scaler->in_fmt = SCALER_FMT_0RGB1555;
|
||||||
|
/* TODO/FIXME: Pick either ARGB8888 or RGB565 depending on driver. */
|
||||||
/* TODO: Pick either ARGB8888 or RGB565 depending on driver. */
|
scalr->scaler->out_fmt = SCALER_FMT_RGB565;
|
||||||
p_rarch->video_driver_scaler_ptr->scaler->out_fmt = SCALER_FMT_RGB565;
|
|
||||||
|
|
||||||
if (!scaler_ctx_gen_filter(scalr_ctx))
|
if (!scaler_ctx_gen_filter(scalr_ctx))
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
scalr_out = calloc(sizeof(uint16_t), size * size);
|
if (!(scalr_out = calloc(sizeof(uint16_t), size * size)))
|
||||||
|
|
||||||
if (!scalr_out)
|
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
p_rarch->video_driver_scaler_ptr->scaler_out = scalr_out;
|
scalr->scaler_out = scalr_out;
|
||||||
|
|
||||||
return true;
|
return scalr;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
if (p_rarch && p_rarch->video_driver_scaler_ptr)
|
video_driver_pixel_converter_free(scalr);
|
||||||
video_driver_pixel_converter_free(p_rarch);
|
|
||||||
#ifdef HAVE_VIDEO_FILTER
|
#ifdef HAVE_VIDEO_FILTER
|
||||||
video_driver_filter_free();
|
video_driver_filter_free();
|
||||||
#endif
|
#endif
|
||||||
|
return NULL;
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void video_driver_set_viewport_config(struct retro_game_geometry *geom,
|
static void video_driver_set_viewport_config(struct retro_game_geometry *geom,
|
||||||
|
@ -29913,9 +29894,9 @@ static bool video_driver_init_internal(bool *video_is_threaded)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Update core-dependent aspect ratio values. */
|
/* Update core-dependent aspect ratio values. */
|
||||||
video_driver_set_viewport_square_pixel(&p_rarch->video_driver_av_info.geometry);
|
video_driver_set_viewport_square_pixel(geom);
|
||||||
video_driver_set_viewport_core();
|
video_driver_set_viewport_core();
|
||||||
video_driver_set_viewport_config(&p_rarch->video_driver_av_info.geometry, p_rarch->configuration_settings);
|
video_driver_set_viewport_config(geom, settings);
|
||||||
|
|
||||||
/* Update CUSTOM viewport. */
|
/* Update CUSTOM viewport. */
|
||||||
custom_vp = video_viewport_get_custom();
|
custom_vp = video_viewport_get_custom();
|
||||||
|
@ -29979,12 +29960,10 @@ static bool video_driver_init_internal(bool *video_is_threaded)
|
||||||
video_driver_display_userdata_set(0);
|
video_driver_display_userdata_set(0);
|
||||||
video_driver_window_set(0);
|
video_driver_window_set(0);
|
||||||
|
|
||||||
if (!video_driver_pixel_converter_init(p_rarch,
|
p_rarch->video_driver_scaler_ptr = video_driver_pixel_converter_init(
|
||||||
RARCH_SCALE_BASE * scale))
|
p_rarch->video_driver_pix_fmt,
|
||||||
{
|
VIDEO_DRIVER_GET_HW_CONTEXT_INTERNAL(p_rarch),
|
||||||
RARCH_ERR("[Video]: Failed to initialize pixel converter.\n");
|
RARCH_SCALE_BASE * scale);
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
|
|
||||||
video.width = width;
|
video.width = width;
|
||||||
video.height = height;
|
video.height = height;
|
||||||
|
@ -31120,17 +31099,6 @@ struct video_viewport *video_viewport_get_custom(void)
|
||||||
return &settings->video_viewport_custom;
|
return &settings->video_viewport_custom;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned video_pixel_get_alignment(unsigned pitch)
|
|
||||||
{
|
|
||||||
if (pitch & 1)
|
|
||||||
return 1;
|
|
||||||
if (pitch & 2)
|
|
||||||
return 2;
|
|
||||||
if (pitch & 4)
|
|
||||||
return 4;
|
|
||||||
return 8;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* video_driver_frame:
|
* video_driver_frame:
|
||||||
* @data : pointer to data of the video frame.
|
* @data : pointer to data of the video frame.
|
||||||
|
|
|
@ -1676,8 +1676,6 @@ void video_monitor_set_refresh_rate(float hz);
|
||||||
bool video_monitor_fps_statistics(double *refresh_rate,
|
bool video_monitor_fps_statistics(double *refresh_rate,
|
||||||
double *deviation, unsigned *sample_points);
|
double *deviation, unsigned *sample_points);
|
||||||
|
|
||||||
unsigned video_pixel_get_alignment(unsigned pitch);
|
|
||||||
|
|
||||||
void crt_switch_driver_reinit(void);
|
void crt_switch_driver_reinit(void);
|
||||||
|
|
||||||
#define video_driver_translate_coord_viewport_wrap(vp, mouse_x, mouse_y, res_x, res_y, res_screen_x, res_screen_y) \
|
#define video_driver_translate_coord_viewport_wrap(vp, mouse_x, mouse_y, res_x, res_y, res_screen_x, res_screen_y) \
|
||||||
|
|
Loading…
Reference in New Issue