Mercurial > sdl-ios-xcode
changeset 3145:7828eed2f31a gsoc2009_ps3
Initialise 720p and 1080p display modes in VideoInit().
Added setting display mode.
author | Martin Lowinski <martin@goldtopf.org> |
---|---|
date | Sat, 13 Jun 2009 05:20:57 +0000 |
parents | 0d8d1f870964 |
children | 9e902f423497 |
files | src/video/ps3/SDL_ps3video.c src/video/ps3/SDL_ps3video.h |
diffstat | 2 files changed, 86 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/video/ps3/SDL_ps3video.c Wed Jun 10 09:15:33 2009 +0000 +++ b/src/video/ps3/SDL_ps3video.c Sat Jun 13 05:20:57 2009 +0000 @@ -49,6 +49,8 @@ /* Initialization/Query functions */ static int PS3_VideoInit(_THIS); static int PS3_SetDisplayMode(_THIS, SDL_DisplayMode * mode); +void PS3_InitModes(_THIS); +void PS3_GetDisplayModes(_THIS); static void PS3_VideoQuit(_THIS); /* Stores the SPE executable name of fb_writer_spu */ @@ -104,6 +106,7 @@ device->VideoInit = PS3_VideoInit; device->VideoQuit = PS3_VideoQuit; device->SetDisplayMode = PS3_SetDisplayMode; + device->GetDisplayModes = PS3_GetDisplayModes; device->PumpEvents = PS3_PumpEvents; device->free = PS3_DeleteDevice; @@ -125,10 +128,9 @@ SDL_VideoData *data = (SDL_VideoData *) _this->driverdata; SDL_DisplayMode mode; +#if 0 /* Use a fake 32-bpp desktop mode */ mode.format = SDL_PIXELFORMAT_RGB888; - //mode.w = 1024; - //mode.h = 768; mode.w = 1920; mode.h = 1080; mode.refresh_rate = 0; @@ -136,8 +138,11 @@ SDL_AddBasicVideoDisplay(&mode); SDL_AddRenderDriver(0, &SDL_PS3_RenderDriver); - SDL_zero(mode); + //SDL_zero(mode); SDL_AddDisplayMode(0, &mode); + display.desktop_mode = mode; + display.current_mode = mode; +#endif /* *PS3 stuff @@ -194,6 +199,10 @@ /* Blank screen */ memset(data->frame_buffer, 0x00, fb_finfo.smem_len); + PS3_InitModes(_this); + + SDL_AddRenderDriver(0, &SDL_PS3_RenderDriver); + /* We're done! */ return 0; } @@ -202,9 +211,74 @@ PS3_SetDisplayMode(_THIS, SDL_DisplayMode * mode) { deprintf(1, "PS3_SetDisplayMode()\n"); + SDL_VideoData *data = (SDL_VideoData *) _this->driverdata; + SDL_DisplayData *dispdata = (SDL_DisplayData *) mode->driverdata; + + if (ioctl(data->fbdev, PS3FB_IOCTL_SETMODE, (unsigned long)&dispdata->mode)) { + SDL_SetError("Could not set videomode"); + return -1; + } return 0; } +void PS3_GetDisplayModes(_THIS) { + deprintf(1, "PS3_GetDisplayModes()\n"); +} + +void +PS3_InitModes(_THIS) +{ + deprintf(1, "PS3_InitModes()\n"); + SDL_VideoDisplay display; + SDL_DisplayMode mode, mode1080p; + SDL_DisplayData *displaydata; + SDL_VideoData *data = (SDL_VideoData *) _this->driverdata; + + displaydata = (SDL_DisplayData *) SDL_malloc(sizeof(*displaydata)); + if (!displaydata) { + return; + } + + struct ps3fb_ioctl_res res; + if (ioctl(data->fbdev, PS3FB_IOCTL_SCREENINFO, &res)) { + SDL_SetError("Can't get PS3FB_IOCTL_SCREENINFO"); + } + mode.format = SDL_PIXELFORMAT_RGB888; + mode.refresh_rate = 0; + mode.w = res.xres; + mode.h = res.yres; + + int vid = 0; + if (ioctl(data->fbdev, PS3FB_IOCTL_GETMODE, (unsigned long)&vid)) { + SDL_SetError("Can't get PS3FB_IOCTL_GETMODE"); + } + printf("PS3FB_IOCTL_GETMODE = %u\n", vid); + + displaydata->mode = vid; + mode.driverdata = displaydata; + + SDL_zero(display); + display.desktop_mode = mode; + display.current_mode = mode; + + SDL_AddVideoDisplay(&display); + SDL_AddDisplayMode(_this->current_display, &mode); + + mode1080p.format = SDL_PIXELFORMAT_RGB888; + mode1080p.refresh_rate = 0; + mode1080p.w = 1920; + mode1080p.h = 1080; + + displaydata = (SDL_DisplayData *) SDL_malloc(sizeof(*displaydata)); + if (!displaydata) { + return; + } + + displaydata->mode = 133; + mode1080p.driverdata = displaydata; + SDL_AddDisplayMode(_this->current_display, &mode1080p); +} + void PS3_VideoQuit(_THIS) {
--- a/src/video/ps3/SDL_ps3video.h Wed Jun 10 09:15:33 2009 +0000 +++ b/src/video/ps3/SDL_ps3video.h Sat Jun 13 05:20:57 2009 +0000 @@ -27,6 +27,9 @@ #include "../SDL_sysvideo.h" #include "SDL_ps3spe_c.h" +#include <linux/fb.h> +#include <asm/ps3fb.h> + /* Debugging * 0: No debug messages * 1: Video debug messages @@ -65,6 +68,12 @@ volatile struct fb_writer_parms_t * fb_parms __attribute__((aligned(128))); } SDL_VideoData; +typedef struct +{ + unsigned long mode; + struct ps3fb_ioctl_res res; +} SDL_DisplayData; + #endif /* _SDL_ps3video_h */ /* vi: set ts=4 sw=4 expandtab: */