diff --git a/src/gu/Makefile.am b/src/gu/Makefile.am index 3e804333..d0f3484b 100644 --- a/src/gu/Makefile.am +++ b/src/gu/Makefile.am @@ -31,5 +31,5 @@ libpspgu_a_SOURCES = callbackFin.c callbackSig.c guInternal.c resetValues.c sceG sceGuSignal.c sceGuSpecular.c sceGuStart.c sceGuStencilFunc.c sceGuStencilOp.c \ sceGuSwapBuffers.c sceGuSync.c sceGuTerm.c sceGuTexEnvColor.c sceGuTexFilter.c sceGuTexFlush.c sceGuTexFunc.c \ sceGuTexImage.c sceGuTexLevelMode.c sceGuTexMapMode.c sceGuTexMode.c sceGuTexOffset.c sceGuTexProjMapMode.c \ - sceGuTexScale.c sceGuTexSlope.c sceGuTexSync.c sceGuTexWrap.c sceGuViewport.c sendCommand.c + sceGuTexScale.c sceGuTexSlope.c sceGuTexSync.c sceGuTexWrap.c sceGuViewport.c diff --git a/src/gu/guInternal.h b/src/gu/guInternal.h index b54ec22a..99ed8137 100644 --- a/src/gu/guInternal.h +++ b/src/gu/guInternal.h @@ -17,109 +17,130 @@ typedef struct { GuCallback sig; GuCallback fin; - short signal_history[16]; - int signal_offset; - int kernel_event_flag; - int ge_callback_id; + short signal_history[16]; + int signal_offset; + int kernel_event_flag; + int ge_callback_id; GuSwapBuffersCallback swapBuffersCallback; - int swapBuffersBehaviour; + int swapBuffersBehaviour; } GuSettings; typedef struct { unsigned int* start; unsigned int* current; - int parent_context; + int parent_context; } GuDisplayList; typedef struct { GuDisplayList list; - int scissor_enable; - int scissor_start[2]; - int scissor_end[2]; - int near_plane; - int far_plane; - int depth_offset; - int fragment_2x; - int texture_function; - int texture_proj_map_mode; - int texture_map_mode; - int sprite_mode[4]; - unsigned int clear_color; - unsigned int clear_stencil; - unsigned int clear_depth; - int texture_mode; + int scissor_enable; + int scissor_start[2]; + int scissor_end[2]; + int near_plane; + int far_plane; + int depth_offset; + int fragment_2x; + int texture_function; + int texture_proj_map_mode; + int texture_map_mode; + int sprite_mode[4]; + unsigned int clear_color; + unsigned int clear_stencil; + unsigned int clear_depth; + int texture_mode; } GuContext; typedef struct { - int pixel_size; - int frame_width; + int pixel_size; + int frame_width; void* frame_buffer; void* disp_buffer; void* depth_buffer; - int depth_width; - int width; - int height; + int depth_width; + int width; + int height; } GuDrawBuffer; typedef struct { /* row 0 */ - unsigned char enable; // Light enable - unsigned char type; // Light type - unsigned char xpos; // X position - unsigned char ypos; // Y position + unsigned char enable; // Light enable + unsigned char type; // Light type + unsigned char xpos; // X position + unsigned char ypos; // Y position /* row 1 */ - unsigned char zpos; // Z position - unsigned char xdir; // X direction - unsigned char ydir; // Y direction - unsigned char zdir; // Z direction + unsigned char zpos; // Z position + unsigned char xdir; // X direction + unsigned char ydir; // Y direction + unsigned char zdir; // Z direction /* row 2 */ - unsigned char ambient; // Ambient color - unsigned char diffuse; // Diffuse color - unsigned char specular; // Specular color - unsigned char constant; // Constant attenuation + unsigned char ambient; // Ambient color + unsigned char diffuse; // Diffuse color + unsigned char specular; // Specular color + unsigned char constant; // Constant attenuation /* row 3 */ - unsigned char linear; // Linear attenuation + unsigned char linear; // Linear attenuation unsigned char quadratic;// Quadratic attenuation - unsigned char exponent; // Light exponent - unsigned char cutoff; // Light cutoff + unsigned char exponent; // Light exponent + unsigned char cutoff; // Light cutoff } GuLightSettings; -extern unsigned int gu_current_frame; -extern GuContext gu_contexts[3]; -extern int ge_list_executed[2]; -extern void* ge_edram_address; -extern GuSettings gu_settings; +extern unsigned int gu_current_frame; +extern GuContext gu_contexts[3]; +extern int ge_list_executed[2]; +extern void* ge_edram_address; +extern GuSettings gu_settings; extern GuDisplayList* gu_list; -extern int gu_curr_context; -extern int gu_init; -extern int gu_display_on; -extern int gu_call_mode; -extern int gu_states; -extern GuDrawBuffer gu_draw_buffer; +extern int gu_curr_context; +extern int gu_init; +extern int gu_display_on; +extern int gu_call_mode; +extern int gu_states; +extern GuDrawBuffer gu_draw_buffer; extern unsigned int* gu_object_stack[]; -extern int gu_object_stack_depth; +extern int gu_object_stack_depth; extern GuLightSettings light_settings[4]; -void sendCommandi(int cmd, int argument); -void sendCommandiStall(int cmd, int argument); -void sendCommandf(int cmd, float argument); - void callbackSig(int id, void* arg); void callbackFin(int id, void* arg); void resetValues(); +static __inline__ void sendCommandi(int cmd, int argument) +{ + *(gu_list->current++) = (cmd << 24) | (argument & 0xffffff); +} + +static __inline__ void sendCommandf(int cmd, float argument) +{ + union + { + float f; + unsigned int i; + } t; + t.f = argument; + + sendCommandi(cmd,t.i >> 8); +} + +static __inline__ void sendCommandiStall(int cmd, int argument) +{ + sendCommandi(cmd,argument); + + if (!gu_object_stack_depth && !gu_curr_context) + sceGeListUpdateStallAddr(ge_list_executed[0],gu_list->current); +} + #endif diff --git a/src/gu/sendCommand.c b/src/gu/sendCommand.c deleted file mode 100644 index ced9edb6..00000000 --- a/src/gu/sendCommand.c +++ /dev/null @@ -1,37 +0,0 @@ -/* - * PSP Software Development Kit - https://github.com/pspdev - * ----------------------------------------------------------------------- - * Licensed under the BSD license, see LICENSE in PSPSDK root for details. - * - * Copyright (c) 2005 Jesper Svennevid - */ - -#include "guInternal.h" - -#include -#include - -void sendCommandi(int cmd, int argument) -{ - *(gu_list->current++) = (cmd << 24) | (argument & 0xffffff); -} - -void sendCommandf(int cmd, float argument) -{ - union - { - float f; - unsigned int i; - } t; - t.f = argument; - - sendCommandi(cmd,t.i >> 8); -} - -void sendCommandiStall(int cmd, int argument) -{ - sendCommandi(cmd,argument); - - if (!gu_object_stack_depth && !gu_curr_context) - sceGeListUpdateStallAddr(ge_list_executed[0],gu_list->current); -}