diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mame/machine/n64.c | 36 | ||||
-rw-r--r-- | src/mame/video/n64.c | 2125 | ||||
-rw-r--r-- | src/mame/video/n64.h | 839 | ||||
-rw-r--r-- | src/mame/video/rdpbhelp.h | 158 | ||||
-rw-r--r-- | src/mame/video/rdpblend.c | 304 | ||||
-rw-r--r-- | src/mame/video/rdpblend.h | 69 | ||||
-rw-r--r-- | src/mame/video/rdpfiltr.inc | 28 | ||||
-rw-r--r-- | src/mame/video/rdpspn16.c | 646 | ||||
-rw-r--r-- | src/mame/video/rdptpipe.c | 734 | ||||
-rw-r--r-- | src/mame/video/rdptpipe.h | 231 |
10 files changed, 2393 insertions, 2777 deletions
diff --git a/src/mame/machine/n64.c b/src/mame/machine/n64.c index 28a5cd0a6d4..202b5c7a53a 100644 --- a/src/mame/machine/n64.c +++ b/src/mame/machine/n64.c @@ -662,21 +662,21 @@ READ32_MEMBER(n64_periphs::sp_reg_r) case 0x20/4: // DP_CMD_START { n64_state *state = machine().driver_data<n64_state>(); - ret = state->m_rdp->GetStartReg(); + ret = state->m_rdp->get_start(); break; } case 0x24/4: // DP_CMD_END { n64_state *state = machine().driver_data<n64_state>(); - ret = state->m_rdp->GetEndReg(); + ret = state->m_rdp->get_end(); break; } case 0x28/4: // DP_CMD_CURRENT { n64_state *state = machine().driver_data<n64_state>(); - ret = state->m_rdp->GetCurrentReg(); + ret = state->m_rdp->get_current(); break; } @@ -688,13 +688,13 @@ READ32_MEMBER(n64_periphs::sp_reg_r) case 0x2c/4: // DP_CMD_STATUS { n64_state *state = machine().driver_data<n64_state>(); - ret = state->m_rdp->GetStatusReg(); + ret = state->m_rdp->get_status(); break; } case 0x30/4: // DP_CMD_CLOCK { - if(!(machine().driver_data<n64_state>()->m_rdp->GetStatusReg() & DP_STATUS_FREEZE)) + if(!(machine().driver_data<n64_state>()->m_rdp->get_status() & DP_STATUS_FREEZE)) { dp_clock += 13; ret = dp_clock; @@ -908,24 +908,24 @@ READ32_MEMBER( n64_periphs::dp_reg_r ) switch (offset) { case 0x00/4: // DP_START_REG - ret = state->m_rdp->GetStartReg(); + ret = state->m_rdp->get_start(); break; case 0x04/4: // DP_END_REG - ret = state->m_rdp->GetEndReg(); + ret = state->m_rdp->get_end(); break; case 0x08/4: // DP_CURRENT_REG - ret = state->m_rdp->GetCurrentReg(); + ret = state->m_rdp->get_current(); break; case 0x0c/4: // DP_STATUS_REG - ret = state->m_rdp->GetStatusReg(); + ret = state->m_rdp->get_status(); break; case 0x10/4: // DP_CLOCK_REG { - if(!(state->m_rdp->GetStatusReg() & DP_STATUS_FREEZE)) + if(!(state->m_rdp->get_status() & DP_STATUS_FREEZE)) { dp_clock += 13; ret = dp_clock; @@ -948,20 +948,20 @@ WRITE32_MEMBER( n64_periphs::dp_reg_w ) switch (offset) { case 0x00/4: // DP_START_REG - state->m_rdp->SetStartReg(data); - state->m_rdp->SetCurrentReg(state->m_rdp->GetStartReg()); + state->m_rdp->set_start(data); + state->m_rdp->set_current(state->m_rdp->get_start()); break; case 0x04/4: // DP_END_REG - state->m_rdp->SetEndReg(data); + state->m_rdp->set_end(data); g_profiler.start(PROFILER_USER1); - state->m_rdp->ProcessList(); + state->m_rdp->process_command_list(); g_profiler.stop(); break; case 0x0c/4: // DP_STATUS_REG { - UINT32 current_status = state->m_rdp->GetStatusReg(); + UINT32 current_status = state->m_rdp->get_status(); if (data & 0x00000001) current_status &= ~DP_STATUS_XBUS_DMA; if (data & 0x00000002) current_status |= DP_STATUS_XBUS_DMA; if (data & 0x00000004) current_status &= ~DP_STATUS_FREEZE; @@ -969,7 +969,7 @@ WRITE32_MEMBER( n64_periphs::dp_reg_w ) if (data & 0x00000010) current_status &= ~DP_STATUS_FLUSH; if (data & 0x00000020) current_status |= DP_STATUS_FLUSH; if (data & 0x00000200) dp_clock = 0; - state->m_rdp->SetStatusReg(current_status); + state->m_rdp->set_status(current_status); break; } @@ -1025,7 +1025,7 @@ void n64_periphs::vi_recalculate_resolution() if (height > 480) height = 480; - state->m_rdp->MiscState.FBHeight = height; + state->m_rdp->m_misc_state.m_fb_height = height; visarea.max_x = width - 1; visarea.max_y = height - 1; @@ -1122,7 +1122,7 @@ WRITE32_MEMBER( n64_periphs::vi_reg_w ) vi_recalculate_resolution(); } vi_width = data; - state->m_rdp->MiscState.FBWidth = data; + state->m_rdp->m_misc_state.m_fb_width = data; break; case 0x0c/4: // VI_INTR_REG diff --git a/src/mame/video/n64.c b/src/mame/video/n64.c index b6acf7e1ad8..e263a2ea80b 100644 --- a/src/mame/video/n64.c +++ b/src/mame/video/n64.c @@ -29,29 +29,29 @@ TODO: #define LOG_RDP_EXECUTION 0 -static FILE *rdp_exec; +static FILE* rdp_exec; UINT32 n64_rdp::s_special_9bit_clamptable[512]; bool n64_rdp::rdp_range_check(UINT32 addr) { - if(MiscState.FBSize == 0) return false; + if(m_misc_state.m_fb_size == 0) return false; - int fbcount = ((MiscState.FBWidth * Scissor.m_yl) << (MiscState.FBSize - 1)) * 3; - int fbaddr = MiscState.FBAddress & 0x007fffff; + INT32 fbcount = ((m_misc_state.m_fb_width * m_scissor.m_yl) << (m_misc_state.m_fb_size - 1)) * 3; + INT32 fbaddr = m_misc_state.m_fb_address & 0x007fffff; if ((addr >= fbaddr) && (addr < (fbaddr + fbcount))) { return false; } - int zbcount = MiscState.FBWidth * Scissor.m_yl * 2; - int zbaddr = MiscState.ZBAddress & 0x007fffff; + INT32 zbcount = m_misc_state.m_fb_width * m_scissor.m_yl * 2; + INT32 zbaddr = m_misc_state.m_zb_address & 0x007fffff; if ((addr >= zbaddr) && (addr < (zbaddr + zbcount))) { return false; } - printf("Check failed: %08x vs. %08x-%08x, %08x-%08x (%d, %d)\n", addr, fbaddr, fbaddr + fbcount, zbaddr, zbaddr + zbcount, MiscState.FBWidth, Scissor.m_yl); + printf("Check failed: %08x vs. %08x-%08x, %08x-%08x (%d, %d)\n", addr, fbaddr, fbaddr + fbcount, zbaddr, zbaddr + zbcount, m_misc_state.m_fb_width, m_scissor.m_yl); fflush(stdout); return true; } @@ -61,20 +61,20 @@ bool n64_rdp::rdp_range_check(UINT32 addr) // The functions in this file should be moved into the parent Processor class. #include "rdpfiltr.inc" -void n64_rdp::GetAlphaCvg(UINT8 *comb_alpha, rdp_span_aux *userdata, const rdp_poly_state &object) +void n64_rdp::get_alpha_cvg(UINT8* comb_alpha, rdp_span_aux* userdata, const rdp_poly_state &object) { INT32 temp = *comb_alpha; - INT32 temp2 = userdata->CurrentPixCvg; + INT32 temp2 = userdata->m_current_pix_cvg; INT32 temp3 = 0; - if (object.OtherModes.cvg_times_alpha) + if (object.m_other_modes.cvg_times_alpha) { temp3 = (temp * temp2) + 4; - userdata->CurrentPixCvg = (temp3 >> 8) & 0xf; + userdata->m_current_pix_cvg = (temp3 >> 8) & 0xf; } - if (object.OtherModes.alpha_cvg_select) + if (object.m_other_modes.alpha_cvg_select) { - temp = (OtherModes.cvg_times_alpha) ? (temp3 >> 3) : (temp2 << 5); + temp = (m_other_modes.cvg_times_alpha) ? (temp3 >> 3) : (temp2 << 5); } if (temp > 0xff) { @@ -85,37 +85,37 @@ void n64_rdp::GetAlphaCvg(UINT8 *comb_alpha, rdp_span_aux *userdata, const rdp_p /*****************************************************************************/ -void n64_rdp::VideoUpdate(n64_periphs *n64, bitmap_rgb32 &bitmap) +void n64_rdp::video_update(n64_periphs* n64, bitmap_rgb32 &bitmap) { switch(n64->vi_control & 0x3) { case PIXEL_SIZE_16BIT: - VideoUpdate16(n64, bitmap); + video_update16(n64, bitmap); break; case PIXEL_SIZE_32BIT: - VideoUpdate32(n64, bitmap); + video_update32(n64, bitmap); break; default: - //fatalerror("Unsupported framebuffer depth: m_fb_size=%d\n", MiscState.FBSize); + //fatalerror("Unsupported framebuffer depth: m_fb_size=%d\n", m_misc_state.m_fb_size); break; } } -void n64_rdp::VideoUpdate16(n64_periphs *n64, bitmap_rgb32 &bitmap) +void n64_rdp::video_update16(n64_periphs* n64, bitmap_rgb32 &bitmap) { - //int fsaa = (((n64->vi_control >> 8) & 3) < 2); - //int divot = (n64->vi_control >> 4) & 1; + //INT32 fsaa = (((n64->vi_control >> 8) & 3) < 2); + //INT32 divot = (n64->vi_control >> 4) & 1; //UINT32 prev_cvg = 0; //UINT32 next_cvg = 0; - //int dither_filter = (n64->vi_control >> 16) & 1; - //int vibuffering = ((n64->vi_control & 2) && fsaa && divot); + //INT32 dither_filter = (n64->vi_control >> 16) & 1; + //INT32 vibuffering = ((n64->vi_control & 2) && fsaa && divot); - UINT16 *frame_buffer = (UINT16*)&rdram[(n64->vi_origin & 0xffffff) >> 2]; + UINT16* frame_buffer = (UINT16*)&rdram[(n64->vi_origin & 0xffffff) >> 2]; //UINT32 hb = ((n64->vi_origin & 0xffffff) >> 2) >> 1; - //UINT8* hidden_buffer = &HiddenBits[hb]; + //UINT8* hidden_buffer = &m_hidden_bits[hb]; INT32 hdiff = (n64->vi_hstart & 0x3ff) - ((n64->vi_hstart >> 16) & 0x3ff); float hcoeff = ((float)(n64->vi_xscale & 0xfff) / (1 << 10)); @@ -146,17 +146,17 @@ void n64_rdp::VideoUpdate16(n64_periphs *n64, bitmap_rgb32 &bitmap) if (frame_buffer) { - for(int j = 0; j < vres; j++) + for(INT32 j = 0; j < vres; j++) { - UINT32 *d = &bitmap.pix32(j); + UINT32* d = &bitmap.pix32(j); - for(int i = 0; i < hres; i++) + for(INT32 i = 0; i < hres; i++) { - Color c; - //int r, g, b; + color_t c; + //INT32 r, g, b; UINT16 pix = frame_buffer[pixels ^ WORD_ADDR_XOR]; - //MiscState.CurrentPixCvg = ((pix & 1) << 2) | (hidden_buffer[pixels ^ BYTE_ADDR_XOR] & 3); + //m_misc_state.m_current_pix_cvg = ((pix & 1) << 2) | (hidden_buffer[pixels ^ BYTE_ADDR_XOR] & 3); //if(divot) //{ @@ -172,12 +172,12 @@ void n64_rdp::VideoUpdate16(n64_periphs *n64, bitmap_rgb32 &bitmap) //if(fsaa) //{ - //if (/*!vibuffering &&*/ state->m_rdp.MiscState.CurrentPixCvg < 7 && i > 1 && j > 1 && i < (hres - 2) && j < (vres - 2)) + //if (/*!vibuffering &&*/ state->m_rdp.m_misc_state.m_current_pix_cvg < 7 && i > 1 && j > 1 && i < (hres - 2) && j < (vres - 2)) //{ //video_filter16(&c.i.r, &c.i.g, &c.i.b, &frame_buffer[pixels ^ WORD_ADDR_XOR],&hidden_buffer[pixels ^ BYTE_ADDR_XOR], n64->vi_width); //} //} - //else if (dither_filter && state->m_rdp.MiscState.CurrentPixCvg == 7 && i > 0 && j > 0 && i < (hres - 1) && j < (vres - 1)) + //else if (dither_filter && state->m_rdp.m_misc_state.m_current_pix_cvg == 7 && i > 0 && j > 0 && i < (hres - 1) && j < (vres - 1)) //{ //if (vibuffering) //{ @@ -190,7 +190,7 @@ void n64_rdp::VideoUpdate16(n64_periphs *n64, bitmap_rgb32 &bitmap) //} //if(divot) //{ - //if (i > 0 && i < (hres - 1) && (MiscState.CurrentPixCvg != 7 || prev_cvg != 7 || next_cvg != 7)) + //if (i > 0 && i < (hres - 1) && (m_misc_state.m_current_pix_cvg != 7 || prev_cvg != 7 || next_cvg != 7)) //{ //if (vibuffering) //{ @@ -242,13 +242,13 @@ void n64_rdp::VideoUpdate16(n64_periphs *n64, bitmap_rgb32 &bitmap) } } -void n64_rdp::VideoUpdate32(n64_periphs *n64, bitmap_rgb32 &bitmap) +void n64_rdp::video_update32(n64_periphs* n64, bitmap_rgb32 &bitmap) { - int gamma = (n64->vi_control >> 3) & 1; - int gamma_dither = (n64->vi_control >> 2) & 1; - //int vibuffering = ((n64->vi_control & 2) && fsaa && divot); + INT32 gamma = (n64->vi_control >> 3) & 1; + INT32 gamma_dither = (n64->vi_control >> 2) & 1; + //INT32 vibuffering = ((n64->vi_control & 2) && fsaa && divot); - UINT32 *frame_buffer32 = (UINT32*)&rdram[(n64->vi_origin & 0xffffff) >> 2]; + UINT32* frame_buffer32 = (UINT32*)&rdram[(n64->vi_origin & 0xffffff) >> 2]; const INT32 hdiff = (n64->vi_hstart & 0x3ff) - ((n64->vi_hstart >> 16) & 0x3ff); const float hcoeff = ((float)(n64->vi_xscale & 0xfff) / (1 << 10)); @@ -272,21 +272,21 @@ void n64_rdp::VideoUpdate32(n64_periphs *n64, bitmap_rgb32 &bitmap) if (frame_buffer32) { - for (int j = 0; j < vres; j++) + for (INT32 j = 0; j < vres; j++) { - UINT32 *d = &bitmap.pix32(j); - for (int i = 0; i < hres; i++) + UINT32* d = &bitmap.pix32(j); + for (INT32 i = 0; i < hres; i++) { UINT32 pix = *frame_buffer32++; if (gamma || gamma_dither) { - int r = (pix >> 24) & 0xff; - int g = (pix >> 16) & 0xff; - int b = (pix >> 8) & 0xff; - int dith = 0; + INT32 r = (pix >> 24) & 0xff; + INT32 g = (pix >> 16) & 0xff; + INT32 b = (pix >> 8) & 0xff; + INT32 dith = 0; if (gamma_dither) { - dith = GetRandom() & 0x3f; + dith = get_random() & 0x3f; } if (gamma) { @@ -325,15 +325,15 @@ void n64_rdp::VideoUpdate32(n64_periphs *n64, bitmap_rgb32 &bitmap) /*****************************************************************************/ -void n64_rdp::TCDivNoPersp(INT32 ss, INT32 st, INT32 sw, INT32* sss, INT32* sst) +void n64_rdp::tc_div_no_perspective(INT32 ss, INT32 st, INT32 sw, INT32* sss, INT32* sst) { *sss = (SIGN16(ss)) & 0x1ffff; *sst = (SIGN16(st)) & 0x1ffff; } -void n64_rdp::TCDiv(INT32 ss, INT32 st, INT32 sw, INT32* sss, INT32* sst) +void n64_rdp::tc_div(INT32 ss, INT32 st, INT32 sw, INT32* sss, INT32* sst) { - int w_carry = 0; + INT32 w_carry = 0; if ((sw & 0x8000) || !(sw & 0x7fff)) { w_carry = 1; @@ -341,26 +341,26 @@ void n64_rdp::TCDiv(INT32 ss, INT32 st, INT32 sw, INT32* sss, INT32* sst) sw &= 0x7fff; - int shift; + INT32 shift; for (shift = 1; shift <= 14 && !((sw << shift) & 0x8000); shift++); shift -= 1; - int normout = (sw << shift) & 0x3fff; - int wnorm = (normout & 0xff) << 2; + INT32 normout = (sw << shift) & 0x3fff; + INT32 wnorm = (normout & 0xff) << 2; normout >>= 8; - int temppoint = m_norm_point_rom[normout]; - int tempslope = m_norm_slope_rom[normout]; + INT32 temppoint = m_norm_point_rom[normout]; + INT32 tempslope = m_norm_slope_rom[normout]; - int tlu_rcp = ((-(tempslope * wnorm)) >> 10) + temppoint; + INT32 tlu_rcp = ((-(tempslope * wnorm)) >> 10) + temppoint; - int sprod = SIGN16(ss) * tlu_rcp; - int tprod = SIGN16(st) * tlu_rcp; - int tempmask = ((1 << (shift + 1)) - 1) << (29 - shift); - int shift_value = 13 - shift; + INT32 sprod = SIGN16(ss) * tlu_rcp; + INT32 tprod = SIGN16(st) * tlu_rcp; + INT32 tempmask = ((1 << (shift + 1)) - 1) << (29 - shift); + INT32 shift_value = 13 - shift; - int outofbounds_s = sprod & tempmask; - int outofbounds_t = tprod & tempmask; + INT32 outofbounds_s = sprod & tempmask; + INT32 outofbounds_t = tprod & tempmask; if (shift == 0xe) { *sss = sprod << 1; @@ -372,10 +372,10 @@ void n64_rdp::TCDiv(INT32 ss, INT32 st, INT32 sw, INT32* sss, INT32* sst) *sst = tprod = (tprod >> shift_value); } //compute clamp flags - int under_s = 0; - int under_t = 0; - int over_s = 0; - int over_t = 0; + INT32 under_s = 0; + INT32 under_t = 0; + INT32 over_s = 0; + INT32 over_t = 0; if (outofbounds_s != tempmask && outofbounds_s != 0) { @@ -408,7 +408,7 @@ void n64_rdp::TCDiv(INT32 ss, INT32 st, INT32 sw, INT32* sss, INT32* sst) *sst = (*sst & 0x1ffff) | (over_t << 18) | (under_t << 17); } -INT32 n64_rdp::ColorCombinerEquation(INT32 a, INT32 b, INT32 c, INT32 d) +INT32 n64_rdp::color_combiner_equation(INT32 a, INT32 b, INT32 c, INT32 d) { a = KURT_AKELEY_SIGN9(a); b = KURT_AKELEY_SIGN9(b); @@ -420,7 +420,7 @@ INT32 n64_rdp::ColorCombinerEquation(INT32 a, INT32 b, INT32 c, INT32 d) return a; } -INT32 n64_rdp::AlphaCombinerEquation(INT32 a, INT32 b, INT32 c, INT32 d) +INT32 n64_rdp::alpha_combiner_equation(INT32 a, INT32 b, INT32 c, INT32 d) { a = KURT_AKELEY_SIGN9(a); b = KURT_AKELEY_SIGN9(b); @@ -432,118 +432,118 @@ INT32 n64_rdp::AlphaCombinerEquation(INT32 a, INT32 b, INT32 c, INT32 d) return a; } -void n64_rdp::SetSubAInputRGB(UINT8 **input_r, UINT8 **input_g, UINT8 **input_b, int code, rdp_span_aux *userdata) +void n64_rdp::set_suba_input_rgb(UINT8** input_r, UINT8** input_g, UINT8** input_b, INT32 code, rdp_span_aux* userdata) { switch (code & 0xf) { - case 0: *input_r = &userdata->CombinedColor.i.r; *input_g = &userdata->CombinedColor.i.g; *input_b = &userdata->CombinedColor.i.b; break; - case 1: *input_r = &userdata->Texel0Color.i.r; *input_g = &userdata->Texel0Color.i.g; *input_b = &userdata->Texel0Color.i.b; break; - case 2: *input_r = &userdata->Texel1Color.i.r; *input_g = &userdata->Texel1Color.i.g; *input_b = &userdata->Texel1Color.i.b; break; - case 3: *input_r = &userdata->PrimColor.i.r; *input_g = &userdata->PrimColor.i.g; *input_b = &userdata->PrimColor.i.b; break; - case 4: *input_r = &userdata->ShadeColor.i.r; *input_g = &userdata->ShadeColor.i.g; *input_b = &userdata->ShadeColor.i.b; break; - case 5: *input_r = &userdata->EnvColor.i.r; *input_g = &userdata->EnvColor.i.g; *input_b = &userdata->EnvColor.i.b; break; - case 6: *input_r = &OneColor.i.r; *input_g = &OneColor.i.g; *input_b = &OneColor.i.b; break; - case 7: *input_r = &userdata->NoiseColor.i.r; *input_g = &userdata->NoiseColor.i.g; *input_b = &userdata->NoiseColor.i.b; break; + case 0: *input_r = &userdata->m_combined_color.i.r; *input_g = &userdata->m_combined_color.i.g; *input_b = &userdata->m_combined_color.i.b; break; + case 1: *input_r = &userdata->m_texel0_color.i.r; *input_g = &userdata->m_texel0_color.i.g; *input_b = &userdata->m_texel0_color.i.b; break; + case 2: *input_r = &userdata->m_texel1_color.i.r; *input_g = &userdata->m_texel1_color.i.g; *input_b = &userdata->m_texel1_color.i.b; break; + case 3: *input_r = &userdata->m_prim_color.i.r; *input_g = &userdata->m_prim_color.i.g; *input_b = &userdata->m_prim_color.i.b; break; + case 4: *input_r = &userdata->m_shade_color.i.r; *input_g = &userdata->m_shade_color.i.g; *input_b = &userdata->m_shade_color.i.b; break; + case 5: *input_r = &userdata->m_env_color.i.r; *input_g = &userdata->m_env_color.i.g; *input_b = &userdata->m_env_color.i.b; break; + case 6: *input_r = &m_one.i.r; *input_g = &m_one.i.g; *input_b = &m_one.i.b; break; + case 7: *input_r = &userdata->m_noise_color.i.r; *input_g = &userdata->m_noise_color.i.g; *input_b = &userdata->m_noise_color.i.b; break; case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: { - *input_r = &ZeroColor.i.r; *input_g = &ZeroColor.i.g; *input_b = &ZeroColor.i.b; break; + *input_r = &m_zero.i.r; *input_g = &m_zero.i.g; *input_b = &m_zero.i.b; break; } } } -void n64_rdp::SetSubBInputRGB(UINT8 **input_r, UINT8 **input_g, UINT8 **input_b, int code, rdp_span_aux *userdata) +void n64_rdp::set_subb_input_rgb(UINT8** input_r, UINT8** input_g, UINT8** input_b, INT32 code, rdp_span_aux* userdata) { switch (code & 0xf) { - case 0: *input_r = &userdata->CombinedColor.i.r; *input_g = &userdata->CombinedColor.i.g; *input_b = &userdata->CombinedColor.i.b; break; - case 1: *input_r = &userdata->Texel0Color.i.r; *input_g = &userdata->Texel0Color.i.g; *input_b = &userdata->Texel0Color.i.b; break; - case 2: *input_r = &userdata->Texel1Color.i.r; *input_g = &userdata->Texel1Color.i.g; *input_b = &userdata->Texel1Color.i.b; break; - case 3: *input_r = &userdata->PrimColor.i.r; *input_g = &userdata->PrimColor.i.g; *input_b = &userdata->PrimColor.i.b; break; - case 4: *input_r = &userdata->ShadeColor.i.r; *input_g = &userdata->ShadeColor.i.g; *input_b = &userdata->ShadeColor.i.b; break; - case 5: *input_r = &userdata->EnvColor.i.r; *input_g = &userdata->EnvColor.i.g; *input_b = &userdata->EnvColor.i.b; break; + case 0: *input_r = &userdata->m_combined_color.i.r; *input_g = &userdata->m_combined_color.i.g; *input_b = &userdata->m_combined_color.i.b; break; + case 1: *input_r = &userdata->m_texel0_color.i.r; *input_g = &userdata->m_texel0_color.i.g; *input_b = &userdata->m_texel0_color.i.b; break; + case 2: *input_r = &userdata->m_texel1_color.i.r; *input_g = &userdata->m_texel1_color.i.g; *input_b = &userdata->m_texel1_color.i.b; break; + case 3: *input_r = &userdata->m_prim_color.i.r; *input_g = &userdata->m_prim_color.i.g; *input_b = &userdata->m_prim_color.i.b; break; + case 4: *input_r = &userdata->m_shade_color.i.r; *input_g = &userdata->m_shade_color.i.g; *input_b = &userdata->m_shade_color.i.b; break; + case 5: *input_r = &userdata->m_env_color.i.r; *input_g = &userdata->m_env_color.i.g; *input_b = &userdata->m_env_color.i.b; break; case 6: fatalerror("SET_SUBB_RGB_INPUT: key_center\n"); - case 7: *input_r = (UINT8*)&m_k4; *input_g = (UINT8*)&m_k4; *input_b = (UINT8*)&m_k4; break; + case 7: *input_r = (UINT8*)&m_k4; *input_g = (UINT8*)&m_k4; *input_b = (UINT8*)&m_k4; break; case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: { - *input_r = &ZeroColor.i.r; *input_g = &ZeroColor.i.g; *input_b = &ZeroColor.i.b; break; + *input_r = &m_zero.i.r; *input_g = &m_zero.i.g; *input_b = &m_zero.i.b; break; } } } -void n64_rdp::SetMulInputRGB(UINT8 **input_r, UINT8 **input_g, UINT8 **input_b, int code, rdp_span_aux *userdata) +void n64_rdp::set_mul_input_rgb(UINT8** input_r, UINT8** input_g, UINT8** input_b, INT32 code, rdp_span_aux* userdata) { switch (code & 0x1f) { - case 0: *input_r = &userdata->CombinedColor.i.r; *input_g = &userdata->CombinedColor.i.g; *input_b = &userdata->CombinedColor.i.b; break; - case 1: *input_r = &userdata->Texel0Color.i.r; *input_g = &userdata->Texel0Color.i.g; *input_b = &userdata->Texel0Color.i.b; break; - case 2: *input_r = &userdata->Texel1Color.i.r; *input_g = &userdata->Texel1Color.i.g; *input_b = &userdata->Texel1Color.i.b; break; - case 3: *input_r = &userdata->PrimColor.i.r; *input_g = &userdata->PrimColor.i.g; *input_b = &userdata->PrimColor.i.b; break; - case 4: *input_r = &userdata->ShadeColor.i.r; *input_g = &userdata->ShadeColor.i.g; *input_b = &userdata->ShadeColor.i.b; break; - case 5: *input_r = &userdata->EnvColor.i.r; *input_g = &userdata->EnvColor.i.g; *input_b = &userdata->EnvColor.i.b; break; - case 6: *input_r = &userdata->KeyScale.i.r; *input_g = &userdata->KeyScale.i.g; *input_b = &userdata->KeyScale.i.b; break; - case 7: *input_r = &userdata->CombinedColor.i.a; *input_g = &userdata->CombinedColor.i.a; *input_b = &userdata->CombinedColor.i.a; break; - case 8: *input_r = &userdata->Texel0Color.i.a; *input_g = &userdata->Texel0Color.i.a; *input_b = &userdata->Texel0Color.i.a; break; - case 9: *input_r = &userdata->Texel1Color.i.a; *input_g = &userdata->Texel1Color.i.a; *input_b = &userdata->Texel1Color.i.a; break; - case 10: *input_r = &userdata->PrimColor.i.a; *input_g = &userdata->PrimColor.i.a; *input_b = &userdata->PrimColor.i.a; break; - case 11: *input_r = &userdata->ShadeColor.i.a; *input_g = &userdata->ShadeColor.i.a; *input_b = &userdata->ShadeColor.i.a; break; - case 12: *input_r = &userdata->EnvColor.i.a; *input_g = &userdata->EnvColor.i.a; *input_b = &userdata->EnvColor.i.a; break; - case 13: *input_r = &userdata->LODFraction; *input_g = &userdata->LODFraction; *input_b = &userdata->LODFraction; break; - case 14: *input_r = &userdata->PrimLODFraction; *input_g = &userdata->PrimLODFraction; *input_b = &userdata->PrimLODFraction; break; + case 0: *input_r = &userdata->m_combined_color.i.r; *input_g = &userdata->m_combined_color.i.g; *input_b = &userdata->m_combined_color.i.b; break; + case 1: *input_r = &userdata->m_texel0_color.i.r; *input_g = &userdata->m_texel0_color.i.g; *input_b = &userdata->m_texel0_color.i.b; break; + case 2: *input_r = &userdata->m_texel1_color.i.r; *input_g = &userdata->m_texel1_color.i.g; *input_b = &userdata->m_texel1_color.i.b; break; + case 3: *input_r = &userdata->m_prim_color.i.r; *input_g = &userdata->m_prim_color.i.g; *input_b = &userdata->m_prim_color.i.b; break; + case 4: *input_r = &userdata->m_shade_color.i.r; *input_g = &userdata->m_shade_color.i.g; *input_b = &userdata->m_shade_color.i.b; break; + case 5: *input_r = &userdata->m_env_color.i.r; *input_g = &userdata->m_env_color.i.g; *input_b = &userdata->m_env_color.i.b; break; + case 6: *input_r = &userdata->m_key_scale.i.r; *input_g = &userdata->m_key_scale.i.g; *input_b = &userdata->m_key_scale.i.b; break; + case 7: *input_r = &userdata->m_combined_color.i.a; *input_g = &userdata->m_combined_color.i.a; *input_b = &userdata->m_combined_color.i.a; break; + case 8: *input_r = &userdata->m_texel0_color.i.a; *input_g = &userdata->m_texel0_color.i.a; *input_b = &userdata->m_texel0_color.i.a; break; + case 9: *input_r = &userdata->m_texel1_color.i.a; *input_g = &userdata->m_texel1_color.i.a; *input_b = &userdata->m_texel1_color.i.a; break; + case 10: *input_r = &userdata->m_prim_color.i.a; *input_g = &userdata->m_prim_color.i.a; *input_b = &userdata->m_prim_color.i.a; break; + case 11: *input_r = &userdata->m_shade_color.i.a; *input_g = &userdata->m_shade_color.i.a; *input_b = &userdata->m_shade_color.i.a; break; + case 12: *input_r = &userdata->m_env_color.i.a; *input_g = &userdata->m_env_color.i.a; *input_b = &userdata->m_env_color.i.a; break; + case 13: *input_r = &userdata->m_lod_fraction; *input_g = &userdata->m_lod_fraction; *input_b = &userdata->m_lod_fraction; break; + case 14: *input_r = &userdata->m_prim_lod_fraction; *input_g = &userdata->m_prim_lod_fraction; *input_b = &userdata->m_prim_lod_fraction; break; case 15: *input_r = (UINT8*)&m_k5; *input_g = (UINT8*)&m_k5; *input_b = (UINT8*)&m_k5; break; case 16: case 17: case 18: case 19: case 20: case 21: case 22: case 23: case 24: case 25: case 26: case 27: case 28: case 29: case 30: case 31: { - *input_r = &ZeroColor.i.r; *input_g = &ZeroColor.i.g; *input_b = &ZeroColor.i.b; break; + *input_r = &m_zero.i.r; *input_g = &m_zero.i.g; *input_b = &m_zero.i.b; break; } } } -void n64_rdp::SetAddInputRGB(UINT8 **input_r, UINT8 **input_g, UINT8 **input_b, int code, rdp_span_aux *userdata) +void n64_rdp::set_add_input_rgb(UINT8** input_r, UINT8** input_g, UINT8** input_b, INT32 code, rdp_span_aux* userdata) { switch (code & 0x7) { - case 0: *input_r = &userdata->CombinedColor.i.r; *input_g = &userdata->CombinedColor.i.g; *input_b = &userdata->CombinedColor.i.b; break; - case 1: *input_r = &userdata->Texel0Color.i.r; *input_g = &userdata->Texel0Color.i.g; *input_b = &userdata->Texel0Color.i.b; break; - case 2: *input_r = &userdata->Texel1Color.i.r; *input_g = &userdata->Texel1Color.i.g; *input_b = &userdata->Texel1Color.i.b; break; - case 3: *input_r = &userdata->PrimColor.i.r; *input_g = &userdata->PrimColor.i.g; *input_b = &userdata->PrimColor.i.b; break; - case 4: *input_r = &userdata->ShadeColor.i.r; *input_g = &userdata->ShadeColor.i.g; *input_b = &userdata->ShadeColor.i.b; break; - case 5: *input_r = &userdata->EnvColor.i.r; *input_g = &userdata->EnvColor.i.g; *input_b = &userdata->EnvColor.i.b; break; - case 6: *input_r = &OneColor.i.r; *input_g = &OneColor.i.g; *input_b = &OneColor.i.b; break; - case 7: *input_r = &ZeroColor.i.r; *input_g = &ZeroColor.i.g; *input_b = &ZeroColor.i.b; break; + case 0: *input_r = &userdata->m_combined_color.i.r; *input_g = &userdata->m_combined_color.i.g; *input_b = &userdata->m_combined_color.i.b; break; + case 1: *input_r = &userdata->m_texel0_color.i.r; *input_g = &userdata->m_texel0_color.i.g; *input_b = &userdata->m_texel0_color.i.b; break; + case 2: *input_r = &userdata->m_texel1_color.i.r; *input_g = &userdata->m_texel1_color.i.g; *input_b = &userdata->m_texel1_color.i.b; break; + case 3: *input_r = &userdata->m_prim_color.i.r; *input_g = &userdata->m_prim_color.i.g; *input_b = &userdata->m_prim_color.i.b; break; + case 4: *input_r = &userdata->m_shade_color.i.r; *input_g = &userdata->m_shade_color.i.g; *input_b = &userdata->m_shade_color.i.b; break; + case 5: *input_r = &userdata->m_env_color.i.r; *input_g = &userdata->m_env_color.i.g; *input_b = &userdata->m_env_color.i.b; break; + case 6: *input_r = &m_one.i.r; *input_g = &m_one.i.g; *input_b = &m_one.i.b; break; + case 7: *input_r = &m_zero.i.r; *input_g = &m_zero.i.g; *input_b = &m_zero.i.b; break; } } -void n64_rdp::SetSubInputAlpha(UINT8 **input, int code, rdp_span_aux *userdata) +void n64_rdp::set_sub_input_alpha(UINT8** input, INT32 code, rdp_span_aux* userdata) { switch (code & 0x7) { - case 0: *input = &userdata->CombinedColor.i.a; break; - case 1: *input = &userdata->Texel0Color.i.a; break; - case 2: *input = &userdata->Texel1Color.i.a; break; - case 3: *input = &userdata->PrimColor.i.a; break; - case 4: *input = &userdata->ShadeColor.i.a; break; - case 5: *input = &userdata->EnvColor.i.a; break; - case 6: *input = &OneColor.i.a; break; - case 7: *input = &ZeroColor.i.a; break; + case 0: *input = &userdata->m_combined_color.i.a; break; + case 1: *input = &userdata->m_texel0_color.i.a; break; + case 2: *input = &userdata->m_texel1_color.i.a; break; + case 3: *input = &userdata->m_prim_color.i.a; break; + case 4: *input = &userdata->m_shade_color.i.a; break; + case 5: *input = &userdata->m_env_color.i.a; break; + case 6: *input = &m_one.i.a; break; + case 7: *input = &m_zero.i.a; break; } } -void n64_rdp::SetMulInputAlpha(UINT8 **input, int code, rdp_span_aux *userdata) +void n64_rdp::set_mul_input_alpha(UINT8** input, INT32 code, rdp_span_aux* userdata) { switch (code & 0x7) { - case 0: *input = &userdata->LODFraction; break; - case 1: *input = &userdata->Texel0Color.i.a; break; - case 2: *input = &userdata->Texel1Color.i.a; break; - case 3: *input = &userdata->PrimColor.i.a; break; - case 4: *input = &userdata->ShadeColor.i.a; break; - case 5: *input = &userdata->EnvColor.i.a; break; - case 6: *input = &userdata->PrimLODFraction; break; - case 7: *input = &ZeroColor.i.a; break; + case 0: *input = &userdata->m_lod_fraction; break; + case 1: *input = &userdata->m_texel0_color.i.a; break; + case 2: *input = &userdata->m_texel1_color.i.a; break; + case 3: *input = &userdata->m_prim_color.i.a; break; + case 4: *input = &userdata->m_shade_color.i.a; break; + case 5: *input = &userdata->m_env_color.i.a; break; + case 6: *input = &userdata->m_prim_lod_fraction; break; + case 7: *input = &m_zero.i.a; break; } } -void n64_rdp::SetBlenderInput(int cycle, int which, UINT8 **input_r, UINT8 **input_g, UINT8 **input_b, UINT8 **input_a, int a, int b, rdp_span_aux *userdata) +void n64_rdp::set_blender_input(INT32 cycle, INT32 which, UINT8** input_r, UINT8** input_g, UINT8** input_b, UINT8** input_a, INT32 a, INT32 b, rdp_span_aux* userdata) { switch (a & 0x3) { @@ -551,40 +551,40 @@ void n64_rdp::SetBlenderInput(int cycle, int which, UINT8 **input_r, UINT8 **inp { if (cycle == 0) { - *input_r = &userdata->PixelColor.i.r; - *input_g = &userdata->PixelColor.i.g; - *input_b = &userdata->PixelColor.i.b; + *input_r = &userdata->m_pixel_color.i.r; + *input_g = &userdata->m_pixel_color.i.g; + *input_b = &userdata->m_pixel_color.i.b; } else { - *input_r = &userdata->BlendedPixelColor.i.r; - *input_g = &userdata->BlendedPixelColor.i.g; - *input_b = &userdata->BlendedPixelColor.i.b; + *input_r = &userdata->m_blended_pixel_color.i.r; + *input_g = &userdata->m_blended_pixel_color.i.g; + *input_b = &userdata->m_blended_pixel_color.i.b; } break; } case 1: { - *input_r = &userdata->MemoryColor.i.r; - *input_g = &userdata->MemoryColor.i.g; - *input_b = &userdata->MemoryColor.i.b; + *input_r = &userdata->m_memory_color.i.r; + *input_g = &userdata->m_memory_color.i.g; + *input_b = &userdata->m_memory_color.i.b; break; } case 2: { - *input_r = &userdata->BlendColor.i.r; - *input_g = &userdata->BlendColor.i.g; - *input_b = &userdata->BlendColor.i.b; + *input_r = &userdata->m_blend_color.i.r; + *input_g = &userdata->m_blend_color.i.g; + *input_b = &userdata->m_blend_color.i.b; break; } case 3: { - *input_r = &userdata->FogColor.i.r; - *input_g = &userdata->FogColor.i.g; - *input_b = &userdata->FogColor.i.b; + *input_r = &userdata->m_fog_color.i.r; + *input_g = &userdata->m_fog_color.i.g; + *input_b = &userdata->m_fog_color.i.b; break; } } @@ -593,20 +593,20 @@ void n64_rdp::SetBlenderInput(int cycle, int which, UINT8 **input_r, UINT8 **inp { switch (b & 0x3) { - case 0: *input_a = &userdata->PixelColor.i.a; break; - case 1: *input_a = &userdata->FogColor.i.a; break; - case 2: *input_a = &userdata->ShadeColor.i.a; break; - case 3: *input_a = &ZeroColor.i.a; break; + case 0: *input_a = &userdata->m_pixel_color.i.a; break; + case 1: *input_a = &userdata->m_fog_color.i.a; break; + case 2: *input_a = &userdata->m_shade_color.i.a; break; + case 3: *input_a = &m_zero.i.a; break; } } else { switch (b & 0x3) { - case 0: *input_a = &userdata->InvPixelColor.i.a; break; - case 1: *input_a = &userdata->MemoryColor.i.a; break; - case 2: *input_a = &OneColor.i.a; break; - case 3: *input_a = &ZeroColor.i.a; break; + case 0: *input_a = &userdata->m_inv_pixel_color.i.a; break; + case 1: *input_a = &userdata->m_memory_color.i.a; break; + case 2: *input_a = &m_one.i.a; break; + case 3: *input_a = &m_zero.i.a; break; } } } @@ -627,7 +627,7 @@ const UINT8 n64_rdp::s_magic_matrix[16] = 7, 1, 6, 0 }; -const n64_rdp::ZDecompressEntry n64_rdp::z_dec_table[8] = +const z_decompress_entry_t n64_rdp::m_z_dec_table[8] = { { 6, 0x00000 }, { 5, 0x20000 }, @@ -644,157 +644,157 @@ const n64_rdp::ZDecompressEntry n64_rdp::z_dec_table[8] = void n64_rdp::z_build_com_table(void) { UINT16 altmem = 0; - for(int z = 0; z < 0x40000; z++) - { - switch((z >> 11) & 0x7f) - { - case 0x00: - case 0x01: - case 0x02: - case 0x03: - case 0x04: - case 0x05: - case 0x06: - case 0x07: - case 0x08: - case 0x09: - case 0x0a: - case 0x0b: - case 0x0c: - case 0x0d: - case 0x0e: - case 0x0f: - case 0x10: - case 0x11: - case 0x12: - case 0x13: - case 0x14: - case 0x15: - case 0x16: - case 0x17: - case 0x18: - case 0x19: - case 0x1a: - case 0x1b: - case 0x1c: - case 0x1d: - case 0x1e: - case 0x1f: - case 0x20: - case 0x21: - case 0x22: - case 0x23: - case 0x24: - case 0x25: - case 0x26: - case 0x27: - case 0x28: - case 0x29: - case 0x2a: - case 0x2b: - case 0x2c: - case 0x2d: - case 0x2e: - case 0x2f: - case 0x30: - case 0x31: - case 0x32: - case 0x33: - case 0x34: - case 0x35: - case 0x36: - case 0x37: - case 0x38: - case 0x39: - case 0x3a: - case 0x3b: - case 0x3c: - case 0x3d: - case 0x3e: - case 0x3f: - altmem = (z >> 4) & 0x1ffc; - break; - case 0x40: - case 0x41: - case 0x42: - case 0x43: - case 0x44: - case 0x45: - case 0x46: - case 0x47: - case 0x48: - case 0x49: - case 0x4a: - case 0x4b: - case 0x4c: - case 0x4d: - case 0x4e: - case 0x4f: - case 0x50: - case 0x51: - case 0x52: - case 0x53: - case 0x54: - case 0x55: - case 0x56: - case 0x57: - case 0x58: - case 0x59: - case 0x5a: - case 0x5b: - case 0x5c: - case 0x5d: - case 0x5e: - case 0x5f: - altmem = ((z >> 3) & 0x1ffc) | 0x2000; - break; - case 0x60: - case 0x61: - case 0x62: - case 0x63: - case 0x64: - case 0x65: - case 0x66: - case 0x67: - case 0x68: - case 0x69: - case 0x6a: - case 0x6b: - case 0x6c: - case 0x6d: - case 0x6e: - case 0x6f: - altmem = ((z >> 2) & 0x1ffc) | 0x4000; - break; - case 0x70: - case 0x71: - case 0x72: - case 0x73: - case 0x74: - case 0x75: - case 0x76: - case 0x77: - altmem = ((z >> 1) & 0x1ffc) | 0x6000; - break; - case 0x78://uncompressed z = 0x3c000 - case 0x79: - case 0x7a: - case 0x7b: - altmem = (z & 0x1ffc) | 0x8000; - break; - case 0x7c://uncompressed z = 0x3e000 - case 0x7d: - altmem = ((z << 1) & 0x1ffc) | 0xa000; - break; - case 0x7e://uncompressed z = 0x3f000 - altmem = ((z << 2) & 0x1ffc) | 0xc000; - break; - case 0x7f://uncompressed z = 0x3f000 - altmem = ((z << 2) & 0x1ffc) | 0xe000; - break; - } + for(INT32 z = 0; z < 0x40000; z++) + { + switch((z >> 11) & 0x7f) + { + case 0x00: + case 0x01: + case 0x02: + case 0x03: + case 0x04: + case 0x05: + case 0x06: + case 0x07: + case 0x08: + case 0x09: + case 0x0a: + case 0x0b: + case 0x0c: + case 0x0d: + case 0x0e: + case 0x0f: + case 0x10: + case 0x11: + case 0x12: + case 0x13: + case 0x14: + case 0x15: + case 0x16: + case 0x17: + case 0x18: + case 0x19: + case 0x1a: + case 0x1b: + case 0x1c: + case 0x1d: + case 0x1e: + case 0x1f: + case 0x20: + case 0x21: + case 0x22: + case 0x23: + case 0x24: + case 0x25: + case 0x26: + case 0x27: + case 0x28: + case 0x29: + case 0x2a: + case 0x2b: + case 0x2c: + case 0x2d: + case 0x2e: + case 0x2f: + case 0x30: + case 0x31: + case 0x32: + case 0x33: + case 0x34: + case 0x35: + case 0x36: + case 0x37: + case 0x38: + case 0x39: + case 0x3a: + case 0x3b: + case 0x3c: + case 0x3d: + case 0x3e: + case 0x3f: + altmem = (z >> 4) & 0x1ffc; + break; + case 0x40: + case 0x41: + case 0x42: + case 0x43: + case 0x44: + case 0x45: + case 0x46: + case 0x47: + case 0x48: + case 0x49: + case 0x4a: + case 0x4b: + case 0x4c: + case 0x4d: + case 0x4e: + case 0x4f: + case 0x50: + case 0x51: + case 0x52: + case 0x53: + case 0x54: + case 0x55: + case 0x56: + case 0x57: + case 0x58: + case 0x59: + case 0x5a: + case 0x5b: + case 0x5c: + case 0x5d: + case 0x5e: + case 0x5f: + altmem = ((z >> 3) & 0x1ffc) | 0x2000; + break; + case 0x60: + case 0x61: + case 0x62: + case 0x63: + case 0x64: + case 0x65: + case 0x66: + case 0x67: + case 0x68: + case 0x69: + case 0x6a: + case 0x6b: + case 0x6c: + case 0x6d: + case 0x6e: + case 0x6f: + altmem = ((z >> 2) & 0x1ffc) | 0x4000; + break; + case 0x70: + case 0x71: + case 0x72: + case 0x73: + case 0x74: + case 0x75: + case 0x76: + case 0x77: + altmem = ((z >> 1) & 0x1ffc) | 0x6000; + break; + case 0x78://uncompressed z = 0x3c000 + case 0x79: + case 0x7a: + case 0x7b: + altmem = (z & 0x1ffc) | 0x8000; + break; + case 0x7c://uncompressed z = 0x3e000 + case 0x7d: + altmem = ((z << 1) & 0x1ffc) | 0xa000; + break; + case 0x7e://uncompressed z = 0x3f000 + altmem = ((z << 2) & 0x1ffc) | 0xc000; + break; + case 0x7f://uncompressed z = 0x3f000 + altmem = ((z << 2) & 0x1ffc) | 0xe000; + break; + } - z_com_table[z] = altmem; + m_z_com_table[z] = altmem; } } @@ -804,24 +804,24 @@ void n64_rdp::precalc_cvmask_derivatives(void) const UINT8 yarray[16] = {0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0}; const UINT8 xarray[16] = {0, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}; - for (int i = 0; i < 0x10000; i++) + for (INT32 i = 0; i < 0x10000; i++) { - compressed_cvmasks[i] = (i & 1) | ((i & 4) >> 1) | ((i & 0x20) >> 3) | ((i & 0x80) >> 4) | + m_compressed_cvmasks[i] = (i & 1) | ((i & 4) >> 1) | ((i & 0x20) >> 3) | ((i & 0x80) >> 4) | ((i & 0x100) >> 4) | ((i & 0x400) >> 5) | ((i & 0x2000) >> 7) | ((i & 0x8000) >> 8); } - for (int i = 0; i < 0x100; i++) + for (INT32 i = 0; i < 0x100; i++) { UINT16 mask = decompress_cvmask_frombyte(i); cvarray[i].cvg = cvarray[i].cvbit = 0; cvarray[i].cvbit = (i >> 7) & 1; - for (int k = 0; k < 8; k++) + for (INT32 k = 0; k < 8; k++) { cvarray[i].cvg += ((i >> k) & 1); } UINT16 masky = 0; - for (int k = 0; k < 4; k++) + for (INT32 k = 0; k < 4; k++) { masky |= ((mask & (0xf000 >> (k << 2))) > 0) << k; } @@ -842,29 +842,29 @@ UINT16 n64_rdp::decompress_cvmask_frombyte(UINT8 x) return y; } -void n64_rdp::lookup_cvmask_derivatives(UINT32 mask, UINT8* offx, UINT8* offy, rdp_span_aux *userdata) +void n64_rdp::lookup_cvmask_derivatives(UINT32 mask, UINT8* offx, UINT8* offy, rdp_span_aux* userdata) { - UINT32 index = compressed_cvmasks[mask]; - userdata->CurrentPixCvg = cvarray[index].cvg; - userdata->CurrentCvgBit = cvarray[index].cvbit; + const UINT32 index = m_compressed_cvmasks[mask]; + userdata->m_current_pix_cvg = cvarray[index].cvg; + userdata->m_current_cvg_bit = cvarray[index].cvbit; *offx = cvarray[index].xoff; *offy = cvarray[index].yoff; } -void n64_rdp::ZStore(const rdp_poly_state &object, UINT32 zcurpixel, UINT32 dzcurpixel, UINT32 z, UINT32 enc) +void n64_rdp::z_store(const rdp_poly_state &object, UINT32 zcurpixel, UINT32 dzcurpixel, UINT32 z, UINT32 enc) { - UINT16 zval = z_com_table[z & 0x3ffff]|(enc >> 2); + UINT16 zval = m_z_com_table[z & 0x3ffff]|(enc >> 2); if(zcurpixel <= MEM16_LIMIT) { ((UINT16*)rdram)[zcurpixel ^ WORD_ADDR_XOR] = zval; } if(dzcurpixel <= MEM8_LIMIT) { - HiddenBits[dzcurpixel ^ BYTE_ADDR_XOR] = enc & 3; + m_hidden_bits[dzcurpixel ^ BYTE_ADDR_XOR] = enc & 3; } } -INT32 n64_rdp::NormalizeDZPix(INT32 sum) +INT32 n64_rdp::normalize_dzpix(INT32 sum) { if (sum & 0xc000) { @@ -874,7 +874,7 @@ INT32 n64_rdp::NormalizeDZPix(INT32 sum) { return 1; } - for(int count = 0x2000; count > 0; count >>= 1) + for(INT32 count = 0x2000; count > 0; count >>= 1) { if (sum & count) { @@ -884,33 +884,30 @@ INT32 n64_rdp::NormalizeDZPix(INT32 sum) return 0; } -UINT32 n64_rdp::ZDecompress(UINT32 zcurpixel) +UINT32 n64_rdp::z_decompress(UINT32 zcurpixel) { - UINT32 zb = RREADIDX16(zcurpixel); - CHECK16(zcurpixel); - return z_complete_dec_table[(zb >> 2) & 0x3fff]; + return m_z_complete_dec_table[(RREADIDX16(zcurpixel) >> 2) & 0x3fff]; } -UINT32 n64_rdp::DZDecompress(UINT32 zcurpixel, UINT32 dzcurpixel) +UINT32 n64_rdp::dz_decompress(UINT32 zcurpixel, UINT32 dzcurpixel) { - UINT16 zval = RREADIDX16(zcurpixel); - CHECK16(zcurpixel); - UINT8 dzval = (((dzcurpixel) <= 0x7fffff) ? (HiddenBits[(dzcurpixel) ^ BYTE_ADDR_XOR]) : 0); - UINT32 dz_compressed = ((zval & 3) << 2) | (dzval & 3); + const UINT16 zval = RREADIDX16(zcurpixel); + const UINT8 dzval = (((dzcurpixel) <= 0x7fffff) ? (m_hidden_bits[(dzcurpixel) ^ BYTE_ADDR_XOR]) : 0); + const UINT32 dz_compressed = ((zval & 3) << 2) | (dzval & 3); return (1 << dz_compressed); } -UINT32 n64_rdp::DZCompress(UINT32 value) +UINT32 n64_rdp::dz_compress(UINT32 value) { INT32 j = 0; for (; value > 1; j++, value >>= 1); return j; } -void n64_rdp::GetDitherValues(int x, int y, int* cdith, int* adith, const rdp_poly_state& object) +void n64_rdp::get_dither_values(INT32 x, INT32 y, INT32* cdith, INT32* adith, const rdp_poly_state& object) { - int dithindex = ((y & 3) << 2) | (x & 3); - switch((object.OtherModes.rgb_dither_sel << 2) | object.OtherModes.alpha_dither_sel) + const INT32 dithindex = ((y & 3) << 2) | (x & 3); + switch((object.m_other_modes.rgb_dither_sel << 2) | object.m_other_modes.alpha_dither_sel) { case 0: *adith = *cdith = s_magic_matrix[dithindex]; @@ -983,7 +980,7 @@ INT32 CLAMP(INT32 in, INT32 min, INT32 max) return in; } -bool n64_rdp::ZCompare(UINT32 zcurpixel, UINT32 dzcurpixel, UINT32 sz, UINT16 dzpix, rdp_span_aux *userdata, const rdp_poly_state &object) +bool n64_rdp::z_compare(UINT32 zcurpixel, UINT32 dzcurpixel, UINT32 sz, UINT16 dzpix, rdp_span_aux* userdata, const rdp_poly_state &object) { bool force_coplanar = false; sz &= 0x3ffff; @@ -993,13 +990,12 @@ bool n64_rdp::ZCompare(UINT32 zcurpixel, UINT32 dzcurpixel, UINT32 sz, UINT16 dz UINT32 zval; INT32 rawdzmem; - if (object.OtherModes.z_compare_en) + if (object.m_other_modes.z_compare_en) { - oz = ZDecompress(zcurpixel); - dzmem = DZDecompress(zcurpixel, dzcurpixel); + oz = z_decompress(zcurpixel); + dzmem = dz_decompress(zcurpixel, dzcurpixel); zval = RREADIDX16(zcurpixel); - CHECK16(zcurpixel); - rawdzmem = ((zval & 3) << 2) | ((((dzcurpixel) <= 0x3fffff) ? (HiddenBits[(dzcurpixel) ^ BYTE_ADDR_XOR]) : 0) & 3); + rawdzmem = ((zval & 3) << 2) | ((((dzcurpixel) <= 0x3fffff) ? (m_hidden_bits[(dzcurpixel) ^ BYTE_ADDR_XOR]) : 0) & 3); } else { @@ -1009,14 +1005,14 @@ bool n64_rdp::ZCompare(UINT32 zcurpixel, UINT32 dzcurpixel, UINT32 sz, UINT16 dz rawdzmem = 0xf; } - userdata->m_dzpix_enc = DZCompress(dzpix & 0xffff); - userdata->ShiftA = CLAMP(userdata->m_dzpix_enc - rawdzmem, 0, 4); - userdata->ShiftB = CLAMP(rawdzmem - userdata->m_dzpix_enc, 0, 4); + userdata->m_dzpix_enc = dz_compress(dzpix & 0xffff); + userdata->m_shift_a = CLAMP(userdata->m_dzpix_enc - rawdzmem, 0, 4); + userdata->m_shift_b = CLAMP(rawdzmem - userdata->m_dzpix_enc, 0, 4); - int precision_factor = (zval >> 13) & 0xf; + INT32 precision_factor = (zval >> 13) & 0xf; if (precision_factor < 3) { - int dzmemmodifier = 16 >> precision_factor; + INT32 dzmemmodifier = 16 >> precision_factor; if (dzmem == 0x8000) { force_coplanar = true; @@ -1048,21 +1044,21 @@ bool n64_rdp::ZCompare(UINT32 zcurpixel, UINT32 dzcurpixel, UINT32 sz, UINT16 dz farther = true; } - bool overflow = ((userdata->CurrentMemCvg + userdata->CurrentPixCvg) & 8) > 0; - userdata->BlendEnable = (object.OtherModes.force_blend || (!overflow && object.OtherModes.antialias_en && farther)) ? 1 : 0; - userdata->PreWrap = overflow; + bool overflow = ((userdata->m_current_mem_cvg + userdata->m_current_pix_cvg) & 8) > 0; + userdata->m_blend_enable = (object.m_other_modes.force_blend || (!overflow && object.m_other_modes.antialias_en && farther)) ? 1 : 0; + userdata->m_pre_wrap = overflow; - int cvgcoeff = 0; + INT32 cvgcoeff = 0; UINT32 dzenc = 0; - if (object.OtherModes.z_mode == 1 && infront && farther && overflow) + if (object.m_other_modes.z_mode == 1 && infront && farther && overflow) { - dzenc = DZCompress(dznotshift & 0xffff); + dzenc = dz_compress(dznotshift & 0xffff); cvgcoeff = ((oz >> dzenc) - (sz >> dzenc)) & 0xf; - userdata->CurrentPixCvg = ((cvgcoeff * userdata->CurrentPixCvg) >> 3) & 0xf; + userdata->m_current_pix_cvg = ((cvgcoeff * userdata->m_current_pix_cvg) >> 3) & 0xf; } - if (!object.OtherModes.z_compare_en) + if (!object.m_other_modes.z_compare_en) { return true; } @@ -1075,7 +1071,7 @@ bool n64_rdp::ZCompare(UINT32 zcurpixel, UINT32 dzcurpixel, UINT32 sz, UINT16 dz nearer = true; } - switch(object.OtherModes.z_mode) + switch(object.m_other_modes.z_mode) { case 0: return (max || (overflow ? infront : nearer)); @@ -1090,7 +1086,7 @@ bool n64_rdp::ZCompare(UINT32 zcurpixel, UINT32 dzcurpixel, UINT32 sz, UINT16 dz return false; } -UINT32 n64_rdp::GetLog2(UINT32 lod_clamp) +UINT32 n64_rdp::get_log2(UINT32 lod_clamp) { if (lod_clamp < 2) { @@ -1098,7 +1094,7 @@ UINT32 n64_rdp::GetLog2(UINT32 lod_clamp) } else { - for (int i = 7; i > 0; i--) + for (INT32 i = 7; i > 0; i--) { if ((lod_clamp >> i) & 1) { @@ -1112,7 +1108,7 @@ UINT32 n64_rdp::GetLog2(UINT32 lod_clamp) /*****************************************************************************/ -UINT32 n64_rdp::ReadData(UINT32 address) +UINT32 n64_rdp::read_data(UINT32 address) { if (m_status & 0x1) // XBUS_DMEM_DMA enabled { @@ -1124,10 +1120,10 @@ UINT32 n64_rdp::ReadData(UINT32 address) } } -static const char *const image_format[] = { "RGBA", "YUV", "CI", "IA", "I", "???", "???", "???" }; -static const char *const image_size[] = { "4-bit", "8-bit", "16-bit", "32-bit" }; +const char* n64_rdp::s_image_format[] = { "RGBA", "YUV", "CI", "IA", "I", "???", "???", "???" }; +const char* n64_rdp::s_image_size[] = { "4-bit", "8-bit", "16-bit", "32-bit" }; -static const int rdp_command_length[64] = +const INT32 n64_rdp::s_rdp_command_length[64] = { 8, // 0x00, No Op 8, // 0x01, ??? @@ -1195,11 +1191,8 @@ static const int rdp_command_length[64] = 8 // 0x3f, Set_Color_Image }; -void n64_rdp::Dasm(char *buffer) +void n64_rdp::disassemble(char* buffer) { - int i; - int tile; - const char *format, *size; char sl[32], tl[32], sh[32], th[32]; char s[32], t[32], w[32]; char dsdx[32], dtdx[32], dwdx[32]; @@ -1211,13 +1204,10 @@ void n64_rdp::Dasm(char *buffer) char drdx[32], dgdx[32], dbdx[32], dadx[32]; char drdy[32], dgdy[32], dbdy[32], dady[32]; char drde[32], dgde[32], dbde[32], dade[32]; - UINT32 r,g,b,a; UINT32 cmd[64]; - UINT32 length; - UINT32 command; - length = m_cmd_ptr * 4; + const UINT32 length = m_cmd_ptr * 4; if (length < 8) { sprintf(buffer, "ERROR: length = %d\n", length); @@ -1227,29 +1217,29 @@ void n64_rdp::Dasm(char *buffer) cmd[0] = m_cmd_data[m_cmd_cur+0]; cmd[1] = m_cmd_data[m_cmd_cur+1]; - tile = (cmd[1] >> 24) & 0x7; + const INT32 tile = (cmd[1] >> 24) & 0x7; sprintf(sl, "%4.2f", (float)((cmd[0] >> 12) & 0xfff) / 4.0f); sprintf(tl, "%4.2f", (float)((cmd[0] >> 0) & 0xfff) / 4.0f); sprintf(sh, "%4.2f", (float)((cmd[1] >> 12) & 0xfff) / 4.0f); sprintf(th, "%4.2f", (float)((cmd[1] >> 0) & 0xfff) / 4.0f); - format = image_format[(cmd[0] >> 21) & 0x7]; - size = image_size[(cmd[0] >> 19) & 0x3]; + const char* format = s_image_format[(cmd[0] >> 21) & 0x7]; + const char* size = s_image_size[(cmd[0] >> 19) & 0x3]; - r = (cmd[1] >> 24) & 0xff; - g = (cmd[1] >> 16) & 0xff; - b = (cmd[1] >> 8) & 0xff; - a = (cmd[1] >> 0) & 0xff; + const UINT32 r = (cmd[1] >> 24) & 0xff; + const UINT32 g = (cmd[1] >> 16) & 0xff; + const UINT32 b = (cmd[1] >> 8) & 0xff; + const UINT32 a = (cmd[1] >> 0) & 0xff; - command = (cmd[0] >> 24) & 0x3f; + const UINT32 command = (cmd[0] >> 24) & 0x3f; switch (command) { case 0x00: sprintf(buffer, "No Op"); break; case 0x08: // Tri_NoShade { - int lft = (command >> 23) & 0x1; + const INT32 lft = (command >> 23) & 0x1; - if (length != rdp_command_length[command]) + if (length != s_rdp_command_length[command]) { sprintf(buffer, "ERROR: Tri_NoShade length = %d\n", length); return; @@ -1272,14 +1262,14 @@ void n64_rdp::Dasm(char *buffer) sprintf(xm, "%4.4f", (float)(cmd[6] / 65536.0f)); sprintf(dxmdy, "%4.4f", (float)(cmd[7] / 65536.0f)); - sprintf(buffer, "Tri_NoShade %d, XL: %s, XM: %s, XH: %s, YL: %s, YM: %s, YH: %s\n", lft, xl,xm,xh,yl,ym,yh); + sprintf(buffer, "Tri_NoShade %d, XL: %s, XM: %s, XH: %s, YL: %s, YM: %s, YH: %s\n", lft, xl,xm,xh,yl,ym,yh); break; } case 0x09: // Tri_NoShadeZ { - int lft = (command >> 23) & 0x1; + const INT32 lft = (command >> 23) & 0x1; - if (length != rdp_command_length[command]) + if (length != s_rdp_command_length[command]) { sprintf(buffer, "ERROR: Tri_NoShadeZ length = %d\n", length); return; @@ -1302,20 +1292,20 @@ void n64_rdp::Dasm(char *buffer) sprintf(xm, "%4.4f", (float)(cmd[6] / 65536.0f)); sprintf(dxmdy, "%4.4f", (float)(cmd[7] / 65536.0f)); - sprintf(buffer, "Tri_NoShadeZ %d, XL: %s, XM: %s, XH: %s, YL: %s, YM: %s, YH: %s\n", lft, xl,xm,xh,yl,ym,yh); + sprintf(buffer, "Tri_NoShadeZ %d, XL: %s, XM: %s, XH: %s, YL: %s, YM: %s, YH: %s\n", lft, xl,xm,xh,yl,ym,yh); break; } case 0x0a: // Tri_Tex { - int lft = (command >> 23) & 0x1; + const INT32 lft = (command >> 23) & 0x1; - if (length < rdp_command_length[command]) + if (length < s_rdp_command_length[command]) { sprintf(buffer, "ERROR: Tri_Tex length = %d\n", length); return; } - for (i=2; i < 24; i++) + for (INT32 i = 2; i < 24; i++) { cmd[i] = m_cmd_data[m_cmd_cur+i]; } @@ -1357,15 +1347,15 @@ void n64_rdp::Dasm(char *buffer) } case 0x0b: // Tri_TexZ { - int lft = (command >> 23) & 0x1; + const INT32 lft = (command >> 23) & 0x1; - if (length < rdp_command_length[command]) + if (length < s_rdp_command_length[command]) { sprintf(buffer, "ERROR: Tri_TexZ length = %d\n", length); return; } - for (i=2; i < 24; i++) + for (INT32 i = 2; i < 24; i++) { cmd[i] = m_cmd_data[m_cmd_cur+i]; } @@ -1407,15 +1397,15 @@ void n64_rdp::Dasm(char *buffer) } case 0x0c: // Tri_Shade { - int lft = (command >> 23) & 0x1; + const INT32 lft = (command >> 23) & 0x1; - if (length != rdp_command_length[command]) + if (length != s_rdp_command_length[command]) { sprintf(buffer, "ERROR: Tri_Shade length = %d\n", length); return; } - for (i=2; i < 24; i++) + for (INT32 i = 2; i < 24; i++) { cmd[i] = m_cmd_data[i]; } @@ -1459,15 +1449,15 @@ void n64_rdp::Dasm(char *buffer) } case 0x0d: // Tri_ShadeZ { - int lft = (command >> 23) & 0x1; + const INT32 lft = (command >> 23) & 0x1; - if (length != rdp_command_length[command]) + if (length != s_rdp_command_length[command]) { sprintf(buffer, "ERROR: Tri_ShadeZ length = %d\n", length); return; } - for (i=2; i < 24; i++) + for (INT32 i = 2; i < 24; i++) { cmd[i] = m_cmd_data[i]; } @@ -1511,15 +1501,15 @@ void n64_rdp::Dasm(char *buffer) } case 0x0e: // Tri_TexShade { - int lft = (command >> 23) & 0x1; + const INT32 lft = (command >> 23) & 0x1; - if (length < rdp_command_length[command]) + if (length < s_rdp_command_length[command]) { sprintf(buffer, "ERROR: Tri_TexShade length = %d\n", length); return; } - for (i=2; i < 40; i++) + for (INT32 i = 2; i < 40; i++) { cmd[i] = m_cmd_data[m_cmd_cur+i]; } @@ -1586,15 +1576,15 @@ void n64_rdp::Dasm(char *buffer) } case 0x0f: // Tri_TexShadeZ { - int lft = (command >> 23) & 0x1; + const INT32 lft = (command >> 23) & 0x1; - if (length < rdp_command_length[command]) + if (length < s_rdp_command_length[command]) { sprintf(buffer, "ERROR: Tri_TexShadeZ length = %d\n", length); return; } - for (i=2; i < 40; i++) + for (INT32 i = 2; i < 40; i++) { cmd[i] = m_cmd_data[m_cmd_cur+i]; } @@ -1703,7 +1693,7 @@ void n64_rdp::Dasm(char *buffer) case 0x3d: sprintf(buffer, "Set_Texture_Image %s, %s, %d, %08X", format, size, (cmd[0] & 0x1ff)+1, cmd[1]); break; case 0x3e: sprintf(buffer, "Set_Mask_Image %08X", cmd[1]); break; case 0x3f: sprintf(buffer, "Set_Color_Image %s, %s, %d, %08X", format, size, (cmd[0] & 0x1ff)+1, cmd[1]); break; - default: sprintf(buffer, "??? (%08X %08X)", cmd[0], cmd[1]); break; + default: sprintf(buffer, "Unknown (%08X %08X)", cmd[0], cmd[1]); break; } } @@ -1741,16 +1731,16 @@ static INT32 CLIP(INT32 value,INT32 min,INT32 max) } } -void n64_rdp::compute_cvg_noflip(extent_t *Spans, INT32* majorx, INT32* minorx, INT32* majorxint, INT32* minorxint, INT32 scanline, INT32 yh, INT32 yl, INT32 base) +void n64_rdp::compute_cvg_noflip(extent_t* spans, INT32* majorx, INT32* minorx, INT32* majorxint, INT32* minorxint, INT32 scanline, INT32 yh, INT32 yl, INT32 base) { INT32 purgestart = 0xfff; INT32 purgeend = 0; - bool writablescanline = !(scanline & ~0x3ff); - INT32 scanlinespx = scanline << 2; + const bool writablescanline = !(scanline & ~0x3ff); + const INT32 scanlinespx = scanline << 2; if (!writablescanline) return; - for(int i = 0; i < 4; i++) + for(INT32 i = 0; i < 4; i++) { if (minorxint[i] < purgestart) { @@ -1768,10 +1758,10 @@ void n64_rdp::compute_cvg_noflip(extent_t *Spans, INT32* majorx, INT32* minorx, if (length < 0) return; - rdp_span_aux *userdata = (rdp_span_aux*)Spans[scanline - base].userdata; + rdp_span_aux* userdata = (rdp_span_aux*)spans[scanline - base].userdata; memset(&userdata->m_cvg[purgestart], 0, (length + 1) << 1); - for(int i = 0; i < 4; i++) + for(INT32 i = 0; i < 4; i++) { INT32 minorcur = minorx[i]; INT32 majorcur = majorx[i]; @@ -1814,16 +1804,16 @@ void n64_rdp::compute_cvg_noflip(extent_t *Spans, INT32* majorx, INT32* minorx, } } -void n64_rdp::compute_cvg_flip(extent_t *Spans, INT32* majorx, INT32* minorx, INT32* majorxint, INT32* minorxint, INT32 scanline, INT32 yh, INT32 yl, INT32 base) +void n64_rdp::compute_cvg_flip(extent_t* spans, INT32* majorx, INT32* minorx, INT32* majorxint, INT32* minorxint, INT32 scanline, INT32 yh, INT32 yl, INT32 base) { INT32 purgestart = 0xfff; INT32 purgeend = 0; - bool writablescanline = !(scanline & ~0x3ff); - INT32 scanlinespx = scanline << 2; + const bool writablescanline = !(scanline & ~0x3ff); + const INT32 scanlinespx = scanline << 2; if(!writablescanline) return; - for(int i = 0; i < 4; i++) + for(INT32 i = 0; i < 4; i++) { if (majorxint[i] < purgestart) { @@ -1838,14 +1828,14 @@ void n64_rdp::compute_cvg_flip(extent_t *Spans, INT32* majorx, INT32* minorx, IN purgestart = CLIP(purgestart, 0, 1023); purgeend = CLIP(purgeend, 0, 1023); - int length = purgeend - purgestart; + INT32 length = purgeend - purgestart; if (length < 0) return; - rdp_span_aux *userdata = (rdp_span_aux*)Spans[scanline - base].userdata; + rdp_span_aux* userdata = (rdp_span_aux*)spans[scanline - base].userdata; memset(&userdata->m_cvg[purgestart], 0, (length + 1) << 1); - for(int i = 0; i < 4; i++) + for(INT32 i = 0; i < 4; i++) { INT32 minorcur = minorx[i]; INT32 majorcur = majorx[i]; @@ -1888,30 +1878,30 @@ void n64_rdp::compute_cvg_flip(extent_t *Spans, INT32* majorx, INT32* minorx, IN } } -void n64_rdp::DrawTriangle(bool shade, bool texture, bool zbuffer, bool rect) +void n64_rdp::draw_triangle(bool shade, bool texture, bool zbuffer, bool rect) { - UINT32 *cmd_data = rect ? m_temp_rect_data : m_cmd_data; - UINT32 fifo_index = rect ? 0 : m_cmd_cur; - UINT32 w1 = cmd_data[fifo_index + 0]; - UINT32 w2 = cmd_data[fifo_index + 1]; + const UINT32* cmd_data = rect ? m_temp_rect_data : m_cmd_data; + const UINT32 fifo_index = rect ? 0 : m_cmd_cur; + const UINT32 w1 = cmd_data[fifo_index + 0]; + const UINT32 w2 = cmd_data[fifo_index + 1]; - int flip = (w1 & 0x00800000) ? 1 : 0; - MiscState.MaxLevel = ((w1 >> 19) & 7); - int tilenum = (w1 >> 16) & 0x7; + INT32 flip = (w1 & 0x00800000) ? 1 : 0; + m_misc_state.m_max_level = ((w1 >> 19) & 7); + INT32 tilenum = (w1 >> 16) & 0x7; - int dsdiff = 0, dtdiff = 0, dwdiff = 0, drdiff = 0, dgdiff = 0, dbdiff = 0, dadiff = 0, dzdiff = 0; - int dsdeh = 0, dtdeh = 0, dwdeh = 0, drdeh = 0, dgdeh = 0, dbdeh = 0, dadeh = 0, dzdeh = 0; - int dsdxh = 0, dtdxh = 0, dwdxh = 0, drdxh = 0, dgdxh = 0, dbdxh = 0, dadxh = 0, dzdxh = 0; - int dsdyh = 0, dtdyh = 0, dwdyh = 0, drdyh = 0, dgdyh = 0, dbdyh = 0, dadyh = 0, dzdyh = 0; + INT32 dsdiff = 0, dtdiff = 0, dwdiff = 0, drdiff = 0, dgdiff = 0, dbdiff = 0, dadiff = 0, dzdiff = 0; + INT32 dsdeh = 0, dtdeh = 0, dwdeh = 0, drdeh = 0, dgdeh = 0, dbdeh = 0, dadeh = 0, dzdeh = 0; + INT32 dsdxh = 0, dtdxh = 0, dwdxh = 0, drdxh = 0, dgdxh = 0, dbdxh = 0, dadxh = 0, dzdxh = 0; + INT32 dsdyh = 0, dtdyh = 0, dwdyh = 0, drdyh = 0, dgdyh = 0, dbdyh = 0, dadyh = 0, dzdyh = 0; INT32 maxxmx = 0; // maxxmx / minxhx very opaque names, consider re-naming INT32 minxmx = 0; INT32 maxxhx = 0; INT32 minxhx = 0; - int shade_base = fifo_index + 8; - int texture_base = fifo_index + 8; - int zbuffer_base = fifo_index + 8; + INT32 shade_base = fifo_index + 8; + INT32 texture_base = fifo_index + 8; + INT32 zbuffer_base = fifo_index + 8; if(shade) { texture_base += 16; @@ -1948,73 +1938,73 @@ void n64_rdp::DrawTriangle(bool shade, bool texture, bool zbuffer, bool rect) if (xm & 0x20000000) xm |= 0xc0000000; if (xh & 0x20000000) xh |= 0xc0000000; - int r = (cmd_data[shade_base+0 ] & 0xffff0000) | ((cmd_data[shade_base+4 ] >> 16) & 0x0000ffff); - int g = ((cmd_data[shade_base+0 ] << 16) & 0xffff0000) | (cmd_data[shade_base+4 ] & 0x0000ffff); - int b = (cmd_data[shade_base+1 ] & 0xffff0000) | ((cmd_data[shade_base+5 ] >> 16) & 0x0000ffff); - int a = ((cmd_data[shade_base+1 ] << 16) & 0xffff0000) | (cmd_data[shade_base+5 ] & 0x0000ffff); - int drdx = (cmd_data[shade_base+2 ] & 0xffff0000) | ((cmd_data[shade_base+6 ] >> 16) & 0x0000ffff); - int dgdx = ((cmd_data[shade_base+2 ] << 16) & 0xffff0000) | (cmd_data[shade_base+6 ] & 0x0000ffff); - int dbdx = (cmd_data[shade_base+3 ] & 0xffff0000) | ((cmd_data[shade_base+7 ] >> 16) & 0x0000ffff); - int dadx = ((cmd_data[shade_base+3 ] << 16) & 0xffff0000) | (cmd_data[shade_base+7 ] & 0x0000ffff); - int drde = (cmd_data[shade_base+8 ] & 0xffff0000) | ((cmd_data[shade_base+12] >> 16) & 0x0000ffff); - int dgde = ((cmd_data[shade_base+8 ] << 16) & 0xffff0000) | (cmd_data[shade_base+12] & 0x0000ffff); - int dbde = (cmd_data[shade_base+9 ] & 0xffff0000) | ((cmd_data[shade_base+13] >> 16) & 0x0000ffff); - int dade = ((cmd_data[shade_base+9 ] << 16) & 0xffff0000) | (cmd_data[shade_base+13] & 0x0000ffff); - int drdy = (cmd_data[shade_base+10] & 0xffff0000) | ((cmd_data[shade_base+14] >> 16) & 0x0000ffff); - int dgdy = ((cmd_data[shade_base+10] << 16) & 0xffff0000) | (cmd_data[shade_base+14] & 0x0000ffff); - int dbdy = (cmd_data[shade_base+11] & 0xffff0000) | ((cmd_data[shade_base+15] >> 16) & 0x0000ffff); - int dady = ((cmd_data[shade_base+11] << 16) & 0xffff0000) | (cmd_data[shade_base+15] & 0x0000ffff); - int s = (cmd_data[texture_base+0 ] & 0xffff0000) | ((cmd_data[texture_base+4 ] >> 16) & 0x0000ffff); - int t = ((cmd_data[texture_base+0 ] << 16) & 0xffff0000) | (cmd_data[texture_base+4 ] & 0x0000ffff); - int w = (cmd_data[texture_base+1 ] & 0xffff0000) | ((cmd_data[texture_base+5 ] >> 16) & 0x0000ffff); - int dsdx = (cmd_data[texture_base+2 ] & 0xffff0000) | ((cmd_data[texture_base+6 ] >> 16) & 0x0000ffff); - int dtdx = ((cmd_data[texture_base+2 ] << 16) & 0xffff0000) | (cmd_data[texture_base+6 ] & 0x0000ffff); - int dwdx = (cmd_data[texture_base+3 ] & 0xffff0000) | ((cmd_data[texture_base+7 ] >> 16) & 0x0000ffff); - int dsde = (cmd_data[texture_base+8 ] & 0xffff0000) | ((cmd_data[texture_base+12] >> 16) & 0x0000ffff); - int dtde = ((cmd_data[texture_base+8 ] << 16) & 0xffff0000) | (cmd_data[texture_base+12] & 0x0000ffff); - int dwde = (cmd_data[texture_base+9 ] & 0xffff0000) | ((cmd_data[texture_base+13] >> 16) & 0x0000ffff); - int dsdy = (cmd_data[texture_base+10] & 0xffff0000) | ((cmd_data[texture_base+14] >> 16) & 0x0000ffff); - int dtdy = ((cmd_data[texture_base+10] << 16) & 0xffff0000) | (cmd_data[texture_base+14] & 0x0000ffff); - int dwdy = (cmd_data[texture_base+11] & 0xffff0000) | ((cmd_data[texture_base+15] >> 16) & 0x0000ffff); - int z = cmd_data[zbuffer_base+0]; - int dzdx = cmd_data[zbuffer_base+1]; - int dzde = cmd_data[zbuffer_base+2]; - int dzdy = cmd_data[zbuffer_base+3]; - - int dzdy_dz = (dzdy >> 16) & 0xffff; - int dzdx_dz = (dzdx >> 16) & 0xffff; - - extent_t Spans[2048]; + INT32 r = (cmd_data[shade_base+0 ] & 0xffff0000) | ((cmd_data[shade_base+4 ] >> 16) & 0x0000ffff); + INT32 g = ((cmd_data[shade_base+0 ] << 16) & 0xffff0000) | (cmd_data[shade_base+4 ] & 0x0000ffff); + INT32 b = (cmd_data[shade_base+1 ] & 0xffff0000) | ((cmd_data[shade_base+5 ] >> 16) & 0x0000ffff); + INT32 a = ((cmd_data[shade_base+1 ] << 16) & 0xffff0000) | (cmd_data[shade_base+5 ] & 0x0000ffff); + const INT32 drdx = (cmd_data[shade_base+2 ] & 0xffff0000) | ((cmd_data[shade_base+6 ] >> 16) & 0x0000ffff); + const INT32 dgdx = ((cmd_data[shade_base+2 ] << 16) & 0xffff0000) | (cmd_data[shade_base+6 ] & 0x0000ffff); + const INT32 dbdx = (cmd_data[shade_base+3 ] & 0xffff0000) | ((cmd_data[shade_base+7 ] >> 16) & 0x0000ffff); + const INT32 dadx = ((cmd_data[shade_base+3 ] << 16) & 0xffff0000) | (cmd_data[shade_base+7 ] & 0x0000ffff); + const INT32 drde = (cmd_data[shade_base+8 ] & 0xffff0000) | ((cmd_data[shade_base+12] >> 16) & 0x0000ffff); + const INT32 dgde = ((cmd_data[shade_base+8 ] << 16) & 0xffff0000) | (cmd_data[shade_base+12] & 0x0000ffff); + const INT32 dbde = (cmd_data[shade_base+9 ] & 0xffff0000) | ((cmd_data[shade_base+13] >> 16) & 0x0000ffff); + const INT32 dade = ((cmd_data[shade_base+9 ] << 16) & 0xffff0000) | (cmd_data[shade_base+13] & 0x0000ffff); + const INT32 drdy = (cmd_data[shade_base+10] & 0xffff0000) | ((cmd_data[shade_base+14] >> 16) & 0x0000ffff); + const INT32 dgdy = ((cmd_data[shade_base+10] << 16) & 0xffff0000) | (cmd_data[shade_base+14] & 0x0000ffff); + const INT32 dbdy = (cmd_data[shade_base+11] & 0xffff0000) | ((cmd_data[shade_base+15] >> 16) & 0x0000ffff); + const INT32 dady = ((cmd_data[shade_base+11] << 16) & 0xffff0000) | (cmd_data[shade_base+15] & 0x0000ffff); + INT32 s = (cmd_data[texture_base+0 ] & 0xffff0000) | ((cmd_data[texture_base+4 ] >> 16) & 0x0000ffff); + INT32 t = ((cmd_data[texture_base+0 ] << 16) & 0xffff0000) | (cmd_data[texture_base+4 ] & 0x0000ffff); + INT32 w = (cmd_data[texture_base+1 ] & 0xffff0000) | ((cmd_data[texture_base+5 ] >> 16) & 0x0000ffff); + const INT32 dsdx = (cmd_data[texture_base+2 ] & 0xffff0000) | ((cmd_data[texture_base+6 ] >> 16) & 0x0000ffff); + const INT32 dtdx = ((cmd_data[texture_base+2 ] << 16) & 0xffff0000) | (cmd_data[texture_base+6 ] & 0x0000ffff); + const INT32 dwdx = (cmd_data[texture_base+3 ] & 0xffff0000) | ((cmd_data[texture_base+7 ] >> 16) & 0x0000ffff); + const INT32 dsde = (cmd_data[texture_base+8 ] & 0xffff0000) | ((cmd_data[texture_base+12] >> 16) & 0x0000ffff); + const INT32 dtde = ((cmd_data[texture_base+8 ] << 16) & 0xffff0000) | (cmd_data[texture_base+12] & 0x0000ffff); + const INT32 dwde = (cmd_data[texture_base+9 ] & 0xffff0000) | ((cmd_data[texture_base+13] >> 16) & 0x0000ffff); + const INT32 dsdy = (cmd_data[texture_base+10] & 0xffff0000) | ((cmd_data[texture_base+14] >> 16) & 0x0000ffff); + const INT32 dtdy = ((cmd_data[texture_base+10] << 16) & 0xffff0000) | (cmd_data[texture_base+14] & 0x0000ffff); + const INT32 dwdy = (cmd_data[texture_base+11] & 0xffff0000) | ((cmd_data[texture_base+15] >> 16) & 0x0000ffff); + INT32 z = cmd_data[zbuffer_base+0]; + const INT32 dzdx = cmd_data[zbuffer_base+1]; + const INT32 dzde = cmd_data[zbuffer_base+2]; + const INT32 dzdy = cmd_data[zbuffer_base+3]; + + const INT32 dzdy_dz = (dzdy >> 16) & 0xffff; + const INT32 dzdx_dz = (dzdx >> 16) & 0xffff; + + extent_t spans[2048]; #ifdef MAME_DEBUG - memset(Spans, 0xcc, sizeof(Spans)); + memset(spans, 0xcc, sizeof(spans)); #endif - SpanBase.m_span_drdy = drdy; - SpanBase.m_span_dgdy = dgdy; - SpanBase.m_span_dbdy = dbdy; - SpanBase.m_span_dady = dady; - SpanBase.m_span_dzdy = OtherModes.z_source_sel ? 0 : dzdy; + m_span_base.m_span_drdy = drdy; + m_span_base.m_span_dgdy = dgdy; + m_span_base.m_span_dbdy = dbdy; + m_span_base.m_span_dady = dady; + m_span_base.m_span_dzdy = m_other_modes.z_source_sel ? 0 : dzdy; UINT32 temp_dzpix = ((dzdy_dz & 0x8000) ? ((~dzdy_dz) & 0x7fff) : dzdy_dz) + ((dzdx_dz & 0x8000) ? ((~dzdx_dz) & 0x7fff) : dzdx_dz); - SpanBase.m_span_dr = drdx & ~0x1f; - SpanBase.m_span_dg = dgdx & ~0x1f; - SpanBase.m_span_db = dbdx & ~0x1f; - SpanBase.m_span_da = dadx & ~0x1f; - SpanBase.m_span_ds = dsdx; - SpanBase.m_span_dt = dtdx; - SpanBase.m_span_dw = dwdx; - SpanBase.m_span_dz = OtherModes.z_source_sel ? 0 : dzdx; - SpanBase.m_span_dymax = 0; - SpanBase.m_span_dzpix = m_dzpix_normalize[temp_dzpix & 0xffff]; - - int xleft_inc = (dxmdy >> 2) & ~1; - int xright_inc = (dxhdy >> 2) & ~1; - - int xright = xh & ~1; - int xleft = xm & ~1; - - int sign_dxhdy = (dxhdy & 0x80000000) ? 1 : 0; - int do_offset = !(sign_dxhdy ^ (flip)); + m_span_base.m_span_dr = drdx & ~0x1f; + m_span_base.m_span_dg = dgdx & ~0x1f; + m_span_base.m_span_db = dbdx & ~0x1f; + m_span_base.m_span_da = dadx & ~0x1f; + m_span_base.m_span_ds = dsdx; + m_span_base.m_span_dt = dtdx; + m_span_base.m_span_dw = dwdx; + m_span_base.m_span_dz = m_other_modes.z_source_sel ? 0 : dzdx; + m_span_base.m_span_dymax = 0; + m_span_base.m_span_dzpix = m_dzpix_normalize[temp_dzpix & 0xffff]; + + INT32 xleft_inc = (dxmdy >> 2) & ~1; + INT32 xright_inc = (dxhdy >> 2) & ~1; + + INT32 xright = xh & ~1; + INT32 xleft = xm & ~1; + + const INT32 sign_dxhdy = (dxhdy & 0x80000000) ? 1 : 0; + const INT32 do_offset = !(sign_dxhdy ^ (flip)); if (do_offset) { @@ -2050,19 +2040,18 @@ void n64_rdp::DrawTriangle(bool shade, bool texture, bool zbuffer, bool rect) dadxh = dadx >> 8; dzdxh = dzdx >> 8; - INT32 ycur = yh & ~3; - INT32 ylfar = yl | 3; - INT32 ldflag = (sign_dxhdy ^ flip) ? 0 : 3; + const INT32 ycur = yh & ~3; + const INT32 ylfar = yl | 3; + const INT32 ldflag = (sign_dxhdy ^ flip) ? 0 : 3; INT32 majorx[4]; INT32 minorx[4]; INT32 majorxint[4]; INT32 minorxint[4]; - bool valid_y = true; - int xfrac = ((xright >> 8) & 0xff); + INT32 xfrac = ((xright >> 8) & 0xff); - int clipy1 = Scissor.m_yh; - int clipy2 = Scissor.m_yl; + const INT32 clipy1 = m_scissor.m_yh; + const INT32 clipy2 = m_scissor.m_yl; // Trivial reject if((ycur >> 2) >= clipy2 && (ylfar >> 2) >= clipy2) @@ -2075,12 +2064,12 @@ void n64_rdp::DrawTriangle(bool shade, bool texture, bool zbuffer, bool rect) } bool new_object = true; - rdp_poly_state *object = NULL; + rdp_poly_state* object = NULL; bool valid = false; if(flip) { - for (int k = ycur; k <= ylfar; k++) + for (INT32 k = ycur; k <= ylfar; k++) { if (k == ym) { @@ -2088,12 +2077,12 @@ void n64_rdp::DrawTriangle(bool shade, bool texture, bool zbuffer, bool rect) xleft_inc = (dxldy >> 2) & ~1; } - int xstart = xleft >> 16; // 319 - int xend = xright >> 16; // 0 - int j = k >> 2; - int spanidx = (k - ycur) >> 2; - int spix = k & 3; - valid_y = !(k < yh || k >= yl); + const INT32 xstart = xleft >> 16; // 319 + const INT32 xend = xright >> 16; // 0 + const INT32 j = k >> 2; + const INT32 spanidx = (k - ycur) >> 2; + const INT32 spix = k & 3; + const bool valid_y = !(k < yh || k >= yl); if (spanidx >= 0 && spanidx < 2048) { @@ -2123,110 +2112,110 @@ void n64_rdp::DrawTriangle(bool shade, bool texture, bool zbuffer, bool rect) new_object = false; } - Spans[spanidx].userdata = (void*)((UINT8*)AuxBuf + AuxBufPtr); - AuxBufPtr += sizeof(rdp_span_aux); + spans[spanidx].userdata = (void*)((UINT8*)m_aux_buf + m_aux_buf_ptr); + m_aux_buf_ptr += sizeof(rdp_span_aux); - if(AuxBufPtr >= EXTENT_AUX_COUNT) + if(m_aux_buf_ptr >= EXTENT_AUX_COUNT) { - fatalerror("n64_rdp::DrawTriangle: span aux buffer overflow\n"); + fatalerror("n64_rdp::draw_triangle: span aux buffer overflow\n"); } - rdp_span_aux *userdata = (rdp_span_aux*)Spans[spanidx].userdata; + rdp_span_aux* userdata = (rdp_span_aux*)spans[spanidx].userdata; valid = true; userdata->m_tmem = object->m_tmem; - userdata->BlendColor = BlendColor; - userdata->PrimColor = PrimColor; - userdata->EnvColor = EnvColor; - userdata->FogColor = FogColor; - userdata->KeyScale = KeyScale; - userdata->LODFraction = LODFraction; - userdata->PrimLODFraction = PrimLODFraction; - - userdata->ColorInputs.combiner_rgbsub_a_r[0] = userdata->ColorInputs.combiner_rgbsub_a_r[1] = &OneColor.i.r; - userdata->ColorInputs.combiner_rgbsub_a_g[0] = userdata->ColorInputs.combiner_rgbsub_a_g[1] = &OneColor.i.g; - userdata->ColorInputs.combiner_rgbsub_a_b[0] = userdata->ColorInputs.combiner_rgbsub_a_b[1] = &OneColor.i.b; - userdata->ColorInputs.combiner_rgbsub_b_r[0] = userdata->ColorInputs.combiner_rgbsub_b_r[1] = &OneColor.i.r; - userdata->ColorInputs.combiner_rgbsub_b_g[0] = userdata->ColorInputs.combiner_rgbsub_b_g[1] = &OneColor.i.g; - userdata->ColorInputs.combiner_rgbsub_b_b[0] = userdata->ColorInputs.combiner_rgbsub_b_b[1] = &OneColor.i.b; - userdata->ColorInputs.combiner_rgbmul_r[0] = userdata->ColorInputs.combiner_rgbmul_r[1] = &OneColor.i.r; - userdata->ColorInputs.combiner_rgbmul_g[0] = userdata->ColorInputs.combiner_rgbmul_g[1] = &OneColor.i.g; - userdata->ColorInputs.combiner_rgbmul_b[0] = userdata->ColorInputs.combiner_rgbmul_b[1] = &OneColor.i.b; - userdata->ColorInputs.combiner_rgbadd_r[0] = userdata->ColorInputs.combiner_rgbadd_r[1] = &OneColor.i.r; - userdata->ColorInputs.combiner_rgbadd_g[0] = userdata->ColorInputs.combiner_rgbadd_g[1] = &OneColor.i.g; - userdata->ColorInputs.combiner_rgbadd_b[0] = userdata->ColorInputs.combiner_rgbadd_b[1] = &OneColor.i.b; - userdata->ColorInputs.combiner_alphasub_a[0] = userdata->ColorInputs.combiner_alphasub_a[1] = &OneColor.i.a; - userdata->ColorInputs.combiner_alphasub_b[0] = userdata->ColorInputs.combiner_alphasub_b[1] = &OneColor.i.a; - userdata->ColorInputs.combiner_alphamul[0] = userdata->ColorInputs.combiner_alphamul[1] = &OneColor.i.a; - userdata->ColorInputs.combiner_alphaadd[0] = userdata->ColorInputs.combiner_alphaadd[1] = &OneColor.i.a; - - userdata->ColorInputs.blender1a_r[0] = userdata->ColorInputs.blender1a_r[1] = &userdata->PixelColor.i.r; - userdata->ColorInputs.blender1a_g[0] = userdata->ColorInputs.blender1a_g[1] = &userdata->PixelColor.i.g; - userdata->ColorInputs.blender1a_b[0] = userdata->ColorInputs.blender1a_b[1] = &userdata->PixelColor.i.b; - userdata->ColorInputs.blender1b_a[0] = userdata->ColorInputs.blender1b_a[1] = &userdata->PixelColor.i.a; - userdata->ColorInputs.blender2a_r[0] = userdata->ColorInputs.blender2a_r[1] = &userdata->PixelColor.i.r; - userdata->ColorInputs.blender2a_g[0] = userdata->ColorInputs.blender2a_g[1] = &userdata->PixelColor.i.g; - userdata->ColorInputs.blender2a_b[0] = userdata->ColorInputs.blender2a_b[1] = &userdata->PixelColor.i.b; - userdata->ColorInputs.blender2b_a[0] = userdata->ColorInputs.blender2b_a[1] = &userdata->PixelColor.i.a; + userdata->m_blend_color = m_blend_color; + userdata->m_prim_color = m_prim_color; + userdata->m_env_color = m_env_color; + userdata->m_fog_color = m_fog_color; + userdata->m_key_scale = m_key_scale; + userdata->m_lod_fraction = m_lod_fraction; + userdata->m_prim_lod_fraction = m_prim_lod_fraction; + + userdata->m_color_inputs.combiner_rgbsub_a_r[0] = userdata->m_color_inputs.combiner_rgbsub_a_r[1] = &m_one.i.r; + userdata->m_color_inputs.combiner_rgbsub_a_g[0] = userdata->m_color_inputs.combiner_rgbsub_a_g[1] = &m_one.i.g; + userdata->m_color_inputs.combiner_rgbsub_a_b[0] = userdata->m_color_inputs.combiner_rgbsub_a_b[1] = &m_one.i.b; + userdata->m_color_inputs.combiner_rgbsub_b_r[0] = userdata->m_color_inputs.combiner_rgbsub_b_r[1] = &m_one.i.r; + userdata->m_color_inputs.combiner_rgbsub_b_g[0] = userdata->m_color_inputs.combiner_rgbsub_b_g[1] = &m_one.i.g; + userdata->m_color_inputs.combiner_rgbsub_b_b[0] = userdata->m_color_inputs.combiner_rgbsub_b_b[1] = &m_one.i.b; + userdata->m_color_inputs.combiner_rgbmul_r[0] = userdata->m_color_inputs.combiner_rgbmul_r[1] = &m_one.i.r; + userdata->m_color_inputs.combiner_rgbmul_g[0] = userdata->m_color_inputs.combiner_rgbmul_g[1] = &m_one.i.g; + userdata->m_color_inputs.combiner_rgbmul_b[0] = userdata->m_color_inputs.combiner_rgbmul_b[1] = &m_one.i.b; + userdata->m_color_inputs.combiner_rgbadd_r[0] = userdata->m_color_inputs.combiner_rgbadd_r[1] = &m_one.i.r; + userdata->m_color_inputs.combiner_rgbadd_g[0] = userdata->m_color_inputs.combiner_rgbadd_g[1] = &m_one.i.g; + userdata->m_color_inputs.combiner_rgbadd_b[0] = userdata->m_color_inputs.combiner_rgbadd_b[1] = &m_one.i.b; + userdata->m_color_inputs.combiner_alphasub_a[0] = userdata->m_color_inputs.combiner_alphasub_a[1] = &m_one.i.a; + userdata->m_color_inputs.combiner_alphasub_b[0] = userdata->m_color_inputs.combiner_alphasub_b[1] = &m_one.i.a; + userdata->m_color_inputs.combiner_alphamul[0] = userdata->m_color_inputs.combiner_alphamul[1] = &m_one.i.a; + userdata->m_color_inputs.combiner_alphaadd[0] = userdata->m_color_inputs.combiner_alphaadd[1] = &m_one.i.a; + + userdata->m_color_inputs.blender1a_r[0] = userdata->m_color_inputs.blender1a_r[1] = &userdata->m_pixel_color.i.r; + userdata->m_color_inputs.blender1a_g[0] = userdata->m_color_inputs.blender1a_g[1] = &userdata->m_pixel_color.i.g; + userdata->m_color_inputs.blender1a_b[0] = userdata->m_color_inputs.blender1a_b[1] = &userdata->m_pixel_color.i.b; + userdata->m_color_inputs.blender1b_a[0] = userdata->m_color_inputs.blender1b_a[1] = &userdata->m_pixel_color.i.a; + userdata->m_color_inputs.blender2a_r[0] = userdata->m_color_inputs.blender2a_r[1] = &userdata->m_pixel_color.i.r; + userdata->m_color_inputs.blender2a_g[0] = userdata->m_color_inputs.blender2a_g[1] = &userdata->m_pixel_color.i.g; + userdata->m_color_inputs.blender2a_b[0] = userdata->m_color_inputs.blender2a_b[1] = &userdata->m_pixel_color.i.b; + userdata->m_color_inputs.blender2b_a[0] = userdata->m_color_inputs.blender2b_a[1] = &userdata->m_pixel_color.i.a; // Setup blender data for this scanline - SetBlenderInput(0, 0, &userdata->ColorInputs.blender1a_r[0], - &userdata->ColorInputs.blender1a_g[0], - &userdata->ColorInputs.blender1a_b[0], - &userdata->ColorInputs.blender1b_a[0], OtherModes.blend_m1a_0, OtherModes.blend_m1b_0, userdata); - SetBlenderInput(0, 1, &userdata->ColorInputs.blender2a_r[0], - &userdata->ColorInputs.blender2a_g[0], - &userdata->ColorInputs.blender2a_b[0], - &userdata->ColorInputs.blender2b_a[0], OtherModes.blend_m2a_0, OtherModes.blend_m2b_0, userdata); - SetBlenderInput(1, 0, &userdata->ColorInputs.blender1a_r[1], - &userdata->ColorInputs.blender1a_g[1], - &userdata->ColorInputs.blender1a_b[1], - &userdata->ColorInputs.blender1b_a[1], OtherModes.blend_m1a_1, OtherModes.blend_m1b_1, userdata); - SetBlenderInput(1, 1, &userdata->ColorInputs.blender2a_r[1], - &userdata->ColorInputs.blender2a_g[1], - &userdata->ColorInputs.blender2a_b[1], - &userdata->ColorInputs.blender2b_a[1], OtherModes.blend_m2a_1, OtherModes.blend_m2b_1, userdata); + set_blender_input(0, 0, &userdata->m_color_inputs.blender1a_r[0], + &userdata->m_color_inputs.blender1a_g[0], + &userdata->m_color_inputs.blender1a_b[0], + &userdata->m_color_inputs.blender1b_a[0], m_other_modes.blend_m1a_0, m_other_modes.blend_m1b_0, userdata); + set_blender_input(0, 1, &userdata->m_color_inputs.blender2a_r[0], + &userdata->m_color_inputs.blender2a_g[0], + &userdata->m_color_inputs.blender2a_b[0], + &userdata->m_color_inputs.blender2b_a[0], m_other_modes.blend_m2a_0, m_other_modes.blend_m2b_0, userdata); + set_blender_input(1, 0, &userdata->m_color_inputs.blender1a_r[1], + &userdata->m_color_inputs.blender1a_g[1], + &userdata->m_color_inputs.blender1a_b[1], + &userdata->m_color_inputs.blender1b_a[1], m_other_modes.blend_m1a_1, m_other_modes.blend_m1b_1, userdata); + set_blender_input(1, 1, &userdata->m_color_inputs.blender2a_r[1], + &userdata->m_color_inputs.blender2a_g[1], + &userdata->m_color_inputs.blender2a_b[1], + &userdata->m_color_inputs.blender2b_a[1], m_other_modes.blend_m2a_1, m_other_modes.blend_m2b_1, userdata); // Setup color combiner data for this scanline - SetSubAInputRGB(&userdata->ColorInputs.combiner_rgbsub_a_r[0], &userdata->ColorInputs.combiner_rgbsub_a_g[0], &userdata->ColorInputs.combiner_rgbsub_a_b[0], m_combine.sub_a_rgb0, userdata); - SetSubBInputRGB(&userdata->ColorInputs.combiner_rgbsub_b_r[0], &userdata->ColorInputs.combiner_rgbsub_b_g[0], &userdata->ColorInputs.combiner_rgbsub_b_b[0], m_combine.sub_b_rgb0, userdata); - SetMulInputRGB(&userdata->ColorInputs.combiner_rgbmul_r[0], &userdata->ColorInputs.combiner_rgbmul_g[0], &userdata->ColorInputs.combiner_rgbmul_b[0], m_combine.mul_rgb0, userdata); - SetAddInputRGB(&userdata->ColorInputs.combiner_rgbadd_r[0], &userdata->ColorInputs.combiner_rgbadd_g[0], &userdata->ColorInputs.combiner_rgbadd_b[0], m_combine.add_rgb0, userdata); - SetSubInputAlpha(&userdata->ColorInputs.combiner_alphasub_a[0], m_combine.sub_a_a0, userdata); - SetSubInputAlpha(&userdata->ColorInputs.combiner_alphasub_b[0], m_combine.sub_b_a0, userdata); - SetMulInputAlpha(&userdata->ColorInputs.combiner_alphamul[0], m_combine.mul_a0, userdata); - SetSubInputAlpha(&userdata->ColorInputs.combiner_alphaadd[0], m_combine.add_a0, userdata); - - SetSubAInputRGB(&userdata->ColorInputs.combiner_rgbsub_a_r[1], &userdata->ColorInputs.combiner_rgbsub_a_g[1], &userdata->ColorInputs.combiner_rgbsub_a_b[1], m_combine.sub_a_rgb1, userdata); - SetSubBInputRGB(&userdata->ColorInputs.combiner_rgbsub_b_r[1], &userdata->ColorInputs.combiner_rgbsub_b_g[1], &userdata->ColorInputs.combiner_rgbsub_b_b[1], m_combine.sub_b_rgb1, userdata); - SetMulInputRGB(&userdata->ColorInputs.combiner_rgbmul_r[1], &userdata->ColorInputs.combiner_rgbmul_g[1], &userdata->ColorInputs.combiner_rgbmul_b[1], m_combine.mul_rgb1, userdata); - SetAddInputRGB(&userdata->ColorInputs.combiner_rgbadd_r[1], &userdata->ColorInputs.combiner_rgbadd_g[1], &userdata->ColorInputs.combiner_rgbadd_b[1], m_combine.add_rgb1, userdata); - SetSubInputAlpha(&userdata->ColorInputs.combiner_alphasub_a[1], m_combine.sub_a_a1, userdata); - SetSubInputAlpha(&userdata->ColorInputs.combiner_alphasub_b[1], m_combine.sub_b_a1, userdata); - SetMulInputAlpha(&userdata->ColorInputs.combiner_alphamul[1], m_combine.mul_a1, userdata); - SetSubInputAlpha(&userdata->ColorInputs.combiner_alphaadd[1], m_combine.add_a1, userdata); + set_suba_input_rgb(&userdata->m_color_inputs.combiner_rgbsub_a_r[0], &userdata->m_color_inputs.combiner_rgbsub_a_g[0], &userdata->m_color_inputs.combiner_rgbsub_a_b[0], m_combine.sub_a_rgb0, userdata); + set_subb_input_rgb(&userdata->m_color_inputs.combiner_rgbsub_b_r[0], &userdata->m_color_inputs.combiner_rgbsub_b_g[0], &userdata->m_color_inputs.combiner_rgbsub_b_b[0], m_combine.sub_b_rgb0, userdata); + set_mul_input_rgb(&userdata->m_color_inputs.combiner_rgbmul_r[0], &userdata->m_color_inputs.combiner_rgbmul_g[0], &userdata->m_color_inputs.combiner_rgbmul_b[0], m_combine.mul_rgb0, userdata); + set_add_input_rgb(&userdata->m_color_inputs.combiner_rgbadd_r[0], &userdata->m_color_inputs.combiner_rgbadd_g[0], &userdata->m_color_inputs.combiner_rgbadd_b[0], m_combine.add_rgb0, userdata); + set_sub_input_alpha(&userdata->m_color_inputs.combiner_alphasub_a[0], m_combine.sub_a_a0, userdata); + set_sub_input_alpha(&userdata->m_color_inputs.combiner_alphasub_b[0], m_combine.sub_b_a0, userdata); + set_mul_input_alpha(&userdata->m_color_inputs.combiner_alphamul[0], m_combine.mul_a0, userdata); + set_sub_input_alpha(&userdata->m_color_inputs.combiner_alphaadd[0], m_combine.add_a0, userdata); + + set_suba_input_rgb(&userdata->m_color_inputs.combiner_rgbsub_a_r[1], &userdata->m_color_inputs.combiner_rgbsub_a_g[1], &userdata->m_color_inputs.combiner_rgbsub_a_b[1], m_combine.sub_a_rgb1, userdata); + set_subb_input_rgb(&userdata->m_color_inputs.combiner_rgbsub_b_r[1], &userdata->m_color_inputs.combiner_rgbsub_b_g[1], &userdata->m_color_inputs.combiner_rgbsub_b_b[1], m_combine.sub_b_rgb1, userdata); + set_mul_input_rgb(&userdata->m_color_inputs.combiner_rgbmul_r[1], &userdata->m_color_inputs.combiner_rgbmul_g[1], &userdata->m_color_inputs.combiner_rgbmul_b[1], m_combine.mul_rgb1, userdata); + set_add_input_rgb(&userdata->m_color_inputs.combiner_rgbadd_r[1], &userdata->m_color_inputs.combiner_rgbadd_g[1], &userdata->m_color_inputs.combiner_rgbadd_b[1], m_combine.add_rgb1, userdata); + set_sub_input_alpha(&userdata->m_color_inputs.combiner_alphasub_a[1], m_combine.sub_a_a1, userdata); + set_sub_input_alpha(&userdata->m_color_inputs.combiner_alphasub_b[1], m_combine.sub_b_a1, userdata); + set_mul_input_alpha(&userdata->m_color_inputs.combiner_alphamul[1], m_combine.mul_a1, userdata); + set_sub_input_alpha(&userdata->m_color_inputs.combiner_alphaadd[1], m_combine.add_a1, userdata); } if (spix == 3) { - Spans[spanidx].startx = maxxmx; - Spans[spanidx].stopx = minxhx; - compute_cvg_flip(Spans, majorx, minorx, majorxint, minorxint, j, yh, yl, ycur >> 2); + spans[spanidx].startx = maxxmx; + spans[spanidx].stopx = minxhx; + compute_cvg_flip(spans, majorx, minorx, majorxint, minorxint, j, yh, yl, ycur >> 2); } if (spix == ldflag) { - ((rdp_span_aux*)Spans[spanidx].userdata)->m_unscissored_rx = xend; + ((rdp_span_aux*)spans[spanidx].userdata)->m_unscissored_rx = xend; xfrac = ((xright >> 8) & 0xff); - Spans[spanidx].param[SPAN_R].start = ((r >> 9) << 9) + drdiff - (xfrac * drdxh); - Spans[spanidx].param[SPAN_G].start = ((g >> 9) << 9) + dgdiff - (xfrac * dgdxh); - Spans[spanidx].param[SPAN_B].start = ((b >> 9) << 9) + dbdiff - (xfrac * dbdxh); - Spans[spanidx].param[SPAN_A].start = ((a >> 9) << 9) + dadiff - (xfrac * dadxh); - Spans[spanidx].param[SPAN_S].start = (((s >> 9) << 9) + dsdiff - (xfrac * dsdxh)) & ~0x1f; - Spans[spanidx].param[SPAN_T].start = (((t >> 9) << 9) + dtdiff - (xfrac * dtdxh)) & ~0x1f; - Spans[spanidx].param[SPAN_W].start = (((w >> 9) << 9) + dwdiff - (xfrac * dwdxh)) & ~0x1f; - Spans[spanidx].param[SPAN_Z].start = ((z >> 9) << 9) + dzdiff - (xfrac * dzdxh); + spans[spanidx].param[SPAN_R].start = ((r >> 9) << 9) + drdiff - (xfrac * drdxh); + spans[spanidx].param[SPAN_G].start = ((g >> 9) << 9) + dgdiff - (xfrac * dgdxh); + spans[spanidx].param[SPAN_B].start = ((b >> 9) << 9) + dbdiff - (xfrac * dbdxh); + spans[spanidx].param[SPAN_A].start = ((a >> 9) << 9) + dadiff - (xfrac * dadxh); + spans[spanidx].param[SPAN_S].start = (((s >> 9) << 9) + dsdiff - (xfrac * dsdxh)) & ~0x1f; + spans[spanidx].param[SPAN_T].start = (((t >> 9) << 9) + dtdiff - (xfrac * dtdxh)) & ~0x1f; + spans[spanidx].param[SPAN_W].start = (((w >> 9) << 9) + dwdiff - (xfrac * dwdxh)) & ~0x1f; + spans[spanidx].param[SPAN_Z].start = ((z >> 9) << 9) + dzdiff - (xfrac * dzdxh); } } @@ -2248,7 +2237,7 @@ void n64_rdp::DrawTriangle(bool shade, bool texture, bool zbuffer, bool rect) } else { - for (int k = ycur; k <= ylfar; k++) + for (INT32 k = ycur; k <= ylfar; k++) { if (k == ym) { @@ -2256,12 +2245,12 @@ void n64_rdp::DrawTriangle(bool shade, bool texture, bool zbuffer, bool rect) xleft_inc = (dxldy >> 2) & ~1; } - int xstart = xleft >> 16; - int xend = xright >> 16; - int j = k >> 2; - int spanidx = j - (ycur >> 2); - int spix = k & 3; - valid_y = !(k < yh || k >= yl); + const INT32 xstart = xleft >> 16; + const INT32 xend = xright >> 16; + const INT32 j = k >> 2; + const INT32 spanidx = j - (ycur >> 2); + const INT32 spix = k & 3; + bool valid_y = !(k < yh || k >= yl); if (k >= 0 && k < 0x1000) { @@ -2291,109 +2280,109 @@ void n64_rdp::DrawTriangle(bool shade, bool texture, bool zbuffer, bool rect) new_object = false; } - Spans[spanidx].userdata = (void*)((UINT8*)AuxBuf + AuxBufPtr); + spans[spanidx].userdata = (void*)((UINT8*)m_aux_buf + m_aux_buf_ptr); valid = true; - AuxBufPtr += sizeof(rdp_span_aux); + m_aux_buf_ptr += sizeof(rdp_span_aux); - if(AuxBufPtr >= EXTENT_AUX_COUNT) + if(m_aux_buf_ptr >= EXTENT_AUX_COUNT) { - fatalerror("n64_rdp::DrawTriangle: span aux buffer overflow\n"); + fatalerror("n64_rdp::draw_triangle: span aux buffer overflow\n"); } - rdp_span_aux *userdata = (rdp_span_aux*)Spans[spanidx].userdata; + rdp_span_aux* userdata = (rdp_span_aux*)spans[spanidx].userdata; userdata->m_tmem = object->m_tmem; - userdata->BlendColor = BlendColor; - userdata->PrimColor = PrimColor; - userdata->EnvColor = EnvColor; - userdata->FogColor = FogColor; - userdata->KeyScale = KeyScale; - userdata->LODFraction = LODFraction; - userdata->PrimLODFraction = PrimLODFraction; - - userdata->ColorInputs.combiner_rgbsub_a_r[0] = userdata->ColorInputs.combiner_rgbsub_a_r[1] = &OneColor.i.r; - userdata->ColorInputs.combiner_rgbsub_a_g[0] = userdata->ColorInputs.combiner_rgbsub_a_g[1] = &OneColor.i.g; - userdata->ColorInputs.combiner_rgbsub_a_b[0] = userdata->ColorInputs.combiner_rgbsub_a_b[1] = &OneColor.i.b; - userdata->ColorInputs.combiner_rgbsub_b_r[0] = userdata->ColorInputs.combiner_rgbsub_b_r[1] = &OneColor.i.r; - userdata->ColorInputs.combiner_rgbsub_b_g[0] = userdata->ColorInputs.combiner_rgbsub_b_g[1] = &OneColor.i.g; - userdata->ColorInputs.combiner_rgbsub_b_b[0] = userdata->ColorInputs.combiner_rgbsub_b_b[1] = &OneColor.i.b; - userdata->ColorInputs.combiner_rgbmul_r[0] = userdata->ColorInputs.combiner_rgbmul_r[1] = &OneColor.i.r; - userdata->ColorInputs.combiner_rgbmul_g[0] = userdata->ColorInputs.combiner_rgbmul_g[1] = &OneColor.i.g; - userdata->ColorInputs.combiner_rgbmul_b[0] = userdata->ColorInputs.combiner_rgbmul_b[1] = &OneColor.i.b; - userdata->ColorInputs.combiner_rgbadd_r[0] = userdata->ColorInputs.combiner_rgbadd_r[1] = &OneColor.i.r; - userdata->ColorInputs.combiner_rgbadd_g[0] = userdata->ColorInputs.combiner_rgbadd_g[1] = &OneColor.i.g; - userdata->ColorInputs.combiner_rgbadd_b[0] = userdata->ColorInputs.combiner_rgbadd_b[1] = &OneColor.i.b; - userdata->ColorInputs.combiner_alphasub_a[0] = userdata->ColorInputs.combiner_alphasub_a[1] = &OneColor.i.a; - userdata->ColorInputs.combiner_alphasub_b[0] = userdata->ColorInputs.combiner_alphasub_b[1] = &OneColor.i.a; - userdata->ColorInputs.combiner_alphamul[0] = userdata->ColorInputs.combiner_alphamul[1] = &OneColor.i.a; - userdata->ColorInputs.combiner_alphaadd[0] = userdata->ColorInputs.combiner_alphaadd[1] = &OneColor.i.a; - - userdata->ColorInputs.blender1a_r[0] = userdata->ColorInputs.blender1a_r[1] = &userdata->PixelColor.i.r; - userdata->ColorInputs.blender1a_g[0] = userdata->ColorInputs.blender1a_g[1] = &userdata->PixelColor.i.g; - userdata->ColorInputs.blender1a_b[0] = userdata->ColorInputs.blender1a_b[1] = &userdata->PixelColor.i.b; - userdata->ColorInputs.blender1b_a[0] = userdata->ColorInputs.blender1b_a[1] = &userdata->PixelColor.i.a; - userdata->ColorInputs.blender2a_r[0] = userdata->ColorInputs.blender2a_r[1] = &userdata->PixelColor.i.r; - userdata->ColorInputs.blender2a_g[0] = userdata->ColorInputs.blender2a_g[1] = &userdata->PixelColor.i.g; - userdata->ColorInputs.blender2a_b[0] = userdata->ColorInputs.blender2a_b[1] = &userdata->PixelColor.i.b; - userdata->ColorInputs.blender2b_a[0] = userdata->ColorInputs.blender2b_a[1] = &userdata->PixelColor.i.a; + userdata->m_blend_color = m_blend_color; + userdata->m_prim_color = m_prim_color; + userdata->m_env_color = m_env_color; + userdata->m_fog_color = m_fog_color; + userdata->m_key_scale = m_key_scale; + userdata->m_lod_fraction = m_lod_fraction; + userdata->m_prim_lod_fraction = m_prim_lod_fraction; + + userdata->m_color_inputs.combiner_rgbsub_a_r[0] = userdata->m_color_inputs.combiner_rgbsub_a_r[1] = &m_one.i.r; + userdata->m_color_inputs.combiner_rgbsub_a_g[0] = userdata->m_color_inputs.combiner_rgbsub_a_g[1] = &m_one.i.g; + userdata->m_color_inputs.combiner_rgbsub_a_b[0] = userdata->m_color_inputs.combiner_rgbsub_a_b[1] = &m_one.i.b; + userdata->m_color_inputs.combiner_rgbsub_b_r[0] = userdata->m_color_inputs.combiner_rgbsub_b_r[1] = &m_one.i.r; + userdata->m_color_inputs.combiner_rgbsub_b_g[0] = userdata->m_color_inputs.combiner_rgbsub_b_g[1] = &m_one.i.g; + userdata->m_color_inputs.combiner_rgbsub_b_b[0] = userdata->m_color_inputs.combiner_rgbsub_b_b[1] = &m_one.i.b; + userdata->m_color_inputs.combiner_rgbmul_r[0] = userdata->m_color_inputs.combiner_rgbmul_r[1] = &m_one.i.r; + userdata->m_color_inputs.combiner_rgbmul_g[0] = userdata->m_color_inputs.combiner_rgbmul_g[1] = &m_one.i.g; + userdata->m_color_inputs.combiner_rgbmul_b[0] = userdata->m_color_inputs.combiner_rgbmul_b[1] = &m_one.i.b; + userdata->m_color_inputs.combiner_rgbadd_r[0] = userdata->m_color_inputs.combiner_rgbadd_r[1] = &m_one.i.r; + userdata->m_color_inputs.combiner_rgbadd_g[0] = userdata->m_color_inputs.combiner_rgbadd_g[1] = &m_one.i.g; + userdata->m_color_inputs.combiner_rgbadd_b[0] = userdata->m_color_inputs.combiner_rgbadd_b[1] = &m_one.i.b; + userdata->m_color_inputs.combiner_alphasub_a[0] = userdata->m_color_inputs.combiner_alphasub_a[1] = &m_one.i.a; + userdata->m_color_inputs.combiner_alphasub_b[0] = userdata->m_color_inputs.combiner_alphasub_b[1] = &m_one.i.a; + userdata->m_color_inputs.combiner_alphamul[0] = userdata->m_color_inputs.combiner_alphamul[1] = &m_one.i.a; + userdata->m_color_inputs.combiner_alphaadd[0] = userdata->m_color_inputs.combiner_alphaadd[1] = &m_one.i.a; + + userdata->m_color_inputs.blender1a_r[0] = userdata->m_color_inputs.blender1a_r[1] = &userdata->m_pixel_color.i.r; + userdata->m_color_inputs.blender1a_g[0] = userdata->m_color_inputs.blender1a_g[1] = &userdata->m_pixel_color.i.g; + userdata->m_color_inputs.blender1a_b[0] = userdata->m_color_inputs.blender1a_b[1] = &userdata->m_pixel_color.i.b; + userdata->m_color_inputs.blender1b_a[0] = userdata->m_color_inputs.blender1b_a[1] = &userdata->m_pixel_color.i.a; + userdata->m_color_inputs.blender2a_r[0] = userdata->m_color_inputs.blender2a_r[1] = &userdata->m_pixel_color.i.r; + userdata->m_color_inputs.blender2a_g[0] = userdata->m_color_inputs.blender2a_g[1] = &userdata->m_pixel_color.i.g; + userdata->m_color_inputs.blender2a_b[0] = userdata->m_color_inputs.blender2a_b[1] = &userdata->m_pixel_color.i.b; + userdata->m_color_inputs.blender2b_a[0] = userdata->m_color_inputs.blender2b_a[1] = &userdata->m_pixel_color.i.a; // Setup blender data for this scanline - SetBlenderInput(0, 0, &userdata->ColorInputs.blender1a_r[0], - &userdata->ColorInputs.blender1a_g[0], - &userdata->ColorInputs.blender1a_b[0], - &userdata->ColorInputs.blender1b_a[0], OtherModes.blend_m1a_0, OtherModes.blend_m1b_0, userdata); - SetBlenderInput(0, 1, &userdata->ColorInputs.blender2a_r[0], - &userdata->ColorInputs.blender2a_g[0], - &userdata->ColorInputs.blender2a_b[0], - &userdata->ColorInputs.blender2b_a[0], OtherModes.blend_m2a_0, OtherModes.blend_m2b_0, userdata); - SetBlenderInput(1, 0, &userdata->ColorInputs.blender1a_r[1], - &userdata->ColorInputs.blender1a_g[1], - &userdata->ColorInputs.blender1a_b[1], - &userdata->ColorInputs.blender1b_a[1], OtherModes.blend_m1a_1, OtherModes.blend_m1b_1, userdata); - SetBlenderInput(1, 1, &userdata->ColorInputs.blender2a_r[1], - &userdata->ColorInputs.blender2a_g[1], - &userdata->ColorInputs.blender2a_b[1], - &userdata->ColorInputs.blender2b_a[1], OtherModes.blend_m2a_1, OtherModes.blend_m2b_1, userdata); + set_blender_input(0, 0, &userdata->m_color_inputs.blender1a_r[0], + &userdata->m_color_inputs.blender1a_g[0], + &userdata->m_color_inputs.blender1a_b[0], + &userdata->m_color_inputs.blender1b_a[0], m_other_modes.blend_m1a_0, m_other_modes.blend_m1b_0, userdata); + set_blender_input(0, 1, &userdata->m_color_inputs.blender2a_r[0], + &userdata->m_color_inputs.blender2a_g[0], + &userdata->m_color_inputs.blender2a_b[0], + &userdata->m_color_inputs.blender2b_a[0], m_other_modes.blend_m2a_0, m_other_modes.blend_m2b_0, userdata); + set_blender_input(1, 0, &userdata->m_color_inputs.blender1a_r[1], + &userdata->m_color_inputs.blender1a_g[1], + &userdata->m_color_inputs.blender1a_b[1], + &userdata->m_color_inputs.blender1b_a[1], m_other_modes.blend_m1a_1, m_other_modes.blend_m1b_1, userdata); + set_blender_input(1, 1, &userdata->m_color_inputs.blender2a_r[1], + &userdata->m_color_inputs.blender2a_g[1], + &userdata->m_color_inputs.blender2a_b[1], + &userdata->m_color_inputs.blender2b_a[1], m_other_modes.blend_m2a_1, m_other_modes.blend_m2b_1, userdata); // Setup color combiner data for this scanline - SetSubAInputRGB(&userdata->ColorInputs.combiner_rgbsub_a_r[0], &userdata->ColorInputs.combiner_rgbsub_a_g[0], &userdata->ColorInputs.combiner_rgbsub_a_b[0], m_combine.sub_a_rgb0, userdata); - SetSubBInputRGB(&userdata->ColorInputs.combiner_rgbsub_b_r[0], &userdata->ColorInputs.combiner_rgbsub_b_g[0], &userdata->ColorInputs.combiner_rgbsub_b_b[0], m_combine.sub_b_rgb0, userdata); - SetMulInputRGB(&userdata->ColorInputs.combiner_rgbmul_r[0], &userdata->ColorInputs.combiner_rgbmul_g[0], &userdata->ColorInputs.combiner_rgbmul_b[0], m_combine.mul_rgb0, userdata); - SetAddInputRGB(&userdata->ColorInputs.combiner_rgbadd_r[0], &userdata->ColorInputs.combiner_rgbadd_g[0], &userdata->ColorInputs.combiner_rgbadd_b[0], m_combine.add_rgb0, userdata); - SetSubInputAlpha(&userdata->ColorInputs.combiner_alphasub_a[0], m_combine.sub_a_a0, userdata); - SetSubInputAlpha(&userdata->ColorInputs.combiner_alphasub_b[0], m_combine.sub_b_a0, userdata); - SetMulInputAlpha(&userdata->ColorInputs.combiner_alphamul[0], m_combine.mul_a0, userdata); - SetSubInputAlpha(&userdata->ColorInputs.combiner_alphaadd[0], m_combine.add_a0, userdata); - - SetSubAInputRGB(&userdata->ColorInputs.combiner_rgbsub_a_r[1], &userdata->ColorInputs.combiner_rgbsub_a_g[1], &userdata->ColorInputs.combiner_rgbsub_a_b[1], m_combine.sub_a_rgb1, userdata); - SetSubBInputRGB(&userdata->ColorInputs.combiner_rgbsub_b_r[1], &userdata->ColorInputs.combiner_rgbsub_b_g[1], &userdata->ColorInputs.combiner_rgbsub_b_b[1], m_combine.sub_b_rgb1, userdata); - SetMulInputRGB(&userdata->ColorInputs.combiner_rgbmul_r[1], &userdata->ColorInputs.combiner_rgbmul_g[1], &userdata->ColorInputs.combiner_rgbmul_b[1], m_combine.mul_rgb1, userdata); - SetAddInputRGB(&userdata->ColorInputs.combiner_rgbadd_r[1], &userdata->ColorInputs.combiner_rgbadd_g[1], &userdata->ColorInputs.combiner_rgbadd_b[1], m_combine.add_rgb1, userdata); - SetSubInputAlpha(&userdata->ColorInputs.combiner_alphasub_a[1], m_combine.sub_a_a1, userdata); - SetSubInputAlpha(&userdata->ColorInputs.combiner_alphasub_b[1], m_combine.sub_b_a1, userdata); - SetMulInputAlpha(&userdata->ColorInputs.combiner_alphamul[1], m_combine.mul_a1, userdata); - SetSubInputAlpha(&userdata->ColorInputs.combiner_alphaadd[1], m_combine.add_a1, userdata); + set_suba_input_rgb(&userdata->m_color_inputs.combiner_rgbsub_a_r[0], &userdata->m_color_inputs.combiner_rgbsub_a_g[0], &userdata->m_color_inputs.combiner_rgbsub_a_b[0], m_combine.sub_a_rgb0, userdata); + set_subb_input_rgb(&userdata->m_color_inputs.combiner_rgbsub_b_r[0], &userdata->m_color_inputs.combiner_rgbsub_b_g[0], &userdata->m_color_inputs.combiner_rgbsub_b_b[0], m_combine.sub_b_rgb0, userdata); + set_mul_input_rgb(&userdata->m_color_inputs.combiner_rgbmul_r[0], &userdata->m_color_inputs.combiner_rgbmul_g[0], &userdata->m_color_inputs.combiner_rgbmul_b[0], m_combine.mul_rgb0, userdata); + set_add_input_rgb(&userdata->m_color_inputs.combiner_rgbadd_r[0], &userdata->m_color_inputs.combiner_rgbadd_g[0], &userdata->m_color_inputs.combiner_rgbadd_b[0], m_combine.add_rgb0, userdata); + set_sub_input_alpha(&userdata->m_color_inputs.combiner_alphasub_a[0], m_combine.sub_a_a0, userdata); + set_sub_input_alpha(&userdata->m_color_inputs.combiner_alphasub_b[0], m_combine.sub_b_a0, userdata); + set_mul_input_alpha(&userdata->m_color_inputs.combiner_alphamul[0], m_combine.mul_a0, userdata); + set_sub_input_alpha(&userdata->m_color_inputs.combiner_alphaadd[0], m_combine.add_a0, userdata); + + set_suba_input_rgb(&userdata->m_color_inputs.combiner_rgbsub_a_r[1], &userdata->m_color_inputs.combiner_rgbsub_a_g[1], &userdata->m_color_inputs.combiner_rgbsub_a_b[1], m_combine.sub_a_rgb1, userdata); + set_subb_input_rgb(&userdata->m_color_inputs.combiner_rgbsub_b_r[1], &userdata->m_color_inputs.combiner_rgbsub_b_g[1], &userdata->m_color_inputs.combiner_rgbsub_b_b[1], m_combine.sub_b_rgb1, userdata); + set_mul_input_rgb(&userdata->m_color_inputs.combiner_rgbmul_r[1], &userdata->m_color_inputs.combiner_rgbmul_g[1], &userdata->m_color_inputs.combiner_rgbmul_b[1], m_combine.mul_rgb1, userdata); + set_add_input_rgb(&userdata->m_color_inputs.combiner_rgbadd_r[1], &userdata->m_color_inputs.combiner_rgbadd_g[1], &userdata->m_color_inputs.combiner_rgbadd_b[1], m_combine.add_rgb1, userdata); + set_sub_input_alpha(&userdata->m_color_inputs.combiner_alphasub_a[1], m_combine.sub_a_a1, userdata); + set_sub_input_alpha(&userdata->m_color_inputs.combiner_alphasub_b[1], m_combine.sub_b_a1, userdata); + set_mul_input_alpha(&userdata->m_color_inputs.combiner_alphamul[1], m_combine.mul_a1, userdata); + set_sub_input_alpha(&userdata->m_color_inputs.combiner_alphaadd[1], m_combine.add_a1, userdata); } if (spix == 3) { - Spans[spanidx].startx = minxmx; - Spans[spanidx].stopx = maxxhx; - compute_cvg_noflip(Spans, majorx, minorx, majorxint, minorxint, j, yh, yl, ycur >> 2); + spans[spanidx].startx = minxmx; + spans[spanidx].stopx = maxxhx; + compute_cvg_noflip(spans, majorx, minorx, majorxint, minorxint, j, yh, yl, ycur >> 2); } if (spix == ldflag) { - ((rdp_span_aux*)Spans[spanidx].userdata)->m_unscissored_rx = xend; + ((rdp_span_aux*)spans[spanidx].userdata)->m_unscissored_rx = xend; xfrac = ((xright >> 8) & 0xff); - Spans[spanidx].param[SPAN_R].start = ((r >> 9) << 9) + drdiff - (xfrac * drdxh); - Spans[spanidx].param[SPAN_G].start = ((g >> 9) << 9) + dgdiff - (xfrac * dgdxh); - Spans[spanidx].param[SPAN_B].start = ((b >> 9) << 9) + dbdiff - (xfrac * dbdxh); - Spans[spanidx].param[SPAN_A].start = ((a >> 9) << 9) + dadiff - (xfrac * dadxh); - Spans[spanidx].param[SPAN_S].start = (((s >> 9) << 9) + dsdiff - (xfrac * dsdxh)) & ~0x1f; - Spans[spanidx].param[SPAN_T].start = (((t >> 9) << 9) + dtdiff - (xfrac * dtdxh)) & ~0x1f; - Spans[spanidx].param[SPAN_W].start = (((w >> 9) << 9) + dwdiff - (xfrac * dwdxh)) & ~0x1f; - Spans[spanidx].param[SPAN_Z].start = ((z >> 9) << 9) + dzdiff - (xfrac * dzdxh); + spans[spanidx].param[SPAN_R].start = ((r >> 9) << 9) + drdiff - (xfrac * drdxh); + spans[spanidx].param[SPAN_G].start = ((g >> 9) << 9) + dgdiff - (xfrac * dgdxh); + spans[spanidx].param[SPAN_B].start = ((b >> 9) << 9) + dbdiff - (xfrac * dbdxh); + spans[spanidx].param[SPAN_A].start = ((a >> 9) << 9) + dadiff - (xfrac * dadxh); + spans[spanidx].param[SPAN_S].start = (((s >> 9) << 9) + dsdiff - (xfrac * dsdxh)) & ~0x1f; + spans[spanidx].param[SPAN_T].start = (((t >> 9) << 9) + dtdiff - (xfrac * dtdxh)) & ~0x1f; + spans[spanidx].param[SPAN_W].start = (((w >> 9) << 9) + dwdiff - (xfrac * dwdxh)) & ~0x1f; + spans[spanidx].param[SPAN_Z].start = ((z >> 9) << 9) + dzdiff - (xfrac * dzdxh); } } @@ -2415,10 +2404,10 @@ void n64_rdp::DrawTriangle(bool shade, bool texture, bool zbuffer, bool rect) if(!new_object && valid) { - RenderSpans(yh >> 2, yl >> 2, tilenum, flip ? true : false, Spans, rect, object); + render_spans(yh >> 2, yl >> 2, tilenum, flip ? true : false, spans, rect, object); } - //wait("DrawTriangle"); + //wait("draw_triangle"); } /*****************************************************************************/ @@ -2426,82 +2415,78 @@ void n64_rdp::DrawTriangle(bool shade, bool texture, bool zbuffer, bool rect) //////////////////////// // RDP COMMANDS //////////////////////// -void n64_rdp::Triangle(bool shade, bool texture, bool zbuffer) + +void n64_rdp::triangle(bool shade, bool texture, bool zbuffer) { - DrawTriangle(shade, texture, zbuffer, false); + draw_triangle(shade, texture, zbuffer, false); m_pipe_clean = false; - //wait(); } -void n64_rdp::CmdTriangle(UINT32 w1, UINT32 w2) +void n64_rdp::cmd_triangle(UINT32 w1, UINT32 w2) { - Triangle(false, false, false); + triangle(false, false, false); } -void n64_rdp::CmdTriangleZ(UINT32 w1, UINT32 w2) +void n64_rdp::cmd_triangle_z(UINT32 w1, UINT32 w2) { - Triangle(false, false, true); + triangle(false, false, true); } -void n64_rdp::CmdTriangleT(UINT32 w1, UINT32 w2) +void n64_rdp::cmd_triangle_t(UINT32 w1, UINT32 w2) { - Triangle(false, true, false); + triangle(false, true, false); } -void n64_rdp::CmdTriangleTZ(UINT32 w1, UINT32 w2) +void n64_rdp::cmd_triangle_tz(UINT32 w1, UINT32 w2) { - Triangle(false, true, true); + triangle(false, true, true); } -void n64_rdp::CmdTriangleS(UINT32 w1, UINT32 w2) +void n64_rdp::cmd_triangle_s(UINT32 w1, UINT32 w2) { - Triangle(true, false, false); + triangle(true, false, false); } -void n64_rdp::CmdTriangleSZ(UINT32 w1, UINT32 w2) +void n64_rdp::cmd_triangle_sz(UINT32 w1, UINT32 w2) { - Triangle(true, false, true); + triangle(true, false, true); } -void n64_rdp::CmdTriangleST(UINT32 w1, UINT32 w2) +void n64_rdp::cmd_triangle_st(UINT32 w1, UINT32 w2) { - Triangle(true, true, false); + triangle(true, true, false); } -void n64_rdp::CmdTriangleSTZ(UINT32 w1, UINT32 w2) +void n64_rdp::cmd_triangle_stz(UINT32 w1, UINT32 w2) { - Triangle(true, true, true); + triangle(true, true, true); } -void n64_rdp::CmdTexRect(UINT32 w1, UINT32 w2) +void n64_rdp::cmd_tex_rect(UINT32 w1, UINT32 w2) { - //if(m_pending_mode_block) { wait("Block on pending mode-change"); m_pending_mode_block = false; } + const UINT32* data = m_cmd_data + m_cmd_cur; - UINT32 *data = m_cmd_data + m_cmd_cur; + const UINT32 w3 = data[2]; + const UINT32 w4 = data[3]; - UINT32 w3 = data[2]; - UINT32 w4 = data[3]; + const INT32 tilenum = (w2 >> 24) & 0x7; + const INT32 xh = (w2 >> 12) & 0xfff; + const INT32 xl = (w1 >> 12) & 0xfff; + const INT32 yh = (w2 >> 0) & 0xfff; + INT32 yl = (w1 >> 0) & 0xfff; - UINT32 tilenum = (w2 >> 24) & 0x7; - UINT32 xl = (w1 >> 12) & 0xfff; - UINT32 yl = (w1 >> 0) & 0xfff; - UINT32 xh = (w2 >> 12) & 0xfff; - UINT32 yh = (w2 >> 0) & 0xfff; - INT32 s = (w3 >> 16) & 0xffff; - INT32 t = (w3 >> 0) & 0xffff; - INT32 dsdx = (w4 >> 16) & 0xffff; - INT32 dtdy = (w4 >> 0) & 0xffff; + const INT32 s = (w3 >> 16) & 0xffff; + const INT32 t = (w3 >> 0) & 0xffff; + const INT32 dsdx = SIGN16((w4 >> 16) & 0xffff); + const INT32 dtdy = SIGN16((w4 >> 0) & 0xffff); - dsdx = SIGN16(dsdx); - dtdy = SIGN16(dtdy); - - if (OtherModes.cycle_type == CYCLE_TYPE_FILL || OtherModes.cycle_type == CYCLE_TYPE_COPY) + if (m_other_modes.cycle_type == CYCLE_TYPE_FILL || m_other_modes.cycle_type == CYCLE_TYPE_COPY) { yl |= 3; } - UINT32 xlint = (xl >> 2) & 0x3ff; - UINT32 xhint = (xh >> 2) & 0x3ff; + const INT32 xlint = (xl >> 2) & 0x3ff; + const INT32 xhint = (xh >> 2) & 0x3ff; UINT32* ewdata = m_temp_rect_data; ewdata[0] = (0x24 << 24) | ((0x80 | tilenum) << 16) | yl; // command, flipped, tile, yl @@ -2531,38 +2516,34 @@ void n64_rdp::CmdTexRect(UINT32 w1, UINT32 w2) ewdata[39] = 0;//dwdy frac memset(&ewdata[40], 0, 4 * sizeof(UINT32));//depth - DrawTriangle(true, true, false, true); + draw_triangle(true, true, false, true); } -void n64_rdp::CmdTexRectFlip(UINT32 w1, UINT32 w2) +void n64_rdp::cmd_tex_rect_flip(UINT32 w1, UINT32 w2) { - //if(m_pending_mode_block) { wait("Block on pending mode-change"); m_pending_mode_block = false; } + const UINT32* data = m_cmd_data + m_cmd_cur; - UINT32 *data = m_cmd_data + m_cmd_cur; + const UINT32 w3 = data[2]; + const UINT32 w4 = data[3]; - UINT32 w3 = data[2]; - UINT32 w4 = data[3]; + const INT32 tilenum = (w2 >> 24) & 0x7; + const INT32 xh = (w2 >> 12) & 0xfff; + const INT32 xl = (w1 >> 12) & 0xfff; + const INT32 yh = (w2 >> 0) & 0xfff; + INT32 yl = (w1 >> 0) & 0xfff; - UINT32 tilenum = (w2 >> 24) & 0x7; - UINT32 xl = (w1 >> 12) & 0xfff; - UINT32 yl = (w1 >> 0) & 0xfff; - UINT32 xh = (w2 >> 12) & 0xfff; - UINT32 yh = (w2 >> 0) & 0xfff; - INT32 s = (w3 >> 16) & 0xffff; - INT32 t = (w3 >> 0) & 0xffff; - INT32 dsdx = (w4 >> 16) & 0xffff; - INT32 dtdy = (w4 >> 0) & 0xffff; + const INT32 s = (w3 >> 16) & 0xffff; + const INT32 t = (w3 >> 0) & 0xffff; + const INT32 dsdx = SIGN16((w4 >> 16) & 0xffff); + const INT32 dtdy = SIGN16((w4 >> 0) & 0xffff); - dsdx = SIGN16(dsdx); - dtdy = SIGN16(dtdy); - - if (OtherModes.cycle_type == CYCLE_TYPE_FILL || OtherModes.cycle_type == CYCLE_TYPE_COPY) + if (m_other_modes.cycle_type == CYCLE_TYPE_FILL || m_other_modes.cycle_type == CYCLE_TYPE_COPY) { yl |= 3; } - UINT32 xlint = (xl >> 2) & 0x3ff; - UINT32 xhint = (xh >> 2) & 0x3ff; + const INT32 xlint = (xl >> 2) & 0x3ff; + const INT32 xhint = (xh >> 2) & 0x3ff; UINT32* ewdata = m_temp_rect_data; ewdata[0] = (0x25 << 24) | ((0x80 | tilenum) << 16) | yl;//command, flipped, tile, yl @@ -2592,48 +2573,48 @@ void n64_rdp::CmdTexRectFlip(UINT32 w1, UINT32 w2) ewdata[39] = 0;//dwdy frac memset(&ewdata[40], 0, 4 * sizeof(UINT32));//depth - DrawTriangle(true, true, false, true); + draw_triangle(true, true, false, true); } -void n64_rdp::CmdSyncLoad(UINT32 w1, UINT32 w2) +void n64_rdp::cmd_sync_load(UINT32 w1, UINT32 w2) { //wait("SyncLoad"); } -void n64_rdp::CmdSyncPipe(UINT32 w1, UINT32 w2) +void n64_rdp::cmd_sync_pipe(UINT32 w1, UINT32 w2) { //wait("SyncPipe"); } -void n64_rdp::CmdSyncTile(UINT32 w1, UINT32 w2) +void n64_rdp::cmd_sync_tile(UINT32 w1, UINT32 w2) { //wait("SyncTile"); } -void n64_rdp::CmdSyncFull(UINT32 w1, UINT32 w2) +void n64_rdp::cmd_sync_full(UINT32 w1, UINT32 w2) { //wait("SyncFull"); dp_full_sync(*m_machine); } -void n64_rdp::CmdSetKeyGB(UINT32 w1, UINT32 w2) +void n64_rdp::cmd_set_key_gb(UINT32 w1, UINT32 w2) { - KeyScale.i.b = w2 & 0xff; - KeyScale.i.g = (w2 >> 16) & 0xff; + m_key_scale.i.b = w2 & 0xff; + m_key_scale.i.g = (w2 >> 16) & 0xff; } -void n64_rdp::CmdSetKeyR(UINT32 w1, UINT32 w2) +void n64_rdp::cmd_set_key_r(UINT32 w1, UINT32 w2) { - KeyScale.i.r = w2 & 0xff; + m_key_scale.i.r = w2 & 0xff; } -void n64_rdp::CmdSetFillColor32(UINT32 w1, UINT32 w2) +void n64_rdp::cmd_set_fill_color32(UINT32 w1, UINT32 w2) { //wait("SetFillColor"); - FillColor = w2; + m_fill_color = w2; } -void n64_rdp::CmdSetConvert(UINT32 w1, UINT32 w2) +void n64_rdp::cmd_set_convert(UINT32 w1, UINT32 w2) { if(!m_pipe_clean) { m_pipe_clean = true; wait("SetConvert"); } INT32 k0 = (w1 >> 13) & 0xff; @@ -2648,88 +2629,87 @@ void n64_rdp::CmdSetConvert(UINT32 w1, UINT32 w2) k3 = ((w2 >> 26) & 1) ? (-(0x100 - k3)) : k3; k4 = ((w2 >> 17) & 1) ? (-(0x100 - k4)) : k4; k5 = ((w2 >> 8) & 1) ? (-(0x100 - k5)) : k5; - SetYUVFactors(k0, k1, k2, k3, k4, k5); + set_yuv_factors(k0, k1, k2, k3, k4, k5); } -void n64_rdp::CmdSetScissor(UINT32 w1, UINT32 w2) +void n64_rdp::cmd_set_scissor(UINT32 w1, UINT32 w2) { - Scissor.m_xh = ((w1 >> 12) & 0xfff) >> 2; - Scissor.m_yh = ((w1 >> 0) & 0xfff) >> 2; - Scissor.m_xl = ((w2 >> 12) & 0xfff) >> 2; - Scissor.m_yl = ((w2 >> 0) & 0xfff) >> 2; + m_scissor.m_xh = ((w1 >> 12) & 0xfff) >> 2; + m_scissor.m_yh = ((w1 >> 0) & 0xfff) >> 2; + m_scissor.m_xl = ((w2 >> 12) & 0xfff) >> 2; + m_scissor.m_yl = ((w2 >> 0) & 0xfff) >> 2; // TODO: handle f & o? } -void n64_rdp::CmdSetPrimDepth(UINT32 w1, UINT32 w2) +void n64_rdp::cmd_set_prim_depth(UINT32 w1, UINT32 w2) { - MiscState.PrimitiveZ = (UINT16)(w2 >> 16) & 0x7fff; - MiscState.PrimitiveDZ = (UINT16)(w1); + m_misc_state.m_primitive_z = w2 & 0x7fff0000; + m_misc_state.m_primitive_dz = (UINT16)(w1); } -void n64_rdp::CmdSetOtherModes(UINT32 w1, UINT32 w2) +void n64_rdp::cmd_set_other_modes(UINT32 w1, UINT32 w2) { //wait("SetOtherModes"); - OtherModes.cycle_type = (w1 >> 20) & 0x3; // 01 - OtherModes.persp_tex_en = (w1 & 0x80000) ? 1 : 0; // 1 - OtherModes.detail_tex_en = (w1 & 0x40000) ? 1 : 0; // 0 - OtherModes.sharpen_tex_en = (w1 & 0x20000) ? 1 : 0; // 0 - OtherModes.tex_lod_en = (w1 & 0x10000) ? 1 : 0; // 0 - OtherModes.en_tlut = (w1 & 0x08000) ? 1 : 0; // 0 - OtherModes.tlut_type = (w1 & 0x04000) ? 1 : 0; // 0 - OtherModes.sample_type = (w1 & 0x02000) ? 1 : 0; // 1 - OtherModes.mid_texel = (w1 & 0x01000) ? 1 : 0; // 0 - OtherModes.bi_lerp0 = (w1 & 0x00800) ? 1 : 0; // 1 - OtherModes.bi_lerp1 = (w1 & 0x00400) ? 1 : 0; // 1 - OtherModes.convert_one = (w1 & 0x00200) ? 1 : 0; // 0 - OtherModes.key_en = (w1 & 0x00100) ? 1 : 0; // 0 - OtherModes.rgb_dither_sel = (w1 >> 6) & 0x3; // 00 - OtherModes.alpha_dither_sel = (w1 >> 4) & 0x3; // 01 - OtherModes.blend_m1a_0 = (w2 >> 30) & 0x3; // 11 - OtherModes.blend_m1a_1 = (w2 >> 28) & 0x3; // 00 - OtherModes.blend_m1b_0 = (w2 >> 26) & 0x3; // 10 - OtherModes.blend_m1b_1 = (w2 >> 24) & 0x3; // 00 - OtherModes.blend_m2a_0 = (w2 >> 22) & 0x3; // 00 - OtherModes.blend_m2a_1 = (w2 >> 20) & 0x3; // 01 - OtherModes.blend_m2b_0 = (w2 >> 18) & 0x3; // 00 - OtherModes.blend_m2b_1 = (w2 >> 16) & 0x3; // 01 - OtherModes.force_blend = (w2 >> 14) & 1; // 0 - OtherModes.blend_shift = OtherModes.force_blend ? 5 : 2; - OtherModes.alpha_cvg_select = (w2 >> 13) & 1; // 1 - OtherModes.cvg_times_alpha = (w2 >> 12) & 1; // 0 - OtherModes.z_mode = (w2 >> 10) & 0x3; // 00 - OtherModes.cvg_dest = (w2 >> 8) & 0x3; // 00 - OtherModes.color_on_cvg = (w2 >> 7) & 1; // 0 - OtherModes.image_read_en = (w2 >> 6) & 1; // 1 - OtherModes.z_update_en = (w2 >> 5) & 1; // 1 - OtherModes.z_compare_en = (w2 >> 4) & 1; // 1 - OtherModes.antialias_en = (w2 >> 3) & 1; // 1 - OtherModes.z_source_sel = (w2 >> 2) & 1; // 0 - OtherModes.dither_alpha_en = (w2 >> 1) & 1; // 0 - OtherModes.alpha_compare_en = (w2) & 1; // 0 - OtherModes.alpha_dither_mode = (OtherModes.alpha_compare_en << 1) | OtherModes.dither_alpha_en; -} - -void n64_rdp::CmdLoadTLUT(UINT32 w1, UINT32 w2) + m_other_modes.cycle_type = (w1 >> 20) & 0x3; // 01 + m_other_modes.persp_tex_en = (w1 & 0x80000) ? 1 : 0; // 1 + m_other_modes.detail_tex_en = (w1 & 0x40000) ? 1 : 0; // 0 + m_other_modes.sharpen_tex_en = (w1 & 0x20000) ? 1 : 0; // 0 + m_other_modes.tex_lod_en = (w1 & 0x10000) ? 1 : 0; // 0 + m_other_modes.en_tlut = (w1 & 0x08000) ? 1 : 0; // 0 + m_other_modes.tlut_type = (w1 & 0x04000) ? 1 : 0; // 0 + m_other_modes.sample_type = (w1 & 0x02000) ? 1 : 0; // 1 + m_other_modes.mid_texel = (w1 & 0x01000) ? 1 : 0; // 0 + m_other_modes.bi_lerp0 = (w1 & 0x00800) ? 1 : 0; // 1 + m_other_modes.bi_lerp1 = (w1 & 0x00400) ? 1 : 0; // 1 + m_other_modes.convert_one = (w1 & 0x00200) ? 1 : 0; // 0 + m_other_modes.key_en = (w1 & 0x00100) ? 1 : 0; // 0 + m_other_modes.rgb_dither_sel = (w1 >> 6) & 0x3; // 00 + m_other_modes.alpha_dither_sel = (w1 >> 4) & 0x3; // 01 + m_other_modes.blend_m1a_0 = (w2 >> 30) & 0x3; // 11 + m_other_modes.blend_m1a_1 = (w2 >> 28) & 0x3; // 00 + m_other_modes.blend_m1b_0 = (w2 >> 26) & 0x3; // 10 + m_other_modes.blend_m1b_1 = (w2 >> 24) & 0x3; // 00 + m_other_modes.blend_m2a_0 = (w2 >> 22) & 0x3; // 00 + m_other_modes.blend_m2a_1 = (w2 >> 20) & 0x3; // 01 + m_other_modes.blend_m2b_0 = (w2 >> 18) & 0x3; // 00 + m_other_modes.blend_m2b_1 = (w2 >> 16) & 0x3; // 01 + m_other_modes.force_blend = (w2 >> 14) & 1; // 0 + m_other_modes.blend_shift = m_other_modes.force_blend ? 5 : 2; + m_other_modes.alpha_cvg_select = (w2 >> 13) & 1; // 1 + m_other_modes.cvg_times_alpha = (w2 >> 12) & 1; // 0 + m_other_modes.z_mode = (w2 >> 10) & 0x3; // 00 + m_other_modes.cvg_dest = (w2 >> 8) & 0x3; // 00 + m_other_modes.color_on_cvg = (w2 >> 7) & 1; // 0 + m_other_modes.image_read_en = (w2 >> 6) & 1; // 1 + m_other_modes.z_update_en = (w2 >> 5) & 1; // 1 + m_other_modes.z_compare_en = (w2 >> 4) & 1; // 1 + m_other_modes.antialias_en = (w2 >> 3) & 1; // 1 + m_other_modes.z_source_sel = (w2 >> 2) & 1; // 0 + m_other_modes.dither_alpha_en = (w2 >> 1) & 1; // 0 + m_other_modes.alpha_compare_en = (w2) & 1; // 0 + m_other_modes.alpha_dither_mode = (m_other_modes.alpha_compare_en << 1) | m_other_modes.dither_alpha_en; +} + +void n64_rdp::cmd_load_tlut(UINT32 w1, UINT32 w2) { //wait("LoadTLUT"); - N64Tile* tile = m_tiles; + n64_tile_t* tile = m_tiles; - int tilenum = (w2 >> 24) & 0x7; - int sl = tile[tilenum].sl = ((w1 >> 12) & 0xfff); - int tl = tile[tilenum].tl = w1 & 0xfff; - int sh = tile[tilenum].sh = ((w2 >> 12) & 0xfff); - int th = tile[tilenum].th = w2 & 0xfff; + const INT32 tilenum = (w2 >> 24) & 0x7; + const INT32 sl = tile[tilenum].sl = ((w1 >> 12) & 0xfff); + const INT32 tl = tile[tilenum].tl = w1 & 0xfff; + const INT32 sh = tile[tilenum].sh = ((w2 >> 12) & 0xfff); + const INT32 th = tile[tilenum].th = w2 & 0xfff; if (tl != th) { fatalerror("Load tlut: tl=%d, th=%d\n",tl,th); } - int count = (sh >> 2) - (sl >> 2) + 1; - count <<= 2; + const INT32 count = ((sh >> 2) - (sl >> 2) + 1) << 2; - switch (MiscState.TISize) + switch (m_misc_state.m_ti_size) { case PIXEL_SIZE_16BIT: { @@ -2737,11 +2717,11 @@ void n64_rdp::CmdLoadTLUT(UINT32 w1, UINT32 w2) { fatalerror("rdp_load_tlut: loading tlut into low half at %d qwords\n",tile[tilenum].tmem); } - UINT32 srcstart = (MiscState.TIAddress + (tl >> 2) * (MiscState.TIWidth << 1) + (sl >> 1)) >> 1; - UINT16 *dst = GetTMEM16(); - UINT32 dststart = tile[tilenum].tmem << 2; + INT32 srcstart = (m_misc_state.m_ti_address + (tl >> 2) * (m_misc_state.m_ti_width << 1) + (sl >> 1)) >> 1; + INT32 dststart = tile[tilenum].tmem << 2; + UINT16* dst = get_tmem16(); - for (int i = 0; i < count; i += 4) + for (INT32 i = 0; i < count; i += 4) { if (dststart < 2048) { @@ -2755,15 +2735,15 @@ void n64_rdp::CmdLoadTLUT(UINT32 w1, UINT32 w2) } break; } - default: fatalerror("RDP: load_tlut: size = %d\n", MiscState.TISize); + default: fatalerror("RDP: load_tlut: size = %d\n", m_misc_state.m_ti_size); } } -void n64_rdp::CmdSetTileSize(UINT32 w1, UINT32 w2) +void n64_rdp::cmd_set_tile_size(UINT32 w1, UINT32 w2) { //wait("SetTileSize"); - const int tilenum = (w2 >> 24) & 0x7; + const INT32 tilenum = (w2 >> 24) & 0x7; m_tiles[tilenum].sl = (w1 >> 12) & 0xfff; m_tiles[tilenum].tl = (w1 >> 0) & 0xfff; @@ -2771,19 +2751,18 @@ void n64_rdp::CmdSetTileSize(UINT32 w1, UINT32 w2) m_tiles[tilenum].th = (w2 >> 0) & 0xfff; } -void n64_rdp::CmdLoadBlock(UINT32 w1, UINT32 w2) +void n64_rdp::cmd_load_block(UINT32 w1, UINT32 w2) { //wait("LoadBlock"); - N64Tile* tile = m_tiles; + n64_tile_t* tile = m_tiles; - int tilenum = (w2 >> 24) & 0x7; - UINT16* tc = GetTMEM16(); + const INT32 tilenum = (w2 >> 24) & 0x7; + UINT16* tc = get_tmem16(); - UINT16 sl, sh, tl; - tile[tilenum].sl = sl = ((w1 >> 12) & 0xfff); - tile[tilenum].tl = tl = ((w1 >> 0) & 0xfff); - tile[tilenum].sh = sh = ((w2 >> 12) & 0xfff); - UINT16 dxt = ((w2 >> 0) & 0xfff); + INT32 sl = tile[tilenum].sl = ((w1 >> 12) & 0xfff); + INT32 tl = tile[tilenum].tl = ((w1 >> 0) & 0xfff); + INT32 sh = tile[tilenum].sh = ((w2 >> 12) & 0xfff); + const INT32 dxt = ((w2 >> 0) & 0xfff); if (sh < sl) { @@ -2792,34 +2771,29 @@ void n64_rdp::CmdLoadBlock(UINT32 w1, UINT32 w2) INT32 width = (sh - sl) + 1; - width = (width << MiscState.TISize) >> 1; + width = (width << m_misc_state.m_ti_size) >> 1; if (width & 7) { width = (width & ~7) + 8; } width >>= 3; - UINT32 tb = tile[tilenum].tmem << 2; - - int tiwinwords = MiscState.TIWidth; - UINT32 slinwords = sl; + const INT32 tb = tile[tilenum].tmem << 2; - tiwinwords = (tiwinwords << MiscState.TISize) >> 2; - slinwords = (slinwords << MiscState.TISize) >> 2; + const INT32 tiwinwords = (m_misc_state.m_ti_width << m_misc_state.m_ti_size) >> 2; + const INT32 slinwords = (sl << m_misc_state.m_ti_size) >> 2; - int ptr = 0, srcptr = 0; - UINT16 first, sec; - UINT32 src = (MiscState.TIAddress >> 1) + (tl * tiwinwords) + slinwords; + const UINT32 src = (m_misc_state.m_ti_address >> 1) + (tl * tiwinwords) + slinwords; if (dxt != 0) { - int j = 0; - int t = 0; - int oldt = 0; + INT32 j = 0; + INT32 t = 0; + INT32 oldt = 0; if (tile[tilenum].size != PIXEL_SIZE_32BIT && tile[tilenum].format != FORMAT_YUV) { - for (int i = 0; i < width; i ++) + for (INT32 i = 0; i < width; i ++) { oldt = t; t = ((j >> 11) & 1) ? WORD_XOR_DWORD_SWAP : WORD_ADDR_XOR; @@ -2828,8 +2802,8 @@ void n64_rdp::CmdLoadBlock(UINT32 w1, UINT32 w2) i += tile[tilenum].line; } - ptr = tb + (i << 2); - srcptr = src + (i << 2); + INT32 ptr = tb + (i << 2); + INT32 srcptr = src + (i << 2); tc[(ptr ^ t) & 0x7ff] = U_RREADIDX16(srcptr); tc[((ptr + 1) ^ t) & 0x7ff] = U_RREADIDX16(srcptr + 1); @@ -2840,7 +2814,7 @@ void n64_rdp::CmdLoadBlock(UINT32 w1, UINT32 w2) } else if (tile[tilenum].format == FORMAT_YUV) { - for (int i = 0; i < width; i ++) + for (INT32 i = 0; i < width; i ++) { oldt = t; t = ((j >> 11) & 1) ? WORD_XOR_DWORD_SWAP : WORD_ADDR_XOR; @@ -2849,11 +2823,11 @@ void n64_rdp::CmdLoadBlock(UINT32 w1, UINT32 w2) i += tile[tilenum].line; } - ptr = ((tb + (i << 1)) ^ t) & 0x3ff; - srcptr = src + (i << 2); + INT32 ptr = ((tb + (i << 1)) ^ t) & 0x3ff; + INT32 srcptr = src + (i << 2); - first = U_RREADIDX16(srcptr); - sec = U_RREADIDX16(srcptr + 1); + INT32 first = U_RREADIDX16(srcptr); + INT32 sec = U_RREADIDX16(srcptr + 1); tc[ptr] = ((first >> 8) << 8) | (sec >> 8); tc[ptr | 0x400] = ((first & 0xff) << 8) | (sec & 0xff); @@ -2868,15 +2842,15 @@ void n64_rdp::CmdLoadBlock(UINT32 w1, UINT32 w2) } else { - for (int i = 0; i < width; i ++) + for (INT32 i = 0; i < width; i ++) { oldt = t; t = ((j >> 11) & 1) ? WORD_XOR_DWORD_SWAP : WORD_ADDR_XOR; if (t != oldt) i += tile[tilenum].line; - ptr = ((tb + (i << 1)) ^ t) & 0x3ff; - srcptr = src + (i << 2); + INT32 ptr = ((tb + (i << 1)) ^ t) & 0x3ff; + INT32 srcptr = src + (i << 2); tc[ptr] = U_RREADIDX16(srcptr); tc[ptr | 0x400] = U_RREADIDX16(srcptr + 1); @@ -2893,10 +2867,10 @@ void n64_rdp::CmdLoadBlock(UINT32 w1, UINT32 w2) { if (tile[tilenum].size != PIXEL_SIZE_32BIT && tile[tilenum].format != FORMAT_YUV) { - for (int i = 0; i < width; i ++) + for (INT32 i = 0; i < width; i ++) { - ptr = tb + (i << 2); - srcptr = src + (i << 2); + INT32 ptr = tb + (i << 2); + INT32 srcptr = src + (i << 2); tc[(ptr ^ WORD_ADDR_XOR) & 0x7ff] = U_RREADIDX16(srcptr); tc[((ptr + 1) ^ WORD_ADDR_XOR) & 0x7ff] = U_RREADIDX16(srcptr + 1); tc[((ptr + 2) ^ WORD_ADDR_XOR) & 0x7ff] = U_RREADIDX16(srcptr + 2); @@ -2905,12 +2879,12 @@ void n64_rdp::CmdLoadBlock(UINT32 w1, UINT32 w2) } else if (tile[tilenum].format == FORMAT_YUV) { - for (int i = 0; i < width; i ++) + for (INT32 i = 0; i < width; i ++) { - ptr = ((tb + (i << 1)) ^ WORD_ADDR_XOR) & 0x3ff; - srcptr = src + (i << 2); - first = U_RREADIDX16(srcptr); - sec = U_RREADIDX16(srcptr + 1); + INT32 ptr = ((tb + (i << 1)) ^ WORD_ADDR_XOR) & 0x3ff; + INT32 srcptr = src + (i << 2); + INT32 first = U_RREADIDX16(srcptr); + INT32 sec = U_RREADIDX16(srcptr + 1); tc[ptr] = ((first >> 8) << 8) | (sec >> 8);//UV pair tc[ptr | 0x400] = ((first & 0xff) << 8) | (sec & 0xff); @@ -2923,10 +2897,10 @@ void n64_rdp::CmdLoadBlock(UINT32 w1, UINT32 w2) } else { - for (int i = 0; i < width; i ++) + for (INT32 i = 0; i < width; i ++) { - ptr = ((tb + (i << 1)) ^ WORD_ADDR_XOR) & 0x3ff; - srcptr = src + (i << 2); + INT32 ptr = ((tb + (i << 1)) ^ WORD_ADDR_XOR) & 0x3ff; + INT32 srcptr = src + (i << 2); tc[ptr] = U_RREADIDX16(srcptr); tc[ptr | 0x400] = U_RREADIDX16(srcptr + 1); @@ -2939,29 +2913,29 @@ void n64_rdp::CmdLoadBlock(UINT32 w1, UINT32 w2) } } -void n64_rdp::CmdLoadTile(UINT32 w1, UINT32 w2) +void n64_rdp::cmd_load_tile(UINT32 w1, UINT32 w2) { //wait("LoadTile"); - N64Tile* tile = m_tiles; - int tilenum = (w2 >> 24) & 0x7; + n64_tile_t* tile = m_tiles; + const INT32 tilenum = (w2 >> 24) & 0x7; tile[tilenum].sl = ((w1 >> 12) & 0xfff); tile[tilenum].tl = ((w1 >> 0) & 0xfff); tile[tilenum].sh = ((w2 >> 12) & 0xfff); tile[tilenum].th = ((w2 >> 0) & 0xfff); - UINT16 sl = tile[tilenum].sl >> 2; - UINT16 tl = tile[tilenum].tl >> 2; - UINT16 sh = tile[tilenum].sh >> 2; - UINT16 th = tile[tilenum].th >> 2; + const INT32 sl = tile[tilenum].sl >> 2; + const INT32 tl = tile[tilenum].tl >> 2; + const INT32 sh = tile[tilenum].sh >> 2; + const INT32 th = tile[tilenum].th >> 2; - INT32 width = (sh - sl) + 1; - INT32 height = (th - tl) + 1; + const INT32 width = (sh - sl) + 1; + const INT32 height = (th - tl) + 1; /* - int topad; - if (MiscState.TISize < 3) + INT32 topad; + if (m_misc_state.m_ti_size < 3) { - topad = (width * MiscState.TISize) & 0x7; + topad = (width * m_misc_state.m_ti_size) & 0x7; } else { @@ -2969,21 +2943,21 @@ void n64_rdp::CmdLoadTile(UINT32 w1, UINT32 w2) } topad = 0; // ???? */ - switch (MiscState.TISize) + switch (m_misc_state.m_ti_size) { case PIXEL_SIZE_8BIT: { - UINT32 src = MiscState.TIAddress; - UINT8 *tc = GetTMEM(); - int tb = tile[tilenum].tmem << 3; + const UINT32 src = m_misc_state.m_ti_address; + const INT32 tb = tile[tilenum].tmem << 3; + UINT8* tc = get_tmem8(); - for (int j = 0; j < height; j++) + for (INT32 j = 0; j < height; j++) { - int tline = tb + ((tile[tilenum].line << 3) * j); - int s = ((j + tl) * MiscState.TIWidth) + sl; + const INT32 tline = tb + ((tile[tilenum].line << 3) * j); + const INT32 s = ((j + tl) * m_misc_state.m_ti_width) + sl; + const INT32 xorval8 = ((j & 1) ? BYTE_XOR_DWORD_SWAP : BYTE_ADDR_XOR); - int xorval8 = ((j & 1) ? BYTE_XOR_DWORD_SWAP : BYTE_ADDR_XOR); - for (int i = 0; i < width; i++) + for (INT32 i = 0; i < width; i++) { tc[((tline + i) ^ xorval8) & 0xfff] = U_RREADADDR8(src + s + i); } @@ -2992,20 +2966,19 @@ void n64_rdp::CmdLoadTile(UINT32 w1, UINT32 w2) } case PIXEL_SIZE_16BIT: { - UINT32 src = MiscState.TIAddress >> 1; - UINT16 *tc = GetTMEM16(); - UINT16 yuvword; + const UINT32 src = m_misc_state.m_ti_address >> 1; + UINT16* tc = get_tmem16(); if (tile[tilenum].format != FORMAT_YUV) { - for (int j = 0; j < height; j++) + for (INT32 j = 0; j < height; j++) { - int tb = tile[tilenum].tmem << 2; - int tline = tb + ((tile[tilenum].line << 2) * j); - int s = ((j + tl) * MiscState.TIWidth) + sl; - int xorval16 = (j & 1) ? WORD_XOR_DWORD_SWAP : WORD_ADDR_XOR; + const INT32 tb = tile[tilenum].tmem << 2; + const INT32 tline = tb + ((tile[tilenum].line << 2) * j); + const INT32 s = ((j + tl) * m_misc_state.m_ti_width) + sl; + const INT32 xorval16 = (j & 1) ? WORD_XOR_DWORD_SWAP : WORD_ADDR_XOR; - for (int i = 0; i < width; i++) + for (INT32 i = 0; i < width; i++) { UINT32 taddr = (tline + i) ^ xorval16; tc[taddr & 0x7ff] = U_RREADIDX16(src + s + i); @@ -3014,19 +2987,19 @@ void n64_rdp::CmdLoadTile(UINT32 w1, UINT32 w2) } else { - for (int j = 0; j < height; j++) + for (INT32 j = 0; j < height; j++) { - int tb = tile[tilenum].tmem << 3; - int tline = tb + ((tile[tilenum].line << 3) * j); - int s = ((j + tl) * MiscState.TIWidth) + sl; - int xorval8 = (j & 1) ? BYTE_XOR_DWORD_SWAP : BYTE_ADDR_XOR; + const INT32 tb = tile[tilenum].tmem << 3; + const INT32 tline = tb + ((tile[tilenum].line << 3) * j); + const INT32 s = ((j + tl) * m_misc_state.m_ti_width) + sl; + const INT32 xorval8 = (j & 1) ? BYTE_XOR_DWORD_SWAP : BYTE_ADDR_XOR; - for (int i = 0; i < width; i++) + for (INT32 i = 0; i < width; i++) { UINT32 taddr = ((tline + i) ^ xorval8) & 0x7ff; - yuvword = U_RREADIDX16(src + s + i); - GetTMEM()[taddr] = yuvword >> 8; - GetTMEM()[taddr | 0x800] = yuvword & 0xff; + UINT16 yuvword = U_RREADIDX16(src + s + i); + get_tmem8()[taddr] = yuvword >> 8; + get_tmem8()[taddr | 0x800] = yuvword & 0xff; } } } @@ -3034,17 +3007,17 @@ void n64_rdp::CmdLoadTile(UINT32 w1, UINT32 w2) } case PIXEL_SIZE_32BIT: { - UINT32 src = MiscState.TIAddress >> 2; - UINT16 *tc16 = GetTMEM16(); - int tb = (tile[tilenum].tmem << 2); + const UINT32 src = m_misc_state.m_ti_address >> 2; + const INT32 tb = (tile[tilenum].tmem << 2); + UINT16* tc16 = get_tmem16(); - for (int j = 0; j < height; j++) + for (INT32 j = 0; j < height; j++) { - int tline = tb + ((tile[tilenum].line << 2) * j); + const INT32 tline = tb + ((tile[tilenum].line << 2) * j); - int s = ((j + tl) * MiscState.TIWidth) + sl; - int xorval32cur = (j & 1) ? WORD_XOR_DWORD_SWAP : WORD_ADDR_XOR; - for (int i = 0; i < width; i++) + const INT32 s = ((j + tl) * m_misc_state.m_ti_width) + sl; + const INT32 xorval32cur = (j & 1) ? WORD_XOR_DWORD_SWAP : WORD_ADDR_XOR; + for (INT32 i = 0; i < width; i++) { UINT32 c = U_RREADIDX32(src + s + i); UINT32 ptr = ((tline + i) ^ xorval32cur) & 0x3ff; @@ -3055,16 +3028,16 @@ void n64_rdp::CmdLoadTile(UINT32 w1, UINT32 w2) break; } - default: fatalerror("RDP: load_tile: size = %d\n", MiscState.TISize); + default: fatalerror("RDP: load_tile: size = %d\n", m_misc_state.m_ti_size); } } -void n64_rdp::CmdSetTile(UINT32 w1, UINT32 w2) +void n64_rdp::cmd_set_tile(UINT32 w1, UINT32 w2) { //wait("SetTile"); - int tilenum = (w2 >> 24) & 0x7; - N64Tile* tex_tile = &m_tiles[tilenum]; + const INT32 tilenum = (w2 >> 24) & 0x7; + n64_tile_t* tex_tile = &m_tiles[tilenum]; tex_tile->format = (w1 >> 21) & 0x7; tex_tile->size = (w1 >> 19) & 0x3; @@ -3097,22 +3070,22 @@ void n64_rdp::CmdSetTile(UINT32 w1, UINT32 w2) //m_pending_mode_block = true; } -void n64_rdp::CmdFillRect(UINT32 w1, UINT32 w2) +void n64_rdp::cmd_fill_rect(UINT32 w1, UINT32 w2) { //if(m_pending_mode_block) { wait("Block on pending mode-change"); m_pending_mode_block = false; } - UINT32 xl = (w1 >> 12) & 0xfff; + const UINT32 xh = (w2 >> 12) & 0xfff; + const UINT32 xl = (w1 >> 12) & 0xfff; + const UINT32 yh = (w2 >> 0) & 0xfff; UINT32 yl = (w1 >> 0) & 0xfff; - UINT32 xh = (w2 >> 12) & 0xfff; - UINT32 yh = (w2 >> 0) & 0xfff; - if (OtherModes.cycle_type == CYCLE_TYPE_FILL || OtherModes.cycle_type == CYCLE_TYPE_COPY) + if (m_other_modes.cycle_type == CYCLE_TYPE_FILL || m_other_modes.cycle_type == CYCLE_TYPE_COPY) { yl |= 3; } - UINT32 xlint = (xl >> 2) & 0x3ff; - UINT32 xhint = (xh >> 2) & 0x3ff; + const UINT32 xlint = (xl >> 2) & 0x3ff; + const UINT32 xhint = (xh >> 2) & 0x3ff; UINT32* ewdata = m_temp_rect_data; ewdata[0] = (0x3680 << 16) | yl;//command, flipped, tile, yl @@ -3125,32 +3098,32 @@ void n64_rdp::CmdFillRect(UINT32 w1, UINT32 w2) ewdata[7] = 0;//dxmdy, dxmdy frac memset(&ewdata[8], 0, 36 * sizeof(UINT32));//shade, texture, depth - DrawTriangle(false, false, false, true); + draw_triangle(false, false, false, true); } -void n64_rdp::CmdSetFogColor(UINT32 w1, UINT32 w2) +void n64_rdp::cmd_set_fog_color(UINT32 w1, UINT32 w2) { - FogColor.c = w2; + m_fog_color.c = w2; } -void n64_rdp::CmdSetBlendColor(UINT32 w1, UINT32 w2) +void n64_rdp::cmd_set_blend_color(UINT32 w1, UINT32 w2) { - BlendColor.c = w2; + m_blend_color.c = w2; } -void n64_rdp::CmdSetPrimColor(UINT32 w1, UINT32 w2) +void n64_rdp::cmd_set_prim_color(UINT32 w1, UINT32 w2) { - MiscState.MinLevel = (w1 >> 8) & 0x1f; - PrimLODFraction = w1 & 0xff; - PrimColor.c = w2; + m_misc_state.m_min_level = (w1 >> 8) & 0x1f; + m_prim_lod_fraction = w1 & 0xff; + m_prim_color.c = w2; } -void n64_rdp::CmdSetEnvColor(UINT32 w1, UINT32 w2) +void n64_rdp::cmd_set_env_color(UINT32 w1, UINT32 w2) { - EnvColor.c = w2; + m_env_color.c = w2; } -void n64_rdp::CmdSetCombine(UINT32 w1, UINT32 w2) +void n64_rdp::cmd_set_combine(UINT32 w1, UINT32 w2) { m_combine.sub_a_rgb0 = (w1 >> 20) & 0xf; m_combine.mul_rgb0 = (w1 >> 15) & 0x1f; @@ -3171,136 +3144,50 @@ void n64_rdp::CmdSetCombine(UINT32 w1, UINT32 w2) m_combine.add_a1 = (w2 >> 0) & 0x7; } -void n64_rdp::CmdSetTextureImage(UINT32 w1, UINT32 w2) +void n64_rdp::cmd_set_texture_image(UINT32 w1, UINT32 w2) { - MiscState.TIFormat = (w1 >> 21) & 0x7; - MiscState.TISize = (w1 >> 19) & 0x3; - MiscState.TIWidth = (w1 & 0x3ff) + 1; - MiscState.TIAddress = w2 & 0x01ffffff; + m_misc_state.m_ti_format = (w1 >> 21) & 0x7; + m_misc_state.m_ti_size = (w1 >> 19) & 0x3; + m_misc_state.m_ti_width = (w1 & 0x3ff) + 1; + m_misc_state.m_ti_address = w2 & 0x01ffffff; } -void n64_rdp::CmdSetMaskImage(UINT32 w1, UINT32 w2) +void n64_rdp::cmd_set_mask_image(UINT32 w1, UINT32 w2) { //wait("SetMaskImage"); - MiscState.ZBAddress = w2 & 0x01ffffff; + m_misc_state.m_zb_address = w2 & 0x01ffffff; } -void n64_rdp::CmdSetColorImage(UINT32 w1, UINT32 w2) +void n64_rdp::cmd_set_color_image(UINT32 w1, UINT32 w2) { //wait("SetColorImage"); - MiscState.FBFormat = (w1 >> 21) & 0x7; - MiscState.FBSize = (w1 >> 19) & 0x3; - MiscState.FBWidth = (w1 & 0x3ff) + 1; - MiscState.FBAddress = w2 & 0x01ffffff; - - if (MiscState.FBFormat < 2 || MiscState.FBFormat > 32) // Jet Force Gemini sets the format to 4, Intensity. Protection? - { - MiscState.FBFormat = 2; - } -} + m_misc_state.m_fb_format = (w1 >> 21) & 0x7; + m_misc_state.m_fb_size = (w1 >> 19) & 0x3; + m_misc_state.m_fb_width = (w1 & 0x3ff) + 1; + m_misc_state.m_fb_address = w2 & 0x01ffffff; -UINT32 n64_rdp::AddRightCvg(UINT32 x, UINT32 k) -{ -//#undef FULL_SUBPIXELS -#define FULL_SUBPIXELS - UINT32 coveredsubpixels=((x >> 14) & 3); - if (!(x & 0xffff)) - { - return 0; - } -#ifdef FULL_SUBPIXELS - if (!coveredsubpixels) - { - return 0; - } - if (!(k & 1)) - { - return (coveredsubpixels<3) ? 1 : 2; - } - else - { - return (coveredsubpixels<2) ? 0 : 1; - } -#endif - if (!(k & 1)) + if (m_misc_state.m_fb_format < 2 || m_misc_state.m_fb_format > 32) // Jet Force Gemini sets the format to 4, Intensity. Protection? { - return (coveredsubpixels<2) ? 1 : 2; - } - else - { - if (coveredsubpixels<1) - { - return 0; - } - else if (coveredsubpixels<3) - { - return 1; - } - else - { - return 2; - } - } -} - -UINT32 n64_rdp::AddLeftCvg(UINT32 x, UINT32 k) -{ - UINT32 coveredsubpixels = 3 - ((x >> 14) & 3); - if (!(x & 0xffff)) - { - return 2; - } -#ifdef FULL_SUBPIXELS - if (!coveredsubpixels) - { - return 0; - } - if (!(k & 1)) - { - return (coveredsubpixels<2) ? 0 : 1; - } - else - { - return (coveredsubpixels<3) ? 1 : 2; - } -#endif - if (k & 1) - { - return (coveredsubpixels<2) ? 1 : 2; - } - else - { - if (coveredsubpixels < 1) - { - return 0; - } - else if (coveredsubpixels < 3) - { - return 1; - } - else - { - return 2; - } + m_misc_state.m_fb_format = 2; } } /*****************************************************************************/ -void n64_rdp::CmdInvalid(UINT32 w1, UINT32 w2) +void n64_rdp::cmd_invalid(UINT32 w1, UINT32 w2) { fatalerror("n64_rdp::Invalid: %d, %08x %08x\n", (w1 >> 24) & 0x3f, w1, w2); } -void n64_rdp::CmdNoOp(UINT32 w1, UINT32 w2) +void n64_rdp::cmd_noop(UINT32 w1, UINT32 w2) { // Do nothing } -void n64_rdp::ProcessList() +void n64_rdp::process_command_list() { INT32 length = m_end - m_current; @@ -3311,9 +3198,9 @@ void n64_rdp::ProcessList() } // load command data - for(int i = 0; i < length; i += 4) + for(INT32 i = 0; i < length; i += 4) { - m_cmd_data[m_cmd_ptr++] = ReadData((m_current & 0x1fffffff) + i); + m_cmd_data[m_cmd_ptr++] = read_data((m_current & 0x1fffffff) + i); } m_current = m_end; @@ -3321,10 +3208,10 @@ void n64_rdp::ProcessList() UINT32 cmd = (m_cmd_data[0] >> 24) & 0x3f; UINT32 cmd_length = (m_cmd_ptr + 1) * 4; - SetStatusReg(GetStatusReg() &~ DP_STATUS_FREEZE); + set_status(get_status() &~ DP_STATUS_FREEZE); // check if more data is needed - if (cmd_length < rdp_command_length[cmd]) + if (cmd_length < s_rdp_command_length[cmd]) { return; } @@ -3333,16 +3220,16 @@ void n64_rdp::ProcessList() { cmd = (m_cmd_data[m_cmd_cur] >> 24) & 0x3f; - if (((m_cmd_ptr - m_cmd_cur) * 4) < rdp_command_length[cmd]) + if (((m_cmd_ptr - m_cmd_cur) * 4) < s_rdp_command_length[cmd]) { return; - //fatalerror("rdp_process_list: not enough rdp command data: cur = %d, ptr = %d, expected = %d\n", m_cmd_cur, m_cmd_ptr, rdp_command_length[cmd]); + //fatalerror("rdp_process_list: not enough rdp command data: cur = %d, ptr = %d, expected = %d\n", m_cmd_cur, m_cmd_ptr, s_rdp_command_length[cmd]); } if (LOG_RDP_EXECUTION) { char string[4000]; - Dasm(string); + disassemble(string); fprintf(rdp_exec, "%08X: %08X %08X %s\n", m_start+(m_cmd_cur * 4), m_cmd_data[m_cmd_cur+0], m_cmd_data[m_cmd_cur+1], string); fflush(rdp_exec); @@ -3354,55 +3241,55 @@ void n64_rdp::ProcessList() switch(cmd) { - case 0x00: CmdNoOp(w1, w2); break; - - case 0x08: CmdTriangle(w1, w2); break; - case 0x09: CmdTriangleZ(w1, w2); break; - case 0x0a: CmdTriangleT(w1, w2); break; - case 0x0b: CmdTriangleTZ(w1, w2); break; - case 0x0c: CmdTriangleS(w1, w2); break; - case 0x0d: CmdTriangleSZ(w1, w2); break; - case 0x0e: CmdTriangleST(w1, w2); break; - case 0x0f: CmdTriangleSTZ(w1, w2); break; - - case 0x24: CmdTexRect(w1, w2); break; - case 0x25: CmdTexRectFlip(w1, w2); break; - - case 0x26: CmdSyncLoad(w1, w2); break; - case 0x27: CmdSyncPipe(w1, w2); break; - case 0x28: CmdSyncTile(w1, w2); break; - case 0x29: CmdSyncFull(w1, w2); break; - - case 0x2a: CmdSetKeyGB(w1, w2); break; - case 0x2b: CmdSetKeyR(w1, w2); break; - - case 0x2c: CmdSetConvert(w1, w2); break; - case 0x3c: CmdSetCombine(w1, w2); break; - case 0x2d: CmdSetScissor(w1, w2); break; - case 0x2e: CmdSetPrimDepth(w1, w2); break; - case 0x2f: CmdSetOtherModes(w1, w2); break; - - case 0x30: CmdLoadTLUT(w1, w2); break; - case 0x33: CmdLoadBlock(w1, w2); break; - case 0x34: CmdLoadTile(w1, w2); break; - - case 0x32: CmdSetTileSize(w1, w2); break; - case 0x35: CmdSetTile(w1, w2); break; - - case 0x36: CmdFillRect(w1, w2); break; - - case 0x37: CmdSetFillColor32(w1, w2); break; - case 0x38: CmdSetFogColor(w1, w2); break; - case 0x39: CmdSetBlendColor(w1, w2); break; - case 0x3a: CmdSetPrimColor(w1, w2); break; - case 0x3b: CmdSetEnvColor(w1, w2); break; - - case 0x3d: CmdSetTextureImage(w1, w2); break; - case 0x3e: CmdSetMaskImage(w1, w2); break; - case 0x3f: CmdSetColorImage(w1, w2); break; + case 0x00: cmd_noop(w1, w2); break; + + case 0x08: cmd_triangle(w1, w2); break; + case 0x09: cmd_triangle_z(w1, w2); break; + case 0x0a: cmd_triangle_t(w1, w2); break; + case 0x0b: cmd_triangle_tz(w1, w2); break; + case 0x0c: cmd_triangle_s(w1, w2); break; + case 0x0d: cmd_triangle_sz(w1, w2); break; + case 0x0e: cmd_triangle_st(w1, w2); break; + case 0x0f: cmd_triangle_stz(w1, w2); break; + + case 0x24: cmd_tex_rect(w1, w2); break; + case 0x25: cmd_tex_rect_flip(w1, w2); break; + + case 0x26: cmd_sync_load(w1, w2); break; + case 0x27: cmd_sync_pipe(w1, w2); break; + case 0x28: cmd_sync_tile(w1, w2); break; + case 0x29: cmd_sync_full(w1, w2); break; + + case 0x2a: cmd_set_key_gb(w1, w2); break; + case 0x2b: cmd_set_key_r(w1, w2); break; + + case 0x2c: cmd_set_convert(w1, w2); break; + case 0x3c: cmd_set_combine(w1, w2); break; + case 0x2d: cmd_set_scissor(w1, w2); break; + case 0x2e: cmd_set_prim_depth(w1, w2); break; + case 0x2f: cmd_set_other_modes(w1, w2); break; + + case 0x30: cmd_load_tlut(w1, w2); break; + case 0x33: cmd_load_block(w1, w2); break; + case 0x34: cmd_load_tile(w1, w2); break; + + case 0x32: cmd_set_tile_size(w1, w2); break; + case 0x35: cmd_set_tile(w1, w2); break; + + case 0x36: cmd_fill_rect(w1, w2); break; + + case 0x37: cmd_set_fill_color32(w1, w2); break; + case 0x38: cmd_set_fog_color(w1, w2); break; + case 0x39: cmd_set_blend_color(w1, w2); break; + case 0x3a: cmd_set_prim_color(w1, w2); break; + case 0x3b: cmd_set_env_color(w1, w2); break; + + case 0x3d: cmd_set_texture_image(w1, w2); break; + case 0x3e: cmd_set_mask_image(w1, w2); break; + case 0x3f: cmd_set_color_image(w1, w2); break; } - m_cmd_cur += rdp_command_length[cmd] / 4; + m_cmd_cur += s_rdp_command_length[cmd] / 4; }; m_cmd_ptr = 0; m_cmd_cur = 0; @@ -3414,8 +3301,8 @@ void n64_rdp::ProcessList() n64_rdp::n64_rdp(n64_state &state) : poly_manager<UINT32, rdp_poly_state, 8, 32000>(state.machine()) { - AuxBufPtr = 0; - AuxBuf = NULL; + m_aux_buf_ptr = 0; + m_aux_buf = NULL; m_pipe_clean = true; m_pending_mode_block = false; @@ -3428,13 +3315,13 @@ n64_rdp::n64_rdp(n64_state &state) : poly_manager<UINT32, rdp_poly_state, 8, 320 m_current = 0; m_status = 0x88; - for (int i = 0; i < 8; i++) + for (INT32 i = 0; i < 8; i++) { m_tiles[i].num = i; } - OneColor.c = 0xffffffff; - ZeroColor.c = 0x00000000; + m_one.c = 0xffffffff; + m_zero.c = 0x00000000; m_tmem = NULL; @@ -3442,15 +3329,15 @@ n64_rdp::n64_rdp(n64_state &state) : poly_manager<UINT32, rdp_poly_state, 8, 320 //memset(m_hidden_bits, 3, 8388608); - PrimLODFraction = 0; + m_prim_lod_fraction = 0; - for (int i = 0; i < 256; i++) + for (INT32 i = 0; i < 256; i++) { m_gamma_table[i] = sqrt((float)(i << 6)); m_gamma_table[i] <<= 1; } - for (int i = 0; i < 0x4000; i++) + for (INT32 i = 0; i < 0x4000; i++) { m_gamma_dither_table[i] = sqrt((float)i); m_gamma_dither_table[i] <<= 1; @@ -3458,16 +3345,16 @@ n64_rdp::n64_rdp(n64_state &state) : poly_manager<UINT32, rdp_poly_state, 8, 320 z_build_com_table(); - for (int i = 0; i < 0x4000; i++) + for (INT32 i = 0; i < 0x4000; i++) { UINT32 exponent = (i >> 11) & 7; UINT32 mantissa = i & 0x7ff; - z_complete_dec_table[i] = ((mantissa << z_dec_table[exponent].shift) + z_dec_table[exponent].add) & 0x3fffff; + m_z_complete_dec_table[i] = ((mantissa << m_z_dec_table[exponent].shift) + m_z_dec_table[exponent].add) & 0x3fffff; } precalc_cvmask_derivatives(); - for(int i = 0; i < 0x200; i++) + for(INT32 i = 0; i < 0x200; i++) { switch((i >> 7) & 3) { @@ -3484,14 +3371,14 @@ n64_rdp::n64_rdp(n64_state &state) : poly_manager<UINT32, rdp_poly_state, 8, 320 } } - for(int i = 0; i < 32; i++) + for(INT32 i = 0; i < 32; i++) { - ReplicatedRGBA[i] = (i << 3) | ((i >> 2) & 7); + m_replicated_rgba[i] = (i << 3) | ((i >> 2) & 7); } - for(int i = 0; i < 0x10000; i++) + for(INT32 i = 0; i < 0x10000; i++) { - m_dzpix_normalize[i] = (UINT16)NormalizeDZPix(i & 0xffff); + m_dzpix_normalize[i] = (UINT16)normalize_dzpix(i & 0xffff); } } @@ -3499,15 +3386,15 @@ void n64_state::video_start() { m_rdp = auto_alloc(machine(), n64_rdp(*this)); - m_rdp->SetMachine(machine()); - m_rdp->InitInternalState(); + m_rdp->set_machine(machine()); + m_rdp->init_internal_state(); - m_rdp->Blender.SetMachine(machine()); - m_rdp->Blender.SetProcessor(m_rdp); + m_rdp->m_blender.set_machine(machine()); + m_rdp->m_blender.set_processor(m_rdp); - m_rdp->TexPipe.SetMachine(machine()); + m_rdp->m_tex_pipe.set_machine(machine()); - m_rdp->AuxBuf = auto_alloc_array_clear(machine(), UINT8, EXTENT_AUX_COUNT); + m_rdp->m_aux_buf = auto_alloc_array_clear(machine(), UINT8, EXTENT_AUX_COUNT); if (LOG_RDP_EXECUTION) { @@ -3517,12 +3404,12 @@ void n64_state::video_start() UINT32 n64_state::screen_update_n64(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { - n64_periphs *n64 = machine().device<n64_periphs>("rcp"); - m_rdp->visarea = screen.visible_area(); + n64_periphs* n64 = machine().device<n64_periphs>("rcp"); + m_rdp->m_visarea = screen.visible_area(); - //UINT16 *frame_buffer = (UINT16*)&rdram[(n64->vi_origin & 0xffffff) >> 2]; - //UINT8 *cvg_buffer = &m_rdp.HiddenBits[((n64->vi_origin & 0xffffff) >> 2) >> 1]; - //int vibuffering = ((n64->vi_control & 2) && fsaa && divot); + //UINT16* frame_buffer = (UINT16*)&rdram[(n64->vi_origin & 0xffffff) >> 2]; + //UINT8* cvg_buffer = &m_rdp.m_hidden_bits[((n64->vi_origin & 0xffffff) >> 2) >> 1]; + //INT32 vibuffering = ((n64->vi_control & 2) && fsaa && divot); //vibuffering = 0; // Disabled for now @@ -3559,15 +3446,15 @@ UINT32 n64_state::screen_update_n64(screen_device &screen, bitmap_rgb32 &bitmap, */ m_rdp->wait(); - m_rdp->AuxBufPtr = 0; + m_rdp->m_aux_buf_ptr = 0; if (n64->vi_blank) { - bitmap.fill(0, m_rdp->visarea); + bitmap.fill(0, m_rdp->m_visarea); return 0; } - m_rdp->VideoUpdate(n64, bitmap); + m_rdp->video_update(n64, bitmap); return 0; } diff --git a/src/mame/video/n64.h b/src/mame/video/n64.h index e36b330073f..09ce993d249 100644 --- a/src/mame/video/n64.h +++ b/src/mame/video/n64.h @@ -50,9 +50,9 @@ #endif #define DWORD_XOR_DWORD_SWAP 1 -#define GET_LOW_RGBA16_TMEM(x) (m_rdp->ReplicatedRGBA[((x) >> 1) & 0x1f]) -#define GET_MED_RGBA16_TMEM(x) (m_rdp->ReplicatedRGBA[((x) >> 6) & 0x1f]) -#define GET_HI_RGBA16_TMEM(x) (m_rdp->ReplicatedRGBA[((x) >> 11) & 0x1f]) +#define GET_LOW_RGBA16_TMEM(x) (m_rdp->m_replicated_rgba[((x) >> 1) & 0x1f]) +#define GET_MED_RGBA16_TMEM(x) (m_rdp->m_replicated_rgba[((x) >> 6) & 0x1f]) +#define GET_HI_RGBA16_TMEM(x) (m_rdp->m_replicated_rgba[((x) >> 11) & 0x1f]) #define MEM8_LIMIT 0x7fffff #define MEM16_LIMIT 0x3fffff @@ -76,7 +76,7 @@ #define RREADIDX32(in) ((rdp_range_check((in) << 2)) ? 0 : rdram[(in)]) #define RWRITEADDR8(in, val) if(rdp_range_check((in))) { printf("Write8: Address %08x out of range!\n", (in)); fflush(stdout); fatalerror("Address %08x out of range!\n", (in)); } else { ((UINT8*)rdram)[(in) ^ BYTE_ADDR_XOR] = val;} -#define RWRITEIDX16(in, val) if(rdp_range_check((in) << 1)) { printf("Write16: Address %08x out of range!\n", ((object.MiscState.FBAddress >> 1) + curpixel) << 1); fflush(stdout); fatalerror("Address out of range\n"); } else { ((UINT16*)rdram)[(in) ^ WORD_ADDR_XOR] = val;} +#define RWRITEIDX16(in, val) if(rdp_range_check((in) << 1)) { printf("Write16: Address %08x out of range!\n", ((object.m_misc_state.m_fb_address >> 1) + curpixel) << 1); fflush(stdout); fatalerror("Address out of range\n"); } else { ((UINT16*)rdram)[(in) ^ WORD_ADDR_XOR] = val;} #define RWRITEIDX32(in, val) if(rdp_range_check((in) << 2)) { printf("Write32: Address %08x out of range!\n", (in) << 2); fflush(stdout); fatalerror("Address %08x out of range!\n", (in) << 2); } else { rdram[(in)] = val;} #else #define RREADADDR8(in) (((UINT8*)rdram)[(in) ^ BYTE_ADDR_XOR]) @@ -96,8 +96,8 @@ #define GETMEDCOL(x) (((x) & 0x7c0) >> 3) #define GETHICOL(x) (((x) & 0xf800) >> 8) -#define HREADADDR8(in) /*(((in) <= MEM8_LIMIT) ? */(HiddenBits[(in) ^ BYTE_ADDR_XOR])/* : 0)*/ -#define HWRITEADDR8(in, val) /*{if ((in) <= MEM8_LIMIT) */HiddenBits[(in) ^ BYTE_ADDR_XOR] = val;/*}*/ +#define HREADADDR8(in) /*(((in) <= MEM8_LIMIT) ? */(m_hidden_bits[(in) ^ BYTE_ADDR_XOR])/* : 0)*/ +#define HWRITEADDR8(in, val) /*{if ((in) <= MEM8_LIMIT) */m_hidden_bits[(in) ^ BYTE_ADDR_XOR] = val;/*}*/ //sign-extension macros #define SIGN22(x) (((x) & 0x200000) ? ((x) | ~0x3fffff) : ((x) & 0x3fffff)) @@ -128,17 +128,17 @@ class n64_periphs; class n64_rdp; -struct MiscStateT; -struct OtherModesT; -struct CombineModesT; -struct ColorInputsT; -struct SpanBaseT; -struct Rectangle; +struct misc_state_t; +struct other_modes_t; +struct combine_mdoes_t; +struct color_inputs_t; +struct span_base_t; +struct rectangle_t; -class Color +class color_t { public: - Color() + color_t() { c = 0; } @@ -176,95 +176,92 @@ class SpanParam }; }; -struct N64Tile +struct n64_tile_t { - int format; // Image data format: RGBA, YUV, CI, IA, I - int size; // Size of texel element: 4b, 8b, 16b, 32b - int line; // Size of tile line in bytes - int tmem; // Starting tmem address for this tile in bytes - int palette; // Palette number for 4b CI texels - int ct, mt, cs, ms; // Clamp / mirror enable bits for S / T direction - int mask_t, shift_t, mask_s, shift_s; // Mask values / LOD shifts + INT32 format; // Image data format: RGBA, YUV, CI, IA, I + INT32 size; // Size of texel element: 4b, 8b, 16b, 32b + INT32 line; // Size of tile line in bytes + INT32 tmem; // Starting tmem address for this tile in bytes + INT32 palette; // Palette number for 4b CI texels + INT32 ct, mt, cs, ms; // Clamp / mirror enable bits for S / T direction + INT32 mask_t, shift_t, mask_s, shift_s; // Mask values / LOD shifts UINT16 sl, tl, sh, th; // 10.2 fixed-point, starting and ending texel row / column - int num; + INT32 num; }; -struct SpanBaseT +struct span_base_t { - int m_span_dr; - int m_span_dg; - int m_span_db; - int m_span_da; - int m_span_ds; - int m_span_dt; - int m_span_dw; - int m_span_dz; - int m_span_dymax; - int m_span_dzpix; - int m_span_drdy; - int m_span_dgdy; - int m_span_dbdy; - int m_span_dady; - int m_span_dzdy; + INT32 m_span_dr; + INT32 m_span_dg; + INT32 m_span_db; + INT32 m_span_da; + INT32 m_span_ds; + INT32 m_span_dt; + INT32 m_span_dw; + INT32 m_span_dz; + INT32 m_span_dymax; + INT32 m_span_dzpix; + INT32 m_span_drdy; + INT32 m_span_dgdy; + INT32 m_span_dbdy; + INT32 m_span_dady; + INT32 m_span_dzdy; }; -struct MiscStateT +struct misc_state_t { - MiscStateT() + misc_state_t() { - MaxLevel = 0; - MinLevel = 0; + m_max_level = 0; + m_min_level = 0; } - int FBFormat; // Framebuffer pixel format index (0 - I, 1 - IA, 2 - CI, 3 - RGBA) - int FBSize; // Framebuffer pixel size index (0 - 4bpp, 1 - 8bpp, 2 - 16bpp, 3 - 32bpp) - int FBWidth; // Framebuffer width, in pixels - int FBHeight; // Framebuffer height, in scanlines - UINT32 FBAddress; // Framebuffer source address offset (in bytes) from start of RDRAM + INT32 m_fb_format; // Framebuffer pixel format index (0 - I, 1 - IA, 2 - CI, 3 - RGBA) + INT32 m_fb_size; // Framebuffer pixel size index (0 - 4bpp, 1 - 8bpp, 2 - 16bpp, 3 - 32bpp) + INT32 m_fb_width; // Framebuffer width, in pixels + INT32 m_fb_height; // Framebuffer height, in pixels + UINT32 m_fb_address; // Framebuffer source address offset (in bytes) from start of RDRAM - UINT32 ZBAddress; // Z-buffer source address offset (in bytes) from start of RDRAM + UINT32 m_zb_address; // Z-buffer source address offset (in bytes) from start of RDRAM - int TIFormat; // Format for Texture Interface (TI) transfers - int TISize; // Size (in bytes) of TI transfers - int TIWidth; // Width (in pixels) of TI transfers - UINT32 TIAddress; // Destination address for TI transfers + INT32 m_ti_format; // Format for Texture Interface (TI) transfers + INT32 m_ti_size; // Size (in bytes) of TI transfers + INT32 m_ti_width; // Width (in pixels) of TI transfers + UINT32 m_ti_address; // Destination address for TI transfers - UINT8 RandomSeed; // %HACK%, adds 19 each time it's read and is more or less random + UINT8 m_random_seed; // %HACK%, adds 19 each time it's read and is more or less random - int SpecialBlendSelect0; // Special blend-mode select for cycle 0 - int SpecialBlendSelect1; // Special blend-mode select for cycle 1 + UINT32 m_max_level; // Maximum LOD level for texture filtering + UINT32 m_min_level; // Minimum LOD level for texture filtering - UINT32 MaxLevel; // Maximum LOD level for texture filtering - UINT32 MinLevel; // Minimum LOD level for texture filtering - - UINT16 PrimitiveZ; // Forced Z value for current primitive, if applicable - UINT16 PrimitiveDZ; // Forced Delta-Z value for current primitive, if applicable + UINT16 m_primitive_z; // Forced Z value for current primitive, if applicable + UINT16 m_primitive_dz; // Forced Delta-Z value for current primitive, if applicable }; -struct CombineModesT +struct combine_modes_t { - int sub_a_rgb0; - int sub_b_rgb0; - int mul_rgb0; - int add_rgb0; - int sub_a_a0; - int sub_b_a0; - int mul_a0; - int add_a0; - - int sub_a_rgb1; - int sub_b_rgb1; - int mul_rgb1; - int add_rgb1; - int sub_a_a1; - int sub_b_a1; - int mul_a1; - int add_a1; + INT32 sub_a_rgb0; + INT32 sub_b_rgb0; + INT32 mul_rgb0; + INT32 add_rgb0; + INT32 sub_a_a0; + INT32 sub_b_a0; + INT32 mul_a0; + INT32 add_a0; + + INT32 sub_a_rgb1; + INT32 sub_b_rgb1; + INT32 mul_rgb1; + INT32 add_rgb1; + INT32 sub_a_a1; + INT32 sub_b_a1; + INT32 mul_a1; + INT32 add_a1; }; -struct OtherModesT +struct other_modes_t { - int cycle_type; + INT32 cycle_type; bool persp_tex_en; bool detail_tex_en; bool sharpen_tex_en; @@ -277,64 +274,64 @@ struct OtherModesT bool bi_lerp1; bool convert_one; bool key_en; - int rgb_dither_sel; - int alpha_dither_sel; - int blend_m1a_0; - int blend_m1a_1; - int blend_m1b_0; - int blend_m1b_1; - int blend_m2a_0; - int blend_m2a_1; - int blend_m2b_0; - int blend_m2b_1; - int tex_edge; - int force_blend; - int blend_shift; + INT32 rgb_dither_sel; + INT32 alpha_dither_sel; + INT32 blend_m1a_0; + INT32 blend_m1a_1; + INT32 blend_m1b_0; + INT32 blend_m1b_1; + INT32 blend_m2a_0; + INT32 blend_m2a_1; + INT32 blend_m2b_0; + INT32 blend_m2b_1; + INT32 tex_edge; + INT32 force_blend; + INT32 blend_shift; bool alpha_cvg_select; bool cvg_times_alpha; - int z_mode; - int cvg_dest; + INT32 z_mode; + INT32 cvg_dest; bool color_on_cvg; UINT8 image_read_en; bool z_update_en; bool z_compare_en; bool antialias_en; bool z_source_sel; - int dither_alpha_en; - int alpha_compare_en; - int alpha_dither_mode; + INT32 dither_alpha_en; + INT32 alpha_compare_en; + INT32 alpha_dither_mode; }; -struct ColorInputsT +struct color_inputs_t { // combiner inputs - UINT8 *combiner_rgbsub_a_r[2]; - UINT8 *combiner_rgbsub_a_g[2]; - UINT8 *combiner_rgbsub_a_b[2]; - UINT8 *combiner_rgbsub_b_r[2]; - UINT8 *combiner_rgbsub_b_g[2]; - UINT8 *combiner_rgbsub_b_b[2]; - UINT8 *combiner_rgbmul_r[2]; - UINT8 *combiner_rgbmul_g[2]; - UINT8 *combiner_rgbmul_b[2]; - UINT8 *combiner_rgbadd_r[2]; - UINT8 *combiner_rgbadd_g[2]; - UINT8 *combiner_rgbadd_b[2]; - - UINT8 *combiner_alphasub_a[2]; - UINT8 *combiner_alphasub_b[2]; - UINT8 *combiner_alphamul[2]; - UINT8 *combiner_alphaadd[2]; + UINT8* combiner_rgbsub_a_r[2]; + UINT8* combiner_rgbsub_a_g[2]; + UINT8* combiner_rgbsub_a_b[2]; + UINT8* combiner_rgbsub_b_r[2]; + UINT8* combiner_rgbsub_b_g[2]; + UINT8* combiner_rgbsub_b_b[2]; + UINT8* combiner_rgbmul_r[2]; + UINT8* combiner_rgbmul_g[2]; + UINT8* combiner_rgbmul_b[2]; + UINT8* combiner_rgbadd_r[2]; + UINT8* combiner_rgbadd_g[2]; + UINT8* combiner_rgbadd_b[2]; + + UINT8* combiner_alphasub_a[2]; + UINT8* combiner_alphasub_b[2]; + UINT8* combiner_alphamul[2]; + UINT8* combiner_alphaadd[2]; // blender input - UINT8 *blender1a_r[2]; - UINT8 *blender1a_g[2]; - UINT8 *blender1a_b[2]; - UINT8 *blender1b_a[2]; - UINT8 *blender2a_r[2]; - UINT8 *blender2a_g[2]; - UINT8 *blender2a_b[2]; - UINT8 *blender2b_a[2]; + UINT8* blender1a_r[2]; + UINT8* blender1a_g[2]; + UINT8* blender1a_b[2]; + UINT8* blender1b_a[2]; + UINT8* blender2a_r[2]; + UINT8* blender2a_g[2]; + UINT8* blender2a_b[2]; + UINT8* blender2b_a[2]; }; // This is enormous and horrible @@ -342,40 +339,39 @@ struct rdp_span_aux { UINT32 m_unscissored_rx; UINT16 m_cvg[RDP_CVG_SPAN_MAX]; - Color MemoryColor; - Color PixelColor; - Color InvPixelColor; - Color BlendedPixelColor; - Color CombinedColor; - Color Texel0Color; - Color Texel1Color; - Color NextTexelColor; - Color BlendColor; /* constant blend color */ - Color PrimColor; /* flat primitive color */ - Color EnvColor; /* generic color constant ('environment') */ - Color FogColor; /* generic color constant ('fog') */ - Color ShadeColor; /* gouraud-shaded color */ - Color KeyScale; /* color-keying constant */ - Color NoiseColor; /* noise */ - UINT8 LODFraction; /* Z-based LOD fraction for this poly */ - UINT8 PrimLODFraction; /* fixed LOD fraction for this poly */ - ColorInputsT ColorInputs; - UINT32 CurrentPixCvg; - UINT32 CurrentMemCvg; - UINT32 CurrentCvgBit; - UINT32 CurrentPixOverlap; - INT32 ShiftA; - INT32 ShiftB; + color_t m_memory_color; + color_t m_pixel_color; + color_t m_inv_pixel_color; + color_t m_blended_pixel_color; + color_t m_combined_color; + color_t m_texel0_color; + color_t m_texel1_color; + color_t m_next_texel_color; + color_t m_blend_color; /* constant blend color */ + color_t m_prim_color; /* flat primitive color */ + color_t m_env_color; /* generic color constant ('environment') */ + color_t m_fog_color; /* generic color constant ('fog') */ + color_t m_shade_color; /* gouraud-shaded color */ + color_t m_key_scale; /* color-keying constant */ + color_t m_noise_color; /* noise */ + UINT8 m_lod_fraction; /* Z-based LOD fraction for this poly */ + UINT8 m_prim_lod_fraction; /* fixed LOD fraction for this poly */ + color_inputs_t m_color_inputs; + UINT32 m_current_pix_cvg; + UINT32 m_current_mem_cvg; + UINT32 m_current_cvg_bit; + INT32 m_shift_a; + INT32 m_shift_b; INT32 m_precomp_s; INT32 m_precomp_t; - UINT8 BlendEnable; - bool PreWrap; + INT32 m_blend_enable; + bool m_pre_wrap; INT32 m_dzpix_enc; - UINT8 *m_tmem; /* pointer to texture cache for this polygon */ + UINT8* m_tmem; /* pointer to texture cache for this polygon */ bool m_start_span; }; -struct Rectangle +struct rectangle_t { UINT16 m_xl; // 10.2 fixed-point UINT16 m_yl; // 10.2 fixed-point @@ -383,318 +379,289 @@ struct Rectangle UINT16 m_yh; // 10.2 fixed-point }; +struct z_decompress_entry_t +{ + UINT32 shift; + UINT32 add; +}; + +struct cv_mask_derivative_t +{ + UINT8 cvg; + UINT8 cvbit; + UINT8 xoff; + UINT8 yoff; +}; + struct rdp_poly_state { - n64_rdp * m_rdp; /* pointer back to the RDP state */ - - MiscStateT MiscState; /* miscellaneous rasterizer bits */ - OtherModesT OtherModes; /* miscellaneous rasterizer bits (2) */ - SpanBaseT SpanBase; /* span initial values for triangle rasterization */ - Rectangle Scissor; /* screen-space scissor bounds */ - UINT32 FillColor; /* poly fill color */ - N64Tile m_tiles[8]; /* texture tile state */ + n64_rdp* m_rdp; /* pointer back to the RDP state */ + + misc_state_t m_misc_state; /* miscellaneous rasterizer bits */ + other_modes_t m_other_modes; /* miscellaneous rasterizer bits (2) */ + span_base_t m_span_base; /* span initial values for triangle rasterization */ + rectangle_t m_scissor; /* screen-space scissor bounds */ + UINT32 m_fill_color; /* poly fill color */ + n64_tile_t m_tiles[8]; /* texture tile state */ UINT8 m_tmem[0x1000]; /* texture cache */ - int tilenum; /* texture tile index */ + INT32 tilenum; /* texture tile index */ bool flip; /* left-major / right-major flip */ bool rect; /* primitive is rectangle (vs. triangle) */ }; -//class n64_state; +typedef void (*rdp_command_t)(UINT32 w1, UINT32 w2); class n64_rdp : public poly_manager<UINT32, rdp_poly_state, 8, 32000> { - public: - typedef void (n64_rdp::*Writer) (UINT32 curpixel, UINT32 r, UINT32 g, UINT32 b, rdp_span_aux *userdata, const rdp_poly_state &object); - typedef void (n64_rdp::*Reader) (UINT32 curpixel, rdp_span_aux *userdata, const rdp_poly_state &object); - typedef void (n64_rdp::*Copier) (UINT32 curpixel, UINT32 r, UINT32 g, UINT32 b, int CurrentPixCvg, const rdp_poly_state &object); - typedef void (n64_rdp::*Filler) (UINT32 curpixel, const rdp_poly_state &object); +public: + n64_rdp(n64_state &state); - n64_rdp(n64_state &state); - - running_machine &machine() const { assert(m_machine != NULL); return *m_machine; } - - void InitInternalState() - { - m_tmem = auto_alloc_array(machine(), UINT8, 0x1000); - memset(m_tmem, 0, 0x1000); - - UINT8 *normpoint = machine().root_device().memregion("normpoint")->base(); - UINT8 *normslope = machine().root_device().memregion("normslope")->base(); - - for(INT32 i = 0; i < 64; i++) - { - m_norm_point_rom[i] = (normpoint[(i << 1) + 1] << 8) | normpoint[i << 1]; - m_norm_slope_rom[i] = (normslope[(i << 1) + 1] << 8) | normslope[i << 1]; - } - - memset(m_tiles, 0, 8 * sizeof(N64Tile)); - memset(m_cmd_data, 0, sizeof(m_cmd_data)); - } + running_machine &machine() const { assert(m_machine != NULL); return *m_machine; } - void ProcessList(); - UINT32 ReadData(UINT32 address); - void Dasm(char *buffer); - - void SetMachine(running_machine& machine) { m_machine = &machine; } + void init_internal_state() + { + m_tmem = auto_alloc_array(machine(), UINT8, 0x1000); + memset(m_tmem, 0, 0x1000); - // CPU-visible registers - void SetStartReg(UINT32 val) - { - m_start = val; - } - UINT32 GetStartReg() const { return m_start; } + UINT8* normpoint = machine().root_device().memregion("normpoint")->base(); + UINT8* normslope = machine().root_device().memregion("normslope")->base(); - void SetEndReg(UINT32 val) + for(INT32 i = 0; i < 64; i++) { - m_end = val; + m_norm_point_rom[i] = (normpoint[(i << 1) + 1] << 8) | normpoint[i << 1]; + m_norm_slope_rom[i] = (normslope[(i << 1) + 1] << 8) | normslope[i << 1]; } - UINT32 GetEndReg() const { return m_end; } - - void SetCurrentReg(UINT32 val) { m_current = val; } - UINT32 GetCurrentReg() const { return m_current; } - - void SetStatusReg(UINT32 val) { m_status = val; } - UINT32 GetStatusReg() const { return m_status; } - - // Internal state - CombineModesT* GetCombine() { return &m_combine; } - - // Color Combiner - INT32 ColorCombinerEquation(INT32 a, INT32 b, INT32 c, INT32 d); - INT32 AlphaCombinerEquation(INT32 a, INT32 b, INT32 c, INT32 d); - void SetSubAInputRGB(UINT8 **input_r, UINT8 **input_g, UINT8 **input_b, int code, rdp_span_aux *userdata); - void SetSubBInputRGB(UINT8 **input_r, UINT8 **input_g, UINT8 **input_b, int code, rdp_span_aux *userdata); - void SetMulInputRGB(UINT8 **input_r, UINT8 **input_g, UINT8 **input_b, int code, rdp_span_aux *userdata); - void SetAddInputRGB(UINT8 **input_r, UINT8 **input_g, UINT8 **input_b, int code, rdp_span_aux *userdata); - void SetSubInputAlpha(UINT8 **input, int code, rdp_span_aux *userdata); - void SetMulInputAlpha(UINT8 **input, int code, rdp_span_aux *userdata); - - // Texture memory - UINT8* GetTMEM() { return m_tmem; } - UINT16* GetTMEM16() { return (UINT16*)m_tmem; } - UINT32* GetTMEM32() { return (UINT32*)m_tmem; } - UINT16* GetTLUT() { return (UINT16*)(m_tmem + 0x800); } - - // Emulation Accelerators - UINT8 GetRandom() { return MiscState.RandomSeed += 0x13; } - - // YUV Factors - void SetYUVFactors(INT32 k0, INT32 k1, INT32 k2, INT32 k3, INT32 k4, INT32 k5) { m_k0 = k0; m_k1 = k1; m_k2 = k2; m_k3 = k3; m_k4 = k4; m_k5 = k5; } - INT32 GetK0() const { return m_k0; } - INT32 GetK1() const { return m_k1; } - INT32 GetK2() const { return m_k2; } - INT32 GetK3() const { return m_k3; } - INT32* GetK4() { return &m_k4; } - INT32* GetK5() { return &m_k5; } - - // Blender-related (move into RDP::Blender) - void SetBlenderInput(int cycle, int which, UINT8 **input_r, UINT8 **input_g, UINT8 **input_b, UINT8 **input_a, int a, int b, rdp_span_aux *userdata); - - // Span rasterization - void SpanDraw1Cycle(INT32 scanline, const extent_t &extent, const rdp_poly_state &object, int threadid); - void SpanDraw2Cycle(INT32 scanline, const extent_t &extent, const rdp_poly_state &object, int threadid); - void SpanDrawCopy(INT32 scanline, const extent_t &extent, const rdp_poly_state &object, int threadid); - void SpanDrawFill(INT32 scanline, const extent_t &extent, const rdp_poly_state &object, int threadid); - - // Render-related (move into eventual drawing-related classes?) - void TCDiv(INT32 ss, INT32 st, INT32 sw, INT32* sss, INT32* sst); - void TCDivNoPersp(INT32 ss, INT32 st, INT32 sw, INT32* sss, INT32* sst); - UINT32 GetLog2(UINT32 lod_clamp); - void RenderSpans(int start, int end, int tilenum, bool flip, extent_t *Spans, bool rect, rdp_poly_state *object); - void GetAlphaCvg(UINT8 *comb_alpha, rdp_span_aux *userdata, const rdp_poly_state &object); - const UINT8* GetBayerMatrix() const { return s_bayer_matrix; } - const UINT8* GetMagicMatrix() const { return s_magic_matrix; } - int GetCurrFIFOIndex() const { return m_cmd_cur; } - - void ZStore(const rdp_poly_state &object, UINT32 zcurpixel, UINT32 dzcurpixel, UINT32 z, UINT32 enc); - UINT32 ZDecompress(UINT32 zcurpixel); - UINT32 DZDecompress(UINT32 zcurpixel, UINT32 dzcurpixel); - UINT32 DZCompress(UINT32 value); - INT32 NormalizeDZPix(INT32 sum); - bool ZCompare(UINT32 zcurpixel, UINT32 dzcurpixel, UINT32 sz, UINT16 dzpix, rdp_span_aux *userdata, const rdp_poly_state &object); - - // Fullscreen update-related - void VideoUpdate(n64_periphs *n64, bitmap_rgb32 &bitmap); - - // Commands - void CmdInvalid(UINT32 w1, UINT32 w2); - void CmdNoOp(UINT32 w1, UINT32 w2); - void CmdTriangle(UINT32 w1, UINT32 w2); - void CmdTriangleZ(UINT32 w1, UINT32 w2); - void CmdTriangleT(UINT32 w1, UINT32 w2); - void CmdTriangleTZ(UINT32 w1, UINT32 w2); - void CmdTriangleS(UINT32 w1, UINT32 w2); - void CmdTriangleSZ(UINT32 w1, UINT32 w2); - void CmdTriangleST(UINT32 w1, UINT32 w2); - void CmdTriangleSTZ(UINT32 w1, UINT32 w2); - void CmdTexRect(UINT32 w1, UINT32 w2); - void CmdTexRectFlip(UINT32 w1, UINT32 w2); - void CmdSyncLoad(UINT32 w1, UINT32 w2); - void CmdSyncPipe(UINT32 w1, UINT32 w2); - void CmdSyncTile(UINT32 w1, UINT32 w2); - void CmdSyncFull(UINT32 w1, UINT32 w2); - void CmdSetKeyGB(UINT32 w1, UINT32 w2); - void CmdSetKeyR(UINT32 w1, UINT32 w2); - void CmdSetFillColor32(UINT32 w1, UINT32 w2); - void CmdSetConvert(UINT32 w1, UINT32 w2); - void CmdSetScissor(UINT32 w1, UINT32 w2); - void CmdSetPrimDepth(UINT32 w1, UINT32 w2); - void CmdSetOtherModes(UINT32 w1, UINT32 w2); - void CmdLoadTLUT(UINT32 w1, UINT32 w2); - void CmdSetTileSize(UINT32 w1, UINT32 w2); - void CmdLoadBlock(UINT32 w1, UINT32 w2); - void CmdLoadTile(UINT32 w1, UINT32 w2); - void CmdFillRect(UINT32 w1, UINT32 w2); - void CmdSetTile(UINT32 w1, UINT32 w2); - void CmdSetFogColor(UINT32 w1, UINT32 w2); - void CmdSetBlendColor(UINT32 w1, UINT32 w2); - void CmdSetPrimColor(UINT32 w1, UINT32 w2); - void CmdSetEnvColor(UINT32 w1, UINT32 w2); - void CmdSetCombine(UINT32 w1, UINT32 w2); - void CmdSetTextureImage(UINT32 w1, UINT32 w2); - void CmdSetMaskImage(UINT32 w1, UINT32 w2); - void CmdSetColorImage(UINT32 w1, UINT32 w2); - - void RGBAZClip(int sr, int sg, int sb, int sa, int *sz, rdp_span_aux *userdata); - void RGBAZCorrectTriangle(INT32 offx, INT32 offy, INT32* r, INT32* g, INT32* b, INT32* a, INT32* z, rdp_span_aux *userdata, const rdp_poly_state &object); - - void Triangle(bool shade, bool texture, bool zbuffer); - UINT32 AddRightCvg(UINT32 x, UINT32 k); - UINT32 AddLeftCvg(UINT32 x, UINT32 k); - - void GetDitherValues(int x, int y, int* cdith, int* adith, const rdp_poly_state &object); - - UINT16 decompress_cvmask_frombyte(UINT8 x); - void lookup_cvmask_derivatives(UINT32 mask, UINT8* offx, UINT8* offy, rdp_span_aux *userdata); - - MiscStateT MiscState; - - // Color constants - Color BlendColor; /* constant blend color */ - Color PrimColor; /* flat primitive color */ - Color EnvColor; /* generic color constant ('environment') */ - Color FogColor; /* generic color constant ('fog') */ - Color KeyScale; /* color-keying constant */ - UINT8 LODFraction; /* Z-based LOD fraction for this poly */ - UINT8 PrimLODFraction; /* fixed LOD fraction for this poly */ - - Color OneColor; - Color ZeroColor; - - UINT32 FillColor; - - OtherModesT OtherModes; - - N64BlenderT Blender; - - N64TexturePipeT TexPipe; - - UINT8 HiddenBits[0x800000]; - - UINT8 ReplicatedRGBA[32]; - - UINT16 m_dzpix_normalize[0x10000]; - - Rectangle Scissor; - SpanBaseT SpanBase; - - rectangle visarea; - - void DrawTriangle(bool shade, bool texture, bool zbuffer, bool rect); - void compute_cvg_noflip(extent_t *Spans, INT32* majorx, INT32* minorx, INT32* majorxint, INT32* minorxint, INT32 scanline, INT32 yh, INT32 yl, INT32 base); - void compute_cvg_flip(extent_t *Spans, INT32* majorx, INT32* minorx, INT32* majorxint, INT32* minorxint, INT32 scanline, INT32 yh, INT32 yl, INT32 base); - - void* AuxBuf; - UINT32 AuxBufPtr; - UINT32 AuxBufIndex; - - void* ExtentBuf[2]; - UINT32 ExtentBufPtr[2]; - UINT32 ExtentBufIndex; - - bool rdp_range_check(UINT32 addr); - - N64Tile m_tiles[8]; - - protected: - CombineModesT m_combine; - bool m_pending_mode_block; - bool m_pipe_clean; - - struct CVMASKDERIVATIVE - { - UINT8 cvg; - UINT8 cvbit; - UINT8 xoff; - UINT8 yoff; - }; - CVMASKDERIVATIVE cvarray[(1 << 8)]; - - UINT16 z_com_table[0x40000]; //precalced table of compressed z values, 18b: 512 KB array! - UINT32 z_complete_dec_table[0x4000]; //the same for decompressed z values, 14b - UINT8 compressed_cvmasks[0x10000]; //16bit cvmask -> to byte - UINT32 m_cmd_data[0x1000]; - UINT32 m_temp_rect_data[0x1000]; - - int m_cmd_ptr; - int m_cmd_cur; - - UINT32 m_start; - UINT32 m_end; - UINT32 m_current; - UINT32 m_status; - - UINT8* m_tmem; - - running_machine* m_machine; + memset(m_tiles, 0, 8 * sizeof(n64_tile_t)); + memset(m_cmd_data, 0, sizeof(m_cmd_data)); + } - // YUV factors - INT32 m_k0; - INT32 m_k1; - INT32 m_k2; - INT32 m_k3; - INT32 m_k4; - INT32 m_k5; + void process_command_list(); + UINT32 read_data(UINT32 address); + void disassemble(char* buffer); + + void set_machine(running_machine& machine) { m_machine = &machine; } + + // CPU-visible registers + void set_start(UINT32 val) { m_start = val; } + UINT32 get_start() const { return m_start; } + + void set_end(UINT32 val) { m_end = val; } + UINT32 get_end() const { return m_end; } + + void set_current(UINT32 val) { m_current = val; } + UINT32 get_current() const { return m_current; } + + void set_status(UINT32 val) { m_status = val; } + UINT32 get_status() const { return m_status; } + + // Color Combiner + INT32 color_combiner_equation(INT32 a, INT32 b, INT32 c, INT32 d); + INT32 alpha_combiner_equation(INT32 a, INT32 b, INT32 c, INT32 d); + void set_suba_input_rgb(UINT8** input_r, UINT8** input_g, UINT8** input_b, INT32 code, rdp_span_aux* userdata); + void set_subb_input_rgb(UINT8** input_r, UINT8** input_g, UINT8** input_b, INT32 code, rdp_span_aux* userdata); + void set_mul_input_rgb(UINT8** input_r, UINT8** input_g, UINT8** input_b, INT32 code, rdp_span_aux* userdata); + void set_add_input_rgb(UINT8** input_r, UINT8** input_g, UINT8** input_b, INT32 code, rdp_span_aux* userdata); + void set_sub_input_alpha(UINT8** input, INT32 code, rdp_span_aux* userdata); + void set_mul_input_alpha(UINT8** input, INT32 code, rdp_span_aux* userdata); + + // Texture memory + UINT8* get_tmem8() { return m_tmem; } + UINT16* get_tmem16() { return (UINT16*)m_tmem; } + + // Emulation Accelerators + UINT8 get_random() { return m_misc_state.m_random_seed += 0x13; } + + // YUV Factors + void set_yuv_factors(INT32 k0, INT32 k1, INT32 k2, INT32 k3, INT32 k4, INT32 k5) { m_k0 = k0; m_k1 = k1; m_k2 = k2; m_k3 = k3; m_k4 = k4; m_k5 = k5; } + INT32 get_k0() const { return m_k0; } + INT32 get_k1() const { return m_k1; } + INT32 get_k2() const { return m_k2; } + INT32 get_k3() const { return m_k3; } + INT32* get_k4() { return &m_k4; } + INT32* get_k5() { return &m_k5; } + + // Blender-related (move into RDP::Blender) + void set_blender_input(INT32 cycle, INT32 which, UINT8** input_r, UINT8** input_g, UINT8** input_b, UINT8** input_a, INT32 a, INT32 b, rdp_span_aux* userdata); + + // Span rasterization + void span_draw_1cycle(INT32 scanline, const extent_t &extent, const rdp_poly_state &object, INT32 threadid); + void span_draw_2cycle(INT32 scanline, const extent_t &extent, const rdp_poly_state &object, INT32 threadid); + void span_draw_copy(INT32 scanline, const extent_t &extent, const rdp_poly_state &object, INT32 threadid); + void span_draw_fill(INT32 scanline, const extent_t &extent, const rdp_poly_state &object, INT32 threadid); + + // Render-related (move into eventual drawing-related classes?) + void tc_div(INT32 ss, INT32 st, INT32 sw, INT32* sss, INT32* sst); + void tc_div_no_perspective(INT32 ss, INT32 st, INT32 sw, INT32* sss, INT32* sst); + UINT32 get_log2(UINT32 lod_clamp); + void render_spans(INT32 start, INT32 end, INT32 tilenum, bool flip, extent_t* spans, bool rect, rdp_poly_state* object); + void get_alpha_cvg(UINT8* comb_alpha, rdp_span_aux* userdata, const rdp_poly_state &object); + + void z_store(const rdp_poly_state &object, UINT32 zcurpixel, UINT32 dzcurpixel, UINT32 z, UINT32 enc); + UINT32 z_decompress(UINT32 zcurpixel); + UINT32 dz_decompress(UINT32 zcurpixel, UINT32 dzcurpixel); + UINT32 dz_compress(UINT32 value); + INT32 normalize_dzpix(INT32 sum); + bool z_compare(UINT32 zcurpixel, UINT32 dzcurpixel, UINT32 sz, UINT16 dzpix, rdp_span_aux* userdata, const rdp_poly_state &object); + + // Fullscreen update-related + void video_update(n64_periphs* n64, bitmap_rgb32 &bitmap); + + // Commands + void cmd_invalid(UINT32 w1, UINT32 w2); + void cmd_noop(UINT32 w1, UINT32 w2); + void cmd_triangle(UINT32 w1, UINT32 w2); + void cmd_triangle_z(UINT32 w1, UINT32 w2); + void cmd_triangle_t(UINT32 w1, UINT32 w2); + void cmd_triangle_tz(UINT32 w1, UINT32 w2); + void cmd_triangle_s(UINT32 w1, UINT32 w2); + void cmd_triangle_sz(UINT32 w1, UINT32 w2); + void cmd_triangle_st(UINT32 w1, UINT32 w2); + void cmd_triangle_stz(UINT32 w1, UINT32 w2); + void cmd_tex_rect(UINT32 w1, UINT32 w2); + void cmd_tex_rect_flip(UINT32 w1, UINT32 w2); + void cmd_sync_load(UINT32 w1, UINT32 w2); + void cmd_sync_pipe(UINT32 w1, UINT32 w2); + void cmd_sync_tile(UINT32 w1, UINT32 w2); + void cmd_sync_full(UINT32 w1, UINT32 w2); + void cmd_set_key_gb(UINT32 w1, UINT32 w2); + void cmd_set_key_r(UINT32 w1, UINT32 w2); + void cmd_set_fill_color32(UINT32 w1, UINT32 w2); + void cmd_set_convert(UINT32 w1, UINT32 w2); + void cmd_set_scissor(UINT32 w1, UINT32 w2); + void cmd_set_prim_depth(UINT32 w1, UINT32 w2); + void cmd_set_other_modes(UINT32 w1, UINT32 w2); + void cmd_load_tlut(UINT32 w1, UINT32 w2); + void cmd_set_tile_size(UINT32 w1, UINT32 w2); + void cmd_load_block(UINT32 w1, UINT32 w2); + void cmd_load_tile(UINT32 w1, UINT32 w2); + void cmd_fill_rect(UINT32 w1, UINT32 w2); + void cmd_set_tile(UINT32 w1, UINT32 w2); + void cmd_set_fog_color(UINT32 w1, UINT32 w2); + void cmd_set_blend_color(UINT32 w1, UINT32 w2); + void cmd_set_prim_color(UINT32 w1, UINT32 w2); + void cmd_set_env_color(UINT32 w1, UINT32 w2); + void cmd_set_combine(UINT32 w1, UINT32 w2); + void cmd_set_texture_image(UINT32 w1, UINT32 w2); + void cmd_set_mask_image(UINT32 w1, UINT32 w2); + void cmd_set_color_image(UINT32 w1, UINT32 w2); + + void rgbaz_clip(INT32 sr, INT32 sg, INT32 sb, INT32 sa, INT32* sz, rdp_span_aux* userdata); + void rgbaz_correct_triangle(INT32 offx, INT32 offy, INT32* r, INT32* g, INT32* b, INT32* a, INT32* z, rdp_span_aux* userdata, const rdp_poly_state &object); + + void triangle(bool shade, bool texture, bool zbuffer); + + void get_dither_values(INT32 x, INT32 y, INT32* cdith, INT32* adith, const rdp_poly_state &object); + + UINT16 decompress_cvmask_frombyte(UINT8 x); + void lookup_cvmask_derivatives(UINT32 mask, UINT8* offx, UINT8* offy, rdp_span_aux* userdata); + + misc_state_t m_misc_state; + + // Color constants + color_t m_blend_color; /* constant blend color */ + color_t m_prim_color; /* flat primitive color */ + color_t m_env_color; /* generic color constant ('environment') */ + color_t m_fog_color; /* generic color constant ('fog') */ + color_t m_key_scale; /* color-keying constant */ + UINT8 m_lod_fraction; /* Z-based LOD fraction for this poly */ + UINT8 m_prim_lod_fraction; /* fixed LOD fraction for this poly */ + + color_t m_one; + color_t m_zero; + + UINT32 m_fill_color; + + other_modes_t m_other_modes; + + n64_blender_t m_blender; + + n64_texture_pipe_t m_tex_pipe; + + UINT8 m_hidden_bits[0x800000]; + + UINT8 m_replicated_rgba[32]; + + UINT16 m_dzpix_normalize[0x10000]; + + rectangle_t m_scissor; + span_base_t m_span_base; + + rectangle m_visarea; + + void draw_triangle(bool shade, bool texture, bool zbuffer, bool rect); + void compute_cvg_noflip(extent_t* spans, INT32* majorx, INT32* minorx, INT32* majorxint, INT32* minorxint, INT32 scanline, INT32 yh, INT32 yl, INT32 base); + void compute_cvg_flip(extent_t* spans, INT32* majorx, INT32* minorx, INT32* majorxint, INT32* minorxint, INT32 scanline, INT32 yh, INT32 yl, INT32 base); + + void* m_aux_buf; + UINT32 m_aux_buf_ptr; + UINT32 m_aux_buf_index; + + bool rdp_range_check(UINT32 addr); + + n64_tile_t m_tiles[8]; + +private: + void write_pixel(UINT32 curpixel, INT32 r, INT32 g, INT32 b, rdp_span_aux* userdata, const rdp_poly_state &object); + void read_pixel(UINT32 curpixel, rdp_span_aux* userdata, const rdp_poly_state &object); + void copy_pixel(UINT32 curpixel, INT32 r, INT32 g, INT32 b, INT32 m_current_pix_cvg, const rdp_poly_state &object); + void fill_pixel(UINT32 curpixel, const rdp_poly_state &object); + + void precalc_cvmask_derivatives(void); + void z_build_com_table(void); + + void video_update16(n64_periphs* n64, bitmap_rgb32 &bitmap); + void video_update32(n64_periphs* n64, bitmap_rgb32 &bitmap); + + running_machine* m_machine; + + combine_modes_t m_combine; + bool m_pending_mode_block; + bool m_pipe_clean; - // Texture perspective division - INT32 m_norm_point_rom[64]; - INT32 m_norm_slope_rom[64]; + cv_mask_derivative_t cvarray[(1 << 8)]; - static const UINT8 s_bayer_matrix[16]; - static const UINT8 s_magic_matrix[16]; + UINT16 m_z_com_table[0x40000]; //precalced table of compressed z values, 18b: 512 KB array! + UINT32 m_z_complete_dec_table[0x4000]; //the same for decompressed z values, 14b + UINT8 m_compressed_cvmasks[0x10000]; //16bit cvmask -> to byte - INT32 m_gamma_table[256]; - INT32 m_gamma_dither_table[0x4000]; + UINT32 m_cmd_data[0x1000]; + UINT32 m_temp_rect_data[0x1000]; - static UINT32 s_special_9bit_clamptable[512]; + INT32 m_cmd_ptr; + INT32 m_cmd_cur; - Copier _Copy[2]; - Filler _Fill[2]; + UINT32 m_start; + UINT32 m_end; + UINT32 m_current; + UINT32 m_status; - void write_pixel(UINT32 curpixel, INT32 r, INT32 g, INT32 b, rdp_span_aux *userdata, const rdp_poly_state &object); - void read_pixel(UINT32 curpixel, rdp_span_aux *userdata, const rdp_poly_state &object); - void copy_pixel(UINT32 curpixel, INT32 r, INT32 g, INT32 b, int CurrentPixCvg, const rdp_poly_state &object); - void fill_pixel(UINT32 curpixel, const rdp_poly_state &object); + UINT8* m_tmem; - class ZDecompressEntry - { - public: - UINT32 shift; - UINT32 add; - }; + // YUV factors + INT32 m_k0; + INT32 m_k1; + INT32 m_k2; + INT32 m_k3; + INT32 m_k4; + INT32 m_k5; - void precalc_cvmask_derivatives(void); - void z_build_com_table(void); - static const ZDecompressEntry z_dec_table[8]; + // Texture perspective division + INT32 m_norm_point_rom[64]; + INT32 m_norm_slope_rom[64]; - // Internal screen-update functions - void VideoUpdate16(n64_periphs *n64, bitmap_rgb32 &bitmap); - void VideoUpdate32(n64_periphs *n64, bitmap_rgb32 &bitmap); + INT32 m_gamma_table[256]; + INT32 m_gamma_dither_table[0x4000]; - typedef void (*Command)(UINT32 w1, UINT32 w2); + static UINT32 s_special_9bit_clamptable[512]; + static const z_decompress_entry_t m_z_dec_table[8]; - static const Command m_commands[0x40]; + static const UINT8 s_bayer_matrix[16]; + static const UINT8 s_magic_matrix[16]; + static const rdp_command_t m_commands[0x40]; + static const INT32 s_rdp_command_length[]; + static const char* s_image_format[]; + static const char* s_image_size[]; }; #endif // _VIDEO_N64_H_ diff --git a/src/mame/video/rdpbhelp.h b/src/mame/video/rdpbhelp.h index 277c6535aa6..1725d01398a 100644 --- a/src/mame/video/rdpbhelp.h +++ b/src/mame/video/rdpbhelp.h @@ -11,161 +11,3 @@ ******************************************************************************/ - -#ifndef _VIDEO_RDPBHELP_H_ -#define _VIDEO_RDPBHELP_H_ - -#include "emu.h" -#include "includes/n64.h" -#include "video/n64.h" - -#define DITHER_A(val, dith) \ - if ((val + dith) >= 0x100) \ - { \ - val = 0xff; \ - } \ - else \ - { \ - val += dith; \ - } - -#define DITHER_CHAN(chan, dith) \ - if ((chan & 7) > dith) \ - { \ - chan = (chan & 0xf8) + 8; \ - if (chan > 247) \ - { \ - chan = 255; \ - } \ - } - -#define DITHER_RGB(dith) \ - DITHER_CHAN(r, dith) \ - DITHER_CHAN(g, dith) \ - DITHER_CHAN(b, dith) - -#define ALPHA_COMPARE() \ - if (((this)->*(compare[acmode]))(userdata->PixelColor.i.a, userdata, object)) \ - { \ - return false; \ - } - -#define CVG_COMPARE() \ - if (object.OtherModes.antialias_en ? (!userdata->CurrentPixCvg) : (!userdata->CurrentCvgBit)) \ - { \ - return false; \ - } - -#define TEST_REJECT() \ - ALPHA_COMPARE(); \ - CVG_COMPARE(); - -#define WRITE_OUT_NB_ND(cycle) \ - *fr = *userdata->ColorInputs.blender1a_r[cycle]; \ - *fg = *userdata->ColorInputs.blender1a_g[cycle]; \ - *fb = *userdata->ColorInputs.blender1a_b[cycle]; - -#define WRITE_OUT() \ - *fr = r; \ - *fg = g; \ - *fb = b; - -#define WRITE_BLENDED_COLOR() \ - userdata->BlendedPixelColor.i.r = r; \ - userdata->BlendedPixelColor.i.g = g; \ - userdata->BlendedPixelColor.i.b = b; \ - userdata->BlendedPixelColor.i.a = userdata->PixelColor.i.a; - -#define BLEND_CYCLE0(cyc) \ - userdata->InvPixelColor.i.a = 0xff - *userdata->ColorInputs.blender1b_a[cyc]; \ - ((this)->*(cycle##cyc[sel##cyc]))(&r, &g, &b, userdata, object); -#define BLEND_CYCLE1(cyc) \ - if (partialreject && userdata->PixelColor.i.a >= 0xff) \ - { \ - ASSIGN_OUT(cyc); \ - } \ - else \ - { \ - userdata->InvPixelColor.i.a = 0xff - *userdata->ColorInputs.blender1b_a[cyc]; \ - ((this)->*(cycle##cyc[sel##cyc]))(&r, &g, &b, userdata, object); \ - } - -#define BLEND_CYCLE(cyc, check_reject) \ - BLEND_CYCLE##check_reject(cyc) - -#define BLEND_FACTORS0(cycle) \ - UINT8 blend1a = *userdata->ColorInputs.blender1b_a[cycle] >> 3; \ - UINT8 blend2a = *userdata->ColorInputs.blender2b_a[cycle] >> 3; - -#define BLEND_FACTORS1(cycle) \ - UINT8 blend1a = (*userdata->ColorInputs.blender1b_a[cycle] >> (3 + userdata->ShiftA)) & 0x1c; \ - UINT8 blend2a = (*userdata->ColorInputs.blender2b_a[cycle] >> (3 + userdata->ShiftB)) & 0x1c; - -#define BLEND_SUM0() ; - -#define BLEND_SUM1() \ - UINT32 sum = ((blend1a >> 2) + (blend2a >> 2) + 1) & 0xf; - -#define BLEND_FACTORS(cycle, special, sum) \ - BLEND_FACTORS##special(cycle); \ - BLEND_SUM##sum(); - -#define BLEND_MUL(cycle) \ - *r = (((int)(*userdata->ColorInputs.blender1a_r[cycle]) * (int)(blend1a))) + \ - (((int)(*userdata->ColorInputs.blender2a_r[cycle]) * (int)(blend2a))); \ - *g = (((int)(*userdata->ColorInputs.blender1a_g[cycle]) * (int)(blend1a))) + \ - (((int)(*userdata->ColorInputs.blender2a_g[cycle]) * (int)(blend2a))); \ - *b = (((int)(*userdata->ColorInputs.blender1a_b[cycle]) * (int)(blend1a))) + \ - (((int)(*userdata->ColorInputs.blender2a_b[cycle]) * (int)(blend2a))); - -#define BLEND_ADD1(cycle) \ - *r += (((int)*userdata->ColorInputs.blender2a_r[cycle]) << 2); \ - *g += (((int)*userdata->ColorInputs.blender2a_g[cycle]) << 2); \ - *b += (((int)*userdata->ColorInputs.blender2a_b[cycle]) << 2); - -#define BLEND_ADD0(cycle) \ - *r += (int)*userdata->ColorInputs.blender2a_r[cycle]; \ - *g += (int)*userdata->ColorInputs.blender2a_g[cycle]; \ - *b += (int)*userdata->ColorInputs.blender2a_b[cycle]; - -#define BLEND_ADD(cycle, special) \ - BLEND_ADD##special(cycle); - -#define BLEND_SHIFT(shift) \ - *r >>= shift; \ - *g >>= shift; \ - *b >>= shift; - -#define BLEND_CLAMP() \ - if (*r > 255) *r = 255; \ - if (*g > 255) *g = 255; \ - if (*b > 255) *b = 255; - -#define BLEND_SCALE() \ - if (sum) \ - { \ - *r /= sum; \ - *g /= sum; \ - *b /= sum; \ - } \ - else \ - { \ - *r = *g = *b = 0xff; \ - } - -#define BLEND_SCALE_CLAMP0() \ - BLEND_CLAMP(); - -#define BLEND_SCALE_CLAMP1() \ - BLEND_SCALE(); \ - BLEND_CLAMP(); - -#define BLEND_SCALE_CLAMP(sum) \ - BLEND_SCALE_CLAMP##sum(); - -#define ASSIGN_OUT(cycle) \ - r = *userdata->ColorInputs.blender1a_r[cycle]; \ - g = *userdata->ColorInputs.blender1a_g[cycle]; \ - b = *userdata->ColorInputs.blender1a_b[cycle]; - -#endif // _VIDEO_RDPBHELP_H_ diff --git a/src/mame/video/rdpblend.c b/src/mame/video/rdpblend.c index 326eee2dd41..98030ee11fb 100644 --- a/src/mame/video/rdpblend.c +++ b/src/mame/video/rdpblend.c @@ -18,25 +18,25 @@ #include "video/n64.h" #include "video/rdpbhelp.h" -N64BlenderT::N64BlenderT() +n64_blender_t::n64_blender_t() { - blend1[0] = &N64BlenderT::Blend1CycleNoBlendNoACVGNoDither; - blend1[1] = &N64BlenderT::Blend1CycleNoBlendNoACVGDither; - blend1[2] = &N64BlenderT::Blend1CycleNoBlendACVGNoDither; - blend1[3] = &N64BlenderT::Blend1CycleNoBlendACVGDither; - blend1[4] = &N64BlenderT::Blend1CycleBlendNoACVGNoDither; - blend1[5] = &N64BlenderT::Blend1CycleBlendNoACVGDither; - blend1[6] = &N64BlenderT::Blend1CycleBlendACVGNoDither; - blend1[7] = &N64BlenderT::Blend1CycleBlendACVGDither; - - blend2[0] = &N64BlenderT::Blend2CycleNoBlendNoACVGNoDither; - blend2[1] = &N64BlenderT::Blend2CycleNoBlendNoACVGDither; - blend2[2] = &N64BlenderT::Blend2CycleNoBlendACVGNoDither; - blend2[3] = &N64BlenderT::Blend2CycleNoBlendACVGDither; - blend2[4] = &N64BlenderT::Blend2CycleBlendNoACVGNoDither; - blend2[5] = &N64BlenderT::Blend2CycleBlendNoACVGDither; - blend2[6] = &N64BlenderT::Blend2CycleBlendACVGNoDither; - blend2[7] = &N64BlenderT::Blend2CycleBlendACVGDither; + blend1[0] = &n64_blender_t::cycle1_noblend_noacvg_nodither; + blend1[1] = &n64_blender_t::cycle1_noblend_noacvg_dither; + blend1[2] = &n64_blender_t::cycle1_noblend_acvg_nodither; + blend1[3] = &n64_blender_t::cycle1_noblend_acvg_dither; + blend1[4] = &n64_blender_t::cycle1_blend_noacvg_nodither; + blend1[5] = &n64_blender_t::cycle1_blend_noacvg_dither; + blend1[6] = &n64_blender_t::cycle1_blend_acvg_nodither; + blend1[7] = &n64_blender_t::cycle1_blend_acvg_dither; + + blend2[0] = &n64_blender_t::cycle2_noblend_noacvg_nodither; + blend2[1] = &n64_blender_t::cycle2_noblend_noacvg_dither; + blend2[2] = &n64_blender_t::cycle2_noblend_acvg_nodither; + blend2[3] = &n64_blender_t::cycle2_noblend_acvg_dither; + blend2[4] = &n64_blender_t::cycle2_blend_noacvg_nodither; + blend2[5] = &n64_blender_t::cycle2_blend_noacvg_dither; + blend2[6] = &n64_blender_t::cycle2_blend_acvg_nodither; + blend2[7] = &n64_blender_t::cycle2_blend_acvg_dither; for (int value = 0; value < 256; value++) { @@ -48,12 +48,12 @@ N64BlenderT::N64BlenderT() } } -INT32 N64BlenderT::dither_alpha(INT32 alpha, INT32 dither) +INT32 n64_blender_t::dither_alpha(INT32 alpha, INT32 dither) { return min(alpha + dither, 0xff); } -INT32 N64BlenderT::dither_color(INT32 color, INT32 dither) +INT32 n64_blender_t::dither_color(INT32 color, INT32 dither) { if ((color & 7) > dither) { @@ -66,104 +66,104 @@ INT32 N64BlenderT::dither_color(INT32 color, INT32 dither) return color; } -bool N64BlenderT::test_for_reject(rdp_span_aux *userdata, const rdp_poly_state& object) +bool n64_blender_t::test_for_reject(rdp_span_aux* userdata, const rdp_poly_state& object) { if (alpha_reject(userdata, object)) { return true; } - if (object.OtherModes.antialias_en ? !userdata->CurrentPixCvg : !userdata->CurrentCvgBit) + if (object.m_other_modes.antialias_en ? !userdata->m_current_pix_cvg : !userdata->m_current_cvg_bit) { return true; } return false; } -bool N64BlenderT::alpha_reject(rdp_span_aux *userdata, const rdp_poly_state& object) +bool n64_blender_t::alpha_reject(rdp_span_aux* userdata, const rdp_poly_state& object) { - switch (object.OtherModes.alpha_dither_mode) + switch (object.m_other_modes.alpha_dither_mode) { case 0: case 1: return false; case 2: - return userdata->PixelColor.i.a < userdata->BlendColor.i.a; + return userdata->m_pixel_color.i.a < userdata->m_blend_color.i.a; case 3: - return userdata->PixelColor.i.a < (rand() & 0xff); + return userdata->m_pixel_color.i.a < (rand() & 0xff); default: return false; } } -bool N64BlenderT::Blend1CycleNoBlendNoACVGNoDither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, rdp_span_aux *userdata, const rdp_poly_state& object) +bool n64_blender_t::cycle1_noblend_noacvg_nodither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, rdp_span_aux* userdata, const rdp_poly_state& object) { - userdata->PixelColor.i.a = m_alpha_dither[(userdata->PixelColor.i.a << 3) | adseed]; - userdata->ShadeColor.i.a = m_alpha_dither[(userdata->ShadeColor.i.a << 3) | adseed]; + userdata->m_pixel_color.i.a = m_alpha_dither[(userdata->m_pixel_color.i.a << 3) | adseed]; + userdata->m_shade_color.i.a = m_alpha_dither[(userdata->m_shade_color.i.a << 3) | adseed]; if (test_for_reject(userdata, object)) { return false; } - *fr = *userdata->ColorInputs.blender1a_r[0]; - *fg = *userdata->ColorInputs.blender1a_g[0]; - *fb = *userdata->ColorInputs.blender1a_b[0]; + *fr = *userdata->m_color_inputs.blender1a_r[0]; + *fg = *userdata->m_color_inputs.blender1a_g[0]; + *fb = *userdata->m_color_inputs.blender1a_b[0]; return true; } -bool N64BlenderT::Blend1CycleNoBlendNoACVGDither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, rdp_span_aux *userdata, const rdp_poly_state& object) +bool n64_blender_t::cycle1_noblend_noacvg_dither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, rdp_span_aux* userdata, const rdp_poly_state& object) { - userdata->PixelColor.i.a = m_alpha_dither[(userdata->PixelColor.i.a << 3) | adseed]; - userdata->ShadeColor.i.a = m_alpha_dither[(userdata->ShadeColor.i.a << 3) | adseed]; + userdata->m_pixel_color.i.a = m_alpha_dither[(userdata->m_pixel_color.i.a << 3) | adseed]; + userdata->m_shade_color.i.a = m_alpha_dither[(userdata->m_shade_color.i.a << 3) | adseed]; if (test_for_reject(userdata, object)) { return false; } - *fr = m_color_dither[((*userdata->ColorInputs.blender1a_r[0] & 0xff) << 3) | dith]; - *fg = m_color_dither[((*userdata->ColorInputs.blender1a_g[0] & 0xff) << 3) | dith]; - *fb = m_color_dither[((*userdata->ColorInputs.blender1a_b[0] & 0xff) << 3) | dith]; + *fr = m_color_dither[((*userdata->m_color_inputs.blender1a_r[0] & 0xff) << 3) | dith]; + *fg = m_color_dither[((*userdata->m_color_inputs.blender1a_g[0] & 0xff) << 3) | dith]; + *fb = m_color_dither[((*userdata->m_color_inputs.blender1a_b[0] & 0xff) << 3) | dith]; return true; } -bool N64BlenderT::Blend1CycleNoBlendACVGNoDither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, rdp_span_aux *userdata, const rdp_poly_state& object) +bool n64_blender_t::cycle1_noblend_acvg_nodither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, rdp_span_aux* userdata, const rdp_poly_state& object) { - userdata->ShadeColor.i.a = m_alpha_dither[(userdata->ShadeColor.i.a << 3) | adseed]; + userdata->m_shade_color.i.a = m_alpha_dither[(userdata->m_shade_color.i.a << 3) | adseed]; if (test_for_reject(userdata, object)) { return false; } - *fr = *userdata->ColorInputs.blender1a_r[0]; - *fg = *userdata->ColorInputs.blender1a_g[0]; - *fb = *userdata->ColorInputs.blender1a_b[0]; + *fr = *userdata->m_color_inputs.blender1a_r[0]; + *fg = *userdata->m_color_inputs.blender1a_g[0]; + *fb = *userdata->m_color_inputs.blender1a_b[0]; return true; } -bool N64BlenderT::Blend1CycleNoBlendACVGDither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, rdp_span_aux *userdata, const rdp_poly_state& object) +bool n64_blender_t::cycle1_noblend_acvg_dither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, rdp_span_aux* userdata, const rdp_poly_state& object) { - userdata->ShadeColor.i.a = m_alpha_dither[(userdata->ShadeColor.i.a << 3) | adseed]; + userdata->m_shade_color.i.a = m_alpha_dither[(userdata->m_shade_color.i.a << 3) | adseed]; if (test_for_reject(userdata, object)) { return false; } - *fr = m_color_dither[((*userdata->ColorInputs.blender1a_r[0] & 0xff) << 3) | dith]; - *fg = m_color_dither[((*userdata->ColorInputs.blender1a_g[0] & 0xff) << 3) | dith]; - *fb = m_color_dither[((*userdata->ColorInputs.blender1a_b[0] & 0xff) << 3) | dith]; + *fr = m_color_dither[((*userdata->m_color_inputs.blender1a_r[0] & 0xff) << 3) | dith]; + *fg = m_color_dither[((*userdata->m_color_inputs.blender1a_g[0] & 0xff) << 3) | dith]; + *fb = m_color_dither[((*userdata->m_color_inputs.blender1a_b[0] & 0xff) << 3) | dith]; return true; } -bool N64BlenderT::Blend1CycleBlendNoACVGNoDither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, rdp_span_aux *userdata, const rdp_poly_state& object) +bool n64_blender_t::cycle1_blend_noacvg_nodither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, rdp_span_aux* userdata, const rdp_poly_state& object) { INT32 r, g, b; - userdata->PixelColor.i.a = m_alpha_dither[(userdata->PixelColor.i.a << 3) | adseed]; - userdata->ShadeColor.i.a = m_alpha_dither[(userdata->ShadeColor.i.a << 3) | adseed]; + userdata->m_pixel_color.i.a = m_alpha_dither[(userdata->m_pixel_color.i.a << 3) | adseed]; + userdata->m_shade_color.i.a = m_alpha_dither[(userdata->m_shade_color.i.a << 3) | adseed]; if (test_for_reject(userdata, object)) { @@ -179,12 +179,12 @@ bool N64BlenderT::Blend1CycleBlendNoACVGNoDither(INT32* fr, INT32* fg, INT32* fb return true; } -bool N64BlenderT::Blend1CycleBlendNoACVGDither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, rdp_span_aux *userdata, const rdp_poly_state& object) +bool n64_blender_t::cycle1_blend_noacvg_dither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, rdp_span_aux* userdata, const rdp_poly_state& object) { INT32 r, g, b; - userdata->PixelColor.i.a = m_alpha_dither[(userdata->PixelColor.i.a << 3) | adseed]; - userdata->ShadeColor.i.a = m_alpha_dither[(userdata->ShadeColor.i.a << 3) | adseed]; + userdata->m_pixel_color.i.a = m_alpha_dither[(userdata->m_pixel_color.i.a << 3) | adseed]; + userdata->m_shade_color.i.a = m_alpha_dither[(userdata->m_shade_color.i.a << 3) | adseed]; if (test_for_reject(userdata, object)) { @@ -200,11 +200,11 @@ bool N64BlenderT::Blend1CycleBlendNoACVGDither(INT32* fr, INT32* fg, INT32* fb, return true; } -bool N64BlenderT::Blend1CycleBlendACVGNoDither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, rdp_span_aux *userdata, const rdp_poly_state& object) +bool n64_blender_t::cycle1_blend_acvg_nodither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, rdp_span_aux* userdata, const rdp_poly_state& object) { INT32 r, g, b; - userdata->ShadeColor.i.a = m_alpha_dither[(userdata->ShadeColor.i.a << 3) | adseed]; + userdata->m_shade_color.i.a = m_alpha_dither[(userdata->m_shade_color.i.a << 3) | adseed]; if (test_for_reject(userdata, object)) { @@ -220,11 +220,11 @@ bool N64BlenderT::Blend1CycleBlendACVGNoDither(INT32* fr, INT32* fg, INT32* fb, return true; } -bool N64BlenderT::Blend1CycleBlendACVGDither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, rdp_span_aux *userdata, const rdp_poly_state& object) +bool n64_blender_t::cycle1_blend_acvg_dither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, rdp_span_aux* userdata, const rdp_poly_state& object) { INT32 r, g, b; - userdata->ShadeColor.i.a = m_alpha_dither[(userdata->ShadeColor.i.a << 3) | adseed]; + userdata->m_shade_color.i.a = m_alpha_dither[(userdata->m_shade_color.i.a << 3) | adseed]; if (test_for_reject(userdata, object)) { @@ -240,127 +240,127 @@ bool N64BlenderT::Blend1CycleBlendACVGDither(INT32* fr, INT32* fg, INT32* fb, in return true; } -bool N64BlenderT::Blend2CycleNoBlendNoACVGNoDither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux *userdata, const rdp_poly_state& object) +bool n64_blender_t::cycle2_noblend_noacvg_nodither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux* userdata, const rdp_poly_state& object) { INT32 r, g, b; - userdata->PixelColor.i.a = m_alpha_dither[(userdata->PixelColor.i.a << 3) | adseed]; - userdata->ShadeColor.i.a = m_alpha_dither[(userdata->ShadeColor.i.a << 3) | adseed]; + userdata->m_pixel_color.i.a = m_alpha_dither[(userdata->m_pixel_color.i.a << 3) | adseed]; + userdata->m_shade_color.i.a = m_alpha_dither[(userdata->m_shade_color.i.a << 3) | adseed]; if (test_for_reject(userdata, object)) { return false; } - userdata->InvPixelColor.i.a = 0xff - *userdata->ColorInputs.blender1b_a[0]; + userdata->m_inv_pixel_color.i.a = 0xff - *userdata->m_color_inputs.blender1b_a[0]; blend_pipe(0, sel0, &r, &g, &b, userdata, object); - userdata->BlendedPixelColor.i.r = r; - userdata->BlendedPixelColor.i.g = g; - userdata->BlendedPixelColor.i.b = b; - userdata->BlendedPixelColor.i.a = userdata->PixelColor.i.a; - *fr = *userdata->ColorInputs.blender1a_r[1]; - *fg = *userdata->ColorInputs.blender1a_g[1]; - *fb = *userdata->ColorInputs.blender1a_b[1]; + userdata->m_blended_pixel_color.i.r = r; + userdata->m_blended_pixel_color.i.g = g; + userdata->m_blended_pixel_color.i.b = b; + userdata->m_blended_pixel_color.i.a = userdata->m_pixel_color.i.a; + *fr = *userdata->m_color_inputs.blender1a_r[1]; + *fg = *userdata->m_color_inputs.blender1a_g[1]; + *fb = *userdata->m_color_inputs.blender1a_b[1]; return true; } -bool N64BlenderT::Blend2CycleNoBlendNoACVGDither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux *userdata, const rdp_poly_state& object) +bool n64_blender_t::cycle2_noblend_noacvg_dither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux* userdata, const rdp_poly_state& object) { INT32 r, g, b; - userdata->PixelColor.i.a = m_alpha_dither[(userdata->PixelColor.i.a << 3) | adseed]; - userdata->ShadeColor.i.a = m_alpha_dither[(userdata->ShadeColor.i.a << 3) | adseed]; + userdata->m_pixel_color.i.a = m_alpha_dither[(userdata->m_pixel_color.i.a << 3) | adseed]; + userdata->m_shade_color.i.a = m_alpha_dither[(userdata->m_shade_color.i.a << 3) | adseed]; if (test_for_reject(userdata, object)) { return false; } - userdata->InvPixelColor.i.a = 0xff - *userdata->ColorInputs.blender1b_a[0]; + userdata->m_inv_pixel_color.i.a = 0xff - *userdata->m_color_inputs.blender1b_a[0]; blend_pipe(0, sel0, &r, &g, &b, userdata, object); - userdata->BlendedPixelColor.i.r = r; - userdata->BlendedPixelColor.i.g = g; - userdata->BlendedPixelColor.i.b = b; - userdata->BlendedPixelColor.i.a = userdata->PixelColor.i.a; - *fr = m_color_dither[((*userdata->ColorInputs.blender1a_r[1] & 0xff) << 3) | dith]; - *fg = m_color_dither[((*userdata->ColorInputs.blender1a_g[1] & 0xff) << 3) | dith]; - *fb = m_color_dither[((*userdata->ColorInputs.blender1a_b[1] & 0xff) << 3) | dith]; + userdata->m_blended_pixel_color.i.r = r; + userdata->m_blended_pixel_color.i.g = g; + userdata->m_blended_pixel_color.i.b = b; + userdata->m_blended_pixel_color.i.a = userdata->m_pixel_color.i.a; + *fr = m_color_dither[((*userdata->m_color_inputs.blender1a_r[1] & 0xff) << 3) | dith]; + *fg = m_color_dither[((*userdata->m_color_inputs.blender1a_g[1] & 0xff) << 3) | dith]; + *fb = m_color_dither[((*userdata->m_color_inputs.blender1a_b[1] & 0xff) << 3) | dith]; return true; } -bool N64BlenderT::Blend2CycleNoBlendACVGNoDither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux *userdata, const rdp_poly_state& object) +bool n64_blender_t::cycle2_noblend_acvg_nodither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux* userdata, const rdp_poly_state& object) { INT32 r, g, b; - userdata->ShadeColor.i.a = m_alpha_dither[(userdata->ShadeColor.i.a << 3) | adseed]; + userdata->m_shade_color.i.a = m_alpha_dither[(userdata->m_shade_color.i.a << 3) | adseed]; if (test_for_reject(userdata, object)) { return false; } - userdata->InvPixelColor.i.a = 0xff - *userdata->ColorInputs.blender1b_a[0]; + userdata->m_inv_pixel_color.i.a = 0xff - *userdata->m_color_inputs.blender1b_a[0]; blend_pipe(0, sel0, &r, &g, &b, userdata, object); - userdata->BlendedPixelColor.i.r = r; - userdata->BlendedPixelColor.i.g = g; - userdata->BlendedPixelColor.i.b = b; - userdata->BlendedPixelColor.i.a = userdata->PixelColor.i.a; - *fr = *userdata->ColorInputs.blender1a_r[1]; - *fg = *userdata->ColorInputs.blender1a_g[1]; - *fb = *userdata->ColorInputs.blender1a_b[1]; + userdata->m_blended_pixel_color.i.r = r; + userdata->m_blended_pixel_color.i.g = g; + userdata->m_blended_pixel_color.i.b = b; + userdata->m_blended_pixel_color.i.a = userdata->m_pixel_color.i.a; + *fr = *userdata->m_color_inputs.blender1a_r[1]; + *fg = *userdata->m_color_inputs.blender1a_g[1]; + *fb = *userdata->m_color_inputs.blender1a_b[1]; return true; } -bool N64BlenderT::Blend2CycleNoBlendACVGDither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux *userdata, const rdp_poly_state& object) +bool n64_blender_t::cycle2_noblend_acvg_dither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux* userdata, const rdp_poly_state& object) { INT32 r, g, b; - userdata->ShadeColor.i.a = m_alpha_dither[(userdata->ShadeColor.i.a << 3) | adseed]; + userdata->m_shade_color.i.a = m_alpha_dither[(userdata->m_shade_color.i.a << 3) | adseed]; if (test_for_reject(userdata, object)) { return false; } - userdata->InvPixelColor.i.a = 0xff - *userdata->ColorInputs.blender1b_a[0]; + userdata->m_inv_pixel_color.i.a = 0xff - *userdata->m_color_inputs.blender1b_a[0]; blend_pipe(0, sel0, &r, &g, &b, userdata, object); - userdata->BlendedPixelColor.i.r = r; - userdata->BlendedPixelColor.i.g = g; - userdata->BlendedPixelColor.i.b = b; - userdata->BlendedPixelColor.i.a = userdata->PixelColor.i.a; - *fr = m_color_dither[((*userdata->ColorInputs.blender1a_r[1] & 0xff) << 3) | dith]; - *fg = m_color_dither[((*userdata->ColorInputs.blender1a_g[1] & 0xff) << 3) | dith]; - *fb = m_color_dither[((*userdata->ColorInputs.blender1a_b[1] & 0xff) << 3) | dith]; + userdata->m_blended_pixel_color.i.r = r; + userdata->m_blended_pixel_color.i.g = g; + userdata->m_blended_pixel_color.i.b = b; + userdata->m_blended_pixel_color.i.a = userdata->m_pixel_color.i.a; + *fr = m_color_dither[((*userdata->m_color_inputs.blender1a_r[1] & 0xff) << 3) | dith]; + *fg = m_color_dither[((*userdata->m_color_inputs.blender1a_g[1] & 0xff) << 3) | dith]; + *fb = m_color_dither[((*userdata->m_color_inputs.blender1a_b[1] & 0xff) << 3) | dith]; return true; } -bool N64BlenderT::Blend2CycleBlendNoACVGNoDither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux *userdata, const rdp_poly_state& object) +bool n64_blender_t::cycle2_blend_noacvg_nodither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux* userdata, const rdp_poly_state& object) { INT32 r, g, b; - userdata->PixelColor.i.a = m_alpha_dither[(userdata->PixelColor.i.a << 3) | adseed]; - userdata->ShadeColor.i.a = m_alpha_dither[(userdata->ShadeColor.i.a << 3) | adseed]; + userdata->m_pixel_color.i.a = m_alpha_dither[(userdata->m_pixel_color.i.a << 3) | adseed]; + userdata->m_shade_color.i.a = m_alpha_dither[(userdata->m_shade_color.i.a << 3) | adseed]; if (test_for_reject(userdata, object)) { return false; } - userdata->InvPixelColor.i.a = 0xff - *userdata->ColorInputs.blender1b_a[0]; + userdata->m_inv_pixel_color.i.a = 0xff - *userdata->m_color_inputs.blender1b_a[0]; blend_pipe(0, sel0, &r, &g, &b, userdata, object); - userdata->BlendedPixelColor.i.r = r; - userdata->BlendedPixelColor.i.g = g; - userdata->BlendedPixelColor.i.b = b; - userdata->BlendedPixelColor.i.a = userdata->PixelColor.i.a; + userdata->m_blended_pixel_color.i.r = r; + userdata->m_blended_pixel_color.i.g = g; + userdata->m_blended_pixel_color.i.b = b; + userdata->m_blended_pixel_color.i.a = userdata->m_pixel_color.i.a; blend_with_partial_reject(&r, &g, &b, 1, partialreject, sel1, userdata, object); @@ -371,25 +371,25 @@ bool N64BlenderT::Blend2CycleBlendNoACVGNoDither(INT32* fr, INT32* fg, INT32* fb return true; } -bool N64BlenderT::Blend2CycleBlendNoACVGDither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux *userdata, const rdp_poly_state& object) +bool n64_blender_t::cycle2_blend_noacvg_dither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux* userdata, const rdp_poly_state& object) { INT32 r, g, b; - userdata->PixelColor.i.a = m_alpha_dither[(userdata->PixelColor.i.a << 3) | adseed]; - userdata->ShadeColor.i.a = m_alpha_dither[(userdata->ShadeColor.i.a << 3) | adseed]; + userdata->m_pixel_color.i.a = m_alpha_dither[(userdata->m_pixel_color.i.a << 3) | adseed]; + userdata->m_shade_color.i.a = m_alpha_dither[(userdata->m_shade_color.i.a << 3) | adseed]; if (test_for_reject(userdata, object)) { return false; } - userdata->InvPixelColor.i.a = 0xff - *userdata->ColorInputs.blender1b_a[0]; + userdata->m_inv_pixel_color.i.a = 0xff - *userdata->m_color_inputs.blender1b_a[0]; blend_pipe(0, sel0, &r, &g, &b, userdata, object); - userdata->BlendedPixelColor.i.r = r; - userdata->BlendedPixelColor.i.g = g; - userdata->BlendedPixelColor.i.b = b; - userdata->BlendedPixelColor.i.a = userdata->PixelColor.i.a; + userdata->m_blended_pixel_color.i.r = r; + userdata->m_blended_pixel_color.i.g = g; + userdata->m_blended_pixel_color.i.b = b; + userdata->m_blended_pixel_color.i.a = userdata->m_pixel_color.i.a; blend_with_partial_reject(&r, &g, &b, 1, partialreject, sel1, userdata, object); @@ -400,24 +400,24 @@ bool N64BlenderT::Blend2CycleBlendNoACVGDither(INT32* fr, INT32* fg, INT32* fb, return true; } -bool N64BlenderT::Blend2CycleBlendACVGNoDither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux *userdata, const rdp_poly_state& object) +bool n64_blender_t::cycle2_blend_acvg_nodither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux* userdata, const rdp_poly_state& object) { INT32 r, g, b; - userdata->ShadeColor.i.a = m_alpha_dither[(userdata->ShadeColor.i.a << 3) | adseed]; + userdata->m_shade_color.i.a = m_alpha_dither[(userdata->m_shade_color.i.a << 3) | adseed]; if (test_for_reject(userdata, object)) { return false; } - userdata->InvPixelColor.i.a = 0xff - *userdata->ColorInputs.blender1b_a[0]; + userdata->m_inv_pixel_color.i.a = 0xff - *userdata->m_color_inputs.blender1b_a[0]; blend_pipe(0, sel0, &r, &g, &b, userdata, object); - userdata->BlendedPixelColor.i.r = r; - userdata->BlendedPixelColor.i.g = g; - userdata->BlendedPixelColor.i.b = b; - userdata->BlendedPixelColor.i.a = userdata->PixelColor.i.a; + userdata->m_blended_pixel_color.i.r = r; + userdata->m_blended_pixel_color.i.g = g; + userdata->m_blended_pixel_color.i.b = b; + userdata->m_blended_pixel_color.i.a = userdata->m_pixel_color.i.a; blend_with_partial_reject(&r, &g, &b, 1, partialreject, sel1, userdata, object); @@ -428,24 +428,24 @@ bool N64BlenderT::Blend2CycleBlendACVGNoDither(INT32* fr, INT32* fg, INT32* fb, return true; } -bool N64BlenderT::Blend2CycleBlendACVGDither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux *userdata, const rdp_poly_state& object) +bool n64_blender_t::cycle2_blend_acvg_dither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux* userdata, const rdp_poly_state& object) { INT32 r, g, b; - userdata->ShadeColor.i.a = m_alpha_dither[(userdata->ShadeColor.i.a << 3) | adseed]; + userdata->m_shade_color.i.a = m_alpha_dither[(userdata->m_shade_color.i.a << 3) | adseed]; if (test_for_reject(userdata, object)) { return false; } - userdata->InvPixelColor.i.a = 0xff - *userdata->ColorInputs.blender1b_a[0]; + userdata->m_inv_pixel_color.i.a = 0xff - *userdata->m_color_inputs.blender1b_a[0]; blend_pipe(0, sel0, &r, &g, &b, userdata, object); - userdata->BlendedPixelColor.i.r = r; - userdata->BlendedPixelColor.i.g = g; - userdata->BlendedPixelColor.i.b = b; - userdata->BlendedPixelColor.i.a = userdata->PixelColor.i.a; + userdata->m_blended_pixel_color.i.r = r; + userdata->m_blended_pixel_color.i.g = g; + userdata->m_blended_pixel_color.i.b = b; + userdata->m_blended_pixel_color.i.a = userdata->m_pixel_color.i.a; blend_with_partial_reject(&r, &g, &b, 1, partialreject, sel1, userdata, object); @@ -456,43 +456,43 @@ bool N64BlenderT::Blend2CycleBlendACVGDither(INT32* fr, INT32* fg, INT32* fb, in return true; } -void N64BlenderT::blend_with_partial_reject(INT32* r, INT32* g, INT32* b, INT32 cycle, INT32 partialreject, INT32 select, rdp_span_aux *userdata, const rdp_poly_state& object) +void n64_blender_t::blend_with_partial_reject(INT32* r, INT32* g, INT32* b, INT32 cycle, INT32 partialreject, INT32 select, rdp_span_aux* userdata, const rdp_poly_state& object) { - if (partialreject && userdata->PixelColor.i.a >= 0xff) + if (partialreject && userdata->m_pixel_color.i.a >= 0xff) { - *r = *userdata->ColorInputs.blender1a_r[cycle]; - *g = *userdata->ColorInputs.blender1a_g[cycle]; - *b = *userdata->ColorInputs.blender1a_b[cycle]; + *r = *userdata->m_color_inputs.blender1a_r[cycle]; + *g = *userdata->m_color_inputs.blender1a_g[cycle]; + *b = *userdata->m_color_inputs.blender1a_b[cycle]; } else { - userdata->InvPixelColor.i.a = 0xff - *userdata->ColorInputs.blender1b_a[cycle]; + userdata->m_inv_pixel_color.i.a = 0xff - *userdata->m_color_inputs.blender1b_a[cycle]; blend_pipe(cycle, select, r, g, b, userdata, object); } } -void N64BlenderT::blend_pipe(const int cycle, const int special, int* r_out, int* g_out, int* b_out, rdp_span_aux *userdata, const rdp_poly_state& object) +void n64_blender_t::blend_pipe(const int cycle, const int special, int* r_out, int* g_out, int* b_out, rdp_span_aux* userdata, const rdp_poly_state& object) { const INT32 mask = 0xff &~ (0x73 * special); - const INT32 shift_a = 3 + userdata->ShiftA * special; - const INT32 shift_b = 3 + userdata->ShiftB * special; - const INT32 blend1a = (*userdata->ColorInputs.blender1b_a[cycle] >> shift_a) & mask; - const INT32 blend2a = (*userdata->ColorInputs.blender2b_a[cycle] >> shift_b) & mask; + const INT32 shift_a = 3 + userdata->m_shift_a * special; + const INT32 shift_b = 3 + userdata->m_shift_b * special; + const INT32 blend1a = (*userdata->m_color_inputs.blender1b_a[cycle] >> shift_a) & mask; + const INT32 blend2a = (*userdata->m_color_inputs.blender2b_a[cycle] >> shift_b) & mask; const INT32 special_shift = special << 1; - INT32 r = (((int)(*userdata->ColorInputs.blender1a_r[cycle]) * (int)(blend1a))) + (((int)(*userdata->ColorInputs.blender2a_r[cycle]) * (int)(blend2a))); - INT32 g = (((int)(*userdata->ColorInputs.blender1a_g[cycle]) * (int)(blend1a))) + (((int)(*userdata->ColorInputs.blender2a_g[cycle]) * (int)(blend2a))); - INT32 b = (((int)(*userdata->ColorInputs.blender1a_b[cycle]) * (int)(blend1a))) + (((int)(*userdata->ColorInputs.blender2a_b[cycle]) * (int)(blend2a))); + INT32 r = (((int)(*userdata->m_color_inputs.blender1a_r[cycle]) * (int)(blend1a))) + (((int)(*userdata->m_color_inputs.blender2a_r[cycle]) * (int)(blend2a))); + INT32 g = (((int)(*userdata->m_color_inputs.blender1a_g[cycle]) * (int)(blend1a))) + (((int)(*userdata->m_color_inputs.blender2a_g[cycle]) * (int)(blend2a))); + INT32 b = (((int)(*userdata->m_color_inputs.blender1a_b[cycle]) * (int)(blend1a))) + (((int)(*userdata->m_color_inputs.blender2a_b[cycle]) * (int)(blend2a))); - r += ((int)*userdata->ColorInputs.blender2a_r[cycle]) << special_shift; - g += ((int)*userdata->ColorInputs.blender2a_g[cycle]) << special_shift; - b += ((int)*userdata->ColorInputs.blender2a_b[cycle]) << special_shift; + r += ((int)*userdata->m_color_inputs.blender2a_r[cycle]) << special_shift; + g += ((int)*userdata->m_color_inputs.blender2a_g[cycle]) << special_shift; + b += ((int)*userdata->m_color_inputs.blender2a_b[cycle]) << special_shift; - r >>= object.OtherModes.blend_shift; - g >>= object.OtherModes.blend_shift; - b >>= object.OtherModes.blend_shift; + r >>= object.m_other_modes.blend_shift; + g >>= object.m_other_modes.blend_shift; + b >>= object.m_other_modes.blend_shift; - if (!object.OtherModes.force_blend) + if (!object.m_other_modes.force_blend) { INT32 factor_sum = ((blend1a >> 2) + (blend2a >> 2) + 1) & 0xf; if (factor_sum) @@ -512,7 +512,7 @@ void N64BlenderT::blend_pipe(const int cycle, const int special, int* r_out, int *b_out = min(b, 255); } -inline INT32 N64BlenderT::min(const INT32 x, const INT32 min) +inline INT32 n64_blender_t::min(const INT32 x, const INT32 min) { if (x < min) { diff --git a/src/mame/video/rdpblend.h b/src/mame/video/rdpblend.h index e1e2206b965..4e6ab25e2b4 100644 --- a/src/mame/video/rdpblend.h +++ b/src/mame/video/rdpblend.h @@ -18,57 +18,56 @@ #include "emu.h" -struct OtherModesT; -struct MiscStateT; +struct other_modes_t; +struct misc_state_t; class n64_rdp; struct rdp_span_aux; -class Color; +class color_t; struct rdp_poly_state; -class N64BlenderT +class n64_blender_t { public: - typedef bool (N64BlenderT::*Blender1)(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, rdp_span_aux *userdata, const rdp_poly_state& object); - typedef bool (N64BlenderT::*Blender2)(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux *userdata, const rdp_poly_state& object); + typedef bool (n64_blender_t::*blender1)(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, rdp_span_aux* userdata, const rdp_poly_state& object); + typedef bool (n64_blender_t::*blender2)(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux* userdata, const rdp_poly_state& object); - N64BlenderT(); + n64_blender_t(); - Blender1 blend1[8]; - Blender2 blend2[8]; + blender1 blend1[8]; + blender2 blend2[8]; - void SetMachine(running_machine& machine) { m_machine = &machine; } - void SetProcessor(n64_rdp* rdp) { m_rdp = rdp; } + void set_machine(running_machine& machine) { m_machine = &machine; } + void set_processor(n64_rdp* rdp) { m_rdp = rdp; } running_machine &machine() const { assert(m_machine != NULL); return *m_machine; } - INT32 min(const INT32 x, const INT32 min); - private: running_machine* m_machine; n64_rdp* m_rdp; - bool alpha_reject(rdp_span_aux *userdata, const rdp_poly_state& object); - bool test_for_reject(rdp_span_aux *userdata, const rdp_poly_state& object); - void blend_pipe(const int cycle, const int special, int* r_out, int* g_out, int* b_out, rdp_span_aux *userdata, const rdp_poly_state& object); - void blend_with_partial_reject(INT32* r, INT32* g, INT32* b, INT32 cycle, INT32 partialreject, INT32 select, rdp_span_aux *userdata, const rdp_poly_state& object); - - bool Blend1CycleNoBlendNoACVGNoDither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, rdp_span_aux *userdata, const rdp_poly_state& object); - bool Blend1CycleNoBlendNoACVGDither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, rdp_span_aux *userdata, const rdp_poly_state& object); - bool Blend1CycleNoBlendACVGNoDither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, rdp_span_aux *userdata, const rdp_poly_state& object); - bool Blend1CycleNoBlendACVGDither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, rdp_span_aux *userdata, const rdp_poly_state& object); - bool Blend1CycleBlendNoACVGNoDither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, rdp_span_aux *userdata, const rdp_poly_state& object); - bool Blend1CycleBlendNoACVGDither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, rdp_span_aux *userdata, const rdp_poly_state& object); - bool Blend1CycleBlendACVGNoDither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, rdp_span_aux *userdata, const rdp_poly_state& object); - bool Blend1CycleBlendACVGDither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, rdp_span_aux *userdata, const rdp_poly_state& object); - - bool Blend2CycleNoBlendNoACVGNoDither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux *userdata, const rdp_poly_state& object); - bool Blend2CycleNoBlendNoACVGDither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux *userdata, const rdp_poly_state& object); - bool Blend2CycleNoBlendACVGNoDither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux *userdata, const rdp_poly_state& object); - bool Blend2CycleNoBlendACVGDither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux *userdata, const rdp_poly_state& object); - bool Blend2CycleBlendNoACVGNoDither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux *userdata, const rdp_poly_state& object); - bool Blend2CycleBlendNoACVGDither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux *userdata, const rdp_poly_state& object); - bool Blend2CycleBlendACVGNoDither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux *userdata, const rdp_poly_state& object); - bool Blend2CycleBlendACVGDither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux *userdata, const rdp_poly_state& object); + INT32 min(const INT32 x, const INT32 min); + bool alpha_reject(rdp_span_aux* userdata, const rdp_poly_state& object); + bool test_for_reject(rdp_span_aux* userdata, const rdp_poly_state& object); + void blend_pipe(const int cycle, const int special, int* r_out, int* g_out, int* b_out, rdp_span_aux* userdata, const rdp_poly_state& object); + void blend_with_partial_reject(INT32* r, INT32* g, INT32* b, INT32 cycle, INT32 partialreject, INT32 select, rdp_span_aux* userdata, const rdp_poly_state& object); + + bool cycle1_noblend_noacvg_nodither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, rdp_span_aux* userdata, const rdp_poly_state& object); + bool cycle1_noblend_noacvg_dither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, rdp_span_aux* userdata, const rdp_poly_state& object); + bool cycle1_noblend_acvg_nodither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, rdp_span_aux* userdata, const rdp_poly_state& object); + bool cycle1_noblend_acvg_dither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, rdp_span_aux* userdata, const rdp_poly_state& object); + bool cycle1_blend_noacvg_nodither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, rdp_span_aux* userdata, const rdp_poly_state& object); + bool cycle1_blend_noacvg_dither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, rdp_span_aux* userdata, const rdp_poly_state& object); + bool cycle1_blend_acvg_nodither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, rdp_span_aux* userdata, const rdp_poly_state& object); + bool cycle1_blend_acvg_dither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, rdp_span_aux* userdata, const rdp_poly_state& object); + + bool cycle2_noblend_noacvg_nodither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux* userdata, const rdp_poly_state& object); + bool cycle2_noblend_noacvg_dither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux* userdata, const rdp_poly_state& object); + bool cycle2_noblend_acvg_nodither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux* userdata, const rdp_poly_state& object); + bool cycle2_noblend_acvg_dither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux* userdata, const rdp_poly_state& object); + bool cycle2_blend_noacvg_nodither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux* userdata, const rdp_poly_state& object); + bool cycle2_blend_noacvg_dither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux* userdata, const rdp_poly_state& object); + bool cycle2_blend_acvg_nodither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux* userdata, const rdp_poly_state& object); + bool cycle2_blend_acvg_dither(INT32* fr, INT32* fg, INT32* fb, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux* userdata, const rdp_poly_state& object); INT32 dither_alpha(INT32 alpha, INT32 dither); INT32 dither_color(INT32 color, INT32 dither); diff --git a/src/mame/video/rdpfiltr.inc b/src/mame/video/rdpfiltr.inc index 5b9cdddab2d..aed5a730ad0 100644 --- a/src/mame/video/rdpfiltr.inc +++ b/src/mame/video/rdpfiltr.inc @@ -3,15 +3,15 @@ INLINE void video_filter16(int *out_r, int *out_g, int *out_b, UINT16* vbuff, UINT8* hbuff, const UINT32 hres); INLINE void divot_filter16(UINT8* r, UINT8* g, UINT8* b, UINT16* fbuff, UINT32 fbuff_index); INLINE void restore_filter16(INT32* r, INT32* g, INT32* b, UINT16* fbuff, UINT32 fbuff_index, UINT32 hres); -INLINE void divot_filter16_buffer(INT32* r, INT32* g, INT32* b, Color* vibuffer); -INLINE void restore_filter16_buffer(INT32* r, INT32* g, INT32* b, Color* vibuff, UINT32 hres); -INLINE void restore_two(Color* filtered, Color* neighbour); +INLINE void divot_filter16_buffer(INT32* r, INT32* g, INT32* b, color_t* vibuffer); +INLINE void restore_filter16_buffer(INT32* r, INT32* g, INT32* b, color_t* vibuff, UINT32 hres); +INLINE void restore_two(color_t* filtered, color_t* neighbour); INLINE void video_max(UINT32* Pixels, UINT8* max, UINT32* enb); INLINE UINT32 ge_two(UINT32 enb); INLINE void video_filter16(int *out_r, int *out_g, int *out_b, UINT16* vbuff, UINT8* hbuff, const UINT32 hres) { - Color penumax, penumin, max, min; + color_t penumax, penumin, max, min; UINT16 pix = *vbuff; const UINT8 centercvg = (*hbuff & 3) + ((pix & 1) << 2) + 1; UINT32 numoffull = 1; @@ -255,11 +255,11 @@ INLINE void divot_filter16(UINT8* r, UINT8* g, UINT8* b, UINT16* fbuff, UINT32 f } } -INLINE void divot_filter16_buffer(int* r, int* g, int* b, Color* vibuffer) +INLINE void divot_filter16_buffer(int* r, int* g, int* b, color_t* vibuffer) { - Color leftpix = vibuffer[-1]; - Color rightpix = vibuffer[1]; - Color filtered = *vibuffer; + color_t leftpix = vibuffer[-1]; + color_t rightpix = vibuffer[1]; + color_t filtered = *vibuffer; *r = filtered.i.r; *g = filtered.i.g; @@ -429,12 +429,12 @@ INLINE void restore_filter16(int* r, int* g, int* b, UINT16* fbuff, UINT32 fbuff } } -INLINE void restore_filter16_buffer(INT32* r, INT32* g, INT32* b, Color* vibuff, UINT32 hres) +INLINE void restore_filter16_buffer(INT32* r, INT32* g, INT32* b, color_t* vibuff, UINT32 hres) { - Color filtered; - Color leftuppix, leftdownpix, leftpix; - Color rightuppix, rightdownpix, rightpix; - Color uppix, downpix; + color_t filtered; + color_t leftuppix, leftdownpix, leftpix; + color_t rightuppix, rightdownpix, rightpix; + color_t uppix, downpix; INT32 ihres = (INT32)hres; //can't apply unary minus to unsigned leftuppix = vibuff[-ihres - 1]; @@ -473,7 +473,7 @@ INLINE void restore_filter16_buffer(INT32* r, INT32* g, INT32* b, Color* vibuff, } // This is wrong, only the 5 upper bits are compared. -INLINE void restore_two(Color* filtered, Color* neighbour) +INLINE void restore_two(color_t* filtered, color_t* neighbour) { if (neighbour->i.r > filtered->i.r) { diff --git a/src/mame/video/rdpspn16.c b/src/mame/video/rdpspn16.c index cc76391e5e4..8625f9b860b 100644 --- a/src/mame/video/rdpspn16.c +++ b/src/mame/video/rdpspn16.c @@ -17,13 +17,11 @@ #include "includes/n64.h" #include "video/n64.h" -#define LookUpCC(A, B, C, D) GetCCLUT2()[(GetCCLUT1()[(A << 16) | (B << 8) | C] << 8) | D] - -void n64_rdp::RenderSpans(int start, int end, int tilenum, bool flip, extent_t *Spans, bool rect, rdp_poly_state *object) +void n64_rdp::render_spans(INT32 start, INT32 end, INT32 tilenum, bool flip, extent_t* spans, bool rect, rdp_poly_state* object) { - int clipy1 = Scissor.m_yh; - int clipy2 = Scissor.m_yl; - int offset = 0; + const INT32 clipy1 = m_scissor.m_yh; + const INT32 clipy2 = m_scissor.m_yl; + INT32 offset = 0; if (clipy2 <= 0) { @@ -50,43 +48,43 @@ void n64_rdp::RenderSpans(int start, int end, int tilenum, bool flip, extent_t * } object->m_rdp = this; - memcpy(&object->MiscState, &MiscState, sizeof(MiscStateT)); - memcpy(&object->OtherModes, &OtherModes, sizeof(OtherModesT)); - memcpy(&object->SpanBase, &SpanBase, sizeof(SpanBaseT)); - memcpy(&object->Scissor, &Scissor, sizeof(Rectangle)); - memcpy(&object->m_tiles, &m_tiles, 8 * sizeof(N64Tile)); + memcpy(&object->m_misc_state, &m_misc_state, sizeof(misc_state_t)); + memcpy(&object->m_other_modes, &m_other_modes, sizeof(other_modes_t)); + memcpy(&object->m_span_base, &m_span_base, sizeof(span_base_t)); + memcpy(&object->m_scissor, &m_scissor, sizeof(rectangle_t)); + memcpy(&object->m_tiles, &m_tiles, 8 * sizeof(n64_tile_t)); object->tilenum = tilenum; object->flip = flip; - object->FillColor = FillColor; + object->m_fill_color = m_fill_color; object->rect = rect; - switch(OtherModes.cycle_type) + switch(m_other_modes.cycle_type) { case CYCLE_TYPE_1: - render_triangle_custom(visarea, render_delegate(FUNC(n64_rdp::SpanDraw1Cycle), this), start, (end - start) + 1, Spans + offset); + render_triangle_custom(m_visarea, render_delegate(FUNC(n64_rdp::span_draw_1cycle), this), start, (end - start) + 1, spans + offset); break; case CYCLE_TYPE_2: - render_triangle_custom(visarea, render_delegate(FUNC(n64_rdp::SpanDraw2Cycle), this), start, (end - start) + 1, Spans + offset); + render_triangle_custom(m_visarea, render_delegate(FUNC(n64_rdp::span_draw_2cycle), this), start, (end - start) + 1, spans + offset); break; case CYCLE_TYPE_COPY: - render_triangle_custom(visarea, render_delegate(FUNC(n64_rdp::SpanDrawCopy), this), start, (end - start) + 1, Spans + offset); + render_triangle_custom(m_visarea, render_delegate(FUNC(n64_rdp::span_draw_copy), this), start, (end - start) + 1, spans + offset); break; case CYCLE_TYPE_FILL: - render_triangle_custom(visarea, render_delegate(FUNC(n64_rdp::SpanDrawFill), this), start, (end - start) + 1, Spans + offset); + render_triangle_custom(m_visarea, render_delegate(FUNC(n64_rdp::span_draw_fill), this), start, (end - start) + 1, spans + offset); break; } wait(); } -void n64_rdp::RGBAZClip(int sr, int sg, int sb, int sa, int *sz, rdp_span_aux *userdata) +void n64_rdp::rgbaz_clip(INT32 sr, INT32 sg, INT32 sb, INT32 sa, INT32* sz, rdp_span_aux* userdata) { - userdata->ShadeColor.i.r = s_special_9bit_clamptable[sr & 0x1ff]; - userdata->ShadeColor.i.g = s_special_9bit_clamptable[sg & 0x1ff]; - userdata->ShadeColor.i.b = s_special_9bit_clamptable[sb & 0x1ff]; - userdata->ShadeColor.i.a = s_special_9bit_clamptable[sa & 0x1ff]; + userdata->m_shade_color.i.r = s_special_9bit_clamptable[sr & 0x1ff]; + userdata->m_shade_color.i.g = s_special_9bit_clamptable[sg & 0x1ff]; + userdata->m_shade_color.i.b = s_special_9bit_clamptable[sb & 0x1ff]; + userdata->m_shade_color.i.a = s_special_9bit_clamptable[sa & 0x1ff]; INT32 zanded = (*sz) & 0x60000; @@ -100,9 +98,9 @@ void n64_rdp::RGBAZClip(int sr, int sg, int sb, int sa, int *sz, rdp_span_aux *u } } -void n64_rdp::RGBAZCorrectTriangle(INT32 offx, INT32 offy, INT32* r, INT32* g, INT32* b, INT32* a, INT32* z, rdp_span_aux *userdata, const rdp_poly_state &object) +void n64_rdp::rgbaz_correct_triangle(INT32 offx, INT32 offy, INT32* r, INT32* g, INT32* b, INT32* a, INT32* z, rdp_span_aux* userdata, const rdp_poly_state &object) { - if (userdata->CurrentPixCvg == 8) + if (userdata->m_current_pix_cvg == 8) { *r >>= 2; *g >>= 2; @@ -112,17 +110,17 @@ void n64_rdp::RGBAZCorrectTriangle(INT32 offx, INT32 offy, INT32* r, INT32* g, I } else { - INT32 summand_xr = offx * SIGN13(object.SpanBase.m_span_dr >> 14); - INT32 summand_yr = offy * SIGN13(object.SpanBase.m_span_drdy >> 14); - INT32 summand_xb = offx * SIGN13(object.SpanBase.m_span_db >> 14); - INT32 summand_yb = offy * SIGN13(object.SpanBase.m_span_dbdy >> 14); - INT32 summand_xg = offx * SIGN13(object.SpanBase.m_span_dg >> 14); - INT32 summand_yg = offy * SIGN13(object.SpanBase.m_span_dgdy >> 14); - INT32 summand_xa = offx * SIGN13(object.SpanBase.m_span_da >> 14); - INT32 summand_ya = offy * SIGN13(object.SpanBase.m_span_dady >> 14); + INT32 summand_xr = offx * SIGN13(object.m_span_base.m_span_dr >> 14); + INT32 summand_yr = offy * SIGN13(object.m_span_base.m_span_drdy >> 14); + INT32 summand_xb = offx * SIGN13(object.m_span_base.m_span_db >> 14); + INT32 summand_yb = offy * SIGN13(object.m_span_base.m_span_dbdy >> 14); + INT32 summand_xg = offx * SIGN13(object.m_span_base.m_span_dg >> 14); + INT32 summand_yg = offy * SIGN13(object.m_span_base.m_span_dgdy >> 14); + INT32 summand_xa = offx * SIGN13(object.m_span_base.m_span_da >> 14); + INT32 summand_ya = offy * SIGN13(object.m_span_base.m_span_dady >> 14); - INT32 summand_xz = offx * SIGN22(object.SpanBase.m_span_dz >> 10); - INT32 summand_yz = offy * SIGN22(object.SpanBase.m_span_dzdy >> 10); + INT32 summand_xz = offx * SIGN22(object.m_span_base.m_span_dz >> 10); + INT32 summand_yz = offy * SIGN22(object.m_span_base.m_span_dzdy >> 10); *r = ((*r << 2) + summand_xr + summand_yr) >> 4; *g = ((*g << 2) + summand_xg + summand_yg) >> 4; @@ -132,14 +130,14 @@ void n64_rdp::RGBAZCorrectTriangle(INT32 offx, INT32 offy, INT32* r, INT32* g, I } } -inline void n64_rdp::write_pixel(UINT32 curpixel, INT32 r, INT32 g, INT32 b, rdp_span_aux *userdata, const rdp_poly_state &object) +inline void n64_rdp::write_pixel(UINT32 curpixel, INT32 r, INT32 g, INT32 b, rdp_span_aux* userdata, const rdp_poly_state &object) { - if (object.MiscState.FBSize == 2) // 16-bit framebuffer + if (object.m_misc_state.m_fb_size == 2) // 16-bit framebuffer { - const UINT32 fb = (object.MiscState.FBAddress >> 1) + curpixel; + const UINT32 fb = (object.m_misc_state.m_fb_address >> 1) + curpixel; UINT16 finalcolor; - if (object.OtherModes.color_on_cvg && !userdata->PreWrap) + if (object.m_other_modes.color_on_cvg && !userdata->m_pre_wrap) { finalcolor = RREADIDX16(fb) & 0xfffe; } @@ -148,12 +146,12 @@ inline void n64_rdp::write_pixel(UINT32 curpixel, INT32 r, INT32 g, INT32 b, rdp finalcolor = ((r >> 3) << 11) | ((g >> 3) << 6) | ((b >> 3) << 1); } - switch (object.OtherModes.cvg_dest) + switch (object.m_other_modes.cvg_dest) { case 0: - if (userdata->BlendEnable) + if (userdata->m_blend_enable) { - UINT32 finalcvg = userdata->CurrentPixCvg + userdata->CurrentMemCvg; + UINT32 finalcvg = userdata->m_current_pix_cvg + userdata->m_current_mem_cvg; if (finalcvg & 8) { finalcvg = 7; @@ -163,14 +161,14 @@ inline void n64_rdp::write_pixel(UINT32 curpixel, INT32 r, INT32 g, INT32 b, rdp } else { - const UINT32 finalcvg = (userdata->CurrentPixCvg - 1) & 7; + const UINT32 finalcvg = (userdata->m_current_pix_cvg - 1) & 7; RWRITEIDX16(fb, finalcolor | (finalcvg >> 2)); HWRITEADDR8(fb, finalcvg & 3); } break; case 1: { - const UINT32 finalcvg = (userdata->CurrentPixCvg + userdata->CurrentMemCvg) & 7; + const UINT32 finalcvg = (userdata->m_current_pix_cvg + userdata->m_current_mem_cvg) & 7; RWRITEIDX16(fb, finalcolor | (finalcvg >> 2)); HWRITEADDR8(fb, finalcvg & 3); break; @@ -180,17 +178,17 @@ inline void n64_rdp::write_pixel(UINT32 curpixel, INT32 r, INT32 g, INT32 b, rdp HWRITEADDR8(fb, 3); break; case 3: - RWRITEIDX16(fb, finalcolor | (userdata->CurrentMemCvg >> 2)); - HWRITEADDR8(fb, userdata->CurrentMemCvg & 3); + RWRITEIDX16(fb, finalcolor | (userdata->m_current_mem_cvg >> 2)); + HWRITEADDR8(fb, userdata->m_current_mem_cvg & 3); break; } } else // 32-bit framebuffer { - const UINT32 fb = (object.MiscState.FBAddress >> 2) + curpixel; + const UINT32 fb = (object.m_misc_state.m_fb_address >> 2) + curpixel; UINT32 finalcolor; - if (object.OtherModes.color_on_cvg && !userdata->PreWrap) + if (object.m_other_modes.color_on_cvg && !userdata->m_pre_wrap) { finalcolor = RREADIDX32(fb) & 0xffffff00; } @@ -199,12 +197,12 @@ inline void n64_rdp::write_pixel(UINT32 curpixel, INT32 r, INT32 g, INT32 b, rdp finalcolor = (r << 24) | (g << 16) | (b << 8); } - switch (object.OtherModes.cvg_dest) + switch (object.m_other_modes.cvg_dest) { case 0: - if (userdata->BlendEnable) + if (userdata->m_blend_enable) { - UINT32 finalcvg = userdata->CurrentPixCvg + userdata->CurrentMemCvg; + UINT32 finalcvg = userdata->m_current_pix_cvg + userdata->m_current_mem_cvg; if (finalcvg & 8) { finalcvg = 7; @@ -214,113 +212,113 @@ inline void n64_rdp::write_pixel(UINT32 curpixel, INT32 r, INT32 g, INT32 b, rdp } else { - RWRITEIDX32(fb, finalcolor | (((userdata->CurrentPixCvg - 1) & 7) << 5)); + RWRITEIDX32(fb, finalcolor | (((userdata->m_current_pix_cvg - 1) & 7) << 5)); } break; case 1: - RWRITEIDX32(fb, finalcolor | (((userdata->CurrentPixCvg + userdata->CurrentMemCvg) & 7) << 5)); + RWRITEIDX32(fb, finalcolor | (((userdata->m_current_pix_cvg + userdata->m_current_mem_cvg) & 7) << 5)); break; case 2: RWRITEIDX32(fb, finalcolor | 0xE0); break; case 3: - RWRITEIDX32(fb, finalcolor | (userdata->CurrentMemCvg << 5)); + RWRITEIDX32(fb, finalcolor | (userdata->m_current_mem_cvg << 5)); break; } } } -inline void n64_rdp::read_pixel(UINT32 curpixel, rdp_span_aux *userdata, const rdp_poly_state &object) +inline void n64_rdp::read_pixel(UINT32 curpixel, rdp_span_aux* userdata, const rdp_poly_state &object) { - if (object.MiscState.FBSize == 2) // 16-bit framebuffer + if (object.m_misc_state.m_fb_size == 2) // 16-bit framebuffer { UINT16 fword; - if (object.OtherModes.image_read_en) + if (object.m_other_modes.image_read_en) { - fword = RREADIDX16((object.MiscState.FBAddress >> 1) + curpixel); - UINT8 hbyte = HREADADDR8((object.MiscState.FBAddress >> 1) + curpixel); - userdata->MemoryColor.i.a = userdata->CurrentMemCvg << 5; - userdata->CurrentMemCvg = ((fword & 1) << 2) | (hbyte & 3); + fword = RREADIDX16((object.m_misc_state.m_fb_address >> 1) + curpixel); + UINT8 hbyte = HREADADDR8((object.m_misc_state.m_fb_address >> 1) + curpixel); + userdata->m_memory_color.i.a = userdata->m_current_mem_cvg << 5; + userdata->m_current_mem_cvg = ((fword & 1) << 2) | (hbyte & 3); } else { - fword = RREADIDX16((object.MiscState.FBAddress >> 1) + curpixel); - userdata->MemoryColor.i.a = 0xff; - userdata->CurrentMemCvg = 7; + fword = RREADIDX16((object.m_misc_state.m_fb_address >> 1) + curpixel); + userdata->m_memory_color.i.a = 0xff; + userdata->m_current_mem_cvg = 7; } - userdata->MemoryColor.i.r = GETHICOL(fword); - userdata->MemoryColor.i.g = GETMEDCOL(fword); - userdata->MemoryColor.i.b = GETLOWCOL(fword); + userdata->m_memory_color.i.r = GETHICOL(fword); + userdata->m_memory_color.i.g = GETMEDCOL(fword); + userdata->m_memory_color.i.b = GETLOWCOL(fword); } else // 32-bit framebuffer { UINT32 mem; - if (object.OtherModes.image_read_en) + if (object.m_other_modes.image_read_en) { - mem = RREADIDX32((object.MiscState.FBAddress >> 2) + curpixel); - userdata->MemoryColor.i.a = (mem) & 0xff; - userdata->CurrentMemCvg = (mem >> 5) & 7; + mem = RREADIDX32((object.m_misc_state.m_fb_address >> 2) + curpixel); + userdata->m_memory_color.i.a = (mem) & 0xff; + userdata->m_current_mem_cvg = (mem >> 5) & 7; } else { - mem = RREADIDX32((object.MiscState.FBAddress >> 2) + curpixel); - userdata->MemoryColor.i.a = 0xff; - userdata->CurrentMemCvg = 7; + mem = RREADIDX32((object.m_misc_state.m_fb_address >> 2) + curpixel); + userdata->m_memory_color.i.a = 0xff; + userdata->m_current_mem_cvg = 7; } - userdata->MemoryColor.i.r = (mem >> 24) & 0xff; - userdata->MemoryColor.i.g = (mem >> 16) & 0xff; - userdata->MemoryColor.i.b = (mem >> 8) & 0xff; + userdata->m_memory_color.i.r = (mem >> 24) & 0xff; + userdata->m_memory_color.i.g = (mem >> 16) & 0xff; + userdata->m_memory_color.i.b = (mem >> 8) & 0xff; } } -inline void n64_rdp::copy_pixel(UINT32 curpixel, INT32 r, INT32 g, INT32 b, int CurrentPixCvg, const rdp_poly_state &object) +inline void n64_rdp::copy_pixel(UINT32 curpixel, INT32 r, INT32 g, INT32 b, INT32 m_current_pix_cvg, const rdp_poly_state &object) { - if (object.MiscState.FBSize == 2) // 16-bit framebuffer + if (object.m_misc_state.m_fb_size == 2) // 16-bit framebuffer { - RWRITEIDX16((object.MiscState.FBAddress >> 1) + curpixel, ((r >> 3) << 11) | ((g >> 3) << 6) | ((b >> 3) << 1) | ((CurrentPixCvg >> 2) & 1)); - HWRITEADDR8((object.MiscState.FBAddress >> 1) + curpixel, CurrentPixCvg & 3); + RWRITEIDX16((object.m_misc_state.m_fb_address >> 1) + curpixel, ((r >> 3) << 11) | ((g >> 3) << 6) | ((b >> 3) << 1) | ((m_current_pix_cvg >> 2) & 1)); + HWRITEADDR8((object.m_misc_state.m_fb_address >> 1) + curpixel, m_current_pix_cvg & 3); } else // 32-bit framebuffer { - RWRITEIDX32((object.MiscState.FBAddress >> 2) + curpixel, (r << 24) | (g << 16) | (b << 8) | (CurrentPixCvg << 5)); + RWRITEIDX32((object.m_misc_state.m_fb_address >> 2) + curpixel, (r << 24) | (g << 16) | (b << 8) | (m_current_pix_cvg << 5)); } } inline void n64_rdp::fill_pixel(UINT32 curpixel, const rdp_poly_state &object) { - if (object.MiscState.FBSize == 2) // 16-bit framebuffer + if (object.m_misc_state.m_fb_size == 2) // 16-bit framebuffer { UINT16 val; if (curpixel & 1) { - val = object.FillColor & 0xffff; + val = object.m_fill_color & 0xffff; } else { - val = (object.FillColor >> 16) & 0xffff; + val = (object.m_fill_color >> 16) & 0xffff; } - RWRITEIDX16((object.MiscState.FBAddress >> 1) + curpixel, val); - HWRITEADDR8((object.MiscState.FBAddress >> 1) + curpixel, ((val & 1) << 1) | (val & 1)); + RWRITEIDX16((object.m_misc_state.m_fb_address >> 1) + curpixel, val); + HWRITEADDR8((object.m_misc_state.m_fb_address >> 1) + curpixel, ((val & 1) << 1) | (val & 1)); } else // 32-bit framebuffer { - RWRITEIDX32((object.MiscState.FBAddress >> 2) + curpixel, object.FillColor); - HWRITEADDR8((object.MiscState.FBAddress >> 1) + (curpixel << 1), (object.FillColor & 0x10000) ? 3 : 0); - HWRITEADDR8((object.MiscState.FBAddress >> 1) + (curpixel << 1) + 1, (object.FillColor & 0x1) ? 3 : 0); + RWRITEIDX32((object.m_misc_state.m_fb_address >> 2) + curpixel, object.m_fill_color); + HWRITEADDR8((object.m_misc_state.m_fb_address >> 1) + (curpixel << 1), (object.m_fill_color & 0x10000) ? 3 : 0); + HWRITEADDR8((object.m_misc_state.m_fb_address >> 1) + (curpixel << 1) + 1, (object.m_fill_color & 0x1) ? 3 : 0); } } -void n64_rdp::SpanDraw1Cycle(INT32 scanline, const extent_t &extent, const rdp_poly_state &object, int threadid) +void n64_rdp::span_draw_1cycle(INT32 scanline, const extent_t &extent, const rdp_poly_state &object, INT32 threadid) { - assert(object.MiscState.FBSize >= 2 && object.MiscState.FBSize < 4); + assert(object.m_misc_state.m_fb_size >= 2 && object.m_misc_state.m_fb_size < 4); - const int clipx1 = object.Scissor.m_xh; - const int clipx2 = object.Scissor.m_xl; - const int tilenum = object.tilenum; + const INT32 clipx1 = object.m_scissor.m_xh; + const INT32 clipx2 = object.m_scissor.m_xl; + const INT32 tilenum = object.tilenum; const bool flip = object.flip; SpanParam r; r.w = extent.param[SPAN_R].start; @@ -332,125 +330,125 @@ void n64_rdp::SpanDraw1Cycle(INT32 scanline, const extent_t &extent, const rdp_p SpanParam t; t.w = extent.param[SPAN_T].start; SpanParam w; w.w = extent.param[SPAN_W].start; - const UINT32 zb = object.MiscState.ZBAddress >> 1; - const UINT32 zhb = object.MiscState.ZBAddress; - UINT8 offx = 0, offy = 0; + const UINT32 zb = object.m_misc_state.m_zb_address >> 1; + const UINT32 zhb = object.m_misc_state.m_zb_address; #ifdef PTR64 assert(extent.userdata != (const void *)0xcccccccccccccccc); #else assert(extent.userdata != (const void *)0xcccccccc); #endif - rdp_span_aux *userdata = (rdp_span_aux*)extent.userdata; + rdp_span_aux* userdata = (rdp_span_aux*)extent.userdata; - INT32 m_clamp_s_diff[8]; - INT32 m_clamp_t_diff[8]; - TexPipe.CalculateClampDiffs(tilenum, userdata, object, m_clamp_s_diff, m_clamp_t_diff); + INT32 clamp_s_diff[8]; + INT32 clamp_t_diff[8]; + m_tex_pipe.calculate_clamp_diffs(tilenum, userdata, object, clamp_s_diff, clamp_t_diff); - const bool partialreject = (userdata->ColorInputs.blender2b_a[0] == &userdata->InvPixelColor.i.a && userdata->ColorInputs.blender1b_a[0] == &userdata->PixelColor.i.a); - const int sel0 = (userdata->ColorInputs.blender2b_a[0] == &userdata->MemoryColor.i.a) ? 1 : 0; + const bool partialreject = (userdata->m_color_inputs.blender2b_a[0] == &userdata->m_inv_pixel_color.i.a && userdata->m_color_inputs.blender1b_a[0] == &userdata->m_pixel_color.i.a); + const INT32 sel0 = (userdata->m_color_inputs.blender2b_a[0] == &userdata->m_memory_color.i.a) ? 1 : 0; - int drinc, dginc, dbinc, dainc; - int dzinc, dzpix; - int dsinc, dtinc, dwinc; - int xinc; + INT32 drinc, dginc, dbinc, dainc; + INT32 dzinc, dzpix; + INT32 dsinc, dtinc, dwinc; + INT32 xinc; if (!flip) { - drinc = -object.SpanBase.m_span_dr; - dginc = -object.SpanBase.m_span_dg; - dbinc = -object.SpanBase.m_span_db; - dainc = -object.SpanBase.m_span_da; - dzinc = -object.SpanBase.m_span_dz; - dsinc = -object.SpanBase.m_span_ds; - dtinc = -object.SpanBase.m_span_dt; - dwinc = -object.SpanBase.m_span_dw; + drinc = -object.m_span_base.m_span_dr; + dginc = -object.m_span_base.m_span_dg; + dbinc = -object.m_span_base.m_span_db; + dainc = -object.m_span_base.m_span_da; + dzinc = -object.m_span_base.m_span_dz; + dsinc = -object.m_span_base.m_span_ds; + dtinc = -object.m_span_base.m_span_dt; + dwinc = -object.m_span_base.m_span_dw; xinc = -1; } else { - drinc = object.SpanBase.m_span_dr; - dginc = object.SpanBase.m_span_dg; - dbinc = object.SpanBase.m_span_db; - dainc = object.SpanBase.m_span_da; - dzinc = object.SpanBase.m_span_dz; - dsinc = object.SpanBase.m_span_ds; - dtinc = object.SpanBase.m_span_dt; - dwinc = object.SpanBase.m_span_dw; + drinc = object.m_span_base.m_span_dr; + dginc = object.m_span_base.m_span_dg; + dbinc = object.m_span_base.m_span_db; + dainc = object.m_span_base.m_span_da; + dzinc = object.m_span_base.m_span_dz; + dsinc = object.m_span_base.m_span_ds; + dtinc = object.m_span_base.m_span_dt; + dwinc = object.m_span_base.m_span_dw; xinc = 1; } - const int fb_index = object.MiscState.FBWidth * scanline; + const INT32 fb_index = object.m_misc_state.m_fb_width * scanline; - const int xstart = extent.startx; - const int xend = userdata->m_unscissored_rx; - const int xend_scissored = extent.stopx; + const INT32 xstart = extent.startx; + const INT32 xend = userdata->m_unscissored_rx; + const INT32 xend_scissored = extent.stopx; - int x = xend; + INT32 x = xend; - const int length = flip ? (xstart - xend) : (xend - xstart); + const INT32 length = flip ? (xstart - xend) : (xend - xstart); INT32 fir, fig, fib; - if(object.OtherModes.z_source_sel) + if(object.m_other_modes.z_source_sel) { - z.w = ((UINT32)object.MiscState.PrimitiveZ) << 16; - dzpix = object.MiscState.PrimitiveDZ; + z.w = object.m_misc_state.m_primitive_z; + dzpix = object.m_misc_state.m_primitive_dz; dzinc = 0; } else { - dzpix = object.SpanBase.m_span_dzpix; + dzpix = object.m_span_base.m_span_dzpix; } - if (object.MiscState.FBSize < 2 || object.MiscState.FBSize > 4) - fatalerror("unsupported FBSize %d\n", object.MiscState.FBSize); + if (object.m_misc_state.m_fb_size < 2 || object.m_misc_state.m_fb_size > 4) + fatalerror("unsupported m_fb_size %d\n", object.m_misc_state.m_fb_size); - const int blend_index = (object.OtherModes.alpha_cvg_select ? 2 : 0) | ((object.OtherModes.rgb_dither_sel < 3) ? 1 : 0); - const int cycle0 = ((object.OtherModes.sample_type & 1) << 1) | (object.OtherModes.bi_lerp0 & 1); + const INT32 blend_index = (object.m_other_modes.alpha_cvg_select ? 2 : 0) | ((object.m_other_modes.rgb_dither_sel < 3) ? 1 : 0); + const INT32 cycle0 = ((object.m_other_modes.sample_type & 1) << 1) | (object.m_other_modes.bi_lerp0 & 1); INT32 sss = 0; INT32 sst = 0; - if (object.OtherModes.persp_tex_en) + if (object.m_other_modes.persp_tex_en) { - TCDiv(s.w >> 16, t.w >> 16, w.w >> 16, &sss, &sst); + tc_div(s.w >> 16, t.w >> 16, w.w >> 16, &sss, &sst); } else { - TCDivNoPersp(s.w >> 16, t.w >> 16, w.w >> 16, &sss, &sst); + tc_div_no_perspective(s.w >> 16, t.w >> 16, w.w >> 16, &sss, &sst); } userdata->m_start_span = true; - for (int j = 0; j <= length; j++) + for (INT32 j = 0; j <= length; j++) { - int sr = r.w >> 14; - int sg = g.w >> 14; - int sb = b.w >> 14; - int sa = a.w >> 14; - int sz = (z.w >> 10) & 0x3fffff; + INT32 sr = r.w >> 14; + INT32 sg = g.w >> 14; + INT32 sb = b.w >> 14; + INT32 sa = a.w >> 14; + INT32 sz = (z.w >> 10) & 0x3fffff; const bool valid_x = (flip) ? (x >= xend_scissored) : (x <= xend_scissored); if (x >= clipx1 && x < clipx2 && valid_x) { + UINT8 offx, offy; lookup_cvmask_derivatives(userdata->m_cvg[x], &offx, &offy, userdata); - TexPipe.LOD1Cycle(&sss, &sst, s.w, t.w, w.w, dsinc, dtinc, dwinc, userdata, object); + m_tex_pipe.lod_1cycle(&sss, &sst, s.w, t.w, w.w, dsinc, dtinc, dwinc, userdata, object); - RGBAZCorrectTriangle(offx, offy, &sr, &sg, &sb, &sa, &sz, userdata, object); - RGBAZClip(sr, sg, sb, sa, &sz, userdata); + rgbaz_correct_triangle(offx, offy, &sr, &sg, &sb, &sa, &sz, userdata, object); + rgbaz_clip(sr, sg, sb, sa, &sz, userdata); - ((TexPipe).*(TexPipe.cycle[cycle0]))(&userdata->Texel0Color, &userdata->Texel0Color, sss, sst, tilenum, 0, userdata, object, m_clamp_s_diff, m_clamp_t_diff); - //TexPipe.Cycle(&userdata->Texel0Color, &userdata->Texel0Color, sss, sst, tilenum, 0, userdata, object, m_clamp_s_diff, m_clamp_t_diff); + ((m_tex_pipe).*(m_tex_pipe.m_cycle[cycle0]))(&userdata->m_texel0_color, &userdata->m_texel0_color, sss, sst, tilenum, 0, userdata, object, clamp_s_diff, clamp_t_diff); + //m_tex_pipe.Cycle(&userdata->m_texel0_color, &userdata->m_texel0_color, sss, sst, tilenum, 0, userdata, object, clamp_s_diff, clamp_t_diff); - userdata->NoiseColor.i.r = userdata->NoiseColor.i.g = userdata->NoiseColor.i.b = rand() << 3; // Not accurate + userdata->m_noise_color.i.r = userdata->m_noise_color.i.g = userdata->m_noise_color.i.b = rand() << 3; // Not accurate - userdata->PixelColor.i.r = ColorCombinerEquation(*userdata->ColorInputs.combiner_rgbsub_a_r[1],*userdata->ColorInputs.combiner_rgbsub_b_r[1],*userdata->ColorInputs.combiner_rgbmul_r[1],*userdata->ColorInputs.combiner_rgbadd_r[1]); - userdata->PixelColor.i.g = ColorCombinerEquation(*userdata->ColorInputs.combiner_rgbsub_a_g[1],*userdata->ColorInputs.combiner_rgbsub_b_g[1],*userdata->ColorInputs.combiner_rgbmul_g[1],*userdata->ColorInputs.combiner_rgbadd_g[1]); - userdata->PixelColor.i.b = ColorCombinerEquation(*userdata->ColorInputs.combiner_rgbsub_a_b[1],*userdata->ColorInputs.combiner_rgbsub_b_b[1],*userdata->ColorInputs.combiner_rgbmul_b[1],*userdata->ColorInputs.combiner_rgbadd_b[1]); - userdata->PixelColor.i.a = AlphaCombinerEquation(*userdata->ColorInputs.combiner_alphasub_a[1],*userdata->ColorInputs.combiner_alphasub_b[1],*userdata->ColorInputs.combiner_alphamul[1],*userdata->ColorInputs.combiner_alphaadd[1]); + userdata->m_pixel_color.i.r = color_combiner_equation(*userdata->m_color_inputs.combiner_rgbsub_a_r[1],*userdata->m_color_inputs.combiner_rgbsub_b_r[1],*userdata->m_color_inputs.combiner_rgbmul_r[1],*userdata->m_color_inputs.combiner_rgbadd_r[1]); + userdata->m_pixel_color.i.g = color_combiner_equation(*userdata->m_color_inputs.combiner_rgbsub_a_g[1],*userdata->m_color_inputs.combiner_rgbsub_b_g[1],*userdata->m_color_inputs.combiner_rgbmul_g[1],*userdata->m_color_inputs.combiner_rgbadd_g[1]); + userdata->m_pixel_color.i.b = color_combiner_equation(*userdata->m_color_inputs.combiner_rgbsub_a_b[1],*userdata->m_color_inputs.combiner_rgbsub_b_b[1],*userdata->m_color_inputs.combiner_rgbmul_b[1],*userdata->m_color_inputs.combiner_rgbadd_b[1]); + userdata->m_pixel_color.i.a = alpha_combiner_equation(*userdata->m_color_inputs.combiner_alphasub_a[1],*userdata->m_color_inputs.combiner_alphasub_b[1],*userdata->m_color_inputs.combiner_alphamul[1],*userdata->m_color_inputs.combiner_alphaadd[1]); //Alpha coverage combiner - GetAlphaCvg(&userdata->PixelColor.i.a, userdata, object); + get_alpha_cvg(&userdata->m_pixel_color.i.a, userdata, object); const UINT32 curpixel = fb_index + x; const UINT32 zbcur = zb + curpixel; @@ -458,24 +456,24 @@ void n64_rdp::SpanDraw1Cycle(INT32 scanline, const extent_t &extent, const rdp_p read_pixel(curpixel, userdata, object); - if(ZCompare(zbcur, zhbcur, sz, dzpix, userdata, object)) + if(z_compare(zbcur, zhbcur, sz, dzpix, userdata, object)) { - int cdith = 0; - int adith = 0; - GetDitherValues(scanline, j, &cdith, &adith, object); + INT32 cdith = 0; + INT32 adith = 0; + get_dither_values(scanline, j, &cdith, &adith, object); - if (((userdata->BlendEnable << 2) | blend_index) != 5 && machine().input().code_pressed(KEYCODE_B)) + if (((userdata->m_blend_enable << 2) | blend_index) != 5 && machine().input().code_pressed(KEYCODE_B)) { - printf("1:%d\n", (userdata->BlendEnable << 2) | blend_index); + printf("1:%d\n", (userdata->m_blend_enable << 2) | blend_index); } - bool rendered = ((&Blender)->*(Blender.blend1[(userdata->BlendEnable << 2) | blend_index]))(&fir, &fig, &fib, cdith, adith, partialreject, sel0, userdata, object); + bool rendered = ((&m_blender)->*(m_blender.blend1[(userdata->m_blend_enable << 2) | blend_index]))(&fir, &fig, &fib, cdith, adith, partialreject, sel0, userdata, object); if (rendered) { write_pixel(curpixel, fir, fig, fib, userdata, object); - if (object.OtherModes.z_update_en) + if (object.m_other_modes.z_update_en) { - ZStore(object, zbcur, zhbcur, sz, userdata->m_dzpix_enc); + z_store(object, zbcur, zhbcur, sz, userdata->m_dzpix_enc); } } } @@ -497,13 +495,13 @@ void n64_rdp::SpanDraw1Cycle(INT32 scanline, const extent_t &extent, const rdp_p } } -void n64_rdp::SpanDraw2Cycle(INT32 scanline, const extent_t &extent, const rdp_poly_state &object, int threadid) +void n64_rdp::span_draw_2cycle(INT32 scanline, const extent_t &extent, const rdp_poly_state &object, INT32 threadid) { - assert(object.MiscState.FBSize >= 2 && object.MiscState.FBSize < 4); + assert(object.m_misc_state.m_fb_size >= 2 && object.m_misc_state.m_fb_size < 4); - const int clipx1 = object.Scissor.m_xh; - const int clipx2 = object.Scissor.m_xl; - const int tilenum = object.tilenum; + const INT32 clipx1 = object.m_scissor.m_xh; + const INT32 clipx2 = object.m_scissor.m_xl; + const INT32 tilenum = object.tilenum; const bool flip = object.flip; SpanParam r; r.w = extent.param[SPAN_R].start; @@ -515,14 +513,14 @@ void n64_rdp::SpanDraw2Cycle(INT32 scanline, const extent_t &extent, const rdp_p SpanParam t; t.w = extent.param[SPAN_T].start; SpanParam w; w.w = extent.param[SPAN_W].start; - const UINT32 zb = object.MiscState.ZBAddress >> 1; - const UINT32 zhb = object.MiscState.ZBAddress; + const UINT32 zb = object.m_misc_state.m_zb_address >> 1; + const UINT32 zhb = object.m_misc_state.m_zb_address; INT32 tile2 = (tilenum + 1) & 7; INT32 tile1 = tilenum; const UINT32 prim_tile = tilenum; - int newtile1 = tile1; + INT32 newtile1 = tile1; INT32 news = 0; INT32 newt = 0; @@ -531,188 +529,188 @@ void n64_rdp::SpanDraw2Cycle(INT32 scanline, const extent_t &extent, const rdp_p #else assert(extent.userdata != (const void *)0xcccccccc); #endif - rdp_span_aux *userdata = (rdp_span_aux*)extent.userdata; + rdp_span_aux* userdata = (rdp_span_aux*)extent.userdata; - INT32 m_clamp_s_diff[8]; - INT32 m_clamp_t_diff[8]; - TexPipe.CalculateClampDiffs(tile1, userdata, object, m_clamp_s_diff, m_clamp_t_diff); + INT32 clamp_s_diff[8]; + INT32 clamp_t_diff[8]; + m_tex_pipe.calculate_clamp_diffs(tile1, userdata, object, clamp_s_diff, clamp_t_diff); - bool partialreject = (userdata->ColorInputs.blender2b_a[1] == &userdata->InvPixelColor.i.a && userdata->ColorInputs.blender1b_a[1] == &userdata->PixelColor.i.a); - int sel0 = (userdata->ColorInputs.blender2b_a[0] == &userdata->MemoryColor.i.a) ? 1 : 0; - int sel1 = (userdata->ColorInputs.blender2b_a[1] == &userdata->MemoryColor.i.a) ? 1 : 0; + bool partialreject = (userdata->m_color_inputs.blender2b_a[1] == &userdata->m_inv_pixel_color.i.a && userdata->m_color_inputs.blender1b_a[1] == &userdata->m_pixel_color.i.a); + INT32 sel0 = (userdata->m_color_inputs.blender2b_a[0] == &userdata->m_memory_color.i.a) ? 1 : 0; + INT32 sel1 = (userdata->m_color_inputs.blender2b_a[1] == &userdata->m_memory_color.i.a) ? 1 : 0; - int drinc, dginc, dbinc, dainc; - int dzinc, dzpix; - int dsinc, dtinc, dwinc; - int xinc; + INT32 drinc, dginc, dbinc, dainc; + INT32 dzinc, dzpix; + INT32 dsinc, dtinc, dwinc; + INT32 xinc; if (!flip) { - drinc = -object.SpanBase.m_span_dr; - dginc = -object.SpanBase.m_span_dg; - dbinc = -object.SpanBase.m_span_db; - dainc = -object.SpanBase.m_span_da; - dzinc = -object.SpanBase.m_span_dz; - dsinc = -object.SpanBase.m_span_ds; - dtinc = -object.SpanBase.m_span_dt; - dwinc = -object.SpanBase.m_span_dw; + drinc = -object.m_span_base.m_span_dr; + dginc = -object.m_span_base.m_span_dg; + dbinc = -object.m_span_base.m_span_db; + dainc = -object.m_span_base.m_span_da; + dzinc = -object.m_span_base.m_span_dz; + dsinc = -object.m_span_base.m_span_ds; + dtinc = -object.m_span_base.m_span_dt; + dwinc = -object.m_span_base.m_span_dw; xinc = -1; } else { - drinc = object.SpanBase.m_span_dr; - dginc = object.SpanBase.m_span_dg; - dbinc = object.SpanBase.m_span_db; - dainc = object.SpanBase.m_span_da; - dzinc = object.SpanBase.m_span_dz; - dsinc = object.SpanBase.m_span_ds; - dtinc = object.SpanBase.m_span_dt; - dwinc = object.SpanBase.m_span_dw; + drinc = object.m_span_base.m_span_dr; + dginc = object.m_span_base.m_span_dg; + dbinc = object.m_span_base.m_span_db; + dainc = object.m_span_base.m_span_da; + dzinc = object.m_span_base.m_span_dz; + dsinc = object.m_span_base.m_span_ds; + dtinc = object.m_span_base.m_span_dt; + dwinc = object.m_span_base.m_span_dw; xinc = 1; } - const int fb_index = object.MiscState.FBWidth * scanline; + const INT32 fb_index = object.m_misc_state.m_fb_width * scanline; - int cdith = 0; - int adith = 0; + INT32 cdith = 0; + INT32 adith = 0; - const int xstart = extent.startx; - const int xend = userdata->m_unscissored_rx; - const int xend_scissored = extent.stopx; + const INT32 xstart = extent.startx; + const INT32 xend = userdata->m_unscissored_rx; + const INT32 xend_scissored = extent.stopx; - int x = xend; + INT32 x = xend; - const int length = flip ? (xstart - xend) : (xend - xstart); + const INT32 length = flip ? (xstart - xend) : (xend - xstart); INT32 fir, fig, fib; - if(object.OtherModes.z_source_sel) + if(object.m_other_modes.z_source_sel) { - z.w = ((UINT32)object.MiscState.PrimitiveZ) << 16; - dzpix = object.MiscState.PrimitiveDZ; + z.w = object.m_misc_state.m_primitive_z; + dzpix = object.m_misc_state.m_primitive_dz; dzinc = 0; } else { - dzpix = object.SpanBase.m_span_dzpix; + dzpix = object.m_span_base.m_span_dzpix; } - if (object.MiscState.FBSize < 2 || object.MiscState.FBSize > 4) - fatalerror("unsupported FBSize %d\n", object.MiscState.FBSize); + if (object.m_misc_state.m_fb_size < 2 || object.m_misc_state.m_fb_size > 4) + fatalerror("unsupported m_fb_size %d\n", object.m_misc_state.m_fb_size); - const int blend_index = (object.OtherModes.alpha_cvg_select ? 2 : 0) | ((object.OtherModes.rgb_dither_sel < 3) ? 1 : 0); - const int cycle0 = ((object.OtherModes.sample_type & 1) << 1) | (object.OtherModes.bi_lerp0 & 1); - const int cycle1 = ((object.OtherModes.sample_type & 1) << 1) | (object.OtherModes.bi_lerp1 & 1); + const INT32 blend_index = (object.m_other_modes.alpha_cvg_select ? 2 : 0) | ((object.m_other_modes.rgb_dither_sel < 3) ? 1 : 0); + const INT32 cycle0 = ((object.m_other_modes.sample_type & 1) << 1) | (object.m_other_modes.bi_lerp0 & 1); + const INT32 cycle1 = ((object.m_other_modes.sample_type & 1) << 1) | (object.m_other_modes.bi_lerp1 & 1); INT32 sss = 0; INT32 sst = 0; - if (object.OtherModes.persp_tex_en) + if (object.m_other_modes.persp_tex_en) { - TCDiv(s.w >> 16, t.w >> 16, w.w >> 16, &sss, &sst); + tc_div(s.w >> 16, t.w >> 16, w.w >> 16, &sss, &sst); } else { - TCDivNoPersp(s.w >> 16, t.w >> 16, w.w >> 16, &sss, &sst); + tc_div_no_perspective(s.w >> 16, t.w >> 16, w.w >> 16, &sss, &sst); } userdata->m_start_span = true; - for (int j = 0; j <= length; j++) + for (INT32 j = 0; j <= length; j++) { - int sr = r.w >> 14; - int sg = g.w >> 14; - int sb = b.w >> 14; - int sa = a.w >> 14; - int sz = (z.w >> 10) & 0x3fffff; - Color c1; - Color c2; + INT32 sr = r.w >> 14; + INT32 sg = g.w >> 14; + INT32 sb = b.w >> 14; + INT32 sa = a.w >> 14; + INT32 sz = (z.w >> 10) & 0x3fffff; + color_t c1; + color_t c2; - bool valid_x = (flip) ? (x >= xend_scissored) : (x <= xend_scissored); + const bool valid_x = (flip) ? (x >= xend_scissored) : (x <= xend_scissored); if (x >= clipx1 && x < clipx2 && valid_x) { - UINT32 compidx = compressed_cvmasks[userdata->m_cvg[x]]; - userdata->CurrentPixCvg = cvarray[compidx].cvg; - userdata->CurrentCvgBit = cvarray[compidx].cvbit; - UINT8 offx = cvarray[compidx].xoff; - UINT8 offy = cvarray[compidx].yoff; + const UINT32 compidx = m_compressed_cvmasks[userdata->m_cvg[x]]; + userdata->m_current_pix_cvg = cvarray[compidx].cvg; + userdata->m_current_cvg_bit = cvarray[compidx].cvbit; + const UINT8 offx = cvarray[compidx].xoff; + const UINT8 offy = cvarray[compidx].yoff; //lookup_cvmask_derivatives(userdata->m_cvg[x], &offx, &offy, userdata); - TexPipe.LOD2Cycle(&sss, &sst, s.w, t.w, w.w, dsinc, dtinc, dwinc, prim_tile, &tile1, &tile2, userdata, object); + m_tex_pipe.lod_2cycle(&sss, &sst, s.w, t.w, w.w, dsinc, dtinc, dwinc, prim_tile, &tile1, &tile2, userdata, object); news = userdata->m_precomp_s; newt = userdata->m_precomp_t; - TexPipe.LOD2CycleLimited(&news, &newt, s.w + dsinc, t.w + dtinc, w.w + dwinc, dsinc, dtinc, dwinc, prim_tile, &newtile1, object); - - RGBAZCorrectTriangle(offx, offy, &sr, &sg, &sb, &sa, &sz, userdata, object); - RGBAZClip(sr, sg, sb, sa, &sz, userdata); - - ((TexPipe).*(TexPipe.cycle[cycle0]))(&userdata->Texel0Color, &userdata->Texel0Color, sss, sst, tile1, 0, userdata, object, m_clamp_s_diff, m_clamp_t_diff); - ((TexPipe).*(TexPipe.cycle[cycle1]))(&userdata->Texel1Color, &userdata->Texel0Color, sss, sst, tile2, 1, userdata, object, m_clamp_s_diff, m_clamp_t_diff); - ((TexPipe).*(TexPipe.cycle[cycle1]))(&userdata->NextTexelColor, &userdata->NextTexelColor, sss, sst, tile2, 1, userdata, object, m_clamp_s_diff, m_clamp_t_diff); - - userdata->NoiseColor.i.r = userdata->NoiseColor.i.g = userdata->NoiseColor.i.b = rand() << 3; // Not accurate - userdata->CombinedColor.i.r = ColorCombinerEquation(*userdata->ColorInputs.combiner_rgbsub_a_r[0], - *userdata->ColorInputs.combiner_rgbsub_b_r[0], - *userdata->ColorInputs.combiner_rgbmul_r[0], - *userdata->ColorInputs.combiner_rgbadd_r[0]); - userdata->CombinedColor.i.g = ColorCombinerEquation(*userdata->ColorInputs.combiner_rgbsub_a_g[0], - *userdata->ColorInputs.combiner_rgbsub_b_g[0], - *userdata->ColorInputs.combiner_rgbmul_g[0], - *userdata->ColorInputs.combiner_rgbadd_g[0]); - userdata->CombinedColor.i.b = ColorCombinerEquation(*userdata->ColorInputs.combiner_rgbsub_a_b[0], - *userdata->ColorInputs.combiner_rgbsub_b_b[0], - *userdata->ColorInputs.combiner_rgbmul_b[0], - *userdata->ColorInputs.combiner_rgbadd_b[0]); - userdata->CombinedColor.i.a = AlphaCombinerEquation(*userdata->ColorInputs.combiner_alphasub_a[0], - *userdata->ColorInputs.combiner_alphasub_b[0], - *userdata->ColorInputs.combiner_alphamul[0], - *userdata->ColorInputs.combiner_alphaadd[0]); - - userdata->Texel0Color = userdata->Texel1Color; - userdata->Texel1Color = userdata->NextTexelColor; - - userdata->PixelColor.i.r = ColorCombinerEquation(*userdata->ColorInputs.combiner_rgbsub_a_r[1], - *userdata->ColorInputs.combiner_rgbsub_b_r[1], - *userdata->ColorInputs.combiner_rgbmul_r[1], - *userdata->ColorInputs.combiner_rgbadd_r[1]); - userdata->PixelColor.i.g = ColorCombinerEquation(*userdata->ColorInputs.combiner_rgbsub_a_g[1], - *userdata->ColorInputs.combiner_rgbsub_b_g[1], - *userdata->ColorInputs.combiner_rgbmul_g[1], - *userdata->ColorInputs.combiner_rgbadd_g[1]); - userdata->PixelColor.i.b = ColorCombinerEquation(*userdata->ColorInputs.combiner_rgbsub_a_b[1], - *userdata->ColorInputs.combiner_rgbsub_b_b[1], - *userdata->ColorInputs.combiner_rgbmul_b[1], - *userdata->ColorInputs.combiner_rgbadd_b[1]); - userdata->PixelColor.i.a = AlphaCombinerEquation(*userdata->ColorInputs.combiner_alphasub_a[1], - *userdata->ColorInputs.combiner_alphasub_b[1], - *userdata->ColorInputs.combiner_alphamul[1], - *userdata->ColorInputs.combiner_alphaadd[1]); + m_tex_pipe.lod_2cycle_limited(&news, &newt, s.w + dsinc, t.w + dtinc, w.w + dwinc, dsinc, dtinc, dwinc, prim_tile, &newtile1, object); + + rgbaz_correct_triangle(offx, offy, &sr, &sg, &sb, &sa, &sz, userdata, object); + rgbaz_clip(sr, sg, sb, sa, &sz, userdata); + + ((m_tex_pipe).*(m_tex_pipe.m_cycle[cycle0]))(&userdata->m_texel0_color, &userdata->m_texel0_color, sss, sst, tile1, 0, userdata, object, clamp_s_diff, clamp_t_diff); + ((m_tex_pipe).*(m_tex_pipe.m_cycle[cycle1]))(&userdata->m_texel1_color, &userdata->m_texel0_color, sss, sst, tile2, 1, userdata, object, clamp_s_diff, clamp_t_diff); + ((m_tex_pipe).*(m_tex_pipe.m_cycle[cycle1]))(&userdata->m_next_texel_color, &userdata->m_next_texel_color, sss, sst, tile2, 1, userdata, object, clamp_s_diff, clamp_t_diff); + + userdata->m_noise_color.i.r = userdata->m_noise_color.i.g = userdata->m_noise_color.i.b = rand() << 3; // Not accurate + userdata->m_combined_color.i.r = color_combiner_equation(*userdata->m_color_inputs.combiner_rgbsub_a_r[0], + *userdata->m_color_inputs.combiner_rgbsub_b_r[0], + *userdata->m_color_inputs.combiner_rgbmul_r[0], + *userdata->m_color_inputs.combiner_rgbadd_r[0]); + userdata->m_combined_color.i.g = color_combiner_equation(*userdata->m_color_inputs.combiner_rgbsub_a_g[0], + *userdata->m_color_inputs.combiner_rgbsub_b_g[0], + *userdata->m_color_inputs.combiner_rgbmul_g[0], + *userdata->m_color_inputs.combiner_rgbadd_g[0]); + userdata->m_combined_color.i.b = color_combiner_equation(*userdata->m_color_inputs.combiner_rgbsub_a_b[0], + *userdata->m_color_inputs.combiner_rgbsub_b_b[0], + *userdata->m_color_inputs.combiner_rgbmul_b[0], + *userdata->m_color_inputs.combiner_rgbadd_b[0]); + userdata->m_combined_color.i.a = alpha_combiner_equation(*userdata->m_color_inputs.combiner_alphasub_a[0], + *userdata->m_color_inputs.combiner_alphasub_b[0], + *userdata->m_color_inputs.combiner_alphamul[0], + *userdata->m_color_inputs.combiner_alphaadd[0]); + + userdata->m_texel0_color = userdata->m_texel1_color; + userdata->m_texel1_color = userdata->m_next_texel_color; + + userdata->m_pixel_color.i.r = color_combiner_equation(*userdata->m_color_inputs.combiner_rgbsub_a_r[1], + *userdata->m_color_inputs.combiner_rgbsub_b_r[1], + *userdata->m_color_inputs.combiner_rgbmul_r[1], + *userdata->m_color_inputs.combiner_rgbadd_r[1]); + userdata->m_pixel_color.i.g = color_combiner_equation(*userdata->m_color_inputs.combiner_rgbsub_a_g[1], + *userdata->m_color_inputs.combiner_rgbsub_b_g[1], + *userdata->m_color_inputs.combiner_rgbmul_g[1], + *userdata->m_color_inputs.combiner_rgbadd_g[1]); + userdata->m_pixel_color.i.b = color_combiner_equation(*userdata->m_color_inputs.combiner_rgbsub_a_b[1], + *userdata->m_color_inputs.combiner_rgbsub_b_b[1], + *userdata->m_color_inputs.combiner_rgbmul_b[1], + *userdata->m_color_inputs.combiner_rgbadd_b[1]); + userdata->m_pixel_color.i.a = alpha_combiner_equation(*userdata->m_color_inputs.combiner_alphasub_a[1], + *userdata->m_color_inputs.combiner_alphasub_b[1], + *userdata->m_color_inputs.combiner_alphamul[1], + *userdata->m_color_inputs.combiner_alphaadd[1]); //Alpha coverage combiner - GetAlphaCvg(&userdata->PixelColor.i.a, userdata, object); + get_alpha_cvg(&userdata->m_pixel_color.i.a, userdata, object); - UINT32 curpixel = fb_index + x; - UINT32 zbcur = zb + curpixel; - UINT32 zhbcur = zhb + curpixel; + const UINT32 curpixel = fb_index + x; + const UINT32 zbcur = zb + curpixel; + const UINT32 zhbcur = zhb + curpixel; read_pixel(curpixel, userdata, object); - if(ZCompare(zbcur, zhbcur, sz, dzpix, userdata, object)) + if(z_compare(zbcur, zhbcur, sz, dzpix, userdata, object)) { - GetDitherValues(scanline, j, &cdith, &adith, object); + get_dither_values(scanline, j, &cdith, &adith, object); - if (((userdata->BlendEnable << 2) | blend_index) != 5 && machine().input().code_pressed(KEYCODE_B)) + if (((userdata->m_blend_enable << 2) | blend_index) != 5 && machine().input().code_pressed(KEYCODE_B)) { - printf("2:%d\n", (userdata->BlendEnable << 2) | blend_index); + printf("2:%d\n", (userdata->m_blend_enable << 2) | blend_index); } - bool rendered = ((&Blender)->*(Blender.blend2[(userdata->BlendEnable << 2) | blend_index]))(&fir, &fig, &fib, cdith, adith, partialreject, sel0, sel1, userdata, object); + bool rendered = ((&m_blender)->*(m_blender.blend2[(userdata->m_blend_enable << 2) | blend_index]))(&fir, &fig, &fib, cdith, adith, partialreject, sel0, sel1, userdata, object); if (rendered) { write_pixel(curpixel, fir, fig, fib, userdata, object); - if (object.OtherModes.z_update_en) + if (object.m_other_modes.z_update_en) { - ZStore(object, zbcur, zhbcur, sz, userdata->m_dzpix_enc); + z_store(object, zbcur, zhbcur, sz, userdata->m_dzpix_enc); } } } @@ -733,33 +731,33 @@ void n64_rdp::SpanDraw2Cycle(INT32 scanline, const extent_t &extent, const rdp_p } } -void n64_rdp::SpanDrawCopy(INT32 scanline, const extent_t &extent, const rdp_poly_state &object, int threadid) +void n64_rdp::span_draw_copy(INT32 scanline, const extent_t &extent, const rdp_poly_state &object, INT32 threadid) { - const int clipx1 = object.Scissor.m_xh; - const int clipx2 = object.Scissor.m_xl; - const int tilenum = object.tilenum; + const INT32 clipx1 = object.m_scissor.m_xh; + const INT32 clipx2 = object.m_scissor.m_xl; + const INT32 tilenum = object.tilenum; const bool flip = object.flip; - rdp_span_aux *userdata = (rdp_span_aux*)extent.userdata; - const int xstart = extent.startx; - const int xend = userdata->m_unscissored_rx; - const int xend_scissored = extent.stopx; - const int xinc = flip ? 1 : -1; - const int length = flip ? (xstart - xend) : (xend - xstart); + rdp_span_aux* userdata = (rdp_span_aux*)extent.userdata; + const INT32 xstart = extent.startx; + const INT32 xend = userdata->m_unscissored_rx; + const INT32 xend_scissored = extent.stopx; + const INT32 xinc = flip ? 1 : -1; + const INT32 length = flip ? (xstart - xend) : (xend - xstart); SpanParam s; s.w = extent.param[SPAN_S].start; SpanParam t; t.w = extent.param[SPAN_T].start; - const int ds = object.SpanBase.m_span_ds / 4; - const int dt = object.SpanBase.m_span_dt / 4; - const int dsinc = flip ? (ds) : -ds; - const int dtinc = flip ? (dt) : -dt; + const INT32 ds = object.m_span_base.m_span_ds / 4; + const INT32 dt = object.m_span_base.m_span_dt / 4; + const INT32 dsinc = flip ? (ds) : -ds; + const INT32 dtinc = flip ? (dt) : -dt; - const int fb_index = object.MiscState.FBWidth * scanline; + const INT32 fb_index = object.m_misc_state.m_fb_width * scanline; - int x = xend; + INT32 x = xend; - for (int j = 0; j <= length; j++) + for (INT32 j = 0; j <= length; j++) { const bool valid_x = (flip) ? (x >= xend_scissored) : (x <= xend_scissored); @@ -767,12 +765,12 @@ void n64_rdp::SpanDrawCopy(INT32 scanline, const extent_t &extent, const rdp_pol { INT32 sss = s.h.h; INT32 sst = t.h.h; - TexPipe.Copy(&userdata->Texel0Color, sss, sst, tilenum, object, userdata); + m_tex_pipe.copy(&userdata->m_texel0_color, sss, sst, tilenum, object, userdata); UINT32 curpixel = fb_index + x; - if ((userdata->Texel0Color.i.a != 0) || (!object.OtherModes.alpha_compare_en)) + if ((userdata->m_texel0_color.i.a != 0) || (!object.m_other_modes.alpha_compare_en)) { - copy_pixel(curpixel, userdata->Texel0Color.i.r, userdata->Texel0Color.i.g, userdata->Texel0Color.i.b, userdata->Texel0Color.i.a ? 7 : 0, object); + copy_pixel(curpixel, userdata->m_texel0_color.i.r, userdata->m_texel0_color.i.g, userdata->m_texel0_color.i.b, userdata->m_texel0_color.i.a ? 7 : 0, object); } } @@ -782,27 +780,27 @@ void n64_rdp::SpanDrawCopy(INT32 scanline, const extent_t &extent, const rdp_pol } } -void n64_rdp::SpanDrawFill(INT32 scanline, const extent_t &extent, const rdp_poly_state &object, int threadid) +void n64_rdp::span_draw_fill(INT32 scanline, const extent_t &extent, const rdp_poly_state &object, INT32 threadid) { - assert(object.MiscState.FBSize >= 2 && object.MiscState.FBSize < 4); + assert(object.m_misc_state.m_fb_size >= 2 && object.m_misc_state.m_fb_size < 4); const bool flip = object.flip; - const int clipx1 = object.Scissor.m_xh; - const int clipx2 = object.Scissor.m_xl; + const INT32 clipx1 = object.m_scissor.m_xh; + const INT32 clipx2 = object.m_scissor.m_xl; - const int xinc = flip ? 1 : -1; + const INT32 xinc = flip ? 1 : -1; - const int fb_index = object.MiscState.FBWidth * scanline; + const INT32 fb_index = object.m_misc_state.m_fb_width * scanline; - const int xstart = extent.startx; - const int xend_scissored = extent.stopx; + const INT32 xstart = extent.startx; + const INT32 xend_scissored = extent.stopx; - int x = xend_scissored; + INT32 x = xend_scissored; - const int length = flip ? (xstart - xend_scissored) : (xend_scissored - xstart); + const INT32 length = flip ? (xstart - xend_scissored) : (xend_scissored - xstart); - for (int j = 0; j <= length; j++) + for (INT32 j = 0; j <= length; j++) { if (x >= clipx1 && x < clipx2) { diff --git a/src/mame/video/rdptpipe.c b/src/mame/video/rdptpipe.c index 6e54267502d..20428ec8999 100644 --- a/src/mame/video/rdptpipe.c +++ b/src/mame/video/rdptpipe.c @@ -19,26 +19,26 @@ #define RELATIVE(x, y) ((((x) >> 3) - (y)) << 3) | (x & 7); -void N64TexturePipeT::SetMachine(running_machine &machine) +void n64_texture_pipe_t::set_machine(running_machine &machine) { - n64_state *state = machine.driver_data<n64_state>(); + n64_state* state = machine.driver_data<n64_state>(); m_rdp = state->m_rdp; - for(int i = 0; i < 0x10000; i++) + for(INT32 i = 0; i < 0x10000; i++) { - Color c; - c.i.r = m_rdp->ReplicatedRGBA[(i >> 11) & 0x1f]; - c.i.g = m_rdp->ReplicatedRGBA[(i >> 6) & 0x1f]; - c.i.b = m_rdp->ReplicatedRGBA[(i >> 1) & 0x1f]; + color_t c; + c.i.r = m_rdp->m_replicated_rgba[(i >> 11) & 0x1f]; + c.i.g = m_rdp->m_replicated_rgba[(i >> 6) & 0x1f]; + c.i.b = m_rdp->m_replicated_rgba[(i >> 1) & 0x1f]; c.i.a = (i & 1) ? 0xff : 0x00; - Expand16To32Table[i] = c.c; + m_expand_16to32_table[i] = c.c; } } -void N64TexturePipeT::Mask(INT32* S, INT32* T, INT32 num, const rdp_poly_state& object) +void n64_texture_pipe_t::mask(INT32* S, INT32* T, INT32 num, const rdp_poly_state& object) { - const N64Tile* tiles = object.m_tiles; + const n64_tile_t* tiles = object.m_tiles; if (tiles[num].mask_s) { @@ -83,18 +83,18 @@ void N64TexturePipeT::Mask(INT32* S, INT32* T, INT32 num, const rdp_poly_state& param1 &= maskbits_##coord; \ } -void N64TexturePipeT::MaskCoupled(INT32* S, INT32* S1, INT32* T, INT32* T1, INT32 num, const rdp_poly_state& object) +void n64_texture_pipe_t::mask_coupled(INT32* S, INT32* S1, INT32* T, INT32* T1, INT32 num, const rdp_poly_state& object) { - const N64Tile* tiles = object.m_tiles; + const n64_tile_t* tiles = object.m_tiles; if (tiles[num].mask_s) { - INT32 maskbits_s = m_maskbits_table[tiles[num].mask_s]; + const INT32 maskbits_s = m_maskbits_table[tiles[num].mask_s]; if (tiles[num].ms) { - INT32 swrapthreshold = tiles[num].mask_s > 10 ? 10 : tiles[num].mask_s; - INT32 wrap = (*S >> swrapthreshold) & 1; - INT32 wrap1 = (*S1 >> swrapthreshold) & 1; + const INT32 swrapthreshold = tiles[num].mask_s > 10 ? 10 : tiles[num].mask_s; + const INT32 wrap = (*S >> swrapthreshold) & 1; + const INT32 wrap1 = (*S1 >> swrapthreshold) & 1; if (wrap) { *S = (~(*S)); @@ -110,12 +110,12 @@ void N64TexturePipeT::MaskCoupled(INT32* S, INT32* S1, INT32* T, INT32* T1, INT3 if (tiles[num].mask_t) { - INT32 maskbits_t = m_maskbits_table[tiles[num].mask_t]; + const INT32 maskbits_t = m_maskbits_table[tiles[num].mask_t]; if (tiles[num].mt) { - INT32 twrapthreshold = tiles[num].mask_t > 10 ? 10 : tiles[num].mask_t; - INT32 wrap = (*T >> twrapthreshold) & 1; - INT32 wrap1 = (*T1 >> twrapthreshold) & 1; + const INT32 twrapthreshold = tiles[num].mask_t > 10 ? 10 : tiles[num].mask_t; + const INT32 wrap = (*T >> twrapthreshold) & 1; + const INT32 wrap1 = (*T1 >> twrapthreshold) & 1; if (wrap) { *T = (~(*T)); @@ -143,9 +143,9 @@ void N64TexturePipeT::MaskCoupled(INT32* S, INT32* S1, INT32* T, INT32* T1, INT3 param = SIGN16(param); \ max = ((param >> 3) >= tiles[num].coord##h); -void N64TexturePipeT::ShiftCycle(INT32* S, INT32* T, INT32* maxs, INT32* maxt, UINT32 num, const rdp_poly_state& object) +void n64_texture_pipe_t::shift_cycle(INT32* S, INT32* T, INT32* maxs, INT32* maxt, UINT32 num, const rdp_poly_state& object) { - const N64Tile* tiles = object.m_tiles; + const n64_tile_t* tiles = object.m_tiles; *S = SIGN16(*S); if (tiles[num].shift_s < 11) { @@ -171,9 +171,9 @@ void N64TexturePipeT::ShiftCycle(INT32* S, INT32* T, INT32* maxs, INT32* maxt, U *maxt = ((*T >> 3) >= tiles[num].th); } -void N64TexturePipeT::ShiftCopy(INT32* S, INT32* T, UINT32 num, const rdp_poly_state& object) +void n64_texture_pipe_t::shift_copy(INT32* S, INT32* T, UINT32 num, const rdp_poly_state& object) { - const N64Tile* tiles = object.m_tiles; + const n64_tile_t* tiles = object.m_tiles; *S = SIGN16(*S); *T = SIGN16(*T); if (tiles[num].shift_s < 11)//?-? tcu_tile @@ -219,9 +219,9 @@ void N64TexturePipeT::ShiftCopy(INT32* S, INT32* T, UINT32 num, const rdp_poly_s param = (SIGN17(param) >> 5) & 0x1fff; \ } -void N64TexturePipeT::ClampCycle(INT32* S, INT32* T, INT32* SFRAC, INT32* TFRAC, INT32 maxs, INT32 maxt, INT32 num, rdp_span_aux *userdata, const rdp_poly_state& object, INT32 *m_clamp_s_diff, INT32 *m_clamp_t_diff) +void n64_texture_pipe_t::clamp_cycle(INT32* S, INT32* T, INT32* SFRAC, INT32* TFRAC, INT32 maxs, INT32 maxt, INT32 num, rdp_span_aux* userdata, const rdp_poly_state& object, INT32* m_clamp_s_diff, INT32* m_clamp_t_diff) { - const N64Tile* tiles = object.m_tiles; + const n64_tile_t* tiles = object.m_tiles; if (tiles[num].cs || !tiles[num].mask_s) { @@ -268,13 +268,11 @@ void N64TexturePipeT::ClampCycle(INT32* S, INT32* T, INT32* SFRAC, INT32* TFRAC, } } -void N64TexturePipeT::ClampCycleLight(INT32* S, INT32* T, bool maxs, bool maxt, INT32 num, rdp_span_aux *userdata, const rdp_poly_state& object, INT32 *m_clamp_s_diff, INT32 *m_clamp_t_diff) +void n64_texture_pipe_t::clamp_cycle_light(INT32* S, INT32* T, bool maxs, bool maxt, INT32 num, rdp_span_aux* userdata, const rdp_poly_state& object, INT32* m_clamp_s_diff, INT32* m_clamp_t_diff) { - const N64Tile* tiles = object.m_tiles; - int dos = tiles[num].cs || !tiles[num].mask_s; - int dot = tiles[num].ct || !tiles[num].mask_t; + const n64_tile_t* tiles = object.m_tiles; - if (dos) + if (tiles[num].cs || !tiles[num].mask_s) { if (*S & 0x10000) { @@ -294,7 +292,7 @@ void N64TexturePipeT::ClampCycleLight(INT32* S, INT32* T, bool maxs, bool maxt, *S = (SIGN17(*S) >> 5) & 0x1fff; } - if (dot) + if (tiles[num].ct || !tiles[num].mask_t) { if (*T & 0x10000) { @@ -315,18 +313,17 @@ void N64TexturePipeT::ClampCycleLight(INT32* S, INT32* T, bool maxs, bool maxt, } } -void N64TexturePipeT::CycleNearest(Color* TEX, Color* prev, INT32 SSS, INT32 SST, UINT32 tilenum, UINT32 cycle, rdp_span_aux *userdata, const rdp_poly_state& object, INT32 *m_clamp_s_diff, INT32 *m_clamp_t_diff) +void n64_texture_pipe_t::cycle_nearest(color_t* TEX, color_t* prev, INT32 SSS, INT32 SST, UINT32 tilenum, UINT32 cycle, rdp_span_aux* userdata, const rdp_poly_state& object, INT32* m_clamp_s_diff, INT32* m_clamp_t_diff) { - const N64Tile* tiles = object.m_tiles; - const N64Tile& tile = tiles[tilenum]; - UINT32 tformat = tile.format; - UINT32 tsize = tile.size; - UINT32 tpal = tile.palette; - UINT32 index = (tformat << 4) | (tsize << 2) | ((UINT32) object.OtherModes.en_tlut << 1) | (UINT32) object.OtherModes.tlut_type; + const n64_tile_t* tiles = object.m_tiles; + const n64_tile_t& tile = tiles[tilenum]; + const UINT32 tformat = tile.format; + const UINT32 tsize = tile.size; + const UINT32 tpal = tile.palette; + const UINT32 index = (tformat << 4) | (tsize << 2) | ((UINT32) object.m_other_modes.en_tlut << 1) | (UINT32) object.m_other_modes.tlut_type; #define TRELATIVE(x, y) ((((x) >> 3) - (y)) << 3) | (x & 7); - int convert = object.OtherModes.convert_one && cycle; - Color t0; + color_t t0; INT32 sss1 = SSS; INT32 maxs; @@ -338,22 +335,22 @@ void N64TexturePipeT::CycleNearest(Color* TEX, Color* prev, INT32 SSS, INT32 SST SHIFT_CYCLE(sst1, maxt, tilenum, t); sst1 = TRELATIVE(sst1, tile.tl); - ClampCycleLight(&sss1, &sst1, maxs, maxt, tilenum, userdata, object, m_clamp_s_diff, m_clamp_t_diff); - Mask(&sss1, &sst1, tilenum, object); + clamp_cycle_light(&sss1, &sst1, maxs, maxt, tilenum, userdata, object, m_clamp_s_diff, m_clamp_t_diff); + mask(&sss1, &sst1, tilenum, object); UINT32 tbase = tile.tmem + ((tile.line * sst1) & 0x1ff); - t0.c = ((this)->*(TexelFetch[index]))(sss1, sst1, tbase, tpal, userdata); + t0.c = ((this)->*(m_texel_fetch[index]))(sss1, sst1, tbase, tpal, userdata); - INT32 newk0 = SIGN9(m_rdp->GetK0()); - INT32 newk1 = SIGN9(m_rdp->GetK1()); - INT32 newk2 = SIGN9(m_rdp->GetK2()); - INT32 newk3 = SIGN9(m_rdp->GetK3()); - INT32 invk0 = ~newk0; - INT32 invk1 = ~newk1; - INT32 invk2 = ~newk2; - INT32 invk3 = ~newk3; - if (convert) + const INT32 newk0 = SIGN9(m_rdp->get_k0()); + const INT32 newk1 = SIGN9(m_rdp->get_k1()); + const INT32 newk2 = SIGN9(m_rdp->get_k2()); + const INT32 newk3 = SIGN9(m_rdp->get_k3()); + const INT32 invk0 = ~newk0; + const INT32 invk1 = ~newk1; + const INT32 invk2 = ~newk2; + const INT32 invk3 = ~newk3; + if (object.m_other_modes.convert_one && cycle) { t0 = *prev; } @@ -370,17 +367,17 @@ void N64TexturePipeT::CycleNearest(Color* TEX, Color* prev, INT32 SSS, INT32 SST TEX->i.a &= 0x1ff; } -void N64TexturePipeT::CycleNearestLerp(Color* TEX, Color* prev, INT32 SSS, INT32 SST, UINT32 tilenum, UINT32 cycle, rdp_span_aux *userdata, const rdp_poly_state& object, INT32 *m_clamp_s_diff, INT32 *m_clamp_t_diff) +void n64_texture_pipe_t::cycle_nearest_lerp(color_t* TEX, color_t* prev, INT32 SSS, INT32 SST, UINT32 tilenum, UINT32 cycle, rdp_span_aux* userdata, const rdp_poly_state& object, INT32* m_clamp_s_diff, INT32* m_clamp_t_diff) { - const N64Tile* tiles = object.m_tiles; - const N64Tile& tile = tiles[tilenum]; - UINT32 tformat = tile.format; - UINT32 tsize = tile.size; - UINT32 tpal = tile.palette; - UINT32 index = (tformat << 4) | (tsize << 2) | ((UINT32) object.OtherModes.en_tlut << 1) | (UINT32) object.OtherModes.tlut_type; + const n64_tile_t* tiles = object.m_tiles; + const n64_tile_t& tile = tiles[tilenum]; + const UINT32 tformat = tile.format; + const UINT32 tsize = tile.size; + const UINT32 tpal = tile.palette; + const UINT32 index = (tformat << 4) | (tsize << 2) | ((UINT32) object.m_other_modes.en_tlut << 1) | (UINT32) object.m_other_modes.tlut_type; #define TRELATIVE(x, y) ((((x) >> 3) - (y)) << 3) | (x & 7); - Color t0; + color_t t0; INT32 sss1 = SSS; INT32 maxs; @@ -392,23 +389,22 @@ void N64TexturePipeT::CycleNearestLerp(Color* TEX, Color* prev, INT32 SSS, INT32 SHIFT_CYCLE(sst1, maxt, tilenum, t); sst1 = TRELATIVE(sst1, tile.tl); - ClampCycleLight(&sss1, &sst1, maxs, maxt, tilenum, userdata, object, m_clamp_s_diff, m_clamp_t_diff); - Mask(&sss1, &sst1, tilenum, object); + clamp_cycle_light(&sss1, &sst1, maxs, maxt, tilenum, userdata, object, m_clamp_s_diff, m_clamp_t_diff); + mask(&sss1, &sst1, tilenum, object); UINT32 tbase = tile.tmem + ((tile.line * sst1) & 0x1ff); - (*TEX).c = ((this)->*(TexelFetch[index]))(sss1, sst1, tbase, tpal, userdata); + (*TEX).c = ((this)->*(m_texel_fetch[index]))(sss1, sst1, tbase, tpal, userdata); } -void N64TexturePipeT::CycleLinear(Color* TEX, Color* prev, INT32 SSS, INT32 SST, UINT32 tilenum, UINT32 cycle, rdp_span_aux *userdata, const rdp_poly_state& object, INT32 *m_clamp_s_diff, INT32 *m_clamp_t_diff) +void n64_texture_pipe_t::cycle_linear(color_t* TEX, color_t* prev, INT32 SSS, INT32 SST, UINT32 tilenum, UINT32 cycle, rdp_span_aux* userdata, const rdp_poly_state& object, INT32* m_clamp_s_diff, INT32* m_clamp_t_diff) { - const N64Tile* tiles = object.m_tiles; - const N64Tile& tile = tiles[tilenum]; + const n64_tile_t* tiles = object.m_tiles; + const n64_tile_t& tile = tiles[tilenum]; #define TRELATIVE(x, y) ((((x) >> 3) - (y)) << 3) | (x & 7); - int convert = object.OtherModes.convert_one && cycle; - UINT32 tpal = tile.palette; - UINT32 index = (tile.format << 4) | (tile.size << 2) | ((UINT32) object.OtherModes.en_tlut << 1) | (UINT32) object.OtherModes.tlut_type; + const UINT32 tpal = tile.palette; + const UINT32 index = (tile.format << 4) | (tile.size << 2) | ((UINT32) object.m_other_modes.en_tlut << 1) | (UINT32) object.m_other_modes.tlut_type; INT32 invsf = 0; INT32 sss1 = SSS; @@ -446,17 +442,17 @@ void N64TexturePipeT::CycleLinear(Color* TEX, Color* prev, INT32 SSS, INT32 SST, sfrac <<= 3; tfrac <<= 3; - Color t0; - t0.c = ((this)->*(TexelFetch[index]))(sss1, sst1, tbase, tpal, userdata); - INT32 newk0 = SIGN9(m_rdp->GetK0()); - INT32 newk1 = SIGN9(m_rdp->GetK1()); - INT32 newk2 = SIGN9(m_rdp->GetK2()); - INT32 newk3 = SIGN9(m_rdp->GetK3()); - INT32 invk0 = ~newk0; - INT32 invk1 = ~newk1; - INT32 invk2 = ~newk2; - INT32 invk3 = ~newk3; - if (convert) + color_t t0; + t0.c = ((this)->*(m_texel_fetch[index]))(sss1, sst1, tbase, tpal, userdata); + const INT32 newk0 = SIGN9(m_rdp->get_k0()); + const INT32 newk1 = SIGN9(m_rdp->get_k1()); + const INT32 newk2 = SIGN9(m_rdp->get_k2()); + const INT32 newk3 = SIGN9(m_rdp->get_k3()); + const INT32 invk0 = ~newk0; + const INT32 invk1 = ~newk1; + const INT32 invk2 = ~newk2; + const INT32 invk3 = ~newk3; + if (object.m_other_modes.convert_one && cycle) { t0 = *prev; } @@ -471,16 +467,14 @@ void N64TexturePipeT::CycleLinear(Color* TEX, Color* prev, INT32 SSS, INT32 SST, TEX->i.a &= 0x1ff; } -void N64TexturePipeT::CycleLinearLerp(Color* TEX, Color* prev, INT32 SSS, INT32 SST, UINT32 tilenum, UINT32 cycle, rdp_span_aux *userdata, const rdp_poly_state& object, INT32 *m_clamp_s_diff, INT32 *m_clamp_t_diff) +void n64_texture_pipe_t::cycle_linear_lerp(color_t* TEX, color_t* prev, INT32 SSS, INT32 SST, UINT32 tilenum, UINT32 cycle, rdp_span_aux* userdata, const rdp_poly_state& object, INT32* m_clamp_s_diff, INT32* m_clamp_t_diff) { - const N64Tile* tiles = object.m_tiles; - const N64Tile& tile = tiles[tilenum]; + const n64_tile_t* tiles = object.m_tiles; + const n64_tile_t& tile = tiles[tilenum]; #define TRELATIVE(x, y) ((((x) >> 3) - (y)) << 3) | (x & 7); UINT32 tpal = tile.palette; - UINT32 index = (tile.format << 4) | (tile.size << 2) | ((UINT32) object.OtherModes.en_tlut << 1) | (UINT32) object.OtherModes.tlut_type; - - int center = 0; + UINT32 index = (tile.format << 4) | (tile.size << 2) | ((UINT32) object.m_other_modes.en_tlut << 1) | (UINT32) object.m_other_modes.tlut_type; INT32 invsf = 0; INT32 sss1 = SSS; @@ -516,21 +510,21 @@ void N64TexturePipeT::CycleLinearLerp(Color* TEX, Color* prev, INT32 SSS, INT32 invtf <<= 3; } - center = (sfrac == 0x10) && (tfrac == 0x10) && object.OtherModes.mid_texel; + INT32 center = (sfrac == 0x10) && (tfrac == 0x10) && object.m_other_modes.mid_texel; sfrac <<= 3; tfrac <<= 3; - Color t1; - Color t2; - t1.c = ((this)->*(TexelFetch[index]))(sss2, sst1, tbase1, tpal, userdata); - t2.c = ((this)->*(TexelFetch[index]))(sss1, sst2, tbase2, tpal, userdata); + color_t t1; + color_t t2; + t1.c = ((this)->*(m_texel_fetch[index]))(sss2, sst1, tbase1, tpal, userdata); + t2.c = ((this)->*(m_texel_fetch[index]))(sss1, sst2, tbase2, tpal, userdata); if (!center) { if (upper) { - Color t3; - t3.c = ((this)->*(TexelFetch[index]))(sss2, sst2, tbase2, tpal, userdata); + color_t t3; + t3.c = ((this)->*(m_texel_fetch[index]))(sss2, sst2, tbase2, tpal, userdata); TEX->i.r = t3.i.r + (((invsf * (t2.i.r - t3.i.r)) + (invtf * (t1.i.r - t3.i.r)) + 0x80) >> 8); TEX->i.g = t3.i.g + (((invsf * (t2.i.g - t3.i.g)) + (invtf * (t1.i.g - t3.i.g)) + 0x80) >> 8); TEX->i.b = t3.i.b + (((invsf * (t2.i.b - t3.i.b)) + (invtf * (t1.i.b - t3.i.b)) + 0x80) >> 8); @@ -538,8 +532,8 @@ void N64TexturePipeT::CycleLinearLerp(Color* TEX, Color* prev, INT32 SSS, INT32 } else { - Color t0; - t0.c = ((this)->*(TexelFetch[index]))(sss1, sst1, tbase1, tpal, userdata); + color_t t0; + t0.c = ((this)->*(m_texel_fetch[index]))(sss1, sst1, tbase1, tpal, userdata); TEX->i.r = t0.i.r + (((sfrac * (t1.i.r - t0.i.r)) + (tfrac * (t2.i.r - t0.i.r)) + 0x80) >> 8); TEX->i.g = t0.i.g + (((sfrac * (t1.i.g - t0.i.g)) + (tfrac * (t2.i.g - t0.i.g)) + 0x80) >> 8); TEX->i.b = t0.i.b + (((sfrac * (t1.i.b - t0.i.b)) + (tfrac * (t2.i.b - t0.i.b)) + 0x80) >> 8); @@ -552,10 +546,10 @@ void N64TexturePipeT::CycleLinearLerp(Color* TEX, Color* prev, INT32 SSS, INT32 } else { - Color t0; - Color t3; - t0.c = ((this)->*(TexelFetch[index]))(sss1, sst1, 1, tpal, userdata); - t3.c = ((this)->*(TexelFetch[index]))(sss2, sst2, tbase2, tpal, userdata); + color_t t0; + color_t t3; + t0.c = ((this)->*(m_texel_fetch[index]))(sss1, sst1, 1, tpal, userdata); + t3.c = ((this)->*(m_texel_fetch[index]))(sss2, sst2, tbase2, tpal, userdata); TEX->i.r = (t0.i.r + t1.i.r + t2.i.r + t3.i.r) >> 2; TEX->i.g = (t0.i.g + t1.i.g + t2.i.g + t3.i.g) >> 2; TEX->i.b = (t0.i.b + t1.i.b + t2.i.b + t3.i.b) >> 2; @@ -563,41 +557,41 @@ void N64TexturePipeT::CycleLinearLerp(Color* TEX, Color* prev, INT32 SSS, INT32 } } -void N64TexturePipeT::Copy(Color* TEX, INT32 SSS, INT32 SST, UINT32 tilenum, const rdp_poly_state& object, rdp_span_aux *userdata) +void n64_texture_pipe_t::copy(color_t* TEX, INT32 SSS, INT32 SST, UINT32 tilenum, const rdp_poly_state& object, rdp_span_aux* userdata) { - const N64Tile* tiles = object.m_tiles; - const N64Tile& tile = tiles[tilenum]; + const n64_tile_t* tiles = object.m_tiles; + const n64_tile_t& tile = tiles[tilenum]; INT32 sss1 = SSS; INT32 sst1 = SST; - ShiftCopy(&sss1, &sst1, tilenum, object); + shift_copy(&sss1, &sst1, tilenum, object); sss1 = TRELATIVE(sss1, tile.sl); sst1 = TRELATIVE(sst1, tile.tl); sss1 = (SIGN17(sss1) >> 5) & 0x1fff; sst1 = (SIGN17(sst1) >> 5) & 0x1fff; - Mask(&sss1, &sst1, tilenum, object); - TEX->c = Fetch(sss1, sst1, tilenum, object, userdata); + mask(&sss1, &sst1, tilenum, object); + TEX->c = fetch(sss1, sst1, tilenum, object, userdata); } -void N64TexturePipeT::LOD1Cycle(INT32* sss, INT32* sst, INT32 s, INT32 t, INT32 w, INT32 dsinc, INT32 dtinc, INT32 dwinc, rdp_span_aux *userdata, const rdp_poly_state& object) +void n64_texture_pipe_t::lod_1cycle(INT32* sss, INT32* sst, INT32 s, INT32 t, INT32 w, INT32 dsinc, INT32 dtinc, INT32 dwinc, rdp_span_aux* userdata, const rdp_poly_state& object) { - INT32 nextsw = (w + dwinc) >> 16; + const INT32 nextsw = (w + dwinc) >> 16; INT32 nexts = (s + dsinc) >> 16; INT32 nextt = (t + dtinc) >> 16; - if (object.OtherModes.persp_tex_en) + if (object.m_other_modes.persp_tex_en) { - m_rdp->TCDiv(nexts, nextt, nextsw, &nexts, &nextt); + m_rdp->tc_div(nexts, nextt, nextsw, &nexts, &nextt); } else { - m_rdp->TCDivNoPersp(nexts, nextt, nextsw, &nexts, &nextt); + m_rdp->tc_div_no_perspective(nexts, nextt, nextsw, &nexts, &nextt); } userdata->m_start_span = false; userdata->m_precomp_s = nexts; userdata->m_precomp_t = nextt; - INT32 lodclamp = (((*sst & 0x60000) > 0) | ((nextt & 0x60000) > 0)) || (((*sss & 0x60000) > 0) | ((nexts & 0x60000) > 0)); + const INT32 lodclamp = (((*sst & 0x60000) > 0) | ((nextt & 0x60000) > 0)) || (((*sss & 0x60000) > 0) | ((nexts & 0x60000) > 0)); INT32 horstep = SIGN17(nexts & 0x1ffff) - SIGN17(*sss & 0x1ffff); INT32 vertstep = SIGN17(nextt & 0x1ffff) - SIGN17(*sst & 0x1ffff); @@ -612,7 +606,6 @@ void N64TexturePipeT::LOD1Cycle(INT32* sss, INT32* sst, INT32 s, INT32 t, INT32 INT32 lod = (horstep >= vertstep) ? horstep : vertstep; - int tempanded; if (*sss & 0x40000) { *sss = 0x7fff; @@ -623,7 +616,7 @@ void N64TexturePipeT::LOD1Cycle(INT32* sss, INT32* sst, INT32 s, INT32 t, INT32 } else { - tempanded = *sss & 0x18000; + INT32 tempanded = *sss & 0x18000; if (tempanded == 0x8000) { *sss = 0x7fff; @@ -648,7 +641,7 @@ void N64TexturePipeT::LOD1Cycle(INT32* sss, INT32* sst, INT32 s, INT32 t, INT32 } else { - tempanded = *sst & 0x18000; + INT32 tempanded = *sst & 0x18000; if (tempanded == 0x8000) { *sst = 0x7fff; @@ -667,55 +660,55 @@ void N64TexturePipeT::LOD1Cycle(INT32* sss, INT32* sst, INT32 s, INT32 t, INT32 { lod = 0x7fff; } - else if (lod < object.MiscState.MinLevel) + else if (lod < object.m_misc_state.m_min_level) { - lod = object.MiscState.MinLevel; + lod = object.m_misc_state.m_min_level; } - bool magnify = (lod < 32); - INT32 l_tile = m_rdp->GetLog2((lod >> 5) & 0xff); - bool distant = ((lod & 0x6000) || (l_tile >= object.MiscState.MaxLevel)); + INT32 l_tile = m_rdp->get_log2((lod >> 5) & 0xff); + const bool magnify = (lod < 32); + const bool distant = ((lod & 0x6000) || (l_tile >= object.m_misc_state.m_max_level)); - userdata->LODFraction = ((lod << 3) >> l_tile) & 0xff; + userdata->m_lod_fraction = ((lod << 3) >> l_tile) & 0xff; - if(!object.OtherModes.sharpen_tex_en && !object.OtherModes.detail_tex_en) + if(!object.m_other_modes.sharpen_tex_en && !object.m_other_modes.detail_tex_en) { if (distant) { - userdata->LODFraction = 0xff; + userdata->m_lod_fraction = 0xff; } else if (magnify) { - userdata->LODFraction = 0; + userdata->m_lod_fraction = 0; } } - if(object.OtherModes.sharpen_tex_en && magnify) + if(object.m_other_modes.sharpen_tex_en && magnify) { - userdata->LODFraction |= 0x100; + userdata->m_lod_fraction |= 0x100; } } -void N64TexturePipeT::LOD2Cycle(INT32* sss, INT32* sst, INT32 s, INT32 t, INT32 w, INT32 dsinc, INT32 dtinc, INT32 dwinc, INT32 prim_tile, INT32* t1, INT32* t2, rdp_span_aux *userdata, const rdp_poly_state& object) +void n64_texture_pipe_t::lod_2cycle(INT32* sss, INT32* sst, INT32 s, INT32 t, INT32 w, INT32 dsinc, INT32 dtinc, INT32 dwinc, INT32 prim_tile, INT32* t1, INT32* t2, rdp_span_aux* userdata, const rdp_poly_state& object) { - INT32 nextsw = (w + dwinc) >> 16; + const INT32 nextsw = (w + dwinc) >> 16; INT32 nexts = (s + dsinc) >> 16; INT32 nextt = (t + dtinc) >> 16; - if (object.OtherModes.persp_tex_en) + if (object.m_other_modes.persp_tex_en) { - m_rdp->TCDiv(nexts, nextt, nextsw, &nexts, &nextt); + m_rdp->tc_div(nexts, nextt, nextsw, &nexts, &nextt); } else { - m_rdp->TCDivNoPersp(nexts, nextt, nextsw, &nexts, &nextt); + m_rdp->tc_div_no_perspective(nexts, nextt, nextsw, &nexts, &nextt); } userdata->m_start_span = false; userdata->m_precomp_s = nexts; userdata->m_precomp_t = nextt; - INT32 lodclamp = (((*sst & 0x60000) > 0) | ((nextt & 0x60000) > 0)) || (((*sss & 0x60000) > 0) | ((nexts & 0x60000) > 0)); + const INT32 lodclamp = (((*sst & 0x60000) > 0) | ((nextt & 0x60000) > 0)) || (((*sss & 0x60000) > 0) | ((nexts & 0x60000) > 0)); INT32 horstep = SIGN17(nexts & 0x1ffff) - SIGN17(*sss & 0x1ffff); INT32 vertstep = SIGN17(nextt & 0x1ffff) - SIGN17(*sst & 0x1ffff); @@ -730,7 +723,6 @@ void N64TexturePipeT::LOD2Cycle(INT32* sss, INT32* sst, INT32 s, INT32 t, INT32 INT32 lod = (horstep >= vertstep) ? horstep : vertstep; - INT32 temp_anded; if (*sss & 0x40000) { *sss = 0x7fff; @@ -741,7 +733,7 @@ void N64TexturePipeT::LOD2Cycle(INT32* sss, INT32* sst, INT32 s, INT32 t, INT32 } else { - temp_anded = *sss & 0x18000; + INT32 temp_anded = *sss & 0x18000; if (temp_anded == 0x8000) { *sss = 0x7fff; @@ -766,7 +758,7 @@ void N64TexturePipeT::LOD2Cycle(INT32* sss, INT32* sst, INT32 s, INT32 t, INT32 } else { - temp_anded = *sst & 0x18000; + INT32 temp_anded = *sst & 0x18000; if (temp_anded == 0x8000) { *sst = 0x7fff; @@ -785,44 +777,44 @@ void N64TexturePipeT::LOD2Cycle(INT32* sss, INT32* sst, INT32 s, INT32 t, INT32 { lod = 0x7fff; } - else if (lod < object.MiscState.MinLevel) + else if (lod < object.m_misc_state.m_min_level) { - lod = object.MiscState.MinLevel; + lod = object.m_misc_state.m_min_level; } - bool magnify = (lod < 32); - INT32 l_tile = m_rdp->GetLog2((lod >> 5) & 0xff); - bool distant = ((lod & 0x6000) || (l_tile >= object.MiscState.MaxLevel)); + INT32 l_tile = m_rdp->get_log2((lod >> 5) & 0xff); + const bool magnify = (lod < 32); + const bool distant = ((lod & 0x6000) || (l_tile >= object.m_misc_state.m_max_level)); - userdata->LODFraction = ((lod << 3) >> l_tile) & 0xff; + userdata->m_lod_fraction = ((lod << 3) >> l_tile) & 0xff; - if(!object.OtherModes.sharpen_tex_en && !object.OtherModes.detail_tex_en) + if(!object.m_other_modes.sharpen_tex_en && !object.m_other_modes.detail_tex_en) { if (distant) { - userdata->LODFraction = 0xff; + userdata->m_lod_fraction = 0xff; } else if (magnify) { - userdata->LODFraction = 0; + userdata->m_lod_fraction = 0; } } - if(object.OtherModes.sharpen_tex_en && magnify) + if(object.m_other_modes.sharpen_tex_en && magnify) { - userdata->LODFraction |= 0x100; + userdata->m_lod_fraction |= 0x100; } - if (object.OtherModes.tex_lod_en) + if (object.m_other_modes.tex_lod_en) { if (distant) { - l_tile = object.MiscState.MaxLevel; + l_tile = object.m_misc_state.m_max_level; } - if (!object.OtherModes.detail_tex_en) + if (!object.m_other_modes.detail_tex_en) { *t1 = (prim_tile + l_tile) & 7; - if (!(distant || (!object.OtherModes.sharpen_tex_en && magnify))) + if (!(distant || (!object.m_other_modes.sharpen_tex_en && magnify))) { *t2 = (*t1 + 1) & 7; } @@ -854,22 +846,22 @@ void N64TexturePipeT::LOD2Cycle(INT32* sss, INT32* sst, INT32 s, INT32 t, INT32 } } -void N64TexturePipeT::LOD2CycleLimited(INT32* sss, INT32* sst, INT32 s, INT32 t, INT32 w, INT32 dsinc, INT32 dtinc, INT32 dwinc, INT32 prim_tile, INT32* t1, const rdp_poly_state& object) +void n64_texture_pipe_t::lod_2cycle_limited(INT32* sss, INT32* sst, INT32 s, INT32 t, INT32 w, INT32 dsinc, INT32 dtinc, INT32 dwinc, INT32 prim_tile, INT32* t1, const rdp_poly_state& object) { - INT32 nextsw = (w + dwinc) >> 16; + const INT32 nextsw = (w + dwinc) >> 16; INT32 nexts = (s + dsinc) >> 16; INT32 nextt = (t + dtinc) >> 16; - if (object.OtherModes.persp_tex_en) + if (object.m_other_modes.persp_tex_en) { - m_rdp->TCDiv(nexts, nextt, nextsw, &nexts, &nextt); + m_rdp->tc_div(nexts, nextt, nextsw, &nexts, &nextt); } else { - m_rdp->TCDivNoPersp(nexts, nextt, nextsw, &nexts, &nextt); + m_rdp->tc_div_no_perspective(nexts, nextt, nextsw, &nexts, &nextt); } - INT32 lodclamp = (((*sst & 0x60000) > 0) | ((nextt & 0x60000) > 0)) || (((*sss & 0x60000) > 0) | ((nexts & 0x60000) > 0)); + const INT32 lodclamp = (((*sst & 0x60000) > 0) | ((nextt & 0x60000) > 0)) || (((*sss & 0x60000) > 0) | ((nexts & 0x60000) > 0)); INT32 horstep = SIGN17(nexts & 0x1ffff) - SIGN17(*sss & 0x1ffff); INT32 vertstep = SIGN17(nextt & 0x1ffff) - SIGN17(*sst & 0x1ffff); @@ -884,7 +876,6 @@ void N64TexturePipeT::LOD2CycleLimited(INT32* sss, INT32* sst, INT32 s, INT32 t, INT32 lod = (horstep >= vertstep) ? horstep : vertstep; - INT32 tempanded; if (*sss & 0x40000) { *sss = 0x7fff; @@ -895,7 +886,7 @@ void N64TexturePipeT::LOD2CycleLimited(INT32* sss, INT32* sst, INT32 s, INT32 t, } else { - tempanded = *sss & 0x18000; + INT32 tempanded = *sss & 0x18000; if (tempanded == 0x8000) { *sss = 0x7fff; @@ -920,7 +911,7 @@ void N64TexturePipeT::LOD2CycleLimited(INT32* sss, INT32* sst, INT32 s, INT32 t, } else { - tempanded = *sst & 0x18000; + INT32 tempanded = *sst & 0x18000; if (tempanded == 0x8000) { *sst = 0x7fff; @@ -939,22 +930,22 @@ void N64TexturePipeT::LOD2CycleLimited(INT32* sss, INT32* sst, INT32 s, INT32 t, { lod = 0x7fff; } - else if (lod < object.MiscState.MinLevel) + else if (lod < object.m_misc_state.m_min_level) { - lod = object.MiscState.MinLevel; + lod = object.m_misc_state.m_min_level; } - bool magnify = (lod < 32); - INT32 l_tile = m_rdp->GetLog2((lod >> 5) & 0xff); - bool distant = (lod & 0x6000) || (l_tile >= object.MiscState.MaxLevel); + INT32 l_tile = m_rdp->get_log2((lod >> 5) & 0xff); + const bool magnify = (lod < 32); + const bool distant = (lod & 0x6000) || (l_tile >= object.m_misc_state.m_max_level); - if (object.OtherModes.tex_lod_en) + if (object.m_other_modes.tex_lod_en) { if (distant) { - l_tile = object.MiscState.MaxLevel; + l_tile = object.m_misc_state.m_max_level; } - if (!object.OtherModes.detail_tex_en) + if (!object.m_other_modes.detail_tex_en) { *t1 = (prim_tile + l_tile) & 7; } @@ -973,16 +964,14 @@ void N64TexturePipeT::LOD2CycleLimited(INT32* sss, INT32* sst, INT32 s, INT32 t, } } -void N64TexturePipeT::CalculateClampDiffs(UINT32 prim_tile, rdp_span_aux *userdata, const rdp_poly_state& object, INT32 *m_clamp_s_diff, INT32 *m_clamp_t_diff) +void n64_texture_pipe_t::calculate_clamp_diffs(UINT32 prim_tile, rdp_span_aux* userdata, const rdp_poly_state& object, INT32* m_clamp_s_diff, INT32* m_clamp_t_diff) { - const N64Tile* tiles = object.m_tiles; - if (object.OtherModes.cycle_type == CYCLE_TYPE_2) + const n64_tile_t* tiles = object.m_tiles; + if (object.m_other_modes.cycle_type == CYCLE_TYPE_2) { - if (object.OtherModes.tex_lod_en) + if (object.m_other_modes.tex_lod_en) { - int start = 0; - int end = 7; - for (; start <= end; start++) + for (INT32 start = 0; start <= 7; start++) { m_clamp_s_diff[start] = (tiles[start].sh >> 2) - (tiles[start].sl >> 2); m_clamp_t_diff[start] = (tiles[start].th >> 2) - (tiles[start].tl >> 2); @@ -990,8 +979,8 @@ void N64TexturePipeT::CalculateClampDiffs(UINT32 prim_tile, rdp_span_aux *userda } else { - int start = prim_tile; - int end = (prim_tile + 1) & 7; + const INT32 start = prim_tile; + const INT32 end = (prim_tile + 1) & 7; m_clamp_s_diff[start] = (tiles[start].sh >> 2) - (tiles[start].sl >> 2); m_clamp_t_diff[start] = (tiles[start].th >> 2) - (tiles[start].tl >> 2); m_clamp_s_diff[end] = (tiles[end].sh >> 2) - (tiles[end].sl >> 2); @@ -1010,19 +999,17 @@ void N64TexturePipeT::CalculateClampDiffs(UINT32 prim_tile, rdp_span_aux *userda static INT32 sTexAddrSwap16[2] = { WORD_ADDR_XOR, WORD_XOR_DWORD_SWAP }; static INT32 sTexAddrSwap8[2] = { BYTE_ADDR_XOR, BYTE_XOR_DWORD_SWAP }; -UINT32 N64TexturePipeT::_FetchRGBA_16_TLUT0(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata) +UINT32 n64_texture_pipe_t::fetch_rgba16_tlut0(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata) { - int taddr = (tbase << 2) + s; - taddr ^= sTexAddrSwap16[t & 1]; - taddr &= 0x7ff; + INT32 taddr = (((tbase << 2) + s) ^ sTexAddrSwap16[t & 1]) & 0x7ff; UINT16 c = ((UINT16*)userdata->m_tmem)[taddr]; c = ((UINT16*)(userdata->m_tmem + 0x800))[(c >> 8) << 2]; #if USE_64K_LUT - return Expand16To32Table[c]; + return m_expand_16to32_table[c]; #else - Color color; + color_t color; color.i.r = GET_HI_RGBA16_TMEM(c); color.i.g = GET_MED_RGBA16_TMEM(c); color.i.b = GET_LOW_RGBA16_TMEM(c); @@ -1031,32 +1018,28 @@ UINT32 N64TexturePipeT::_FetchRGBA_16_TLUT0(INT32 s, INT32 t, INT32 tbase, INT32 #endif } -UINT32 N64TexturePipeT::_FetchRGBA_16_TLUT1(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata) +UINT32 n64_texture_pipe_t::fetch_rgba16_tlut1(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata) { - int taddr = (tbase << 2) + s; - taddr ^= sTexAddrSwap16[t & 1]; - taddr &= 0x7ff; + const INT32 taddr = (((tbase << 2) + s) ^ sTexAddrSwap16[t & 1]) & 0x7ff; UINT16 c = ((UINT16*)userdata->m_tmem)[taddr]; c = ((UINT16*)(userdata->m_tmem + 0x800))[(c >> 8) << 2]; - Color color; + color_t color; color.i.r = color.i.g = color.i.b = (c >> 8) & 0xff; color.i.a = c & 0xff; return color.c; } -UINT32 N64TexturePipeT::_FetchRGBA_16_RAW(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata) +UINT32 n64_texture_pipe_t::fetch_rgba16_raw(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata) { - int taddr = (tbase << 2) + s; - taddr ^= sTexAddrSwap16[t & 1]; - taddr &= 0x7ff; + const INT32 taddr = (((tbase << 2) + s) ^ sTexAddrSwap16[t & 1]) & 0x7ff; #if USE_64K_LUT - return Expand16To32Table[((UINT16*)userdata->m_tmem)[taddr]]; + return m_expand_16to32_table[((UINT16*)userdata->m_tmem)[taddr]]; #else - UINT16 c = ((UINT16*)userdata->m_tmem)[taddr]; - Color color; + const UINT16 c = ((UINT16*)userdata->m_tmem)[taddr]; + color_t color; color.i.r = GET_HI_RGBA16_TMEM(c); color.i.g = GET_MED_RGBA16_TMEM(c); color.i.b = GET_LOW_RGBA16_TMEM(c); @@ -1065,20 +1048,18 @@ UINT32 N64TexturePipeT::_FetchRGBA_16_RAW(INT32 s, INT32 t, INT32 tbase, INT32 t #endif } -UINT32 N64TexturePipeT::_FetchRGBA_32_TLUT0(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata) +UINT32 n64_texture_pipe_t::fetch_rgba32_tlut0(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata) { - UINT32 *tc = ((UINT32*)userdata->m_tmem); - int taddr = (tbase << 2) + s; - taddr ^= sTexAddrSwap16[t & 1]; + const UINT32 *tc = ((UINT32*)userdata->m_tmem); + const INT32 taddr = (((tbase << 2) + s) ^ sTexAddrSwap16[t & 1]) & 0x3ff; - taddr &= 0x3ff; UINT32 c = tc[taddr]; c = ((UINT16*)(userdata->m_tmem + 0x800))[(c >> 24) << 2]; #if USE_64K_LUT - return Expand16To32Table[c]; + return m_expand_16to32_table[c]; #else - Color color; + color_t color; color.i.r = GET_HI_RGBA16_TMEM(c); color.i.g = GET_MED_RGBA16_TMEM(c); color.i.b = GET_LOW_RGBA16_TMEM(c); @@ -1087,32 +1068,27 @@ UINT32 N64TexturePipeT::_FetchRGBA_32_TLUT0(INT32 s, INT32 t, INT32 tbase, INT32 #endif } -UINT32 N64TexturePipeT::_FetchRGBA_32_TLUT1(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata) +UINT32 n64_texture_pipe_t::fetch_rgba32_tlut1(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata) { - UINT32 *tc = ((UINT32*)userdata->m_tmem); - int taddr = (tbase << 2) + s; - taddr ^= sTexAddrSwap16[t & 1]; + const UINT32 *tc = ((UINT32*)userdata->m_tmem); + const INT32 taddr = (((tbase << 2) + s) ^ sTexAddrSwap16[t & 1]) & 0x3ff; - taddr &= 0x3ff; UINT32 c = tc[taddr]; c = ((UINT16*)(userdata->m_tmem + 0x800))[(c >> 24) << 2]; - Color color; + color_t color; color.i.r = color.i.g = color.i.b = (c >> 8) & 0xff; color.i.a = c & 0xff; return color.c; } -UINT32 N64TexturePipeT::_FetchRGBA_32_RAW(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata) +UINT32 n64_texture_pipe_t::fetch_rgba32_raw(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata) { - int taddr = (tbase << 2) + s; - taddr ^= sTexAddrSwap16[t & 1]; - - taddr &= 0x3ff; + const INT32 taddr = (((tbase << 2) + s) ^ sTexAddrSwap16[t & 1]) & 0x3ff; UINT32 c = ((UINT16*)userdata->m_tmem)[taddr]; - Color color; + color_t color; color.i.r = (c >> 8) & 0xff; color.i.g = c & 0xff; c = ((UINT16*)userdata->m_tmem)[taddr | 0x400]; @@ -1122,22 +1098,16 @@ UINT32 N64TexturePipeT::_FetchRGBA_32_RAW(INT32 s, INT32 t, INT32 tbase, INT32 t return color.c; } -UINT32 N64TexturePipeT::_FetchNOP(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata) { return 0; } +UINT32 n64_texture_pipe_t::fetch_nop(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata) { return 0; } -UINT32 N64TexturePipeT::_FetchYUV(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata) +UINT32 n64_texture_pipe_t::fetch_yuv(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata) { - UINT16 *tc = ((UINT16*)userdata->m_tmem); - - int taddr = (tbase << 3) + s; - int taddrlow = taddr >> 1; + const UINT16 *tc = ((UINT16*)userdata->m_tmem); - taddr ^= sTexAddrSwap8[t & 1]; - taddrlow ^= sTexAddrSwap16[t & 1]; + const INT32 taddr = (((tbase << 3) + s) ^ sTexAddrSwap8[t & 1]) & 0x7ff; + const INT32 taddrlow = ((taddr >> 1) ^ sTexAddrSwap16[t & 1]) & 0x3ff; - taddr &= 0x7ff; - taddrlow &= 0x3ff; - - UINT16 c = tc[taddrlow]; + const UINT16 c = tc[taddrlow]; INT32 y = userdata->m_tmem[taddr | 0x800]; INT32 u = c >> 8; @@ -1147,7 +1117,7 @@ UINT32 N64TexturePipeT::_FetchYUV(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp u |= ((u & 0x80) << 1); v |= ((v & 0x80) << 1); - Color color; + color_t color; color.i.r = u; color.i.g = v; color.i.b = y; @@ -1156,21 +1126,18 @@ UINT32 N64TexturePipeT::_FetchYUV(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp return color.c; } -UINT32 N64TexturePipeT::_FetchCI_4_TLUT0(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata) +UINT32 n64_texture_pipe_t::fetch_ci4_tlut0(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata) { - UINT8 *tc = userdata->m_tmem; - int taddr = ((tbase << 4) + s) >> 1; - taddr ^= sTexAddrSwap8[t & 1]; - taddr &= 0xfff; + const UINT8 *tc = userdata->m_tmem; + const INT32 taddr = ((((tbase << 4) + s) >> 1) ^ sTexAddrSwap8[t & 1]) & 0x7ff; - taddr &= 0x7ff; - UINT8 p = (s & 1) ? (tc[taddr] & 0xf) : (tc[taddr] >> 4); - UINT16 c = ((UINT16*)(userdata->m_tmem + 0x800))[((tpal << 4) | p) << 2]; + const UINT8 p = (s & 1) ? (tc[taddr] & 0xf) : (tc[taddr] >> 4); + const UINT16 c = ((UINT16*)(userdata->m_tmem + 0x800))[((tpal << 4) | p) << 2]; #if USE_64K_LUT - return Expand16To32Table[c]; + return m_expand_16to32_table[c]; #else - Color color; + color_t color; color.i.r = GET_HI_RGBA16_TMEM(c); color.i.g = GET_MED_RGBA16_TMEM(c); color.i.b = GET_LOW_RGBA16_TMEM(c); @@ -1179,54 +1146,47 @@ UINT32 N64TexturePipeT::_FetchCI_4_TLUT0(INT32 s, INT32 t, INT32 tbase, INT32 tp #endif } -UINT32 N64TexturePipeT::_FetchCI_4_TLUT1(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata) +UINT32 n64_texture_pipe_t::fetch_ci4_tlut1(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata) { - UINT8 *tc = userdata->m_tmem; - int taddr = ((tbase << 4) + s) >> 1; - taddr ^= sTexAddrSwap8[t & 1]; - taddr &= 0xfff; + const UINT8 *tc = userdata->m_tmem; + INT32 taddr = ((((tbase << 4) + s) >> 1) ^ sTexAddrSwap8[t & 1]) & 0x7ff; - taddr &= 0x7ff; - UINT8 p = (s & 1) ? (tc[taddr] & 0xf) : (tc[taddr] >> 4); - UINT16 c = ((UINT16*)(userdata->m_tmem + 0x800))[((tpal << 4) | p) << 2]; + const UINT8 p = (s & 1) ? (tc[taddr] & 0xf) : (tc[taddr] >> 4); + const UINT16 c = ((UINT16*)(userdata->m_tmem + 0x800))[((tpal << 4) | p) << 2]; - Color color; + color_t color; color.i.r = color.i.g = color.i.b = (c >> 8) & 0xff; color.i.a = c & 0xff; return color.c; } -UINT32 N64TexturePipeT::_FetchCI_4_RAW(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata) +UINT32 n64_texture_pipe_t::fetch_ci4_raw(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata) { - UINT8 *tc = userdata->m_tmem; - int taddr = ((tbase << 4) + s) >> 1; - taddr ^= sTexAddrSwap8[t & 1]; - taddr &= 0xfff; + const UINT8 *tc = userdata->m_tmem; + const INT32 taddr = ((((tbase << 4) + s) >> 1) ^ sTexAddrSwap8[t & 1]) & 0xfff; UINT8 p = (s & 1) ? (tc[taddr] & 0xf) : (tc[taddr] >> 4); p = (tpal << 4) | p; - Color color; + color_t color; color.i.r = color.i.g = color.i.b = color.i.a = p; return color.c; } -UINT32 N64TexturePipeT::_FetchCI_8_TLUT0(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata) +UINT32 n64_texture_pipe_t::fetch_ci8_tlut0(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata) { - UINT8 *tc = userdata->m_tmem; - int taddr = (tbase << 3) + s; - taddr ^= sTexAddrSwap8[t & 1]; - taddr &= 0x7ff; + const UINT8 *tc = userdata->m_tmem; + const INT32 taddr = (((tbase << 3) + s) ^ sTexAddrSwap8[t & 1]) & 0x7ff; - UINT8 p = tc[taddr]; - UINT16 c = ((UINT16*)(userdata->m_tmem + 0x800))[p << 2]; + const UINT8 p = tc[taddr]; + const UINT16 c = ((UINT16*)(userdata->m_tmem + 0x800))[p << 2]; #if USE_64K_LUT - return Expand16To32Table[c]; + return m_expand_16to32_table[c]; #else - Color color; + color_t color; color.i.r = GET_HI_RGBA16_TMEM(c); color.i.g = GET_MED_RGBA16_TMEM(c); color.i.b = GET_LOW_RGBA16_TMEM(c); @@ -1235,52 +1195,44 @@ UINT32 N64TexturePipeT::_FetchCI_8_TLUT0(INT32 s, INT32 t, INT32 tbase, INT32 tp #endif } -UINT32 N64TexturePipeT::_FetchCI_8_TLUT1(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata) +UINT32 n64_texture_pipe_t::fetch_ci8_tlut1(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata) { - UINT8 *tc = userdata->m_tmem; - int taddr = (tbase << 3) + s; - taddr ^= sTexAddrSwap8[t & 1]; - taddr &= 0x7ff; + const UINT8 *tc = userdata->m_tmem; + const INT32 taddr = (((tbase << 3) + s) ^ sTexAddrSwap8[t & 1]) & 0x7ff; - UINT8 p = tc[taddr]; - UINT16 c = ((UINT16*)(userdata->m_tmem + 0x800))[p << 2]; + const UINT8 p = tc[taddr]; + const UINT16 c = ((UINT16*)(userdata->m_tmem + 0x800))[p << 2]; - Color color; + color_t color; color.i.r = color.i.g = color.i.b = (c >> 8) & 0xff; color.i.a = c & 0xff; return color.c; } -UINT32 N64TexturePipeT::_FetchCI_8_RAW(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata) +UINT32 n64_texture_pipe_t::fetch_ci8_raw(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata) { - UINT8 *tc = userdata->m_tmem; - int taddr = (tbase << 3) + s; - taddr ^= sTexAddrSwap8[t & 1]; - taddr &= 0xfff; + const UINT8 *tc = userdata->m_tmem; + const INT32 taddr = (((tbase << 3) + s) ^ sTexAddrSwap8[t & 1]) & 0xfff; - UINT8 p = tc[taddr]; - - Color color; - color.i.r = color.i.g = color.i.b = color.i.a = p; + color_t color; + color.i.r = color.i.g = color.i.b = color.i.a = tc[taddr]; return color.c; } -UINT32 N64TexturePipeT::_FetchIA_4_TLUT0(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata) +UINT32 n64_texture_pipe_t::fetch_ia4_tlut0(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata) { - UINT8 *tc = userdata->m_tmem; - int taddr = ((tbase << 4) + s) >> 1; - taddr ^= sTexAddrSwap8[t & 1]; - taddr &= 0x7ff; + const UINT8 *tc = userdata->m_tmem; + const INT32 taddr = ((((tbase << 4) + s) >> 1) ^ sTexAddrSwap8[t & 1]) & 0x7ff; - UINT8 p = ((s) & 1) ? (tc[taddr] & 0xf) : (tc[taddr] >> 4); - UINT16 c = ((UINT16*)(userdata->m_tmem + 0x800))[((tpal << 4) | p) << 2]; + const UINT8 p = ((s) & 1) ? (tc[taddr] & 0xf) : (tc[taddr] >> 4); + const UINT16 c = ((UINT16*)(userdata->m_tmem + 0x800))[((tpal << 4) | p) << 2]; #if USE_64K_LUT - return Expand16To32Table[c]; + return m_expand_16to32_table[c]; #else - Color color; + color_t color; color.i.r = GET_HI_RGBA16_TMEM(c); color.i.g = GET_MED_RGBA16_TMEM(c); color.i.b = GET_LOW_RGBA16_TMEM(c); @@ -1289,35 +1241,31 @@ UINT32 N64TexturePipeT::_FetchIA_4_TLUT0(INT32 s, INT32 t, INT32 tbase, INT32 tp #endif } -UINT32 N64TexturePipeT::_FetchIA_4_TLUT1(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata) +UINT32 n64_texture_pipe_t::fetch_ia4_tlut1(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata) { - UINT8 *tc = userdata->m_tmem; - int taddr = ((tbase << 4) + s) >> 1; - taddr ^= sTexAddrSwap8[t & 1]; - taddr &= 0x7ff; + const UINT8 *tc = userdata->m_tmem; + const INT32 taddr = ((((tbase << 4) + s) >> 1) ^ sTexAddrSwap8[t & 1]) & 0x7ff; - UINT8 p = ((s) & 1) ? (tc[taddr] & 0xf) : (tc[taddr] >> 4); - UINT16 c = ((UINT16*)(userdata->m_tmem + 0x800))[((tpal << 4) | p) << 2]; + const UINT8 p = ((s) & 1) ? (tc[taddr] & 0xf) : (tc[taddr] >> 4); + const UINT16 c = ((UINT16*)(userdata->m_tmem + 0x800))[((tpal << 4) | p) << 2]; - Color color; + color_t color; color.i.r = color.i.g = color.i.b = (c >> 8) & 0xff; color.i.a = c & 0xff; return color.c; } -UINT32 N64TexturePipeT::_FetchIA_4_RAW(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata) +UINT32 n64_texture_pipe_t::fetch_ia4_raw(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata) { - UINT8 *tc = userdata->m_tmem; - int taddr = ((tbase << 4) + s) >> 1; - taddr ^= sTexAddrSwap8[t & 1]; - taddr &= 0xfff; + const UINT8 *tc = userdata->m_tmem; + const INT32 taddr = ((((tbase << 4) + s) >> 1) ^ sTexAddrSwap8[t & 1]) & 0xfff; - UINT8 p = ((s) & 1) ? (tc[taddr] & 0xf) : (tc[taddr] >> 4); + const UINT8 p = ((s) & 1) ? (tc[taddr] & 0xf) : (tc[taddr] >> 4); UINT8 i = p & 0xe; i = (i << 4) | (i << 1) | (i >> 2); - Color color; + color_t color; color.i.r = i; color.i.g = i; color.i.b = i; @@ -1326,20 +1274,18 @@ UINT32 N64TexturePipeT::_FetchIA_4_RAW(INT32 s, INT32 t, INT32 tbase, INT32 tpal return color.c; } -UINT32 N64TexturePipeT::_FetchIA_8_TLUT0(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata) +UINT32 n64_texture_pipe_t::fetch_ia8_tlut0(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata) { - UINT8 *tc = userdata->m_tmem; - int taddr = (tbase << 3) + s; - taddr ^= sTexAddrSwap8[t & 1]; - taddr &= 0x7ff; + const UINT8 *tc = userdata->m_tmem; + const INT32 taddr = (((tbase << 3) + s) ^ sTexAddrSwap8[t & 1]) & 0x7ff; - UINT8 p = tc[taddr]; - UINT16 c = ((UINT16*)(userdata->m_tmem + 0x800))[p << 2]; + const UINT8 p = tc[taddr]; + const UINT16 c = ((UINT16*)(userdata->m_tmem + 0x800))[p << 2]; #if USE_64K_LUT - return Expand16To32Table[c]; + return m_expand_16to32_table[c]; #else - Color color; + color_t color; color.i.r = GET_HI_RGBA16_TMEM(c); color.i.g = GET_MED_RGBA16_TMEM(c); color.i.b = GET_LOW_RGBA16_TMEM(c); @@ -1348,35 +1294,31 @@ UINT32 N64TexturePipeT::_FetchIA_8_TLUT0(INT32 s, INT32 t, INT32 tbase, INT32 tp #endif } -UINT32 N64TexturePipeT::_FetchIA_8_TLUT1(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata) +UINT32 n64_texture_pipe_t::fetch_ia8_tlut1(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata) { - UINT8 *tc = userdata->m_tmem; - int taddr = (tbase << 3) + s; - taddr ^= sTexAddrSwap8[t & 1]; - taddr &= 0x7ff; + const UINT8 *tc = userdata->m_tmem; + const INT32 taddr = (((tbase << 3) + s) ^ sTexAddrSwap8[t & 1]) & 0x7ff; - UINT8 p = tc[taddr]; - UINT16 c = ((UINT16*)(userdata->m_tmem + 0x800))[p << 2]; + const UINT8 p = tc[taddr]; + const UINT16 c = ((UINT16*)(userdata->m_tmem + 0x800))[p << 2]; - Color color; + color_t color; color.i.r = color.i.g = color.i.b = (c >> 8) & 0xff; color.i.a = c & 0xff; return color.c; } -UINT32 N64TexturePipeT::_FetchIA_8_RAW(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata) +UINT32 n64_texture_pipe_t::fetch_ia8_raw(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata) { - UINT8 *tc = userdata->m_tmem; - int taddr = (tbase << 3) + s; - taddr ^= sTexAddrSwap8[t & 1]; - taddr &= 0xfff; + const UINT8 *tc = userdata->m_tmem; + const INT32 taddr = (((tbase << 3) + s) ^ sTexAddrSwap8[t & 1]) & 0xfff; - UINT8 p = tc[taddr]; + const UINT8 p = tc[taddr]; UINT8 i = p & 0xf0; i |= (i >> 4); - Color color; + color_t color; color.i.r = i; color.i.g = i; color.i.b = i; @@ -1385,20 +1327,18 @@ UINT32 N64TexturePipeT::_FetchIA_8_RAW(INT32 s, INT32 t, INT32 tbase, INT32 tpal return color.c; } -UINT32 N64TexturePipeT::_FetchIA_16_TLUT0(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata) +UINT32 n64_texture_pipe_t::fetch_ia16_tlut0(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata) { - UINT16 *tc = ((UINT16*)userdata->m_tmem); - int taddr = (tbase << 2) + s; - taddr ^= sTexAddrSwap16[t & 1]; - taddr &= 0x3ff; + const UINT16 *tc = ((UINT16*)userdata->m_tmem); + const INT32 taddr = (((tbase << 2) + s) ^ sTexAddrSwap16[t & 1]) & 0x3ff; UINT16 c = tc[taddr]; c = ((UINT16*)(userdata->m_tmem + 0x800))[(c >> 8) << 2]; #if USE_64K_LUT - return Expand16To32Table[c]; + return m_expand_16to32_table[c]; #else - Color color; + color_t color; color.i.r = GET_HI_RGBA16_TMEM(c); color.i.g = GET_MED_RGBA16_TMEM(c); color.i.b = GET_LOW_RGBA16_TMEM(c); @@ -1407,34 +1347,30 @@ UINT32 N64TexturePipeT::_FetchIA_16_TLUT0(INT32 s, INT32 t, INT32 tbase, INT32 t #endif } -UINT32 N64TexturePipeT::_FetchIA_16_TLUT1(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata) +UINT32 n64_texture_pipe_t::fetch_ia16_tlut1(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata) { - UINT16 *tc = ((UINT16*)userdata->m_tmem); - int taddr = (tbase << 2) + s; - taddr ^= sTexAddrSwap16[t & 1]; - taddr &= 0x3ff; + const UINT16 *tc = ((UINT16*)userdata->m_tmem); + const INT32 taddr = (((tbase << 2) + s) ^ sTexAddrSwap16[t & 1]) & 0x3ff; UINT16 c = tc[taddr]; c = ((UINT16*)(userdata->m_tmem + 0x800))[(c >> 8) << 2]; - Color color; + color_t color; color.i.r = color.i.g = color.i.b = (c >> 8) & 0xff; color.i.a = c & 0xff; return color.c; } -UINT32 N64TexturePipeT::_FetchIA_16_RAW(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata) +UINT32 n64_texture_pipe_t::fetch_ia16_raw(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata) { - UINT16 *tc = ((UINT16*)userdata->m_tmem); - int taddr = (tbase << 2) + s; - taddr ^= sTexAddrSwap16[t & 1]; - taddr &= 0x7ff; + const UINT16 *tc = ((UINT16*)userdata->m_tmem); + const INT32 taddr = (((tbase << 2) + s) ^ sTexAddrSwap16[t & 1]) & 0x7ff; - UINT16 c = tc[taddr]; - UINT8 i = (c >> 8); + const UINT16 c = tc[taddr]; + const UINT8 i = (c >> 8); - Color color; + color_t color; color.i.r = i; color.i.g = i; color.i.b = i; @@ -1443,21 +1379,19 @@ UINT32 N64TexturePipeT::_FetchIA_16_RAW(INT32 s, INT32 t, INT32 tbase, INT32 tpa return color.c; } -UINT32 N64TexturePipeT::_FetchI_4_TLUT0(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata) +UINT32 n64_texture_pipe_t::fetch_i4_tlut0(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata) { - UINT8 *tc = userdata->m_tmem; - int taddr = ((tbase << 4) + s) >> 1; - taddr ^= sTexAddrSwap8[t & 1]; - taddr &= 0x7ff; + const UINT8 *tc = userdata->m_tmem; + const INT32 taddr = ((((tbase << 4) + s) >> 1) ^ sTexAddrSwap8[t & 1]) & 0x7ff; - UINT8 byteval = tc[taddr]; - UINT8 c = ((s & 1)) ? (byteval & 0xf) : ((byteval >> 4) & 0xf); - UINT16 k = ((UINT16*)(userdata->m_tmem + 0x800))[((tpal << 4) | c) << 2]; + const UINT8 byteval = tc[taddr]; + const UINT8 c = ((s & 1)) ? (byteval & 0xf) : ((byteval >> 4) & 0xf); + const UINT16 k = ((UINT16*)(userdata->m_tmem + 0x800))[((tpal << 4) | c) << 2]; #if USE_64K_LUT - return Expand16To32Table[k]; + return m_expand_16to32_table[k]; #else - Color color; + color_t color; color.i.r = GET_HI_RGBA16_TMEM(k); color.i.g = GET_MED_RGBA16_TMEM(k); color.i.b = GET_LOW_RGBA16_TMEM(k); @@ -1466,36 +1400,32 @@ UINT32 N64TexturePipeT::_FetchI_4_TLUT0(INT32 s, INT32 t, INT32 tbase, INT32 tpa #endif } -UINT32 N64TexturePipeT::_FetchI_4_TLUT1(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata) +UINT32 n64_texture_pipe_t::fetch_i4_tlut1(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata) { - UINT8 *tc = userdata->m_tmem; - int taddr = ((tbase << 4) + s) >> 1; - taddr ^= sTexAddrSwap8[t & 1]; - taddr &= 0x7ff; + const UINT8 *tc = userdata->m_tmem; + const INT32 taddr = ((((tbase << 4) + s) >> 1) ^ sTexAddrSwap8[t & 1]) & 0x7ff; - UINT8 byteval = tc[taddr]; - UINT8 c = ((s & 1)) ? (byteval & 0xf) : ((byteval >> 4) & 0xf); - UINT16 k = ((UINT16*)(userdata->m_tmem + 0x800))[((tpal << 4) | c) << 2]; + const UINT8 byteval = tc[taddr]; + const UINT8 c = ((s & 1)) ? (byteval & 0xf) : ((byteval >> 4) & 0xf); + const UINT16 k = ((UINT16*)(userdata->m_tmem + 0x800))[((tpal << 4) | c) << 2]; - Color color; + color_t color; color.i.r = color.i.g = color.i.b = (k >> 8) & 0xff; color.i.a = k & 0xff; return color.c; } -UINT32 N64TexturePipeT::_FetchI_4_RAW(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata) +UINT32 n64_texture_pipe_t::fetch_i4_raw(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata) { - UINT8 *tc = userdata->m_tmem; - int taddr = ((tbase << 4) + s) >> 1; - taddr ^= sTexAddrSwap8[t & 1]; - taddr &= 0xfff; + const UINT8 *tc = userdata->m_tmem; + const INT32 taddr = ((((tbase << 4) + s) >> 1) ^ sTexAddrSwap8[t & 1]) & 0xfff; - UINT8 byteval = tc[taddr]; + const UINT8 byteval = tc[taddr]; UINT8 c = ((s & 1)) ? (byteval & 0xf) : ((byteval >> 4) & 0xf); c |= (c << 4); - Color color; + color_t color; color.i.r = c; color.i.g = c; color.i.b = c; @@ -1504,20 +1434,18 @@ UINT32 N64TexturePipeT::_FetchI_4_RAW(INT32 s, INT32 t, INT32 tbase, INT32 tpal, return color.c; } -UINT32 N64TexturePipeT::_FetchI_8_TLUT0(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata) +UINT32 n64_texture_pipe_t::fetch_i8_tlut0(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata) { - UINT8 *tc = userdata->m_tmem; - int taddr = (tbase << 3) + s; - taddr ^= sTexAddrSwap8[t & 1]; - taddr &= 0x7ff; + const UINT8 *tc = userdata->m_tmem; + const INT32 taddr = (((tbase << 3) + s) ^ sTexAddrSwap8[t & 1]) & 0x7ff; - UINT8 c = tc[taddr]; - UINT16 k = ((UINT16*)(userdata->m_tmem + 0x800))[c << 2]; + const UINT8 c = tc[taddr]; + const UINT16 k = ((UINT16*)(userdata->m_tmem + 0x800))[c << 2]; #if USE_64K_LUT - return Expand16To32Table[k]; + return m_expand_16to32_table[k]; #else - Color color; + color_t color; color.i.r = GET_HI_RGBA16_TMEM(k); color.i.g = GET_MED_RGBA16_TMEM(k); color.i.b = GET_LOW_RGBA16_TMEM(k); @@ -1526,33 +1454,29 @@ UINT32 N64TexturePipeT::_FetchI_8_TLUT0(INT32 s, INT32 t, INT32 tbase, INT32 tpa #endif } -UINT32 N64TexturePipeT::_FetchI_8_TLUT1(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata) +UINT32 n64_texture_pipe_t::fetch_i8_tlut1(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata) { - UINT8 *tc = userdata->m_tmem; - int taddr = (tbase << 3) + s; - taddr ^= sTexAddrSwap8[t & 1]; - taddr &= 0x7ff; + const UINT8 *tc = userdata->m_tmem; + const INT32 taddr = (((tbase << 3) + s) ^ sTexAddrSwap8[t & 1]) & 0x7ff; - UINT8 c = tc[taddr]; - UINT16 k = ((UINT16*)(userdata->m_tmem + 0x800))[c << 2]; + const UINT8 c = tc[taddr]; + const UINT16 k = ((UINT16*)(userdata->m_tmem + 0x800))[c << 2]; - Color color; + color_t color; color.i.r = color.i.g = color.i.b = (k >> 8) & 0xff; color.i.a = k & 0xff; return color.c; } -UINT32 N64TexturePipeT::_FetchI_8_RAW(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata) +UINT32 n64_texture_pipe_t::fetch_i8_raw(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata) { - UINT8 *tc = userdata->m_tmem; - int taddr = (tbase << 3) + s; - taddr ^= sTexAddrSwap8[t & 1]; - taddr &= 0xfff; + const UINT8 *tc = userdata->m_tmem; + const INT32 taddr = (((tbase << 3) + s) ^ sTexAddrSwap8[t & 1]) & 0xfff; - UINT8 c = tc[taddr]; + const UINT8 c = tc[taddr]; - Color color; + color_t color; color.i.r = c; color.i.g = c; color.i.b = c; @@ -1561,16 +1485,16 @@ UINT32 N64TexturePipeT::_FetchI_8_RAW(INT32 s, INT32 t, INT32 tbase, INT32 tpal, return color.c; } -UINT32 N64TexturePipeT::Fetch(INT32 s, INT32 t, INT32 tilenum, const rdp_poly_state& object, rdp_span_aux *userdata) +UINT32 n64_texture_pipe_t::fetch(INT32 s, INT32 t, INT32 tilenum, const rdp_poly_state& object, rdp_span_aux* userdata) { - const N64Tile* tiles = object.m_tiles; - const N64Tile& tile = tiles[tilenum]; - UINT32 tformat = tile.format; - UINT32 tsize = tile.size; - UINT32 tpal = tile.palette; - UINT32 index = (tformat << 4) | (tsize << 2) | ((UINT32) object.OtherModes.en_tlut << 1) | (UINT32) object.OtherModes.tlut_type; + const n64_tile_t* tiles = object.m_tiles; + const n64_tile_t& tile = tiles[tilenum]; + const UINT32 tformat = tile.format; + const UINT32 tsize = tile.size; + const UINT32 tpal = tile.palette; + const UINT32 index = (tformat << 4) | (tsize << 2) | ((UINT32) object.m_other_modes.en_tlut << 1) | (UINT32) object.m_other_modes.tlut_type; - UINT32 tbase = tile.tmem + ((tile.line * t) & 0x1ff); + const UINT32 tbase = tile.tmem + ((tile.line * t) & 0x1ff); - return ((this)->*(TexelFetch[index]))(s, t, tbase, tpal, userdata); + return ((this)->*(m_texel_fetch[index]))(s, t, tbase, tpal, userdata); } diff --git a/src/mame/video/rdptpipe.h b/src/mame/video/rdptpipe.h index 7a8cc25ccfd..60d3a4b58dd 100644 --- a/src/mame/video/rdptpipe.h +++ b/src/mame/video/rdptpipe.h @@ -18,19 +18,19 @@ #include "emu.h" -struct OtherModesT; -struct MiscStateT; -class Color; +struct other_modes_t; +struct misc_state_t; +class color_t; struct rdp_span_aux; struct rdp_poly_state; -class N64TexturePipeT +class n64_texture_pipe_t { public: - typedef UINT32 (N64TexturePipeT::*TexelFetcher) (INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata); - typedef void (N64TexturePipeT::*Cycler) (Color* TEX, Color* prev, INT32 SSS, INT32 SST, UINT32 tilenum, UINT32 cycle, rdp_span_aux *userdata, const rdp_poly_state& object, INT32 *m_clamp_s_diff, INT32 *m_clamp_t_diff); + typedef UINT32 (n64_texture_pipe_t::*texel_fetcher_t) (INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata); + typedef void (n64_texture_pipe_t::*texel_cycler_t) (color_t* TEX, color_t* prev, INT32 SSS, INT32 SST, UINT32 tilenum, UINT32 cycle, rdp_span_aux* userdata, const rdp_poly_state& object, INT32* m_clamp_s_diff, INT32* m_clamp_t_diff); - N64TexturePipeT() + n64_texture_pipe_t() { m_maskbits_table[0] = 0x3ff; for(int i = 1; i < 16; i++) @@ -41,130 +41,129 @@ class N64TexturePipeT for (int idx = 0; idx < 80; idx++) { - TexelFetch[idx] = &N64TexturePipeT::_FetchNOP; + m_texel_fetch[idx] = &n64_texture_pipe_t::fetch_nop; } - TexelFetch[ 8] = &N64TexturePipeT::_FetchRGBA_16_RAW; - TexelFetch[ 9] = &N64TexturePipeT::_FetchRGBA_16_RAW; - TexelFetch[10] = &N64TexturePipeT::_FetchRGBA_16_TLUT0; - TexelFetch[11] = &N64TexturePipeT::_FetchRGBA_16_TLUT1; - TexelFetch[12] = &N64TexturePipeT::_FetchRGBA_32_RAW; - TexelFetch[13] = &N64TexturePipeT::_FetchRGBA_32_RAW; - TexelFetch[14] = &N64TexturePipeT::_FetchRGBA_32_TLUT0; - TexelFetch[15] = &N64TexturePipeT::_FetchRGBA_32_TLUT1; - - TexelFetch[24] = &N64TexturePipeT::_FetchYUV; - TexelFetch[25] = &N64TexturePipeT::_FetchYUV; - TexelFetch[26] = &N64TexturePipeT::_FetchYUV; - TexelFetch[27] = &N64TexturePipeT::_FetchYUV; - - TexelFetch[32] = &N64TexturePipeT::_FetchCI_4_RAW; - TexelFetch[33] = &N64TexturePipeT::_FetchCI_4_RAW; - TexelFetch[34] = &N64TexturePipeT::_FetchCI_4_TLUT0; - TexelFetch[35] = &N64TexturePipeT::_FetchCI_4_TLUT1; - TexelFetch[36] = &N64TexturePipeT::_FetchCI_8_RAW; - TexelFetch[37] = &N64TexturePipeT::_FetchCI_8_RAW; - TexelFetch[38] = &N64TexturePipeT::_FetchCI_8_TLUT0; - TexelFetch[39] = &N64TexturePipeT::_FetchCI_8_TLUT1; - - TexelFetch[48] = &N64TexturePipeT::_FetchIA_4_RAW; - TexelFetch[49] = &N64TexturePipeT::_FetchIA_4_RAW; - TexelFetch[50] = &N64TexturePipeT::_FetchIA_4_TLUT0; - TexelFetch[51] = &N64TexturePipeT::_FetchIA_4_TLUT1; - TexelFetch[52] = &N64TexturePipeT::_FetchIA_8_RAW; - TexelFetch[53] = &N64TexturePipeT::_FetchIA_8_RAW; - TexelFetch[54] = &N64TexturePipeT::_FetchIA_8_TLUT0; - TexelFetch[55] = &N64TexturePipeT::_FetchIA_8_TLUT1; - TexelFetch[56] = &N64TexturePipeT::_FetchIA_16_RAW; - TexelFetch[57] = &N64TexturePipeT::_FetchIA_16_RAW; - TexelFetch[58] = &N64TexturePipeT::_FetchIA_16_TLUT0; - TexelFetch[59] = &N64TexturePipeT::_FetchIA_16_TLUT1; - - TexelFetch[64] = &N64TexturePipeT::_FetchI_4_RAW; - TexelFetch[65] = &N64TexturePipeT::_FetchI_4_RAW; - TexelFetch[66] = &N64TexturePipeT::_FetchI_4_TLUT0; - TexelFetch[67] = &N64TexturePipeT::_FetchI_4_TLUT1; - TexelFetch[68] = &N64TexturePipeT::_FetchI_8_RAW; - TexelFetch[69] = &N64TexturePipeT::_FetchI_8_RAW; - TexelFetch[70] = &N64TexturePipeT::_FetchI_8_TLUT0; - TexelFetch[71] = &N64TexturePipeT::_FetchI_8_TLUT1; - - cycle[0] = &N64TexturePipeT::CycleNearest; - cycle[1] = &N64TexturePipeT::CycleNearestLerp; - cycle[2] = &N64TexturePipeT::CycleLinear; - cycle[3] = &N64TexturePipeT::CycleLinearLerp; + m_texel_fetch[ 8] = &n64_texture_pipe_t::fetch_rgba16_raw; + m_texel_fetch[ 9] = &n64_texture_pipe_t::fetch_rgba16_raw; + m_texel_fetch[10] = &n64_texture_pipe_t::fetch_rgba16_tlut0; + m_texel_fetch[11] = &n64_texture_pipe_t::fetch_rgba16_tlut1; + m_texel_fetch[12] = &n64_texture_pipe_t::fetch_rgba32_raw; + m_texel_fetch[13] = &n64_texture_pipe_t::fetch_rgba32_raw; + m_texel_fetch[14] = &n64_texture_pipe_t::fetch_rgba32_tlut0; + m_texel_fetch[15] = &n64_texture_pipe_t::fetch_rgba32_tlut1; + + m_texel_fetch[24] = &n64_texture_pipe_t::fetch_yuv; + m_texel_fetch[25] = &n64_texture_pipe_t::fetch_yuv; + m_texel_fetch[26] = &n64_texture_pipe_t::fetch_yuv; + m_texel_fetch[27] = &n64_texture_pipe_t::fetch_yuv; + + m_texel_fetch[32] = &n64_texture_pipe_t::fetch_ci4_raw; + m_texel_fetch[33] = &n64_texture_pipe_t::fetch_ci4_raw; + m_texel_fetch[34] = &n64_texture_pipe_t::fetch_ci4_tlut0; + m_texel_fetch[35] = &n64_texture_pipe_t::fetch_ci4_tlut1; + m_texel_fetch[36] = &n64_texture_pipe_t::fetch_ci8_raw; + m_texel_fetch[37] = &n64_texture_pipe_t::fetch_ci8_raw; + m_texel_fetch[38] = &n64_texture_pipe_t::fetch_ci8_tlut0; + m_texel_fetch[39] = &n64_texture_pipe_t::fetch_ci8_tlut1; + + m_texel_fetch[48] = &n64_texture_pipe_t::fetch_ia4_raw; + m_texel_fetch[49] = &n64_texture_pipe_t::fetch_ia4_raw; + m_texel_fetch[50] = &n64_texture_pipe_t::fetch_ia4_tlut0; + m_texel_fetch[51] = &n64_texture_pipe_t::fetch_ia4_tlut1; + m_texel_fetch[52] = &n64_texture_pipe_t::fetch_ia8_raw; + m_texel_fetch[53] = &n64_texture_pipe_t::fetch_ia8_raw; + m_texel_fetch[54] = &n64_texture_pipe_t::fetch_ia8_tlut0; + m_texel_fetch[55] = &n64_texture_pipe_t::fetch_ia8_tlut1; + m_texel_fetch[56] = &n64_texture_pipe_t::fetch_ia16_raw; + m_texel_fetch[57] = &n64_texture_pipe_t::fetch_ia16_raw; + m_texel_fetch[58] = &n64_texture_pipe_t::fetch_ia16_tlut0; + m_texel_fetch[59] = &n64_texture_pipe_t::fetch_ia16_tlut1; + + m_texel_fetch[64] = &n64_texture_pipe_t::fetch_i4_raw; + m_texel_fetch[65] = &n64_texture_pipe_t::fetch_i4_raw; + m_texel_fetch[66] = &n64_texture_pipe_t::fetch_i4_tlut0; + m_texel_fetch[67] = &n64_texture_pipe_t::fetch_i4_tlut1; + m_texel_fetch[68] = &n64_texture_pipe_t::fetch_i8_raw; + m_texel_fetch[69] = &n64_texture_pipe_t::fetch_i8_raw; + m_texel_fetch[70] = &n64_texture_pipe_t::fetch_i8_tlut0; + m_texel_fetch[71] = &n64_texture_pipe_t::fetch_i8_tlut1; + + m_cycle[0] = &n64_texture_pipe_t::cycle_nearest; + m_cycle[1] = &n64_texture_pipe_t::cycle_nearest_lerp; + m_cycle[2] = &n64_texture_pipe_t::cycle_linear; + m_cycle[3] = &n64_texture_pipe_t::cycle_linear_lerp; } - void CycleNearest(Color* TEX, Color* prev, INT32 SSS, INT32 SST, UINT32 tilenum, UINT32 cycle, rdp_span_aux *userdata, const rdp_poly_state& object, INT32 *m_clamp_s_diff, INT32 *m_clamp_t_diff); - void CycleNearestLerp(Color* TEX, Color* prev, INT32 SSS, INT32 SST, UINT32 tilenum, UINT32 cycle, rdp_span_aux *userdata, const rdp_poly_state& object, INT32 *m_clamp_s_diff, INT32 *m_clamp_t_diff); - void CycleLinear(Color* TEX, Color* prev, INT32 SSS, INT32 SST, UINT32 tilenum, UINT32 cycle, rdp_span_aux *userdata, const rdp_poly_state& object, INT32 *m_clamp_s_diff, INT32 *m_clamp_t_diff); - void CycleLinearLerp(Color* TEX, Color* prev, INT32 SSS, INT32 SST, UINT32 tilenum, UINT32 cycle, rdp_span_aux *userdata, const rdp_poly_state& object, INT32 *m_clamp_s_diff, INT32 *m_clamp_t_diff); + void cycle_nearest(color_t* TEX, color_t* prev, INT32 SSS, INT32 SST, UINT32 tilenum, UINT32 cycle, rdp_span_aux* userdata, const rdp_poly_state& object, INT32* m_clamp_s_diff, INT32* m_clamp_t_diff); + void cycle_nearest_lerp(color_t* TEX, color_t* prev, INT32 SSS, INT32 SST, UINT32 tilenum, UINT32 cycle, rdp_span_aux* userdata, const rdp_poly_state& object, INT32* m_clamp_s_diff, INT32* m_clamp_t_diff); + void cycle_linear(color_t* TEX, color_t* prev, INT32 SSS, INT32 SST, UINT32 tilenum, UINT32 cycle, rdp_span_aux* userdata, const rdp_poly_state& object, INT32* m_clamp_s_diff, INT32* m_clamp_t_diff); + void cycle_linear_lerp(color_t* TEX, color_t* prev, INT32 SSS, INT32 SST, UINT32 tilenum, UINT32 cycle, rdp_span_aux* userdata, const rdp_poly_state& object, INT32* m_clamp_s_diff, INT32* m_clamp_t_diff); - Cycler cycle[4]; + texel_cycler_t m_cycle[4]; - void Copy(Color* TEX, INT32 SSS, INT32 SST, UINT32 tilenum, const rdp_poly_state& object, rdp_span_aux *userdata); - UINT32 Fetch(INT32 SSS, INT32 SST, INT32 tile, const rdp_poly_state& object, rdp_span_aux *userdata); - void CalculateClampDiffs(UINT32 prim_tile, rdp_span_aux *userdata, const rdp_poly_state& object, INT32 *m_clamp_s_diff, INT32 *m_clamp_t_diff); - void LOD1Cycle(INT32* sss, INT32* sst, INT32 s, INT32 t, INT32 w, INT32 dsinc, INT32 dtinc, INT32 dwinc, rdp_span_aux *userdata, const rdp_poly_state& object); - void LOD2Cycle(INT32* sss, INT32* sst, INT32 s, INT32 t, INT32 w, INT32 dsinc, INT32 dtinc, INT32 dwinc, INT32 prim_tile, INT32* t1, INT32* t2, rdp_span_aux *userdata, const rdp_poly_state& object); - void LOD2CycleLimited(INT32* sss, INT32* sst, INT32 s, INT32 t, INT32 w, INT32 dsinc, INT32 dtinc, INT32 dwinc, INT32 prim_tile, INT32* t1, const rdp_poly_state& object); + void copy(color_t* TEX, INT32 SSS, INT32 SST, UINT32 tilenum, const rdp_poly_state& object, rdp_span_aux* userdata); + UINT32 fetch(INT32 SSS, INT32 SST, INT32 tile, const rdp_poly_state& object, rdp_span_aux* userdata); + void calculate_clamp_diffs(UINT32 prim_tile, rdp_span_aux* userdata, const rdp_poly_state& object, INT32* m_clamp_s_diff, INT32* m_clamp_t_diff); + void lod_1cycle(INT32* sss, INT32* sst, INT32 s, INT32 t, INT32 w, INT32 dsinc, INT32 dtinc, INT32 dwinc, rdp_span_aux* userdata, const rdp_poly_state& object); + void lod_2cycle(INT32* sss, INT32* sst, INT32 s, INT32 t, INT32 w, INT32 dsinc, INT32 dtinc, INT32 dwinc, INT32 prim_tile, INT32* t1, INT32* t2, rdp_span_aux* userdata, const rdp_poly_state& object); + void lod_2cycle_limited(INT32* sss, INT32* sst, INT32 s, INT32 t, INT32 w, INT32 dsinc, INT32 dtinc, INT32 dwinc, INT32 prim_tile, INT32* t1, const rdp_poly_state& object); - void SetMachine(running_machine& machine); + void set_machine(running_machine& machine); bool m_start_span; private: - UINT32 Expand16To32Table[0x10000]; - - void Mask(INT32* S, INT32* T, INT32 num, const rdp_poly_state& object); - void MaskCoupled(INT32* S, INT32* S1, INT32* T, INT32* T1, INT32 num, const rdp_poly_state& object); - - void ShiftCycle(INT32* S, INT32* T, INT32* maxs, INT32* maxt, UINT32 num, const rdp_poly_state& object); - void ShiftCopy(INT32* S, INT32* T, UINT32 num, const rdp_poly_state& object); - - void ClampCycle(INT32* S, INT32* T, INT32* SFRAC, INT32* TFRAC, INT32 maxs, INT32 maxt, INT32 num, rdp_span_aux *userdata, const rdp_poly_state& object, INT32 *m_clamp_s_diff, INT32 *m_clamp_t_diff); - void ClampCycleLight(INT32* S, INT32* T, bool maxs, bool maxt, INT32 num, rdp_span_aux *userdata, const rdp_poly_state& object, INT32 *m_clamp_s_diff, INT32 *m_clamp_t_diff); - - UINT32 _FetchNOP(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata); - - UINT32 _FetchRGBA_16_TLUT0(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata); - UINT32 _FetchRGBA_16_TLUT1(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata); - UINT32 _FetchRGBA_16_RAW(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata); - UINT32 _FetchRGBA_32_TLUT0(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata); - UINT32 _FetchRGBA_32_TLUT1(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata); - UINT32 _FetchRGBA_32_RAW(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata); - - UINT32 _FetchYUV(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata); - - UINT32 _FetchCI_4_TLUT0(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata); - UINT32 _FetchCI_4_TLUT1(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata); - UINT32 _FetchCI_4_RAW(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata); - UINT32 _FetchCI_8_TLUT0(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata); - UINT32 _FetchCI_8_TLUT1(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata); - UINT32 _FetchCI_8_RAW(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata); - - UINT32 _FetchIA_4_TLUT0(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata); - UINT32 _FetchIA_4_TLUT1(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata); - UINT32 _FetchIA_4_RAW(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata); - UINT32 _FetchIA_8_TLUT0(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata); - UINT32 _FetchIA_8_TLUT1(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata); - UINT32 _FetchIA_8_RAW(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata); - UINT32 _FetchIA_16_TLUT0(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata); - UINT32 _FetchIA_16_TLUT1(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata); - UINT32 _FetchIA_16_RAW(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata); - - UINT32 _FetchI_4_TLUT0(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata); - UINT32 _FetchI_4_TLUT1(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata); - UINT32 _FetchI_4_RAW(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata); - UINT32 _FetchI_8_TLUT0(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata); - UINT32 _FetchI_8_TLUT1(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata); - UINT32 _FetchI_8_RAW(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux *userdata); - - TexelFetcher TexelFetch[16*5]; + void mask(INT32* S, INT32* T, INT32 num, const rdp_poly_state& object); + void mask_coupled(INT32* S, INT32* S1, INT32* T, INT32* T1, INT32 num, const rdp_poly_state& object); + + void shift_cycle(INT32* S, INT32* T, INT32* maxs, INT32* maxt, UINT32 num, const rdp_poly_state& object); + void shift_copy(INT32* S, INT32* T, UINT32 num, const rdp_poly_state& object); + + void clamp_cycle(INT32* S, INT32* T, INT32* SFRAC, INT32* TFRAC, INT32 maxs, INT32 maxt, INT32 num, rdp_span_aux* userdata, const rdp_poly_state& object, INT32* m_clamp_s_diff, INT32* m_clamp_t_diff); + void clamp_cycle_light(INT32* S, INT32* T, bool maxs, bool maxt, INT32 num, rdp_span_aux* userdata, const rdp_poly_state& object, INT32* m_clamp_s_diff, INT32* m_clamp_t_diff); + + UINT32 fetch_nop(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata); + + UINT32 fetch_rgba16_tlut0(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata); + UINT32 fetch_rgba16_tlut1(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata); + UINT32 fetch_rgba16_raw(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata); + UINT32 fetch_rgba32_tlut0(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata); + UINT32 fetch_rgba32_tlut1(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata); + UINT32 fetch_rgba32_raw(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata); + + UINT32 fetch_yuv(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata); + + UINT32 fetch_ci4_tlut0(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata); + UINT32 fetch_ci4_tlut1(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata); + UINT32 fetch_ci4_raw(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata); + UINT32 fetch_ci8_tlut0(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata); + UINT32 fetch_ci8_tlut1(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata); + UINT32 fetch_ci8_raw(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata); + + UINT32 fetch_ia4_tlut0(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata); + UINT32 fetch_ia4_tlut1(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata); + UINT32 fetch_ia4_raw(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata); + UINT32 fetch_ia8_tlut0(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata); + UINT32 fetch_ia8_tlut1(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata); + UINT32 fetch_ia8_raw(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata); + UINT32 fetch_ia16_tlut0(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata); + UINT32 fetch_ia16_tlut1(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata); + UINT32 fetch_ia16_raw(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata); + + UINT32 fetch_i4_tlut0(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata); + UINT32 fetch_i4_tlut1(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata); + UINT32 fetch_i4_raw(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata); + UINT32 fetch_i8_tlut0(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata); + UINT32 fetch_i8_tlut1(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata); + UINT32 fetch_i8_raw(INT32 s, INT32 t, INT32 tbase, INT32 tpal, rdp_span_aux* userdata); + + texel_fetcher_t m_texel_fetch[16*5]; n64_rdp* m_rdp; INT32 m_maskbits_table[16]; + UINT32 m_expand_16to32_table[0x10000]; }; #endif // _VIDEO_RDPTEXPIPE_H_ |