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
frontend: make text bg dark
[pcsx_rearmed.git]
/
plugins
/
dfxvideo
/
gpulib_if.c
diff --git
a/plugins/dfxvideo/gpulib_if.c
b/plugins/dfxvideo/gpulib_if.c
index
82bc38d
..
d98520c
100644
(file)
--- a/
plugins/dfxvideo/gpulib_if.c
+++ b/
plugins/dfxvideo/gpulib_if.c
@@
-265,9
+265,9
@@
long lLowerpart;
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
-
int renderer_init(void
)
+
static void set_vram(void *vram
)
{
{
- psxVub=
(void *)gpu.
vram;
+ psxVub=vram;
psxVsb=(signed char *)psxVub; // different ways of accessing PSX VRAM
psxVsw=(signed short *)psxVub;
psxVsb=(signed char *)psxVub; // different ways of accessing PSX VRAM
psxVsw=(signed short *)psxVub;
@@
-276,6
+276,11
@@
int renderer_init(void)
psxVul=(uint32_t *)psxVub;
psxVuw_eom=psxVuw+1024*512; // pre-calc of end of vram
psxVul=(uint32_t *)psxVub;
psxVuw_eom=psxVuw+1024*512; // pre-calc of end of vram
+}
+
+int renderer_init(void)
+{
+ set_vram(gpu.vram);
PSXDisplay.RGB24 = FALSE; // init some stuff
PSXDisplay.Interlaced = FALSE;
PSXDisplay.RGB24 = FALSE; // init some stuff
PSXDisplay.Interlaced = FALSE;
@@
-294,18
+299,37
@@
int renderer_init(void)
return 0;
}
return 0;
}
-extern const unsigned char cmd_lengths[256];
+void renderer_finish(void)
+{
+}
-void
do_cmd_list(unsigned int *list, int list_len
)
+void
renderer_notify_res_change(void
)
{
{
- unsigned int cmd, len;
+}
+extern const unsigned char cmd_lengths[256];
+
+int do_cmd_list(unsigned int *list, int list_len, int *last_cmd)
+{
+ unsigned int cmd = 0, len;
+ unsigned int *list_start = list;
unsigned int *list_end = list + list_len;
for (; list < list_end; list += 1 + len)
{
cmd = *list >> 24;
len = cmd_lengths[cmd];
unsigned int *list_end = list + list_len;
for (; list < list_end; list += 1 + len)
{
cmd = *list >> 24;
len = cmd_lengths[cmd];
+ if (list + 1 + len > list_end) {
+ cmd = -1;
+ break;
+ }
+
+#ifndef TEST
+ if (cmd == 0xa0 || cmd == 0xc0)
+ break; // image i/o, forward to upper layer
+ else if ((cmd & 0xf8) == 0xe0)
+ gpu.ex_regs[cmd & 7] = list[0];
+#endif
primTableJ[cmd]((void *)list);
primTableJ[cmd]((void *)list);
@@
-313,8
+337,8
@@
void do_cmd_list(unsigned int *list, int list_len)
{
case 0x48 ... 0x4F:
{
{
case 0x48 ... 0x4F:
{
- u32 num_vertexes =
1
;
- u32 *list_position = &(list[
2
]);
+ u32 num_vertexes =
2
;
+ u32 *list_position = &(list[
3
]);
while(1)
{
while(1)
{
@@
-325,16
+349,14
@@
void do_cmd_list(unsigned int *list, int list_len)
num_vertexes++;
}
num_vertexes++;
}
- if(num_vertexes > 2)
- len += (num_vertexes - 2);
-
+ len += (num_vertexes - 2);
break;
}
case 0x58 ... 0x5F:
{
break;
}
case 0x58 ... 0x5F:
{
- u32 num_vertexes =
1
;
- u32 *list_position = &(list[
2
]);
+ u32 num_vertexes =
2
;
+ u32 *list_position = &(list[
4
]);
while(1)
{
while(1)
{
@@
-345,9
+367,7
@@
void do_cmd_list(unsigned int *list, int list_len)
num_vertexes++;
}
num_vertexes++;
}
- if(num_vertexes > 2)
- len += (num_vertexes - 2) * 2;
-
+ len += (num_vertexes - 2) * 2;
break;
}
break;
}
@@
-365,6
+385,12
@@
void do_cmd_list(unsigned int *list, int list_len)
#endif
}
}
#endif
}
}
+
+ gpu.ex_regs[1] &= ~0x1ff;
+ gpu.ex_regs[1] |= lGPUstatusRet & 0x1ff;
+
+ *last_cmd = cmd;
+ return list - list_start;
}
void renderer_sync_ecmds(uint32_t *ecmds)
}
void renderer_sync_ecmds(uint32_t *ecmds)
@@
-395,4
+421,7
@@
void renderer_set_config(const struct rearmed_cbs *cbs)
{
iUseDither = cbs->gpu_peops.iUseDither;
dwActFixes = cbs->gpu_peops.dwActFixes;
{
iUseDither = cbs->gpu_peops.iUseDither;
dwActFixes = cbs->gpu_peops.dwActFixes;
+ if (cbs->pl_set_gpu_caps)
+ cbs->pl_set_gpu_caps(0);
+ set_vram(gpu.vram);
}
}