From 1c570e41d39e2814d547c9c7b8f55d1ebf61fac5 Mon Sep 17 00:00:00 2001 From: pjgat09 Date: Fri, 24 May 2013 02:34:57 +0000 Subject: [PATCH] N64: Moved the microcode list for the glide plugin into the code --- .../output/dll/mupen64plus-video-glide64.dll | Bin 571904 -> 571392 bytes .../mupen64plus-video-glide64/src/rdp.cpp | 7880 +++++++++-------- 2 files changed, 4020 insertions(+), 3860 deletions(-) diff --git a/BizHawk.MultiClient/output/dll/mupen64plus-video-glide64.dll b/BizHawk.MultiClient/output/dll/mupen64plus-video-glide64.dll index a78e6cb55528df92d65dac5f43a899cc25b85fb3..b1ad1499bdd2ed5da962d6b0170116c2abc7d9b5 100644 GIT binary patch literal 571392 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�mSVE{dOpt9>&H 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

_DWme%mQJ}LOI)E?j6u^bz_T2 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 literal 571904 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
AIwcWy6Ew9px5G&4kHbx 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%0DYtY5-<|9 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�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 -* -* This program is free software; you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation; either version 2 of the License, or -* any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public -* Licence along with this program; if not, write to the Free -* Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -* Boston, MA 02110-1301, USA -*/ - -//**************************************************************** -// -// Glide64 - Glide Plugin for Nintendo 64 emulators (tested mostly with Project64) -// Project started on December 29th, 2001 -// -// To modify Glide64: -// * Write your name and (optional)email, commented by your work, so I know who did it, and so that you can find which parts you modified when it comes time to send it to me. -// * Do NOT send me the whole project or file that you modified. Take out your modified code sections, and tell me where to put them. If people sent the whole thing, I would have many different versions, but no idea how to combine them all. -// -// Official Glide64 development channel: #Glide64 on EFnet -// -// Original author: Dave2001 (Dave2999@hotmail.com) -// Other authors: Gonetz, Gugaman -// -//**************************************************************** - -#define M64P_PLUGIN_PROTOTYPES 1 -#include "m64p_types.h" -#include "m64p_plugin.h" -#include "m64p_config.h" -#include "m64p_vidext.h" -#include "3dmath.h" -#include "Util.h" -#include "Debugger.h" -#include "Combine.h" -#include "Util.h" -#include "Ini.h" -#include "Config.h" -#include "Tmem.h" -#include "TexCache.h" -#include "TexCache.h" -#include "TexBuffer.h" -#include "CRC.h" -#include "rdp.h" - -#ifndef _WIN32 -#include -#endif // _WIN32 - -char out_buf[2048]; - -DWORD frame_count; // frame counter - -BOOL ucode_error_report = TRUE; -int wrong_tile = -1; - -int drawFlag = 1; // draw flag for rendering callback - -#if defined(__GNUC__) - #define bswap32(x) __builtin_bswap32(x) -#elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64)) - #include - #define bswap32(x) _byteswap_ulong(x) -#else -static inline uint32_t bswap32(uint32_t val) -{ - return (((val & 0xff000000) >> 24) | - ((val & 0x00ff0000) >> 8) | - ((val & 0x0000ff00) << 8) | - ((val & 0x000000ff) << 24)); -} -#endif - -// global strings -const char *ACmp[4] = { "NONE", "THRESHOLD", "UNKNOWN", "DITHER" }; - -const char *Mode0[16] = { "COMBINED", "TEXEL0", - "TEXEL1", "PRIMITIVE", - "SHADE", "ENVIORNMENT", - "1", "NOISE", - "0", "0", - "0", "0", - "0", "0", - "0", "0" }; -const char *Mode1[16] = { "COMBINED", "TEXEL0", - "TEXEL1", "PRIMITIVE", - "SHADE", "ENVIORNMENT", - "CENTER", "K4", - "0", "0", - "0", "0", - "0", "0", - "0", "0" }; -const char *Mode2[32] = { "COMBINED", "TEXEL0", - "TEXEL1", "PRIMITIVE", - "SHADE", "ENVIORNMENT", - "SCALE", "COMBINED_ALPHA", - "T0_ALPHA", "T1_ALPHA", - "PRIM_ALPHA", "SHADE_ALPHA", - "ENV_ALPHA", "LOD_FRACTION", - "PRIM_LODFRAC", "K5", - "0", "0", - "0", "0", - "0", "0", - "0", "0", - "0", "0", - "0", "0", - "0", "0", - "0", "0" }; -const char *Mode3[8] = { "COMBINED", "TEXEL0", - "TEXEL1", "PRIMITIVE", - "SHADE", "ENVIORNMENT", - "1", "0" }; - -const char *Alpha0[8] = { "COMBINED", "TEXEL0", - "TEXEL1", "PRIMITIVE", - "SHADE", "ENVIORNMENT", - "1", "0" }; -const char *Alpha2[8] = { "LOD_FRACTION", "TEXEL0", - "TEXEL1", "PRIMITIVE", - "SHADE", "ENVIORNMENT", - "PRIM_LODFRAC", "0" }; - -//FIXME:unused? -//const char *FBLa[] = { "G_BL_CLR_IN", "G_BL_CLR_MEM", "G_BL_CLR_BL", "G_BL_CLR_FOG" }; -//const char *FBLb[] = { "G_BL_A_IN", "G_BL_A_FOG", "G_BL_A_SHADE", "G_BL_0" }; -//const char *FBLc[] = { "G_BL_CLR_IN", "G_BL_CLR_MEM", "G_BL_CLR_BL", "G_BL_CLR_FOG"}; -//const char *FBLd[] = { "G_BL_1MA", "G_BL_A_MEM", "G_BL_1", "G_BL_0" }; - -const char *str_zs[2] = { "G_ZS_PIXEL", "G_ZS_PRIM" }; - -const char *str_yn[2] = { "NO", "YES" }; -const char *str_offon[2] = { "OFF", "ON" }; - -const char *str_cull[4] = { "DISABLE", "FRONT", "BACK", "BOTH" }; - -// I=intensity probably -const char *str_format[8] = { "RGBA", "YUV", "CI", "IA", "I", "?", "?", "?" }; -const char *str_size[4] = { "4bit", "8bit", "16bit", "32bit" }; -const char *str_cm[4] = { "WRAP/NO CLAMP", "MIRROR/NO CLAMP", "WRAP/CLAMP", "MIRROR/CLAMP" }; - -//const char *str_lod[] = { "1", "2", "4", "8", "16", "32", "64", "128", "256" }; -//const char *str_aspect[] = { "1x8", "1x4", "1x2", "1x1", "2x1", "4x1", "8x1" }; - -const char *str_filter[3] = { "Point Sampled", "Average (box)", "Bilinear" }; - -const char *str_tlut[4] = { "TT_NONE", "TT_UNKNOWN", "TT_RGBA_16", "TT_IA_16" }; - -const char *CIStatus[10] = { "ci_main", "ci_zimg", "ci_unknown", "ci_useless", - "ci_old_copy", "ci_copy", "ci_copy_self", - "ci_zcopy", "ci_aux", "ci_aux_copy" }; - - -// ZIGGY -// depth save/restore variables -// 0 : normal mode -// 1 : writing in normal depth buffer -// 2 : writing in alternate depth buffer -static int render_depth_mode; - -// ** RDP graphics functions ** -static void undef(); -static void spnoop(); - -static void rdp_noop(); -static void rdp_texrect(); -//static void rdp_texrectflip(); -static void rdp_loadsync(); -static void rdp_pipesync(); -static void rdp_tilesync(); -static void rdp_fullsync(); -static void rdp_setkeygb(); -static void rdp_setkeyr(); -static void rdp_setconvert(); -static void rdp_setscissor(); -static void rdp_setprimdepth(); -static void rdp_setothermode(); -static void rdp_loadtlut(); -static void rdp_settilesize(); -static void rdp_loadblock(); -static void rdp_loadtile(); -static void rdp_settile(); -static void rdp_fillrect(); -static void rdp_setfillcolor(); -static void rdp_setfogcolor(); -static void rdp_setblendcolor(); -static void rdp_setprimcolor(); -static void rdp_setenvcolor(); -static void rdp_setcombine(); -static void rdp_settextureimage(); -static void rdp_setdepthimage(); -static void rdp_setcolorimage(); -static void rdp_trifill(); -static void rdp_trishade(); -static void rdp_tritxtr(); -static void rdp_trishadetxtr(); -static void rdp_trifillz(); -static void rdp_trishadez(); -static void rdp_tritxtrz(); -static void rdp_trishadetxtrz(); - -static void rsp_reserved0(); -static void rsp_reserved1(); -static void rsp_reserved2(); -static void rsp_reserved3(); - -static void ys_memrect(); - -BYTE microcode[4096]; -DWORD uc_crc; -void microcheck (); - -// ** UCODE FUNCTIONS ** -#include "Ucode00.h" -#include "ucode01.h" -#include "ucode02.h" -#include "ucode03.h" -#include "ucode04.h" -#include "ucode05.h" -#include "ucode06.h" -#include "ucode07.h" -#include "ucode08.h" -#include "ucode.h" - -static BOOL reset = 0; -static int old_ucode = -1; - -// rdp_reset - resets the RDP_E -void rdp_reset () -{ - reset = 1; - - rdp.model_i = 0; - - rdp.n_cached[0] = 0; - rdp.n_cached[1] = 0; - rdp.cur_cache[0] = NULL; - rdp.cur_cache[1] = NULL; - /* - rdp.tmem_ptr[0] = offset_textures; - rdp.tmem_ptr[1] = offset_textures; - if (grTextureBufferExt) - rdp.tmem_ptr[1] = TEXMEM_2MB_EDGE * 2; - */ - rdp.c_a0 = 0; - rdp.c_b0 = 0; - rdp.c_c0 = 0; - rdp.c_d0 = 0; - rdp.c_Aa0 = 0; - rdp.c_Ab0 = 0; - rdp.c_Ac0 = 0; - rdp.c_Ad0 = 0; - - rdp.c_a1 = 0; - rdp.c_b1 = 0; - rdp.c_c1 = 0; - rdp.c_d1 = 0; - rdp.c_Aa1 = 0; - rdp.c_Ab1 = 0; - rdp.c_Ac1 = 0; - rdp.c_Ad1 = 0; - - // Clear the palette CRC - int i; - for (i=0; i<16; i++) - rdp.pal_8_crc[i] = 0; - - // Clear the palettes - for (i=0; i<256; i++) - rdp.pal_8[i] = 0; - - rdp.tlut_mode = 0; - - // Clear all segments ** VERY IMPORTANT FOR ZELDA ** - for (i=0; i<16; i++) - rdp.segment[i] = 0; - - for (i=0; i<512; i++) - rdp.addr[i] = 0; - - // set all vertex numbers - for (i=0; i>2; i++) - { - uc_crc += ((DWORD*)microcode)[i]; - } - - FRDP_E ("crc: %08lx\n", uc_crc); - -#ifdef LOG_UCODE - std::ofstream ucf; - ucf.open ("ucode.txt", ios::out | ios::binary); - char d; - for (i=0; i<0x400000; i++) - { - d = ((char*)gfx.RDRAM)[i^3]; - ucf.write (&d, 1); - } - ucf.close (); -#endif - - char str[9]; - sprintf (str, "%08lx", (unsigned long)uc_crc); - - INI_Open (); - INI_FindSection ("UCODE"); - FRDP("ucode = %s\n", str); - int uc = INI_ReadInt (str, -2, 0); - WriteLog(M64MSG_INFO, "ucode = %d\n", uc); - if (uc == -2 && ucode_error_report) - { - Config_Open(); - settings.ucode = Config_ReadInt ("ucode", "Force microcode", 0, FALSE, FALSE); - - ReleaseGfx (); - WriteLog(M64MSG_ERROR, "Error: uCode crc not found in INI, using currently selected uCode\n\n%08lx", (unsigned long)uc_crc); - - ucode_error_report = FALSE; // don't report any more ucode errors from this game - } - else if (uc == -1 && ucode_error_report) - { - Config_Open(); - settings.ucode = Config_ReadInt ("ucode", "Force microcode", 0, FALSE, FALSE); - - ReleaseGfx (); - WriteLog(M64MSG_ERROR, "Error: Unsupported uCode!\n\ncrc: %08lx", (unsigned long)uc_crc); - - ucode_error_report = FALSE; // don't report any more ucode errors from this game - } - else - { - old_ucode = settings.ucode; - settings.ucode = uc; - FRDP("microcheck: old ucode: %d, new ucode: %d\n", old_ucode, uc); - } -} - -void drawNoFullscreenMessage() -{ - LOG ("drawNoFullscreenMessage ()\n"); -} - -static WORD yuv_to_rgb(BYTE y, BYTE u, BYTE v) -{ - float r = y + (1.370705f * (v-128)); - float g = y - (0.698001f * (v-128)) - (0.337633f * (u-128)); - float b = y + (1.732446f * (u-128)); - r *= 0.125f; - g *= 0.125f; - b *= 0.125f; - //clipping the result - if (r > 32) r = 32; - if (g > 32) g = 32; - if (b > 32) b = 32; - if (r < 0) r = 0; - if (g < 0) g = 0; - if (b < 0) b = 0; - - WORD c = (WORD)(((WORD)(r) << 11) | - ((WORD)(g) << 6) | - ((WORD)(b) << 1) | 1); - return c; -} - -static void DrawYUVImageToFrameBuffer() -{ - WORD width = (WORD)(rdp.yuv_lr_x - rdp.yuv_ul_x); - WORD height = (WORD)(rdp.yuv_lr_y - rdp.yuv_ul_y); - DWORD * mb = (DWORD*)(gfx.RDRAM+rdp.yuv_im_begin); //pointer to the first macro block - WORD * cimg = (WORD*)(gfx.RDRAM+rdp.cimg); - //yuv macro block contains 16x16 texture. we need to put it in the proper place inside cimg - for (WORD y = 0; y < height; y+=16) - { - for (WORD x = 0; x < width; x+=16) - { - WORD *dst = cimg + x + y * rdp.ci_width; - for (WORD h = 0; h < 16; h++) - { - for (WORD w = 0; w < 8; w++) - { - DWORD t = *(mb++); //each DWORD contains 2 pixels - if ((x < rdp.ci_width) && (y < rdp.ci_height)) //clipping. texture image may be larger than color image - { - BYTE y0 = (BYTE)t&0xFF; - BYTE v = (BYTE)(t>>8)&0xFF; - BYTE y1 = (BYTE)(t>>16)&0xFF; - BYTE u = (BYTE)(t>>24)&0xFF; - *(dst++) = yuv_to_rgb(y0, u, v); - *(dst++) = yuv_to_rgb(y1, u, v); - } - } - dst += rdp.ci_width - 16; - } - mb += 64; //macro block is 768 bytes long, last 256 bytes are useless - } - } -} - -static DWORD d_ul_x, d_ul_y, d_lr_x, d_lr_y; - -typedef struct { - int ul_x, ul_y, lr_x, lr_y; -} FB_PART; - -static void DrawPart(int scr_ul_x, int scr_ul_y, int prt_ul_x, int prt_ul_y, int width, int height, float scale_x, float scale_y) -{ - WORD * dst = new WORD[width*height]; - DWORD shift = ((d_ul_y+prt_ul_y) * rdp.ci_width + d_ul_x + prt_ul_x) << 1; - WORD * src = (WORD*)(gfx.RDRAM+rdp.cimg+shift); - WORD c; - for (int y=0; y < height; y++) - { - for (int x=0; x < width; x++) - { - c = src[(int(x*scale_x)+int(y*scale_y)*rdp.ci_width)^1]; - dst[x+y*width] = c?((c >> 1) | 0x8000):0; - } - } - - grLfbWriteRegion(GR_BUFFER_BACKBUFFER, - scr_ul_x, - scr_ul_y, - GR_LFB_SRC_FMT_1555, - width, - height, - FXTRUE, - width<<1, - dst); - delete[] dst; -} - -static void DrawFrameBufferToScreen() -{ - FRDP("DrawFrameBufferToScreen. cimg: %08lx, ul_x: %d, uly: %d, lr_x: %d, lr_y: %d\n", rdp.cimg, d_ul_x, d_ul_y, d_lr_x, d_lr_y); - if (!fullscreen) - return; - grColorCombine (GR_COMBINE_FUNCTION_SCALE_OTHER, - GR_COMBINE_FACTOR_ONE, - GR_COMBINE_LOCAL_NONE, - GR_COMBINE_OTHER_TEXTURE, - FXFALSE); - grAlphaCombine (GR_COMBINE_FUNCTION_SCALE_OTHER, - GR_COMBINE_FACTOR_ONE, - GR_COMBINE_LOCAL_NONE, - GR_COMBINE_OTHER_TEXTURE, - FXFALSE); - grConstantColorValue (0xFFFFFFFF); - grAlphaBlendFunction( GR_BLEND_SRC_ALPHA, - GR_BLEND_ONE_MINUS_SRC_ALPHA, - GR_BLEND_ONE, - GR_BLEND_ZERO); - rdp.update |= UPDATE_COMBINE; - - float scale_x_dst = (float)settings.scr_res_x / rdp.vi_width;//(float)max(rdp.frame_buffers[rdp.main_ci_index].width, rdp.ci_width); - float scale_y_dst = (float)settings.scr_res_y / rdp.vi_height;//(float)max(rdp.frame_buffers[rdp.main_ci_index].height, rdp.ci_lower_bound); - float scale_x_src = (float)rdp.vi_width / (float)settings.scr_res_x;//(float)max(rdp.frame_buffers[rdp.main_ci_index].width, rdp.ci_width); - float scale_y_src = (float)rdp.vi_height / (float)settings.scr_res_y;//(float)max(rdp.frame_buffers[rdp.main_ci_index].height, rdp.ci_lower_bound); - int src_width = d_lr_x - d_ul_x + 1; - int src_height = d_lr_y - d_ul_y + 1; - int dst_width, dst_height, ul_x, ul_y; - - if (!settings.fb_optimize_write || ((src_width < 33) && (src_height < 33))) - { - dst_width = int(src_width*scale_x_dst); - dst_height = int(src_height*scale_y_dst); - ul_x = int(d_ul_x*scale_x_dst); - ul_y = int(d_ul_y*scale_y_dst); - DrawPart(ul_x, ul_y, 0, 0, dst_width, dst_height, scale_x_src, scale_y_src); - memset(gfx.RDRAM+rdp.cimg, 0, rdp.ci_width*rdp.ci_height*rdp.ci_size); - return; - } - - FB_PART parts[8]; - int p; - for (p = 0; p < 8; p++) - { - parts[p].lr_x = parts[p].lr_y = 0; - parts[p].ul_x = parts[p].ul_y = 0xFFFF; - } - - int num_of_parts = 0; - int cur_part = 0; - int most_left = d_ul_x; - int most_right = d_lr_x; - DWORD shift = (d_ul_y * rdp.ci_width + d_ul_x) << 1; - WORD * src = (WORD*)(gfx.RDRAM+rdp.cimg+shift); - for (int h = 0; h < src_height; h++) - { - cur_part = 0; - int w = 0; - while (w < src_width) - { - while (w < src_width) - { - if (src[(w+h*rdp.ci_width)^1] == 0) - w++; - else - break; - } - if (w == src_width) - break; - if (num_of_parts == 0) //first part - { - parts[0].ul_x = w; - most_left = w; - parts[0].ul_y = h; - cur_part = 0; - } - else if (w < most_left - 2) //new part - { - parts[num_of_parts].ul_x = w; - most_left = w; - parts[num_of_parts].ul_y = h; - cur_part = num_of_parts; - num_of_parts++; - } - else if (w > most_right + 2) //new part - { - parts[num_of_parts].ul_x = w; - most_right = w; - parts[num_of_parts].ul_y = h; - cur_part = num_of_parts; - num_of_parts++; - } - else - { - for (p = 0; p < num_of_parts; p++) - { - if ((w > parts[p].ul_x - 2) && (w < parts[p].lr_x+2)) - { - if (w < parts[p].ul_x) parts[p].ul_x = w; - break; - } - } - cur_part = p; - } - while (w < src_width) - { - if (src[(w+h*rdp.ci_width)^1] != 0) - w++; - else - break; - } - if (num_of_parts == 0) //first part - { - parts[0].lr_x = w; - most_right = w; - num_of_parts++; - } - else - { - if (parts[cur_part].lr_x < w) parts[cur_part].lr_x = w; - if (most_right < w) most_right = w; - parts[cur_part].lr_y = h; - } - } - } - /* - for (p = 0; p < num_of_parts; p++) - { - FRDP("part#%d ul_x: %d, ul_y: %d, lr_x: %d, lr_y: %d\n", p, parts[p].ul_x, parts[p].ul_y, parts[p].lr_x, parts[p].lr_y); - } - */ - for (p = 0; p < num_of_parts; p++) - { - dst_width = int((parts[p].lr_x-parts[p].ul_x + 1)*scale_x_dst); - dst_height = int((parts[p].lr_y-parts[p].ul_y + 1)*scale_y_dst); - ul_x = int((d_ul_x+parts[p].ul_x)*scale_x_dst); - ul_y = int((d_ul_y+parts[p].ul_y)*scale_y_dst); - DrawPart(ul_x, ul_y, parts[p].ul_x, parts[p].ul_y, dst_width, dst_height, scale_x_src, scale_y_src); - } - memset(gfx.RDRAM+rdp.cimg, 0, rdp.ci_width*rdp.ci_height*rdp.ci_size); -} - -#define RGBA16TO32(color) \ - ((color&1)?0xFF:0) | \ - ((DWORD)((float)((color&0xF800) >> 11) / 31.0f * 255.0f) << 24) | \ - ((DWORD)((float)((color&0x07C0) >> 6) / 31.0f * 255.0f) << 16) | \ -((DWORD)((float)((color&0x003E) >> 1) / 31.0f * 255.0f) << 8) - -static void CopyFrameBuffer (GrBuffer_t buffer = GR_BUFFER_BACKBUFFER) -{ - if (!fullscreen) - return; - FRDP ("CopyFrameBuffer: %08lx... ", rdp.cimg); - - // don't bother to write the stuff in asm... the slow part is the read from video card, - // not the copy. - - int width = rdp.ci_width;//*gfx.VI_WIDTH_REG; - int height; - if (settings.fb_smart && !settings.PPL) - { - int ind = (rdp.ci_count > 0)?rdp.ci_count-1:0; - height = rdp.frame_buffers[ind].height; - } - else - { - height = rdp.ci_lower_bound; - if (settings.PPL) - height -= rdp.ci_upper_bound; - } - FRDP ("width: %d, height: %d... ", width, height); - - if (rdp.scale_x < 1.1f) - { - WORD * ptr_src = new WORD[width*height]; - if (grLfbReadRegion(buffer, - 0, - 0,//rdp.ci_upper_bound, - width, - height, - width<<1, - ptr_src)) - { - WORD *ptr_dst = (WORD*)(gfx.RDRAM+rdp.cimg); - DWORD *ptr_dst32 = (DWORD*)(gfx.RDRAM+rdp.cimg); - WORD c; - - for (int y=0; y 0) - c = (c&0xFFC0) | ((c&0x001F) << 1) | 1; - } - else - { - c = (c&0xFFC0) | ((c&0x001F) << 1) | 1; - } - if (rdp.ci_size == 2) - ptr_dst[(x + y * width)^1] = c; - else - ptr_dst32[x + y * width] = RGBA16TO32(c); - } - } - /* - } - else //8bit I or CI - { - BYTE *ptr_dst = (BYTE*)(gfx.RDRAM+rdp.cimg); - WORD c; - - for (int y=0; y>5)&0x3F)/63.0f*85.0f); - BYTE r = (BYTE)((float)((c>>11)&0x1F)/31.0f*85.0f); - c = (c&0xFFC0) | ((c&0x001F) << 1) | 1; - // FRDP("src: %08lx, dst: %d\n",c,(BYTE)(r+g+b)); - ptr_dst[(x + y * width)^1] = (BYTE)(r+g+b); - // ptr_dst[(x + y * width)^1] = (BYTE)((c>>8)&0xFF); - } - } - } */ - RDP ("ReadRegion. Framebuffer copy complete.\n"); - } - else - { - RDP ("Framebuffer copy failed.\n"); - } - delete[] ptr_src; - } - else - { - if (rdp.motionblur && settings.fb_hires) - { - return; - } - else - { - float scale_x = (float)settings.scr_res_x / rdp.vi_width;//(float)max(rdp.frame_buffers[rdp.main_ci_index].width, rdp.ci_width); - float scale_y = (float)settings.scr_res_y / rdp.vi_height;//(float)max(rdp.frame_buffers[rdp.main_ci_index].height, rdp.ci_lower_bound); - - FRDP("width: %d, height: %d, ul_y: %d, lr_y: %d, scale_x: %f, scale_y: %f, ci_width: %d, ci_height: %d\n",width, height, rdp.ci_upper_bound, rdp.ci_lower_bound, scale_x, scale_y, rdp.ci_width, rdp.ci_height); - GrLfbInfo_t info; - info.size = sizeof(GrLfbInfo_t); - - - // VP 888 disconnected for now - if (1||rdp.ci_size <= 2) { - if (grLfbLock (GR_LFB_READ_ONLY, - buffer, - GR_LFBWRITEMODE_565, - GR_ORIGIN_UPPER_LEFT, - FXFALSE, - &info)) - { - WORD *ptr_src = (WORD*)info.lfbPtr; - WORD *ptr_dst = (WORD*)(gfx.RDRAM+rdp.cimg); - DWORD *ptr_dst32 = (DWORD*)(gfx.RDRAM+rdp.cimg); - WORD c; - DWORD stride = info.strideInBytes>>1; - - BOOL read_alpha = settings.fb_read_alpha; - if (settings.PM && rdp.frame_buffers[rdp.ci_count-1].status != ci_aux) - read_alpha = FALSE; - for (int y=0; y>1; - - for (int y=0; y 0) - SwapOK = TRUE; - rdp.updatescreen = 1; - - rdp.tri_n = 0; // 0 triangles so far this frame - rdp.debug_n = 0; - - rdp.model_i = 0; // 0 matrices so far in stack - //stack_size can be less then 32! Important for Silicon Vally. Thanks Orkin! - rdp.model_stack_size = min(32, (*(DWORD*)(gfx.DMEM+0x0FE4))>>6); - if (rdp.model_stack_size == 0) - rdp.model_stack_size = 32; - rdp.fb_drawn = rdp.fb_drawn_front = FALSE; - rdp.update = 0x7FFFFFFF; // All but clear cache - rdp.geom_mode = 0; - rdp.acmp = 0; - rdp.maincimg[1] = rdp.maincimg[0]; - rdp.skip_drawing = FALSE; - rdp.s2dex_tex_loaded = FALSE; - fbreads_front = fbreads_back = 0; - rdp.fog_multiplier = rdp.fog_offset = 0; - rdp.zsrc = 0; - - if (cpu_fb_write == TRUE) - DrawFrameBufferToScreen(); - cpu_fb_write = FALSE; - cpu_fb_read_called = FALSE; - cpu_fb_write_called = FALSE; - cpu_fb_ignore = FALSE; - d_ul_x = 0xffff; - d_ul_y = 0xffff; - d_lr_x = 0; - d_lr_y = 0; - - //analize possible frame buffer usage - if (settings.fb_smart) - DetectFrameBufferUsage(); - if (!settings.lego || rdp.num_of_ci > 1) - rdp.last_bg = 0; - //* End of set states *// - - - // Get the start of the display list and the length of it - DWORD dlist_start = *(DWORD*)(gfx.DMEM+0xFF0); - DWORD dlist_length = *(DWORD*)(gfx.DMEM+0xFF4); - FRDP("--- NEW DLIST --- crc: %08lx, ucode: %d, fbuf: %08lx, fbuf_width: %d, dlist start: %08lx, dlist_lenght: %d\n", uc_crc, settings.ucode, *gfx.VI_ORIGIN_REG, *gfx.VI_WIDTH_REG, dlist_start, dlist_length); - FRDP_E("--- NEW DLIST --- crc: %08lx, ucode: %d, fbuf: %08lx\n", uc_crc, settings.ucode, *gfx.VI_ORIGIN_REG); - - if (settings.tonic && dlist_length < 16) - { - rdp_fullsync(); - FRDP_E("DLIST is too short!\n"); - return; - } - - // Start executing at the start of the display list - rdp.pc_i = 0; - rdp.pc[rdp.pc_i] = dlist_start; - rdp.dl_count = -1; - rdp.halt = 0; - DWORD a; - - // catches exceptions so that it doesn't freeze -#ifdef CATCH_EXCEPTIONS - try { -#endif - - // MAIN PROCESSING LOOP - do { - - // Get the address of the next command - a = rdp.pc[rdp.pc_i] & BMASK; - - // Load the next command and its input - rdp.cmd0 = ((DWORD*)gfx.RDRAM)[a>>2]; // \ Current command, 64 bit - rdp.cmd1 = ((DWORD*)gfx.RDRAM)[(a>>2)+1]; // / - // cmd2 and cmd3 are filled only when needed, by the function that needs them - - // Output the address before the command -#ifdef LOG_COMMANDS - FRDP ("%08lx (c0:%08lx, c1:%08lx): ", a, rdp.cmd0, rdp.cmd1); -#else - FRDP ("%08lx: ", a); -#endif - - // Go to the next instruction - rdp.pc[rdp.pc_i] = (a+8) & BMASK; - -#ifdef PERFORMANCE - QueryPerformanceCounter ((LARGE_INTEGER*)&perf_cur); -#endif - // Process this instruction - gfx_instruction[settings.ucode][rdp.cmd0>>24] (); - - // check DL counter - if (rdp.dl_count != -1) - { - rdp.dl_count --; - if (rdp.dl_count == 0) - { - rdp.dl_count = -1; - - RDP ("End of DL\n"); - rdp.pc_i --; - } - } - -#ifdef PERFORMANCE - QueryPerformanceCounter ((LARGE_INTEGER*)&perf_next); - __int64 t = perf_next-perf_cur; - sprintf (out_buf, "perf %08lx: %016I64d\n", a-8, t); - rdp_log << out_buf; -#endif - - } while (!rdp.halt); -#ifdef CATCH_EXCEPTIONS - } catch (...) { - - if (fullscreen) ReleaseGfx (); - WriteLog(M64MSG_ERROR, "The GFX plugin caused an exception and has been disabled."); - exception = TRUE; - } -#endif - - if (settings.fb_smart) - { - rdp.scale_x = rdp.scale_x_bak; - rdp.scale_y = rdp.scale_y_bak; - } - if (settings.fb_read_always) - { - CopyFrameBuffer (); - } - if (rdp.yuv_image) - { - DrawYUVImageToFrameBuffer(); - rdp.yuv_image = FALSE; -// FRDP("yuv image draw. ul_x: %f, ul_y: %f, lr_x: %f, lr_y: %f, begin: %08lx\n", -// rdp.yuv_ul_x, rdp.yuv_ul_y, rdp.yuv_lr_x, rdp.yuv_lr_y, rdp.yuv_im_begin); - rdp.yuv_ul_x = rdp.yuv_ul_y = rdp.yuv_lr_x = rdp.yuv_lr_y = 0; - rdp.yuv_im_begin = 0x00FFFFFF; - } - if (rdp.cur_image) - CloseTextureBuffer(rdp.read_whole_frame && (settings.PM || rdp.swap_ci_index >= 0)); - - if (settings.TGR2 && rdp.vi_org_reg != *gfx.VI_ORIGIN_REG && CI_SET) - { - newSwapBuffers (); - CI_SET = FALSE; - } - RDP("ProcessDList end\n"); -} - -#ifdef __cplusplus -} -#endif - -// undef - undefined instruction, always ignore -static void undef() -{ - FRDP_E("** undefined ** (%08lx)\n", rdp.cmd0); - FRDP("** undefined ** (%08lx) - IGNORED\n", rdp.cmd0); - #ifdef _FINAL_RELEASE_ - *gfx.MI_INTR_REG |= 0x20; - gfx.CheckInterrupts(); - rdp.halt = 1; - #endif -} - -// spnoop - no operation, always ignore -static void spnoop() -{ - RDP("spnoop\n"); -} - -// noop - no operation, always ignore -static void rdp_noop() -{ - RDP("noop\n"); -} - -static void ys_memrect () -{ - DWORD tile = (WORD)((rdp.cmd1 & 0x07000000) >> 24); - - DWORD lr_x = (WORD)((rdp.cmd0 & 0x00FFF000) >> 14); - DWORD lr_y = (WORD)((rdp.cmd0 & 0x00000FFF) >> 2); - DWORD ul_x = (WORD)((rdp.cmd1 & 0x00FFF000) >> 14); - DWORD ul_y = (WORD)((rdp.cmd1 & 0x00000FFF) >> 2); - - rdp.pc[rdp.pc_i] += 16; // texrect is 196-bit - - if (lr_y > rdp.scissor_o.lr_y) lr_y = rdp.scissor_o.lr_y; - - FRDP ("memrect (%d, %d, %d, %d), ci_width: %d\n", ul_x, ul_y, lr_x, lr_y, rdp.ci_width); - - DWORD y, width = lr_x - ul_x; - DWORD texaddr = rdp.addr[rdp.tiles[tile].t_mem]; - DWORD tex_width = rdp.tiles[tile].line << 3; - - for (y = ul_y; y < lr_y; y++) { - BYTE *src = gfx.RDRAM + texaddr + (y - ul_y) * tex_width; - BYTE *dst = gfx.RDRAM + rdp.cimg + ul_x + y * rdp.ci_width; - memcpy (dst, src, width); - } -} - -static void pm_palette_mod () -{ - BYTE envr = (BYTE)((float)((rdp.env_color >> 24)&0xFF)/255.0f*31.0f); - BYTE envg = (BYTE)((float)((rdp.env_color >> 16)&0xFF)/255.0f*31.0f); - BYTE envb = (BYTE)((float)((rdp.env_color >> 8)&0xFF)/255.0f*31.0f); - WORD env16 = (WORD)((envr<<11)|(envg<<6)|(envb<<1)|1); - BYTE prmr = (BYTE)((float)((rdp.prim_color >> 24)&0xFF)/255.0f*31.0f); - BYTE prmg = (BYTE)((float)((rdp.prim_color >> 16)&0xFF)/255.0f*31.0f); - BYTE prmb = (BYTE)((float)((rdp.prim_color >> 8)&0xFF)/255.0f*31.0f); - WORD prim16 = (WORD)((prmr<<11)|(prmg<<6)|(prmb<<1)|1); - WORD * dst = (WORD*)(gfx.RDRAM+rdp.cimg); - for (int i = 0; i < 16; i++) - { - dst[i^1] = (rdp.pal_8[i]&1) ? prim16 : env16; - } - RDP("Texrect palette modification\n"); -} - -static void rdp_texrect() -{ - DWORD a = rdp.pc[rdp.pc_i]; - rdp.cmd2 = ((DWORD*)gfx.RDRAM)[(a>>2)+1]; - rdp.cmd3 = ((DWORD*)gfx.RDRAM)[(a>>2)+3]; - - if (settings.ASB) //modified Rice's hack for All-Star Baseball games - { - DWORD dwHalf1 = (((DWORD*)gfx.RDRAM)[(a>>2)+0]) >> 24; - if ((dwHalf1 != 0xF1) && (dwHalf1 != 0xb3)) - { - rdp.pc[rdp.pc_i] += 16; - } - else - { - rdp.pc[rdp.pc_i] += 8; - rdp.cmd3 = rdp.cmd2; - rdp.cmd2 = 0; - } - } - else if (settings.yoshi && settings.ucode == 6) - { - ys_memrect(); - return; - } - else - { - rdp.pc[rdp.pc_i] += 16; // texrect is 196-bit - } - - if (rdp.skip_drawing || (!settings.fb_smart && (rdp.cimg == rdp.zimg))) - { - if (settings.PM && rdp.ci_status == ci_useless) - { - pm_palette_mod (); - } - else - { - RDP("Texrect skipped\n"); - } - return; - } - - if ((settings.ucode == 8) && rdp.cur_image && rdp.cur_image->format) - { - //FRDP("Wrong Texrect. texaddr: %08lx, cimg: %08lx, cimg_end: %08lx\n", rdp.timg.addr, rdp.maincimg[1].addr, rdp.maincimg[1].addr+rdp.ci_width*rdp.ci_height*rdp.ci_size); - RDP("Shadow texrect is skipped.\n"); - rdp.tri_n += 2; - return; - } - - WORD ul_x = (WORD)((rdp.cmd1 & 0x00FFF000) >> 14); - WORD ul_y = (WORD)((rdp.cmd1 & 0x00000FFF) >> 2); - WORD lr_x = (WORD)((rdp.cmd0 & 0x00FFF000) >> 14); - WORD lr_y = (WORD)((rdp.cmd0 & 0x00000FFF) >> 2); - if (ul_x >= lr_x) return; - if (rdp.cycle_mode > 1 || settings.increase_texrect_edge) - { - lr_x++; - lr_y++; - } - if (ul_y == lr_y) - { - lr_y ++; - } - - //* - if (rdp.hires_tex && settings.fb_optimize_texrect) - { - if (!rdp.hires_tex->drawn) - { - DRAWIMAGE d; - d.imageX = 0; - d.imageW = (WORD)rdp.hires_tex->width; - d.frameX = ul_x; - d.frameW = (WORD)(rdp.hires_tex->width);//(WORD)(ul_x + rdp.hires_tex->width);//lr_x; - - d.imageY = 0; - d.imageH = (WORD)rdp.hires_tex->height; - d.frameY = ul_y; - d.frameH = (WORD)(rdp.hires_tex->height);//(ul_y + rdp.hires_tex->height); - FRDP("texrect. ul_x: %d, ul_y: %d, lr_x: %d, lr_y: %d, width: %d, height: %d\n", ul_x, ul_y, lr_x, lr_y, rdp.hires_tex->width, rdp.hires_tex->height); - d.scaleX = 1.0f; - d.scaleY = 1.0f; - DrawHiresImage(&d, rdp.hires_tex->width == rdp.ci_width); - rdp.hires_tex->drawn = TRUE; - } - return; - } -//*/ - // framebuffer workaround for Zelda: MM LOT - if ((rdp.othermode_l & 0xFFFF0000) == 0x0f5a0000) - return; - - /*Gonetz*/ - //hack for Zelda MM. it removes black texrects which cover all geometry in "Link meets Zelda" cut scene - if (settings.zelda && rdp.timg.addr >= rdp.cimg && rdp.timg.addr < rdp.ci_end) - { - FRDP("Wrong Texrect. texaddr: %08lx, cimg: %08lx, cimg_end: %08lx\n", rdp.cur_cache[0]->addr, rdp.cimg, rdp.cimg+rdp.ci_width*rdp.ci_height*2); - rdp.tri_n += 2; - return; - } -//* - //hack for Banjo2. it removes black texrects under Banjo - if (!settings.fb_hires && ((rdp.cycle1 << 16) | (rdp.cycle2 & 0xFFFF)) == 0xFFFFFFFF && (rdp.othermode_l & 0xFFFF0000) == 0x00500000) - { - rdp.tri_n += 2; - return; - } -//*/ - //* - //remove motion blur in night vision - if ((settings.ucode == 7) && (rdp.maincimg[1].addr != rdp.maincimg[0].addr) && (rdp.timg.addr >= rdp.maincimg[1].addr) && (rdp.timg.addr < (rdp.maincimg[1].addr+rdp.ci_width*rdp.ci_height*rdp.ci_size))) - { - if (settings.fb_smart) - if (rdp.frame_buffers[rdp.ci_count-1].status == ci_copy_self || !settings.fb_motionblur) - { - // FRDP("Wrong Texrect. texaddr: %08lx, cimg: %08lx, cimg_end: %08lx\n", rdp.timg.addr, rdp.maincimg[1], rdp.maincimg[1]+rdp.ci_width*rdp.ci_height*rdp.ci_size); - RDP("Wrong Texrect.\n"); - rdp.tri_n += 2; - return; - } - } -//*/ - - int i; - - DWORD tile = (WORD)((rdp.cmd1 & 0x07000000) >> 24); - - // update MUST be at the beginning, b/c of update_scissor - if (rdp.cycle_mode == 2) - { - rdp.tex = 1; - rdp.allow_combine = 0; - - cmb.tmu1_func = cmb.tmu0_func = GR_COMBINE_FUNCTION_LOCAL; - cmb.tmu1_fac = cmb.tmu0_fac = GR_COMBINE_FACTOR_NONE; - cmb.tmu1_a_func = cmb.tmu0_a_func = GR_COMBINE_FUNCTION_LOCAL; - cmb.tmu1_a_fac = cmb.tmu0_a_fac = GR_COMBINE_FACTOR_NONE; - cmb.tmu1_invert = cmb.tmu0_invert = FXFALSE; - cmb.tmu1_a_invert = cmb.tmu0_a_invert = FXFALSE; - } - - rdp.texrecting = 1; - - DWORD prev_tile = rdp.cur_tile; - rdp.cur_tile = tile; - rdp.update |= UPDATE_COMBINE; - update (); - - rdp.texrecting = 0; - rdp.allow_combine = 1; - - if (!rdp.cur_cache[0]) - { - rdp.cur_tile = prev_tile; - rdp.tri_n += 2; - return; - } - // **** - // ** Texrect offset by Gugaman ** - float off_x = (float)((short)((rdp.cmd2 & 0xFFFF0000) >> 16)) / 32.0f; - if ((int(off_x) == 512) && (rdp.timg.width < 512)) off_x = 0.0f; - float off_y = (float)((short)(rdp.cmd2 & 0x0000FFFF)) / 32.0f; - float dsdx = (float)((short)((rdp.cmd3 & 0xFFFF0000) >> 16)) / 1024.0f; - float dtdy = (float)((short)(rdp.cmd3 & 0x0000FFFF)) / 1024.0f; - - if (rdp.cycle_mode == 2) dsdx /= 4.0f; - - float s_ul_x = ul_x * rdp.scale_x + rdp.offset_x; - float s_lr_x = lr_x * rdp.scale_x + rdp.offset_x; - float s_ul_y = ul_y * rdp.scale_y + rdp.offset_y; - float s_lr_y = lr_y * rdp.scale_y + rdp.offset_y; - - FRDP("texrect (%d, %d, %d, %d), tile: %d, #%d, #%d\n", ul_x, ul_y, lr_x, lr_y, tile, rdp.tri_n, rdp.tri_n+1); - FRDP ("(%f, %f) -> (%f, %f), s: (%d, %d) -> (%d, %d)\n", s_ul_x, s_ul_y, s_lr_x, s_lr_y, rdp.scissor.ul_x, rdp.scissor.ul_y, rdp.scissor.lr_x, rdp.scissor.lr_y); - FRDP("\toff_x: %f, off_y: %f, dsdx: %f, dtdy: %f\n", off_x, off_y, dsdx, dtdy); - - float off_size_x; - float off_size_y; - - if ( ((rdp.cmd0>>24)&0xFF) == 0xE5 ) //texrectflip - { - off_size_x = (float)((lr_y - ul_y - 1) * dsdx); - off_size_y = (float)((lr_x - ul_x - 1) * dtdy); - } - else - { - off_size_x = (float)((lr_x - ul_x - 1) * dsdx); - off_size_y = (float)((lr_y - ul_y - 1) * dtdy); - } - - float lr_u0, lr_v0, ul_u0, ul_v0, lr_u1, lr_v1, ul_u1, ul_v1; - - if (rdp.cur_cache[0] && (rdp.tex & 1)) - { - float sx=1, sy=1; - if (rdp.tiles[rdp.cur_tile].shift_s) - { - if (rdp.tiles[rdp.cur_tile].shift_s > 10) - sx = (float)(1 << (16 - rdp.tiles[rdp.cur_tile].shift_s)); - else - sx = (float)1.0f/(1 << rdp.tiles[rdp.cur_tile].shift_s); - } - if (rdp.tiles[rdp.cur_tile].shift_t) - { - if (rdp.tiles[rdp.cur_tile].shift_t > 10) - sy = (float)(1 << (16 - rdp.tiles[rdp.cur_tile].shift_t)); - else - sy = (float)1.0f/(1 << rdp.tiles[rdp.cur_tile].shift_t); - } - if (rdp.hires_tex && rdp.hires_tex->tile == 0) - { - off_x += rdp.hires_tex->u_shift;// + rdp.tiles[0].ul_s; //commented for Paper Mario motion blur - off_y += rdp.hires_tex->v_shift;// + rdp.tiles[0].ul_t; - FRDP("hires_tex ul_s: %d, ul_t: %d, off_x: %f, off_y: %f\n", rdp.tiles[0].ul_s, rdp.tiles[0].ul_t, off_x, off_y); - ul_u0 = off_x * sx; - ul_v0 = off_y * sy; - - lr_u0 = ul_u0 + off_size_x * sx; - lr_v0 = ul_v0 + off_size_y * sy; - - ul_u0 *= rdp.hires_tex->u_scale; - ul_v0 *= rdp.hires_tex->v_scale; - lr_u0 *= rdp.hires_tex->u_scale; - lr_v0 *= rdp.hires_tex->v_scale; - FRDP("hires_tex ul_u0: %f, ul_v0: %f, lr_u0: %f, lr_v0: %f\n", ul_u0, ul_v0, lr_u0, lr_v0); - } - else - { - ul_u0 = off_x * sx; - ul_v0 = off_y * sy; - - ul_u0 -= rdp.tiles[rdp.cur_tile].f_ul_s; - ul_v0 -= rdp.tiles[rdp.cur_tile].f_ul_t; - - lr_u0 = ul_u0 + off_size_x * sx; - lr_v0 = ul_v0 + off_size_y * sy; - - ul_u0 = rdp.cur_cache[0]->c_off + rdp.cur_cache[0]->c_scl_x * ul_u0; - lr_u0 = rdp.cur_cache[0]->c_off + rdp.cur_cache[0]->c_scl_x * lr_u0; - ul_v0 = rdp.cur_cache[0]->c_off + rdp.cur_cache[0]->c_scl_y * ul_v0; - lr_v0 = rdp.cur_cache[0]->c_off + rdp.cur_cache[0]->c_scl_y * lr_v0; - } - } - else - { - ul_u0 = ul_v0 = lr_u0 = lr_v0 = 0; - } - if (rdp.cur_cache[1] && (rdp.tex & 2)) - { - float sx=1, sy=1; - - if (rdp.tiles[rdp.cur_tile+1].shift_s) - { - if (rdp.tiles[rdp.cur_tile+1].shift_s > 10) - sx = (float)(1 << (16 - rdp.tiles[rdp.cur_tile+1].shift_s)); - else - sx = (float)1.0f/(1 << rdp.tiles[rdp.cur_tile+1].shift_s); - } - if (rdp.tiles[rdp.cur_tile+1].shift_t) - { - if (rdp.tiles[rdp.cur_tile+1].shift_t > 10) - sy = 1;//(float)(1 << (16 - rdp.tiles[rdp.cur_tile+1].shift_t)); - else - sy = (float)1.0f/(1 << rdp.tiles[rdp.cur_tile+1].shift_t); - } - - if (rdp.hires_tex && rdp.hires_tex->tile == 1) - { - off_x += rdp.hires_tex->u_shift;// + rdp.tiles[0].ul_s; //commented for Paper Mario motion blur - off_y += rdp.hires_tex->v_shift;// + rdp.tiles[0].ul_t; - FRDP("hires_tex ul_s: %d, ul_t: %d, off_x: %f, off_y: %f\n", rdp.tiles[0].ul_s, rdp.tiles[0].ul_t, off_x, off_y); - ul_u1 = off_x * sx; - ul_v1 = off_y * sy; - - lr_u1 = ul_u1 + off_size_x * sx; - lr_v1 = ul_v1 + off_size_y * sy; - - ul_u1 *= rdp.hires_tex->u_scale; - ul_v1 *= rdp.hires_tex->v_scale; - lr_u1 *= rdp.hires_tex->u_scale; - lr_v1 *= rdp.hires_tex->v_scale; - FRDP("hires_tex ul_u1: %f, ul_v1: %f, lr_u1: %f, lr_v1: %f\n", ul_u0, ul_v0, lr_u0, lr_v0); - - } - else - { - ul_u1 = off_x * sx; - ul_v1 = off_y * sy; - - ul_u1 -= rdp.tiles[rdp.cur_tile+1].f_ul_s; - ul_v1 -= rdp.tiles[rdp.cur_tile+1].f_ul_t; - - lr_u1 = ul_u1 + off_size_x * sx; - lr_v1 = ul_v1 + off_size_y * sy; - - ul_u1 = rdp.cur_cache[1]->c_off + rdp.cur_cache[1]->c_scl_x * ul_u1; - lr_u1 = rdp.cur_cache[1]->c_off + rdp.cur_cache[1]->c_scl_x * lr_u1; - ul_v1 = rdp.cur_cache[1]->c_off + rdp.cur_cache[1]->c_scl_y * ul_v1; - lr_v1 = rdp.cur_cache[1]->c_off + rdp.cur_cache[1]->c_scl_y * lr_v1; - } - } - else - { - ul_u1 = ul_v1 = lr_u1 = lr_v1 = 0; - } - rdp.cur_tile = prev_tile; - - // **** - - FRDP (" scissor: (%d, %d) -> (%d, %d)\n", rdp.scissor.ul_x, rdp.scissor.ul_y, rdp.scissor.lr_x, rdp.scissor.lr_y); - - CCLIP2 (s_ul_x, s_lr_x, ul_u0, lr_u0, ul_u1, lr_u1, (float)rdp.scissor.ul_x, (float)rdp.scissor.lr_x); - CCLIP2 (s_ul_y, s_lr_y, ul_v0, lr_v0, ul_v1, lr_v1, (float)rdp.scissor.ul_y, (float)rdp.scissor.lr_y); -// CCLIP2 (s_lr_y, s_ul_y, lr_v0, ul_v0, lr_v1, ul_v1, (float)rdp.scissor.ul_y, (float)rdp.scissor.lr_y); - - FRDP (" draw at: (%f, %f) -> (%f, %f)\n", s_ul_x, s_ul_y, s_lr_x, s_lr_y); - - // DO NOT SET CLAMP MODE HERE - - float Z = 1.0f; - if (rdp.zsrc == 1 && (rdp.othermode_l & 0x00000030)) // othermode check makes sure it - // USES the z-buffer. Otherwise it returns bad (unset) values for lot and telescope - //in zelda:mm. - { - FRDP ("prim_depth = %d\n", rdp.prim_depth); - Z = rdp.prim_depth; - if (settings.increase_primdepth) - Z += 8.0f; - Z = ScaleZ(Z); - - grDepthBufferFunction (GR_CMP_LEQUAL); - rdp.update |= UPDATE_ZBUF_ENABLED; - } - else - { - RDP ("no prim_depth used, using 1.0\n"); - } - - VERTEX vstd[4] = { - { s_ul_x, s_ul_y, Z, 1.0f, ul_u0, ul_v0, ul_u1, ul_v1, { 0, 0, 0, 0}, 255 }, - { s_lr_x, s_ul_y, Z, 1.0f, lr_u0, ul_v0, lr_u1, ul_v1, { 0, 0, 0, 0}, 255 }, - { s_ul_x, s_lr_y, Z, 1.0f, ul_u0, lr_v0, ul_u1, lr_v1, { 0, 0, 0, 0}, 255 }, - { s_lr_x, s_lr_y, Z, 1.0f, lr_u0, lr_v0, lr_u1, lr_v1, { 0, 0, 0, 0}, 255 } }; - - if ( ((rdp.cmd0>>24)&0xFF) == 0xE5 ) //texrectflip - { - vstd[1].u0 = ul_u0; - vstd[1].v0 = lr_v0; - vstd[1].u1 = ul_u1; - vstd[1].v1 = lr_v1; - - vstd[2].u0 = lr_u0; - vstd[2].v0 = ul_v0; - vstd[2].u1 = lr_u1; - vstd[2].v1 = ul_v1; - } - - VERTEX *vptr = vstd; - int n_vertices = 4; - - VERTEX *vnew = 0; -// for (int j =0; j < 4; j++) -// FRDP("v[%d] u0: %f, v0: %f, u1: %f, v1: %f\n", j, vstd[j].u0, vstd[j].v0, vstd[j].u1, vstd[j].v1); - - - if (!rdp.hires_tex && rdp.cur_cache[0]->splits != 1) - { - // ** LARGE TEXTURE HANDLING ** - // *VERY* simple algebra for texrects - float min_u, min_x, max_u, max_x; - if (vstd[0].u0 < vstd[1].u0) - { - min_u = vstd[0].u0; - min_x = vstd[0].x; - max_u = vstd[1].u0; - max_x = vstd[1].x; - } - else - { - min_u = vstd[1].u0; - min_x = vstd[1].x; - max_u = vstd[0].u0; - max_x = vstd[0].x; - } - - int start_u_256, end_u_256; - - if (settings.ucode == 7) - { - start_u_256 = 0; - end_u_256 = (lr_x - ul_x - 1)>>8; - } - else - { - start_u_256 = (int)min_u >> 8; - end_u_256 = (int)max_u >> 8; - } - //FRDP(" min_u: %f, max_u: %f start: %d, end: %d\n", min_u, max_u, start_u_256, end_u_256); - - int splitheight = rdp.cur_cache[0]->splitheight; - - int num_verts_line = 2 + ((end_u_256-start_u_256)<<1); - vnew = new VERTEX [num_verts_line << 1]; - - n_vertices = num_verts_line << 1; - vptr = vnew; - - vnew[0] = vstd[0]; - vnew[0].u0 -= 256.0f * start_u_256; - vnew[0].v0 += splitheight * start_u_256; - vnew[0].u1 -= 256.0f * start_u_256; - vnew[0].v1 += splitheight * start_u_256; - vnew[1] = vstd[2]; - vnew[1].u0 -= 256.0f * start_u_256; - vnew[1].v0 += splitheight * start_u_256; - vnew[1].u1 -= 256.0f * start_u_256; - vnew[1].v1 += splitheight * start_u_256; - vnew[n_vertices-2] = vstd[1]; - vnew[n_vertices-2].u0 -= 256.0f * end_u_256; - vnew[n_vertices-2].v0 += splitheight * end_u_256; - vnew[n_vertices-2].u1 -= 256.0f * end_u_256; - vnew[n_vertices-2].v1 += splitheight * end_u_256; - vnew[n_vertices-1] = vstd[3]; - vnew[n_vertices-1].u0 -= 256.0f * end_u_256; - vnew[n_vertices-1].v0 += splitheight * end_u_256; - vnew[n_vertices-1].u1 -= 256.0f * end_u_256; - vnew[n_vertices-1].v1 += splitheight * end_u_256; - - // find the equation of the line of u,x - float m = (max_x - min_x) / (max_u - min_u); // m = delta x / delta u - float b = min_x - m * min_u; // b = y - m * x - - for (i=start_u_256; iu0 *= z->q; - z->v0 *= z->q; - z->u1 *= z->q; - z->v1 *= z->q; - - apply_shade_mods (z); - } - - if (fullscreen) - { - grFogMode (GR_FOG_DISABLE); - - grClipWindow (0, 0, settings.res_x, settings.res_y); - - grCullMode (GR_CULL_DISABLE); - - if (rdp.cycle_mode == 2) - { - grColorCombine (GR_COMBINE_FUNCTION_SCALE_OTHER, - GR_COMBINE_FACTOR_ONE, - GR_COMBINE_LOCAL_NONE, - GR_COMBINE_OTHER_TEXTURE, - FXFALSE); - grAlphaCombine (GR_COMBINE_FUNCTION_SCALE_OTHER, - GR_COMBINE_FACTOR_ONE, - GR_COMBINE_LOCAL_NONE, - GR_COMBINE_OTHER_TEXTURE, - FXFALSE); - grAlphaBlendFunction (GR_BLEND_ONE, - GR_BLEND_ZERO, - GR_BLEND_ZERO, - GR_BLEND_ZERO); - if (rdp.othermode_l & 1) - { - grAlphaTestFunction (GR_CMP_GEQUAL); - grAlphaTestReferenceValue (0x80); - } - else - grAlphaTestFunction (GR_CMP_ALWAYS); - - rdp.update |= UPDATE_ALPHA_COMPARE | UPDATE_COMBINE; - } - - ConvertCoordsConvert (vptr, n_vertices); - - if (settings.wireframe) - { - SetWireframeCol (); - grDrawLine (&vstd[0], &vstd[2]); - grDrawLine (&vstd[2], &vstd[1]); - grDrawLine (&vstd[1], &vstd[0]); - grDrawLine (&vstd[2], &vstd[3]); - grDrawLine (&vstd[3], &vstd[1]); - } - else - { - grDrawVertexArrayContiguous (GR_TRIANGLE_STRIP, n_vertices, vptr, sizeof(VERTEX)); - } - - if (debug.capture) - { - VERTEX vl[3]; - vl[0] = vstd[0]; - vl[1] = vstd[2]; - vl[2] = vstd[1]; - add_tri (vl, 3, TRI_TEXRECT); - rdp.tri_n ++; - vl[0] = vstd[2]; - vl[1] = vstd[3]; - vl[2] = vstd[1]; - add_tri (vl, 3, TRI_TEXRECT); - rdp.tri_n ++; - } - else - rdp.tri_n += 2; - - if (settings.fog && (rdp.flags & FOG_ENABLED)) - { - grFogMode (GR_FOG_WITH_TABLE_ON_FOGCOORD_EXT); - } - rdp.update |= UPDATE_CULL_MODE | UPDATE_VIEWPORT; - } - else - { - rdp.tri_n += 2; - } - - delete[] vnew; -} - -static void rdp_loadsync() -{ - RDP("loadsync - ignored\n"); -} - -static void rdp_pipesync() -{ - RDP("pipesync - ignored\n"); -} - -static void rdp_tilesync() -{ - RDP("tilesync - ignored\n"); -} - -static void rdp_fullsync() -{ - // Set an interrupt to allow the game to continue - *gfx.MI_INTR_REG |= 0x20; - gfx.CheckInterrupts(); - RDP("fullsync\n"); -} - -static void rdp_setkeygb() -{ - RDP_E("setkeygb - IGNORED\n"); - RDP("setkeygb - IGNORED\n"); -} - -static void rdp_setkeyr() -{ - RDP_E("setkeyr - IGNORED\n"); - RDP("setkeyr - IGNORED\n"); -} - -static void rdp_setconvert() -{ - /* - rdp.YUV_C0 = 1.1647f ; - rdp.YUV_C1 = 0.79931f ; - rdp.YUV_C2 = -0.1964f ; - rdp.YUV_C3 = -0.40651f; - rdp.YUV_C4 = 1.014f ; - */ - rdp.K5 = (BYTE)(rdp.cmd1&0x1FF); - RDP_E("setconvert - IGNORED\n"); - RDP("setconvert - IGNORED\n"); -} - -// -// setscissor - sets the screen clipping rectangle -// - -static void rdp_setscissor() -{ - // clipper resolution is 320x240, scale based on computer resolution - rdp.scissor_o.ul_x = /*min(*/(DWORD)(((rdp.cmd0 & 0x00FFF000) >> 14))/*, 320)*/; - rdp.scissor_o.ul_y = /*min(*/(DWORD)(((rdp.cmd0 & 0x00000FFF) >> 2))/*, 240)*/; - rdp.scissor_o.lr_x = /*min(*/(DWORD)(((rdp.cmd1 & 0x00FFF000) >> 14))/*, 320)*/; - rdp.scissor_o.lr_y = /*min(*/(DWORD)(((rdp.cmd1 & 0x00000FFF) >> 2))/*, 240)*/; - - rdp.ci_upper_bound = rdp.scissor_o.ul_y; - rdp.ci_lower_bound = rdp.scissor_o.lr_y; - - FRDP("setscissor: (%d,%d) -> (%d,%d)\n", rdp.scissor_o.ul_x, rdp.scissor_o.ul_y, - rdp.scissor_o.lr_x, rdp.scissor_o.lr_y); - - rdp.update |= UPDATE_SCISSOR; -} - -static void rdp_setprimdepth() -{ - rdp.prim_depth = (WORD)((rdp.cmd1 >> 16) & 0x7FFF); - - FRDP("setprimdepth: %d\n", rdp.prim_depth); -} - -static void rdp_setothermode() -{ -#define F3DEX2_SETOTHERMODE(cmd,sft,len,data) { \ - rdp.cmd0 = (cmd<<24) | ((32-(sft)-(len))<<8) | (((len)-1)); \ - rdp.cmd1 = data; \ - gfx_instruction[settings.ucode][cmd] (); \ -} -#define SETOTHERMODE(cmd,sft,len,data) { \ - rdp.cmd0 = (cmd<<24) | ((sft)<<8) | (len); \ - rdp.cmd1 = data; \ - gfx_instruction[settings.ucode][cmd] (); \ -} - - RDP("rdp_setothermode\n"); - - if ((settings.ucode == 2) || (settings.ucode == 8)) - { - int cmd0 = rdp.cmd0; - F3DEX2_SETOTHERMODE(0xE2, 0, 32, rdp.cmd1); // SETOTHERMODE_L - F3DEX2_SETOTHERMODE(0xE3, 0, 32, cmd0 & 0x00FFFFFF); // SETOTHERMODE_H - } - else - { - int cmd0 = rdp.cmd0; - SETOTHERMODE(0xB9, 0, 32, rdp.cmd1); // SETOTHERMODE_L - SETOTHERMODE(0xBA, 0, 32, cmd0 & 0x00FFFFFF); // SETOTHERMODE_H - } -} - -void load_palette (DWORD addr, WORD start, WORD count) -{ - RDP ("Loading palette... "); - WORD *dpal = rdp.pal_8 + start; - WORD end = start+count; - // WORD *spal = (WORD*)(gfx.RDRAM + (addr & BMASK)); - - for (WORD i=start; i>= 4; - end = start + (count >> 4); - for (WORD p = start; p < end; p++) - { - rdp.pal_8_crc[p] = CRC_Calculate( 0xFFFFFFFF, &rdp.pal_8[(p << 4)], 32 ); - } - rdp.pal_256_crc = CRC_Calculate( 0xFFFFFFFF, rdp.pal_8_crc, 64 ); - RDP ("Done.\n"); -} - -static void rdp_loadtlut() -{ - DWORD tile = (rdp.cmd1 >> 24) & 0x07; - WORD start = rdp.tiles[tile].t_mem - 256; // starting location in the palettes - // WORD start = ((WORD)(rdp.cmd1 >> 2) & 0x3FF) + 1; - WORD count = ((WORD)(rdp.cmd1 >> 14) & 0x3FF) + 1; // number to copy - - if (rdp.timg.addr + (count<<1) > BMASK) - count = (WORD)((BMASK - rdp.timg.addr) >> 1); - - if (start+count > 256) count = 256-start; - - FRDP("loadtlut: tile: %d, start: %d, count: %d, from: %08lx\n", tile, start, count, - rdp.timg.addr); - - load_palette (rdp.timg.addr, start, count); - - rdp.timg.addr += count << 1; -} - -BOOL tile_set = 0; -static void rdp_settilesize() -{ - DWORD tile = (rdp.cmd1 >> 24) & 0x07; - rdp.last_tile_size = tile; - - rdp.tiles[tile].f_ul_s = (float)((rdp.cmd0 >> 12) & 0xFFF) / 4.0f; - rdp.tiles[tile].f_ul_t = (float)(rdp.cmd0 & 0xFFF) / 4.0f; - - int ul_s = (((WORD)(rdp.cmd0 >> 14)) & 0x03ff); - int ul_t = (((WORD)(rdp.cmd0 >> 2 )) & 0x03ff); - int lr_s = (((WORD)(rdp.cmd1 >> 14)) & 0x03ff); - int lr_t = (((WORD)(rdp.cmd1 >> 2 )) & 0x03ff); - - if (lr_s == 0 && ul_s == 0) //pokemon puzzle league set such tile size - wrong_tile = tile; - else if (wrong_tile == (int)tile) - wrong_tile = -1; - - if (settings.use_sts1_only) - { - // ** USE FIRST SETTILESIZE ONLY ** - // This option helps certain textures while using the 'Alternate texture size method', - // but may break others. (should help more than break) - - if (tile_set) - { - // coords in 10.2 format - rdp.tiles[tile].ul_s = ul_s; - rdp.tiles[tile].ul_t = ul_t; - rdp.tiles[tile].lr_s = lr_s; - rdp.tiles[tile].lr_t = lr_t; - tile_set = 0; - } - } - else - { - // coords in 10.2 format - rdp.tiles[tile].ul_s = ul_s; - rdp.tiles[tile].ul_t = ul_t; - rdp.tiles[tile].lr_s = lr_s; - rdp.tiles[tile].lr_t = lr_t; - } - - // handle wrapping - if (rdp.tiles[tile].lr_s < rdp.tiles[tile].ul_s) rdp.tiles[tile].lr_s += 0x400; - if (rdp.tiles[tile].lr_t < rdp.tiles[tile].ul_t) rdp.tiles[tile].lr_t += 0x400; - - rdp.update |= UPDATE_TEXTURE; - - rdp.first = 1; - - if (tile == 0 && rdp.hires_tex) - //if ((rdp.tiles[tile].size != 2) || ((rdp.timg.width == 1) && (rdp.hires_tex->width != (DWORD)(lr_s+1)))) - if (((rdp.tiles[tile].format == 0) && (rdp.tiles[tile].size != 2)) || ((rdp.timg.width == 1) && (rdp.hires_tex->width != (DWORD)(lr_s+1)))) - rdp.hires_tex = 0; - if (rdp.hires_tex) - { - if (rdp.tiles[tile].format == 0 && rdp.hires_tex->format == 0) - { - if (tile == 1 && (DWORD)rdp.hires_tex->tmu != tile) - SwapTextureBuffer(); - rdp.hires_tex->tile = tile; - rdp.hires_tex->info.format = GR_TEXFMT_RGB_565; - FRDP ("hires_tex: tile: %d\n", tile); - } - else if (tile == 0) - { - rdp.hires_tex->info.format = GR_TEXFMT_ALPHA_INTENSITY_88; - } - } - FRDP ("settilesize: tile: %d, ul_s: %d, ul_t: %d, lr_s: %d, lr_t: %d\n", - tile, ul_s, ul_t, lr_s, lr_t); -} - -static void CopyswapBlock(int *pDst, unsigned int cnt, unsigned int SrcOffs) -{ - // copy and byteswap a block of 8-byte dwords - int rem = SrcOffs & 3; - if (rem == 0) - { - int *pSrc = (int *) ((uintptr_t) gfx.RDRAM + SrcOffs); - for (unsigned int x = 0; x < cnt; x++) - { - int s1 = bswap32(*pSrc++); - int s2 = bswap32(*pSrc++); - *pDst++ = s1; - *pDst++ = s2; - } - } - else - { - // set source pointer to 4-byte aligned RDRAM location before the start - int *pSrc = (int *) ((uintptr_t) gfx.RDRAM + (SrcOffs & 0xfffffffc)); - // do the first partial 32-bit word - int s0 = bswap32(*pSrc++); - for (int x = 0; x < rem; x++) - s0 >>= 8; - for (int x = 4; x > rem; x--) - { - *((char *) pDst) = s0 & 0xff; - pDst = (int *) ((char *) pDst + 1); - s0 >>= 8; - } - // do one full 32-bit word - s0 = bswap32(*pSrc++); - *pDst++ = s0; - // do 'cnt-1' 64-bit dwords - for (unsigned int x = 0; x < cnt-1; x++) - { - int s1 = bswap32(*pSrc++); - int s2 = bswap32(*pSrc++); - *pDst++ = s1; - *pDst++ = s2; - } - // do last partial 32-bit word - s0 = bswap32(*pSrc++); - for (; rem > 0; rem--) - { - *((char *) pDst) = s0 & 0xff; - pDst = (int *) ((char *) pDst + 1); - s0 >>= 8; - } - } -} - -static void WordswapBlock(int *pDst, unsigned int cnt, unsigned int TileSize) -{ - // Since it's not loading 32-bit textures as the N64 would, 32-bit textures need to - // be swapped by 64-bits, not 32. - if (TileSize == 3) - { - // swapblock64 dst, cnt - for (unsigned int x = 0; x < cnt / 2; x++, pDst += 4) - { - long long s1 = ((long long *) pDst)[0]; - long long s2 = ((long long *) pDst)[1]; - ((long long *) pDst)[0] = s2; - ((long long *) pDst)[1] = s1; - } - } - else - { - // swapblock32 dst, cnt - for (unsigned int x = 0; x < cnt; x++, pDst += 2) - { - int s1 = pDst[0]; - int s2 = pDst[1]; - pDst[0] = s2; - pDst[1] = s1; - } - } -} - -static void rdp_loadblock() -{ - if (rdp.skip_drawing) - { - RDP("loadblock skipped\n"); - return; - } - DWORD tile = (DWORD)((rdp.cmd1 >> 24) & 0x07); - DWORD dxt = (DWORD)(rdp.cmd1 & 0x0FFF); - - rdp.addr[rdp.tiles[tile].t_mem] = rdp.timg.addr; - - // ** DXT is used for swapping every other line - /* double fdxt = (double)0x8000000F/(double)((DWORD)(2047/(dxt-1))); // F for error - DWORD _dxt = (DWORD)fdxt;*/ - - // 0x00000800 -> 0x80000000 (so we can check the sign bit instead of the 11th bit) - DWORD _dxt = dxt << 20; - - DWORD addr = segoffset(rdp.timg.addr) & BMASK; - - // lr_s specifies number of 64-bit words to copy - // 10.2 format - WORD ul_s = (WORD)(rdp.cmd0 >> 14) & 0x3FF; - WORD ul_t = (WORD)(rdp.cmd0 >> 2) & 0x3FF; - WORD lr_s = (WORD)(rdp.cmd1 >> 14) & 0x3FF; - - rdp.tiles[tile].ul_s = ul_s; - rdp.tiles[tile].ul_t = ul_t; - rdp.tiles[tile].lr_s = lr_s; - - rdp.timg.set_by = 0; // load block - - // do a quick boundary check before copying to eliminate the possibility for exception - if (ul_s >= 512) { - lr_s = 1; // 1 so that it doesn't die on memcpy - ul_s = 511; - } - if (ul_s+lr_s > 512) - lr_s = 512-ul_s; - - if (addr+(lr_s<<3) > BMASK+1) - lr_s = (WORD)((BMASK-addr)>>3); - - DWORD offs = rdp.timg.addr; - DWORD cnt = lr_s+1; - if (rdp.tiles[tile].size == 3) - cnt <<= 1; - //FIXME: unused? DWORD start_line = 0; - - // if (lr_s > 0) - rdp.timg.addr += cnt << 3; - - int * pDst = (int *) ((uintptr_t)rdp.tmem+(rdp.tiles[tile].t_mem<<3)); - - // Load the block from RDRAM and byteswap it as it loads - CopyswapBlock(pDst, cnt, offs); - - // now do 32-bit or 64-bit word swapping on every other row of data - int dxt_accum = 0; - while (cnt > 0) - { - // skip over unswapped blocks - do - { - pDst += 2; - if (--cnt == 0) - break; - dxt_accum += _dxt; - } while (!(dxt_accum & 0x80000000)); - // count number of blocks to swap - if (cnt == 0) break; - int swapcnt = 0; - do - { - swapcnt++; - if (--cnt == 0) - break; - dxt_accum += _dxt; - } while (dxt_accum & 0x80000000); - // do 32-bit or 64-bit swap operation on this block - WordswapBlock(pDst, swapcnt, rdp.tiles[tile].size); - pDst += swapcnt * 2; - } - - rdp.update |= UPDATE_TEXTURE; - - FRDP ("loadblock: tile: %d, ul_s: %d, ul_t: %d, lr_s: %d, dxt: %08lx -> %08lx\n", - tile, ul_s, ul_t, lr_s, - dxt, _dxt); -} - -static void rdp_loadtile() -{ - if (rdp.skip_drawing) - return; - rdp.timg.set_by = 1; // load tile - - DWORD tile = (DWORD)((rdp.cmd1 >> 24) & 0x07); - if (rdp.tiles[tile].format == 1) - { - rdp.yuv_image = TRUE; - if (rdp.timg.addr < rdp.yuv_im_begin) rdp.yuv_im_begin = rdp.timg.addr; - return; - } - - rdp.addr[rdp.tiles[tile].t_mem] = rdp.timg.addr; - - WORD ul_s = (WORD)((rdp.cmd0 >> 14) & 0x03FF); - WORD ul_t = (WORD)((rdp.cmd0 >> 2 ) & 0x03FF); - WORD lr_s = (WORD)((rdp.cmd1 >> 14) & 0x03FF); - WORD lr_t = (WORD)((rdp.cmd1 >> 2 ) & 0x03FF); - - if (lr_s < ul_s || lr_t < ul_t) return; - - if (wrong_tile >= 0) //there was a tile with zero length - { - rdp.tiles[wrong_tile].lr_s = lr_s; - - if (rdp.tiles[tile].size > rdp.tiles[wrong_tile].size) - rdp.tiles[wrong_tile].lr_s <<= (rdp.tiles[tile].size - rdp.tiles[wrong_tile].size); - else if (rdp.tiles[tile].size < rdp.tiles[wrong_tile].size) - rdp.tiles[wrong_tile].lr_s >>= (rdp.tiles[wrong_tile].size - rdp.tiles[tile].size); - rdp.tiles[wrong_tile].lr_t = lr_t; - // wrong_tile = -1; - } - - if (rdp.hires_tex)// && (rdp.tiles[tile].format == 0)) - { - FRDP("loadtile: hires_tex ul_s: %d, ul_t:%d\n", ul_s, ul_t); - rdp.hires_tex->tile_uls = ul_s; - rdp.hires_tex->tile_ult = ul_t; - } - - if (settings.tonic && tile == 7) - { - rdp.tiles[0].ul_s = ul_s; - rdp.tiles[0].ul_t = ul_t; - rdp.tiles[0].lr_s = lr_s; - rdp.tiles[0].lr_t = lr_t; - } - - DWORD height = lr_t - ul_t + 1; // get height - DWORD width = lr_s - ul_s + 1; - - DWORD wid_64 = rdp.tiles[tile].line; - - // CHEAT: it's very unlikely that it loads more than 1 32-bit texture in one command, - // so i don't bother to write in two different places at once. Just load once with - // twice as much data. - if (rdp.tiles[tile].size == 3) - wid_64 <<= 1; - - int line_n = rdp.timg.width; - if (rdp.tiles[tile].size == 0) - line_n >>= 1; - else - line_n <<= (rdp.tiles[tile].size-1); - - int offs = ul_t * line_n; - offs += ul_s << rdp.tiles[tile].size >> 1; - offs += rdp.timg.addr; - if ((unsigned int) offs >= BMASK) - return; - - // check if points to bad location - DWORD size = width * height; - if (rdp.tiles[tile].size == 0) - size >>= 1; - else - size <<= (rdp.tiles[tile].size-1); - - if (offs + line_n*height > BMASK) - height = (BMASK - offs) / line_n; - - int * pDst = (int *) ((uintptr_t)rdp.tmem+(rdp.tiles[tile].t_mem<<3)); - int * pEnd = (int *) ((uintptr_t)rdp.tmem+4096 - (wid_64<<3)); - - for (unsigned int y = 0; y < height; y++) - { - if (pDst > pEnd) break; - CopyswapBlock(pDst, wid_64, offs); - if (y & 1) - { - WordswapBlock(pDst, wid_64, rdp.tiles[tile].size); - } - pDst += wid_64 * 2; - offs += line_n; - } - - FRDP("loadtile: tile: %d, ul_s: %d, ul_t: %d, lr_s: %d, lr_t: %d\n", tile, - ul_s, ul_t, lr_s, lr_t); -} - -static void rdp_settile() -{ - tile_set = 1; // used to check if we only load the first settilesize - - rdp.first = 0; - - //rdp.cur_tile_n = (DWORD)((rdp.cmd1 >> 24) & 0x07); - //rdp.cur_tile = &rdp.tiles[rdp.cur_tile_n]; - - rdp.last_tile = (DWORD)((rdp.cmd1 >> 24) & 0x07); - TILE *tile = &rdp.tiles[rdp.last_tile]; - - tile->format = (BYTE)((rdp.cmd0 >> 21) & 0x07); - tile->size = (BYTE)((rdp.cmd0 >> 19) & 0x03); - tile->line = (WORD)((rdp.cmd0 >> 9) & 0x01FF); - tile->t_mem = (WORD)(rdp.cmd0 & 0x1FF); - tile->palette = (BYTE)((rdp.cmd1 >> 20) & 0x0F); - tile->clamp_t = (BYTE)((rdp.cmd1 >> 19) & 0x01); - tile->mirror_t = (BYTE)((rdp.cmd1 >> 18) & 0x01); - tile->mask_t = (BYTE)((rdp.cmd1 >> 14) & 0x0F); - tile->shift_t = (BYTE)((rdp.cmd1 >> 10) & 0x0F); - tile->clamp_s = (BYTE)((rdp.cmd1 >> 9) & 0x01); - tile->mirror_s = (BYTE)((rdp.cmd1 >> 8) & 0x01); - tile->mask_s = (BYTE)((rdp.cmd1 >> 4) & 0x0F); - tile->shift_s = (BYTE)(rdp.cmd1 & 0x0F); - - rdp.update |= UPDATE_TEXTURE; - - FRDP ("settile: tile: %d, format: %s, size: %s, line: %d, " - "t_mem: %08lx, palette: %d, clamp_t/mirror_t: %s, mask_t: %d, " - "shift_t: %d, clamp_s/mirror_s: %s, mask_s: %d, shift_s: %d\n", - rdp.last_tile, str_format[tile->format], str_size[tile->size], tile->line, - tile->t_mem, tile->palette, str_cm[(tile->clamp_t<<1)|tile->mirror_t], tile->mask_t, - tile->shift_t, str_cm[(tile->clamp_s<<1)|tile->mirror_s], tile->mask_s, tile->shift_s); -} - -// -// fillrect - fills a rectangle -// - -static void rdp_fillrect() -{ - DWORD ul_x = ((rdp.cmd1 & 0x00FFF000) >> 14); - DWORD ul_y = (rdp.cmd1 & 0x00000FFF) >> 2; - DWORD lr_x = ((rdp.cmd0 & 0x00FFF000) >> 14) + 1; - DWORD lr_y = ((rdp.cmd0 & 0x00000FFF) >> 2) + 1; - if ((rdp.cimg == rdp.zimg) || (settings.fb_smart && rdp.frame_buffers[rdp.ci_count-1].status == ci_zimg)) - { - RDP ("Fillrect - cleared the depth buffer\n"); - if (fullscreen) - { - - grDepthMask (FXTRUE); - grColorMask (FXFALSE, FXFALSE); - grBufferClear (0, 0, 0xFFFF); - grColorMask (FXTRUE, FXTRUE); - rdp.update |= UPDATE_ZBUF_ENABLED; - if (settings.fb_depth_clear) - { - ul_x = min(max(ul_x, rdp.scissor_o.ul_x), rdp.scissor_o.lr_x); - lr_x = min(max(lr_x, rdp.scissor_o.ul_x), rdp.scissor_o.lr_x); - ul_y = min(max(ul_y, rdp.scissor_o.ul_y), rdp.scissor_o.lr_y); - lr_y = min(max(lr_y, rdp.scissor_o.ul_y), rdp.scissor_o.lr_y); - //FIXME:unused? DWORD zi_height = lr_y - ul_y - 1; - // rdp.zi_nb_pixels = rdp.zi_width * zi_height; - rdp.zi_lry = lr_y - 1; - rdp.zi_lrx = lr_x - 1; - // FRDP ("zi_width: %d, zi_height: %d\n", rdp.zi_width, zi_height); - DWORD fillrect_width_in_dwords = (lr_x-ul_x) >> 1; - DWORD zi_width_in_dwords = rdp.zi_width >> 1; - ul_x >>= 1; - DWORD * dst = (DWORD*)(gfx.RDRAM+rdp.cimg); - dst += ul_y * zi_width_in_dwords; - for (DWORD y = ul_y; y < lr_y; y++) - { - for (DWORD x = ul_x; x < fillrect_width_in_dwords; x++) - { - dst[x] = rdp.fill_color; - } - dst += zi_width_in_dwords; - } - } - } - return; - } - - if (rdp.skip_drawing) - { - RDP("Fillrect skipped\n"); - return; - } - - // Update scissor - update_scissor (); - - if ((ul_x > lr_x) || (ul_y > lr_y)) return; - if (settings.bomberman64 && (lr_x == rdp.ci_width) && (rdp.cimg == rdp.ocimg)) //bomberman64 hack - return; - - if (rdp.cur_image && (rdp.cur_image->format != 0) && (rdp.cycle_mode == 3) && (rdp.cur_image->width == lr_x)) - { - DWORD color = rdp.fill_color; - color = ((color&1)?0xFF:0) | - ((DWORD)((float)((color&0xF800) >> 11) / 31.0f * 255.0f) << 24) | - ((DWORD)((float)((color&0x07C0) >> 6) / 31.0f * 255.0f) << 16) | - ((DWORD)((float)((color&0x003E) >> 1) / 31.0f * 255.0f) << 8); - grDepthMask (FXFALSE); - grBufferClear (color, 0, 0xFFFF); - grDepthMask (FXTRUE); - rdp.update |= UPDATE_ZBUF_ENABLED; - return; - } - - if (settings.decrease_fillrect_edge && rdp.cycle_mode == 0) - { - lr_x--; lr_y--; - } - FRDP("fillrect (%d,%d) -> (%d,%d), cycle mode: %d, #%d, #%d\n", ul_x, ul_y, lr_x, lr_y, rdp.cycle_mode, - rdp.tri_n, rdp.tri_n+1); - - FRDP("scissor (%d,%d) -> (%d,%d)\n", rdp.scissor.ul_x, rdp.scissor.ul_y, rdp.scissor.lr_x, - rdp.scissor.lr_y); - - // KILL the floating point error with 0.01f - DWORD s_ul_x = (DWORD)min(max(ul_x * rdp.scale_x + rdp.offset_x + 0.01f, rdp.scissor.ul_x), rdp.scissor.lr_x); - DWORD s_lr_x = (DWORD)min(max(lr_x * rdp.scale_x + rdp.offset_x + 0.01f, rdp.scissor.ul_x), rdp.scissor.lr_x); - DWORD s_ul_y = (DWORD)min(max(ul_y * rdp.scale_y + rdp.offset_y + 0.01f, rdp.scissor.ul_y), rdp.scissor.lr_y); - DWORD s_lr_y = (DWORD)min(max(lr_y * rdp.scale_y + rdp.offset_y + 0.01f, rdp.scissor.ul_y), rdp.scissor.lr_y); - - if (s_lr_x < 0.0f) s_lr_x = 0; - if (s_lr_y < 0.0f) s_lr_y = 0; - if (s_ul_x > (float)settings.res_x) s_ul_x = settings.res_x; - if (s_ul_y > (float)settings.res_y) s_ul_y = settings.res_y; - - FRDP (" - %d, %d, %d, %d\n", s_ul_x, s_ul_y, s_lr_x, s_lr_y); - - if (fullscreen) - { - grFogMode (GR_FOG_DISABLE); - - grClipWindow (0, 0, settings.res_x, settings.res_y); - - float Z = 1.0f; - if (rdp.zsrc == 1 && (rdp.othermode_l & 0x00000030)) - { - Z = ScaleZ(rdp.prim_depth); - grDepthBufferFunction (GR_CMP_LEQUAL); - // grDepthMask (FXTRUE); - FRDP ("prim_depth = %d\n", rdp.prim_depth); - } - else - { - grDepthBufferFunction (GR_CMP_ALWAYS); - grDepthMask (FXFALSE); - RDP ("no prim_depth used, using 1.0\n"); - } - // Draw the rectangle - VERTEX v[4] = { - { (float)s_ul_x, (float)s_ul_y, Z, 1.0f, 0,0,0,0, { 0,0,0,0 }, 0,0, 0,0,0,0 }, - { (float)s_lr_x, (float)s_ul_y, Z, 1.0f, 0,0,0,0, { 0,0,0,0 }, 0,0, 0,0,0,0 }, - { (float)s_ul_x, (float)s_lr_y, Z, 1.0f, 0,0,0,0, { 0,0,0,0 }, 0,0, 0,0,0,0 }, - { (float)s_lr_x, (float)s_lr_y, Z, 1.0f, 0,0,0,0, { 0,0,0,0 }, 0,0, 0,0,0,0 } }; - - if (rdp.cycle_mode == 3) - { - DWORD color = (settings.fillcolor_fix) ? rdp.fill_color : (rdp.fill_color >> 16); - - if (settings.PM && rdp.frame_buffers[rdp.ci_count-1].status == ci_aux) - { - //background of auxilary frame buffers must have zero alpha. - //make it black, set 0 alpha to plack pixels on frame buffer read - color = 0; - } - else - { - color = ((color&1)?0xFF:0) | - ((DWORD)((float)((color&0xF800) >> 11) / 31.0f * 255.0f) << 24) | - ((DWORD)((float)((color&0x07C0) >> 6) / 31.0f * 255.0f) << 16) | - ((DWORD)((float)((color&0x003E) >> 1) / 31.0f * 255.0f) << 8); - } - grConstantColorValue (color); - - grColorCombine (GR_COMBINE_FUNCTION_LOCAL, - GR_COMBINE_FACTOR_NONE, - GR_COMBINE_LOCAL_CONSTANT, - GR_COMBINE_OTHER_NONE, - FXFALSE); - - grAlphaCombine (GR_COMBINE_FUNCTION_LOCAL, - GR_COMBINE_FACTOR_NONE, - GR_COMBINE_LOCAL_CONSTANT, - GR_COMBINE_OTHER_NONE, - FXFALSE); - - grAlphaBlendFunction (GR_BLEND_ONE, GR_BLEND_ZERO, GR_BLEND_ONE, GR_BLEND_ZERO); - - rdp.update |= UPDATE_COMBINE; - } - else - { - Combine (); - TexCache (); // (to update combiner) - DWORD cmb_mode_c = (rdp.cycle1 << 16) | (rdp.cycle2 & 0xFFFF); - DWORD cmb_mode_a = (rdp.cycle1 & 0x0FFF0000) | ((rdp.cycle2 >> 16) & 0x00000FFF); - if (cmb_mode_c == 0x9fff9fff || cmb_mode_a == 0x09ff09ff) //shade - { - AllowShadeMods (v, 4); - for (int k = 0; k < 4; k++) - apply_shade_mods (&v[k]); - } - } - - grAlphaTestFunction (GR_CMP_ALWAYS); - if (grStippleModeExt) - grStippleModeExt(GR_STIPPLE_DISABLE); - - grCullMode(GR_CULL_DISABLE); - - if (settings.wireframe) - { - SetWireframeCol (); - grDrawLine (&v[0], &v[2]); - grDrawLine (&v[2], &v[1]); - grDrawLine (&v[1], &v[0]); - grDrawLine (&v[2], &v[3]); - grDrawLine (&v[3], &v[1]); - //grDrawLine (&v[1], &v[2]); - } - else - { - grDrawTriangle (&v[0], &v[2], &v[1]); - grDrawTriangle (&v[2], &v[3], &v[1]); - } - - if (debug.capture) - { - VERTEX v1[3]; - v1[0] = v[0]; - v1[1] = v[2]; - v1[2] = v[1]; - add_tri (v1, 3, TRI_FILLRECT); - rdp.tri_n ++; - v1[0] = v[2]; - v1[1] = v[3]; - add_tri (v1, 3, TRI_FILLRECT); - rdp.tri_n ++; - } - else - rdp.tri_n += 2; - - if (settings.fog && (rdp.flags & FOG_ENABLED)) - { - grFogMode (GR_FOG_WITH_TABLE_ON_FOGCOORD_EXT); - } - - rdp.update |= UPDATE_CULL_MODE | UPDATE_ALPHA_COMPARE | UPDATE_ZBUF_ENABLED; - } - else - { - rdp.tri_n += 2; - } -} - -// -// setfillcolor - sets the filling color -// - -static void rdp_setfillcolor() -{ - rdp.fill_color = rdp.cmd1; - rdp.update |= UPDATE_ALPHA_COMPARE | UPDATE_COMBINE; - - FRDP("setfillcolor: %08lx\n", rdp.cmd1); -} - -static void rdp_setfogcolor() -{ - rdp.fog_color = rdp.cmd1; - rdp.update |= UPDATE_COMBINE | UPDATE_FOG_ENABLED; - - FRDP("setfogcolor - %08lx\n", rdp.cmd1); -} - -static void rdp_setblendcolor() -{ - rdp.blend_color = rdp.cmd1; - rdp.update |= UPDATE_COMBINE; - - FRDP("setblendcolor: %08lx\n", rdp.cmd1); -} - -static void rdp_setprimcolor() -{ - rdp.prim_color = rdp.cmd1; - rdp.prim_lodmin = (rdp.cmd0 >> 8) & 0xFF; - rdp.prim_lodfrac = max(rdp.cmd0 & 0xFF, rdp.prim_lodmin); - rdp.update |= UPDATE_COMBINE; - - FRDP("setprimcolor: %08lx, lodmin: %d, lodfrac: %d\n", rdp.cmd1, rdp.prim_lodmin, - rdp.prim_lodfrac); -} - -static void rdp_setenvcolor() -{ - rdp.env_color = rdp.cmd1; - rdp.update |= UPDATE_COMBINE; - - FRDP("setenvcolor: %08lx\n", rdp.cmd1); -} - -static void rdp_setcombine() -{ - rdp.c_a0 = (BYTE)((rdp.cmd0 >> 20) & 0xF); - rdp.c_b0 = (BYTE)((rdp.cmd1 >> 28) & 0xF); - rdp.c_c0 = (BYTE)((rdp.cmd0 >> 15) & 0x1F); - rdp.c_d0 = (BYTE)((rdp.cmd1 >> 15) & 0x7); - rdp.c_Aa0 = (BYTE)((rdp.cmd0 >> 12) & 0x7); - rdp.c_Ab0 = (BYTE)((rdp.cmd1 >> 12) & 0x7); - rdp.c_Ac0 = (BYTE)((rdp.cmd0 >> 9) & 0x7); - rdp.c_Ad0 = (BYTE)((rdp.cmd1 >> 9) & 0x7); - - rdp.c_a1 = (BYTE)((rdp.cmd0 >> 5) & 0xF); - rdp.c_b1 = (BYTE)((rdp.cmd1 >> 24) & 0xF); - rdp.c_c1 = (BYTE)((rdp.cmd0 >> 0) & 0x1F); - rdp.c_d1 = (BYTE)((rdp.cmd1 >> 6) & 0x7); - rdp.c_Aa1 = (BYTE)((rdp.cmd1 >> 21) & 0x7); - rdp.c_Ab1 = (BYTE)((rdp.cmd1 >> 3) & 0x7); - rdp.c_Ac1 = (BYTE)((rdp.cmd1 >> 18) & 0x7); - rdp.c_Ad1 = (BYTE)((rdp.cmd1 >> 0) & 0x7); - - rdp.cycle1 = (rdp.c_a0<<0) | (rdp.c_b0<<4) | (rdp.c_c0<<8) | (rdp.c_d0<<13)| - (rdp.c_Aa0<<16)| (rdp.c_Ab0<<19)| (rdp.c_Ac0<<22)| (rdp.c_Ad0<<25); - rdp.cycle2 = (rdp.c_a1<<0) | (rdp.c_b1<<4) | (rdp.c_c1<<8) | (rdp.c_d1<<13)| - (rdp.c_Aa1<<16)| (rdp.c_Ab1<<19)| (rdp.c_Ac1<<22)| (rdp.c_Ad1<<25); - - rdp.update |= UPDATE_COMBINE; - - FRDP("setcombine\na0=%s b0=%s c0=%s d0=%s\nAa0=%s Ab0=%s Ac0=%s Ad0=%s\na1=%s b1=%s c1=%s d1=%s\nAa1=%s Ab1=%s Ac1=%s Ad1=%s\n", - Mode0[rdp.c_a0], Mode1[rdp.c_b0], Mode2[rdp.c_c0], Mode3[rdp.c_d0], - Alpha0[rdp.c_Aa0], Alpha1[rdp.c_Ab0], Alpha2[rdp.c_Ac0], Alpha3[rdp.c_Ad0], - Mode0[rdp.c_a1], Mode1[rdp.c_b1], Mode2[rdp.c_c1], Mode3[rdp.c_d1], - Alpha0[rdp.c_Aa1], Alpha1[rdp.c_Ab1], Alpha2[rdp.c_Ac1], Alpha3[rdp.c_Ad1]); -} - -// -// settextureimage - sets the source for an image copy -// - -static void rdp_settextureimage() -{ - static const char *format[] = { "RGBA", "YUV", "CI", "IA", "I", "?", "?", "?" }; - static const char *size[] = { "4bit", "8bit", "16bit", "32bit" }; - - rdp.timg.format = (BYTE)((rdp.cmd0 >> 21) & 0x07); - rdp.timg.size = (BYTE)((rdp.cmd0 >> 19) & 0x03); - rdp.timg.width = (WORD)(1 + (rdp.cmd0 & 0x00000FFF)); - rdp.timg.addr = segoffset(rdp.cmd1); - rdp.s2dex_tex_loaded = TRUE; - rdp.update |= UPDATE_TEXTURE; - - if (rdp.frame_buffers[rdp.ci_count-1].status == ci_copy_self && (rdp.timg.addr >= rdp.cimg) && (rdp.timg.addr < rdp.ci_end)) - { - if (!rdp.fb_drawn) - { - if (!rdp.cur_image) - CopyFrameBuffer(); - else if (rdp.frame_buffers[rdp.ci_count].status != ci_copy) - CloseTextureBuffer(TRUE); - rdp.fb_drawn = TRUE; - } - } - - if (settings.fb_hires) //search this texture among drawn texture buffers - { - if (settings.zelda) - { - if (rdp.timg.size == 2) - FindTextureBuffer(rdp.timg.addr, rdp.timg.width); - } - else - FindTextureBuffer(rdp.timg.addr, rdp.timg.width); - } - - FRDP("settextureimage: format: %s, size: %s, width: %d, addr: %08lx\n", - format[rdp.timg.format], size[rdp.timg.size], - rdp.timg.width, rdp.timg.addr); -} - -static void rdp_setdepthimage() -{ - rdp.zimg = segoffset(rdp.cmd1) & BMASK; - rdp.zi_width = rdp.ci_width; - FRDP("setdepthimage - %08lx\n", rdp.zimg); -} - - -BOOL SwapOK = TRUE; -static void RestoreScale() -{ - FRDP("Return to original scale: x = %f, y = %f\n", rdp.scale_x_bak, rdp.scale_y_bak); - rdp.scale_x = rdp.scale_x_bak; - rdp.scale_y = rdp.scale_y_bak; - // update_scissor(); - rdp.view_scale[0] *= rdp.scale_x; - rdp.view_scale[1] *= rdp.scale_y; - rdp.view_trans[0] *= rdp.scale_x; - rdp.view_trans[1] *= rdp.scale_y; - rdp.update |= UPDATE_VIEWPORT | UPDATE_SCISSOR; - //* - if (fullscreen) - { - grDepthMask (FXFALSE); - grBufferClear (0, 0, 0xFFFF); - grDepthMask (FXTRUE); - } - //*/ -} - -static DWORD swapped_addr = 0; - -static void rdp_setcolorimage() -{ - render_depth_mode = 0; - if (settings.fb_smart && (rdp.num_of_ci < NUMTEXBUF)) - { - COLOR_IMAGE & cur_fb = rdp.frame_buffers[rdp.ci_count]; - COLOR_IMAGE & prev_fb = rdp.frame_buffers[rdp.ci_count-1]; - COLOR_IMAGE & next_fb = rdp.frame_buffers[rdp.ci_count+1]; - switch (cur_fb.status) - { - case ci_main: - { - - if (rdp.ci_count == 0) - { - if (rdp.ci_status == ci_aux) //for PPL - { - float sx = rdp.scale_x; - float sy = rdp.scale_y; - rdp.scale_x = 1.0f; - rdp.scale_y = 1.0f; - CopyFrameBuffer (); - rdp.scale_x = sx; - rdp.scale_y = sy; - } - if (!settings.fb_hires) - { - if ((rdp.num_of_ci > 1) && - (next_fb.status == ci_aux) && - (next_fb.width >= cur_fb.width)) - { - rdp.scale_x = 1.0f; - rdp.scale_y = 1.0f; - } - } - else if (rdp.copy_ci_index && settings.PM) //tidal wave - OpenTextureBuffer(rdp.frame_buffers[rdp.main_ci_index]); - } - else if (!rdp.motionblur && settings.fb_hires && !SwapOK && (rdp.ci_count <= rdp.copy_ci_index)) - { - if (next_fb.status == ci_aux_copy) - OpenTextureBuffer(rdp.frame_buffers[rdp.main_ci_index]); - else - OpenTextureBuffer(rdp.frame_buffers[rdp.copy_ci_index]); - } - else if (settings.fb_hires && rdp.read_whole_frame && prev_fb.status == ci_aux) - { - OpenTextureBuffer(rdp.frame_buffers[rdp.main_ci_index]); - } - //else if (rdp.ci_status == ci_aux && !rdp.copy_ci_index) - // CloseTextureBuffer(); - - rdp.skip_drawing = FALSE; - } - break; - case ci_copy: - { - if (!rdp.motionblur || settings.fb_motionblur) - { - if (cur_fb.width == rdp.ci_width) - { - if (CopyTextureBuffer(prev_fb, cur_fb)) - // if (CloseTextureBuffer(TRUE)) - ; - else - { - if (!rdp.fb_drawn || prev_fb.status == ci_copy_self) - { - CopyFrameBuffer (); - rdp.fb_drawn = TRUE; - } - memcpy(gfx.RDRAM+cur_fb.addr,gfx.RDRAM+rdp.cimg, (cur_fb.width*cur_fb.height)<>1); - } - } - else - { - CloseTextureBuffer(TRUE); - } - } - else - { - memset(gfx.RDRAM+cur_fb.addr, 0, cur_fb.width*cur_fb.height*rdp.ci_size); - } - rdp.skip_drawing = TRUE; - } - break; - case ci_aux_copy: - { - rdp.skip_drawing = FALSE; - if (CloseTextureBuffer(prev_fb.status != ci_aux_copy)) - ; - else if (!rdp.fb_drawn) - { - CopyFrameBuffer (); - rdp.fb_drawn = TRUE; - } - if (settings.fb_hires) - OpenTextureBuffer(cur_fb); - } - break; - case ci_old_copy: - { - if (!rdp.motionblur || settings.fb_motionblur) - { - if (cur_fb.width == rdp.ci_width) - { - memcpy(gfx.RDRAM+cur_fb.addr,gfx.RDRAM+rdp.maincimg[1].addr, (cur_fb.width*cur_fb.height)<>1); - } - //rdp.skip_drawing = TRUE; - } - else - { - memset(gfx.RDRAM+cur_fb.addr, 0, (cur_fb.width*cur_fb.height)<>1); - } - } - break; - /* - else if (rdp.frame_buffers[rdp.ci_count].status == ci_main_i) - { - // CopyFrameBuffer (); - rdp.scale_x = rdp.scale_x_bak; - rdp.scale_y = rdp.scale_y_bak; - rdp.skip_drawing = FALSE; - } - */ - case ci_aux: - { - if (!settings.fb_hires && cur_fb.format != 0) - rdp.skip_drawing = TRUE; - else - { - rdp.skip_drawing = FALSE; - if (settings.fb_hires && OpenTextureBuffer(cur_fb)) - ; - else - { - if (cur_fb.format != 0) - rdp.skip_drawing = TRUE; - if (rdp.ci_count == 0) - { - // if (rdp.num_of_ci > 1) - // { - rdp.scale_x = 1.0f; - rdp.scale_y = 1.0f; - // } - } - else if (!settings.fb_hires && (prev_fb.status == ci_main) && - (prev_fb.width == cur_fb.width)) // for Pokemon Stadium - CopyFrameBuffer (); - } - } - cur_fb.status = ci_aux; - } - break; - case ci_zimg: - // ZIGGY - // Zelda LoT effect save/restore depth buffer - if (cur_fb.addr == rdp.zimg) { - render_depth_mode = 1; - } else { - render_depth_mode = 2; - } - rdp.skip_drawing = TRUE; - break; - case ci_useless: - //case ci_zcopy: - rdp.skip_drawing = TRUE; - break; - case ci_copy_self: - if (settings.fb_hires && (rdp.ci_count <= rdp.copy_ci_index) && (!SwapOK || settings.swapmode == 2)) - OpenTextureBuffer(cur_fb); - rdp.skip_drawing = FALSE; - /* - if (settings.fb_hires) - { - if (SwapOK) - { - rdp.cimg = rdp.frame_buffers[rdp.ci_count].addr; - rdp.maincimg[0].addr = rdp.cimg; - newSwapBuffers(); - SwapOK = FALSE; - OpenTextureBuffer(rdp.frame_buffers[rdp.ci_count]); - } - } - */ - break; - default: - rdp.skip_drawing = FALSE; - } - - if ((rdp.ci_count > 0) && (prev_fb.status >= ci_aux)) //for Pokemon Stadium - { - if (!settings.fb_hires && prev_fb.format == 0) - CopyFrameBuffer (); - } - if (!settings.fb_hires && cur_fb.status == ci_copy) - { - if (!rdp.motionblur && (rdp.num_of_ci > rdp.ci_count+1) && (next_fb.status != ci_aux)) - { - RestoreScale(); - } - } - if (!settings.fb_hires && cur_fb.status == ci_aux) - { - if (cur_fb.format == 0) - { - if (settings.PPL && (rdp.scale_x < 1.1f)) //need to put current image back to frame buffer - { - int width = cur_fb.width; - int height = cur_fb.height; - WORD *ptr_dst = new WORD[width*height]; - WORD *ptr_src = (WORD*)(gfx.RDRAM+cur_fb.addr); - WORD c; - - for (int y=0; y> 1) | 0x8000; - ptr_dst[x + y * width] = c; - } - } - grLfbWriteRegion(GR_BUFFER_BACKBUFFER, - 0, - 0, - GR_LFB_SRC_FMT_555, - width, - height, - FXFALSE, - width<<1, - ptr_dst); - delete[] ptr_dst; - } - /* - else //just clear buffer - { - - grColorMask(FXTRUE, FXTRUE); - grBufferClear (0, 0, 0xFFFF); - } - */ - } - } - - if ((cur_fb.status == ci_main) && (rdp.ci_count > 0)) - { - BOOL to_org_res = TRUE; - for (int i = rdp.ci_count + 1; i < rdp.num_of_ci; i++) - { - if ((rdp.frame_buffers[i].status != ci_main) && (rdp.frame_buffers[i].status != ci_zimg) && (rdp.frame_buffers[i].status != ci_zcopy)) - { - to_org_res = FALSE; - break; - } - } - if (to_org_res) - { - RDP("return to original scale\n"); - rdp.scale_x = rdp.scale_x_bak; - rdp.scale_y = rdp.scale_y_bak; - if (settings.fb_hires && !rdp.read_whole_frame) - CloseTextureBuffer(); - } - if (settings.fb_hires && !rdp.read_whole_frame && (prev_fb.status >= ci_aux) && (rdp.ci_count > rdp.copy_ci_index)) - CloseTextureBuffer(); - - } - rdp.ci_status = cur_fb.status; - rdp.ci_count++; - } - - rdp.ocimg = rdp.cimg; - rdp.cimg = segoffset(rdp.cmd1) & BMASK; - rdp.ci_width = (rdp.cmd0 & 0xFFF) + 1; - if (settings.fb_smart) - rdp.ci_height = rdp.frame_buffers[rdp.ci_count-1].height; - else if (rdp.ci_width == 32) - rdp.ci_height = 32; - else - rdp.ci_height = rdp.scissor_o.lr_y; - if (rdp.zimg == rdp.cimg) - { - rdp.zi_width = rdp.ci_width; - // int zi_height = min((int)rdp.zi_width*3/4, (int)rdp.vi_height); - // rdp.zi_words = rdp.zi_width * zi_height; - } - DWORD format = (rdp.cmd0 >> 21) & 0x7; - rdp.ci_size = (rdp.cmd0 >> 19) & 0x3; - rdp.ci_end = rdp.cimg + ((rdp.ci_width*rdp.ci_height)<<(rdp.ci_size-1)); - FRDP("setcolorimage - %08lx, width: %d, height: %d, format: %d, size: %d\n", rdp.cmd1, rdp.ci_width, rdp.ci_height, format, rdp.ci_size); - FRDP("cimg: %08lx, ocimg: %08lx, SwapOK: %d\n", rdp.cimg, rdp.ocimg, SwapOK); - - if (format != 0 && !rdp.cur_image) //can't draw into non RGBA buffer - { - if (settings.fb_hires && rdp.ci_width <= 64) - OpenTextureBuffer(rdp.frame_buffers[rdp.ci_count - 1]); - else if (format > 2) - rdp.skip_drawing = TRUE; - return; - } - else - { - if (!settings.fb_smart) - rdp.skip_drawing = FALSE; - } - - CI_SET = TRUE; - if (settings.swapmode > 0) - { - if (rdp.zimg == rdp.cimg) - rdp.updatescreen = 1; - - BOOL viSwapOK = ((settings.swapmode == 2) && (rdp.vi_org_reg == *gfx.VI_ORIGIN_REG)) ? FALSE : TRUE; - if ((rdp.zimg != rdp.cimg) && (rdp.ocimg != rdp.cimg) && SwapOK && viSwapOK && !rdp.cur_image) - { - if (settings.fb_smart) - rdp.maincimg[0] = rdp.frame_buffers[rdp.main_ci_index]; - else - rdp.maincimg[0].addr = rdp.cimg; - rdp.last_drawn_ci_addr = (settings.swapmode == 2) ? swapped_addr : rdp.maincimg[0].addr; - swapped_addr = rdp.cimg; - newSwapBuffers(); - rdp.vi_org_reg = *gfx.VI_ORIGIN_REG; - SwapOK = FALSE; - if (settings.fb_hires) - { - if (rdp.copy_ci_index && (rdp.frame_buffers[rdp.ci_count-1].status != ci_zimg)) - { - int idx = (rdp.frame_buffers[rdp.ci_count].status == ci_aux_copy) ? rdp.main_ci_index : rdp.copy_ci_index; - FRDP("attempt open tex buffer. status: %s, addr: %08lx\n", CIStatus[rdp.frame_buffers[idx].status], rdp.frame_buffers[idx].addr); - OpenTextureBuffer(rdp.frame_buffers[idx]); - if (rdp.frame_buffers[rdp.copy_ci_index].status == ci_main) //tidal wave - rdp.copy_ci_index = 0; - } - else if (rdp.read_whole_frame && !rdp.cur_image) - { - OpenTextureBuffer(rdp.frame_buffers[rdp.main_ci_index]); - } - } - } - } -} - -static void rdp_trifill() -{ - RDP_E("trifill - IGNORED\n"); - RDP("trifill - IGNORED\n"); -} - -static void rdp_trishade() -{ - RDP_E("trishade - IGNORED\n"); - RDP("trishade - IGNORED\n"); -} - -static void rdp_tritxtr() -{ - RDP_E("tritxtr - IGNORED\n"); - RDP("tritxtr - IGNORED\n"); -} - -static void rdp_trishadetxtr() -{ - RDP_E("trishadetxtr - IGNORED\n"); - RDP("trishadetxtr - IGNORED\n"); -} - -static void rdp_trifillz() -{ - RDP_E("trifillz - IGNORED\n"); - RDP("trifillz - IGNORED\n"); -} - -static void rdp_trishadez() -{ - RDP_E("trishadez - IGNORED\n"); - RDP("trishadez - IGNORED\n"); -} - -static void rdp_tritxtrz() -{ - RDP_E("tritxtrz - IGNORED\n"); - RDP("tritxtrz - IGNORED\n"); -} - -static void rdp_trishadetxtrz() -{ - RDP_E("trishadetxtrz - IGNORED\n"); - RDP("trishadetxtrz - IGNORED\n"); -} - -static void rsp_reserved0() -{ - RDP_E("reserved0 - IGNORED\n"); - RDP("reserved0 - IGNORED\n"); -} - -static void rsp_reserved1() -{ - RDP("reserved1 - ignored\n"); -} - -static void rsp_reserved2() -{ - RDP("reserved2\n"); -} - -static void rsp_reserved3() -{ - RDP("reserved3 - ignored\n"); -} - -void SetWireframeCol () -{ - if (!fullscreen) return; - - switch (settings.wfmode) - { - //case 0: // normal colors, don't do anything - case 1: // vertex colors - grColorCombine (GR_COMBINE_FUNCTION_LOCAL, - GR_COMBINE_FACTOR_NONE, - GR_COMBINE_LOCAL_ITERATED, - GR_COMBINE_OTHER_NONE, - FXFALSE); - grAlphaCombine (GR_COMBINE_FUNCTION_LOCAL, - GR_COMBINE_FACTOR_NONE, - GR_COMBINE_LOCAL_ITERATED, - GR_COMBINE_OTHER_NONE, - FXFALSE); - grAlphaBlendFunction (GR_BLEND_ONE, - GR_BLEND_ZERO, - GR_BLEND_ZERO, - GR_BLEND_ZERO); - grTexCombine (GR_TMU0, - GR_COMBINE_FUNCTION_ZERO, - GR_COMBINE_FACTOR_NONE, - GR_COMBINE_FUNCTION_ZERO, - GR_COMBINE_FACTOR_NONE, - FXFALSE, FXFALSE); - grTexCombine (GR_TMU1, - GR_COMBINE_FUNCTION_ZERO, - GR_COMBINE_FACTOR_NONE, - GR_COMBINE_FUNCTION_ZERO, - GR_COMBINE_FACTOR_NONE, - FXFALSE, FXFALSE); - break; - case 2: // red only - grColorCombine (GR_COMBINE_FUNCTION_LOCAL, - GR_COMBINE_FACTOR_NONE, - GR_COMBINE_LOCAL_CONSTANT, - GR_COMBINE_OTHER_NONE, - FXFALSE); - grAlphaCombine (GR_COMBINE_FUNCTION_LOCAL, - GR_COMBINE_FACTOR_NONE, - GR_COMBINE_LOCAL_CONSTANT, - GR_COMBINE_OTHER_NONE, - FXFALSE); - grConstantColorValue (0xFF0000FF); - grAlphaBlendFunction (GR_BLEND_ONE, - GR_BLEND_ZERO, - GR_BLEND_ZERO, - GR_BLEND_ZERO); - grTexCombine (GR_TMU0, - GR_COMBINE_FUNCTION_ZERO, - GR_COMBINE_FACTOR_NONE, - GR_COMBINE_FUNCTION_ZERO, - GR_COMBINE_FACTOR_NONE, - FXFALSE, FXFALSE); - grTexCombine (GR_TMU1, - GR_COMBINE_FUNCTION_ZERO, - GR_COMBINE_FACTOR_NONE, - GR_COMBINE_FUNCTION_ZERO, - GR_COMBINE_FACTOR_NONE, - FXFALSE, FXFALSE); - break; - } - - grAlphaTestFunction (GR_CMP_ALWAYS); - grCullMode (GR_CULL_DISABLE); - - //grDepthBufferFunction (GR_CMP_ALWAYS); - //grDepthMask (FXFALSE); - - rdp.update |= UPDATE_COMBINE | UPDATE_ALPHA_COMPARE; -} - -#ifdef __cplusplus -extern "C" { -#endif - -/****************************************************************** -Function: FrameBufferRead -Purpose: This function is called to notify the dll that the -frame buffer memory is beening read at the given address. -DLL should copy content from its render buffer to the frame buffer -in N64 RDRAM -DLL is responsible to maintain its own frame buffer memory addr list -DLL should copy 4KB block content back to RDRAM frame buffer. -Emulator should not call this function again if other memory -is read within the same 4KB range -input: addr rdram address -val val -size 1 = BYTE, 2 = WORD, 4 = DWORD -output: none -*******************************************************************/ -EXPORT void CALL FBRead(unsigned int addr) -{ - LOG ("FBRead ()\n"); - - if (cpu_fb_ignore) - return; - if (cpu_fb_write_called) - { - cpu_fb_ignore = TRUE; - cpu_fb_write = FALSE; - return; - } - cpu_fb_read_called = TRUE; - DWORD a = segoffset(addr); - FRDP("FBRead. addr: %08lx\n", a); - if (!rdp.fb_drawn && (a >= rdp.cimg) && (a < rdp.ci_end)) - { - fbreads_back++; - //if (fbreads_back > 2) //&& (rdp.ci_width <= 320)) - { - CopyFrameBuffer (); - rdp.fb_drawn = TRUE; - } - } - if (!rdp.fb_drawn_front && (a >= rdp.maincimg[1].addr) && (a < rdp.maincimg[1].addr + rdp.ci_width*rdp.ci_height*2)) - { - fbreads_front++; - //if (fbreads_front > 2)//&& (rdp.ci_width <= 320)) - { - DWORD cimg = rdp.cimg; - rdp.cimg = rdp.maincimg[1].addr; - if (settings.fb_smart) - { - rdp.ci_width = rdp.maincimg[1].width; - rdp.ci_count = 0; - DWORD h = rdp.frame_buffers[0].height; - rdp.frame_buffers[0].height = rdp.maincimg[1].height; - CopyFrameBuffer(GR_BUFFER_FRONTBUFFER); - rdp.frame_buffers[0].height = h; - } - else - { - CopyFrameBuffer(GR_BUFFER_FRONTBUFFER); - } - rdp.cimg = cimg; - rdp.fb_drawn_front = TRUE; - } - } -} - -#if 0 -//TODO: remove -/****************************************************************** -Function: FrameBufferWriteList -Purpose: This function is called to notify the dll that the -frame buffer has been modified by CPU at the given address. -input: FrameBufferModifyEntry *plist -size = size of the plist, max = 1024 -output: none -*******************************************************************/ -EXPORT void CALL FBWList(FrameBufferModifyEntry *plist, DWORD size) -{ - LOG ("FBWList ()\n"); - FRDP("FBWList. size: %d\n", size); - printf("FBWList. size: %d\n", size); -} -#endif - -/****************************************************************** -Function: FrameBufferWrite -Purpose: This function is called to notify the dll that the -frame buffer has been modified by CPU at the given address. -input: addr rdram address -val val -size 1 = BYTE, 2 = WORD, 4 = DWORD -output: none -*******************************************************************/ -EXPORT void CALL FBWrite(unsigned int addr, unsigned int size) -{ - LOG ("FBWrite ()\n"); - if (cpu_fb_ignore) - return; - if (cpu_fb_read_called) - { - cpu_fb_ignore = TRUE; - cpu_fb_write = FALSE; - return; - } - cpu_fb_write_called = TRUE; - DWORD a = segoffset(addr); - FRDP("FBWrite. addr: %08lx\n", a); - // ZIGGY : added a test on ci_width, otherwise we crash on zero division below - if (!rdp.ci_width || a < rdp.cimg || a > rdp.ci_end) - return; - cpu_fb_write = TRUE; - DWORD shift_l = (a-rdp.cimg) >> 1; - DWORD shift_r = shift_l+2; - - d_ul_x = min(d_ul_x, shift_l%rdp.ci_width); - d_ul_y = min(d_ul_y, shift_l/rdp.ci_width); - d_lr_x = max(d_lr_x, shift_r%rdp.ci_width); - d_lr_y = max(d_lr_y, shift_r/rdp.ci_width); -} - - -/************************************************************************ -Function: FBGetFrameBufferInfo -Purpose: This function is called by the emulator core to retrieve frame - buffer information from the video plugin in order to be able - to notify the video plugin about CPU frame buffer read/write - operations - - size: - = 1 byte - = 2 word (16 bit) <-- this is N64 default depth buffer format - = 4 dword (32 bit) - - when frame buffer information is not available yet, set all values - in the FrameBufferInfo structure to 0 - -input: FrameBufferInfo pinfo[6] - pinfo is pointed to a FrameBufferInfo structure which to be - filled in by this function -output: Values are return in the FrameBufferInfo structure - Plugin can return up to 6 frame buffer info -************************************************************************/ -///* -#if 0 -//TODO: remove -typedef struct -{ - DWORD addr; - DWORD size; - DWORD width; - DWORD height; -} FrameBufferInfo; -#endif - -EXPORT void CALL FBGetFrameBufferInfo(void *p) -{ - LOG ("FBGetFrameBufferInfo ()\n"); - FrameBufferInfo * pinfo = (FrameBufferInfo *)p; - memset(pinfo,0,sizeof(FrameBufferInfo)*6); - if (!settings.fb_get_info) - return; - RDP("FBGetFrameBufferInfo ()\n"); - //* - if (settings.fb_smart) - { - pinfo[0].addr = rdp.maincimg[1].addr; - pinfo[0].size = rdp.maincimg[1].size; - pinfo[0].width = rdp.maincimg[1].width; - pinfo[0].height = rdp.maincimg[1].height; - int info_index = 1; - for (int i = 0; i < rdp.num_of_ci && info_index < 6; i++) - { - COLOR_IMAGE & cur_fb = rdp.frame_buffers[i]; - if (cur_fb.status == ci_main || cur_fb.status == ci_copy_self || - cur_fb.status == ci_old_copy) - { - pinfo[info_index].addr = cur_fb.addr; - pinfo[info_index].size = cur_fb.size; - pinfo[info_index].width = cur_fb.width; - pinfo[info_index].height = cur_fb.height; - info_index++; - } - } - } - else - { - pinfo[0].addr = rdp.maincimg[0].addr; - pinfo[0].size = rdp.ci_size; - pinfo[0].width = rdp.ci_width; - pinfo[0].height = rdp.ci_width*3/4; - pinfo[1].addr = rdp.maincimg[1].addr; - pinfo[1].size = rdp.ci_size; - pinfo[1].width = rdp.ci_width; - pinfo[1].height = rdp.ci_width*3/4; - } -//*/ -} -#ifdef __cplusplus -} -#endif - -//*/ -#include "UcodeFB.h" - -void DetectFrameBufferUsage () -{ - RDP("DetectFrameBufferUsage\n"); - - DWORD dlist_start = *(DWORD*)(gfx.DMEM+0xFF0); -#ifdef _WIN32 - DWORD dlist_length = *(DWORD*)(gfx.DMEM+0xFF4); -#endif // _WIN32 - DWORD a; - - BOOL tidal = FALSE; - if (settings.PM && (rdp.copy_ci_index || rdp.frame_buffers[rdp.copy_ci_index].status == ci_copy_self)) - tidal = TRUE; - DWORD ci = rdp.cimg, zi = rdp.zimg; // ci_width = rdp.ci_width; - rdp.main_ci = rdp.main_ci_end = rdp.main_ci_bg = rdp.ci_count = 0; - rdp.main_ci_index = rdp.copy_ci_index = 0; - rdp.zimg_end = 0; - rdp.tmpzimg = 0; - rdp.motionblur = FALSE; - rdp.main_ci_last_tex_addr = 0; - BOOL previous_ci_was_read = rdp.read_previous_ci; - rdp.read_previous_ci = FALSE; - rdp.read_whole_frame = FALSE; - rdp.swap_ci_index = rdp.black_ci_index = -1; - SwapOK = TRUE; - - // Start executing at the start of the display list - rdp.pc_i = 0; - rdp.pc[rdp.pc_i] = dlist_start; - rdp.dl_count = -1; - rdp.halt = 0; - rdp.scale_x_bak = rdp.scale_x; - rdp.scale_y_bak = rdp.scale_y; - - // MAIN PROCESSING LOOP - do { - - // Get the address of the next command - a = rdp.pc[rdp.pc_i] & BMASK; - - // Load the next command and its input - rdp.cmd0 = ((DWORD*)gfx.RDRAM)[a>>2]; // \ Current command, 64 bit - rdp.cmd1 = ((DWORD*)gfx.RDRAM)[(a>>2)+1]; // / - - // Output the address before the command - - // Go to the next instruction - rdp.pc[rdp.pc_i] = (a+8) & BMASK; - - if ((intptr_t)(gfx_instruction_lite[settings.ucode][rdp.cmd0>>24])) - gfx_instruction_lite[settings.ucode][rdp.cmd0>>24] (); - - // check DL counter - if (rdp.dl_count != -1) - { - rdp.dl_count --; - if (rdp.dl_count == 0) - { - rdp.dl_count = -1; - - RDP ("End of DL\n"); - rdp.pc_i --; - } - } - - } while (!rdp.halt); - SwapOK = TRUE; - if (rdp.ci_count > NUMTEXBUF) //overflow - { - rdp.cimg = ci; - rdp.zimg = zi; - rdp.num_of_ci = rdp.ci_count; - rdp.scale_x = rdp.scale_x_bak; - rdp.scale_y = rdp.scale_y_bak; - return; - } - - if (rdp.black_ci_index > 0 && rdp.black_ci_index < rdp.copy_ci_index) - rdp.frame_buffers[rdp.black_ci_index].status = ci_main; - - if (rdp.frame_buffers[rdp.ci_count-1].status == ci_unknown) - { - if (rdp.ci_count > 1) - rdp.frame_buffers[rdp.ci_count-1].status = ci_aux; - else - rdp.frame_buffers[rdp.ci_count-1].status = ci_main; - } - - if ((rdp.frame_buffers[rdp.ci_count-1].status == ci_aux) && - (rdp.frame_buffers[rdp.main_ci_index].width < 320) && - (rdp.frame_buffers[rdp.ci_count-1].width > rdp.frame_buffers[rdp.main_ci_index].width)) - { - for (int i = 0; i < rdp.ci_count; i++) - { - if (rdp.frame_buffers[i].status == ci_main) - rdp.frame_buffers[i].status = ci_aux; - else if (rdp.frame_buffers[i].addr == rdp.frame_buffers[rdp.ci_count-1].addr) - rdp.frame_buffers[i].status = ci_main; -// FRDP("rdp.frame_buffers[%d].status = %d\n", i, rdp.frame_buffers[i].status); - } - rdp.main_ci_index = rdp.ci_count-1; - } - - BOOL all_zimg = TRUE; - int i; - for (i = 0; i < rdp.ci_count; i++) - { - if (rdp.frame_buffers[i].status != ci_zimg) - { - all_zimg = FALSE; - break; - } - } - if (all_zimg) - { - for (i = 0; i < rdp.ci_count; i++) - rdp.frame_buffers[i].status = ci_main; - } - - RDP("detect fb final results: \n"); - for (i = 0; i < rdp.ci_count; i++) - { - FRDP("rdp.frame_buffers[%d].status = %s, addr: %08lx, height: %d\n", i, CIStatus[rdp.frame_buffers[i].status], rdp.frame_buffers[i].addr, rdp.frame_buffers[i].height); - } - - rdp.cimg = ci; - rdp.zimg = zi; - rdp.num_of_ci = rdp.ci_count; - if (rdp.read_previous_ci && previous_ci_was_read) - if (!settings.fb_hires || !rdp.copy_ci_index) - rdp.motionblur = TRUE; - if (rdp.motionblur || settings.fb_hires || (rdp.frame_buffers[rdp.copy_ci_index].status == ci_aux_copy)) - { - rdp.scale_x = rdp.scale_x_bak; - rdp.scale_y = rdp.scale_y_bak; - } - - if ((rdp.read_previous_ci || previous_ci_was_read) && !rdp.copy_ci_index) - rdp.read_whole_frame = TRUE; - if (rdp.read_whole_frame) - { - if (settings.fb_hires && !settings.fb_ignore_previous) - { - if (rdp.swap_ci_index < 0) - { - rdp.texbufs[0].clear_allowed = TRUE; - OpenTextureBuffer(rdp.frame_buffers[rdp.main_ci_index]); - } - } - else - { - if (rdp.motionblur) - { - if (settings.fb_motionblur) - CopyFrameBuffer(); - else - memset(gfx.RDRAM+rdp.cimg, 0, rdp.ci_width*rdp.ci_height*rdp.ci_size); - } - else //if (ci_width == rdp.frame_buffers[rdp.main_ci_index].width) - { - if (rdp.maincimg[0].height > 65) //for 1080 - { - rdp.cimg = rdp.maincimg[0].addr; - rdp.ci_width = rdp.maincimg[0].width; - rdp.ci_count = 0; - DWORD h = rdp.frame_buffers[0].height; - rdp.frame_buffers[0].height = rdp.maincimg[0].height; - CopyFrameBuffer(); - rdp.frame_buffers[0].height = h; - } - else //conker - { - CopyFrameBuffer(); - } - } - } - } - - if (settings.fb_hires) - { - for (i = 0; i < num_tmu; i++) - { - rdp.texbufs[i].clear_allowed = TRUE; - for (int j = 0; j < 256; j++) - { - rdp.texbufs[i].images[j].drawn = FALSE; - rdp.texbufs[i].images[j].clear = TRUE; - } - } - if (tidal) - { - //RDP("Tidal wave!\n"); - rdp.copy_ci_index = rdp.main_ci_index; - } - } - rdp.ci_count = 0; - if (settings.fb_ignore_previous) - rdp.read_whole_frame = FALSE; - else - rdp.maincimg[0] = rdp.frame_buffers[rdp.main_ci_index]; - // rdp.scale_x = rdp.scale_x_bak; - // rdp.scale_y = rdp.scale_y_bak; - RDP("DetectFrameBufferUsage End\n"); -} - - - - -#ifdef __cplusplus -extern "C" { -#endif - -/****************************************************************** -Function: ProcessRDPList -Purpose: This function is called when there is a Dlist to be -processed. (Low level GFX list) -input: none -output: none -*******************************************************************/ -EXPORT void CALL ProcessRDPList(void) -{ - if (settings.KI) - { - *gfx.MI_INTR_REG |= 0x20; - gfx.CheckInterrupts(); - } - LOG ("ProcessRDPList ()\n"); - - no_dlist = FALSE; - update_screen_count = 0; - ChangeSize (); - -#ifdef ALTTAB_FIX - if (!hhkLowLevelKybd) - { - hhkLowLevelKybd = SetWindowsHookEx(WH_KEYBOARD_LL, - LowLevelKeyboardProc, hInstance, 0); - } -#endif - - LOG ("ProcessDList ()\n"); - - if (!fullscreen) - { - drawNoFullscreenMessage(); - // Set an interrupt to allow the game to continue - *gfx.MI_INTR_REG |= 0x20; - gfx.CheckInterrupts(); - } - - if (reset) - { - reset = 0; - - memset (microcode, 0, 4096); - if (settings.autodetect_ucode) - { - // Thanks to ZeZu for ucode autodetection!!! - - DWORD startUcode = *(DWORD*)(gfx.DMEM+0xFD0); - memcpy (microcode, gfx.RDRAM+startUcode, 4096); - microcheck (); - - } - } - else if ( ((old_ucode == 6) && (settings.ucode == 1)) || settings.force_microcheck) - { - DWORD startUcode = *(DWORD*)(gfx.DMEM+0xFD0); - memcpy (microcode, gfx.RDRAM+startUcode, 4096); - microcheck (); - } - - if (exception) return; - - // Switch to fullscreen? - if (to_fullscreen) - { - to_fullscreen = FALSE; - - if (!InitGfx (FALSE)) - { - LOG ("FAILED!!!\n"); - return; - } - fullscreen = TRUE; - } - - // Clear out the RDP log -#ifdef RDP_LOGGING - if (settings.logging && settings.log_clear) - { - CLOSE_RDP_LOG (); - OPEN_RDP_LOG (); - } -#endif - -#ifdef UNIMP_LOG - if (settings.log_unk && settings.unk_clear) - { - std::ofstream unimp; - unimp.open("unimp.txt"); - unimp.close(); - } -#endif - - //* Set states *// - if (settings.swapmode > 0) - SwapOK = TRUE; - rdp.updatescreen = 1; - - rdp.tri_n = 0; // 0 triangles so far this frame - rdp.debug_n = 0; - - rdp.model_i = 0; // 0 matrices so far in stack - //stack_size can be less then 32! Important for Silicon Vally. Thanks Orkin! - rdp.model_stack_size = min(32, (*(DWORD*)(gfx.DMEM+0x0FE4))>>6); - if (rdp.model_stack_size == 0) - rdp.model_stack_size = 32; - rdp.fb_drawn = rdp.fb_drawn_front = FALSE; - rdp.update = 0x7FFFFFFF; // All but clear cache - rdp.geom_mode = 0; - rdp.acmp = 0; - rdp.maincimg[1] = rdp.maincimg[0]; - rdp.skip_drawing = FALSE; - rdp.s2dex_tex_loaded = FALSE; - fbreads_front = fbreads_back = 0; - rdp.fog_multiplier = rdp.fog_offset = 0; - rdp.zsrc = 0; - - if (cpu_fb_write == TRUE) - DrawFrameBufferToScreen(); - cpu_fb_write = FALSE; - cpu_fb_read_called = FALSE; - cpu_fb_write_called = FALSE; - cpu_fb_ignore = FALSE; - d_ul_x = 0xffff; - d_ul_y = 0xffff; - d_lr_x = 0; - d_lr_y = 0; - - //analize possible frame buffer usage - if (settings.fb_smart) - DetectFrameBufferUsage(); - if (!settings.lego || rdp.num_of_ci > 1) - rdp.last_bg = 0; - //* End of set states *// - - - // Get the start of the display list and the length of it -// DWORD dlist_start = *(DWORD*)(gfx.DMEM+0xFF0); -// DWORD dlist_length = *(DWORD*)(gfx.DMEM+0xFF4); - DWORD dlist_start = *gfx.DPC_CURRENT_REG; - DWORD dlist_length = *gfx.DPC_END_REG - *gfx.DPC_CURRENT_REG; - FRDP("--- NEW DLIST --- crc: %08lx, ucode: %d, fbuf: %08lx, fbuf_width: %d, dlist start: %08lx, dlist_lenght: %d\n", uc_crc, settings.ucode, *gfx.VI_ORIGIN_REG, *gfx.VI_WIDTH_REG, dlist_start, dlist_length); - FRDP_E("--- NEW DLIST --- crc: %08lx, ucode: %d, fbuf: %08lx\n", uc_crc, settings.ucode, *gfx.VI_ORIGIN_REG); - - if (settings.tonic && dlist_length < 16) - { - rdp_fullsync(); - FRDP_E("DLIST is too short!\n"); - return; - } - - // Start executing at the start of the display list - rdp.pc_i = 0; - rdp.pc[rdp.pc_i] = dlist_start; - rdp.dl_count = -1; - rdp.halt = 0; - DWORD a; - - // catches exceptions so that it doesn't freeze -#ifdef CATCH_EXCEPTIONS - try { -#endif - - // MAIN PROCESSING LOOP - do { - - // Get the address of the next command - a = rdp.pc[rdp.pc_i] & BMASK; - - // Load the next command and its input - rdp.cmd0 = ((DWORD*)gfx.RDRAM)[a>>2]; // \ Current command, 64 bit - rdp.cmd1 = ((DWORD*)gfx.RDRAM)[(a>>2)+1]; // / - // cmd2 and cmd3 are filled only when needed, by the function that needs them - - // Output the address before the command -#ifdef LOG_COMMANDS - FRDP ("%08lx (c0:%08lx, c1:%08lx): ", a, rdp.cmd0, rdp.cmd1); -#else - FRDP ("%08lx: ", a); -#endif - - // Go to the next instruction - rdp.pc[rdp.pc_i] = (a+8) & BMASK; - -#ifdef PERFORMANCE - QueryPerformanceCounter ((LARGE_INTEGER*)&perf_cur); -#endif - // Process this instruction - gfx_instruction[settings.ucode][((rdp.cmd0>>24)&0x3f) + 0x100-0x40] (); - - // check DL counter - if (rdp.dl_count != -1) - { - rdp.dl_count --; - if (rdp.dl_count == 0) - { - rdp.dl_count = -1; - - RDP ("End of DL\n"); - rdp.pc_i --; - } - } - -#ifdef PERFORMANCE - QueryPerformanceCounter ((LARGE_INTEGER*)&perf_next); - __int64 t = perf_next-perf_cur; - sprintf (out_buf, "perf %08lx: %016I64d\n", a-8, t); - rdp_log << out_buf; -#endif - - } while (0); -#ifdef CATCH_EXCEPTIONS - } catch (...) { - - if (fullscreen) ReleaseGfx (); - WriteLog(M64MSG_ERROR, "The GFX plugin caused an exception and has been disabled."); - exception = TRUE; - } -#endif - - if (settings.fb_smart) - { - rdp.scale_x = rdp.scale_x_bak; - rdp.scale_y = rdp.scale_y_bak; - } - if (settings.fb_read_always) - { - CopyFrameBuffer (); - } - if (rdp.yuv_image) - { - DrawYUVImageToFrameBuffer(); - rdp.yuv_image = FALSE; -// FRDP("yuv image draw. ul_x: %f, ul_y: %f, lr_x: %f, lr_y: %f, begin: %08lx\n", -// rdp.yuv_ul_x, rdp.yuv_ul_y, rdp.yuv_lr_x, rdp.yuv_lr_y, rdp.yuv_im_begin); - rdp.yuv_ul_x = rdp.yuv_ul_y = rdp.yuv_lr_x = rdp.yuv_lr_y = 0; - rdp.yuv_im_begin = 0x00FFFFFF; - } - if (rdp.cur_image) - CloseTextureBuffer(rdp.read_whole_frame && (settings.PM || rdp.swap_ci_index >= 0)); - - if (settings.TGR2 && rdp.vi_org_reg != *gfx.VI_ORIGIN_REG && CI_SET) - { - newSwapBuffers (); - CI_SET = FALSE; - } - RDP("ProcessDList end\n"); - - - - - - - WriteLog(M64MSG_VERBOSE, "ProcessRPDList %x %x %x\n", - *gfx.DPC_START_REG, - *gfx.DPC_END_REG, - *gfx.DPC_CURRENT_REG); - //*gfx.DPC_STATUS_REG = 0xffffffff; // &= ~0x0002; - - *gfx.DPC_START_REG = *gfx.DPC_END_REG; - *gfx.DPC_CURRENT_REG = *gfx.DPC_END_REG; -} - -#ifdef __cplusplus -} -#endif - - - - - -// Local Variables: *** -// tab-width:4 *** -// c-file-offset:4 *** -// End: *** - +/* +* Glide64 - Glide video plugin for Nintendo 64 emulators. +* Copyright (c) 2002 Dave2001 +* Copyright (c) 2008 Günther +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public +* Licence along with this program; if not, write to the Free +* Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +* Boston, MA 02110-1301, USA +*/ + +//**************************************************************** +// +// Glide64 - Glide Plugin for Nintendo 64 emulators (tested mostly with Project64) +// Project started on December 29th, 2001 +// +// To modify Glide64: +// * Write your name and (optional)email, commented by your work, so I know who did it, and so that you can find which parts you modified when it comes time to send it to me. +// * Do NOT send me the whole project or file that you modified. Take out your modified code sections, and tell me where to put them. If people sent the whole thing, I would have many different versions, but no idea how to combine them all. +// +// Official Glide64 development channel: #Glide64 on EFnet +// +// Original author: Dave2001 (Dave2999@hotmail.com) +// Other authors: Gonetz, Gugaman +// +//**************************************************************** + +#define M64P_PLUGIN_PROTOTYPES 1 +#include "m64p_types.h" +#include "m64p_plugin.h" +#include "m64p_config.h" +#include "m64p_vidext.h" +#include "3dmath.h" +#include "Util.h" +#include "Debugger.h" +#include "Combine.h" +#include "Util.h" +#include "Ini.h" +#include "Config.h" +#include "Tmem.h" +#include "TexCache.h" +#include "TexCache.h" +#include "TexBuffer.h" +#include "CRC.h" +#include "rdp.h" + +#ifndef _WIN32 +#include +#endif // _WIN32 + +char out_buf[2048]; + +DWORD frame_count; // frame counter + +BOOL ucode_error_report = TRUE; +int wrong_tile = -1; + +int drawFlag = 1; // draw flag for rendering callback + +#if defined(__GNUC__) + #define bswap32(x) __builtin_bswap32(x) +#elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64)) + #include + #define bswap32(x) _byteswap_ulong(x) +#else +static inline uint32_t bswap32(uint32_t val) +{ + return (((val & 0xff000000) >> 24) | + ((val & 0x00ff0000) >> 8) | + ((val & 0x0000ff00) << 8) | + ((val & 0x000000ff) << 24)); +} +#endif + +// global strings +const char *ACmp[4] = { "NONE", "THRESHOLD", "UNKNOWN", "DITHER" }; + +const char *Mode0[16] = { "COMBINED", "TEXEL0", + "TEXEL1", "PRIMITIVE", + "SHADE", "ENVIORNMENT", + "1", "NOISE", + "0", "0", + "0", "0", + "0", "0", + "0", "0" }; +const char *Mode1[16] = { "COMBINED", "TEXEL0", + "TEXEL1", "PRIMITIVE", + "SHADE", "ENVIORNMENT", + "CENTER", "K4", + "0", "0", + "0", "0", + "0", "0", + "0", "0" }; +const char *Mode2[32] = { "COMBINED", "TEXEL0", + "TEXEL1", "PRIMITIVE", + "SHADE", "ENVIORNMENT", + "SCALE", "COMBINED_ALPHA", + "T0_ALPHA", "T1_ALPHA", + "PRIM_ALPHA", "SHADE_ALPHA", + "ENV_ALPHA", "LOD_FRACTION", + "PRIM_LODFRAC", "K5", + "0", "0", + "0", "0", + "0", "0", + "0", "0", + "0", "0", + "0", "0", + "0", "0", + "0", "0" }; +const char *Mode3[8] = { "COMBINED", "TEXEL0", + "TEXEL1", "PRIMITIVE", + "SHADE", "ENVIORNMENT", + "1", "0" }; + +const char *Alpha0[8] = { "COMBINED", "TEXEL0", + "TEXEL1", "PRIMITIVE", + "SHADE", "ENVIORNMENT", + "1", "0" }; +const char *Alpha2[8] = { "LOD_FRACTION", "TEXEL0", + "TEXEL1", "PRIMITIVE", + "SHADE", "ENVIORNMENT", + "PRIM_LODFRAC", "0" }; + +//FIXME:unused? +//const char *FBLa[] = { "G_BL_CLR_IN", "G_BL_CLR_MEM", "G_BL_CLR_BL", "G_BL_CLR_FOG" }; +//const char *FBLb[] = { "G_BL_A_IN", "G_BL_A_FOG", "G_BL_A_SHADE", "G_BL_0" }; +//const char *FBLc[] = { "G_BL_CLR_IN", "G_BL_CLR_MEM", "G_BL_CLR_BL", "G_BL_CLR_FOG"}; +//const char *FBLd[] = { "G_BL_1MA", "G_BL_A_MEM", "G_BL_1", "G_BL_0" }; + +const char *str_zs[2] = { "G_ZS_PIXEL", "G_ZS_PRIM" }; + +const char *str_yn[2] = { "NO", "YES" }; +const char *str_offon[2] = { "OFF", "ON" }; + +const char *str_cull[4] = { "DISABLE", "FRONT", "BACK", "BOTH" }; + +// I=intensity probably +const char *str_format[8] = { "RGBA", "YUV", "CI", "IA", "I", "?", "?", "?" }; +const char *str_size[4] = { "4bit", "8bit", "16bit", "32bit" }; +const char *str_cm[4] = { "WRAP/NO CLAMP", "MIRROR/NO CLAMP", "WRAP/CLAMP", "MIRROR/CLAMP" }; + +//const char *str_lod[] = { "1", "2", "4", "8", "16", "32", "64", "128", "256" }; +//const char *str_aspect[] = { "1x8", "1x4", "1x2", "1x1", "2x1", "4x1", "8x1" }; + +const char *str_filter[3] = { "Point Sampled", "Average (box)", "Bilinear" }; + +const char *str_tlut[4] = { "TT_NONE", "TT_UNKNOWN", "TT_RGBA_16", "TT_IA_16" }; + +const char *CIStatus[10] = { "ci_main", "ci_zimg", "ci_unknown", "ci_useless", + "ci_old_copy", "ci_copy", "ci_copy_self", + "ci_zcopy", "ci_aux", "ci_aux_copy" }; + +typedef struct +{ + int ucode; + int crc; +} UcodeData; + +static UcodeData UcodeList[] = +{ + {0, 0x006bd77f}, + {2, 0x03044b84}, + {2, 0x030f4b84}, + {1, 0x05165579}, + {1, 0x05777c62}, + {1, 0x057e7c62}, + {1, 0x07200895}, + {2, 0x0bf36d36}, + {-1, 0x0d7bbffb}, + {5, 0x0d7cbffb}, + {2, 0x0ff79527}, + {-1, 0x0ff795bf}, + {1, 0x1118b3e0}, + {2, 0x168e9cd5}, + {2, 0x1a1e18a0}, + {2, 0x1a1e1920}, + {2, 0x1a62dbaf}, + {2, 0x1a62dc2f}, + {1, 0x1de712ff}, + {6, 0x1ea9e30f}, + {2, 0x21f91834}, + {2, 0x21f91874}, + {2, 0x22099872}, + {1, 0x24cd885b}, + {1, 0x26a7879a}, + {6, 0x299d5072}, + {2, 0x2b291027}, + {6, 0x2b5a89c2}, + {1, 0x2c7975d6}, + {2, 0x2f71d1d5}, + {2, 0x2f7dd1d5}, + {1, 0x327b933d}, + {1, 0x339872a6}, + {2, 0x377359b6}, + {0, 0x3a1c2b34}, + {0, 0x3a1cbac3}, + {0, 0x3f7247fb}, + {1, 0x3ff1a4ca}, + {0, 0x4165e1fd}, + {1, 0x4340ac9b}, + {1, 0x440cfad6}, + {7, 0x47d46e86}, + {2, 0x485abff2}, + {1, 0x4fe6df78}, + {0, 0x5182f610}, + {1, 0x5257cd2a}, + {1, 0x5414030c}, + {1, 0x5414030d}, + {1, 0x559ff7d4}, + {4, 0x5b5d36e3}, + {3, 0x5b5d3763}, + {0, 0x5d1d6f53}, + {2, 0x5d3099f1}, + {1, 0x5df1408c}, + {1, 0x5ef4e34a}, + {1, 0x6075e9eb}, + {1, 0x60c1dcc4}, + {2, 0x6124a508}, + {2, 0x630a61fb}, + {5, 0x63be08b1}, + {5, 0x63be08b3}, + {1, 0x64ed27e5}, + {2, 0x65201989}, + {2, 0x65201a09}, + {1, 0x66c0b10a}, + {2, 0x679e1205}, + {6, 0x6bb745c9}, + {2, 0x6d8f8f8a}, + {0, 0x6e4d50af}, + {1, 0x6eaa1da8}, + {1, 0x72a4f34e}, + {1, 0x73999a23}, + {6, 0x74af0a74}, + {2, 0x753be4a5}, + {6, 0x794c3e28}, + {1, 0x7df75834}, + {1, 0x7f2d0a2e}, + {1, 0x82f48073}, + {1, 0x841ce10f}, + {-1, 0x844b55b5}, + {1, 0x863e1ca7}, + {-1, 0x86b1593e}, + {1, 0x8805ffea}, + {1, 0x8d5735b2}, + {1, 0x8d5735b3}, + {-1, 0x8ec3e124}, + {2, 0x93d11f7b}, + {2, 0x93d11ffb}, + {2, 0x93d1ff7b}, + {2, 0x9551177b}, + {2, 0x955117fb}, + {2, 0x95cd0062}, + {1, 0x97d1b58a}, + {2, 0xa2d0f88e}, + {1, 0xa346a5cc}, + {2, 0xaa86cb1d}, + {2, 0xaae4a5b9}, + {2, 0xad0a6292}, + {2, 0xad0a6312}, + {0, 0xae08d5b9}, + {1, 0xb1821ed3}, + {1, 0xb4577b9c}, + {0, 0xb54e7f93}, + {2, 0xb62f900f}, + {2, 0xba65ea1e}, + {8, 0xba86cb1d}, + {0, 0xbc03e969}, + {2, 0xbc45382e}, + {1, 0xbe78677c}, + {1, 0xbed8b069}, + {1, 0xc3704e41}, + {1, 0xc46dbc3d}, + {1, 0xc99a4c6c}, + {2, 0xc901ce73}, + {2, 0xc901cef3}, + {2, 0xcb8c9b6c}, + {1, 0xcee7920f}, + {2, 0xcfa35a45}, + {1, 0xd1663234}, + {6, 0xd20dedbf}, + {1, 0xd2a9f59c}, + {1, 0xd41db5f7}, + {0, 0xd5604971}, + {1, 0xd57049a5}, + {-1, 0xd5c4dc96}, + {0, 0xd5d68b1f}, + {1, 0xd802ec04}, + {2, 0xda13ab96}, + {2, 0xde7d67d4}, + {2, 0xe1290fa2}, + {0, 0xe41ec47e}, + {2, 0xe65cb4ad}, + {1, 0xe89c2b92}, + {1, 0xe9231df2}, + {1, 0xec040469}, + {1, 0xee47381b}, + {1, 0xef54ee35}, + {-1, 0xf9893f70}, + {1, 0xfb816260}, + {-1, 0xff372492} +}; + +// ZIGGY +// depth save/restore variables +// 0 : normal mode +// 1 : writing in normal depth buffer +// 2 : writing in alternate depth buffer +static int render_depth_mode; + +// ** RDP graphics functions ** +static void undef(); +static void spnoop(); + +static void rdp_noop(); +static void rdp_texrect(); +//static void rdp_texrectflip(); +static void rdp_loadsync(); +static void rdp_pipesync(); +static void rdp_tilesync(); +static void rdp_fullsync(); +static void rdp_setkeygb(); +static void rdp_setkeyr(); +static void rdp_setconvert(); +static void rdp_setscissor(); +static void rdp_setprimdepth(); +static void rdp_setothermode(); +static void rdp_loadtlut(); +static void rdp_settilesize(); +static void rdp_loadblock(); +static void rdp_loadtile(); +static void rdp_settile(); +static void rdp_fillrect(); +static void rdp_setfillcolor(); +static void rdp_setfogcolor(); +static void rdp_setblendcolor(); +static void rdp_setprimcolor(); +static void rdp_setenvcolor(); +static void rdp_setcombine(); +static void rdp_settextureimage(); +static void rdp_setdepthimage(); +static void rdp_setcolorimage(); +static void rdp_trifill(); +static void rdp_trishade(); +static void rdp_tritxtr(); +static void rdp_trishadetxtr(); +static void rdp_trifillz(); +static void rdp_trishadez(); +static void rdp_tritxtrz(); +static void rdp_trishadetxtrz(); + +static void rsp_reserved0(); +static void rsp_reserved1(); +static void rsp_reserved2(); +static void rsp_reserved3(); + +static void ys_memrect(); + +BYTE microcode[4096]; +DWORD uc_crc; +void microcheck (); + +// ** UCODE FUNCTIONS ** +#include "Ucode00.h" +#include "ucode01.h" +#include "ucode02.h" +#include "ucode03.h" +#include "ucode04.h" +#include "ucode05.h" +#include "ucode06.h" +#include "ucode07.h" +#include "ucode08.h" +#include "ucode.h" + +static BOOL reset = 0; +static int old_ucode = -1; + +// rdp_reset - resets the RDP_E +void rdp_reset () +{ + reset = 1; + + rdp.model_i = 0; + + rdp.n_cached[0] = 0; + rdp.n_cached[1] = 0; + rdp.cur_cache[0] = NULL; + rdp.cur_cache[1] = NULL; + /* + rdp.tmem_ptr[0] = offset_textures; + rdp.tmem_ptr[1] = offset_textures; + if (grTextureBufferExt) + rdp.tmem_ptr[1] = TEXMEM_2MB_EDGE * 2; + */ + rdp.c_a0 = 0; + rdp.c_b0 = 0; + rdp.c_c0 = 0; + rdp.c_d0 = 0; + rdp.c_Aa0 = 0; + rdp.c_Ab0 = 0; + rdp.c_Ac0 = 0; + rdp.c_Ad0 = 0; + + rdp.c_a1 = 0; + rdp.c_b1 = 0; + rdp.c_c1 = 0; + rdp.c_d1 = 0; + rdp.c_Aa1 = 0; + rdp.c_Ab1 = 0; + rdp.c_Ac1 = 0; + rdp.c_Ad1 = 0; + + // Clear the palette CRC + int i; + for (i=0; i<16; i++) + rdp.pal_8_crc[i] = 0; + + // Clear the palettes + for (i=0; i<256; i++) + rdp.pal_8[i] = 0; + + rdp.tlut_mode = 0; + + // Clear all segments ** VERY IMPORTANT FOR ZELDA ** + for (i=0; i<16; i++) + rdp.segment[i] = 0; + + for (i=0; i<512; i++) + rdp.addr[i] = 0; + + // set all vertex numbers + for (i=0; i>2; i++) + { + uc_crc += ((DWORD*)microcode)[i]; + } + + FRDP_E ("crc: %08lx\n", uc_crc); + +#ifdef LOG_UCODE + std::ofstream ucf; + ucf.open ("ucode.txt", ios::out | ios::binary); + char d; + for (i=0; i<0x400000; i++) + { + d = ((char*)gfx.RDRAM)[i^3]; + ucf.write (&d, 1); + } + ucf.close (); +#endif + + char str[9]; + sprintf (str, "%08lx", (unsigned long)uc_crc); + + FRDP("ucode = %s\n", str); + int uc = LookupUcode(uc_crc); + WriteLog(M64MSG_INFO, "ucode = %d\n", uc); + if (uc == -2 && ucode_error_report) + { + Config_Open(); + settings.ucode = Config_ReadInt ("ucode", "Force microcode", 0, FALSE, FALSE); + + ReleaseGfx (); + WriteLog(M64MSG_ERROR, "Error: uCode crc not found in INI, using currently selected uCode\n\n%08lx", (unsigned long)uc_crc); + + ucode_error_report = FALSE; // don't report any more ucode errors from this game + } + else if (uc == -1 && ucode_error_report) + { + Config_Open(); + settings.ucode = Config_ReadInt ("ucode", "Force microcode", 0, FALSE, FALSE); + + ReleaseGfx (); + WriteLog(M64MSG_ERROR, "Error: Unsupported uCode!\n\ncrc: %08lx", (unsigned long)uc_crc); + + ucode_error_report = FALSE; // don't report any more ucode errors from this game + } + else + { + old_ucode = settings.ucode; + settings.ucode = uc; + FRDP("microcheck: old ucode: %d, new ucode: %d\n", old_ucode, uc); + } +} + +void drawNoFullscreenMessage() +{ + LOG ("drawNoFullscreenMessage ()\n"); +} + +static WORD yuv_to_rgb(BYTE y, BYTE u, BYTE v) +{ + float r = y + (1.370705f * (v-128)); + float g = y - (0.698001f * (v-128)) - (0.337633f * (u-128)); + float b = y + (1.732446f * (u-128)); + r *= 0.125f; + g *= 0.125f; + b *= 0.125f; + //clipping the result + if (r > 32) r = 32; + if (g > 32) g = 32; + if (b > 32) b = 32; + if (r < 0) r = 0; + if (g < 0) g = 0; + if (b < 0) b = 0; + + WORD c = (WORD)(((WORD)(r) << 11) | + ((WORD)(g) << 6) | + ((WORD)(b) << 1) | 1); + return c; +} + +static void DrawYUVImageToFrameBuffer() +{ + WORD width = (WORD)(rdp.yuv_lr_x - rdp.yuv_ul_x); + WORD height = (WORD)(rdp.yuv_lr_y - rdp.yuv_ul_y); + DWORD * mb = (DWORD*)(gfx.RDRAM+rdp.yuv_im_begin); //pointer to the first macro block + WORD * cimg = (WORD*)(gfx.RDRAM+rdp.cimg); + //yuv macro block contains 16x16 texture. we need to put it in the proper place inside cimg + for (WORD y = 0; y < height; y+=16) + { + for (WORD x = 0; x < width; x+=16) + { + WORD *dst = cimg + x + y * rdp.ci_width; + for (WORD h = 0; h < 16; h++) + { + for (WORD w = 0; w < 8; w++) + { + DWORD t = *(mb++); //each DWORD contains 2 pixels + if ((x < rdp.ci_width) && (y < rdp.ci_height)) //clipping. texture image may be larger than color image + { + BYTE y0 = (BYTE)t&0xFF; + BYTE v = (BYTE)(t>>8)&0xFF; + BYTE y1 = (BYTE)(t>>16)&0xFF; + BYTE u = (BYTE)(t>>24)&0xFF; + *(dst++) = yuv_to_rgb(y0, u, v); + *(dst++) = yuv_to_rgb(y1, u, v); + } + } + dst += rdp.ci_width - 16; + } + mb += 64; //macro block is 768 bytes long, last 256 bytes are useless + } + } +} + +static DWORD d_ul_x, d_ul_y, d_lr_x, d_lr_y; + +typedef struct { + int ul_x, ul_y, lr_x, lr_y; +} FB_PART; + +static void DrawPart(int scr_ul_x, int scr_ul_y, int prt_ul_x, int prt_ul_y, int width, int height, float scale_x, float scale_y) +{ + WORD * dst = new WORD[width*height]; + DWORD shift = ((d_ul_y+prt_ul_y) * rdp.ci_width + d_ul_x + prt_ul_x) << 1; + WORD * src = (WORD*)(gfx.RDRAM+rdp.cimg+shift); + WORD c; + for (int y=0; y < height; y++) + { + for (int x=0; x < width; x++) + { + c = src[(int(x*scale_x)+int(y*scale_y)*rdp.ci_width)^1]; + dst[x+y*width] = c?((c >> 1) | 0x8000):0; + } + } + + grLfbWriteRegion(GR_BUFFER_BACKBUFFER, + scr_ul_x, + scr_ul_y, + GR_LFB_SRC_FMT_1555, + width, + height, + FXTRUE, + width<<1, + dst); + delete[] dst; +} + +static void DrawFrameBufferToScreen() +{ + FRDP("DrawFrameBufferToScreen. cimg: %08lx, ul_x: %d, uly: %d, lr_x: %d, lr_y: %d\n", rdp.cimg, d_ul_x, d_ul_y, d_lr_x, d_lr_y); + if (!fullscreen) + return; + grColorCombine (GR_COMBINE_FUNCTION_SCALE_OTHER, + GR_COMBINE_FACTOR_ONE, + GR_COMBINE_LOCAL_NONE, + GR_COMBINE_OTHER_TEXTURE, + FXFALSE); + grAlphaCombine (GR_COMBINE_FUNCTION_SCALE_OTHER, + GR_COMBINE_FACTOR_ONE, + GR_COMBINE_LOCAL_NONE, + GR_COMBINE_OTHER_TEXTURE, + FXFALSE); + grConstantColorValue (0xFFFFFFFF); + grAlphaBlendFunction( GR_BLEND_SRC_ALPHA, + GR_BLEND_ONE_MINUS_SRC_ALPHA, + GR_BLEND_ONE, + GR_BLEND_ZERO); + rdp.update |= UPDATE_COMBINE; + + float scale_x_dst = (float)settings.scr_res_x / rdp.vi_width;//(float)max(rdp.frame_buffers[rdp.main_ci_index].width, rdp.ci_width); + float scale_y_dst = (float)settings.scr_res_y / rdp.vi_height;//(float)max(rdp.frame_buffers[rdp.main_ci_index].height, rdp.ci_lower_bound); + float scale_x_src = (float)rdp.vi_width / (float)settings.scr_res_x;//(float)max(rdp.frame_buffers[rdp.main_ci_index].width, rdp.ci_width); + float scale_y_src = (float)rdp.vi_height / (float)settings.scr_res_y;//(float)max(rdp.frame_buffers[rdp.main_ci_index].height, rdp.ci_lower_bound); + int src_width = d_lr_x - d_ul_x + 1; + int src_height = d_lr_y - d_ul_y + 1; + int dst_width, dst_height, ul_x, ul_y; + + if (!settings.fb_optimize_write || ((src_width < 33) && (src_height < 33))) + { + dst_width = int(src_width*scale_x_dst); + dst_height = int(src_height*scale_y_dst); + ul_x = int(d_ul_x*scale_x_dst); + ul_y = int(d_ul_y*scale_y_dst); + DrawPart(ul_x, ul_y, 0, 0, dst_width, dst_height, scale_x_src, scale_y_src); + memset(gfx.RDRAM+rdp.cimg, 0, rdp.ci_width*rdp.ci_height*rdp.ci_size); + return; + } + + FB_PART parts[8]; + int p; + for (p = 0; p < 8; p++) + { + parts[p].lr_x = parts[p].lr_y = 0; + parts[p].ul_x = parts[p].ul_y = 0xFFFF; + } + + int num_of_parts = 0; + int cur_part = 0; + int most_left = d_ul_x; + int most_right = d_lr_x; + DWORD shift = (d_ul_y * rdp.ci_width + d_ul_x) << 1; + WORD * src = (WORD*)(gfx.RDRAM+rdp.cimg+shift); + for (int h = 0; h < src_height; h++) + { + cur_part = 0; + int w = 0; + while (w < src_width) + { + while (w < src_width) + { + if (src[(w+h*rdp.ci_width)^1] == 0) + w++; + else + break; + } + if (w == src_width) + break; + if (num_of_parts == 0) //first part + { + parts[0].ul_x = w; + most_left = w; + parts[0].ul_y = h; + cur_part = 0; + } + else if (w < most_left - 2) //new part + { + parts[num_of_parts].ul_x = w; + most_left = w; + parts[num_of_parts].ul_y = h; + cur_part = num_of_parts; + num_of_parts++; + } + else if (w > most_right + 2) //new part + { + parts[num_of_parts].ul_x = w; + most_right = w; + parts[num_of_parts].ul_y = h; + cur_part = num_of_parts; + num_of_parts++; + } + else + { + for (p = 0; p < num_of_parts; p++) + { + if ((w > parts[p].ul_x - 2) && (w < parts[p].lr_x+2)) + { + if (w < parts[p].ul_x) parts[p].ul_x = w; + break; + } + } + cur_part = p; + } + while (w < src_width) + { + if (src[(w+h*rdp.ci_width)^1] != 0) + w++; + else + break; + } + if (num_of_parts == 0) //first part + { + parts[0].lr_x = w; + most_right = w; + num_of_parts++; + } + else + { + if (parts[cur_part].lr_x < w) parts[cur_part].lr_x = w; + if (most_right < w) most_right = w; + parts[cur_part].lr_y = h; + } + } + } + /* + for (p = 0; p < num_of_parts; p++) + { + FRDP("part#%d ul_x: %d, ul_y: %d, lr_x: %d, lr_y: %d\n", p, parts[p].ul_x, parts[p].ul_y, parts[p].lr_x, parts[p].lr_y); + } + */ + for (p = 0; p < num_of_parts; p++) + { + dst_width = int((parts[p].lr_x-parts[p].ul_x + 1)*scale_x_dst); + dst_height = int((parts[p].lr_y-parts[p].ul_y + 1)*scale_y_dst); + ul_x = int((d_ul_x+parts[p].ul_x)*scale_x_dst); + ul_y = int((d_ul_y+parts[p].ul_y)*scale_y_dst); + DrawPart(ul_x, ul_y, parts[p].ul_x, parts[p].ul_y, dst_width, dst_height, scale_x_src, scale_y_src); + } + memset(gfx.RDRAM+rdp.cimg, 0, rdp.ci_width*rdp.ci_height*rdp.ci_size); +} + +#define RGBA16TO32(color) \ + ((color&1)?0xFF:0) | \ + ((DWORD)((float)((color&0xF800) >> 11) / 31.0f * 255.0f) << 24) | \ + ((DWORD)((float)((color&0x07C0) >> 6) / 31.0f * 255.0f) << 16) | \ +((DWORD)((float)((color&0x003E) >> 1) / 31.0f * 255.0f) << 8) + +static void CopyFrameBuffer (GrBuffer_t buffer = GR_BUFFER_BACKBUFFER) +{ + if (!fullscreen) + return; + FRDP ("CopyFrameBuffer: %08lx... ", rdp.cimg); + + // don't bother to write the stuff in asm... the slow part is the read from video card, + // not the copy. + + int width = rdp.ci_width;//*gfx.VI_WIDTH_REG; + int height; + if (settings.fb_smart && !settings.PPL) + { + int ind = (rdp.ci_count > 0)?rdp.ci_count-1:0; + height = rdp.frame_buffers[ind].height; + } + else + { + height = rdp.ci_lower_bound; + if (settings.PPL) + height -= rdp.ci_upper_bound; + } + FRDP ("width: %d, height: %d... ", width, height); + + if (rdp.scale_x < 1.1f) + { + WORD * ptr_src = new WORD[width*height]; + if (grLfbReadRegion(buffer, + 0, + 0,//rdp.ci_upper_bound, + width, + height, + width<<1, + ptr_src)) + { + WORD *ptr_dst = (WORD*)(gfx.RDRAM+rdp.cimg); + DWORD *ptr_dst32 = (DWORD*)(gfx.RDRAM+rdp.cimg); + WORD c; + + for (int y=0; y 0) + c = (c&0xFFC0) | ((c&0x001F) << 1) | 1; + } + else + { + c = (c&0xFFC0) | ((c&0x001F) << 1) | 1; + } + if (rdp.ci_size == 2) + ptr_dst[(x + y * width)^1] = c; + else + ptr_dst32[x + y * width] = RGBA16TO32(c); + } + } + /* + } + else //8bit I or CI + { + BYTE *ptr_dst = (BYTE*)(gfx.RDRAM+rdp.cimg); + WORD c; + + for (int y=0; y>5)&0x3F)/63.0f*85.0f); + BYTE r = (BYTE)((float)((c>>11)&0x1F)/31.0f*85.0f); + c = (c&0xFFC0) | ((c&0x001F) << 1) | 1; + // FRDP("src: %08lx, dst: %d\n",c,(BYTE)(r+g+b)); + ptr_dst[(x + y * width)^1] = (BYTE)(r+g+b); + // ptr_dst[(x + y * width)^1] = (BYTE)((c>>8)&0xFF); + } + } + } */ + RDP ("ReadRegion. Framebuffer copy complete.\n"); + } + else + { + RDP ("Framebuffer copy failed.\n"); + } + delete[] ptr_src; + } + else + { + if (rdp.motionblur && settings.fb_hires) + { + return; + } + else + { + float scale_x = (float)settings.scr_res_x / rdp.vi_width;//(float)max(rdp.frame_buffers[rdp.main_ci_index].width, rdp.ci_width); + float scale_y = (float)settings.scr_res_y / rdp.vi_height;//(float)max(rdp.frame_buffers[rdp.main_ci_index].height, rdp.ci_lower_bound); + + FRDP("width: %d, height: %d, ul_y: %d, lr_y: %d, scale_x: %f, scale_y: %f, ci_width: %d, ci_height: %d\n",width, height, rdp.ci_upper_bound, rdp.ci_lower_bound, scale_x, scale_y, rdp.ci_width, rdp.ci_height); + GrLfbInfo_t info; + info.size = sizeof(GrLfbInfo_t); + + + // VP 888 disconnected for now + if (1||rdp.ci_size <= 2) { + if (grLfbLock (GR_LFB_READ_ONLY, + buffer, + GR_LFBWRITEMODE_565, + GR_ORIGIN_UPPER_LEFT, + FXFALSE, + &info)) + { + WORD *ptr_src = (WORD*)info.lfbPtr; + WORD *ptr_dst = (WORD*)(gfx.RDRAM+rdp.cimg); + DWORD *ptr_dst32 = (DWORD*)(gfx.RDRAM+rdp.cimg); + WORD c; + DWORD stride = info.strideInBytes>>1; + + BOOL read_alpha = settings.fb_read_alpha; + if (settings.PM && rdp.frame_buffers[rdp.ci_count-1].status != ci_aux) + read_alpha = FALSE; + for (int y=0; y>1; + + for (int y=0; y 0) + SwapOK = TRUE; + rdp.updatescreen = 1; + + rdp.tri_n = 0; // 0 triangles so far this frame + rdp.debug_n = 0; + + rdp.model_i = 0; // 0 matrices so far in stack + //stack_size can be less then 32! Important for Silicon Vally. Thanks Orkin! + rdp.model_stack_size = min(32, (*(DWORD*)(gfx.DMEM+0x0FE4))>>6); + if (rdp.model_stack_size == 0) + rdp.model_stack_size = 32; + rdp.fb_drawn = rdp.fb_drawn_front = FALSE; + rdp.update = 0x7FFFFFFF; // All but clear cache + rdp.geom_mode = 0; + rdp.acmp = 0; + rdp.maincimg[1] = rdp.maincimg[0]; + rdp.skip_drawing = FALSE; + rdp.s2dex_tex_loaded = FALSE; + fbreads_front = fbreads_back = 0; + rdp.fog_multiplier = rdp.fog_offset = 0; + rdp.zsrc = 0; + + if (cpu_fb_write == TRUE) + DrawFrameBufferToScreen(); + cpu_fb_write = FALSE; + cpu_fb_read_called = FALSE; + cpu_fb_write_called = FALSE; + cpu_fb_ignore = FALSE; + d_ul_x = 0xffff; + d_ul_y = 0xffff; + d_lr_x = 0; + d_lr_y = 0; + + //analize possible frame buffer usage + if (settings.fb_smart) + DetectFrameBufferUsage(); + if (!settings.lego || rdp.num_of_ci > 1) + rdp.last_bg = 0; + //* End of set states *// + + + // Get the start of the display list and the length of it + DWORD dlist_start = *(DWORD*)(gfx.DMEM+0xFF0); + DWORD dlist_length = *(DWORD*)(gfx.DMEM+0xFF4); + FRDP("--- NEW DLIST --- crc: %08lx, ucode: %d, fbuf: %08lx, fbuf_width: %d, dlist start: %08lx, dlist_lenght: %d\n", uc_crc, settings.ucode, *gfx.VI_ORIGIN_REG, *gfx.VI_WIDTH_REG, dlist_start, dlist_length); + FRDP_E("--- NEW DLIST --- crc: %08lx, ucode: %d, fbuf: %08lx\n", uc_crc, settings.ucode, *gfx.VI_ORIGIN_REG); + + if (settings.tonic && dlist_length < 16) + { + rdp_fullsync(); + FRDP_E("DLIST is too short!\n"); + return; + } + + // Start executing at the start of the display list + rdp.pc_i = 0; + rdp.pc[rdp.pc_i] = dlist_start; + rdp.dl_count = -1; + rdp.halt = 0; + DWORD a; + + // catches exceptions so that it doesn't freeze +#ifdef CATCH_EXCEPTIONS + try { +#endif + + // MAIN PROCESSING LOOP + do { + + // Get the address of the next command + a = rdp.pc[rdp.pc_i] & BMASK; + + // Load the next command and its input + rdp.cmd0 = ((DWORD*)gfx.RDRAM)[a>>2]; // \ Current command, 64 bit + rdp.cmd1 = ((DWORD*)gfx.RDRAM)[(a>>2)+1]; // / + // cmd2 and cmd3 are filled only when needed, by the function that needs them + + // Output the address before the command +#ifdef LOG_COMMANDS + FRDP ("%08lx (c0:%08lx, c1:%08lx): ", a, rdp.cmd0, rdp.cmd1); +#else + FRDP ("%08lx: ", a); +#endif + + // Go to the next instruction + rdp.pc[rdp.pc_i] = (a+8) & BMASK; + +#ifdef PERFORMANCE + QueryPerformanceCounter ((LARGE_INTEGER*)&perf_cur); +#endif + // Process this instruction + gfx_instruction[settings.ucode][rdp.cmd0>>24] (); + + // check DL counter + if (rdp.dl_count != -1) + { + rdp.dl_count --; + if (rdp.dl_count == 0) + { + rdp.dl_count = -1; + + RDP ("End of DL\n"); + rdp.pc_i --; + } + } + +#ifdef PERFORMANCE + QueryPerformanceCounter ((LARGE_INTEGER*)&perf_next); + __int64 t = perf_next-perf_cur; + sprintf (out_buf, "perf %08lx: %016I64d\n", a-8, t); + rdp_log << out_buf; +#endif + + } while (!rdp.halt); +#ifdef CATCH_EXCEPTIONS + } catch (...) { + + if (fullscreen) ReleaseGfx (); + WriteLog(M64MSG_ERROR, "The GFX plugin caused an exception and has been disabled."); + exception = TRUE; + } +#endif + + if (settings.fb_smart) + { + rdp.scale_x = rdp.scale_x_bak; + rdp.scale_y = rdp.scale_y_bak; + } + if (settings.fb_read_always) + { + CopyFrameBuffer (); + } + if (rdp.yuv_image) + { + DrawYUVImageToFrameBuffer(); + rdp.yuv_image = FALSE; +// FRDP("yuv image draw. ul_x: %f, ul_y: %f, lr_x: %f, lr_y: %f, begin: %08lx\n", +// rdp.yuv_ul_x, rdp.yuv_ul_y, rdp.yuv_lr_x, rdp.yuv_lr_y, rdp.yuv_im_begin); + rdp.yuv_ul_x = rdp.yuv_ul_y = rdp.yuv_lr_x = rdp.yuv_lr_y = 0; + rdp.yuv_im_begin = 0x00FFFFFF; + } + if (rdp.cur_image) + CloseTextureBuffer(rdp.read_whole_frame && (settings.PM || rdp.swap_ci_index >= 0)); + + if (settings.TGR2 && rdp.vi_org_reg != *gfx.VI_ORIGIN_REG && CI_SET) + { + newSwapBuffers (); + CI_SET = FALSE; + } + RDP("ProcessDList end\n"); +} + +#ifdef __cplusplus +} +#endif + +// undef - undefined instruction, always ignore +static void undef() +{ + FRDP_E("** undefined ** (%08lx)\n", rdp.cmd0); + FRDP("** undefined ** (%08lx) - IGNORED\n", rdp.cmd0); + #ifdef _FINAL_RELEASE_ + *gfx.MI_INTR_REG |= 0x20; + gfx.CheckInterrupts(); + rdp.halt = 1; + #endif +} + +// spnoop - no operation, always ignore +static void spnoop() +{ + RDP("spnoop\n"); +} + +// noop - no operation, always ignore +static void rdp_noop() +{ + RDP("noop\n"); +} + +static void ys_memrect () +{ + DWORD tile = (WORD)((rdp.cmd1 & 0x07000000) >> 24); + + DWORD lr_x = (WORD)((rdp.cmd0 & 0x00FFF000) >> 14); + DWORD lr_y = (WORD)((rdp.cmd0 & 0x00000FFF) >> 2); + DWORD ul_x = (WORD)((rdp.cmd1 & 0x00FFF000) >> 14); + DWORD ul_y = (WORD)((rdp.cmd1 & 0x00000FFF) >> 2); + + rdp.pc[rdp.pc_i] += 16; // texrect is 196-bit + + if (lr_y > rdp.scissor_o.lr_y) lr_y = rdp.scissor_o.lr_y; + + FRDP ("memrect (%d, %d, %d, %d), ci_width: %d\n", ul_x, ul_y, lr_x, lr_y, rdp.ci_width); + + DWORD y, width = lr_x - ul_x; + DWORD texaddr = rdp.addr[rdp.tiles[tile].t_mem]; + DWORD tex_width = rdp.tiles[tile].line << 3; + + for (y = ul_y; y < lr_y; y++) { + BYTE *src = gfx.RDRAM + texaddr + (y - ul_y) * tex_width; + BYTE *dst = gfx.RDRAM + rdp.cimg + ul_x + y * rdp.ci_width; + memcpy (dst, src, width); + } +} + +static void pm_palette_mod () +{ + BYTE envr = (BYTE)((float)((rdp.env_color >> 24)&0xFF)/255.0f*31.0f); + BYTE envg = (BYTE)((float)((rdp.env_color >> 16)&0xFF)/255.0f*31.0f); + BYTE envb = (BYTE)((float)((rdp.env_color >> 8)&0xFF)/255.0f*31.0f); + WORD env16 = (WORD)((envr<<11)|(envg<<6)|(envb<<1)|1); + BYTE prmr = (BYTE)((float)((rdp.prim_color >> 24)&0xFF)/255.0f*31.0f); + BYTE prmg = (BYTE)((float)((rdp.prim_color >> 16)&0xFF)/255.0f*31.0f); + BYTE prmb = (BYTE)((float)((rdp.prim_color >> 8)&0xFF)/255.0f*31.0f); + WORD prim16 = (WORD)((prmr<<11)|(prmg<<6)|(prmb<<1)|1); + WORD * dst = (WORD*)(gfx.RDRAM+rdp.cimg); + for (int i = 0; i < 16; i++) + { + dst[i^1] = (rdp.pal_8[i]&1) ? prim16 : env16; + } + RDP("Texrect palette modification\n"); +} + +static void rdp_texrect() +{ + DWORD a = rdp.pc[rdp.pc_i]; + rdp.cmd2 = ((DWORD*)gfx.RDRAM)[(a>>2)+1]; + rdp.cmd3 = ((DWORD*)gfx.RDRAM)[(a>>2)+3]; + + if (settings.ASB) //modified Rice's hack for All-Star Baseball games + { + DWORD dwHalf1 = (((DWORD*)gfx.RDRAM)[(a>>2)+0]) >> 24; + if ((dwHalf1 != 0xF1) && (dwHalf1 != 0xb3)) + { + rdp.pc[rdp.pc_i] += 16; + } + else + { + rdp.pc[rdp.pc_i] += 8; + rdp.cmd3 = rdp.cmd2; + rdp.cmd2 = 0; + } + } + else if (settings.yoshi && settings.ucode == 6) + { + ys_memrect(); + return; + } + else + { + rdp.pc[rdp.pc_i] += 16; // texrect is 196-bit + } + + if (rdp.skip_drawing || (!settings.fb_smart && (rdp.cimg == rdp.zimg))) + { + if (settings.PM && rdp.ci_status == ci_useless) + { + pm_palette_mod (); + } + else + { + RDP("Texrect skipped\n"); + } + return; + } + + if ((settings.ucode == 8) && rdp.cur_image && rdp.cur_image->format) + { + //FRDP("Wrong Texrect. texaddr: %08lx, cimg: %08lx, cimg_end: %08lx\n", rdp.timg.addr, rdp.maincimg[1].addr, rdp.maincimg[1].addr+rdp.ci_width*rdp.ci_height*rdp.ci_size); + RDP("Shadow texrect is skipped.\n"); + rdp.tri_n += 2; + return; + } + + WORD ul_x = (WORD)((rdp.cmd1 & 0x00FFF000) >> 14); + WORD ul_y = (WORD)((rdp.cmd1 & 0x00000FFF) >> 2); + WORD lr_x = (WORD)((rdp.cmd0 & 0x00FFF000) >> 14); + WORD lr_y = (WORD)((rdp.cmd0 & 0x00000FFF) >> 2); + if (ul_x >= lr_x) return; + if (rdp.cycle_mode > 1 || settings.increase_texrect_edge) + { + lr_x++; + lr_y++; + } + if (ul_y == lr_y) + { + lr_y ++; + } + + //* + if (rdp.hires_tex && settings.fb_optimize_texrect) + { + if (!rdp.hires_tex->drawn) + { + DRAWIMAGE d; + d.imageX = 0; + d.imageW = (WORD)rdp.hires_tex->width; + d.frameX = ul_x; + d.frameW = (WORD)(rdp.hires_tex->width);//(WORD)(ul_x + rdp.hires_tex->width);//lr_x; + + d.imageY = 0; + d.imageH = (WORD)rdp.hires_tex->height; + d.frameY = ul_y; + d.frameH = (WORD)(rdp.hires_tex->height);//(ul_y + rdp.hires_tex->height); + FRDP("texrect. ul_x: %d, ul_y: %d, lr_x: %d, lr_y: %d, width: %d, height: %d\n", ul_x, ul_y, lr_x, lr_y, rdp.hires_tex->width, rdp.hires_tex->height); + d.scaleX = 1.0f; + d.scaleY = 1.0f; + DrawHiresImage(&d, rdp.hires_tex->width == rdp.ci_width); + rdp.hires_tex->drawn = TRUE; + } + return; + } +//*/ + // framebuffer workaround for Zelda: MM LOT + if ((rdp.othermode_l & 0xFFFF0000) == 0x0f5a0000) + return; + + /*Gonetz*/ + //hack for Zelda MM. it removes black texrects which cover all geometry in "Link meets Zelda" cut scene + if (settings.zelda && rdp.timg.addr >= rdp.cimg && rdp.timg.addr < rdp.ci_end) + { + FRDP("Wrong Texrect. texaddr: %08lx, cimg: %08lx, cimg_end: %08lx\n", rdp.cur_cache[0]->addr, rdp.cimg, rdp.cimg+rdp.ci_width*rdp.ci_height*2); + rdp.tri_n += 2; + return; + } +//* + //hack for Banjo2. it removes black texrects under Banjo + if (!settings.fb_hires && ((rdp.cycle1 << 16) | (rdp.cycle2 & 0xFFFF)) == 0xFFFFFFFF && (rdp.othermode_l & 0xFFFF0000) == 0x00500000) + { + rdp.tri_n += 2; + return; + } +//*/ + //* + //remove motion blur in night vision + if ((settings.ucode == 7) && (rdp.maincimg[1].addr != rdp.maincimg[0].addr) && (rdp.timg.addr >= rdp.maincimg[1].addr) && (rdp.timg.addr < (rdp.maincimg[1].addr+rdp.ci_width*rdp.ci_height*rdp.ci_size))) + { + if (settings.fb_smart) + if (rdp.frame_buffers[rdp.ci_count-1].status == ci_copy_self || !settings.fb_motionblur) + { + // FRDP("Wrong Texrect. texaddr: %08lx, cimg: %08lx, cimg_end: %08lx\n", rdp.timg.addr, rdp.maincimg[1], rdp.maincimg[1]+rdp.ci_width*rdp.ci_height*rdp.ci_size); + RDP("Wrong Texrect.\n"); + rdp.tri_n += 2; + return; + } + } +//*/ + + int i; + + DWORD tile = (WORD)((rdp.cmd1 & 0x07000000) >> 24); + + // update MUST be at the beginning, b/c of update_scissor + if (rdp.cycle_mode == 2) + { + rdp.tex = 1; + rdp.allow_combine = 0; + + cmb.tmu1_func = cmb.tmu0_func = GR_COMBINE_FUNCTION_LOCAL; + cmb.tmu1_fac = cmb.tmu0_fac = GR_COMBINE_FACTOR_NONE; + cmb.tmu1_a_func = cmb.tmu0_a_func = GR_COMBINE_FUNCTION_LOCAL; + cmb.tmu1_a_fac = cmb.tmu0_a_fac = GR_COMBINE_FACTOR_NONE; + cmb.tmu1_invert = cmb.tmu0_invert = FXFALSE; + cmb.tmu1_a_invert = cmb.tmu0_a_invert = FXFALSE; + } + + rdp.texrecting = 1; + + DWORD prev_tile = rdp.cur_tile; + rdp.cur_tile = tile; + rdp.update |= UPDATE_COMBINE; + update (); + + rdp.texrecting = 0; + rdp.allow_combine = 1; + + if (!rdp.cur_cache[0]) + { + rdp.cur_tile = prev_tile; + rdp.tri_n += 2; + return; + } + // **** + // ** Texrect offset by Gugaman ** + float off_x = (float)((short)((rdp.cmd2 & 0xFFFF0000) >> 16)) / 32.0f; + if ((int(off_x) == 512) && (rdp.timg.width < 512)) off_x = 0.0f; + float off_y = (float)((short)(rdp.cmd2 & 0x0000FFFF)) / 32.0f; + float dsdx = (float)((short)((rdp.cmd3 & 0xFFFF0000) >> 16)) / 1024.0f; + float dtdy = (float)((short)(rdp.cmd3 & 0x0000FFFF)) / 1024.0f; + + if (rdp.cycle_mode == 2) dsdx /= 4.0f; + + float s_ul_x = ul_x * rdp.scale_x + rdp.offset_x; + float s_lr_x = lr_x * rdp.scale_x + rdp.offset_x; + float s_ul_y = ul_y * rdp.scale_y + rdp.offset_y; + float s_lr_y = lr_y * rdp.scale_y + rdp.offset_y; + + FRDP("texrect (%d, %d, %d, %d), tile: %d, #%d, #%d\n", ul_x, ul_y, lr_x, lr_y, tile, rdp.tri_n, rdp.tri_n+1); + FRDP ("(%f, %f) -> (%f, %f), s: (%d, %d) -> (%d, %d)\n", s_ul_x, s_ul_y, s_lr_x, s_lr_y, rdp.scissor.ul_x, rdp.scissor.ul_y, rdp.scissor.lr_x, rdp.scissor.lr_y); + FRDP("\toff_x: %f, off_y: %f, dsdx: %f, dtdy: %f\n", off_x, off_y, dsdx, dtdy); + + float off_size_x; + float off_size_y; + + if ( ((rdp.cmd0>>24)&0xFF) == 0xE5 ) //texrectflip + { + off_size_x = (float)((lr_y - ul_y - 1) * dsdx); + off_size_y = (float)((lr_x - ul_x - 1) * dtdy); + } + else + { + off_size_x = (float)((lr_x - ul_x - 1) * dsdx); + off_size_y = (float)((lr_y - ul_y - 1) * dtdy); + } + + float lr_u0, lr_v0, ul_u0, ul_v0, lr_u1, lr_v1, ul_u1, ul_v1; + + if (rdp.cur_cache[0] && (rdp.tex & 1)) + { + float sx=1, sy=1; + if (rdp.tiles[rdp.cur_tile].shift_s) + { + if (rdp.tiles[rdp.cur_tile].shift_s > 10) + sx = (float)(1 << (16 - rdp.tiles[rdp.cur_tile].shift_s)); + else + sx = (float)1.0f/(1 << rdp.tiles[rdp.cur_tile].shift_s); + } + if (rdp.tiles[rdp.cur_tile].shift_t) + { + if (rdp.tiles[rdp.cur_tile].shift_t > 10) + sy = (float)(1 << (16 - rdp.tiles[rdp.cur_tile].shift_t)); + else + sy = (float)1.0f/(1 << rdp.tiles[rdp.cur_tile].shift_t); + } + if (rdp.hires_tex && rdp.hires_tex->tile == 0) + { + off_x += rdp.hires_tex->u_shift;// + rdp.tiles[0].ul_s; //commented for Paper Mario motion blur + off_y += rdp.hires_tex->v_shift;// + rdp.tiles[0].ul_t; + FRDP("hires_tex ul_s: %d, ul_t: %d, off_x: %f, off_y: %f\n", rdp.tiles[0].ul_s, rdp.tiles[0].ul_t, off_x, off_y); + ul_u0 = off_x * sx; + ul_v0 = off_y * sy; + + lr_u0 = ul_u0 + off_size_x * sx; + lr_v0 = ul_v0 + off_size_y * sy; + + ul_u0 *= rdp.hires_tex->u_scale; + ul_v0 *= rdp.hires_tex->v_scale; + lr_u0 *= rdp.hires_tex->u_scale; + lr_v0 *= rdp.hires_tex->v_scale; + FRDP("hires_tex ul_u0: %f, ul_v0: %f, lr_u0: %f, lr_v0: %f\n", ul_u0, ul_v0, lr_u0, lr_v0); + } + else + { + ul_u0 = off_x * sx; + ul_v0 = off_y * sy; + + ul_u0 -= rdp.tiles[rdp.cur_tile].f_ul_s; + ul_v0 -= rdp.tiles[rdp.cur_tile].f_ul_t; + + lr_u0 = ul_u0 + off_size_x * sx; + lr_v0 = ul_v0 + off_size_y * sy; + + ul_u0 = rdp.cur_cache[0]->c_off + rdp.cur_cache[0]->c_scl_x * ul_u0; + lr_u0 = rdp.cur_cache[0]->c_off + rdp.cur_cache[0]->c_scl_x * lr_u0; + ul_v0 = rdp.cur_cache[0]->c_off + rdp.cur_cache[0]->c_scl_y * ul_v0; + lr_v0 = rdp.cur_cache[0]->c_off + rdp.cur_cache[0]->c_scl_y * lr_v0; + } + } + else + { + ul_u0 = ul_v0 = lr_u0 = lr_v0 = 0; + } + if (rdp.cur_cache[1] && (rdp.tex & 2)) + { + float sx=1, sy=1; + + if (rdp.tiles[rdp.cur_tile+1].shift_s) + { + if (rdp.tiles[rdp.cur_tile+1].shift_s > 10) + sx = (float)(1 << (16 - rdp.tiles[rdp.cur_tile+1].shift_s)); + else + sx = (float)1.0f/(1 << rdp.tiles[rdp.cur_tile+1].shift_s); + } + if (rdp.tiles[rdp.cur_tile+1].shift_t) + { + if (rdp.tiles[rdp.cur_tile+1].shift_t > 10) + sy = 1;//(float)(1 << (16 - rdp.tiles[rdp.cur_tile+1].shift_t)); + else + sy = (float)1.0f/(1 << rdp.tiles[rdp.cur_tile+1].shift_t); + } + + if (rdp.hires_tex && rdp.hires_tex->tile == 1) + { + off_x += rdp.hires_tex->u_shift;// + rdp.tiles[0].ul_s; //commented for Paper Mario motion blur + off_y += rdp.hires_tex->v_shift;// + rdp.tiles[0].ul_t; + FRDP("hires_tex ul_s: %d, ul_t: %d, off_x: %f, off_y: %f\n", rdp.tiles[0].ul_s, rdp.tiles[0].ul_t, off_x, off_y); + ul_u1 = off_x * sx; + ul_v1 = off_y * sy; + + lr_u1 = ul_u1 + off_size_x * sx; + lr_v1 = ul_v1 + off_size_y * sy; + + ul_u1 *= rdp.hires_tex->u_scale; + ul_v1 *= rdp.hires_tex->v_scale; + lr_u1 *= rdp.hires_tex->u_scale; + lr_v1 *= rdp.hires_tex->v_scale; + FRDP("hires_tex ul_u1: %f, ul_v1: %f, lr_u1: %f, lr_v1: %f\n", ul_u0, ul_v0, lr_u0, lr_v0); + + } + else + { + ul_u1 = off_x * sx; + ul_v1 = off_y * sy; + + ul_u1 -= rdp.tiles[rdp.cur_tile+1].f_ul_s; + ul_v1 -= rdp.tiles[rdp.cur_tile+1].f_ul_t; + + lr_u1 = ul_u1 + off_size_x * sx; + lr_v1 = ul_v1 + off_size_y * sy; + + ul_u1 = rdp.cur_cache[1]->c_off + rdp.cur_cache[1]->c_scl_x * ul_u1; + lr_u1 = rdp.cur_cache[1]->c_off + rdp.cur_cache[1]->c_scl_x * lr_u1; + ul_v1 = rdp.cur_cache[1]->c_off + rdp.cur_cache[1]->c_scl_y * ul_v1; + lr_v1 = rdp.cur_cache[1]->c_off + rdp.cur_cache[1]->c_scl_y * lr_v1; + } + } + else + { + ul_u1 = ul_v1 = lr_u1 = lr_v1 = 0; + } + rdp.cur_tile = prev_tile; + + // **** + + FRDP (" scissor: (%d, %d) -> (%d, %d)\n", rdp.scissor.ul_x, rdp.scissor.ul_y, rdp.scissor.lr_x, rdp.scissor.lr_y); + + CCLIP2 (s_ul_x, s_lr_x, ul_u0, lr_u0, ul_u1, lr_u1, (float)rdp.scissor.ul_x, (float)rdp.scissor.lr_x); + CCLIP2 (s_ul_y, s_lr_y, ul_v0, lr_v0, ul_v1, lr_v1, (float)rdp.scissor.ul_y, (float)rdp.scissor.lr_y); +// CCLIP2 (s_lr_y, s_ul_y, lr_v0, ul_v0, lr_v1, ul_v1, (float)rdp.scissor.ul_y, (float)rdp.scissor.lr_y); + + FRDP (" draw at: (%f, %f) -> (%f, %f)\n", s_ul_x, s_ul_y, s_lr_x, s_lr_y); + + // DO NOT SET CLAMP MODE HERE + + float Z = 1.0f; + if (rdp.zsrc == 1 && (rdp.othermode_l & 0x00000030)) // othermode check makes sure it + // USES the z-buffer. Otherwise it returns bad (unset) values for lot and telescope + //in zelda:mm. + { + FRDP ("prim_depth = %d\n", rdp.prim_depth); + Z = rdp.prim_depth; + if (settings.increase_primdepth) + Z += 8.0f; + Z = ScaleZ(Z); + + grDepthBufferFunction (GR_CMP_LEQUAL); + rdp.update |= UPDATE_ZBUF_ENABLED; + } + else + { + RDP ("no prim_depth used, using 1.0\n"); + } + + VERTEX vstd[4] = { + { s_ul_x, s_ul_y, Z, 1.0f, ul_u0, ul_v0, ul_u1, ul_v1, { 0, 0, 0, 0}, 255 }, + { s_lr_x, s_ul_y, Z, 1.0f, lr_u0, ul_v0, lr_u1, ul_v1, { 0, 0, 0, 0}, 255 }, + { s_ul_x, s_lr_y, Z, 1.0f, ul_u0, lr_v0, ul_u1, lr_v1, { 0, 0, 0, 0}, 255 }, + { s_lr_x, s_lr_y, Z, 1.0f, lr_u0, lr_v0, lr_u1, lr_v1, { 0, 0, 0, 0}, 255 } }; + + if ( ((rdp.cmd0>>24)&0xFF) == 0xE5 ) //texrectflip + { + vstd[1].u0 = ul_u0; + vstd[1].v0 = lr_v0; + vstd[1].u1 = ul_u1; + vstd[1].v1 = lr_v1; + + vstd[2].u0 = lr_u0; + vstd[2].v0 = ul_v0; + vstd[2].u1 = lr_u1; + vstd[2].v1 = ul_v1; + } + + VERTEX *vptr = vstd; + int n_vertices = 4; + + VERTEX *vnew = 0; +// for (int j =0; j < 4; j++) +// FRDP("v[%d] u0: %f, v0: %f, u1: %f, v1: %f\n", j, vstd[j].u0, vstd[j].v0, vstd[j].u1, vstd[j].v1); + + + if (!rdp.hires_tex && rdp.cur_cache[0]->splits != 1) + { + // ** LARGE TEXTURE HANDLING ** + // *VERY* simple algebra for texrects + float min_u, min_x, max_u, max_x; + if (vstd[0].u0 < vstd[1].u0) + { + min_u = vstd[0].u0; + min_x = vstd[0].x; + max_u = vstd[1].u0; + max_x = vstd[1].x; + } + else + { + min_u = vstd[1].u0; + min_x = vstd[1].x; + max_u = vstd[0].u0; + max_x = vstd[0].x; + } + + int start_u_256, end_u_256; + + if (settings.ucode == 7) + { + start_u_256 = 0; + end_u_256 = (lr_x - ul_x - 1)>>8; + } + else + { + start_u_256 = (int)min_u >> 8; + end_u_256 = (int)max_u >> 8; + } + //FRDP(" min_u: %f, max_u: %f start: %d, end: %d\n", min_u, max_u, start_u_256, end_u_256); + + int splitheight = rdp.cur_cache[0]->splitheight; + + int num_verts_line = 2 + ((end_u_256-start_u_256)<<1); + vnew = new VERTEX [num_verts_line << 1]; + + n_vertices = num_verts_line << 1; + vptr = vnew; + + vnew[0] = vstd[0]; + vnew[0].u0 -= 256.0f * start_u_256; + vnew[0].v0 += splitheight * start_u_256; + vnew[0].u1 -= 256.0f * start_u_256; + vnew[0].v1 += splitheight * start_u_256; + vnew[1] = vstd[2]; + vnew[1].u0 -= 256.0f * start_u_256; + vnew[1].v0 += splitheight * start_u_256; + vnew[1].u1 -= 256.0f * start_u_256; + vnew[1].v1 += splitheight * start_u_256; + vnew[n_vertices-2] = vstd[1]; + vnew[n_vertices-2].u0 -= 256.0f * end_u_256; + vnew[n_vertices-2].v0 += splitheight * end_u_256; + vnew[n_vertices-2].u1 -= 256.0f * end_u_256; + vnew[n_vertices-2].v1 += splitheight * end_u_256; + vnew[n_vertices-1] = vstd[3]; + vnew[n_vertices-1].u0 -= 256.0f * end_u_256; + vnew[n_vertices-1].v0 += splitheight * end_u_256; + vnew[n_vertices-1].u1 -= 256.0f * end_u_256; + vnew[n_vertices-1].v1 += splitheight * end_u_256; + + // find the equation of the line of u,x + float m = (max_x - min_x) / (max_u - min_u); // m = delta x / delta u + float b = min_x - m * min_u; // b = y - m * x + + for (i=start_u_256; iu0 *= z->q; + z->v0 *= z->q; + z->u1 *= z->q; + z->v1 *= z->q; + + apply_shade_mods (z); + } + + if (fullscreen) + { + grFogMode (GR_FOG_DISABLE); + + grClipWindow (0, 0, settings.res_x, settings.res_y); + + grCullMode (GR_CULL_DISABLE); + + if (rdp.cycle_mode == 2) + { + grColorCombine (GR_COMBINE_FUNCTION_SCALE_OTHER, + GR_COMBINE_FACTOR_ONE, + GR_COMBINE_LOCAL_NONE, + GR_COMBINE_OTHER_TEXTURE, + FXFALSE); + grAlphaCombine (GR_COMBINE_FUNCTION_SCALE_OTHER, + GR_COMBINE_FACTOR_ONE, + GR_COMBINE_LOCAL_NONE, + GR_COMBINE_OTHER_TEXTURE, + FXFALSE); + grAlphaBlendFunction (GR_BLEND_ONE, + GR_BLEND_ZERO, + GR_BLEND_ZERO, + GR_BLEND_ZERO); + if (rdp.othermode_l & 1) + { + grAlphaTestFunction (GR_CMP_GEQUAL); + grAlphaTestReferenceValue (0x80); + } + else + grAlphaTestFunction (GR_CMP_ALWAYS); + + rdp.update |= UPDATE_ALPHA_COMPARE | UPDATE_COMBINE; + } + + ConvertCoordsConvert (vptr, n_vertices); + + if (settings.wireframe) + { + SetWireframeCol (); + grDrawLine (&vstd[0], &vstd[2]); + grDrawLine (&vstd[2], &vstd[1]); + grDrawLine (&vstd[1], &vstd[0]); + grDrawLine (&vstd[2], &vstd[3]); + grDrawLine (&vstd[3], &vstd[1]); + } + else + { + grDrawVertexArrayContiguous (GR_TRIANGLE_STRIP, n_vertices, vptr, sizeof(VERTEX)); + } + + if (debug.capture) + { + VERTEX vl[3]; + vl[0] = vstd[0]; + vl[1] = vstd[2]; + vl[2] = vstd[1]; + add_tri (vl, 3, TRI_TEXRECT); + rdp.tri_n ++; + vl[0] = vstd[2]; + vl[1] = vstd[3]; + vl[2] = vstd[1]; + add_tri (vl, 3, TRI_TEXRECT); + rdp.tri_n ++; + } + else + rdp.tri_n += 2; + + if (settings.fog && (rdp.flags & FOG_ENABLED)) + { + grFogMode (GR_FOG_WITH_TABLE_ON_FOGCOORD_EXT); + } + rdp.update |= UPDATE_CULL_MODE | UPDATE_VIEWPORT; + } + else + { + rdp.tri_n += 2; + } + + delete[] vnew; +} + +static void rdp_loadsync() +{ + RDP("loadsync - ignored\n"); +} + +static void rdp_pipesync() +{ + RDP("pipesync - ignored\n"); +} + +static void rdp_tilesync() +{ + RDP("tilesync - ignored\n"); +} + +static void rdp_fullsync() +{ + // Set an interrupt to allow the game to continue + *gfx.MI_INTR_REG |= 0x20; + gfx.CheckInterrupts(); + RDP("fullsync\n"); +} + +static void rdp_setkeygb() +{ + RDP_E("setkeygb - IGNORED\n"); + RDP("setkeygb - IGNORED\n"); +} + +static void rdp_setkeyr() +{ + RDP_E("setkeyr - IGNORED\n"); + RDP("setkeyr - IGNORED\n"); +} + +static void rdp_setconvert() +{ + /* + rdp.YUV_C0 = 1.1647f ; + rdp.YUV_C1 = 0.79931f ; + rdp.YUV_C2 = -0.1964f ; + rdp.YUV_C3 = -0.40651f; + rdp.YUV_C4 = 1.014f ; + */ + rdp.K5 = (BYTE)(rdp.cmd1&0x1FF); + RDP_E("setconvert - IGNORED\n"); + RDP("setconvert - IGNORED\n"); +} + +// +// setscissor - sets the screen clipping rectangle +// + +static void rdp_setscissor() +{ + // clipper resolution is 320x240, scale based on computer resolution + rdp.scissor_o.ul_x = /*min(*/(DWORD)(((rdp.cmd0 & 0x00FFF000) >> 14))/*, 320)*/; + rdp.scissor_o.ul_y = /*min(*/(DWORD)(((rdp.cmd0 & 0x00000FFF) >> 2))/*, 240)*/; + rdp.scissor_o.lr_x = /*min(*/(DWORD)(((rdp.cmd1 & 0x00FFF000) >> 14))/*, 320)*/; + rdp.scissor_o.lr_y = /*min(*/(DWORD)(((rdp.cmd1 & 0x00000FFF) >> 2))/*, 240)*/; + + rdp.ci_upper_bound = rdp.scissor_o.ul_y; + rdp.ci_lower_bound = rdp.scissor_o.lr_y; + + FRDP("setscissor: (%d,%d) -> (%d,%d)\n", rdp.scissor_o.ul_x, rdp.scissor_o.ul_y, + rdp.scissor_o.lr_x, rdp.scissor_o.lr_y); + + rdp.update |= UPDATE_SCISSOR; +} + +static void rdp_setprimdepth() +{ + rdp.prim_depth = (WORD)((rdp.cmd1 >> 16) & 0x7FFF); + + FRDP("setprimdepth: %d\n", rdp.prim_depth); +} + +static void rdp_setothermode() +{ +#define F3DEX2_SETOTHERMODE(cmd,sft,len,data) { \ + rdp.cmd0 = (cmd<<24) | ((32-(sft)-(len))<<8) | (((len)-1)); \ + rdp.cmd1 = data; \ + gfx_instruction[settings.ucode][cmd] (); \ +} +#define SETOTHERMODE(cmd,sft,len,data) { \ + rdp.cmd0 = (cmd<<24) | ((sft)<<8) | (len); \ + rdp.cmd1 = data; \ + gfx_instruction[settings.ucode][cmd] (); \ +} + + RDP("rdp_setothermode\n"); + + if ((settings.ucode == 2) || (settings.ucode == 8)) + { + int cmd0 = rdp.cmd0; + F3DEX2_SETOTHERMODE(0xE2, 0, 32, rdp.cmd1); // SETOTHERMODE_L + F3DEX2_SETOTHERMODE(0xE3, 0, 32, cmd0 & 0x00FFFFFF); // SETOTHERMODE_H + } + else + { + int cmd0 = rdp.cmd0; + SETOTHERMODE(0xB9, 0, 32, rdp.cmd1); // SETOTHERMODE_L + SETOTHERMODE(0xBA, 0, 32, cmd0 & 0x00FFFFFF); // SETOTHERMODE_H + } +} + +void load_palette (DWORD addr, WORD start, WORD count) +{ + RDP ("Loading palette... "); + WORD *dpal = rdp.pal_8 + start; + WORD end = start+count; + // WORD *spal = (WORD*)(gfx.RDRAM + (addr & BMASK)); + + for (WORD i=start; i>= 4; + end = start + (count >> 4); + for (WORD p = start; p < end; p++) + { + rdp.pal_8_crc[p] = CRC_Calculate( 0xFFFFFFFF, &rdp.pal_8[(p << 4)], 32 ); + } + rdp.pal_256_crc = CRC_Calculate( 0xFFFFFFFF, rdp.pal_8_crc, 64 ); + RDP ("Done.\n"); +} + +static void rdp_loadtlut() +{ + DWORD tile = (rdp.cmd1 >> 24) & 0x07; + WORD start = rdp.tiles[tile].t_mem - 256; // starting location in the palettes + // WORD start = ((WORD)(rdp.cmd1 >> 2) & 0x3FF) + 1; + WORD count = ((WORD)(rdp.cmd1 >> 14) & 0x3FF) + 1; // number to copy + + if (rdp.timg.addr + (count<<1) > BMASK) + count = (WORD)((BMASK - rdp.timg.addr) >> 1); + + if (start+count > 256) count = 256-start; + + FRDP("loadtlut: tile: %d, start: %d, count: %d, from: %08lx\n", tile, start, count, + rdp.timg.addr); + + load_palette (rdp.timg.addr, start, count); + + rdp.timg.addr += count << 1; +} + +BOOL tile_set = 0; +static void rdp_settilesize() +{ + DWORD tile = (rdp.cmd1 >> 24) & 0x07; + rdp.last_tile_size = tile; + + rdp.tiles[tile].f_ul_s = (float)((rdp.cmd0 >> 12) & 0xFFF) / 4.0f; + rdp.tiles[tile].f_ul_t = (float)(rdp.cmd0 & 0xFFF) / 4.0f; + + int ul_s = (((WORD)(rdp.cmd0 >> 14)) & 0x03ff); + int ul_t = (((WORD)(rdp.cmd0 >> 2 )) & 0x03ff); + int lr_s = (((WORD)(rdp.cmd1 >> 14)) & 0x03ff); + int lr_t = (((WORD)(rdp.cmd1 >> 2 )) & 0x03ff); + + if (lr_s == 0 && ul_s == 0) //pokemon puzzle league set such tile size + wrong_tile = tile; + else if (wrong_tile == (int)tile) + wrong_tile = -1; + + if (settings.use_sts1_only) + { + // ** USE FIRST SETTILESIZE ONLY ** + // This option helps certain textures while using the 'Alternate texture size method', + // but may break others. (should help more than break) + + if (tile_set) + { + // coords in 10.2 format + rdp.tiles[tile].ul_s = ul_s; + rdp.tiles[tile].ul_t = ul_t; + rdp.tiles[tile].lr_s = lr_s; + rdp.tiles[tile].lr_t = lr_t; + tile_set = 0; + } + } + else + { + // coords in 10.2 format + rdp.tiles[tile].ul_s = ul_s; + rdp.tiles[tile].ul_t = ul_t; + rdp.tiles[tile].lr_s = lr_s; + rdp.tiles[tile].lr_t = lr_t; + } + + // handle wrapping + if (rdp.tiles[tile].lr_s < rdp.tiles[tile].ul_s) rdp.tiles[tile].lr_s += 0x400; + if (rdp.tiles[tile].lr_t < rdp.tiles[tile].ul_t) rdp.tiles[tile].lr_t += 0x400; + + rdp.update |= UPDATE_TEXTURE; + + rdp.first = 1; + + if (tile == 0 && rdp.hires_tex) + //if ((rdp.tiles[tile].size != 2) || ((rdp.timg.width == 1) && (rdp.hires_tex->width != (DWORD)(lr_s+1)))) + if (((rdp.tiles[tile].format == 0) && (rdp.tiles[tile].size != 2)) || ((rdp.timg.width == 1) && (rdp.hires_tex->width != (DWORD)(lr_s+1)))) + rdp.hires_tex = 0; + if (rdp.hires_tex) + { + if (rdp.tiles[tile].format == 0 && rdp.hires_tex->format == 0) + { + if (tile == 1 && (DWORD)rdp.hires_tex->tmu != tile) + SwapTextureBuffer(); + rdp.hires_tex->tile = tile; + rdp.hires_tex->info.format = GR_TEXFMT_RGB_565; + FRDP ("hires_tex: tile: %d\n", tile); + } + else if (tile == 0) + { + rdp.hires_tex->info.format = GR_TEXFMT_ALPHA_INTENSITY_88; + } + } + FRDP ("settilesize: tile: %d, ul_s: %d, ul_t: %d, lr_s: %d, lr_t: %d\n", + tile, ul_s, ul_t, lr_s, lr_t); +} + +static void CopyswapBlock(int *pDst, unsigned int cnt, unsigned int SrcOffs) +{ + // copy and byteswap a block of 8-byte dwords + int rem = SrcOffs & 3; + if (rem == 0) + { + int *pSrc = (int *) ((uintptr_t) gfx.RDRAM + SrcOffs); + for (unsigned int x = 0; x < cnt; x++) + { + int s1 = bswap32(*pSrc++); + int s2 = bswap32(*pSrc++); + *pDst++ = s1; + *pDst++ = s2; + } + } + else + { + // set source pointer to 4-byte aligned RDRAM location before the start + int *pSrc = (int *) ((uintptr_t) gfx.RDRAM + (SrcOffs & 0xfffffffc)); + // do the first partial 32-bit word + int s0 = bswap32(*pSrc++); + for (int x = 0; x < rem; x++) + s0 >>= 8; + for (int x = 4; x > rem; x--) + { + *((char *) pDst) = s0 & 0xff; + pDst = (int *) ((char *) pDst + 1); + s0 >>= 8; + } + // do one full 32-bit word + s0 = bswap32(*pSrc++); + *pDst++ = s0; + // do 'cnt-1' 64-bit dwords + for (unsigned int x = 0; x < cnt-1; x++) + { + int s1 = bswap32(*pSrc++); + int s2 = bswap32(*pSrc++); + *pDst++ = s1; + *pDst++ = s2; + } + // do last partial 32-bit word + s0 = bswap32(*pSrc++); + for (; rem > 0; rem--) + { + *((char *) pDst) = s0 & 0xff; + pDst = (int *) ((char *) pDst + 1); + s0 >>= 8; + } + } +} + +static void WordswapBlock(int *pDst, unsigned int cnt, unsigned int TileSize) +{ + // Since it's not loading 32-bit textures as the N64 would, 32-bit textures need to + // be swapped by 64-bits, not 32. + if (TileSize == 3) + { + // swapblock64 dst, cnt + for (unsigned int x = 0; x < cnt / 2; x++, pDst += 4) + { + long long s1 = ((long long *) pDst)[0]; + long long s2 = ((long long *) pDst)[1]; + ((long long *) pDst)[0] = s2; + ((long long *) pDst)[1] = s1; + } + } + else + { + // swapblock32 dst, cnt + for (unsigned int x = 0; x < cnt; x++, pDst += 2) + { + int s1 = pDst[0]; + int s2 = pDst[1]; + pDst[0] = s2; + pDst[1] = s1; + } + } +} + +static void rdp_loadblock() +{ + if (rdp.skip_drawing) + { + RDP("loadblock skipped\n"); + return; + } + DWORD tile = (DWORD)((rdp.cmd1 >> 24) & 0x07); + DWORD dxt = (DWORD)(rdp.cmd1 & 0x0FFF); + + rdp.addr[rdp.tiles[tile].t_mem] = rdp.timg.addr; + + // ** DXT is used for swapping every other line + /* double fdxt = (double)0x8000000F/(double)((DWORD)(2047/(dxt-1))); // F for error + DWORD _dxt = (DWORD)fdxt;*/ + + // 0x00000800 -> 0x80000000 (so we can check the sign bit instead of the 11th bit) + DWORD _dxt = dxt << 20; + + DWORD addr = segoffset(rdp.timg.addr) & BMASK; + + // lr_s specifies number of 64-bit words to copy + // 10.2 format + WORD ul_s = (WORD)(rdp.cmd0 >> 14) & 0x3FF; + WORD ul_t = (WORD)(rdp.cmd0 >> 2) & 0x3FF; + WORD lr_s = (WORD)(rdp.cmd1 >> 14) & 0x3FF; + + rdp.tiles[tile].ul_s = ul_s; + rdp.tiles[tile].ul_t = ul_t; + rdp.tiles[tile].lr_s = lr_s; + + rdp.timg.set_by = 0; // load block + + // do a quick boundary check before copying to eliminate the possibility for exception + if (ul_s >= 512) { + lr_s = 1; // 1 so that it doesn't die on memcpy + ul_s = 511; + } + if (ul_s+lr_s > 512) + lr_s = 512-ul_s; + + if (addr+(lr_s<<3) > BMASK+1) + lr_s = (WORD)((BMASK-addr)>>3); + + DWORD offs = rdp.timg.addr; + DWORD cnt = lr_s+1; + if (rdp.tiles[tile].size == 3) + cnt <<= 1; + //FIXME: unused? DWORD start_line = 0; + + // if (lr_s > 0) + rdp.timg.addr += cnt << 3; + + int * pDst = (int *) ((uintptr_t)rdp.tmem+(rdp.tiles[tile].t_mem<<3)); + + // Load the block from RDRAM and byteswap it as it loads + CopyswapBlock(pDst, cnt, offs); + + // now do 32-bit or 64-bit word swapping on every other row of data + int dxt_accum = 0; + while (cnt > 0) + { + // skip over unswapped blocks + do + { + pDst += 2; + if (--cnt == 0) + break; + dxt_accum += _dxt; + } while (!(dxt_accum & 0x80000000)); + // count number of blocks to swap + if (cnt == 0) break; + int swapcnt = 0; + do + { + swapcnt++; + if (--cnt == 0) + break; + dxt_accum += _dxt; + } while (dxt_accum & 0x80000000); + // do 32-bit or 64-bit swap operation on this block + WordswapBlock(pDst, swapcnt, rdp.tiles[tile].size); + pDst += swapcnt * 2; + } + + rdp.update |= UPDATE_TEXTURE; + + FRDP ("loadblock: tile: %d, ul_s: %d, ul_t: %d, lr_s: %d, dxt: %08lx -> %08lx\n", + tile, ul_s, ul_t, lr_s, + dxt, _dxt); +} + +static void rdp_loadtile() +{ + if (rdp.skip_drawing) + return; + rdp.timg.set_by = 1; // load tile + + DWORD tile = (DWORD)((rdp.cmd1 >> 24) & 0x07); + if (rdp.tiles[tile].format == 1) + { + rdp.yuv_image = TRUE; + if (rdp.timg.addr < rdp.yuv_im_begin) rdp.yuv_im_begin = rdp.timg.addr; + return; + } + + rdp.addr[rdp.tiles[tile].t_mem] = rdp.timg.addr; + + WORD ul_s = (WORD)((rdp.cmd0 >> 14) & 0x03FF); + WORD ul_t = (WORD)((rdp.cmd0 >> 2 ) & 0x03FF); + WORD lr_s = (WORD)((rdp.cmd1 >> 14) & 0x03FF); + WORD lr_t = (WORD)((rdp.cmd1 >> 2 ) & 0x03FF); + + if (lr_s < ul_s || lr_t < ul_t) return; + + if (wrong_tile >= 0) //there was a tile with zero length + { + rdp.tiles[wrong_tile].lr_s = lr_s; + + if (rdp.tiles[tile].size > rdp.tiles[wrong_tile].size) + rdp.tiles[wrong_tile].lr_s <<= (rdp.tiles[tile].size - rdp.tiles[wrong_tile].size); + else if (rdp.tiles[tile].size < rdp.tiles[wrong_tile].size) + rdp.tiles[wrong_tile].lr_s >>= (rdp.tiles[wrong_tile].size - rdp.tiles[tile].size); + rdp.tiles[wrong_tile].lr_t = lr_t; + // wrong_tile = -1; + } + + if (rdp.hires_tex)// && (rdp.tiles[tile].format == 0)) + { + FRDP("loadtile: hires_tex ul_s: %d, ul_t:%d\n", ul_s, ul_t); + rdp.hires_tex->tile_uls = ul_s; + rdp.hires_tex->tile_ult = ul_t; + } + + if (settings.tonic && tile == 7) + { + rdp.tiles[0].ul_s = ul_s; + rdp.tiles[0].ul_t = ul_t; + rdp.tiles[0].lr_s = lr_s; + rdp.tiles[0].lr_t = lr_t; + } + + DWORD height = lr_t - ul_t + 1; // get height + DWORD width = lr_s - ul_s + 1; + + DWORD wid_64 = rdp.tiles[tile].line; + + // CHEAT: it's very unlikely that it loads more than 1 32-bit texture in one command, + // so i don't bother to write in two different places at once. Just load once with + // twice as much data. + if (rdp.tiles[tile].size == 3) + wid_64 <<= 1; + + int line_n = rdp.timg.width; + if (rdp.tiles[tile].size == 0) + line_n >>= 1; + else + line_n <<= (rdp.tiles[tile].size-1); + + int offs = ul_t * line_n; + offs += ul_s << rdp.tiles[tile].size >> 1; + offs += rdp.timg.addr; + if ((unsigned int) offs >= BMASK) + return; + + // check if points to bad location + DWORD size = width * height; + if (rdp.tiles[tile].size == 0) + size >>= 1; + else + size <<= (rdp.tiles[tile].size-1); + + if (offs + line_n*height > BMASK) + height = (BMASK - offs) / line_n; + + int * pDst = (int *) ((uintptr_t)rdp.tmem+(rdp.tiles[tile].t_mem<<3)); + int * pEnd = (int *) ((uintptr_t)rdp.tmem+4096 - (wid_64<<3)); + + for (unsigned int y = 0; y < height; y++) + { + if (pDst > pEnd) break; + CopyswapBlock(pDst, wid_64, offs); + if (y & 1) + { + WordswapBlock(pDst, wid_64, rdp.tiles[tile].size); + } + pDst += wid_64 * 2; + offs += line_n; + } + + FRDP("loadtile: tile: %d, ul_s: %d, ul_t: %d, lr_s: %d, lr_t: %d\n", tile, + ul_s, ul_t, lr_s, lr_t); +} + +static void rdp_settile() +{ + tile_set = 1; // used to check if we only load the first settilesize + + rdp.first = 0; + + //rdp.cur_tile_n = (DWORD)((rdp.cmd1 >> 24) & 0x07); + //rdp.cur_tile = &rdp.tiles[rdp.cur_tile_n]; + + rdp.last_tile = (DWORD)((rdp.cmd1 >> 24) & 0x07); + TILE *tile = &rdp.tiles[rdp.last_tile]; + + tile->format = (BYTE)((rdp.cmd0 >> 21) & 0x07); + tile->size = (BYTE)((rdp.cmd0 >> 19) & 0x03); + tile->line = (WORD)((rdp.cmd0 >> 9) & 0x01FF); + tile->t_mem = (WORD)(rdp.cmd0 & 0x1FF); + tile->palette = (BYTE)((rdp.cmd1 >> 20) & 0x0F); + tile->clamp_t = (BYTE)((rdp.cmd1 >> 19) & 0x01); + tile->mirror_t = (BYTE)((rdp.cmd1 >> 18) & 0x01); + tile->mask_t = (BYTE)((rdp.cmd1 >> 14) & 0x0F); + tile->shift_t = (BYTE)((rdp.cmd1 >> 10) & 0x0F); + tile->clamp_s = (BYTE)((rdp.cmd1 >> 9) & 0x01); + tile->mirror_s = (BYTE)((rdp.cmd1 >> 8) & 0x01); + tile->mask_s = (BYTE)((rdp.cmd1 >> 4) & 0x0F); + tile->shift_s = (BYTE)(rdp.cmd1 & 0x0F); + + rdp.update |= UPDATE_TEXTURE; + + FRDP ("settile: tile: %d, format: %s, size: %s, line: %d, " + "t_mem: %08lx, palette: %d, clamp_t/mirror_t: %s, mask_t: %d, " + "shift_t: %d, clamp_s/mirror_s: %s, mask_s: %d, shift_s: %d\n", + rdp.last_tile, str_format[tile->format], str_size[tile->size], tile->line, + tile->t_mem, tile->palette, str_cm[(tile->clamp_t<<1)|tile->mirror_t], tile->mask_t, + tile->shift_t, str_cm[(tile->clamp_s<<1)|tile->mirror_s], tile->mask_s, tile->shift_s); +} + +// +// fillrect - fills a rectangle +// + +static void rdp_fillrect() +{ + DWORD ul_x = ((rdp.cmd1 & 0x00FFF000) >> 14); + DWORD ul_y = (rdp.cmd1 & 0x00000FFF) >> 2; + DWORD lr_x = ((rdp.cmd0 & 0x00FFF000) >> 14) + 1; + DWORD lr_y = ((rdp.cmd0 & 0x00000FFF) >> 2) + 1; + if ((rdp.cimg == rdp.zimg) || (settings.fb_smart && rdp.frame_buffers[rdp.ci_count-1].status == ci_zimg)) + { + RDP ("Fillrect - cleared the depth buffer\n"); + if (fullscreen) + { + + grDepthMask (FXTRUE); + grColorMask (FXFALSE, FXFALSE); + grBufferClear (0, 0, 0xFFFF); + grColorMask (FXTRUE, FXTRUE); + rdp.update |= UPDATE_ZBUF_ENABLED; + if (settings.fb_depth_clear) + { + ul_x = min(max(ul_x, rdp.scissor_o.ul_x), rdp.scissor_o.lr_x); + lr_x = min(max(lr_x, rdp.scissor_o.ul_x), rdp.scissor_o.lr_x); + ul_y = min(max(ul_y, rdp.scissor_o.ul_y), rdp.scissor_o.lr_y); + lr_y = min(max(lr_y, rdp.scissor_o.ul_y), rdp.scissor_o.lr_y); + //FIXME:unused? DWORD zi_height = lr_y - ul_y - 1; + // rdp.zi_nb_pixels = rdp.zi_width * zi_height; + rdp.zi_lry = lr_y - 1; + rdp.zi_lrx = lr_x - 1; + // FRDP ("zi_width: %d, zi_height: %d\n", rdp.zi_width, zi_height); + DWORD fillrect_width_in_dwords = (lr_x-ul_x) >> 1; + DWORD zi_width_in_dwords = rdp.zi_width >> 1; + ul_x >>= 1; + DWORD * dst = (DWORD*)(gfx.RDRAM+rdp.cimg); + dst += ul_y * zi_width_in_dwords; + for (DWORD y = ul_y; y < lr_y; y++) + { + for (DWORD x = ul_x; x < fillrect_width_in_dwords; x++) + { + dst[x] = rdp.fill_color; + } + dst += zi_width_in_dwords; + } + } + } + return; + } + + if (rdp.skip_drawing) + { + RDP("Fillrect skipped\n"); + return; + } + + // Update scissor + update_scissor (); + + if ((ul_x > lr_x) || (ul_y > lr_y)) return; + if (settings.bomberman64 && (lr_x == rdp.ci_width) && (rdp.cimg == rdp.ocimg)) //bomberman64 hack + return; + + if (rdp.cur_image && (rdp.cur_image->format != 0) && (rdp.cycle_mode == 3) && (rdp.cur_image->width == lr_x)) + { + DWORD color = rdp.fill_color; + color = ((color&1)?0xFF:0) | + ((DWORD)((float)((color&0xF800) >> 11) / 31.0f * 255.0f) << 24) | + ((DWORD)((float)((color&0x07C0) >> 6) / 31.0f * 255.0f) << 16) | + ((DWORD)((float)((color&0x003E) >> 1) / 31.0f * 255.0f) << 8); + grDepthMask (FXFALSE); + grBufferClear (color, 0, 0xFFFF); + grDepthMask (FXTRUE); + rdp.update |= UPDATE_ZBUF_ENABLED; + return; + } + + if (settings.decrease_fillrect_edge && rdp.cycle_mode == 0) + { + lr_x--; lr_y--; + } + FRDP("fillrect (%d,%d) -> (%d,%d), cycle mode: %d, #%d, #%d\n", ul_x, ul_y, lr_x, lr_y, rdp.cycle_mode, + rdp.tri_n, rdp.tri_n+1); + + FRDP("scissor (%d,%d) -> (%d,%d)\n", rdp.scissor.ul_x, rdp.scissor.ul_y, rdp.scissor.lr_x, + rdp.scissor.lr_y); + + // KILL the floating point error with 0.01f + DWORD s_ul_x = (DWORD)min(max(ul_x * rdp.scale_x + rdp.offset_x + 0.01f, rdp.scissor.ul_x), rdp.scissor.lr_x); + DWORD s_lr_x = (DWORD)min(max(lr_x * rdp.scale_x + rdp.offset_x + 0.01f, rdp.scissor.ul_x), rdp.scissor.lr_x); + DWORD s_ul_y = (DWORD)min(max(ul_y * rdp.scale_y + rdp.offset_y + 0.01f, rdp.scissor.ul_y), rdp.scissor.lr_y); + DWORD s_lr_y = (DWORD)min(max(lr_y * rdp.scale_y + rdp.offset_y + 0.01f, rdp.scissor.ul_y), rdp.scissor.lr_y); + + if (s_lr_x < 0.0f) s_lr_x = 0; + if (s_lr_y < 0.0f) s_lr_y = 0; + if (s_ul_x > (float)settings.res_x) s_ul_x = settings.res_x; + if (s_ul_y > (float)settings.res_y) s_ul_y = settings.res_y; + + FRDP (" - %d, %d, %d, %d\n", s_ul_x, s_ul_y, s_lr_x, s_lr_y); + + if (fullscreen) + { + grFogMode (GR_FOG_DISABLE); + + grClipWindow (0, 0, settings.res_x, settings.res_y); + + float Z = 1.0f; + if (rdp.zsrc == 1 && (rdp.othermode_l & 0x00000030)) + { + Z = ScaleZ(rdp.prim_depth); + grDepthBufferFunction (GR_CMP_LEQUAL); + // grDepthMask (FXTRUE); + FRDP ("prim_depth = %d\n", rdp.prim_depth); + } + else + { + grDepthBufferFunction (GR_CMP_ALWAYS); + grDepthMask (FXFALSE); + RDP ("no prim_depth used, using 1.0\n"); + } + // Draw the rectangle + VERTEX v[4] = { + { (float)s_ul_x, (float)s_ul_y, Z, 1.0f, 0,0,0,0, { 0,0,0,0 }, 0,0, 0,0,0,0 }, + { (float)s_lr_x, (float)s_ul_y, Z, 1.0f, 0,0,0,0, { 0,0,0,0 }, 0,0, 0,0,0,0 }, + { (float)s_ul_x, (float)s_lr_y, Z, 1.0f, 0,0,0,0, { 0,0,0,0 }, 0,0, 0,0,0,0 }, + { (float)s_lr_x, (float)s_lr_y, Z, 1.0f, 0,0,0,0, { 0,0,0,0 }, 0,0, 0,0,0,0 } }; + + if (rdp.cycle_mode == 3) + { + DWORD color = (settings.fillcolor_fix) ? rdp.fill_color : (rdp.fill_color >> 16); + + if (settings.PM && rdp.frame_buffers[rdp.ci_count-1].status == ci_aux) + { + //background of auxilary frame buffers must have zero alpha. + //make it black, set 0 alpha to plack pixels on frame buffer read + color = 0; + } + else + { + color = ((color&1)?0xFF:0) | + ((DWORD)((float)((color&0xF800) >> 11) / 31.0f * 255.0f) << 24) | + ((DWORD)((float)((color&0x07C0) >> 6) / 31.0f * 255.0f) << 16) | + ((DWORD)((float)((color&0x003E) >> 1) / 31.0f * 255.0f) << 8); + } + grConstantColorValue (color); + + grColorCombine (GR_COMBINE_FUNCTION_LOCAL, + GR_COMBINE_FACTOR_NONE, + GR_COMBINE_LOCAL_CONSTANT, + GR_COMBINE_OTHER_NONE, + FXFALSE); + + grAlphaCombine (GR_COMBINE_FUNCTION_LOCAL, + GR_COMBINE_FACTOR_NONE, + GR_COMBINE_LOCAL_CONSTANT, + GR_COMBINE_OTHER_NONE, + FXFALSE); + + grAlphaBlendFunction (GR_BLEND_ONE, GR_BLEND_ZERO, GR_BLEND_ONE, GR_BLEND_ZERO); + + rdp.update |= UPDATE_COMBINE; + } + else + { + Combine (); + TexCache (); // (to update combiner) + DWORD cmb_mode_c = (rdp.cycle1 << 16) | (rdp.cycle2 & 0xFFFF); + DWORD cmb_mode_a = (rdp.cycle1 & 0x0FFF0000) | ((rdp.cycle2 >> 16) & 0x00000FFF); + if (cmb_mode_c == 0x9fff9fff || cmb_mode_a == 0x09ff09ff) //shade + { + AllowShadeMods (v, 4); + for (int k = 0; k < 4; k++) + apply_shade_mods (&v[k]); + } + } + + grAlphaTestFunction (GR_CMP_ALWAYS); + if (grStippleModeExt) + grStippleModeExt(GR_STIPPLE_DISABLE); + + grCullMode(GR_CULL_DISABLE); + + if (settings.wireframe) + { + SetWireframeCol (); + grDrawLine (&v[0], &v[2]); + grDrawLine (&v[2], &v[1]); + grDrawLine (&v[1], &v[0]); + grDrawLine (&v[2], &v[3]); + grDrawLine (&v[3], &v[1]); + //grDrawLine (&v[1], &v[2]); + } + else + { + grDrawTriangle (&v[0], &v[2], &v[1]); + grDrawTriangle (&v[2], &v[3], &v[1]); + } + + if (debug.capture) + { + VERTEX v1[3]; + v1[0] = v[0]; + v1[1] = v[2]; + v1[2] = v[1]; + add_tri (v1, 3, TRI_FILLRECT); + rdp.tri_n ++; + v1[0] = v[2]; + v1[1] = v[3]; + add_tri (v1, 3, TRI_FILLRECT); + rdp.tri_n ++; + } + else + rdp.tri_n += 2; + + if (settings.fog && (rdp.flags & FOG_ENABLED)) + { + grFogMode (GR_FOG_WITH_TABLE_ON_FOGCOORD_EXT); + } + + rdp.update |= UPDATE_CULL_MODE | UPDATE_ALPHA_COMPARE | UPDATE_ZBUF_ENABLED; + } + else + { + rdp.tri_n += 2; + } +} + +// +// setfillcolor - sets the filling color +// + +static void rdp_setfillcolor() +{ + rdp.fill_color = rdp.cmd1; + rdp.update |= UPDATE_ALPHA_COMPARE | UPDATE_COMBINE; + + FRDP("setfillcolor: %08lx\n", rdp.cmd1); +} + +static void rdp_setfogcolor() +{ + rdp.fog_color = rdp.cmd1; + rdp.update |= UPDATE_COMBINE | UPDATE_FOG_ENABLED; + + FRDP("setfogcolor - %08lx\n", rdp.cmd1); +} + +static void rdp_setblendcolor() +{ + rdp.blend_color = rdp.cmd1; + rdp.update |= UPDATE_COMBINE; + + FRDP("setblendcolor: %08lx\n", rdp.cmd1); +} + +static void rdp_setprimcolor() +{ + rdp.prim_color = rdp.cmd1; + rdp.prim_lodmin = (rdp.cmd0 >> 8) & 0xFF; + rdp.prim_lodfrac = max(rdp.cmd0 & 0xFF, rdp.prim_lodmin); + rdp.update |= UPDATE_COMBINE; + + FRDP("setprimcolor: %08lx, lodmin: %d, lodfrac: %d\n", rdp.cmd1, rdp.prim_lodmin, + rdp.prim_lodfrac); +} + +static void rdp_setenvcolor() +{ + rdp.env_color = rdp.cmd1; + rdp.update |= UPDATE_COMBINE; + + FRDP("setenvcolor: %08lx\n", rdp.cmd1); +} + +static void rdp_setcombine() +{ + rdp.c_a0 = (BYTE)((rdp.cmd0 >> 20) & 0xF); + rdp.c_b0 = (BYTE)((rdp.cmd1 >> 28) & 0xF); + rdp.c_c0 = (BYTE)((rdp.cmd0 >> 15) & 0x1F); + rdp.c_d0 = (BYTE)((rdp.cmd1 >> 15) & 0x7); + rdp.c_Aa0 = (BYTE)((rdp.cmd0 >> 12) & 0x7); + rdp.c_Ab0 = (BYTE)((rdp.cmd1 >> 12) & 0x7); + rdp.c_Ac0 = (BYTE)((rdp.cmd0 >> 9) & 0x7); + rdp.c_Ad0 = (BYTE)((rdp.cmd1 >> 9) & 0x7); + + rdp.c_a1 = (BYTE)((rdp.cmd0 >> 5) & 0xF); + rdp.c_b1 = (BYTE)((rdp.cmd1 >> 24) & 0xF); + rdp.c_c1 = (BYTE)((rdp.cmd0 >> 0) & 0x1F); + rdp.c_d1 = (BYTE)((rdp.cmd1 >> 6) & 0x7); + rdp.c_Aa1 = (BYTE)((rdp.cmd1 >> 21) & 0x7); + rdp.c_Ab1 = (BYTE)((rdp.cmd1 >> 3) & 0x7); + rdp.c_Ac1 = (BYTE)((rdp.cmd1 >> 18) & 0x7); + rdp.c_Ad1 = (BYTE)((rdp.cmd1 >> 0) & 0x7); + + rdp.cycle1 = (rdp.c_a0<<0) | (rdp.c_b0<<4) | (rdp.c_c0<<8) | (rdp.c_d0<<13)| + (rdp.c_Aa0<<16)| (rdp.c_Ab0<<19)| (rdp.c_Ac0<<22)| (rdp.c_Ad0<<25); + rdp.cycle2 = (rdp.c_a1<<0) | (rdp.c_b1<<4) | (rdp.c_c1<<8) | (rdp.c_d1<<13)| + (rdp.c_Aa1<<16)| (rdp.c_Ab1<<19)| (rdp.c_Ac1<<22)| (rdp.c_Ad1<<25); + + rdp.update |= UPDATE_COMBINE; + + FRDP("setcombine\na0=%s b0=%s c0=%s d0=%s\nAa0=%s Ab0=%s Ac0=%s Ad0=%s\na1=%s b1=%s c1=%s d1=%s\nAa1=%s Ab1=%s Ac1=%s Ad1=%s\n", + Mode0[rdp.c_a0], Mode1[rdp.c_b0], Mode2[rdp.c_c0], Mode3[rdp.c_d0], + Alpha0[rdp.c_Aa0], Alpha1[rdp.c_Ab0], Alpha2[rdp.c_Ac0], Alpha3[rdp.c_Ad0], + Mode0[rdp.c_a1], Mode1[rdp.c_b1], Mode2[rdp.c_c1], Mode3[rdp.c_d1], + Alpha0[rdp.c_Aa1], Alpha1[rdp.c_Ab1], Alpha2[rdp.c_Ac1], Alpha3[rdp.c_Ad1]); +} + +// +// settextureimage - sets the source for an image copy +// + +static void rdp_settextureimage() +{ + static const char *format[] = { "RGBA", "YUV", "CI", "IA", "I", "?", "?", "?" }; + static const char *size[] = { "4bit", "8bit", "16bit", "32bit" }; + + rdp.timg.format = (BYTE)((rdp.cmd0 >> 21) & 0x07); + rdp.timg.size = (BYTE)((rdp.cmd0 >> 19) & 0x03); + rdp.timg.width = (WORD)(1 + (rdp.cmd0 & 0x00000FFF)); + rdp.timg.addr = segoffset(rdp.cmd1); + rdp.s2dex_tex_loaded = TRUE; + rdp.update |= UPDATE_TEXTURE; + + if (rdp.frame_buffers[rdp.ci_count-1].status == ci_copy_self && (rdp.timg.addr >= rdp.cimg) && (rdp.timg.addr < rdp.ci_end)) + { + if (!rdp.fb_drawn) + { + if (!rdp.cur_image) + CopyFrameBuffer(); + else if (rdp.frame_buffers[rdp.ci_count].status != ci_copy) + CloseTextureBuffer(TRUE); + rdp.fb_drawn = TRUE; + } + } + + if (settings.fb_hires) //search this texture among drawn texture buffers + { + if (settings.zelda) + { + if (rdp.timg.size == 2) + FindTextureBuffer(rdp.timg.addr, rdp.timg.width); + } + else + FindTextureBuffer(rdp.timg.addr, rdp.timg.width); + } + + FRDP("settextureimage: format: %s, size: %s, width: %d, addr: %08lx\n", + format[rdp.timg.format], size[rdp.timg.size], + rdp.timg.width, rdp.timg.addr); +} + +static void rdp_setdepthimage() +{ + rdp.zimg = segoffset(rdp.cmd1) & BMASK; + rdp.zi_width = rdp.ci_width; + FRDP("setdepthimage - %08lx\n", rdp.zimg); +} + + +BOOL SwapOK = TRUE; +static void RestoreScale() +{ + FRDP("Return to original scale: x = %f, y = %f\n", rdp.scale_x_bak, rdp.scale_y_bak); + rdp.scale_x = rdp.scale_x_bak; + rdp.scale_y = rdp.scale_y_bak; + // update_scissor(); + rdp.view_scale[0] *= rdp.scale_x; + rdp.view_scale[1] *= rdp.scale_y; + rdp.view_trans[0] *= rdp.scale_x; + rdp.view_trans[1] *= rdp.scale_y; + rdp.update |= UPDATE_VIEWPORT | UPDATE_SCISSOR; + //* + if (fullscreen) + { + grDepthMask (FXFALSE); + grBufferClear (0, 0, 0xFFFF); + grDepthMask (FXTRUE); + } + //*/ +} + +static DWORD swapped_addr = 0; + +static void rdp_setcolorimage() +{ + render_depth_mode = 0; + if (settings.fb_smart && (rdp.num_of_ci < NUMTEXBUF)) + { + COLOR_IMAGE & cur_fb = rdp.frame_buffers[rdp.ci_count]; + COLOR_IMAGE & prev_fb = rdp.frame_buffers[rdp.ci_count-1]; + COLOR_IMAGE & next_fb = rdp.frame_buffers[rdp.ci_count+1]; + switch (cur_fb.status) + { + case ci_main: + { + + if (rdp.ci_count == 0) + { + if (rdp.ci_status == ci_aux) //for PPL + { + float sx = rdp.scale_x; + float sy = rdp.scale_y; + rdp.scale_x = 1.0f; + rdp.scale_y = 1.0f; + CopyFrameBuffer (); + rdp.scale_x = sx; + rdp.scale_y = sy; + } + if (!settings.fb_hires) + { + if ((rdp.num_of_ci > 1) && + (next_fb.status == ci_aux) && + (next_fb.width >= cur_fb.width)) + { + rdp.scale_x = 1.0f; + rdp.scale_y = 1.0f; + } + } + else if (rdp.copy_ci_index && settings.PM) //tidal wave + OpenTextureBuffer(rdp.frame_buffers[rdp.main_ci_index]); + } + else if (!rdp.motionblur && settings.fb_hires && !SwapOK && (rdp.ci_count <= rdp.copy_ci_index)) + { + if (next_fb.status == ci_aux_copy) + OpenTextureBuffer(rdp.frame_buffers[rdp.main_ci_index]); + else + OpenTextureBuffer(rdp.frame_buffers[rdp.copy_ci_index]); + } + else if (settings.fb_hires && rdp.read_whole_frame && prev_fb.status == ci_aux) + { + OpenTextureBuffer(rdp.frame_buffers[rdp.main_ci_index]); + } + //else if (rdp.ci_status == ci_aux && !rdp.copy_ci_index) + // CloseTextureBuffer(); + + rdp.skip_drawing = FALSE; + } + break; + case ci_copy: + { + if (!rdp.motionblur || settings.fb_motionblur) + { + if (cur_fb.width == rdp.ci_width) + { + if (CopyTextureBuffer(prev_fb, cur_fb)) + // if (CloseTextureBuffer(TRUE)) + ; + else + { + if (!rdp.fb_drawn || prev_fb.status == ci_copy_self) + { + CopyFrameBuffer (); + rdp.fb_drawn = TRUE; + } + memcpy(gfx.RDRAM+cur_fb.addr,gfx.RDRAM+rdp.cimg, (cur_fb.width*cur_fb.height)<>1); + } + } + else + { + CloseTextureBuffer(TRUE); + } + } + else + { + memset(gfx.RDRAM+cur_fb.addr, 0, cur_fb.width*cur_fb.height*rdp.ci_size); + } + rdp.skip_drawing = TRUE; + } + break; + case ci_aux_copy: + { + rdp.skip_drawing = FALSE; + if (CloseTextureBuffer(prev_fb.status != ci_aux_copy)) + ; + else if (!rdp.fb_drawn) + { + CopyFrameBuffer (); + rdp.fb_drawn = TRUE; + } + if (settings.fb_hires) + OpenTextureBuffer(cur_fb); + } + break; + case ci_old_copy: + { + if (!rdp.motionblur || settings.fb_motionblur) + { + if (cur_fb.width == rdp.ci_width) + { + memcpy(gfx.RDRAM+cur_fb.addr,gfx.RDRAM+rdp.maincimg[1].addr, (cur_fb.width*cur_fb.height)<>1); + } + //rdp.skip_drawing = TRUE; + } + else + { + memset(gfx.RDRAM+cur_fb.addr, 0, (cur_fb.width*cur_fb.height)<>1); + } + } + break; + /* + else if (rdp.frame_buffers[rdp.ci_count].status == ci_main_i) + { + // CopyFrameBuffer (); + rdp.scale_x = rdp.scale_x_bak; + rdp.scale_y = rdp.scale_y_bak; + rdp.skip_drawing = FALSE; + } + */ + case ci_aux: + { + if (!settings.fb_hires && cur_fb.format != 0) + rdp.skip_drawing = TRUE; + else + { + rdp.skip_drawing = FALSE; + if (settings.fb_hires && OpenTextureBuffer(cur_fb)) + ; + else + { + if (cur_fb.format != 0) + rdp.skip_drawing = TRUE; + if (rdp.ci_count == 0) + { + // if (rdp.num_of_ci > 1) + // { + rdp.scale_x = 1.0f; + rdp.scale_y = 1.0f; + // } + } + else if (!settings.fb_hires && (prev_fb.status == ci_main) && + (prev_fb.width == cur_fb.width)) // for Pokemon Stadium + CopyFrameBuffer (); + } + } + cur_fb.status = ci_aux; + } + break; + case ci_zimg: + // ZIGGY + // Zelda LoT effect save/restore depth buffer + if (cur_fb.addr == rdp.zimg) { + render_depth_mode = 1; + } else { + render_depth_mode = 2; + } + rdp.skip_drawing = TRUE; + break; + case ci_useless: + //case ci_zcopy: + rdp.skip_drawing = TRUE; + break; + case ci_copy_self: + if (settings.fb_hires && (rdp.ci_count <= rdp.copy_ci_index) && (!SwapOK || settings.swapmode == 2)) + OpenTextureBuffer(cur_fb); + rdp.skip_drawing = FALSE; + /* + if (settings.fb_hires) + { + if (SwapOK) + { + rdp.cimg = rdp.frame_buffers[rdp.ci_count].addr; + rdp.maincimg[0].addr = rdp.cimg; + newSwapBuffers(); + SwapOK = FALSE; + OpenTextureBuffer(rdp.frame_buffers[rdp.ci_count]); + } + } + */ + break; + default: + rdp.skip_drawing = FALSE; + } + + if ((rdp.ci_count > 0) && (prev_fb.status >= ci_aux)) //for Pokemon Stadium + { + if (!settings.fb_hires && prev_fb.format == 0) + CopyFrameBuffer (); + } + if (!settings.fb_hires && cur_fb.status == ci_copy) + { + if (!rdp.motionblur && (rdp.num_of_ci > rdp.ci_count+1) && (next_fb.status != ci_aux)) + { + RestoreScale(); + } + } + if (!settings.fb_hires && cur_fb.status == ci_aux) + { + if (cur_fb.format == 0) + { + if (settings.PPL && (rdp.scale_x < 1.1f)) //need to put current image back to frame buffer + { + int width = cur_fb.width; + int height = cur_fb.height; + WORD *ptr_dst = new WORD[width*height]; + WORD *ptr_src = (WORD*)(gfx.RDRAM+cur_fb.addr); + WORD c; + + for (int y=0; y> 1) | 0x8000; + ptr_dst[x + y * width] = c; + } + } + grLfbWriteRegion(GR_BUFFER_BACKBUFFER, + 0, + 0, + GR_LFB_SRC_FMT_555, + width, + height, + FXFALSE, + width<<1, + ptr_dst); + delete[] ptr_dst; + } + /* + else //just clear buffer + { + + grColorMask(FXTRUE, FXTRUE); + grBufferClear (0, 0, 0xFFFF); + } + */ + } + } + + if ((cur_fb.status == ci_main) && (rdp.ci_count > 0)) + { + BOOL to_org_res = TRUE; + for (int i = rdp.ci_count + 1; i < rdp.num_of_ci; i++) + { + if ((rdp.frame_buffers[i].status != ci_main) && (rdp.frame_buffers[i].status != ci_zimg) && (rdp.frame_buffers[i].status != ci_zcopy)) + { + to_org_res = FALSE; + break; + } + } + if (to_org_res) + { + RDP("return to original scale\n"); + rdp.scale_x = rdp.scale_x_bak; + rdp.scale_y = rdp.scale_y_bak; + if (settings.fb_hires && !rdp.read_whole_frame) + CloseTextureBuffer(); + } + if (settings.fb_hires && !rdp.read_whole_frame && (prev_fb.status >= ci_aux) && (rdp.ci_count > rdp.copy_ci_index)) + CloseTextureBuffer(); + + } + rdp.ci_status = cur_fb.status; + rdp.ci_count++; + } + + rdp.ocimg = rdp.cimg; + rdp.cimg = segoffset(rdp.cmd1) & BMASK; + rdp.ci_width = (rdp.cmd0 & 0xFFF) + 1; + if (settings.fb_smart) + rdp.ci_height = rdp.frame_buffers[rdp.ci_count-1].height; + else if (rdp.ci_width == 32) + rdp.ci_height = 32; + else + rdp.ci_height = rdp.scissor_o.lr_y; + if (rdp.zimg == rdp.cimg) + { + rdp.zi_width = rdp.ci_width; + // int zi_height = min((int)rdp.zi_width*3/4, (int)rdp.vi_height); + // rdp.zi_words = rdp.zi_width * zi_height; + } + DWORD format = (rdp.cmd0 >> 21) & 0x7; + rdp.ci_size = (rdp.cmd0 >> 19) & 0x3; + rdp.ci_end = rdp.cimg + ((rdp.ci_width*rdp.ci_height)<<(rdp.ci_size-1)); + FRDP("setcolorimage - %08lx, width: %d, height: %d, format: %d, size: %d\n", rdp.cmd1, rdp.ci_width, rdp.ci_height, format, rdp.ci_size); + FRDP("cimg: %08lx, ocimg: %08lx, SwapOK: %d\n", rdp.cimg, rdp.ocimg, SwapOK); + + if (format != 0 && !rdp.cur_image) //can't draw into non RGBA buffer + { + if (settings.fb_hires && rdp.ci_width <= 64) + OpenTextureBuffer(rdp.frame_buffers[rdp.ci_count - 1]); + else if (format > 2) + rdp.skip_drawing = TRUE; + return; + } + else + { + if (!settings.fb_smart) + rdp.skip_drawing = FALSE; + } + + CI_SET = TRUE; + if (settings.swapmode > 0) + { + if (rdp.zimg == rdp.cimg) + rdp.updatescreen = 1; + + BOOL viSwapOK = ((settings.swapmode == 2) && (rdp.vi_org_reg == *gfx.VI_ORIGIN_REG)) ? FALSE : TRUE; + if ((rdp.zimg != rdp.cimg) && (rdp.ocimg != rdp.cimg) && SwapOK && viSwapOK && !rdp.cur_image) + { + if (settings.fb_smart) + rdp.maincimg[0] = rdp.frame_buffers[rdp.main_ci_index]; + else + rdp.maincimg[0].addr = rdp.cimg; + rdp.last_drawn_ci_addr = (settings.swapmode == 2) ? swapped_addr : rdp.maincimg[0].addr; + swapped_addr = rdp.cimg; + newSwapBuffers(); + rdp.vi_org_reg = *gfx.VI_ORIGIN_REG; + SwapOK = FALSE; + if (settings.fb_hires) + { + if (rdp.copy_ci_index && (rdp.frame_buffers[rdp.ci_count-1].status != ci_zimg)) + { + int idx = (rdp.frame_buffers[rdp.ci_count].status == ci_aux_copy) ? rdp.main_ci_index : rdp.copy_ci_index; + FRDP("attempt open tex buffer. status: %s, addr: %08lx\n", CIStatus[rdp.frame_buffers[idx].status], rdp.frame_buffers[idx].addr); + OpenTextureBuffer(rdp.frame_buffers[idx]); + if (rdp.frame_buffers[rdp.copy_ci_index].status == ci_main) //tidal wave + rdp.copy_ci_index = 0; + } + else if (rdp.read_whole_frame && !rdp.cur_image) + { + OpenTextureBuffer(rdp.frame_buffers[rdp.main_ci_index]); + } + } + } + } +} + +static void rdp_trifill() +{ + RDP_E("trifill - IGNORED\n"); + RDP("trifill - IGNORED\n"); +} + +static void rdp_trishade() +{ + RDP_E("trishade - IGNORED\n"); + RDP("trishade - IGNORED\n"); +} + +static void rdp_tritxtr() +{ + RDP_E("tritxtr - IGNORED\n"); + RDP("tritxtr - IGNORED\n"); +} + +static void rdp_trishadetxtr() +{ + RDP_E("trishadetxtr - IGNORED\n"); + RDP("trishadetxtr - IGNORED\n"); +} + +static void rdp_trifillz() +{ + RDP_E("trifillz - IGNORED\n"); + RDP("trifillz - IGNORED\n"); +} + +static void rdp_trishadez() +{ + RDP_E("trishadez - IGNORED\n"); + RDP("trishadez - IGNORED\n"); +} + +static void rdp_tritxtrz() +{ + RDP_E("tritxtrz - IGNORED\n"); + RDP("tritxtrz - IGNORED\n"); +} + +static void rdp_trishadetxtrz() +{ + RDP_E("trishadetxtrz - IGNORED\n"); + RDP("trishadetxtrz - IGNORED\n"); +} + +static void rsp_reserved0() +{ + RDP_E("reserved0 - IGNORED\n"); + RDP("reserved0 - IGNORED\n"); +} + +static void rsp_reserved1() +{ + RDP("reserved1 - ignored\n"); +} + +static void rsp_reserved2() +{ + RDP("reserved2\n"); +} + +static void rsp_reserved3() +{ + RDP("reserved3 - ignored\n"); +} + +void SetWireframeCol () +{ + if (!fullscreen) return; + + switch (settings.wfmode) + { + //case 0: // normal colors, don't do anything + case 1: // vertex colors + grColorCombine (GR_COMBINE_FUNCTION_LOCAL, + GR_COMBINE_FACTOR_NONE, + GR_COMBINE_LOCAL_ITERATED, + GR_COMBINE_OTHER_NONE, + FXFALSE); + grAlphaCombine (GR_COMBINE_FUNCTION_LOCAL, + GR_COMBINE_FACTOR_NONE, + GR_COMBINE_LOCAL_ITERATED, + GR_COMBINE_OTHER_NONE, + FXFALSE); + grAlphaBlendFunction (GR_BLEND_ONE, + GR_BLEND_ZERO, + GR_BLEND_ZERO, + GR_BLEND_ZERO); + grTexCombine (GR_TMU0, + GR_COMBINE_FUNCTION_ZERO, + GR_COMBINE_FACTOR_NONE, + GR_COMBINE_FUNCTION_ZERO, + GR_COMBINE_FACTOR_NONE, + FXFALSE, FXFALSE); + grTexCombine (GR_TMU1, + GR_COMBINE_FUNCTION_ZERO, + GR_COMBINE_FACTOR_NONE, + GR_COMBINE_FUNCTION_ZERO, + GR_COMBINE_FACTOR_NONE, + FXFALSE, FXFALSE); + break; + case 2: // red only + grColorCombine (GR_COMBINE_FUNCTION_LOCAL, + GR_COMBINE_FACTOR_NONE, + GR_COMBINE_LOCAL_CONSTANT, + GR_COMBINE_OTHER_NONE, + FXFALSE); + grAlphaCombine (GR_COMBINE_FUNCTION_LOCAL, + GR_COMBINE_FACTOR_NONE, + GR_COMBINE_LOCAL_CONSTANT, + GR_COMBINE_OTHER_NONE, + FXFALSE); + grConstantColorValue (0xFF0000FF); + grAlphaBlendFunction (GR_BLEND_ONE, + GR_BLEND_ZERO, + GR_BLEND_ZERO, + GR_BLEND_ZERO); + grTexCombine (GR_TMU0, + GR_COMBINE_FUNCTION_ZERO, + GR_COMBINE_FACTOR_NONE, + GR_COMBINE_FUNCTION_ZERO, + GR_COMBINE_FACTOR_NONE, + FXFALSE, FXFALSE); + grTexCombine (GR_TMU1, + GR_COMBINE_FUNCTION_ZERO, + GR_COMBINE_FACTOR_NONE, + GR_COMBINE_FUNCTION_ZERO, + GR_COMBINE_FACTOR_NONE, + FXFALSE, FXFALSE); + break; + } + + grAlphaTestFunction (GR_CMP_ALWAYS); + grCullMode (GR_CULL_DISABLE); + + //grDepthBufferFunction (GR_CMP_ALWAYS); + //grDepthMask (FXFALSE); + + rdp.update |= UPDATE_COMBINE | UPDATE_ALPHA_COMPARE; +} + +#ifdef __cplusplus +extern "C" { +#endif + +/****************************************************************** +Function: FrameBufferRead +Purpose: This function is called to notify the dll that the +frame buffer memory is beening read at the given address. +DLL should copy content from its render buffer to the frame buffer +in N64 RDRAM +DLL is responsible to maintain its own frame buffer memory addr list +DLL should copy 4KB block content back to RDRAM frame buffer. +Emulator should not call this function again if other memory +is read within the same 4KB range +input: addr rdram address +val val +size 1 = BYTE, 2 = WORD, 4 = DWORD +output: none +*******************************************************************/ +EXPORT void CALL FBRead(unsigned int addr) +{ + LOG ("FBRead ()\n"); + + if (cpu_fb_ignore) + return; + if (cpu_fb_write_called) + { + cpu_fb_ignore = TRUE; + cpu_fb_write = FALSE; + return; + } + cpu_fb_read_called = TRUE; + DWORD a = segoffset(addr); + FRDP("FBRead. addr: %08lx\n", a); + if (!rdp.fb_drawn && (a >= rdp.cimg) && (a < rdp.ci_end)) + { + fbreads_back++; + //if (fbreads_back > 2) //&& (rdp.ci_width <= 320)) + { + CopyFrameBuffer (); + rdp.fb_drawn = TRUE; + } + } + if (!rdp.fb_drawn_front && (a >= rdp.maincimg[1].addr) && (a < rdp.maincimg[1].addr + rdp.ci_width*rdp.ci_height*2)) + { + fbreads_front++; + //if (fbreads_front > 2)//&& (rdp.ci_width <= 320)) + { + DWORD cimg = rdp.cimg; + rdp.cimg = rdp.maincimg[1].addr; + if (settings.fb_smart) + { + rdp.ci_width = rdp.maincimg[1].width; + rdp.ci_count = 0; + DWORD h = rdp.frame_buffers[0].height; + rdp.frame_buffers[0].height = rdp.maincimg[1].height; + CopyFrameBuffer(GR_BUFFER_FRONTBUFFER); + rdp.frame_buffers[0].height = h; + } + else + { + CopyFrameBuffer(GR_BUFFER_FRONTBUFFER); + } + rdp.cimg = cimg; + rdp.fb_drawn_front = TRUE; + } + } +} + +#if 0 +//TODO: remove +/****************************************************************** +Function: FrameBufferWriteList +Purpose: This function is called to notify the dll that the +frame buffer has been modified by CPU at the given address. +input: FrameBufferModifyEntry *plist +size = size of the plist, max = 1024 +output: none +*******************************************************************/ +EXPORT void CALL FBWList(FrameBufferModifyEntry *plist, DWORD size) +{ + LOG ("FBWList ()\n"); + FRDP("FBWList. size: %d\n", size); + printf("FBWList. size: %d\n", size); +} +#endif + +/****************************************************************** +Function: FrameBufferWrite +Purpose: This function is called to notify the dll that the +frame buffer has been modified by CPU at the given address. +input: addr rdram address +val val +size 1 = BYTE, 2 = WORD, 4 = DWORD +output: none +*******************************************************************/ +EXPORT void CALL FBWrite(unsigned int addr, unsigned int size) +{ + LOG ("FBWrite ()\n"); + if (cpu_fb_ignore) + return; + if (cpu_fb_read_called) + { + cpu_fb_ignore = TRUE; + cpu_fb_write = FALSE; + return; + } + cpu_fb_write_called = TRUE; + DWORD a = segoffset(addr); + FRDP("FBWrite. addr: %08lx\n", a); + // ZIGGY : added a test on ci_width, otherwise we crash on zero division below + if (!rdp.ci_width || a < rdp.cimg || a > rdp.ci_end) + return; + cpu_fb_write = TRUE; + DWORD shift_l = (a-rdp.cimg) >> 1; + DWORD shift_r = shift_l+2; + + d_ul_x = min(d_ul_x, shift_l%rdp.ci_width); + d_ul_y = min(d_ul_y, shift_l/rdp.ci_width); + d_lr_x = max(d_lr_x, shift_r%rdp.ci_width); + d_lr_y = max(d_lr_y, shift_r/rdp.ci_width); +} + + +/************************************************************************ +Function: FBGetFrameBufferInfo +Purpose: This function is called by the emulator core to retrieve frame + buffer information from the video plugin in order to be able + to notify the video plugin about CPU frame buffer read/write + operations + + size: + = 1 byte + = 2 word (16 bit) <-- this is N64 default depth buffer format + = 4 dword (32 bit) + + when frame buffer information is not available yet, set all values + in the FrameBufferInfo structure to 0 + +input: FrameBufferInfo pinfo[6] + pinfo is pointed to a FrameBufferInfo structure which to be + filled in by this function +output: Values are return in the FrameBufferInfo structure + Plugin can return up to 6 frame buffer info +************************************************************************/ +///* +#if 0 +//TODO: remove +typedef struct +{ + DWORD addr; + DWORD size; + DWORD width; + DWORD height; +} FrameBufferInfo; +#endif + +EXPORT void CALL FBGetFrameBufferInfo(void *p) +{ + LOG ("FBGetFrameBufferInfo ()\n"); + FrameBufferInfo * pinfo = (FrameBufferInfo *)p; + memset(pinfo,0,sizeof(FrameBufferInfo)*6); + if (!settings.fb_get_info) + return; + RDP("FBGetFrameBufferInfo ()\n"); + //* + if (settings.fb_smart) + { + pinfo[0].addr = rdp.maincimg[1].addr; + pinfo[0].size = rdp.maincimg[1].size; + pinfo[0].width = rdp.maincimg[1].width; + pinfo[0].height = rdp.maincimg[1].height; + int info_index = 1; + for (int i = 0; i < rdp.num_of_ci && info_index < 6; i++) + { + COLOR_IMAGE & cur_fb = rdp.frame_buffers[i]; + if (cur_fb.status == ci_main || cur_fb.status == ci_copy_self || + cur_fb.status == ci_old_copy) + { + pinfo[info_index].addr = cur_fb.addr; + pinfo[info_index].size = cur_fb.size; + pinfo[info_index].width = cur_fb.width; + pinfo[info_index].height = cur_fb.height; + info_index++; + } + } + } + else + { + pinfo[0].addr = rdp.maincimg[0].addr; + pinfo[0].size = rdp.ci_size; + pinfo[0].width = rdp.ci_width; + pinfo[0].height = rdp.ci_width*3/4; + pinfo[1].addr = rdp.maincimg[1].addr; + pinfo[1].size = rdp.ci_size; + pinfo[1].width = rdp.ci_width; + pinfo[1].height = rdp.ci_width*3/4; + } +//*/ +} +#ifdef __cplusplus +} +#endif + +//*/ +#include "UcodeFB.h" + +void DetectFrameBufferUsage () +{ + RDP("DetectFrameBufferUsage\n"); + + DWORD dlist_start = *(DWORD*)(gfx.DMEM+0xFF0); +#ifdef _WIN32 + DWORD dlist_length = *(DWORD*)(gfx.DMEM+0xFF4); +#endif // _WIN32 + DWORD a; + + BOOL tidal = FALSE; + if (settings.PM && (rdp.copy_ci_index || rdp.frame_buffers[rdp.copy_ci_index].status == ci_copy_self)) + tidal = TRUE; + DWORD ci = rdp.cimg, zi = rdp.zimg; // ci_width = rdp.ci_width; + rdp.main_ci = rdp.main_ci_end = rdp.main_ci_bg = rdp.ci_count = 0; + rdp.main_ci_index = rdp.copy_ci_index = 0; + rdp.zimg_end = 0; + rdp.tmpzimg = 0; + rdp.motionblur = FALSE; + rdp.main_ci_last_tex_addr = 0; + BOOL previous_ci_was_read = rdp.read_previous_ci; + rdp.read_previous_ci = FALSE; + rdp.read_whole_frame = FALSE; + rdp.swap_ci_index = rdp.black_ci_index = -1; + SwapOK = TRUE; + + // Start executing at the start of the display list + rdp.pc_i = 0; + rdp.pc[rdp.pc_i] = dlist_start; + rdp.dl_count = -1; + rdp.halt = 0; + rdp.scale_x_bak = rdp.scale_x; + rdp.scale_y_bak = rdp.scale_y; + + // MAIN PROCESSING LOOP + do { + + // Get the address of the next command + a = rdp.pc[rdp.pc_i] & BMASK; + + // Load the next command and its input + rdp.cmd0 = ((DWORD*)gfx.RDRAM)[a>>2]; // \ Current command, 64 bit + rdp.cmd1 = ((DWORD*)gfx.RDRAM)[(a>>2)+1]; // / + + // Output the address before the command + + // Go to the next instruction + rdp.pc[rdp.pc_i] = (a+8) & BMASK; + + if ((intptr_t)(gfx_instruction_lite[settings.ucode][rdp.cmd0>>24])) + gfx_instruction_lite[settings.ucode][rdp.cmd0>>24] (); + + // check DL counter + if (rdp.dl_count != -1) + { + rdp.dl_count --; + if (rdp.dl_count == 0) + { + rdp.dl_count = -1; + + RDP ("End of DL\n"); + rdp.pc_i --; + } + } + + } while (!rdp.halt); + SwapOK = TRUE; + if (rdp.ci_count > NUMTEXBUF) //overflow + { + rdp.cimg = ci; + rdp.zimg = zi; + rdp.num_of_ci = rdp.ci_count; + rdp.scale_x = rdp.scale_x_bak; + rdp.scale_y = rdp.scale_y_bak; + return; + } + + if (rdp.black_ci_index > 0 && rdp.black_ci_index < rdp.copy_ci_index) + rdp.frame_buffers[rdp.black_ci_index].status = ci_main; + + if (rdp.frame_buffers[rdp.ci_count-1].status == ci_unknown) + { + if (rdp.ci_count > 1) + rdp.frame_buffers[rdp.ci_count-1].status = ci_aux; + else + rdp.frame_buffers[rdp.ci_count-1].status = ci_main; + } + + if ((rdp.frame_buffers[rdp.ci_count-1].status == ci_aux) && + (rdp.frame_buffers[rdp.main_ci_index].width < 320) && + (rdp.frame_buffers[rdp.ci_count-1].width > rdp.frame_buffers[rdp.main_ci_index].width)) + { + for (int i = 0; i < rdp.ci_count; i++) + { + if (rdp.frame_buffers[i].status == ci_main) + rdp.frame_buffers[i].status = ci_aux; + else if (rdp.frame_buffers[i].addr == rdp.frame_buffers[rdp.ci_count-1].addr) + rdp.frame_buffers[i].status = ci_main; +// FRDP("rdp.frame_buffers[%d].status = %d\n", i, rdp.frame_buffers[i].status); + } + rdp.main_ci_index = rdp.ci_count-1; + } + + BOOL all_zimg = TRUE; + int i; + for (i = 0; i < rdp.ci_count; i++) + { + if (rdp.frame_buffers[i].status != ci_zimg) + { + all_zimg = FALSE; + break; + } + } + if (all_zimg) + { + for (i = 0; i < rdp.ci_count; i++) + rdp.frame_buffers[i].status = ci_main; + } + + RDP("detect fb final results: \n"); + for (i = 0; i < rdp.ci_count; i++) + { + FRDP("rdp.frame_buffers[%d].status = %s, addr: %08lx, height: %d\n", i, CIStatus[rdp.frame_buffers[i].status], rdp.frame_buffers[i].addr, rdp.frame_buffers[i].height); + } + + rdp.cimg = ci; + rdp.zimg = zi; + rdp.num_of_ci = rdp.ci_count; + if (rdp.read_previous_ci && previous_ci_was_read) + if (!settings.fb_hires || !rdp.copy_ci_index) + rdp.motionblur = TRUE; + if (rdp.motionblur || settings.fb_hires || (rdp.frame_buffers[rdp.copy_ci_index].status == ci_aux_copy)) + { + rdp.scale_x = rdp.scale_x_bak; + rdp.scale_y = rdp.scale_y_bak; + } + + if ((rdp.read_previous_ci || previous_ci_was_read) && !rdp.copy_ci_index) + rdp.read_whole_frame = TRUE; + if (rdp.read_whole_frame) + { + if (settings.fb_hires && !settings.fb_ignore_previous) + { + if (rdp.swap_ci_index < 0) + { + rdp.texbufs[0].clear_allowed = TRUE; + OpenTextureBuffer(rdp.frame_buffers[rdp.main_ci_index]); + } + } + else + { + if (rdp.motionblur) + { + if (settings.fb_motionblur) + CopyFrameBuffer(); + else + memset(gfx.RDRAM+rdp.cimg, 0, rdp.ci_width*rdp.ci_height*rdp.ci_size); + } + else //if (ci_width == rdp.frame_buffers[rdp.main_ci_index].width) + { + if (rdp.maincimg[0].height > 65) //for 1080 + { + rdp.cimg = rdp.maincimg[0].addr; + rdp.ci_width = rdp.maincimg[0].width; + rdp.ci_count = 0; + DWORD h = rdp.frame_buffers[0].height; + rdp.frame_buffers[0].height = rdp.maincimg[0].height; + CopyFrameBuffer(); + rdp.frame_buffers[0].height = h; + } + else //conker + { + CopyFrameBuffer(); + } + } + } + } + + if (settings.fb_hires) + { + for (i = 0; i < num_tmu; i++) + { + rdp.texbufs[i].clear_allowed = TRUE; + for (int j = 0; j < 256; j++) + { + rdp.texbufs[i].images[j].drawn = FALSE; + rdp.texbufs[i].images[j].clear = TRUE; + } + } + if (tidal) + { + //RDP("Tidal wave!\n"); + rdp.copy_ci_index = rdp.main_ci_index; + } + } + rdp.ci_count = 0; + if (settings.fb_ignore_previous) + rdp.read_whole_frame = FALSE; + else + rdp.maincimg[0] = rdp.frame_buffers[rdp.main_ci_index]; + // rdp.scale_x = rdp.scale_x_bak; + // rdp.scale_y = rdp.scale_y_bak; + RDP("DetectFrameBufferUsage End\n"); +} + + + + +#ifdef __cplusplus +extern "C" { +#endif + +/****************************************************************** +Function: ProcessRDPList +Purpose: This function is called when there is a Dlist to be +processed. (Low level GFX list) +input: none +output: none +*******************************************************************/ +EXPORT void CALL ProcessRDPList(void) +{ + if (settings.KI) + { + *gfx.MI_INTR_REG |= 0x20; + gfx.CheckInterrupts(); + } + LOG ("ProcessRDPList ()\n"); + + no_dlist = FALSE; + update_screen_count = 0; + ChangeSize (); + +#ifdef ALTTAB_FIX + if (!hhkLowLevelKybd) + { + hhkLowLevelKybd = SetWindowsHookEx(WH_KEYBOARD_LL, + LowLevelKeyboardProc, hInstance, 0); + } +#endif + + LOG ("ProcessDList ()\n"); + + if (!fullscreen) + { + drawNoFullscreenMessage(); + // Set an interrupt to allow the game to continue + *gfx.MI_INTR_REG |= 0x20; + gfx.CheckInterrupts(); + } + + if (reset) + { + reset = 0; + + memset (microcode, 0, 4096); + if (settings.autodetect_ucode) + { + // Thanks to ZeZu for ucode autodetection!!! + + DWORD startUcode = *(DWORD*)(gfx.DMEM+0xFD0); + memcpy (microcode, gfx.RDRAM+startUcode, 4096); + microcheck (); + + } + } + else if ( ((old_ucode == 6) && (settings.ucode == 1)) || settings.force_microcheck) + { + DWORD startUcode = *(DWORD*)(gfx.DMEM+0xFD0); + memcpy (microcode, gfx.RDRAM+startUcode, 4096); + microcheck (); + } + + if (exception) return; + + // Switch to fullscreen? + if (to_fullscreen) + { + to_fullscreen = FALSE; + + if (!InitGfx (FALSE)) + { + LOG ("FAILED!!!\n"); + return; + } + fullscreen = TRUE; + } + + // Clear out the RDP log +#ifdef RDP_LOGGING + if (settings.logging && settings.log_clear) + { + CLOSE_RDP_LOG (); + OPEN_RDP_LOG (); + } +#endif + +#ifdef UNIMP_LOG + if (settings.log_unk && settings.unk_clear) + { + std::ofstream unimp; + unimp.open("unimp.txt"); + unimp.close(); + } +#endif + + //* Set states *// + if (settings.swapmode > 0) + SwapOK = TRUE; + rdp.updatescreen = 1; + + rdp.tri_n = 0; // 0 triangles so far this frame + rdp.debug_n = 0; + + rdp.model_i = 0; // 0 matrices so far in stack + //stack_size can be less then 32! Important for Silicon Vally. Thanks Orkin! + rdp.model_stack_size = min(32, (*(DWORD*)(gfx.DMEM+0x0FE4))>>6); + if (rdp.model_stack_size == 0) + rdp.model_stack_size = 32; + rdp.fb_drawn = rdp.fb_drawn_front = FALSE; + rdp.update = 0x7FFFFFFF; // All but clear cache + rdp.geom_mode = 0; + rdp.acmp = 0; + rdp.maincimg[1] = rdp.maincimg[0]; + rdp.skip_drawing = FALSE; + rdp.s2dex_tex_loaded = FALSE; + fbreads_front = fbreads_back = 0; + rdp.fog_multiplier = rdp.fog_offset = 0; + rdp.zsrc = 0; + + if (cpu_fb_write == TRUE) + DrawFrameBufferToScreen(); + cpu_fb_write = FALSE; + cpu_fb_read_called = FALSE; + cpu_fb_write_called = FALSE; + cpu_fb_ignore = FALSE; + d_ul_x = 0xffff; + d_ul_y = 0xffff; + d_lr_x = 0; + d_lr_y = 0; + + //analize possible frame buffer usage + if (settings.fb_smart) + DetectFrameBufferUsage(); + if (!settings.lego || rdp.num_of_ci > 1) + rdp.last_bg = 0; + //* End of set states *// + + + // Get the start of the display list and the length of it +// DWORD dlist_start = *(DWORD*)(gfx.DMEM+0xFF0); +// DWORD dlist_length = *(DWORD*)(gfx.DMEM+0xFF4); + DWORD dlist_start = *gfx.DPC_CURRENT_REG; + DWORD dlist_length = *gfx.DPC_END_REG - *gfx.DPC_CURRENT_REG; + FRDP("--- NEW DLIST --- crc: %08lx, ucode: %d, fbuf: %08lx, fbuf_width: %d, dlist start: %08lx, dlist_lenght: %d\n", uc_crc, settings.ucode, *gfx.VI_ORIGIN_REG, *gfx.VI_WIDTH_REG, dlist_start, dlist_length); + FRDP_E("--- NEW DLIST --- crc: %08lx, ucode: %d, fbuf: %08lx\n", uc_crc, settings.ucode, *gfx.VI_ORIGIN_REG); + + if (settings.tonic && dlist_length < 16) + { + rdp_fullsync(); + FRDP_E("DLIST is too short!\n"); + return; + } + + // Start executing at the start of the display list + rdp.pc_i = 0; + rdp.pc[rdp.pc_i] = dlist_start; + rdp.dl_count = -1; + rdp.halt = 0; + DWORD a; + + // catches exceptions so that it doesn't freeze +#ifdef CATCH_EXCEPTIONS + try { +#endif + + // MAIN PROCESSING LOOP + do { + + // Get the address of the next command + a = rdp.pc[rdp.pc_i] & BMASK; + + // Load the next command and its input + rdp.cmd0 = ((DWORD*)gfx.RDRAM)[a>>2]; // \ Current command, 64 bit + rdp.cmd1 = ((DWORD*)gfx.RDRAM)[(a>>2)+1]; // / + // cmd2 and cmd3 are filled only when needed, by the function that needs them + + // Output the address before the command +#ifdef LOG_COMMANDS + FRDP ("%08lx (c0:%08lx, c1:%08lx): ", a, rdp.cmd0, rdp.cmd1); +#else + FRDP ("%08lx: ", a); +#endif + + // Go to the next instruction + rdp.pc[rdp.pc_i] = (a+8) & BMASK; + +#ifdef PERFORMANCE + QueryPerformanceCounter ((LARGE_INTEGER*)&perf_cur); +#endif + // Process this instruction + gfx_instruction[settings.ucode][((rdp.cmd0>>24)&0x3f) + 0x100-0x40] (); + + // check DL counter + if (rdp.dl_count != -1) + { + rdp.dl_count --; + if (rdp.dl_count == 0) + { + rdp.dl_count = -1; + + RDP ("End of DL\n"); + rdp.pc_i --; + } + } + +#ifdef PERFORMANCE + QueryPerformanceCounter ((LARGE_INTEGER*)&perf_next); + __int64 t = perf_next-perf_cur; + sprintf (out_buf, "perf %08lx: %016I64d\n", a-8, t); + rdp_log << out_buf; +#endif + + } while (0); +#ifdef CATCH_EXCEPTIONS + } catch (...) { + + if (fullscreen) ReleaseGfx (); + WriteLog(M64MSG_ERROR, "The GFX plugin caused an exception and has been disabled."); + exception = TRUE; + } +#endif + + if (settings.fb_smart) + { + rdp.scale_x = rdp.scale_x_bak; + rdp.scale_y = rdp.scale_y_bak; + } + if (settings.fb_read_always) + { + CopyFrameBuffer (); + } + if (rdp.yuv_image) + { + DrawYUVImageToFrameBuffer(); + rdp.yuv_image = FALSE; +// FRDP("yuv image draw. ul_x: %f, ul_y: %f, lr_x: %f, lr_y: %f, begin: %08lx\n", +// rdp.yuv_ul_x, rdp.yuv_ul_y, rdp.yuv_lr_x, rdp.yuv_lr_y, rdp.yuv_im_begin); + rdp.yuv_ul_x = rdp.yuv_ul_y = rdp.yuv_lr_x = rdp.yuv_lr_y = 0; + rdp.yuv_im_begin = 0x00FFFFFF; + } + if (rdp.cur_image) + CloseTextureBuffer(rdp.read_whole_frame && (settings.PM || rdp.swap_ci_index >= 0)); + + if (settings.TGR2 && rdp.vi_org_reg != *gfx.VI_ORIGIN_REG && CI_SET) + { + newSwapBuffers (); + CI_SET = FALSE; + } + RDP("ProcessDList end\n"); + + + + + + + WriteLog(M64MSG_VERBOSE, "ProcessRPDList %x %x %x\n", + *gfx.DPC_START_REG, + *gfx.DPC_END_REG, + *gfx.DPC_CURRENT_REG); + //*gfx.DPC_STATUS_REG = 0xffffffff; // &= ~0x0002; + + *gfx.DPC_START_REG = *gfx.DPC_END_REG; + *gfx.DPC_CURRENT_REG = *gfx.DPC_END_REG; +} + +#ifdef __cplusplus +} +#endif + + + + + +// Local Variables: *** +// tab-width:4 *** +// c-file-offset:4 *** +// End: *** +