mirror of
https://github.com/libretro/RetroArch.git
synced 2024-11-24 00:20:01 +00:00
Add some fbdev refresh rate polls. Also Xv.
This commit is contained in:
parent
95f8205fd1
commit
c4f818599c
@ -1129,13 +1129,23 @@ static void omap_gfx_set_texture_enable(void *data, bool state, bool full_screen
|
|||||||
(void) full_screen;
|
(void) full_screen;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static float omap_get_refresh_rate(void *data)
|
||||||
|
{
|
||||||
|
omap_video_t *vid = (omap_video_t*)data;
|
||||||
|
struct fb_var_screeninfo *s = &vid->omap->current_state->si;
|
||||||
|
|
||||||
|
return 1000000.0f / s->pixclock /
|
||||||
|
(s->xres + s->left_margin + s->right_margin + s->hsync_len) * 1000000.0f /
|
||||||
|
(s->yres + s->upper_margin + s->lower_margin + s->vsync_len);
|
||||||
|
}
|
||||||
|
|
||||||
static const video_poke_interface_t omap_gfx_poke_interface = {
|
static const video_poke_interface_t omap_gfx_poke_interface = {
|
||||||
NULL, /* set_coords */
|
NULL, /* set_coords */
|
||||||
NULL, /* set_mvp */
|
NULL, /* set_mvp */
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
NULL, /* get_refresh_rate */
|
omap_get_refresh_rate,
|
||||||
NULL, /* set_filtering */
|
NULL, /* set_filtering */
|
||||||
NULL, /* get_video_output_size */
|
NULL, /* get_video_output_size */
|
||||||
NULL, /* get_video_output_prev */
|
NULL, /* get_video_output_prev */
|
||||||
|
@ -109,6 +109,7 @@ typedef struct
|
|||||||
uint32_t framebuffer_size; /* total size of the framebuffer */
|
uint32_t framebuffer_size; /* total size of the framebuffer */
|
||||||
int framebuffer_height;/* virtual vertical resolution */
|
int framebuffer_height;/* virtual vertical resolution */
|
||||||
uint32_t gfx_layer_size; /* the size of the primary layer */
|
uint32_t gfx_layer_size; /* the size of the primary layer */
|
||||||
|
float refresh_rate;
|
||||||
|
|
||||||
/* Layers support */
|
/* Layers support */
|
||||||
int gfx_layer_id;
|
int gfx_layer_id;
|
||||||
@ -416,6 +417,9 @@ static sunxi_disp_t *sunxi_disp_init(const char *device)
|
|||||||
ctx->framebuffer_height = ctx->framebuffer_size /
|
ctx->framebuffer_height = ctx->framebuffer_size /
|
||||||
(ctx->xres * ctx->bits_per_pixel / 8);
|
(ctx->xres * ctx->bits_per_pixel / 8);
|
||||||
ctx->gfx_layer_size = ctx->xres * ctx->yres * fb_var.bits_per_pixel / 8;
|
ctx->gfx_layer_size = ctx->xres * ctx->yres * fb_var.bits_per_pixel / 8;
|
||||||
|
ctx->refresh_rate = 1000000.0f / fb_var.pixclock * 1000000.0f /
|
||||||
|
(fb_var.yres + fb_var.upper_margin + fb_var.lower_margin + fb_var.vsync_len)
|
||||||
|
(fb_var.xres + fb_var.left_margin + fb_var.right_margin + fb_var.hsync_len);
|
||||||
|
|
||||||
if (ctx->framebuffer_size < ctx->gfx_layer_size)
|
if (ctx->framebuffer_size < ctx->gfx_layer_size)
|
||||||
{
|
{
|
||||||
@ -931,6 +935,13 @@ static void sunxi_set_aspect_ratio (void *data, unsigned aspect_ratio_idx)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static float sunxi_get_refresh_rate (void *data)
|
||||||
|
{
|
||||||
|
struct sunxi_video *_dispvars = (struct sunxi_video*)data;
|
||||||
|
|
||||||
|
return _dispvars->sunxi_disp->refresh_rate;
|
||||||
|
}
|
||||||
|
|
||||||
static const video_poke_interface_t sunxi_poke_interface = {
|
static const video_poke_interface_t sunxi_poke_interface = {
|
||||||
NULL, /* set_coords */
|
NULL, /* set_coords */
|
||||||
NULL, /* set_mvp */
|
NULL, /* set_mvp */
|
||||||
|
@ -203,18 +203,13 @@ static void xshm_grab_mouse_toggle(void *data)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static float xshm_poke_get_refresh_rate(void *data)
|
|
||||||
{
|
|
||||||
return x11_get_refresh_rate(data);
|
|
||||||
}
|
|
||||||
|
|
||||||
static video_poke_interface_t xshm_video_poke_interface = {
|
static video_poke_interface_t xshm_video_poke_interface = {
|
||||||
NULL, /* set_coords */
|
NULL, /* set_coords */
|
||||||
NULL, /* set_mvp */
|
NULL, /* set_mvp */
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
xshm_poke_get_refresh_rate,
|
x11_get_refresh_rate,
|
||||||
xshm_poke_set_filtering,
|
xshm_poke_set_filtering,
|
||||||
NULL, /* get_video_output_size */
|
NULL, /* get_video_output_size */
|
||||||
NULL, /* get_video_output_prev */
|
NULL, /* get_video_output_prev */
|
||||||
|
@ -933,11 +933,36 @@ static bool xv_read_viewport(void *data, uint8_t *buffer, bool is_idle)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static video_poke_interface_t xv_video_poke_interface = {
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
x11_get_refresh_rate,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
static void xv_get_poke_interface(void *data,
|
static void xv_get_poke_interface(void *data,
|
||||||
const video_poke_interface_t **iface)
|
const video_poke_interface_t **iface)
|
||||||
{
|
{
|
||||||
(void)data;
|
(void)data;
|
||||||
(void)iface;
|
*iface = &xv_video_poke_interface;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool xv_set_shader(void *data,
|
static bool xv_set_shader(void *data,
|
||||||
|
@ -50,6 +50,7 @@ typedef struct
|
|||||||
} native_window;
|
} native_window;
|
||||||
bool resize;
|
bool resize;
|
||||||
unsigned width, height;
|
unsigned width, height;
|
||||||
|
float refresh_rate;
|
||||||
} mali_ctx_data_t;
|
} mali_ctx_data_t;
|
||||||
|
|
||||||
static enum gfx_ctx_api mali_api = GFX_CTX_NONE;
|
static enum gfx_ctx_api mali_api = GFX_CTX_NONE;
|
||||||
@ -178,6 +179,11 @@ static bool gfx_ctx_mali_fbdev_set_video_mode(void *data,
|
|||||||
mali->native_window.width = vinfo.xres;
|
mali->native_window.width = vinfo.xres;
|
||||||
mali->native_window.height = vinfo.yres;
|
mali->native_window.height = vinfo.yres;
|
||||||
|
|
||||||
|
mali->refresh_rate =
|
||||||
|
ctx->refresh_rate = 1000000.0f / vinfo.pixclock * 1000000.0f /
|
||||||
|
(vinfo.yres + vinfo.upper_margin + vinfo.lower_margin + vinfo.vsync_len)
|
||||||
|
(vinfo.xres + vinfo.left_margin + vinfo.right_margin + vinfo.hsync_len);
|
||||||
|
|
||||||
#ifdef HAVE_EGL
|
#ifdef HAVE_EGL
|
||||||
if (!egl_create_context(&mali->egl, attribs))
|
if (!egl_create_context(&mali->egl, attribs))
|
||||||
{
|
{
|
||||||
@ -286,6 +292,13 @@ static void gfx_ctx_mali_fbdev_set_flags(void *data, uint32_t flags)
|
|||||||
(void)data;
|
(void)data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static float gfx_ctx_mali_fbdev_get_refresh_rate(void *data)
|
||||||
|
{
|
||||||
|
mali_ctx_data_t *mali = (mali_ctx_data_t*)data;
|
||||||
|
|
||||||
|
return mali->refresh_rate;
|
||||||
|
}
|
||||||
|
|
||||||
const gfx_ctx_driver_t gfx_ctx_mali_fbdev = {
|
const gfx_ctx_driver_t gfx_ctx_mali_fbdev = {
|
||||||
gfx_ctx_mali_fbdev_init,
|
gfx_ctx_mali_fbdev_init,
|
||||||
gfx_ctx_mali_fbdev_destroy,
|
gfx_ctx_mali_fbdev_destroy,
|
||||||
@ -294,7 +307,7 @@ const gfx_ctx_driver_t gfx_ctx_mali_fbdev = {
|
|||||||
gfx_ctx_mali_fbdev_set_swap_interval,
|
gfx_ctx_mali_fbdev_set_swap_interval,
|
||||||
gfx_ctx_mali_fbdev_set_video_mode,
|
gfx_ctx_mali_fbdev_set_video_mode,
|
||||||
gfx_ctx_mali_fbdev_get_video_size,
|
gfx_ctx_mali_fbdev_get_video_size,
|
||||||
NULL, /* get_refresh_rate */
|
gfx_ctx_mali_fbdev_get_refresh_rate,
|
||||||
NULL, /* get_video_output_size */
|
NULL, /* get_video_output_size */
|
||||||
NULL, /* get_video_output_prev */
|
NULL, /* get_video_output_prev */
|
||||||
NULL, /* get_video_output_next */
|
NULL, /* get_video_output_next */
|
||||||
|
Loading…
Reference in New Issue
Block a user