diff --git a/gfx/common/d3d8_defines.h b/gfx/common/d3d8_defines.h index bcf88b91e0..93da498acf 100644 --- a/gfx/common/d3d8_defines.h +++ b/gfx/common/d3d8_defines.h @@ -29,27 +29,9 @@ RETRO_BEGIN_DECLS typedef struct d3d8_video { - bool keep_aspect; - bool should_resize; - bool quitting; - bool needs_restore; - bool overlays_enabled; - /* TODO - refactor this away properly. */ - bool resolution_hd_enable; - - /* Only used for Xbox */ - bool widescreen_mode; - - unsigned cur_mon_id; - unsigned dev_rotation; - overlay_t *menu; void *renderchain_data; - math_matrix_4x4 mvp; - math_matrix_4x4 mvp_rotate; - math_matrix_4x4 mvp_transposed; - struct video_viewport vp; struct video_shader shader; video_info_t video_info; @@ -63,14 +45,31 @@ typedef struct d3d8_video struct { - int size; - int offset; void *buffer; void *decl; + int size; + int offset; }menu_display; - size_t overlays_size; overlay_t *overlays; + size_t overlays_size; + unsigned cur_mon_id; + unsigned dev_rotation; + math_matrix_4x4 mvp; /* float alignment */ + math_matrix_4x4 mvp_rotate; /* float alignment */ + math_matrix_4x4 mvp_transposed; /* float alignment */ + + bool keep_aspect; + bool should_resize; + bool quitting; + bool needs_restore; + bool overlays_enabled; + /* TODO - refactor this away properly. */ + bool resolution_hd_enable; + + /* Only used for Xbox */ + bool widescreen_mode; + } d3d8_video_t; RETRO_END_DECLS diff --git a/gfx/common/gl3_common.h b/gfx/common/gl3_defines.h similarity index 96% rename from gfx/common/gl3_common.h rename to gfx/common/gl3_defines.h index 79d41c40aa..749998d88c 100644 --- a/gfx/common/gl3_common.h +++ b/gfx/common/gl3_defines.h @@ -14,8 +14,8 @@ * If not, see . */ -#ifndef __GL_CORE_COMMON_H -#define __GL_CORE_COMMON_H +#ifndef __GL3_DEFINES_H +#define __GL3_DEFINES_H #include #include @@ -139,8 +139,6 @@ typedef struct gl3 bool pbo_readback_valid[GL_CORE_NUM_PBOS]; } gl3_t; -void gl3_bind_scratch_vbo(gl3_t *gl, const void *data, size_t size); - RETRO_END_DECLS #endif diff --git a/gfx/drivers/fpga_gfx.c b/gfx/drivers/fpga_gfx.c index 4d0c76602d..468f09ff63 100644 --- a/gfx/drivers/fpga_gfx.c +++ b/gfx/drivers/fpga_gfx.c @@ -42,15 +42,17 @@ typedef struct RegOp { - int fd; void *ptr; + int fd; int only_mmap; int only_munmap; } RegOp; typedef struct fpga { - bool rgb32; + RegOp regOp; /* ptr alignment */ + volatile unsigned *framebuffer; + unsigned char *menu_frame; unsigned menu_width; unsigned menu_height; unsigned menu_pitch; @@ -59,10 +61,7 @@ typedef struct fpga unsigned video_pitch; unsigned video_bits; unsigned menu_bits; - - RegOp regOp; - volatile unsigned *framebuffer; - unsigned char *menu_frame; + bool rgb32; } fpga_t; static unsigned int get_memory_size(void) diff --git a/gfx/drivers/gdi_gfx.c b/gfx/drivers/gdi_gfx.c index 123347a396..318655fba2 100644 --- a/gfx/drivers/gdi_gfx.c +++ b/gfx/drivers/gdi_gfx.c @@ -46,6 +46,19 @@ #include "../common/win32_common.h" #endif +struct bitmap_info +{ + BITMAPINFOHEADER header; + union + { + RGBQUAD colors; + DWORD masks[3]; + } u; +}; + +HDC win32_gdi_hdc; +static void *dinput_gdi; + /* * DISPLAY DRIVER */ @@ -331,20 +344,6 @@ font_renderer_t gdi_font = { * VIDEO DRIVER */ -HDC win32_gdi_hdc; -static void *dinput_gdi; - -struct bitmap_info -{ - BITMAPINFOHEADER header; - union - { - RGBQUAD colors; - DWORD masks[3]; - } u; -}; - - static void gfx_ctx_gdi_update_title(void) { char title[128]; @@ -881,10 +880,10 @@ static void gdi_set_texture_frame(void *data, free(gdi->menu_frame); gdi->menu_frame = NULL; - if ( !gdi->menu_frame || - gdi->menu_width != width || - gdi->menu_height != height || - gdi->menu_pitch != pitch) + if ( !gdi->menu_frame + || (gdi->menu_width != width) + || (gdi->menu_height != height) + || (gdi->menu_pitch != pitch)) { if (pitch && height) { diff --git a/gfx/drivers/gl3.c b/gfx/drivers/gl3.c index 794a06ca9e..26c7cb9c16 100644 --- a/gfx/drivers/gl3.c +++ b/gfx/drivers/gl3.c @@ -27,7 +27,7 @@ #include -#include "../common/gl3_common.h" +#include "../common/gl3_defines.h" #include #include @@ -67,6 +67,22 @@ static void gl3_set_viewport(gl3_t *gl, unsigned viewport_height, bool force_full, bool allow_rotate); +/** + * GL3 COMMON + */ + +static void gl3_bind_scratch_vbo(gl3_t *gl, const void *data, size_t size) +{ + if (!gl->scratch_vbos[gl->scratch_vbo_index]) + glGenBuffers(1, &gl->scratch_vbos[gl->scratch_vbo_index]); + glBindBuffer(GL_ARRAY_BUFFER, gl->scratch_vbos[gl->scratch_vbo_index]); + glBufferData(GL_ARRAY_BUFFER, size, data, GL_STREAM_DRAW); + gl->scratch_vbo_index++; + if (gl->scratch_vbo_index >= GL_CORE_NUM_VBOS) + gl->scratch_vbo_index = 0; +} + + /** * DISPLAY DRIVER */ @@ -953,17 +969,6 @@ static void gl3_fence_iterate(gl3_t *gl, unsigned hard_sync_frames) } } -void gl3_bind_scratch_vbo(gl3_t *gl, const void *data, size_t size) -{ - if (!gl->scratch_vbos[gl->scratch_vbo_index]) - glGenBuffers(1, &gl->scratch_vbos[gl->scratch_vbo_index]); - glBindBuffer(GL_ARRAY_BUFFER, gl->scratch_vbos[gl->scratch_vbo_index]); - glBufferData(GL_ARRAY_BUFFER, size, data, GL_STREAM_DRAW); - gl->scratch_vbo_index++; - if (gl->scratch_vbo_index >= GL_CORE_NUM_VBOS) - gl->scratch_vbo_index = 0; -} - #ifdef HAVE_OVERLAY static void gl3_free_overlay(gl3_t *gl) { diff --git a/gfx/drivers/gx2_gfx.c b/gfx/drivers/gx2_gfx.c index 81d3f9ed9d..9f6715e92e 100644 --- a/gfx/drivers/gx2_gfx.c +++ b/gfx/drivers/gx2_gfx.c @@ -55,6 +55,21 @@ #include "../font_driver.h" +/* Temporary workaround for GX2 not being able to poll flags during init */ +static gfx_ctx_driver_t gx2_fake_context; + +static const wiiu_render_mode_t gx2_render_mode_map[] = +{ + {0}, /* GX2_TV_SCAN_MODE_NONE */ + {854, 480, GX2_TV_RENDER_MODE_WIDE_480P}, /* GX2_TV_SCAN_MODE_576I */ + {854, 480, GX2_TV_RENDER_MODE_WIDE_480P}, /* GX2_TV_SCAN_MODE_480I */ + {854, 480, GX2_TV_RENDER_MODE_WIDE_480P}, /* GX2_TV_SCAN_MODE_480P */ + {1280, 720, GX2_TV_RENDER_MODE_WIDE_720P}, /* GX2_TV_SCAN_MODE_720P */ + {0}, /* GX2_TV_SCAN_MODE_unk */ + {1920, 1080, GX2_TV_RENDER_MODE_WIDE_1080P}, /* GX2_TV_SCAN_MODE_1080I */ + {1920, 1080, GX2_TV_RENDER_MODE_WIDE_1080P} /* GX2_TV_SCAN_MODE_1080P */ +}; + /* * DISPLAY DRIVER */ @@ -717,21 +732,6 @@ font_renderer_t wiiu_font = * VIDEO DRIVER */ -/* Temporary workaround for gx2 not being able to poll flags during init */ -static gfx_ctx_driver_t gx2_fake_context; - -static const wiiu_render_mode_t gx2_render_mode_map[] = -{ - {0}, /* GX2_TV_SCAN_MODE_NONE */ - {854, 480, GX2_TV_RENDER_MODE_WIDE_480P}, /* GX2_TV_SCAN_MODE_576I */ - {854, 480, GX2_TV_RENDER_MODE_WIDE_480P}, /* GX2_TV_SCAN_MODE_480I */ - {854, 480, GX2_TV_RENDER_MODE_WIDE_480P}, /* GX2_TV_SCAN_MODE_480P */ - {1280, 720, GX2_TV_RENDER_MODE_WIDE_720P}, /* GX2_TV_SCAN_MODE_720P */ - {0}, /* GX2_TV_SCAN_MODE_unk */ - {1920, 1080, GX2_TV_RENDER_MODE_WIDE_1080P}, /* GX2_TV_SCAN_MODE_1080I */ - {1920, 1080, GX2_TV_RENDER_MODE_WIDE_1080P} /* GX2_TV_SCAN_MODE_1080P */ -}; - static bool gx2_set_shader(void *data, enum rarch_shader_type type, const char *path); @@ -1549,8 +1549,8 @@ static bool wiiu_init_frame_textures(wiiu_video_t *wiiu, unsigned width, unsigne GX2CalcSurfaceSizeAndAlignment(&wiiu->pass[i].texture.surface); GX2InitTextureRegs(&wiiu->pass[i].texture); - if ( (i != (wiiu->shader_preset->passes - 1)) - || (width != wiiu->vp.width) + if ( (i != (wiiu->shader_preset->passes - 1)) + || (width != wiiu->vp.width) || (height != wiiu->vp.height)) { wiiu->pass[i].mem1 = true; diff --git a/gfx/drivers/gx_gfx.c b/gfx/drivers/gx_gfx.c index dc8185fb10..d8e2fd384d 100644 --- a/gfx/drivers/gx_gfx.c +++ b/gfx/drivers/gx_gfx.c @@ -75,111 +75,6 @@ } #endif -extern syssram* __SYS_LockSram(void); -extern u32 __SYS_UnlockSram(u32 write); - -struct gx_overlay_data -{ - GXTexObj tex; - float tex_coord[8]; - float vertex_coord[8]; - float alpha_mod; -}; - -typedef struct gx_video -{ - bool should_resize; - bool keep_aspect; - bool double_strike; - bool rgb32; - bool menu_texture_enable; - bool vsync; -#ifdef HAVE_OVERLAY - bool overlay_enable; - bool overlay_full_screen; -#endif - - int8_t system_xOrigin; - int8_t used_system_xOrigin; - int8_t xOriginNeg; - int8_t xOriginPos; - int8_t yOriginNeg; - int8_t yOriginPos; - - uint16_t xOrigin; - uint16_t yOrigin; - - unsigned scale; - unsigned overscan_correction_top; - unsigned overscan_correction_bottom; - unsigned old_width; - unsigned old_height; - unsigned current_framebuf; -#ifdef HAVE_OVERLAY - unsigned overlays; -#endif - - uint32_t orientation; - - video_viewport_t vp; - void *framebuf[2]; - uint32_t *menu_data; /* FIXME: Should be const uint16_t*. */ -#ifdef HAVE_OVERLAY - struct gx_overlay_data *overlay; -#endif -} gx_video_t; - -static struct -{ - unsigned width; - unsigned height; - GXTexObj obj; - uint32_t *data; /* needs to be resizable. */ -} g_tex; - -static struct -{ - uint32_t data[240 * 212]; - GXTexObj obj; -} menu_tex ATTRIBUTE_ALIGN(32); - -static OSCond g_video_cond; - -static volatile bool g_draw_done = false; - -static uint8_t gx_fifo[256 * 1024] ATTRIBUTE_ALIGN(32); -static uint8_t display_list[1024] ATTRIBUTE_ALIGN(32); - -static uint32_t retraceCount = 0; -static uint32_t referenceRetraceCount = 0; - -static unsigned max_height = 0; - -static size_t display_list_size = 0; - -GXRModeObj gx_mode; - -float verts[16] ATTRIBUTE_ALIGN(32) = { - -1, 1, -0.5, - 1, 1, -0.5, - -1, -1, -0.5, - 1, -1, -0.5, -}; - -float vertex_ptr[8] ATTRIBUTE_ALIGN(32) = { - 0, 0, - 1, 0, - 0, 1, - 1, 1, -}; - -u8 color_ptr[16] ATTRIBUTE_ALIGN(32) = { - 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, -}; - enum { GX_RESOLUTIONS_DEFAULT = 0, @@ -225,6 +120,108 @@ enum GX_RESOLUTIONS_LAST = GX_RESOLUTIONS_640_480, }; +extern syssram* __SYS_LockSram(void); +extern u32 __SYS_UnlockSram(u32 write); + +struct gx_overlay_data +{ + GXTexObj tex; + float tex_coord[8]; + float vertex_coord[8]; + float alpha_mod; +}; + +typedef struct gx_video +{ + video_viewport_t vp; + void *framebuf[2]; + uint32_t *menu_data; /* FIXME: Should be const uint16_t*. */ +#ifdef HAVE_OVERLAY + struct gx_overlay_data *overlay; +#endif + + unsigned scale; + unsigned overscan_correction_top; + unsigned overscan_correction_bottom; + unsigned old_width; + unsigned old_height; + unsigned current_framebuf; +#ifdef HAVE_OVERLAY + unsigned overlays; +#endif + uint32_t orientation; + uint16_t xOrigin; + uint16_t yOrigin; + int8_t system_xOrigin; + int8_t used_system_xOrigin; + int8_t xOriginNeg; + int8_t xOriginPos; + int8_t yOriginNeg; + int8_t yOriginPos; + + bool should_resize; + bool keep_aspect; + bool double_strike; + bool rgb32; + bool menu_texture_enable; + bool vsync; +#ifdef HAVE_OVERLAY + bool overlay_enable; + bool overlay_full_screen; +#endif +} gx_video_t; + +static struct +{ + uint32_t *data; /* needs to be resizable. */ + unsigned width; + unsigned height; + GXTexObj obj; +} g_tex; + +static struct +{ + uint32_t data[240 * 212]; + GXTexObj obj; +} menu_tex ATTRIBUTE_ALIGN(32); + +static OSCond g_video_cond; + +static volatile bool g_draw_done = false; + +static uint8_t gx_fifo[256 * 1024] ATTRIBUTE_ALIGN(32); +static uint8_t display_list[1024] ATTRIBUTE_ALIGN(32); + +static uint32_t retraceCount = 0; +static uint32_t referenceRetraceCount = 0; + +static unsigned max_height = 0; + +static size_t display_list_size = 0; + +static GXRModeObj gx_mode; + +float verts[16] ATTRIBUTE_ALIGN(32) = { + -1, 1, -0.5, + 1, 1, -0.5, + -1, -1, -0.5, + 1, -1, -0.5, +}; + +float vertex_ptr[8] ATTRIBUTE_ALIGN(32) = { + 0, 0, + 1, 0, + 0, 1, + 1, 1, +}; + +u8 color_ptr[16] ATTRIBUTE_ALIGN(32) = { + 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, +}; + unsigned menu_gx_resolutions[][2] = { { 0, 0 }, /* Let the system choose its preferred resolution, for NTSC is 640x480 */ { 512, 192 }, diff --git a/gfx/drivers/network_gfx.c b/gfx/drivers/network_gfx.c index 16bb33e50f..14b69d2889 100644 --- a/gfx/drivers/network_gfx.c +++ b/gfx/drivers/network_gfx.c @@ -181,9 +181,9 @@ static bool network_gfx_frame(void *data, const void *frame, menu_driver_frame(menu_is_alive, video_info); #endif - if ( network_video_width != frame_width || - network_video_height != frame_height || - network_video_pitch != pitch) + if ( (network_video_width != frame_width) + || (network_video_height != frame_height) + || (network_video_pitch != pitch)) { if (frame_width > 4 && frame_height > 4) { @@ -211,9 +211,9 @@ static bool network_gfx_frame(void *data, const void *frame, height = network_video_height; pitch = network_video_pitch; - if ( frame_width == 4 && - frame_height == 4 && - (frame_width < width && frame_height < height)) + if ( (frame_width == 4) + && (frame_height == 4) + && (frame_width < width && frame_height < height)) draw = false; #ifdef HAVE_MENU @@ -222,8 +222,8 @@ static bool network_gfx_frame(void *data, const void *frame, #endif } - if ( network->video_width != width - || network->video_height != height) + if ( (network->video_width != width) + || (network->video_height != height)) { network->video_width = width; network->video_height = height; @@ -402,10 +402,10 @@ static void network_set_texture_frame(void *data, network_menu_frame = NULL; } - if ( !network_menu_frame || - network_menu_width != width || - network_menu_height != height || - network_menu_pitch != pitch) + if ( !network_menu_frame + || (network_menu_width != width) + || (network_menu_height != height) + || (network_menu_pitch != pitch)) if (pitch && height) network_menu_frame = (unsigned char*)malloc(pitch * height); @@ -461,14 +461,11 @@ static const video_poke_interface_t network_poke_interface = { static void network_gfx_get_poke_interface(void *data, const video_poke_interface_t **iface) { - (void)data; *iface = &network_poke_interface; } static void network_gfx_set_viewport(void *data, unsigned viewport_width, - unsigned viewport_height, bool force_full, bool allow_rotate) -{ -} + unsigned viewport_height, bool force_full, bool allow_rotate) { } bool network_has_menu_frame(void) { diff --git a/gfx/drivers/oga_gfx.c b/gfx/drivers/oga_gfx.c index d57b7e2cc9..a5ea438501 100644 --- a/gfx/drivers/oga_gfx.c +++ b/gfx/drivers/oga_gfx.c @@ -66,7 +66,6 @@ typedef struct oga_surface int pitch; int prime_fd; int rk_format; - int display_fd; uint32_t handle; } oga_surface_t; @@ -79,28 +78,25 @@ typedef struct oga_framebuf typedef struct oga_video { - int fd; - uint32_t connector_id; drmModeModeInfo mode; - int drm_width; - int drm_height; - float display_ar; - uint32_t crtc_id; - - oga_surface_t* frame_surface; - oga_surface_t* menu_surface; - - oga_framebuf_t* pages[NUM_PAGES]; - int cur_page; - int scale_mode; - int rotation; - bool threaded; - - oga_surface_t* msg_surface; + oga_surface_t *frame_surface; + oga_surface_t *menu_surface; + oga_framebuf_t *pages[NUM_PAGES]; + oga_surface_t *msg_surface; const font_renderer_driver_t *font_driver; void *font; int msg_width; int msg_height; + int fd; + int drm_width; + int drm_height; + int cur_page; + int scale_mode; + int rotation; + uint32_t crtc_id; + uint32_t connector_id; + float display_ar; + bool threaded; char last_msg[128]; } oga_video_t; diff --git a/gfx/drivers/omap_gfx.c b/gfx/drivers/omap_gfx.c index 8cd2fb1e35..4a601f56ae 100644 --- a/gfx/drivers/omap_gfx.c +++ b/gfx/drivers/omap_gfx.c @@ -64,27 +64,22 @@ typedef struct omapfb_state typedef struct omapfb_data { - const char* fbname; - int fd; - - void *fb_mem; - unsigned fb_framesize; - omapfb_page_t *pages; - int num_pages; + const char* fbname; + void *fb_mem; omapfb_page_t *cur_page; omapfb_page_t *old_page; - /* current and saved (for later restore) states */ omapfb_state_t* current_state; omapfb_state_t* saved_state; + int fd; + int num_pages; + unsigned fb_framesize; /* native screen size */ unsigned nat_w, nat_h; - /* bytes per pixel */ unsigned bpp; - bool sync; } omapfb_data_t; diff --git a/gfx/drivers_shader/shader_gl3.cpp b/gfx/drivers_shader/shader_gl3.cpp index 2675483cc3..71248d78b2 100644 --- a/gfx/drivers_shader/shader_gl3.cpp +++ b/gfx/drivers_shader/shader_gl3.cpp @@ -32,7 +32,7 @@ #include "slang_reflection.hpp" #include "spirv_glsl.hpp" -#include "../common/gl3_common.h" +#include "../common/gl3_defines.h" #include "../../retroarch.h" #include "../../verbosity.h"