-\r
-#define setup_sprite_tile_fetch_texel_block_8bpp_4x(offset) \\r
- texture_block_ptr = psx_gpu->texture_page_ptr + \\r
- ((texture_offset + offset) & texture_mask); \\r
- \\r
- load_64b(texels, texture_block_ptr) \\r
-\r
-\r
-#define setup_sprite_tile_setup_block_yes_4x(side, offset, texture_mode) \\r
-\r
-#define setup_sprite_tile_setup_block_no_4x(side, offset, texture_mode) \\r
-\r
-#define setup_sprite_tile_add_blocks_4x(tile_num_blocks) \\r
- num_blocks += tile_num_blocks * 4; \\r
- sprite_blocks += tile_num_blocks * 4; \\r
- \\r
- if(num_blocks > MAX_BLOCKS) \\r
- { \\r
- flush_render_block_buffer(psx_gpu); \\r
- num_blocks = tile_num_blocks * 4; \\r
- block = psx_gpu->blocks; \\r
- } \\r
-\r
-#define setup_sprite_tile_full_4bpp_4x(edge) \\r
-{ \\r
- vec_8x8u texels_low, texels_high; \\r
- vec_8x16u pixels, pixels_wide; \\r
- setup_sprite_tile_add_blocks_4x(sub_tile_height * 2); \\r
- u32 left_mask_bits_a = left_mask_bits & 0xFF; \\r
- u32 left_mask_bits_b = left_mask_bits >> 8; \\r
- u32 right_mask_bits_a = right_mask_bits & 0xFF; \\r
- u32 right_mask_bits_b = right_mask_bits >> 8; \\r
- \\r
- while(sub_tile_height) \\r
- { \\r
- setup_sprite_tile_fetch_texel_block_8bpp_4x(0); \\r
- tbl_16(texels_low, texels, clut_low); \\r
- tbl_16(texels_high, texels, clut_high); \\r
- zip_8x16b(pixels, texels_low, texels_high); \\r
- \\r
- zip_4x32b(vector_cast(vec_4x32u, pixels_wide), pixels.low, pixels.low); \\r
- block->texels = pixels_wide; \\r
- block->draw_mask_bits = left_mask_bits_a; \\r
- block->fb_ptr = fb_ptr; \\r
- block++; \\r
- \\r
- block->texels = pixels_wide; \\r
- block->draw_mask_bits = left_mask_bits_a; \\r
- block->fb_ptr = fb_ptr + 1024; \\r
- block++; \\r
- \\r
- zip_4x32b(vector_cast(vec_4x32u, pixels_wide), pixels.high, pixels.high); \\r
- block->texels = pixels_wide; \\r
- block->draw_mask_bits = left_mask_bits_b; \\r
- block->fb_ptr = fb_ptr + 8; \\r
- block++; \\r
- \\r
- block->texels = pixels_wide; \\r
- block->draw_mask_bits = left_mask_bits_b; \\r
- block->fb_ptr = fb_ptr + 1024 + 8; \\r
- block++; \\r
- \\r
- setup_sprite_tile_fetch_texel_block_8bpp_4x(8); \\r
- tbl_16(texels_low, texels, clut_low); \\r
- tbl_16(texels_high, texels, clut_high); \\r
- zip_8x16b(pixels, texels_low, texels_high); \\r
- \\r
- zip_4x32b(vector_cast(vec_4x32u, pixels_wide), pixels.low, pixels.low); \\r
- block->texels = pixels_wide; \\r
- block->draw_mask_bits = right_mask_bits_a; \\r
- block->fb_ptr = fb_ptr + 16; \\r
- block++; \\r
- \\r
- block->texels = pixels_wide; \\r
- block->draw_mask_bits = right_mask_bits_a; \\r
- block->fb_ptr = fb_ptr + 1024 + 16; \\r
- block++; \\r
- \\r
- zip_4x32b(vector_cast(vec_4x32u, pixels_wide), pixels.high, pixels.high); \\r
- block->texels = pixels_wide; \\r
- block->draw_mask_bits = right_mask_bits_b; \\r
- block->fb_ptr = fb_ptr + 24; \\r
- block++; \\r
- \\r
- block->texels = pixels_wide; \\r
- block->draw_mask_bits = right_mask_bits_b; \\r
- block->fb_ptr = fb_ptr + 1024 + 24; \\r
- block++; \\r
- \\r
- fb_ptr += 2048; \\r
- texture_offset += 0x10; \\r
- sub_tile_height--; \\r
- } \\r
- texture_offset += 0xF00; \\r
- psx_gpu->num_blocks = num_blocks; \\r
-} \\r
-\r
-#define setup_sprite_tile_half_4bpp_4x(edge) \\r
-{ \\r
- vec_8x8u texels_low, texels_high; \\r
- vec_8x16u pixels, pixels_wide; \\r
- setup_sprite_tile_add_blocks(sub_tile_height); \\r
- u32 edge##_mask_bits_a = edge##_mask_bits & 0xFF; \\r
- u32 edge##_mask_bits_b = edge##_mask_bits >> 8; \\r
- \\r
- while(sub_tile_height) \\r
- { \\r
- setup_sprite_tile_fetch_texel_block_8bpp_4x(0); \\r
- tbl_16(texels_low, texels, clut_low); \\r
- tbl_16(texels_high, texels, clut_high); \\r
- zip_8x16b(pixels, texels_low, texels_high); \\r
- \\r
- zip_4x32b(vector_cast(vec_4x32u, pixels_wide), pixels.low, pixels.low); \\r
- block->texels = pixels_wide; \\r
- block->draw_mask_bits = edge##_mask_bits_a; \\r
- block->fb_ptr = fb_ptr; \\r
- block++; \\r
- \\r
- block->texels = pixels_wide; \\r
- block->draw_mask_bits = edge##_mask_bits_a; \\r
- block->fb_ptr = fb_ptr + 1024; \\r
- block++; \\r
- \\r
- zip_4x32b(vector_cast(vec_4x32u, pixels_wide), pixels.high, pixels.high); \\r
- block->texels = pixels_wide; \\r
- block->draw_mask_bits = edge##_mask_bits_b; \\r
- block->fb_ptr = fb_ptr + 8; \\r
- block++; \\r
- \\r
- block->texels = pixels_wide; \\r
- block->draw_mask_bits = edge##_mask_bits_b; \\r
- block->fb_ptr = fb_ptr + 1024 + 8; \\r
- block++; \\r
- \\r
- fb_ptr += 2048; \\r
- texture_offset += 0x10; \\r
- sub_tile_height--; \\r
- } \\r
- texture_offset += 0xF00; \\r
- psx_gpu->num_blocks = num_blocks; \\r
-} \\r
-\r
- \r
-#define setup_sprite_tile_full_8bpp_4x(edge) \\r
-{ \\r
- setup_sprite_tile_add_blocks_4x(sub_tile_height * 2); \\r
- vec_16x8u texels_wide; \\r
- u32 left_mask_bits_a = left_mask_bits & 0xFF; \\r
- u32 left_mask_bits_b = left_mask_bits >> 8; \\r
- u32 right_mask_bits_a = right_mask_bits & 0xFF; \\r
- u32 right_mask_bits_b = right_mask_bits >> 8; \\r
- \\r
- while(sub_tile_height) \\r
- { \\r
- setup_sprite_tile_fetch_texel_block_8bpp_4x(0); \\r
- zip_8x16b(vector_cast(vec_8x16u, texels_wide), texels, texels); \\r
- block->r = texels_wide.low; \\r
- block->draw_mask_bits = left_mask_bits_a; \\r
- block->fb_ptr = fb_ptr; \\r
- block++; \\r
- \\r
- block->r = texels_wide.low; \\r
- block->draw_mask_bits = left_mask_bits_a; \\r
- block->fb_ptr = fb_ptr + 1024; \\r
- block++; \\r
- \\r
- block->r = texels_wide.high; \\r
- block->draw_mask_bits = left_mask_bits_b; \\r
- block->fb_ptr = fb_ptr + 8; \\r
- block++; \\r
- \\r
- block->r = texels_wide.high; \\r
- block->draw_mask_bits = left_mask_bits_b; \\r
- block->fb_ptr = fb_ptr + 1024 + 8; \\r
- block++; \\r
- \\r
- setup_sprite_tile_fetch_texel_block_8bpp_4x(8); \\r
- zip_8x16b(vector_cast(vec_8x16u, texels_wide), texels, texels); \\r
- block->r = texels_wide.low; \\r
- block->draw_mask_bits = right_mask_bits_a; \\r
- block->fb_ptr = fb_ptr + 16; \\r
- block++; \\r
- \\r
- block->r = texels_wide.low; \\r
- block->draw_mask_bits = right_mask_bits_a; \\r
- block->fb_ptr = fb_ptr + 1024; \\r
- block++; \\r
- \\r
- block->r = texels_wide.high; \\r
- block->draw_mask_bits = right_mask_bits_b; \\r
- block->fb_ptr = fb_ptr + 24 + 1024; \\r
- block++; \\r
- \\r
- block->r = texels_wide.high; \\r
- block->draw_mask_bits = right_mask_bits_b; \\r
- block->fb_ptr = fb_ptr + 24 + 1024; \\r
- block++; \\r
- \\r
- fb_ptr += 2048; \\r
- texture_offset += 0x10; \\r
- sub_tile_height--; \\r
- } \\r
- texture_offset += 0xF00; \\r
- psx_gpu->num_blocks = num_blocks; \\r
-} \\r
-\r
-#define setup_sprite_tile_half_8bpp_4x(edge) \\r
-{ \\r
- setup_sprite_tile_add_blocks_4x(sub_tile_height * 2); \\r
- vec_16x8u texels_wide; \\r
- u32 edge##_mask_bits_a = edge##_mask_bits & 0xFF; \\r
- u32 edge##_mask_bits_b = edge##_mask_bits >> 8; \\r
- \\r
- while(sub_tile_height) \\r
- { \\r
- setup_sprite_tile_fetch_texel_block_8bpp_4x(0); \\r
- zip_8x16b(vector_cast(vec_8x16u, texels_wide), texels, texels); \\r
- block->r = texels_wide.low; \\r
- block->draw_mask_bits = edge##_mask_bits_a; \\r
- block->fb_ptr = fb_ptr; \\r
- block++; \\r
- \\r
- block->r = texels_wide.low; \\r
- block->draw_mask_bits = edge##_mask_bits_a; \\r
- block->fb_ptr = fb_ptr + 1024; \\r
- block++; \\r
- \\r
- block->r = texels_wide.high; \\r
- block->draw_mask_bits = edge##_mask_bits_b; \\r
- block->fb_ptr = fb_ptr + 8; \\r
- block++; \\r
- \\r
- block->r = texels_wide.high; \\r
- block->draw_mask_bits = edge##_mask_bits_b; \\r
- block->fb_ptr = fb_ptr + 8 + 1024; \\r
- block++; \\r
- \\r
- fb_ptr += 2048; \\r
- texture_offset += 0x10; \\r
- sub_tile_height--; \\r
- } \\r
- texture_offset += 0xF00; \\r
- psx_gpu->num_blocks = num_blocks; \\r
-} \\r
-\r
- \r
-#define setup_sprite_tile_column_edge_pre_adjust_half_right_4x() \\r
- texture_offset = texture_offset_base + 8; \\r
- fb_ptr += 16 \\r
-\r
-#define setup_sprite_tile_column_edge_pre_adjust_half_left_4x() \\r
- texture_offset = texture_offset_base \\r
-\r
-#define setup_sprite_tile_column_edge_pre_adjust_half_4x(edge) \\r
- setup_sprite_tile_column_edge_pre_adjust_half_##edge##_4x() \\r
-\r
-#define setup_sprite_tile_column_edge_pre_adjust_full_4x(edge) \\r
- texture_offset = texture_offset_base \\r
-\r
-#define setup_sprite_tile_column_edge_post_adjust_half_right_4x() \\r
- fb_ptr -= 16 \\r
-\r
-#define setup_sprite_tile_column_edge_post_adjust_half_left_4x() \\r
-\r
-#define setup_sprite_tile_column_edge_post_adjust_half_4x(edge) \\r
- setup_sprite_tile_column_edge_post_adjust_half_##edge##_4x() \\r
-\r
-#define setup_sprite_tile_column_edge_post_adjust_full_4x(edge) \\r
-\r
-\r
-#define setup_sprite_tile_column_height_single_4x(edge_mode, edge, \\r
- texture_mode) \\r
-do \\r
-{ \\r
- sub_tile_height = column_data; \\r
- setup_sprite_tile_column_edge_pre_adjust_##edge_mode##_4x(edge); \\r
- setup_sprite_tile_##edge_mode##_##texture_mode##_4x(edge); \\r
- setup_sprite_tile_column_edge_post_adjust_##edge_mode##_4x(edge); \\r
-} while(0) \\r
-\r
-#define setup_sprite_tile_column_height_multi_4x(edge_mode, edge, \\r
- texture_mode) \\r
-do \\r
-{ \\r
- u32 tiles_remaining = column_data >> 16; \\r
- sub_tile_height = column_data & 0xFF; \\r
- setup_sprite_tile_column_edge_pre_adjust_##edge_mode##_4x(edge); \\r
- setup_sprite_tile_##edge_mode##_##texture_mode##_4x(edge); \\r
- tiles_remaining -= 1; \\r
- \\r
- while(tiles_remaining) \\r
- { \\r
- sub_tile_height = 16; \\r
- setup_sprite_tile_##edge_mode##_##texture_mode##_4x(edge); \\r
- tiles_remaining--; \\r
- } \\r
- \\r
- sub_tile_height = (column_data >> 8) & 0xFF; \\r
- setup_sprite_tile_##edge_mode##_##texture_mode##_4x(edge); \\r
- setup_sprite_tile_column_edge_post_adjust_##edge_mode##_4x(edge); \\r
-} while(0) \\r
-\r
-\r
-#define setup_sprite_column_data_single_4x() \\r
- column_data = height \\r
-\r
-#define setup_sprite_column_data_multi_4x() \\r
- column_data = 16 - offset_v; \\r
- column_data |= ((height_rounded & 0xF) + 1) << 8; \\r
- column_data |= (tile_height - 1) << 16 \\r
-\r
-\r
-#define setup_sprite_tile_column_width_single_4x(texture_mode, multi_height, \\r
- edge_mode, edge) \\r
-{ \\r
- setup_sprite_column_data_##multi_height##_4x(); \\r
- left_mask_bits = left_block_mask | right_block_mask; \\r
- right_mask_bits = left_mask_bits >> 16; \\r
- \\r
- setup_sprite_tile_column_height_##multi_height##_4x(edge_mode, edge, \\r
- texture_mode); \\r
-} \\r
-\r
-#define setup_sprite_tiled_advance_column_4x() \\r
- texture_offset_base += 0x100; \\r
- if((texture_offset_base & 0xF00) == 0) \\r
- texture_offset_base -= (0x100 + 0xF00) \\r
-\r
-#define setup_sprite_tile_column_width_multi_4x(texture_mode, multi_height, \\r
- left_mode, right_mode) \\r
-{ \\r
- setup_sprite_column_data_##multi_height##_4x(); \\r
- s32 fb_ptr_advance_column = 32 - (2048 * height); \\r
- \\r
- tile_width -= 2; \\r
- left_mask_bits = left_block_mask; \\r
- right_mask_bits = left_mask_bits >> 16; \\r
- \\r
- setup_sprite_tile_column_height_##multi_height##_4x(left_mode, right, \\r
- texture_mode); \\r
- fb_ptr += fb_ptr_advance_column; \\r
- \\r
- left_mask_bits = 0x00; \\r
- right_mask_bits = 0x00; \\r
- \\r
- while(tile_width) \\r
- { \\r
- setup_sprite_tiled_advance_column_4x(); \\r
- setup_sprite_tile_column_height_##multi_height##_4x(full, none, \\r
- texture_mode); \\r
- fb_ptr += fb_ptr_advance_column; \\r
- tile_width--; \\r