X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=plugins%2Fgpu-gles%2Fgpulib_if.c;h=ce7f00dc2c7bc39d96ba60b2ab670a4f3c34e10f;hp=a8daa5e9745fd1615a288182f2fd552d6d78cf22;hb=38c2028e228dcf17f3b4b0ac7e6984d1e1c6df79;hpb=7890a708c71f94c549b3e87f7471647a014d4038 diff --git a/plugins/gpu-gles/gpulib_if.c b/plugins/gpu-gles/gpulib_if.c index a8daa5e9..ce7f00dc 100644 --- a/plugins/gpu-gles/gpulib_if.c +++ b/plugins/gpu-gles/gpulib_if.c @@ -19,6 +19,7 @@ #include "gpuDraw.c" #include "gpuTexture.c" #include "gpuPrim.c" +#include "hud.c" static const short dispWidths[8] = {256,320,512,640,368,384,512,640}; short g_m1,g_m2,g_m3; @@ -84,6 +85,8 @@ static void PaintBlackBorders(void) glEnable(GL_SCISSOR_TEST); glError(); } +static void fps_update(void); + void updateDisplay(void) { bFakeFrontBuffer=FALSE; @@ -120,8 +123,11 @@ void updateDisplay(void) } if(iDrawnSomething) + { + fps_update(); eglSwapBuffers(display, surface); - iDrawnSomething=0; + iDrawnSomething=0; + } if(lClearOnSwap) // clear buffer after swap? { @@ -496,16 +502,28 @@ int renderer_init(void) extern const unsigned char cmd_lengths[256]; -void do_cmd_list(unsigned int *list, int list_len) +// XXX: mostly dupe code from soft peops +int do_cmd_list(unsigned int *list, int list_len, int *last_cmd) { unsigned int cmd, 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]; + 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); @@ -513,8 +531,8 @@ void do_cmd_list(unsigned int *list, int list_len) { case 0x48 ... 0x4F: { - uint32_t num_vertexes = 1; - uint32_t *list_position = &(list[2]); + uint32_t num_vertexes = 2; + uint32_t *list_position = &(list[3]); while(1) { @@ -525,16 +543,14 @@ void do_cmd_list(unsigned int *list, int list_len) num_vertexes++; } - if(num_vertexes > 2) - len += (num_vertexes - 2); - + len += (num_vertexes - 2); break; } case 0x58 ... 0x5F: { - uint32_t num_vertexes = 1; - uint32_t *list_position = &(list[2]); + uint32_t num_vertexes = 2; + uint32_t *list_position = &(list[4]); while(1) { @@ -545,9 +561,7 @@ void do_cmd_list(unsigned int *list, int list_len) num_vertexes++; } - if(num_vertexes > 2) - len += (num_vertexes - 2) * 2; - + len += (num_vertexes - 2) * 2; break; } @@ -565,6 +579,12 @@ void do_cmd_list(unsigned int *list, int list_len) #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) @@ -620,9 +640,14 @@ void vout_update(void) } } +static struct rearmed_cbs *cbs; + long GPUopen(void **dpy) { - iResX = 800; iResY = 480; + int ret; + + iResX = cbs->screen_w; + iResY = cbs->screen_h; rRatioRect.left = rRatioRect.top=0; rRatioRect.right = iResX; rRatioRect.bottom = iResY; @@ -632,27 +657,27 @@ long GPUopen(void **dpy) CSTEXTURE = CSVERTEX = CSCOLOR = 0; InitializeTextureStore(); // init texture mem - is_opened = 1; - return GLinitialize(); + ret = GLinitialize(); + MakeDisplayLists(); + + is_opened = 1; + return ret; } long GPUclose(void) { is_opened = 0; + KillDisplayLists(); GLcleanup(); // close OGL return 0; } -//#include "../../frontend/plugin_lib.h" - -static const struct rearmed_cbs *cbs; - /* acting as both renderer and vout handler here .. */ void renderer_set_config(const struct rearmed_cbs *cbs_) { - cbs = cbs_; + cbs = (void *)cbs_; // ugh.. iOffscreenDrawing = 0; iZBufferDepth = 0; @@ -677,7 +702,8 @@ void vout_set_config(const struct rearmed_cbs *cbs) void SetAspectRatio(void) { - cbs->pl_get_layer_pos(&rRatioRect.left, &rRatioRect.top, &rRatioRect.right, &rRatioRect.bottom); + if (cbs->pl_get_layer_pos) + cbs->pl_get_layer_pos(&rRatioRect.left, &rRatioRect.top, &rRatioRect.right, &rRatioRect.bottom); glScissor(rRatioRect.left, iResY-(rRatioRect.top+rRatioRect.bottom), @@ -687,3 +713,20 @@ void SetAspectRatio(void) rRatioRect.right,rRatioRect.bottom); glError(); } + +static void fps_update(void) +{ + char buf[16]; + + cbs->flip_cnt++; + if(cbs->flips_per_sec != 0) + { + snprintf(buf,sizeof(buf),"%2d %4.1f",cbs->flips_per_sec,cbs->vsps_cur); + DisplayText(buf, 0); + } + if(cbs->cpu_usage != 0) + { + snprintf(buf,sizeof(buf),"%3d",cbs->cpu_usage); + DisplayText(buf, 1); + } +}