Hooray for templates.

This commit is contained in:
Aaron Giles 2012-04-12 07:35:57 +00:00
parent 2c2fc07d6b
commit 7d27b8c9ff
5 changed files with 1828 additions and 2269 deletions

File diff suppressed because it is too large Load Diff

View File

@ -45,6 +45,7 @@
#include "ui.h" #include "ui.h"
#include "aviio.h" #include "aviio.h"
#include "crsshair.h" #include "crsshair.h"
#include "rendersw.c"
#include "snap.lh" #include "snap.lh"
@ -81,15 +82,6 @@ const UINT8 video_manager::s_skiptable[FRAMESKIP_LEVELS][FRAMESKIP_LEVELS] =
//**************************************************************************
// FUNCTION PROTOTYPES
//**************************************************************************
// software rendering
static void rgb888_draw_primitives(const render_primitive_list &primlist, void *dstdata, UINT32 width, UINT32 height, UINT32 pitch);
//************************************************************************** //**************************************************************************
// VIDEO MANAGER // VIDEO MANAGER
//************************************************************************** //**************************************************************************
@ -1076,7 +1068,7 @@ void video_manager::create_snapshot_bitmap(screen_device *screen)
// render the screen there // render the screen there
render_primitive_list &primlist = m_snap_target->get_primitives(); render_primitive_list &primlist = m_snap_target->get_primitives();
primlist.acquire_lock(); primlist.acquire_lock();
rgb888_draw_primitives(primlist, &m_snap_bitmap.pix32(0), width, height, m_snap_bitmap.rowpixels()); software_renderer<UINT32, 0,0,0, 16,8,0, false, true>::draw_primitives(primlist, &m_snap_bitmap.pix32(0), width, height, m_snap_bitmap.rowpixels());
primlist.release_lock(); primlist.release_lock();
} }
@ -1299,21 +1291,3 @@ bool video_assert_out_of_range_pixels(running_machine &machine, bitmap_ind16 &bi
#endif #endif
return false; return false;
} }
//**************************************************************************
// SOFTWARE RENDERING
//**************************************************************************
#define FUNC_PREFIX(x) rgb888_##x
#define PIXEL_TYPE UINT32
#define SRCSHIFT_R 0
#define SRCSHIFT_G 0
#define SRCSHIFT_B 0
#define DSTSHIFT_R 16
#define DSTSHIFT_G 8
#define DSTSHIFT_B 0
#define BILINEAR_FILTER 1
#include "rendersw.c"

View File

