My Project
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules
gpu.c
Go to the documentation of this file.
1 /*
2  gpu.c _ Advanced GPU commands.
3 */
4 
5 #include <stdlib.h>
6 #include <string.h>
7 #include <3ds.h>
8 
12 
13 void GPU_Init(Handle *gsphandle)
14 {
15  gpuCmdBuf=NULL;
16  gpuCmdBufSize=0;
18 }
19 
20 void GPUCMD_SetBuffer(u32* adr, u32 size, u32 offset)
21 {
22  gpuCmdBuf=adr;
23  gpuCmdBufSize=size;
24  gpuCmdBufOffset=offset;
25 }
26 
28 {
29  gpuCmdBufOffset=offset;
30 }
31 
32 void GPUCMD_GetBuffer(u32** adr, u32* size, u32* offset)
33 {
34  if(adr)*adr=gpuCmdBuf;
35  if(size)*size=gpuCmdBufSize;
36  if(offset)*offset=gpuCmdBufOffset;
37 }
38 
39 void GPUCMD_AddRawCommands(u32* cmd, u32 size)
40 {
41  if(!cmd || !size)return;
42 
43  memcpy(&gpuCmdBuf[gpuCmdBufOffset], cmd, size*4);
44  gpuCmdBufOffset+=size;
45 }
46 
47 void GPUCMD_Run(u32* gxbuf)
48 {
49  GX_SetCommandList_First(gxbuf, gpuCmdBuf, gpuCmdBufOffset*4, NULL, 0, NULL, 0);
51 }
52 
53 extern u32 __linear_heap_size;
54 extern u32* __linear_heap;
55 
56 void GPUCMD_FlushAndRun(u32* gxbuf)
57 {
58  //take advantage of GX_SetCommandList_First to flush gsp heap
61 }
62 
63 void GPUCMD_Add(u32 cmd, u32* param, u32 paramlength)
64 {
65  u32 zero=0x0;
66 
67  if(!param || !paramlength)
68  {
69  paramlength=1;
70  param=&zero;
71  }
72 
73  if(!gpuCmdBuf || gpuCmdBufOffset+paramlength+1>gpuCmdBufSize)return;
74 
75  paramlength--;
76  cmd|=(paramlength&0x7ff)<<20;
77 
78  gpuCmdBuf[gpuCmdBufOffset]=param[0];
80 
81  if(paramlength)memcpy(&gpuCmdBuf[gpuCmdBufOffset+2], &param[1], paramlength*4);
82 
83  gpuCmdBufOffset+=paramlength+2;
84 
85  if(paramlength&1)gpuCmdBuf[gpuCmdBufOffset++]=0x00000000; //alignment
86 }
87 
88 void GPUCMD_AddSingleParam(u32 cmd, u32 param)
89 {
90  GPUCMD_Add(cmd, &param, 1);
91 }
92 
94 {
95  GPUCMD_AddSingleParam(0x0008025E, 0x00000000);
96  GPUCMD_AddSingleParam(0x000F0111, 0x00000001);
97  GPUCMD_AddSingleParam(0x000F0110, 0x00000001);
98  GPUCMD_AddSingleParam(0x000F0010, 0x12345678);
99 }
100 
101 extern u32 gpuResetSequence[];
103 
104 void GPU_Reset(u32* gxbuf, u32* gpuBuf, u32 gpuBufSize)
105 {
106  int i;
107  static u32 param[0x80];
108  static u32 zero[0x80];
109  memset(zero, 0x00, 0x80*4);
110 
111  GPUCMD_SetBuffer(gpuBuf, gpuBufSize, 0);
112 
113  GPUCMD_AddSingleParam(0x000D0080, 0x00011000);
114 
115  for(i=0x1;i<0xC;i++)GPUCMD_AddSingleParam(0x000F0080+i, 0x00000000);
116  GPUCMD_AddSingleParam(0x000F008C, 0x00FF0000);
117  GPUCMD_AddSingleParam(0x000F008D, 0x00000000);
118  GPUCMD_AddSingleParam(0x000F008E, 0x00000000);
119 
120  for(i=0x0;i<0xF;i++)GPUCMD_AddSingleParam(0x000F0090+i, 0x00000000);
121 
122  GPUCMD_AddSingleParam(0x00010245, 0x00000001);
123  GPUCMD_AddSingleParam(0x00010244, 0x00000000);
124  GPUCMD_AddSingleParam(0x00080289, 0x80000000);
125  GPUCMD_AddSingleParam(0x000B0229, 0x00000000);
126 
127  GPUCMD_AddSingleParam(0x000F0252, 0x00000000);
128  GPUCMD_AddSingleParam(0x000F0251, 0x00000000);
129  GPUCMD_AddSingleParam(0x000F0254, 0x00000000);
130  GPUCMD_AddSingleParam(0x00010253, 0x00000000);
131 
132  GPUCMD_AddSingleParam(0x000F0242, 0x00000000);
133  GPUCMD_AddSingleParam(0x000F024A, 0x00000000);
134 
135  GPUCMD_AddSingleParam(0x0005025E, 0x00000000);
136 
137  GPUCMD_Add(0x800F0101, zero, 0x00000007);
138 
139  GPUCMD_AddSingleParam(0x000F011F, 0x00010140);
140  GPUCMD_AddSingleParam(0x000F0100, 0x00E40100);
141  GPUCMD_AddSingleParam(0x000F0101, 0x01010000);
142  GPUCMD_AddSingleParam(0x000F0107, 0x00001F40);
143  GPUCMD_AddSingleParam(0x000F0105, 0xFF00FF10);
144 
145  GPUCMD_AddSingleParam(0x00010061, 0x00000003);
146  GPUCMD_AddSingleParam(0x00010062, 0x00000000);
147 
148  GPUCMD_AddSingleParam(0x000F0065, 0x00000000);
149  GPUCMD_AddSingleParam(0x000F0066, 0x00000000);
150  GPUCMD_AddSingleParam(0x000F0067, 0x00000000);
151 
152  GPUCMD_AddSingleParam(0x00010118, 0x00000000);
153  GPUCMD_AddSingleParam(0x000F011B, 0x00000000);
154 
155  GPUCMD_AddSingleParam(0x0007006A, 0x00FFFFFF);
156 
157  GPUCMD_AddSingleParam(0x000F0102, 0x00000003);
158 
159  GPUCMD_AddSingleParam(0x00080126, 0x03000000);
160 
161  GPUCMD_Add(0x800F0040, zero, 0x00000010);
162 
163  param[0x0]=0x1F1F1F1F;
164  param[0x1]=0x1F1F1F1F;
165  param[0x2]=0x1F1F1F1F;
166  param[0x3]=0x1F1F1F1F;
167  param[0x4]=0x1F1F1F1F;
168  param[0x5]=0x1F1F1F1F;
169  param[0x6]=0x1F1F1F1F;
170  GPUCMD_Add(0x800F0050, param, 0x00000007);
171 
172  GPUCMD_AddSingleParam(0x000F0058, 0x00000100);
173  GPUCMD_AddSingleParam(0x000F004C, 0x00000001);
174  GPUCMD_AddSingleParam(0x000F006F, 0x00000000);
175 
176  GPUCMD_AddSingleParam(0x00020060, 0x00000000);
177  GPUCMD_AddSingleParam(0x000C0069, 0x00020000);
178 
179  GPUCMD_AddSingleParam(0x000F0113, 0x0000000F);
180  GPUCMD_AddSingleParam(0x000F0112, 0x0000000F);
181  GPUCMD_AddSingleParam(0x000F0114, 0x00000003);
182  GPUCMD_AddSingleParam(0x000F0115, 0x00000003);
183 
184  GPUCMD_AddSingleParam(0x000F01C5, 0x00000000);
185  for(i=0;i<32;i++)GPUCMD_Add(0x800F01C8, zero, 0x00000008);
186  GPUCMD_AddSingleParam(0x000F01C5, 0x00000100);
187  for(i=0;i<32;i++)GPUCMD_Add(0x800F01C8, zero, 0x00000008);
188  GPUCMD_AddSingleParam(0x000F01C5, 0x00000200);
189  for(i=0;i<32;i++)GPUCMD_Add(0x800F01C8, zero, 0x00000008);
190  GPUCMD_AddSingleParam(0x000F01C5, 0x00000300);
191  for(i=0;i<32;i++)GPUCMD_Add(0x800F01C8, zero, 0x00000008);
192  GPUCMD_AddSingleParam(0x000F01C5, 0x00000400);
193  for(i=0;i<32;i++)GPUCMD_Add(0x800F01C8, zero, 0x00000008);
194  GPUCMD_AddSingleParam(0x000F01C5, 0x00000500);
195  for(i=0;i<32;i++)GPUCMD_Add(0x800F01C8, zero, 0x00000008);
196  GPUCMD_AddSingleParam(0x000F01C5, 0x00000600);
197  for(i=0;i<32;i++)GPUCMD_Add(0x800F01C8, zero, 0x00000008);
198 
199  GPUCMD_AddSingleParam(0x000F0290, 0x80000000);
200  for(i=0;i<48;i++)GPUCMD_Add(0x800F0291, zero, 0x00000008);
201  GPUCMD_AddSingleParam(0x000F02CB, 0x00000000);
202  for(i=0;i<4;i++)GPUCMD_Add(0x000F02CC, zero, 0x00000080);
203  GPUCMD_AddSingleParam(0x000F029B, 0x00000200);
204 
205  for(i=0;i<28;i++)GPUCMD_Add(0x000F029C, zero, 0x00000080);
206 
207  GPUCMD_AddSingleParam(0x000F02BF, 0x00000000);
208  GPUCMD_AddSingleParam(0x000F02B1, 0x00000000);
209  GPUCMD_AddSingleParam(0x000F02B2, 0x00000000);
210  GPUCMD_AddSingleParam(0x000F02B3, 0x00000000);
211  GPUCMD_AddSingleParam(0x000F02B4, 0x00000000);
212 
213  param[0x0]=0xFFFFFFFF;
214  param[0x1]=0xFFFFFFFF;
215  GPUCMD_Add(0x800F028B, param, 0x00000002);
216 
217  GPUCMD_Add(0x800F0205, zero, 0x00000024);
218 
220 
221  GPUCMD_Finalize();
222  GPUCMD_Run(gpuBuf);
223 }
224 
225 void GPU_SetUniform(u32 startreg, u32* data, u32 numreg)
226 {
227  if(!data)return;
228 
229  GPUCMD_AddSingleParam(0x000F02C0, 0x80000000|startreg);
230  GPUCMD_Add(0x000F02C1, data, numreg*4);
231 }
232 
233 //TODO : fix
234 u32 f32tof24(float f)
235 {
236  if(!f)return 0;
237  u32 v=*((u32*)&f);
238  u8 s=v>>31;
239  u32 exp=((v>>23)&0xFF)-0x40;
240  u32 man=(v>>7)&0xFFFF;
241 
242  if(exp>=0)return man|(exp<<16)|(s<<23);
243  else return s<<23;
244 }
245 
247 {
248  //usual values
249  if(val==240)return 0x38111111;
250  if(val==480)return 0x37111111;
251  if(val==400)return 0x3747ae14;
252  //but let's not limit ourselves to the usual
253  float fval=2.0/val;
254  u32 tmp1,tmp2;
255  u32 tmp3=*((u32*)&fval);
256  tmp1=(tmp3<<9)>>9;
257  tmp2=tmp3&(~0x80000000);
258  if(tmp2)
259  {
260  tmp1=(tmp3<<9)>>9;
261  int tmp=((tmp3<<1)>>24)-0x40;
262  if(tmp<0)return ((tmp3>>31)<<30)<<1;
263  else tmp2=tmp;
264  }
265  tmp3>>=31;
266  return (tmp1|(tmp2<<23)|(tmp3<<30))<<1;
267 }
268 
269 //takes PAs as arguments
270 void GPU_SetViewport(u32* depthBuffer, u32* colorBuffer, u32 x, u32 y, u32 w, u32 h)
271 {
272  u32 param[0x4];
273  float fw=(float)w;
274  float fh=(float)h;
275 
276  GPUCMD_AddSingleParam(0x000F0111, 0x00000001);
277  GPUCMD_AddSingleParam(0x000F0110, 0x00000001);
278 
279  u32 f116e=0x01000000|(((h-1)&0xFFF)<<12)|(w&0xFFF);
280 
281  param[0x0]=((u32)depthBuffer)>>3;
282  param[0x1]=((u32)colorBuffer)>>3;
283  param[0x2]=f116e;
284  GPUCMD_Add(0x800F011C, param, 0x00000003);
285 
286  GPUCMD_AddSingleParam(0x000F006E, f116e);
287  GPUCMD_AddSingleParam(0x000F0116, 0x00000003); //depth buffer format
288  GPUCMD_AddSingleParam(0x000F0117, 0x00000002); //color buffer format
289  GPUCMD_AddSingleParam(0x000F011B, 0x00000000); //?
290 
291  param[0x0]=f32tof24(fw/2);
292  param[0x1]=computeInvValue(fw);
293  param[0x2]=f32tof24(fh/2);
294  param[0x3]=computeInvValue(fh);
295  GPUCMD_Add(0x800F0041, param, 0x00000004);
296 
297  GPUCMD_AddSingleParam(0x000F0068, (y<<16)|(x&0xFFFF));
298 
299  param[0x0]=0x00000000;
300  param[0x1]=0x00000000;
301  param[0x2]=((h-1)<<16)|((w-1)&0xFFFF);
302  GPUCMD_Add(0x800F0065, param, 0x00000003);
303 
304  //enable depth buffer
305  param[0x0]=0x0000000F;
306  param[0x1]=0x0000000F;
307  param[0x2]=0x00000002;
308  param[0x3]=0x00000002;
309  GPUCMD_Add(0x800F0112, param, 0x00000004);
310 }
311 
313 {
314  u32 param[3];
315 
316  param[0x0] = mode;
317  param[0x1] = (y<<16)|(x&0xFFFF);
318  param[0x2] = ((h-1)<<16)|((w-1)&0xFFFF);
319  GPUCMD_Add(0x800F0065, param, 0x00000003);
320 }
321 
322 void GPU_DepthRange(float nearVal, float farVal)
323 {
324  GPUCMD_AddSingleParam(0x000F006D, 0x00000001); //?
325  GPUCMD_AddSingleParam(0x000F004D, f32tof24(nearVal));
326  GPUCMD_AddSingleParam(0x000F004E, f32tof24(farVal));
327 }
328 
329 void GPU_SetAlphaTest(bool enable, GPU_TESTFUNC function, u8 ref)
330 {
331  GPUCMD_AddSingleParam(0x000F0104, (enable&1)|((function&7)<<4)|(ref<<8));
332 }
333 
334 void GPU_SetStencilTest(bool enable, GPU_TESTFUNC function, u8 ref, u8 mask, u8 replace)
335 {
336  GPUCMD_AddSingleParam(0x000F0105, (enable&1)|((function&7)<<4)|(replace<<8)|(ref<<16)|(mask<<24));
337 }
338 
340 {
341  GPUCMD_AddSingleParam(0x000F0106, sfail | (dfail << 4) | (pass << 8));
342 }
343 
344 void GPU_SetDepthTestAndWriteMask(bool enable, GPU_TESTFUNC function, GPU_WRITEMASK writemask)
345 {
346  GPUCMD_AddSingleParam(0x000F0107, (enable&1)|((function&7)<<4)|(writemask<<8));
347 }
348 
349 void GPU_SetAlphaBlending(GPU_BLENDEQUATION colorEquation, GPU_BLENDEQUATION alphaEquation,
350  GPU_BLENDFACTOR colorSrc, GPU_BLENDFACTOR colorDst,
351  GPU_BLENDFACTOR alphaSrc, GPU_BLENDFACTOR alphaDst)
352 {
353  GPUCMD_AddSingleParam(0x000F0101, colorEquation | (alphaEquation<<8) | (colorSrc<<16) | (colorDst<<20) | (alphaSrc<<24) | (alphaDst<<28));
354  GPUCMD_AddSingleParam(0x00020100, 0x00000100);
355 }
356 
358 {
359  GPUCMD_AddSingleParam(0x000F0102, op);
360  GPUCMD_AddSingleParam(0x00020100, 0x00000000);
361 }
362 
363 void GPU_SetBlendingColor(u8 r, u8 g, u8 b, u8 a)
364 {
365  GPUCMD_AddSingleParam(0x000F0103, r | (g << 8) | (b << 16) | (a << 24));
366 }
367 
369 {
370  GPUCMD_AddSingleParam(0x0002006F, units<<8); // enables texcoord outputs
371  GPUCMD_AddSingleParam(0x000F0080, 0x00011000|units); // enables texture units
372 }
373 
374 void GPU_SetTexture(GPU_TEXUNIT unit, u32* data, u16 width, u16 height, u32 param, GPU_TEXCOLOR colorType)
375 {
376  switch (unit)
377  {
378  case GPU_TEXUNIT0:
379  GPUCMD_AddSingleParam(0x000F008E, colorType);
380  GPUCMD_AddSingleParam(0x000F0085, ((u32)data)>>3);
381  GPUCMD_AddSingleParam(0x000F0082, (width)|(height<<16));
382  GPUCMD_AddSingleParam(0x000F0083, param);
383  break;
384 
385  case GPU_TEXUNIT1:
386  GPUCMD_AddSingleParam(0x000F0096, colorType);
387  GPUCMD_AddSingleParam(0x000F0095, ((u32)data)>>3);
388  GPUCMD_AddSingleParam(0x000F0092, (width)|(height<<16));
389  GPUCMD_AddSingleParam(0x000F0093, param);
390  break;
391 
392  case GPU_TEXUNIT2:
393  GPUCMD_AddSingleParam(0x000F009E, colorType);
394  GPUCMD_AddSingleParam(0x000F009D, ((u32)data)>>3);
395  GPUCMD_AddSingleParam(0x000F009A, (width)|(height<<16));
396  GPUCMD_AddSingleParam(0x000F009B, param);
397  break;
398  }
399 }
400 
401 const u8 GPU_FORMATSIZE[4]={1,1,2,4};
402 
403 void GPU_SetAttributeBuffers(u8 totalAttributes, u32* baseAddress, u64 attributeFormats, u16 attributeMask, u64 attributePermutation, u8 numBuffers, u32 bufferOffsets[], u64 bufferPermutations[], u8 bufferNumAttributes[])
404 {
405  u32 param[0x28];
406 
407  memset(param, 0x00, 0x28*4);
408 
409  param[0x0]=((u32)baseAddress)>>3;
410  param[0x1]=attributeFormats&0xFFFFFFFF;
411  param[0x2]=((totalAttributes-1)<<28)|((attributeMask&0xFFF)<<16)|((attributeFormats>>32)&0xFFFF);
412 
413  int i, j;
414  u8 sizeTable[0xC];
415  for(i=0;i<totalAttributes;i++)
416  {
417  u8 v=attributeFormats&0xF;
418  sizeTable[i]=GPU_FORMATSIZE[v&3]*((v>>2)+1);
419  attributeFormats>>=4;
420  }
421 
422  for(i=0;i<numBuffers;i++)
423  {
424  u16 stride=0;
425  param[3*(i+1)+0]=bufferOffsets[i];
426  param[3*(i+1)+1]=bufferPermutations[i]&0xFFFFFFFF;
427  for(j=0;j<bufferNumAttributes[i];j++)stride+=sizeTable[(bufferPermutations[i]>>(4*j))&0xF];
428  param[3*(i+1)+2]=(bufferNumAttributes[i]<<28)|((stride&0xFFF)<<16)|((bufferPermutations[i]>>32)&0xFFFF);
429  }
430 
431  GPUCMD_Add(0x800F0200, param, 0x00000027);
432 
433  GPUCMD_AddSingleParam(0x000B02B9, 0xA0000000|(totalAttributes-1));
434  GPUCMD_AddSingleParam(0x000F0242, (totalAttributes-1));
435 
436  GPUCMD_AddSingleParam(0x000F02BB, attributePermutation&0xFFFFFFFF);
437  GPUCMD_AddSingleParam(0x000F02BC, (attributePermutation>>32)&0xFFFF);
438 }
439 
441 {
442  GPUCMD_AddSingleParam(0x000F0200, ((u32)baseAddress)>>3);
443 }
444 
446 {
447  GPUCMD_AddSingleParam(0x000F0040, mode&0x3);
448 }
449 
450 const u8 GPU_TEVID[]={0xC0,0xC8,0xD0,0xD8,0xF0,0xF8};
451 
452 void GPU_SetTexEnv(u8 id, u16 rgbSources, u16 alphaSources, u16 rgbOperands, u16 alphaOperands, GPU_COMBINEFUNC rgbCombine, GPU_COMBINEFUNC alphaCombine, u32 constantColor)
453 {
454  if(id>6)return;
455  u32 param[0x5];
456  memset(param, 0x00, 5*4);
457 
458  param[0x0]=(alphaSources<<16)|(rgbSources);
459  param[0x1]=(alphaOperands<<12)|(rgbOperands);
460  param[0x2]=(alphaCombine<<16)|(rgbCombine);
461  param[0x3]=constantColor;
462  param[0x4]=0x00000000; // ?
463 
464  GPUCMD_Add(0x800F0000|GPU_TEVID[id], param, 0x00000005);
465 }
466 
468 {
469  // //?
470  // GPUCMD_AddSingleParam(0x00040080, 0x00010000);
471  //set primitive type
472  GPUCMD_AddSingleParam(0x0002025E, primitive);
473  GPUCMD_AddSingleParam(0x0002025F, 0x00000001);
474  //index buffer not used for drawArrays but 0x000F0227 still required
475  GPUCMD_AddSingleParam(0x000F0227, 0x80000000);
476  //pass number of vertices
477  GPUCMD_AddSingleParam(0x000F0228, n);
478 
479  GPUCMD_AddSingleParam(0x00010253, 0x00000001);
480 
481  GPUCMD_AddSingleParam(0x00010245, 0x00000000);
482  GPUCMD_AddSingleParam(0x000F022E, 0x00000001);
483  GPUCMD_AddSingleParam(0x00010245, 0x00000001);
484  GPUCMD_AddSingleParam(0x000F0231, 0x00000001);
485 
486  GPUCMD_AddSingleParam(0x000F0111, 0x00000001);
487 }
488 
489 void GPU_DrawElements(GPU_Primitive_t primitive, u32* indexArray, u32 n)
490 {
491  //set primitive type
492  GPUCMD_AddSingleParam(0x0002025E, primitive);
493  GPUCMD_AddSingleParam(0x0002025F, 0x00000001);
494  //index buffer (TODO : support multiple types)
495  GPUCMD_AddSingleParam(0x000F0227, 0x80000000|((u32)indexArray));
496  //pass number of vertices
497  GPUCMD_AddSingleParam(0x000F0228, n);
498 
499  GPUCMD_AddSingleParam(0x00020229, 0x00000100);
500  GPUCMD_AddSingleParam(0x00020253, 0x00000100);
501 
502  GPUCMD_AddSingleParam(0x00010245, 0x00000000);
503  GPUCMD_AddSingleParam(0x000F022F, 0x00000001);
504  GPUCMD_AddSingleParam(0x00010245, 0x00000001);
505  GPUCMD_AddSingleParam(0x000F0231, 0x00000001);
506 
507  // CHECKME: does this one also require command 0x0111 at the end?
508 }
509 
511 {
512  GPUCMD_AddSingleParam(0x000F0111, 0x00000001);
513  GPUCMD_AddSingleParam(0x000F0110, 0x00000001);
514  GPUCMD_AddSingleParam(0x000F0063, 0x00000001);
515 }
void GPU_SetColorLogicOp(GPU_LOGICOP op)
Definition: gpu.c:357
u32 gpuCmdBufSize
Definition: gpu.c:10
u32 __linear_heap_size
GPU_LOGICOP
Definition: gpu.h:126
void GPU_SetTexEnv(u8 id, u16 rgbSources, u16 alphaSources, u16 rgbOperands, u16 alphaOperands, GPU_COMBINEFUNC rgbCombine, GPU_COMBINEFUNC alphaCombine, u32 constantColor)
Definition: gpu.c:452
void GPU_FinishDrawing()
Definition: gpu.c:510
void GPU_SetBlendingColor(u8 r, u8 g, u8 b, u8 a)
Definition: gpu.c:363
uint16_t u16
Definition: types.h:22
u32 f32tof24(float f)
Definition: gpu.c:234
void GPU_DrawElements(GPU_Primitive_t primitive, u32 *indexArray, u32 n)
Definition: gpu.c:489
GPU_BLENDFACTOR
Definition: gpu.h:107
void GPU_Init(Handle *gsphandle)
Definition: gpu.c:13
Result GX_SetCommandList_First(u32 *gxbuf, u32 *buf0a, u32 buf0s, u32 *buf1a, u32 buf1s, u32 *buf2a, u32 buf2s)
Definition: gx.c:91
void GPU_SetFaceCulling(GPU_CULLMODE mode)
Definition: gpu.c:445
u32 * gpuCmdBuf
Definition: gpu.c:9
void GPU_SetTextureEnable(GPU_TEXUNIT units)
Definition: gpu.c:368
void GPU_SetAttributeBuffersAddress(u32 *baseAddress)
Definition: gpu.c:440
u32 Handle
Definition: types.h:41
void GPU_SetViewport(u32 *depthBuffer, u32 *colorBuffer, u32 x, u32 y, u32 w, u32 h)
Definition: gpu.c:270
void GPU_SetAlphaBlending(GPU_BLENDEQUATION colorEquation, GPU_BLENDEQUATION alphaEquation, GPU_BLENDFACTOR colorSrc, GPU_BLENDFACTOR colorDst, GPU_BLENDFACTOR alphaSrc, GPU_BLENDFACTOR alphaDst)
Definition: gpu.c:349
uint8_t u8
Definition: types.h:21
void GPU_Reset(u32 *gxbuf, u32 *gpuBuf, u32 gpuBufSize)
Definition: gpu.c:104
u32 computeInvValue(u32 val)
Definition: gpu.c:246
void GPUCMD_SetBufferOffset(u32 offset)
Definition: gpu.c:27
uint64_t u64
Definition: types.h:24
void GPUCMD_Run(u32 *gxbuf)
Definition: gpu.c:47
void GPU_SetStencilOp(GPU_STENCILOP sfail, GPU_STENCILOP dfail, GPU_STENCILOP pass)
Definition: gpu.c:339
void GPUCMD_GetBuffer(u32 **adr, u32 *size, u32 *offset)
Definition: gpu.c:32
GPU_TESTFUNC
Definition: gpu.h:57
GPU_WRITEMASK
Definition: gpu.h:86
void GPUCMD_Finalize()
Definition: gpu.c:93
uint32_t u32
Definition: types.h:23
void GPUCMD_Add(u32 cmd, u32 *param, u32 paramlength)
Definition: gpu.c:63
u32 gpuCmdBufOffset
Definition: gpu.c:11
const u8 GPU_FORMATSIZE[4]
Definition: gpu.c:401
GPU_Primitive_t
Definition: gpu.h:185
void GPU_DepthRange(float nearVal, float farVal)
Definition: gpu.c:322
void GPU_SetAttributeBuffers(u8 totalAttributes, u32 *baseAddress, u64 attributeFormats, u16 attributeMask, u64 attributePermutation, u8 numBuffers, u32 bufferOffsets[], u64 bufferPermutations[], u8 bufferNumAttributes[])
Definition: gpu.c:403
const u8 GPU_TEVID[]
Definition: gpu.c:450
GPU_TEXCOLOR
Definition: gpu.h:41
void GPUCMD_AddRawCommands(u32 *cmd, u32 size)
Definition: gpu.c:39
void GPU_SetScissorTest(GPU_SCISSORMODE mode, u32 x, u32 y, u32 w, u32 h)
Definition: gpu.c:312
void GPU_SetAlphaTest(bool enable, GPU_TESTFUNC function, u8 ref)
Definition: gpu.c:329
void GPU_SetDepthTestAndWriteMask(bool enable, GPU_TESTFUNC function, GPU_WRITEMASK writemask)
Definition: gpu.c:344
void GPUCMD_FlushAndRun(u32 *gxbuf)
Definition: gpu.c:56
GPU_STENCILOP
Definition: gpu.h:78
void GPUCMD_SetBuffer(u32 *adr, u32 size, u32 offset)
Definition: gpu.c:20
u32 gpuResetSequence[]
GPU_TEXUNIT
Definition: gpu.h:34
void GPU_SetUniform(u32 startreg, u32 *data, u32 numreg)
Definition: gpu.c:225
GPU_CULLMODE
Definition: gpu.h:154
Result GX_SetCommandList_Last(u32 *gxbuf, u32 *buf0a, u32 buf0s, u8 flags)
Definition: gx.c:24
GPU_SCISSORMODE
Definition: gpu.h:69
void GPU_SetStencilTest(bool enable, GPU_TESTFUNC function, u8 ref, u8 mask, u8 replace)
Definition: gpu.c:334
GPU_BLENDEQUATION
Definition: gpu.h:98
void GPU_DrawArray(GPU_Primitive_t primitive, u32 n)
Definition: gpu.c:467
void GPUCMD_AddSingleParam(u32 cmd, u32 param)
Definition: gpu.c:88
u32 * __linear_heap
Definition: initSystem.c:9
void GPU_SetTexture(GPU_TEXUNIT unit, u32 *data, u16 width, u16 height, u32 param, GPU_TEXCOLOR colorType)
Definition: gpu.c:374
u32 gpuResetSequenceLength
GPU_COMBINEFUNC
Definition: gpu.h:172