]> Chaos Git - corbenik/ctrulib.git/commitdiff
temporary solution for 0x10 byte gpucmd alignment
authorsmea <smealum@gmail.com>
Wed, 10 Dec 2014 05:49:18 +0000 (21:49 -0800)
committersmea <smealum@gmail.com>
Wed, 10 Dec 2014 05:49:18 +0000 (21:49 -0800)
fixes A LOT of gpu related issues

(temporary solution because big gpu refactor is coming soon)

libctru/source/gpu/gpu.c
libctru/source/gpu/shdr.c
libctru/source/services/gsp.c

index 0b22c2fbeec8dd2425c2bacb3144f25d8de85a50..97d14db2812defd82a264483a0ae0d790cc989d7 100644 (file)
@@ -96,6 +96,7 @@ void GPUCMD_Finalize()
        GPUCMD_AddSingleParam(0x000F0111, 0x00000001);
        GPUCMD_AddSingleParam(0x000F0110, 0x00000001);
        GPUCMD_AddSingleParam(0x000F0010, 0x12345678);
+       GPUCMD_AddSingleParam(0x000F0010, 0x12345678); //not the cleanest way of guaranteeing 0x10-byte size but whatever good enough for now
 }
 
 extern u32 gpuResetSequence[];
index bab41664c0d379f1f9c8c6e627438f9ece9d4893..dd0a60e685dfd323a70b5e982d2047f78f958cf9 100644 (file)
@@ -71,18 +71,6 @@ s8 SHDR_GetUniformRegister(DVLB_s* dvlb, char* name, u8 programID)
        return -1;
 }
 
-//hm
-static inline u8 minu8(u8 a, u8 b)
-{
-       if(a<b)return a;
-       return b;
-}
-static inline u8 maxu8(u8 a, u8 b)
-{
-       if(a<b)return b;
-       return a;
-}
-
 void DVLP_SendCode(DVLP_s* dvlp)
 {
        if(!dvlp)return;
@@ -90,8 +78,7 @@ void DVLP_SendCode(DVLP_s* dvlp)
        GPUCMD_AddSingleParam(0x000F02CB, 0x00000000);
 
        int i;
-       // for(i=0;i<dvlp->codeSize;i+=0x80)GPUCMD_Add(0x000F02CC, &dvlp->codeData[i], ((dvlp->codeSize-i)<0x80)?(dvlp->codeSize-i):0x80);
-       for(i=0;i<dvlp->codeSize;i+=0x80)GPUCMD_Add(0x000F02CC, &dvlp->codeData[i], maxu8(minu8(dvlp->codeSize-i,0x80),0x37)); //not sure why, but anything smaller than 0x37 seems to break stuff atm...
+       for(i=0;i<dvlp->codeSize;i+=0x80)GPUCMD_Add(0x000F02CC, &dvlp->codeData[i], ((dvlp->codeSize-i)<0x80)?(dvlp->codeSize-i):0x80);
 
        GPUCMD_AddSingleParam(0x000F02BF, 0x00000001);
 }
index 514a7450b50b1c2b02f94a9b784df47f71b0be51..0ddbfce68ff16d150e944889976364b2dde63cea 100644 (file)
@@ -10,6 +10,7 @@
 
 Handle gspGpuHandle=0;
 Handle gspEvents[GSPEVENT_MAX];
+u32 gspEventCounts[GSPEVENT_MAX];
 u64 gspEventStack[GSP_EVENT_STACK_SIZE/sizeof(u64)]; //u64 so that it's 8-byte aligned
 volatile bool gspRunEvents;
 Handle gspEventThread;
@@ -97,6 +98,7 @@ void gspEventThreadMain(u32 arg)
                        if (cur >= 0x34) cur -= 0x34;
                        if (curEvt >= GSPEVENT_MAX) continue;
                        svcSignalEvent(gspEvents[curEvt]);
+                       gspEventCounts[curEvt]++;
                }
 
                gspEventData[0] = last;