ps2sdk  1.1
A collection of Open Source libraries used for developing applications on Sony's PlayStation 2® (PS2).
primitives.c
Go to the documentation of this file.
1 /*
2 # _____ ___ ____ ___ ____
3 # ____| | ____| | | |____|
4 # | ___| |____ ___| ____| | \ PS2DEV Open Source Project.
5 #-----------------------------------------------------------------------
6 # (c) 2009 Lion
7 # Licenced under Academic Free License version 2.0
8 # Review ps2sdk README & LICENSE files for further details.
9 */
10 
11 #include <errno.h>
12 #include <stdio.h>
13 #include <kernel.h>
14 #include <libgs.h>
15 
16 #include "internal.h"
17 
18 extern QWORD GsPrimWorkArea[];
19 
22 
23 void GsOverridePrimAttributes(s8 override, s8 iip, s8 tme, s8 fge, s8 abe, s8 aa1, s8 fst, s8 ctxt, s8 fix)
24 {
25  QWORD *p;
26 
28  gs_setGIF_TAG(((GS_GIF_TAG *)&p[0]), 2,1,0,0,GS_GIF_PACKED,1,gif_rd_ad);
29 
30  //override. (0 = use PRIM)(1 = use PRMODE)
31  if(override)
32  {
33  gs_setR_PRMODECONT(((GS_R_PRMODECONT *)&p[1]), 0);
34  }
35  else
36  {
37  gs_setR_PRMODECONT(((GS_R_PRMODECONT *)&p[1]), 1);
38  }
39 
40  gs_setR_PRMODE(((GS_R_PRMODE *)&p[2]), iip,tme,fge,abe,aa1,fst,ctxt,fix);
41 
43  GsDmaWait();
44 }
45 
46 void GsEnableDithering(u8 enable, int mode)
47 {
48  QWORD *p;
49 
51  if(enable)
52  {
53  gs_setGIF_TAG(((GS_GIF_TAG *)&p[0]), 3,1,0,0,GS_GIF_PACKED,1,gif_rd_ad);
54  gs_setR_DTHE(((GS_R_DTHE *)&p[1]), 1);
55  gs_setR_DIMX(((GS_R_DIMX *)&p[2]), 4,2,5,3,0,6,1,7,5,3,4,2,1,7,0,6); //thanks to:"Maximus32" on ps2dev.org
56  gs_setR_COLCLAMP(((GS_R_COLCLAMP *)&p[3]), 1);
57 
59  }
60  else
61  {
62  gs_setGIF_TAG(((GS_GIF_TAG *)&p[0]), 2,1,0,0,GS_GIF_PACKED,1,gif_rd_ad);
63  gs_setR_DTHE(((GS_R_DTHE *)&p[1]), 0);
64  gs_setR_DIMX(((GS_R_DIMX *)&p[2]), 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
65 
67  }
68 
69  GsDmaWait();
70 }
71 
72 void GsEnableAlphaTransparency1(u16 enable,u16 method,u8 alpha_ref,u16 fail_method)
73 {
74  QWORD *p;
75 
79  GSGLOBAL_TEST1.atest_reference = alpha_ref;
80  GSGLOBAL_TEST1.atest_fail_method = fail_method;
81 
85 
86  // tell GS in 16bit texture 1=transparent,0=solid
87  gs_setGIF_TAG(((GS_GIF_TAG *)&p[0]), 1,1,0,0,GS_GIF_PACKED,1,gif_rd_ad);
88  gs_setR_TEXA(((GS_R_TEXA *)&p[1]), 0x80, 0, 0x00);
89 
91  GsDmaWait();
92 }
93 
94 void GsEnableAlphaTransparency2(u16 enable,u16 method,u8 alpha_ref,u16 fail_method)
95 {
96  QWORD *p;
97 
100  GSGLOBAL_TEST2.atest_method = method;
101  GSGLOBAL_TEST2.atest_reference = alpha_ref;
102  GSGLOBAL_TEST2.atest_fail_method = fail_method;
103 
107 
108  // tell GS in 16bit texture 1=transparent,0=solid
109  gs_setGIF_TAG(((GS_GIF_TAG *)&p[0]), 1,1,0,0,GS_GIF_PACKED,1,gif_rd_ad);
110  gs_setR_TEXA(((GS_R_TEXA *)&p[1]), 0x80, 0, 0x00);
111 
113  GsDmaWait();
114 }
115 
116 void GsEnableZbuffer1(u16 enable,u16 test_method)
117 {
118  GSGLOBAL_TEST1.ztest_enable = enable;
119  GSGLOBAL_TEST1.ztest_method = test_method;
120 
124 }
125 
126 void GsEnableZbuffer2(u16 enable,u16 test_method)
127 {
128  GSGLOBAL_TEST2.ztest_enable = enable;
129  GSGLOBAL_TEST2.ztest_method = test_method;
130 
134 
135 }
136 
138 {
139  QWORD *p;
140 
142  gs_setGIF_TAG(((GS_GIF_TAG *)&p[0]), 4,1,0,0,GS_GIF_PACKED,1,gif_rd_ad);
143 
144  if(enable)
145  {
146  gs_setR_ALPHA_1(((GS_R_ALPHA *)&p[1]), 0,1,0,1,0x00); //last arg(0x00) is not used bceause of other settings
147  }
148  else
149  {
150  gs_setR_ALPHA_1(((GS_R_ALPHA *)&p[1]), 0,0,0,0,0x80);
151  }
152  gs_setR_PABE(((GS_R_PABE *)&p[2]), 0);
153  gs_setR_FBA_1(((GS_R_FBA *)&p[3]), 0);
154  gs_setR_TEXA(((GS_R_TEXA *)&p[4]), 0x80, 0, 0x00);
155 
157  GsDmaWait();
158 }
159 
161 {
162  QWORD *p;
163 
165  gs_setGIF_TAG(((GS_GIF_TAG*)&p[0]), 4,1,0,0,GS_GIF_PACKED,1,gif_rd_ad);
166 
167  if(enable)
168  {
169  gs_setR_ALPHA_2(((GS_R_ALPHA*)&p[1]), 0,1,0,1,0x00); //last arg(0x00) is not used bceause of other settings
170  }
171  else
172  {
173  gs_setR_ALPHA_2(((GS_R_ALPHA *)&p[1]), 0,0,0,0,0x80);
174  }
175  gs_setR_PABE(((GS_R_PABE *)&p[2]), 0);
176  gs_setR_FBA_2(((GS_R_FBA *)&p[3]), 0);
177  gs_setR_TEXA(((GS_R_TEXA *)&p[4]), 0x80, 0, 0x00);
178 
180  GsDmaWait();
181 }
#define UNCACHED_SEG(x)
Definition: kernel.h:35
void GsDmaWait(void)
Definition: dma.c:148
void GsDmaSend(const void *addr, u32 qwords)
Definition: dma.c:88
int GsSetPixelTest2(u8 enable_alpha_test, u8 alpha_test_method, u8 alpha_reference, u8 alpha_fail_method, u8 enable_dest_alpha_test, u8 dest_alpha_test_mode, u8 enable_zbuff_test, u8 alpha_zbuff_method)
Definition: lowlevel.c:140
#define gs_setR_FBA_1(p, _alpha)
Definition: libgs.h:1786
#define gs_setR_PRMODE(p, _iip, _tme, _fge, _abe, _aa1, _fst, _ctxt, _fix)
Definition: libgs.h:1707
int GsSetPixelTest1(u8 enable_alpha_test, u8 alpha_test_method, u8 alpha_reference, u8 alpha_fail_method, u8 enable_dest_alpha_test, u8 dest_alpha_test_mode, u8 enable_zbuff_test, u8 alpha_zbuff_method)
Definition: lowlevel.c:127
#define gs_setR_PRMODECONT(p, _control)
Definition: libgs.h:1703
#define gs_setR_DTHE(p, _enable)
Definition: libgs.h:1766
#define gs_setGIF_TAG(p, _nloop, _eop, _pre, _prim, _flg, _nreg, _reg)
Definition: libgs.h:1870
#define gif_rd_ad
Definition: libgs.h:326
#define gs_setR_TEXA(p, _ta0, _aem, _ta1)
Definition: libgs.h:1735
#define gs_setR_FBA_2(p, _alpha)
Definition: libgs.h:1790
#define gs_setR_DIMX(p, _dimx00, _dimx01, _dimx02, _dimx03, _dimx10, _dimx11, _dimx12, _dimx13, _dimx20, _dimx21, _dimx22, _dimx23, _dimx30, _dimx31, _dimx32, _dimx33)
Definition: libgs.h:1762
#define gs_setR_ALPHA_1(p, _a, _b, _c, _d, _fix)
Definition: libgs.h:1754
#define gs_setR_COLCLAMP(p, _clamp)
Definition: libgs.h:1770
@ GS_GIF_PACKED
Definition: libgs.h:181
#define gs_setR_PABE(p, _enable)
Definition: libgs.h:1782
#define gs_setR_ALPHA_2(p, _a, _b, _c, _d, _fix)
Definition: libgs.h:1758
void GsEnableAlphaTransparency2(u16 enable, u16 method, u8 alpha_ref, u16 fail_method)
Definition: primitives.c:94
void GsEnableDithering(u8 enable, int mode)
Definition: primitives.c:46
void GsEnableZbuffer1(u16 enable, u16 test_method)
Definition: primitives.c:116
QWORD GsPrimWorkArea[]
Definition: packets.c:18
void GsEnableAlphaBlending2(u16 enable)
Definition: primitives.c:160
void GsEnableAlphaTransparency1(u16 enable, u16 method, u8 alpha_ref, u16 fail_method)
Definition: primitives.c:72
void GsEnableZbuffer2(u16 enable, u16 test_method)
Definition: primitives.c:126
static GS_TEST GSGLOBAL_TEST1
Definition: primitives.c:20
static GS_TEST GSGLOBAL_TEST2
Definition: primitives.c:21
void GsOverridePrimAttributes(s8 override, s8 iip, s8 tme, s8 fge, s8 abe, s8 aa1, s8 fst, s8 ctxt, s8 fix)
Definition: primitives.c:23
void GsEnableAlphaBlending1(u16 enable)
Definition: primitives.c:137
s32 mode
Definition: rpc_client.c:15
Definition: libgs.h:830
u64 datest_enable
Definition: libgs.h:835
u64 atest_reference
Definition: libgs.h:833
u64 datest_mode
Definition: libgs.h:836
u64 ztest_method
Definition: libgs.h:838
u64 atest_fail_method
Definition: libgs.h:834
u64 atest_enable
Definition: libgs.h:831
u64 atest_method
Definition: libgs.h:832
u64 ztest_enable
Definition: libgs.h:837
Definition: libgs.h:333
signed char s8
Definition: tamtypes.h:51
unsigned short u16
Definition: tamtypes.h:24
unsigned char u8
Definition: tamtypes.h:23