notaz.gp2x.de
/
pcsx_rearmed.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
gpu: move enhacement logic out of vout_pl
[pcsx_rearmed.git]
/
plugins
/
gpulib
/
vout_pl.c
diff --git
a/plugins/gpulib/vout_pl.c
b/plugins/gpulib/vout_pl.c
index
0bd1ecf
..
9a84432
100644
(file)
--- a/
plugins/gpulib/vout_pl.c
+++ b/
plugins/gpulib/vout_pl.c
@@
-31,13
+31,25
@@
static void check_mode_change(void)
{
static uint32_t old_status;
static int old_h;
{
static uint32_t old_status;
static int old_h;
+ int w = gpu.screen.hres;
+ int h = gpu.screen.h;
+
+ gpu.state.enhancement_active =
+ gpu.get_enhancement_bufer != NULL && gpu.state.enhancement_enable
+ && w <= 512 && h <= 256 && !gpu.status.rgb24;
+
+ if (gpu.state.enhancement_active) {
+ w *= 2;
+ h *= 2;
+ }
// width|rgb24 change?
// width|rgb24 change?
- if ((gpu.status.reg ^ old_status) & ((7<<16)|(1<<21)) ||
gpu.screen.
h != old_h)
+ if ((gpu.status.reg ^ old_status) & ((7<<16)|(1<<21)) || h != old_h)
{
old_status = gpu.status.reg;
{
old_status = gpu.status.reg;
- old_h = gpu.screen.h;
- screen_buf = cbs->pl_vout_set_mode(gpu.screen.hres, gpu.screen.h,
+ old_h = h;
+
+ screen_buf = cbs->pl_vout_set_mode(w, h,
(gpu.status.rgb24 && !cbs->only_16bpp) ? 24 : 16);
}
}
(gpu.status.rgb24 && !cbs->only_16bpp) ? 24 : 16);
}
}
@@
-50,14
+62,19
@@
static void blit(void)
int h = gpu.screen.h;
uint16_t *vram = gpu.vram;
int stride = gpu.screen.hres;
int h = gpu.screen.h;
uint16_t *vram = gpu.vram;
int stride = gpu.screen.hres;
+ int vram_stride = 1024;
+ int vram_mask = 1024 * 512 - 1;
int fb_offs, doffs;
uint8_t *dest;
dest = (uint8_t *)screen_buf;
int fb_offs, doffs;
uint8_t *dest;
dest = (uint8_t *)screen_buf;
- if (dest == NULL)
+ if (dest == NULL
|| w == 0 || stride == 0
)
return;
return;
- fb_offs = y * 1024 + x;
+ if (gpu.state.enhancement_active)
+ vram = gpu.get_enhancement_bufer(&x, &y, &w, &h, &stride, &vram_mask);
+
+ fb_offs = y * vram_stride + x;
// only do centering, at least for now
doffs = (stride - w) / 2 & ~1;
// only do centering, at least for now
doffs = (stride - w) / 2 & ~1;
@@
-66,17
+83,17
@@
static void blit(void)
{
if (cbs->only_16bpp) {
dest += doffs * 2;
{
if (cbs->only_16bpp) {
dest += doffs * 2;
- for (; h-- > 0; dest += stride * 2, fb_offs +=
1024
)
+ for (; h-- > 0; dest += stride * 2, fb_offs +=
vram_stride
)
{
{
- fb_offs &=
1024*512-1
;
+ fb_offs &=
vram_mask
;
bgr888_to_rgb565(dest, vram + fb_offs, w * 3);
}
}
else {
dest += (doffs / 8) * 24;
bgr888_to_rgb565(dest, vram + fb_offs, w * 3);
}
}
else {
dest += (doffs / 8) * 24;
- for (; h-- > 0; dest += stride * 3, fb_offs +=
1024
)
+ for (; h-- > 0; dest += stride * 3, fb_offs +=
vram_stride
)
{
{
- fb_offs &=
1024*512-1
;
+ fb_offs &=
vram_mask
;
bgr888_to_rgb888(dest, vram + fb_offs, w * 3);
}
}
bgr888_to_rgb888(dest, vram + fb_offs, w * 3);
}
}
@@
-84,9
+101,9
@@
static void blit(void)
else
{
dest += doffs * 2;
else
{
dest += doffs * 2;
- for (; h-- > 0; dest += stride * 2, fb_offs +=
1024
)
+ for (; h-- > 0; dest += stride * 2, fb_offs +=
vram_stride
)
{
{
- fb_offs &=
1024*512-1
;
+ fb_offs &=
vram_mask
;
bgr555_to_rgb565(dest, vram + fb_offs, w * 2);
}
}
bgr555_to_rgb565(dest, vram + fb_offs, w * 2);
}
}
@@
-105,10
+122,15
@@
void vout_update(void)
void vout_blank(void)
{
void vout_blank(void)
{
- check_mode_change();
if (cbs->pl_vout_raw_flip == NULL) {
if (cbs->pl_vout_raw_flip == NULL) {
+ int w = gpu.screen.hres;
+ int h = gpu.screen.h;
int bytespp = gpu.status.rgb24 ? 3 : 2;
int bytespp = gpu.status.rgb24 ? 3 : 2;
- memset(screen_buf, 0, gpu.screen.hres * gpu.screen.h * bytespp);
+ if (gpu.state.enhancement_active) {
+ w *= 2;
+ h *= 2;
+ }
+ memset(screen_buf, 0, w * h * bytespp);
screen_buf = cbs->pl_vout_flip();
}
}
screen_buf = cbs->pl_vout_flip();
}
}