@ -16,6 +16,7 @@
// MAME headers // MAME headers
#include "emu.h" #include "emu.h"
#include "ui.h" #include "ui.h"
#include "rendersw.c"
// standard SDL headers // standard SDL headers
#include "sdlinc.h" #include "sdlinc.h"
@ -115,13 +116,6 @@ static int drawsdl_xy_to_render_target(sdl_window_info *window, int x, int y, in
static void setup_texture(sdl_window_info *window, int tempwidth, int tempheight); static void setup_texture(sdl_window_info *window, int tempwidth, int tempheight);
#endif #endif
// soft rendering
static void drawsdl_rgb888_draw_primitives(const render_primitive_list &primlist, void *dstdata, UINT32 width, UINT32 height, UINT32 pitch);
static void drawsdl_bgr888_draw_primitives(const render_primitive_list &primlist, void *dstdata, UINT32 width, UINT32 height, UINT32 pitch);
static void drawsdl_bgra888_draw_primitives(const render_primitive_list &primlist, void *dstdata, UINT32 width, UINT32 height, UINT32 pitch);
static void drawsdl_rgb565_draw_primitives(const render_primitive_list &primlist, void *dstdata, UINT32 width, UINT32 height, UINT32 pitch);
static void drawsdl_rgb555_draw_primitives(const render_primitive_list &primlist, void *dstdata, UINT32 width, UINT32 height, UINT32 pitch);
// YUV overlays // YUV overlays
static void drawsdl_yuv_init(sdl_info *sdl); static void drawsdl_yuv_init(sdl_info *sdl);
@ -810,23 +804,23 @@ static int drawsdl_window_draw(sdl_window_info *window, UINT32 dc, int update)
switch (rmask) switch (rmask)
{ {
case 0x0000ff00: case 0x0000ff00:
drawsdl_bgra888_draw_primitives(*window->primlist, surfptr, mamewidth, mameheight, pitch / 4); software_renderer<UINT32, 0,0,0, 8,16,24>::draw_primitives(*window->primlist, surfptr, mamewidth, mameheight, pitch / 4);
break; break;
case 0x00ff0000: case 0x00ff0000:
drawsdl_rgb888_draw_primitives(*window->primlist, surfptr, mamewidth, mameheight, pitch / 4); software_renderer<UINT32, 0,0,0, 16,8,0>::draw_primitives(*window->primlist, surfptr, mamewidth, mameheight, pitch / 4);
break; break;
case 0x000000ff: case 0x000000ff:
drawsdl_bgr888_draw_primitives(*window->primlist, surfptr, mamewidth, mameheight, pitch / 4); software_renderer<UINT32, 0,0,0, 0,8,16>::draw_primitives(*window->primlist, surfptr, mamewidth, mameheight, pitch / 4);
break; break;
case 0xf800: case 0xf800:
drawsdl_rgb565_draw_primitives(*window->primlist, surfptr, mamewidth, mameheight, pitch / 2); software_renderer<UINT16, 3,2,3, 11,5,0>::draw_primitives(*window->primlist, surfptr, mamewidth, mameheight, pitch / 2);
break; break;
case 0x7c00: case 0x7c00:
drawsdl_rgb555_draw_primitives(*window->primlist, surfptr, mamewidth, mameheight, pitch / 2); software_renderer<UINT16, 3,3,3, 10,5,0>::draw_primitives(*window->primlist, surfptr, mamewidth, mameheight, pitch / 2);
break; break;
default: default:
@ -838,7 +832,7 @@ static int drawsdl_window_draw(sdl_window_info *window, UINT32 dc, int update)
{ {
assert (sdl->yuv_bitmap != NULL); assert (sdl->yuv_bitmap != NULL);
assert (surfptr != NULL); assert (surfptr != NULL);
drawsdl_rgb555_draw_primitives(*window->primlist, sdl->yuv_bitmap, sdl->hw_scale_width, sdl->hw_scale_height, sdl->hw_scale_width); software_renderer<UINT16, 3,3,3, 10,5,0>::draw_primitives(*window->primlist, sdl->yuv_bitmap, sdl->hw_scale_width, sdl->hw_scale_height, sdl->hw_scale_width);
sm->yuv_blit((UINT16 *)sdl->yuv_bitmap, sdl, surfptr, pitch); sm->yuv_blit((UINT16 *)sdl->yuv_bitmap, sdl, surfptr, pitch);
} }
@ -879,66 +873,6 @@ static int drawsdl_window_draw(sdl_window_info *window, UINT32 dc, int update)
#endif #endif
return 0; return 0;
} }
//============================================================
// SOFTWARE RENDERING
//============================================================
#define FUNC_PREFIX(x) drawsdl_rgb888_##x
#define PIXEL_TYPE UINT32
#define SRCSHIFT_R 0
#define SRCSHIFT_G 0
#define SRCSHIFT_B 0
#define DSTSHIFT_R 16
#define DSTSHIFT_G 8
#define DSTSHIFT_B 0
#include "rendersw.c"
#define FUNC_PREFIX(x) drawsdl_bgr888_##x
#define PIXEL_TYPE UINT32
#define SRCSHIFT_R 0
#define SRCSHIFT_G 0
#define SRCSHIFT_B 0
#define DSTSHIFT_R 0
#define DSTSHIFT_G 8
#define DSTSHIFT_B 16
#include "rendersw.c"
#define FUNC_PREFIX(x) drawsdl_bgra888_##x
#define PIXEL_TYPE UINT32
#define SRCSHIFT_R 0
#define SRCSHIFT_G 0
#define SRCSHIFT_B 0
#define DSTSHIFT_R 8
#define DSTSHIFT_G 16
#define DSTSHIFT_B 24
#include "rendersw.c"
#define FUNC_PREFIX(x) drawsdl_rgb565_##x
#define PIXEL_TYPE UINT16
#define SRCSHIFT_R 3
#define SRCSHIFT_G 2
#define SRCSHIFT_B 3
#define DSTSHIFT_R 11
#define DSTSHIFT_G 5
#define DSTSHIFT_B 0
#include "rendersw.c"
#define FUNC_PREFIX(x) drawsdl_rgb555_##x
#define PIXEL_TYPE UINT16
#define SRCSHIFT_R 3
#define SRCSHIFT_G 3
#define SRCSHIFT_B 3
#define DSTSHIFT_R 10
#define DSTSHIFT_G 5
#define DSTSHIFT_B 0
#include "rendersw.c"
//============================================================ //============================================================
// YUV Blitting // YUV Blitting
//============================================================ //============================================================

View File

@ -51,6 +51,7 @@
#include "render.h" #include "render.h"
#include "rendutil.h" #include "rendutil.h"
#include "options.h" #include "options.h"
#include "rendersw.c"
// MAMEOS headers // MAMEOS headers
#include "winmain.h" #include "winmain.h"
@ -59,24 +60,6 @@
//============================================================
// DEBUGGING
//============================================================
//============================================================
// CONSTANTS
//============================================================
//============================================================
// MACROS
//============================================================
//============================================================ //============================================================
// TYPE DEFINITIONS // TYPE DEFINITIONS
//============================================================ //============================================================
@ -200,16 +183,6 @@ static int config_adapter_mode(win_window_info *window);
static void get_adapter_for_monitor(dd_info *dd, win_monitor_info *monitor); static void get_adapter_for_monitor(dd_info *dd, win_monitor_info *monitor);
static void pick_best_mode(win_window_info *window); static void pick_best_mode(win_window_info *window);
// rendering
static void drawdd_rgb888_draw_primitives(const render_primitive_list &primlist, void *dstdata, UINT32 width, UINT32 height, UINT32 pitch);
static void drawdd_bgr888_draw_primitives(const render_primitive_list &primlist, void *dstdata, UINT32 width, UINT32 height, UINT32 pitch);
static void drawdd_rgb565_draw_primitives(const render_primitive_list &primlist, void *dstdata, UINT32 width, UINT32 height, UINT32 pitch);
static void drawdd_rgb555_draw_primitives(const render_primitive_list &primlist, void *dstdata, UINT32 width, UINT32 height, UINT32 pitch);
static void drawdd_rgb888_nr_draw_primitives(const render_primitive_list &primlist, void *dstdata, UINT32 width, UINT32 height, UINT32 pitch);
static void drawdd_bgr888_nr_draw_primitives(const render_primitive_list &primlist, void *dstdata, UINT32 width, UINT32 height, UINT32 pitch);
static void drawdd_rgb565_nr_draw_primitives(const render_primitive_list &primlist, void *dstdata, UINT32 width, UINT32 height, UINT32 pitch);
static void drawdd_rgb555_nr_draw_primitives(const render_primitive_list &primlist, void *dstdata, UINT32 width, UINT32 height, UINT32 pitch);
//============================================================ //============================================================
@ -407,10 +380,10 @@ static int drawdd_window_draw(win_window_info *window, HDC dc, int update)
// based on the target format, use one of our standard renderers // based on the target format, use one of our standard renderers
switch (dd->blitdesc.ddpfPixelFormat.dwRBitMask) switch (dd->blitdesc.ddpfPixelFormat.dwRBitMask)
{ {
case 0x00ff0000: drawdd_rgb888_draw_primitives(*window->primlist, dd->membuffer, dd->blitwidth, dd->blitheight, dd->blitwidth); break; case 0x00ff0000: software_renderer<UINT32, 0,0,0, 16,8,0>::draw_primitives(*window->primlist, dd->membuffer, dd->blitwidth, dd->blitheight, dd->blitwidth); break;
case 0x000000ff: drawdd_bgr888_draw_primitives(*window->primlist, dd->membuffer, dd->blitwidth, dd->blitheight, dd->blitwidth); break; case 0x000000ff: software_renderer<UINT32, 0,0,0, 0,8,16>::draw_primitives(*window->primlist, dd->membuffer, dd->blitwidth, dd->blitheight, dd->blitwidth); break;
case 0xf800: drawdd_rgb565_draw_primitives(*window->primlist, dd->membuffer, dd->blitwidth, dd->blitheight, dd->blitwidth); break; case 0xf800: software_renderer<UINT16, 3,2,3, 11,5,0>::draw_primitives(*window->primlist, dd->membuffer, dd->blitwidth, dd->blitheight, dd->blitwidth); break;
case 0x7c00: drawdd_rgb555_draw_primitives(*window->primlist, dd->membuffer, dd->blitwidth, dd->blitheight, dd->blitwidth); break; case 0x7c00: software_renderer<UINT16, 3,3,3, 10,5,0>::draw_primitives(*window->primlist, dd->membuffer, dd->blitwidth, dd->blitheight, dd->blitwidth); break;
default: default:
mame_printf_verbose("DirectDraw: Unknown target mode: R=%08X G=%08X B=%08X\n", (int)dd->blitdesc.ddpfPixelFormat.dwRBitMask, (int)dd->blitdesc.ddpfPixelFormat.dwGBitMask, (int)dd->blitdesc.ddpfPixelFormat.dwBBitMask); mame_printf_verbose("DirectDraw: Unknown target mode: R=%08X G=%08X B=%08X\n", (int)dd->blitdesc.ddpfPixelFormat.dwRBitMask, (int)dd->blitdesc.ddpfPixelFormat.dwGBitMask, (int)dd->blitdesc.ddpfPixelFormat.dwBBitMask);
break; break;
@ -443,10 +416,10 @@ static int drawdd_window_draw(win_window_info *window, HDC dc, int update)
// based on the target format, use one of our standard renderers // based on the target format, use one of our standard renderers
switch (dd->blitdesc.ddpfPixelFormat.dwRBitMask) switch (dd->blitdesc.ddpfPixelFormat.dwRBitMask)
{ {
case 0x00ff0000: drawdd_rgb888_nr_draw_primitives(*window->primlist, dd->blitdesc.lpSurface, dd->blitwidth, dd->blitheight, dd->blitdesc.lPitch / 4); break; case 0x00ff0000: software_renderer<UINT32, 0,0,0, 16,8,0, true>::draw_primitives(*window->primlist, dd->blitdesc.lpSurface, dd->blitwidth, dd->blitheight, dd->blitdesc.lPitch / 4); break;
case 0x000000ff: drawdd_bgr888_nr_draw_primitives(*window->primlist, dd->blitdesc.lpSurface, dd->blitwidth, dd->blitheight, dd->blitdesc.lPitch / 4); break; case 0x000000ff: software_renderer<UINT32, 0,0,0, 0,8,16, true>::draw_primitives(*window->primlist, dd->blitdesc.lpSurface, dd->blitwidth, dd->blitheight, dd->blitdesc.lPitch / 4); break;
case 0xf800: drawdd_rgb565_nr_draw_primitives(*window->primlist, dd->blitdesc.lpSurface, dd->blitwidth, dd->blitheight, dd->blitdesc.lPitch / 2); break; case 0xf800: software_renderer<UINT32, 3,2,3, 11,5,0, true>::draw_primitives(*window->primlist, dd->blitdesc.lpSurface, dd->blitwidth, dd->blitheight, dd->blitdesc.lPitch / 2); break;
case 0x7c00: drawdd_rgb555_nr_draw_primitives(*window->primlist, dd->blitdesc.lpSurface, dd->blitwidth, dd->blitheight, dd->blitdesc.lPitch / 2); break; case 0x7c00: software_renderer<UINT32, 3,3,3, 10,5,0, true>::draw_primitives(*window->primlist, dd->blitdesc.lpSurface, dd->blitwidth, dd->blitheight, dd->blitdesc.lPitch / 2); break;
default: default:
mame_printf_verbose("DirectDraw: Unknown target mode: R=%08X G=%08X B=%08X\n", (int)dd->blitdesc.ddpfPixelFormat.dwRBitMask, (int)dd->blitdesc.ddpfPixelFormat.dwGBitMask, (int)dd->blitdesc.ddpfPixelFormat.dwBBitMask); mame_printf_verbose("DirectDraw: Unknown target mode: R=%08X G=%08X B=%08X\n", (int)dd->blitdesc.ddpfPixelFormat.dwRBitMask, (int)dd->blitdesc.ddpfPixelFormat.dwGBitMask, (int)dd->blitdesc.ddpfPixelFormat.dwBBitMask);
break; break;
@ -1359,107 +1332,3 @@ static void pick_best_mode(win_window_info *window)
if (result != DD_OK) mame_printf_verbose("DirectDraw: Error %08X during EnumDisplayModes call\n", (int)result); if (result != DD_OK) mame_printf_verbose("DirectDraw: Error %08X during EnumDisplayModes call\n", (int)result);
mame_printf_verbose("DirectDraw: Mode selected = %4dx%4d@%3dHz\n", dd->width, dd->height, dd->refresh); mame_printf_verbose("DirectDraw: Mode selected = %4dx%4d@%3dHz\n", dd->width, dd->height, dd->refresh);
} }
//============================================================
// SOFTWARE RENDERING
//============================================================
#define FUNC_PREFIX(x) drawdd_rgb888_##x
#define PIXEL_TYPE UINT32
#define SRCSHIFT_R 0
#define SRCSHIFT_G 0
#define SRCSHIFT_B 0
#define DSTSHIFT_R 16
#define DSTSHIFT_G 8
#define DSTSHIFT_B 0
#include "rendersw.c"
#define FUNC_PREFIX(x) drawdd_bgr888_##x
#define PIXEL_TYPE UINT32
#define SRCSHIFT_R 0
#define SRCSHIFT_G 0
#define SRCSHIFT_B 0
#define DSTSHIFT_R 0
#define DSTSHIFT_G 8
#define DSTSHIFT_B 16
#include "rendersw.c"
#define FUNC_PREFIX(x) drawdd_rgb565_##x
#define PIXEL_TYPE UINT16
#define SRCSHIFT_R 3
#define SRCSHIFT_G 2
#define SRCSHIFT_B 3
#define DSTSHIFT_R 11
#define DSTSHIFT_G 5
#define DSTSHIFT_B 0
#include "rendersw.c"
#define FUNC_PREFIX(x) drawdd_rgb555_##x
#define PIXEL_TYPE UINT16
#define SRCSHIFT_R 3
#define SRCSHIFT_G 3
#define SRCSHIFT_B 3
#define DSTSHIFT_R 10
#define DSTSHIFT_G 5
#define DSTSHIFT_B 0
#include "rendersw.c"
//============================================================
// SOFTWARE RENDERING -- NO READING VARIANTS
//============================================================
#define FUNC_PREFIX(x) drawdd_rgb888_nr_##x
#define PIXEL_TYPE UINT32
#define SRCSHIFT_R 0
#define SRCSHIFT_G 0
#define SRCSHIFT_B 0
#define DSTSHIFT_R 16
#define DSTSHIFT_G 8
#define DSTSHIFT_B 0
#define NO_DEST_READ 1
#include "rendersw.c"
#define FUNC_PREFIX(x) drawdd_bgr888_nr_##x
#define PIXEL_TYPE UINT32
#define SRCSHIFT_R 0
#define SRCSHIFT_G 0
#define SRCSHIFT_B 0
#define DSTSHIFT_R 0
#define DSTSHIFT_G 8
#define DSTSHIFT_B 16
#define NO_DEST_READ 1
#include "rendersw.c"
#define FUNC_PREFIX(x) drawdd_rgb565_nr_##x
#define PIXEL_TYPE UINT16
#define SRCSHIFT_R 3
#define SRCSHIFT_G 2
#define SRCSHIFT_B 3
#define DSTSHIFT_R 11
#define DSTSHIFT_G 5
#define DSTSHIFT_B 0
#define NO_DEST_READ 1
#include "rendersw.c"
#define FUNC_PREFIX(x) drawdd_rgb555_nr_##x
#define PIXEL_TYPE UINT16
#define SRCSHIFT_R 3
#define SRCSHIFT_G 3
#define SRCSHIFT_B 3
#define DSTSHIFT_R 10
#define DSTSHIFT_G 5
#define DSTSHIFT_B 0
#define NO_DEST_READ 1
#include "rendersw.c"

View File

@ -45,6 +45,7 @@
// MAME headers // MAME headers
#include "emu.h" #include "emu.h"
#include "rendersw.c"
// MAMEOS headers // MAMEOS headers
#include "window.h" #include "window.h"
@ -78,9 +79,6 @@ static void drawgdi_window_destroy(win_window_info *window);
static render_primitive_list *drawgdi_window_get_primitives(win_window_info *window); static render_primitive_list *drawgdi_window_get_primitives(win_window_info *window);
static int drawgdi_window_draw(win_window_info *window, HDC dc, int update); static int drawgdi_window_draw(win_window_info *window, HDC dc, int update);
// rendering
static void drawgdi_rgb888_draw_primitives(const render_primitive_list &primlist, void *dstdata, UINT32 width, UINT32 height, UINT32 pitch);
//============================================================ //============================================================
@ -216,7 +214,7 @@ static int drawgdi_window_draw(win_window_info *window, HDC dc, int update)
// draw the primitives to the bitmap // draw the primitives to the bitmap
window->primlist->acquire_lock(); window->primlist->acquire_lock();
drawgdi_rgb888_draw_primitives(*window->primlist, gdi->bmdata, width, height, pitch); software_renderer<UINT32, 0,0,0, 16,8,0>::draw_primitives(*window->primlist, gdi->bmdata, width, height, pitch);
window->primlist->release_lock(); window->primlist->release_lock();
// fill in bitmap-specific info // fill in bitmap-specific info
@ -230,20 +228,3 @@ static int drawgdi_window_draw(win_window_info *window, HDC dc, int update)
gdi->bmdata, &gdi->bminfo, DIB_RGB_COLORS, SRCCOPY); gdi->bmdata, &gdi->bminfo, DIB_RGB_COLORS, SRCCOPY);
return 0; return 0;
} }
//============================================================
// SOFTWARE RENDERING
//============================================================
#define FUNC_PREFIX(x) drawgdi_rgb888_##x
#define PIXEL_TYPE UINT32
#define SRCSHIFT_R 0
#define SRCSHIFT_G 0
#define SRCSHIFT_B 0
#define DSTSHIFT_R 16
#define DSTSHIFT_G 8
#define DSTSHIFT_B 0
#include "rendersw.c"