@@ -34,7 +34,7 @@ private unsafe static int DecodeASTC(byte* input, int width, int height, int blo
3434 int bcw = ( width + blockWidth - 1 ) / blockWidth ;
3535 int bch = ( height + blockHeight - 1 ) / blockHeight ;
3636 int clen_last = ( width + blockWidth - 1 ) % blockWidth + 1 ;
37- uint * buf = stackalloc uint [ blockWidth * blockHeight ] ;
37+ Span < uint > buf = stackalloc uint [ blockWidth * blockHeight ] ;
3838 int inputOffset = 0 ;
3939 for ( int t = 0 ; t < bch ; t ++ )
4040 {
@@ -43,23 +43,21 @@ private unsafe static int DecodeASTC(byte* input, int width, int height, int blo
4343 DecodeBlock ( input + inputOffset , blockWidth , blockHeight , buf ) ;
4444 int clen = s < bcw - 1 ? blockWidth : clen_last ;
4545 uint * outputPtr = ( uint * ) ( output + ( t * blockHeight * 4 * width + s * 4 * blockWidth ) ) ;
46- uint * bufPtr = buf ;
4746 for ( int i = 0 , y = t * blockHeight ; i < blockHeight && y < height ; i ++ , y ++ )
4847 {
4948 for ( int j = 0 ; j < clen ; j ++ )
5049 {
51- outputPtr [ j ] = bufPtr [ j ] ;
50+ outputPtr [ j ] = buf [ j + i * blockWidth ] ;
5251 }
5352
5453 outputPtr += width ;
55- bufPtr += blockWidth ;
5654 }
5755 }
5856 }
5957 return inputOffset ;
6058 }
6159
62- private unsafe static void DecodeBlock ( byte * input , int blockWidth , int blockHeight , uint * output )
60+ private unsafe static void DecodeBlock ( byte * input , int blockWidth , int blockHeight , Span < uint > output )
6361 {
6462 if ( input [ 0 ] == 0xfc && ( input [ 1 ] & 1 ) == 1 )
6563 {
@@ -82,7 +80,7 @@ private unsafe static void DecodeBlock(byte* input, int blockWidth, int blockHei
8280 {
8381 SelectPartition ( input , blockPtr ) ;
8482 }
85- ApplicateColor ( blockPtr , output ) ;
83+ ApplicateColor ( blockData , output ) ;
8684 }
8785 }
8886
@@ -680,56 +678,56 @@ private unsafe static void SelectPartition(byte* input, BlockData* block)
680678 }
681679 }
682680
683- private unsafe static void ApplicateColor( BlockData* block , uint * output)
681+ private unsafe static void ApplicateColor ( BlockData block , Span < uint > output )
684682 {
685- if ( block -> dual_plane != 0 )
683+ if ( block . dual_plane != 0 )
686684 {
687- int * ps = stackalloc int [ ] { 0 , 0 , 0 , 0 } ;
688- ps [ block -> plane_selector ] = 1 ;
689- if ( block -> part_num > 1 )
685+ Span < int > ps = stackalloc int [ ] { 0 , 0 , 0 , 0 } ;
686+ ps [ block . plane_selector ] = 1 ;
687+ if ( block . part_num > 1 )
690688 {
691- for ( int i = 0 ; i < block -> bw * block -> bh ; i++ )
689+ for ( int i = 0 ; i < block . bw * block . bh ; i++ )
692690 {
693- int p = block-> partition[ i] ;
694- byte r = SelectColor( block-> endpoints[ p * 8 + 0 ] , block -> endpoints [ p * 8 + 4 ] , block -> weights [ i * 2 + ps [ 0 ] ] ) ;
695- byte g = SelectColor( block -> endpoints [ p * 8 + 1 ] , block-> endpoints [ p * 8 + 5 ] , block-> weights [ i * 2 + ps [ 1 ] ] ) ;
696- byte b = SelectColor ( block -> endpoints [ p * 8 + 2 ] , block -> endpoints [ p * 8 + 6 ] , block -> weights [ i * 2 + ps [ 2 ] ] ) ;
697- byte a = SelectColor ( block -> endpoints [ p * 8 + 3 ] , block -> endpoints [ p * 8 + 7 ] , block -> weights [ i * 2 + ps [ 3 ] ] ) ;
691+ int p = block. partition[ i] ;
692+ byte r = SelectColor( block . endpoints [ p * 8 + 0 ] , block . endpoints [ p * 8 + 4 ] , block . weights [ i * 2 + ps [ 0 ] ] ) ;
693+ byte g = SelectColor ( block . endpoints [ p * 8 + 1 ] , block . endpoints [ p * 8 + 5 ] , block . weights [ i * 2 + ps [ 1 ] ] ) ;
694+ byte b = SelectColor( block . endpoints [ p * 8 + 2 ] , block . endpoints [ p * 8 + 6 ] , block . weights [ i * 2 + ps [ 2 ] ] ) ;
695+ byte a = SelectColor( block . endpoints [ p * 8 + 3 ] , block . endpoints [ p * 8 + 7 ] , block . weights [ i * 2 + ps [ 3 ] ] ) ;
698696 output[ i ] = Color ( r , g , b , a ) ;
699697 }
700698 }
701699 else
702700 {
703- for ( int i = 0 ; i < block -> bw * block -> bh ; i++ )
701+ for ( int i = 0 ; i < block . bw * block . bh ; i++ )
704702 {
705- byte r = SelectColor( block-> endpoints[ 0 ] , block -> endpoints [ 4 ] , block -> weights [ i * 2 + ps [ 0 ] ] ) ;
706- byte g = SelectColor( block -> endpoints [ 1 ] , block -> endpoints [ 5 ] , block -> weights [ i * 2 + ps [ 1 ] ] ) ;
707- byte b = SelectColor( block -> endpoints [ 2 ] , block -> endpoints [ 6 ] , block -> weights [ i * 2 + ps [ 2 ] ] ) ;
708- byte a = SelectColor( block -> endpoints [ 3 ] , block -> endpoints [ 7 ] , block -> weights [ i * 2 + ps [ 3 ] ] ) ;
703+ byte r = SelectColor( block . endpoints [ 0 ] , block . endpoints [ 4 ] , block . weights [ i * 2 + ps [ 0 ] ] ) ;
704+ byte g = SelectColor ( block . endpoints [ 1 ] , block . endpoints [ 5 ] , block . weights [ i * 2 + ps [ 1 ] ] ) ;
705+ byte b = SelectColor( block . endpoints [ 2 ] , block . endpoints [ 6 ] , block . weights [ i * 2 + ps [ 2 ] ] ) ;
706+ byte a = SelectColor( block . endpoints [ 3 ] , block . endpoints [ 7 ] , block . weights [ i * 2 + ps [ 3 ] ] ) ;
709707 output[ i ] = Color ( r , g , b , a ) ;
710708 }
711709 }
712710 }
713- else if ( block -> part_num > 1 )
711+ else if ( block . part_num > 1 )
714712 {
715- for ( int i = 0 ; i < block -> bw * block -> bh ; i++ )
713+ for ( int i = 0 ; i < block . bw * block . bh ; i++ )
716714 {
717- int p = block-> partition[ i] ;
718- byte r = SelectColor( block-> endpoints[ p * 8 + 0 ] , block -> endpoints [ p * 8 + 4 ] , block -> weights [ i * 2 ] ) ;
719- byte g = SelectColor( block -> endpoints [ p * 8 + 1 ] , block-> endpoints [ p * 8 + 5 ] , block-> weights [ i * 2 ] ) ;
720- byte b = SelectColor ( block -> endpoints [ p * 8 + 2 ] , block -> endpoints [ p * 8 + 6 ] , block -> weights [ i * 2 ] ) ;
721- byte a = SelectColor ( block -> endpoints [ p * 8 + 3 ] , block -> endpoints [ p * 8 + 7 ] , block -> weights [ i * 2 ] ) ;
715+ int p = block. partition[ i] ;
716+ byte r = SelectColor( block . endpoints [ p * 8 + 0 ] , block . endpoints [ p * 8 + 4 ] , block . weights [ i * 2 ] ) ;
717+ byte g = SelectColor ( block . endpoints [ p * 8 + 1 ] , block . endpoints [ p * 8 + 5 ] , block . weights [ i * 2 ] ) ;
718+ byte b = SelectColor( block . endpoints [ p * 8 + 2 ] , block . endpoints [ p * 8 + 6 ] , block . weights [ i * 2 ] ) ;
719+ byte a = SelectColor( block . endpoints [ p * 8 + 3 ] , block . endpoints [ p * 8 + 7 ] , block . weights [ i * 2 ] ) ;
722720 output[ i ] = Color ( r , g , b , a ) ;
723721 }
724722 }
725723 else
726724 {
727- for ( int i = 0 ; i < block -> bw * block -> bh ; i++ )
725+ for ( int i = 0 ; i < block . bw * block . bh ; i++ )
728726 {
729- byte r = SelectColor( block-> endpoints[ 0 ] , block -> endpoints [ 4 ] , block -> weights [ i * 2 ] ) ;
730- byte g = SelectColor( block -> endpoints [ 1 ] , block -> endpoints [ 5 ] , block -> weights [ i * 2 ] ) ;
731- byte b = SelectColor( block -> endpoints [ 2 ] , block -> endpoints [ 6 ] , block -> weights [ i * 2 ] ) ;
732- byte a = SelectColor( block -> endpoints [ 3 ] , block -> endpoints [ 7 ] , block -> weights [ i * 2 ] ) ;
727+ byte r = SelectColor( block . endpoints [ 0 ] , block . endpoints [ 4 ] , block . weights [ i * 2 ] ) ;
728+ byte g = SelectColor ( block . endpoints [ 1 ] , block . endpoints [ 5 ] , block . weights [ i * 2 ] ) ;
729+ byte b = SelectColor( block . endpoints [ 2 ] , block . endpoints [ 6 ] , block . weights [ i * 2 ] ) ;
730+ byte a = SelectColor( block . endpoints [ 3 ] , block . endpoints [ 7 ] , block . weights [ i * 2 ] ) ;
733731 output[ i ] = Color ( r , g , b , a ) ;
734732 }
735733 }
0 commit comments