]> Chaos Git - corbenik/ctrulib.git/commitdiff
fixed up DVLE_SendOutmap
authorsmea <smealum@gmail.com>
Sat, 27 Dec 2014 19:22:48 +0000 (11:22 -0800)
committersmea <smealum@gmail.com>
Sat, 27 Dec 2014 19:22:48 +0000 (11:22 -0800)
libctru/include/3ds/gpu/shdr.h
libctru/source/gpu/shdr.c

index 1a89ddbb9d6d741978f82f4cb0dea03d628094ea..ecfe41f16dd2ce4a0240047f274c216600032b50 100644 (file)
@@ -7,10 +7,13 @@ typedef enum{
 
 typedef enum{
        RESULT_POSITION = 0x0,
+       RESULT_NORMALQUAT = 0x1,
        RESULT_COLOR = 0x2,
        RESULT_TEXCOORD0 = 0x3,
+       RESULT_TEXCOORD0W = 0x4,
        RESULT_TEXCOORD1 = 0x5,
-       RESULT_TEXCOORD2 = 0x6
+       RESULT_TEXCOORD2 = 0x6,
+       RESULT_VIEW = 0x8
 }SHDR_outType;
 
 typedef struct{
@@ -28,7 +31,8 @@ typedef struct{
 typedef struct{
        u16 type;
        u16 regID;
-       u32 header;
+       u8 mask;
+       u8 unk[3];
 }DVLE_outEntry_s;
 
 typedef struct{
index bcbac3635d6cf3a73e1ef0b2ebbd63d5ca80e246..c38638efd30eb8e6c0e874f095c963b589ca59e5 100644 (file)
@@ -119,19 +119,28 @@ void DVLE_SendOutmap(DVLE_s* dvle)
        for(i=0;i<dvle->outTableSize;i++)
        {
                u32* out=&param[dvle->outTableData[i].regID+1];
+               u32 mask=0x00000000;
+               u8 tmpmask=dvle->outTableData[i].mask;
+               mask=(mask<<8)|((tmpmask&8)?0xFF:0x00);tmpmask<<=1;
+               mask=(mask<<8)|((tmpmask&8)?0xFF:0x00);tmpmask<<=1;
+               mask=(mask<<8)|((tmpmask&8)?0xFF:0x00);tmpmask<<=1;
+               mask=(mask<<8)|((tmpmask&8)?0xFF:0x00);tmpmask<<=1;
                
                if(*out==0x1F1F1F1F)numAttr++;
 
-               //desc could include masking/swizzling info not currently taken into account
-               //also TODO : map out other output register values
+               u32 val=0x1F1F1F1F;
                switch(dvle->outTableData[i].type)
                {
-                       case RESULT_POSITION: *out=0x03020100; break;
-                       case RESULT_COLOR: *out=0x0B0A0908; break;
-                       case RESULT_TEXCOORD0: *out=0x1F1F0D0C; break;
-                       case RESULT_TEXCOORD1: *out=0x1F1F0F0E; break;
-                       case RESULT_TEXCOORD2: *out=0x1F1F1716; break;
+                       case RESULT_POSITION: val=0x03020100; break;
+                       case RESULT_NORMALQUAT: val=0x07060504; break;
+                       case RESULT_COLOR: val=0x0B0A0908; break;
+                       case RESULT_TEXCOORD0: val=0x1F1F0D0C; break;
+                       case RESULT_TEXCOORD0W: val=0x10101010; break;
+                       case RESULT_TEXCOORD1: val=0x1F1F0F0E; break;
+                       case RESULT_TEXCOORD2: val=0x1F1F1716; break;
+                       case RESULT_VIEW: val=0x1F141312; break;
                }
+               *out=((*out)&~mask)|(val&mask);
 
                attrMask|=1<<dvle->outTableData[i].regID;
                if(dvle->outTableData[i].regID+1>maxAttr)maxAttr=dvle->outTableData[i].regID+1;