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=1f4a23db423022b6329e34261e92fb352b9b8b40;hp=c669b634286224694133d6b6223cfef136e92d1f;hb=HEAD;hpb=b243416b907e6ce366b051e77ed8a434f7668d5d diff --git a/plugins/gpu-gles/gpulib_if.c b/plugins/gpu-gles/gpulib_if.c index c669b634..f00c4592 100644 --- a/plugins/gpu-gles/gpulib_if.c +++ b/plugins/gpu-gles/gpulib_if.c @@ -16,6 +16,7 @@ * * ***************************************************************************/ +#include "gpuStdafx.h" #include "gpuDraw.c" #include "gpuTexture.c" #include "gpuPrim.c" @@ -26,10 +27,10 @@ short g_m1,g_m2,g_m3; short DrawSemiTrans; short ly0,lx0,ly1,lx1,ly2,lx2,ly3,lx3; // global psx vertex coords -long GlobalTextAddrX,GlobalTextAddrY,GlobalTextTP; -long GlobalTextREST,GlobalTextABR,GlobalTextPAGE; +int GlobalTextAddrX,GlobalTextAddrY,GlobalTextTP; +int GlobalTextREST,GlobalTextABR,GlobalTextPAGE; -unsigned long dwGPUVersion; +unsigned int dwGPUVersion; int iGPUHeight=512; int iGPUHeightMask=511; int GlobalTextIL; @@ -41,15 +42,15 @@ GLfloat gl_z=0.0f; BOOL bNeedInterlaceUpdate; BOOL bNeedRGB24Update; BOOL bChangeWinMode; -long lGPUstatusRet; -unsigned long ulGPUInfoVals[16]; +int lGPUstatusRet; +unsigned int ulGPUInfoVals[16]; VRAMLoad_t VRAMWrite; VRAMLoad_t VRAMRead; int iDataWriteMode; int iDataReadMode; -long lClearOnSwap; -long lClearOnSwapColor; +int lClearOnSwap; +int lClearOnSwapColor; BOOL bSkipNextFrame; PSXDisplay_t PSXDisplay; @@ -195,13 +196,13 @@ void updateFrontDisplay(void) static void ChangeDispOffsetsX(void) // CENTER X { -long lx,l;short sO; +int lx,l;short sO; if(!PSXDisplay.Range.x1) return; // some range given? l=PSXDisplay.DisplayMode.x; -l*=(long)PSXDisplay.Range.x1; // some funky calculation +l*=(int)PSXDisplay.Range.x1; // some funky calculation l/=2560;lx=l;l&=0xfffffff8; if(l==PreviousPSXDisplay.Range.x1) return; // some change? @@ -312,7 +313,7 @@ if(bUp) updateDisplay(); // yeah, real update (swap } #define GPUwriteStatus_ext GPUwriteStatus_ext // for gpulib to see this -void GPUwriteStatus_ext(unsigned long gdata) +void GPUwriteStatus_ext(unsigned int gdata) { switch((gdata>>24)&0xff) { @@ -479,10 +480,15 @@ switch((gdata>>24)&0xff) static int is_opened; -int renderer_init(void) +static void set_vram(void *vram) { - psxVub=(void *)gpu.vram; + psxVub=vram; psxVuw=(unsigned short *)psxVub; +} + +int renderer_init(void) +{ + set_vram(gpu.vram); PSXDisplay.RGB24 = FALSE; // init some stuff PSXDisplay.Interlaced = FALSE; @@ -500,10 +506,23 @@ int renderer_init(void) return 0; } +void renderer_finish(void) +{ +} + +void renderer_notify_res_change(void) +{ +} + +void renderer_notify_scanout_change(int x, int y) +{ +} + extern const unsigned char cmd_lengths[256]; // XXX: mostly dupe code from soft peops -int do_cmd_list(unsigned int *list, int list_len, int *last_cmd) +int do_cmd_list(uint32_t *list, int list_len, + int *cycles_sum_out, int *cycles_last, int *last_cmd) { unsigned int cmd, len; unsigned int *list_start = list; @@ -536,7 +555,12 @@ int do_cmd_list(unsigned int *list, int list_len, int *last_cmd) while(1) { - if((*list_position & 0xf000f000) == 0x50005000 || list_position >= list_end) + if(list_position >= list_end) { + cmd = -1; + goto breakloop; + } + + if((*list_position & 0xf000f000) == 0x50005000) break; list_position++; @@ -554,7 +578,12 @@ int do_cmd_list(unsigned int *list, int list_len, int *last_cmd) while(1) { - if((*list_position & 0xf000f000) == 0x50005000 || list_position >= list_end) + if(list_position >= list_end) { + cmd = -1; + goto breakloop; + } + + if((*list_position & 0xf000f000) == 0x50005000) break; list_position += 2; @@ -580,6 +609,7 @@ int do_cmd_list(unsigned int *list, int list_len, int *last_cmd) } } +breakloop: gpu.ex_regs[1] &= ~0x1ff; gpu.ex_regs[1] |= lGPUstatusRet & 0x1ff; @@ -597,7 +627,7 @@ void renderer_sync_ecmds(uint32_t *ecmds) cmdSTP((unsigned char *)&ecmds[6]); } -void renderer_update_caches(int x, int y, int w, int h) +void renderer_update_caches(int x, int y, int w, int h, int state_changed) { VRAMWrite.x = x; VRAMWrite.y = y; @@ -640,9 +670,17 @@ void vout_update(void) } } +void vout_blank(void) +{ +} + +void vout_set_config(const struct rearmed_cbs *cbs) +{ +} + static struct rearmed_cbs *cbs; -long GPUopen(void **dpy) +long GPUopen(unsigned long *disp, char *cap, char *cfg) { int ret; @@ -658,7 +696,7 @@ long GPUopen(void **dpy) InitializeTextureStore(); // init texture mem - ret = GLinitialize(); + ret = GLinitialize(cbs->gles_display, cbs->gles_surface); MakeDisplayLists(); is_opened = 1; @@ -694,15 +732,23 @@ void renderer_set_config(const struct rearmed_cbs *cbs_) bUseFastMdec = cbs->gpu_peopsgl.bUseFastMdec; iTexGarbageCollection = cbs->gpu_peopsgl.iTexGarbageCollection; iVRamSize = cbs->gpu_peopsgl.iVRamSize; -} -void vout_set_config(const struct rearmed_cbs *cbs) -{ + if (cbs->pl_set_gpu_caps) + cbs->pl_set_gpu_caps(GPU_CAP_OWNS_DISPLAY); + + if (is_opened && cbs->gles_display != NULL && cbs->gles_surface != NULL) { + // HACK.. + GPUclose(); + GPUopen(NULL, NULL, NULL); + } + + set_vram(gpu.vram); } 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),