Decompile texReadUncompressed

This commit is contained in:
Ryan Dwyer 2022-02-18 22:12:54 +10:00
parent cb5b7bd4f7
commit e4e4a4a9b6
2 changed files with 85 additions and 246 deletions

View File

@ -1458,7 +1458,7 @@ s32 texInflateNonZlib(u8 *src, u8 *dst, s32 arg2, s32 forcenumimages, struct tex
switch (compmethod) {
case TEXCOMPMETHOD_0:
case TEXCOMPMETHOD_1:
imagebytesout = texInflateMethod1(&dst[totalbytesout], width, height, format);
imagebytesout = texReadUncompressed(&dst[totalbytesout], width, height, format);
break;
case TEXCOMPMETHOD_HUFFMAN2:
func0f1711b4(scratch, g_TexFormatNumChannels[format] * width * height, g_TexFormatChannelSizes[format]);
@ -2809,250 +2809,89 @@ void texReadAlphaBits(u8 *dst, s32 count)
}
}
GLOBAL_ASM(
glabel texInflateMethod1
.late_rodata
glabel var7f1b7ac0
.word texInflateMethod1+0x70 # f171910
glabel var7f1b7ac4
.word texInflateMethod1+0x150 # f1719f0
glabel var7f1b7ac8
.word texInflateMethod1+0xe8 # f171988
glabel var7f1b7acc
.word texInflateMethod1+0x1b0 # f171a50
glabel var7f1b7ad0
.word texInflateMethod1+0x150 # f1719f0
glabel var7f1b7ad4
.word texInflateMethod1+0x218 # f171ab8
glabel var7f1b7ad8
.word texInflateMethod1+0x274 # f171b14
glabel var7f1b7adc
.word texInflateMethod1+0x218 # f171ab8
glabel var7f1b7ae0
.word texInflateMethod1+0x274 # f171b14
.text
/* f1718a0: 27bdffc8 */ addiu $sp,$sp,-56
/* f1718a4: afb50028 */ sw $s5,0x28($sp)
/* f1718a8: 2495000f */ addiu $s5,$a0,0xf
/* f1718ac: 2401fff0 */ addiu $at,$zero,-16
/* f1718b0: 02a17024 */ and $t6,$s5,$at
/* f1718b4: afb30020 */ sw $s3,0x20($sp)
/* f1718b8: 2401fff8 */ addiu $at,$zero,-8
/* f1718bc: 24820007 */ addiu $v0,$a0,0x7
/* f1718c0: 00419824 */ and $s3,$v0,$at
/* f1718c4: afb70030 */ sw $s7,0x30($sp)
/* f1718c8: afb6002c */ sw $s6,0x2c($sp)
/* f1718cc: afb2001c */ sw $s2,0x1c($sp)
/* f1718d0: 2ce10009 */ sltiu $at,$a3,0x9
/* f1718d4: 00a09025 */ or $s2,$a1,$zero
/* f1718d8: 00c0b825 */ or $s7,$a2,$zero
/* f1718dc: afbf0034 */ sw $ra,0x34($sp)
/* f1718e0: afb40024 */ sw $s4,0x24($sp)
/* f1718e4: afb10018 */ sw $s1,0x18($sp)
/* f1718e8: afb00014 */ sw $s0,0x14($sp)
/* f1718ec: 01c0a825 */ or $s5,$t6,$zero
/* f1718f0: 102000a1 */ beqz $at,.L0f171b78
/* f1718f4: 0260b025 */ or $s6,$s3,$zero
/* f1718f8: 0007c080 */ sll $t8,$a3,0x2
/* f1718fc: 3c017f1b */ lui $at,%hi(var7f1b7ac0)
/* f171900: 00380821 */ addu $at,$at,$t8
/* f171904: 8c387ac0 */ lw $t8,%lo(var7f1b7ac0)($at)
/* f171908: 03000008 */ jr $t8
/* f17190c: 00000000 */ nop
/* f171910: 1ae00016 */ blez $s7,.L0f17196c
/* f171914: 0000a025 */ or $s4,$zero,$zero
/* f171918: 26530003 */ addiu $s3,$s2,0x3
/* f17191c: 32790ffc */ andi $t9,$s3,0xffc
/* f171920: 00199880 */ sll $s3,$t9,0x2
.L0f171924:
/* f171924: 1a40000e */ blez $s2,.L0f171960
/* f171928: 00008025 */ or $s0,$zero,$zero
/* f17192c: 02a08825 */ or $s1,$s5,$zero
.L0f171930:
/* f171930: 0fc5cd4f */ jal texReadBits
/* f171934: 24040010 */ addiu $a0,$zero,0x10
/* f171938: 00024c00 */ sll $t1,$v0,0x10
/* f17193c: ae290000 */ sw $t1,0x0($s1)
/* f171940: 0fc5cd4f */ jal texReadBits
/* f171944: 24040010 */ addiu $a0,$zero,0x10
/* f171948: 8e2a0000 */ lw $t2,0x0($s1)
/* f17194c: 26100001 */ addiu $s0,$s0,0x1
/* f171950: 26310004 */ addiu $s1,$s1,0x4
/* f171954: 01425825 */ or $t3,$t2,$v0
/* f171958: 1612fff5 */ bne $s0,$s2,.L0f171930
/* f17195c: ae2bfffc */ sw $t3,-0x4($s1)
.L0f171960:
/* f171960: 26940001 */ addiu $s4,$s4,0x1
/* f171964: 1697ffef */ bne $s4,$s7,.L0f171924
/* f171968: 02b3a821 */ addu $s5,$s5,$s3
.L0f17196c:
/* f17196c: 264c0003 */ addiu $t4,$s2,0x3
/* f171970: 318d0ffc */ andi $t5,$t4,0xffc
/* f171974: 01b70019 */ multu $t5,$s7
/* f171978: 00001012 */ mflo $v0
/* f17197c: 00027080 */ sll $t6,$v0,0x2
/* f171980: 1000007e */ b .L0f171b7c
/* f171984: 01c01025 */ or $v0,$t6,$zero
/* f171988: 1ae00012 */ blez $s7,.L0f1719d4
/* f17198c: 0000a025 */ or $s4,$zero,$zero
/* f171990: 26530003 */ addiu $s3,$s2,0x3
/* f171994: 326f0ffc */ andi $t7,$s3,0xffc
/* f171998: 000f9880 */ sll $s3,$t7,0x2
.L0f17199c:
/* f17199c: 1a40000a */ blez $s2,.L0f1719c8
/* f1719a0: 00008025 */ or $s0,$zero,$zero
/* f1719a4: 02a08825 */ or $s1,$s5,$zero
.L0f1719a8:
/* f1719a8: 0fc5cd4f */ jal texReadBits
/* f1719ac: 24040018 */ addiu $a0,$zero,0x18
/* f1719b0: 0002ca00 */ sll $t9,$v0,0x8
/* f1719b4: 26100001 */ addiu $s0,$s0,0x1
/* f1719b8: 372800ff */ ori $t0,$t9,0xff
/* f1719bc: 26310004 */ addiu $s1,$s1,0x4
/* f1719c0: 1612fff9 */ bne $s0,$s2,.L0f1719a8
/* f1719c4: ae28fffc */ sw $t0,-0x4($s1)
.L0f1719c8:
/* f1719c8: 26940001 */ addiu $s4,$s4,0x1
/* f1719cc: 1697fff3 */ bne $s4,$s7,.L0f17199c
/* f1719d0: 02b3a821 */ addu $s5,$s5,$s3
.L0f1719d4:
/* f1719d4: 26490003 */ addiu $t1,$s2,0x3
/* f1719d8: 312a0ffc */ andi $t2,$t1,0xffc
/* f1719dc: 01570019 */ multu $t2,$s7
/* f1719e0: 00001012 */ mflo $v0
/* f1719e4: 00025880 */ sll $t3,$v0,0x2
/* f1719e8: 10000064 */ b .L0f171b7c
/* f1719ec: 01601025 */ or $v0,$t3,$zero
/* f1719f0: 1ae00010 */ blez $s7,.L0f171a34
/* f1719f4: 0000a025 */ or $s4,$zero,$zero
/* f1719f8: 26530003 */ addiu $s3,$s2,0x3
/* f1719fc: 326c0ffc */ andi $t4,$s3,0xffc
/* f171a00: 000c9840 */ sll $s3,$t4,0x1
.L0f171a04:
/* f171a04: 1a400008 */ blez $s2,.L0f171a28
/* f171a08: 00008025 */ or $s0,$zero,$zero
/* f171a0c: 02c08825 */ or $s1,$s6,$zero
.L0f171a10:
/* f171a10: 0fc5cd4f */ jal texReadBits
/* f171a14: 24040010 */ addiu $a0,$zero,0x10
/* f171a18: 26100001 */ addiu $s0,$s0,0x1
/* f171a1c: 26310002 */ addiu $s1,$s1,0x2
/* f171a20: 1612fffb */ bne $s0,$s2,.L0f171a10
/* f171a24: a622fffe */ sh $v0,-0x2($s1)
.L0f171a28:
/* f171a28: 26940001 */ addiu $s4,$s4,0x1
/* f171a2c: 1697fff5 */ bne $s4,$s7,.L0f171a04
/* f171a30: 02d3b021 */ addu $s6,$s6,$s3
.L0f171a34:
/* f171a34: 264e0003 */ addiu $t6,$s2,0x3
/* f171a38: 31cf0ffc */ andi $t7,$t6,0xffc
/* f171a3c: 01f70019 */ multu $t7,$s7
/* f171a40: 00001012 */ mflo $v0
/* f171a44: 0002c040 */ sll $t8,$v0,0x1
/* f171a48: 1000004c */ b .L0f171b7c
/* f171a4c: 03001025 */ or $v0,$t8,$zero
/* f171a50: 1ae00012 */ blez $s7,.L0f171a9c
/* f171a54: 0000a025 */ or $s4,$zero,$zero
/* f171a58: 26530003 */ addiu $s3,$s2,0x3
/* f171a5c: 32790ffc */ andi $t9,$s3,0xffc
/* f171a60: 00199840 */ sll $s3,$t9,0x1
.L0f171a64:
/* f171a64: 1a40000a */ blez $s2,.L0f171a90
/* f171a68: 00008025 */ or $s0,$zero,$zero
/* f171a6c: 02c08825 */ or $s1,$s6,$zero
.L0f171a70:
/* f171a70: 0fc5cd4f */ jal texReadBits
/* f171a74: 2404000f */ addiu $a0,$zero,0xf
/* f171a78: 00024840 */ sll $t1,$v0,0x1
/* f171a7c: 26100001 */ addiu $s0,$s0,0x1
/* f171a80: 352a0001 */ ori $t2,$t1,0x1
/* f171a84: 26310002 */ addiu $s1,$s1,0x2
/* f171a88: 1612fff9 */ bne $s0,$s2,.L0f171a70
/* f171a8c: a62afffe */ sh $t2,-0x2($s1)
.L0f171a90:
/* f171a90: 26940001 */ addiu $s4,$s4,0x1
/* f171a94: 1697fff3 */ bne $s4,$s7,.L0f171a64
/* f171a98: 02d3b021 */ addu $s6,$s6,$s3
.L0f171a9c:
/* f171a9c: 264b0003 */ addiu $t3,$s2,0x3
/* f171aa0: 316c0ffc */ andi $t4,$t3,0xffc
/* f171aa4: 01970019 */ multu $t4,$s7
/* f171aa8: 00001012 */ mflo $v0
/* f171aac: 00026840 */ sll $t5,$v0,0x1
/* f171ab0: 10000032 */ b .L0f171b7c
/* f171ab4: 01a01025 */ or $v0,$t5,$zero
/* f171ab8: 1ae00010 */ blez $s7,.L0f171afc
/* f171abc: 0000a025 */ or $s4,$zero,$zero
/* f171ac0: 26550007 */ addiu $s5,$s2,0x7
/* f171ac4: 32ae0ff8 */ andi $t6,$s5,0xff8
/* f171ac8: 01c0a825 */ or $s5,$t6,$zero
.L0f171acc:
/* f171acc: 1a400008 */ blez $s2,.L0f171af0
/* f171ad0: 00008025 */ or $s0,$zero,$zero
/* f171ad4: 02608825 */ or $s1,$s3,$zero
.L0f171ad8:
/* f171ad8: 0fc5cd4f */ jal texReadBits
/* f171adc: 24040008 */ addiu $a0,$zero,0x8
/* f171ae0: 26100001 */ addiu $s0,$s0,0x1
/* f171ae4: 26310001 */ addiu $s1,$s1,0x1
/* f171ae8: 1612fffb */ bne $s0,$s2,.L0f171ad8
/* f171aec: a222ffff */ sb $v0,-0x1($s1)
.L0f171af0:
/* f171af0: 26940001 */ addiu $s4,$s4,0x1
/* f171af4: 1697fff5 */ bne $s4,$s7,.L0f171acc
/* f171af8: 02759821 */ addu $s3,$s3,$s5
.L0f171afc:
/* f171afc: 264f0007 */ addiu $t7,$s2,0x7
/* f171b00: 31f80ff8 */ andi $t8,$t7,0xff8
/* f171b04: 03170019 */ multu $t8,$s7
/* f171b08: 00001012 */ mflo $v0
/* f171b0c: 1000001c */ b .L0f171b80
/* f171b10: 8fbf0034 */ lw $ra,0x34($sp)
/* f171b14: 1ae00011 */ blez $s7,.L0f171b5c
/* f171b18: 0000a025 */ or $s4,$zero,$zero
/* f171b1c: 2651000f */ addiu $s1,$s2,0xf
/* f171b20: 32390ff0 */ andi $t9,$s1,0xff0
/* f171b24: 00198843 */ sra $s1,$t9,0x1
.L0f171b28:
/* f171b28: 1a400009 */ blez $s2,.L0f171b50
/* f171b2c: 00008025 */ or $s0,$zero,$zero
.L0f171b30:
/* f171b30: 0fc5cd4f */ jal texReadBits
/* f171b34: 24040008 */ addiu $a0,$zero,0x8
/* f171b38: 00104843 */ sra $t1,$s0,0x1
/* f171b3c: 26100002 */ addiu $s0,$s0,0x2
/* f171b40: 0212082a */ slt $at,$s0,$s2
/* f171b44: 02695021 */ addu $t2,$s3,$t1
/* f171b48: 1420fff9 */ bnez $at,.L0f171b30
/* f171b4c: a1420000 */ sb $v0,0x0($t2)
.L0f171b50:
/* f171b50: 26940001 */ addiu $s4,$s4,0x1
/* f171b54: 1697fff4 */ bne $s4,$s7,.L0f171b28
/* f171b58: 02719821 */ addu $s3,$s3,$s1
.L0f171b5c:
/* f171b5c: 264b000f */ addiu $t3,$s2,0xf
/* f171b60: 316c0ff0 */ andi $t4,$t3,0xff0
/* f171b64: 000c6843 */ sra $t5,$t4,0x1
/* f171b68: 01b70019 */ multu $t5,$s7
/* f171b6c: 00001012 */ mflo $v0
/* f171b70: 10000003 */ b .L0f171b80
/* f171b74: 8fbf0034 */ lw $ra,0x34($sp)
.L0f171b78:
/* f171b78: 00001025 */ or $v0,$zero,$zero
.L0f171b7c:
/* f171b7c: 8fbf0034 */ lw $ra,0x34($sp)
.L0f171b80:
/* f171b80: 8fb00014 */ lw $s0,0x14($sp)
/* f171b84: 8fb10018 */ lw $s1,0x18($sp)
/* f171b88: 8fb2001c */ lw $s2,0x1c($sp)
/* f171b8c: 8fb30020 */ lw $s3,0x20($sp)
/* f171b90: 8fb40024 */ lw $s4,0x24($sp)
/* f171b94: 8fb50028 */ lw $s5,0x28($sp)
/* f171b98: 8fb6002c */ lw $s6,0x2c($sp)
/* f171b9c: 8fb70030 */ lw $s7,0x30($sp)
/* f171ba0: 03e00008 */ jr $ra
/* f171ba4: 27bd0038 */ addiu $sp,$sp,0x38
);
/**
* Read pixel data from the bitstream and write to dst,
* ensuring each row is aligned according to the pixel format.
*
* Return the number of output bytes.
*/
s32 texReadUncompressed(u8 *dst, s32 width, s32 height, s32 format)
{
u32 *dst32 = (u32 *)(((u32)dst + 0xf) & ~0xf);
u16 *dst16 = (u16 *)(((u32)dst + 7) & ~7);
u8 *dst8 = (u8 *)(((u32)dst + 7) & ~7);
s32 x;
s32 y;
switch (format) {
case TEXFORMAT_RGBA32:
for (y = 0; y < height; y++) {
for (x = 0; x < width; x++) {
dst32[x] = texReadBits(16) << 16;
dst32[x] |= texReadBits(16);
}
dst32 += (width + 3) & 0xffc;
}
return ((width + 3) & 0xffc) * height * 4;
case TEXFORMAT_RGB24:
for (y = 0; y < height; y++) {
for (x = 0; x < width; x++) {
dst32[x] = texReadBits(24) << 8 | 0xff;
}
dst32 += (width + 3) & 0xffc;
}
return ((width + 3) & 0xffc) * height * 4;
case TEXFORMAT_RGBA16:
case TEXFORMAT_IA16:
for (y = 0; y < height; y++) {
for (x = 0; x < width; x++) {
dst16[x] = texReadBits(16);
}
dst16 += (width + 3) & 0xffc;
}
return ((width + 3) & 0xffc) * height * 2;
case TEXFORMAT_RGB15:
for (y = 0; y < height; y++) {
for (x = 0; x < width; x++) {
dst16[x] = texReadBits(15) << 1 | 1;
}
dst16 += (width + 3) & 0xffc;
}
return ((width + 3) & 0xffc) * height * 2;
case TEXFORMAT_IA8:
case TEXFORMAT_I8:
for (y = 0; y < height; y++) {
for (x = 0; x < width; x++) {
dst8[x] = texReadBits(8);
}
dst8 += (width + 7) & 0xff8;
}
return ((width + 7) & 0xff8) * height;
case TEXFORMAT_IA4:
case TEXFORMAT_I4:
for (y = 0; y < height; y++) {
for (x = 0; x < width; x += 2) {
dst8[x >> 1] = texReadBits(8);
}
dst8 += ((width + 15) & 0xff0) >> 1;
}
return (((width + 15) & 0xff0) >> 1) * height;
}
return 0;
}
GLOBAL_ASM(
glabel func0f171ba8

View File

@ -21,7 +21,7 @@ void texInflateRle(u8 *arg0, s32 arg1);
s32 texBuildLookup(u8 *arg0, s32 bpp);
s32 func0f171828(s32 arg0);
void texReadAlphaBits(u8 *dst, s32 count);
s32 texInflateMethod1(u8 *arg0, s32 width, s32 height, s32 format);
s32 texReadUncompressed(u8 *dst, s32 width, s32 height, s32 format);
s32 func0f171ba8(u8 *arg0, s32 width, s32 height, u8 *arg3, s32 format);
s32 func0f17218c(s32 width, s32 height, u8 *arg2, u8 *arg3, s32 arg4, s32 format);
s32 func0f172554(u8 *arg0, s32 width, s32 height, u8 *arg3, u8 *arg4, s32 arg5, s32 format);