#7715 - wizardgsz - Mon Jun 23, 2003 2:18 pm
Has someone got a fast routine to load a linear framebuffer into OBJ/BG Vram?
This silly C implementation takes so many cycles:(
Hear you soon!
_________________
http://www.geocities.com/gabriele_scibilia/
This silly C implementation takes so many cycles:(
Hear you soon!
Code: |
void CopyFromLinearBuffer( u16* a_Dest, u16* a_Source, u32 a_WidthInBlocks, u32 a_HeightInBlocks ) { // Dummy counters; u32 x, y; // Source data pointers to the 8x8 block u16 *s0, *s1, *s2, *s3, *s4, *s5, *s6, *s7; // Calculate the number of 16 bit halfwords for each image row u32 widthInHalfwords = a_WidthInBlocks << 3 >> 1; // Let's start from the first upper-left block for ( y = 0; y < a_HeightInBlocks; y++ ) { s0 = &a_Source[ widthInHalfwords * y * 8 ]; s1 = s0 + widthInHalfwords; s2 = s1 + widthInHalfwords; s3 = s2 + widthInHalfwords; s4 = s3 + widthInHalfwords; s5 = s4 + widthInHalfwords; s6 = s5 + widthInHalfwords; s7 = s6 + widthInHalfwords; // Process the entire 8x8 block for ( x = 0; x < a_WidthInBlocks; x++ ) { *a_Dest++ = *s0++; *a_Dest++ = *s0++; *a_Dest++ = *s0++; *a_Dest++ = *s0++; *a_Dest++ = *s1++; *a_Dest++ = *s1++; *a_Dest++ = *s1++; *a_Dest++ = *s1++; *a_Dest++ = *s2++; *a_Dest++ = *s2++; *a_Dest++ = *s2++; *a_Dest++ = *s2++; *a_Dest++ = *s3++; *a_Dest++ = *s3++; *a_Dest++ = *s3++; *a_Dest++ = *s3++; *a_Dest++ = *s4++; *a_Dest++ = *s4++; *a_Dest++ = *s4++; *a_Dest++ = *s4++; *a_Dest++ = *s5++; *a_Dest++ = *s5++; *a_Dest++ = *s5++; *a_Dest++ = *s5++; *a_Dest++ = *s6++; *a_Dest++ = *s6++; *a_Dest++ = *s6++; *a_Dest++ = *s6++; *a_Dest++ = *s7++; *a_Dest++ = *s7++; *a_Dest++ = *s7++; *a_Dest++ = *s7++; } } } |
_________________
http://www.geocities.com/gabriele_scibilia/