| 
									
										
										
										
											2013-04-17 23:09:55 -04:00
										 |  |  | // Copyright 2013 Dolphin Emulator Project
 | 
					
						
							|  |  |  | // Licensed under GPLv2
 | 
					
						
							|  |  |  | // Refer to the license.txt file included.
 | 
					
						
							| 
									
										
										
										
											2008-12-08 04:46:09 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #ifndef GCOGL_VERTEXSHADER_H
 | 
					
						
							|  |  |  | #define GCOGL_VERTEXSHADER_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "XFMemory.h"
 | 
					
						
							| 
									
										
										
										
											2010-06-14 14:36:01 +00:00
										 |  |  | #include "VideoCommon.h"
 | 
					
						
							| 
									
										
										
										
											2012-08-06 23:09:43 +02:00
										 |  |  | #include "ShaderGenCommon.h"
 | 
					
						
							| 
									
										
										
										
											2013-09-04 21:47:21 +02:00
										 |  |  | #include "LightingShaderGen.h"
 | 
					
						
							| 
									
										
										
										
											2008-12-08 04:46:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-11 11:59:42 +01:00
										 |  |  | // TODO should be reordered
 | 
					
						
							| 
									
										
										
										
											2013-01-14 22:59:08 +01:00
										 |  |  | #define SHADER_POSITION_ATTRIB  0
 | 
					
						
							| 
									
										
										
										
											2013-01-11 11:59:42 +01:00
										 |  |  | #define SHADER_POSMTX_ATTRIB    1
 | 
					
						
							| 
									
										
										
										
											2013-01-14 22:59:08 +01:00
										 |  |  | #define SHADER_NORM0_ATTRIB     2
 | 
					
						
							|  |  |  | #define SHADER_NORM1_ATTRIB     3
 | 
					
						
							|  |  |  | #define SHADER_NORM2_ATTRIB     4
 | 
					
						
							|  |  |  | #define SHADER_COLOR0_ATTRIB    5
 | 
					
						
							|  |  |  | #define SHADER_COLOR1_ATTRIB    6
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define SHADER_TEXTURE0_ATTRIB  8
 | 
					
						
							|  |  |  | #define SHADER_TEXTURE1_ATTRIB  9
 | 
					
						
							|  |  |  | #define SHADER_TEXTURE2_ATTRIB  10
 | 
					
						
							|  |  |  | #define SHADER_TEXTURE3_ATTRIB  11
 | 
					
						
							|  |  |  | #define SHADER_TEXTURE4_ATTRIB  12
 | 
					
						
							|  |  |  | #define SHADER_TEXTURE5_ATTRIB  13
 | 
					
						
							|  |  |  | #define SHADER_TEXTURE6_ATTRIB  14
 | 
					
						
							|  |  |  | #define SHADER_TEXTURE7_ATTRIB  15
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-08 04:46:09 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // shader variables
 | 
					
						
							| 
									
										
										
										
											2009-07-26 09:52:35 +00:00
										 |  |  | #define I_POSNORMALMATRIX       "cpnmtx"
 | 
					
						
							|  |  |  | #define I_PROJECTION            "cproj"
 | 
					
						
							|  |  |  | #define I_MATERIALS             "cmtrl"
 | 
					
						
							|  |  |  | #define I_LIGHTS                "clights"
 | 
					
						
							|  |  |  | #define I_TEXMATRICES           "ctexmtx"
 | 
					
						
							|  |  |  | #define I_TRANSFORMMATRICES     "ctrmtx"
 | 
					
						
							|  |  |  | #define I_NORMALMATRICES        "cnmtx"
 | 
					
						
							| 
									
										
										
										
											2008-12-08 04:46:09 +00:00
										 |  |  | #define I_POSTTRANSFORMMATRICES "cpostmtx"
 | 
					
						
							| 
									
										
										
										
											2012-03-24 16:30:00 +01:00
										 |  |  | #define I_DEPTHPARAMS           "cDepth" // farZ, zRange, scaled viewport width, scaled viewport height
 | 
					
						
							| 
									
										
										
										
											2008-12-08 04:46:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-08 23:58:51 +02:00
										 |  |  | //TODO: get rid of them, they aren't used at all
 | 
					
						
							| 
									
										
										
										
											2009-07-26 09:52:35 +00:00
										 |  |  | #define C_POSNORMALMATRIX        0
 | 
					
						
							|  |  |  | #define C_PROJECTION            (C_POSNORMALMATRIX + 6)
 | 
					
						
							|  |  |  | #define C_MATERIALS             (C_PROJECTION + 4)
 | 
					
						
							|  |  |  | #define C_LIGHTS                (C_MATERIALS + 4)
 | 
					
						
							|  |  |  | #define C_TEXMATRICES           (C_LIGHTS + 40)
 | 
					
						
							|  |  |  | #define C_TRANSFORMMATRICES     (C_TEXMATRICES + 24)
 | 
					
						
							|  |  |  | #define C_NORMALMATRICES        (C_TRANSFORMMATRICES + 64)
 | 
					
						
							|  |  |  | #define C_POSTTRANSFORMMATRICES (C_NORMALMATRICES + 32)
 | 
					
						
							| 
									
										
										
										
											2010-07-18 00:18:31 +00:00
										 |  |  | #define C_DEPTHPARAMS           (C_POSTTRANSFORMMATRICES + 64)
 | 
					
						
							| 
									
										
										
										
											2013-03-26 22:16:29 +01:00
										 |  |  | #define C_VENVCONST_END			(C_DEPTHPARAMS + 1)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-23 19:28:36 +02:00
										 |  |  | #pragma pack(1)
 | 
					
						
							| 
									
										
										
										
											2013-03-31 20:55:57 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-07 01:02:04 +02:00
										 |  |  | struct vertex_shader_uid_data | 
					
						
							| 
									
										
										
										
											2008-12-26 10:43:18 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2013-07-02 14:32:52 +02:00
										 |  |  | 	u32 NumValues() const { return sizeof(vertex_shader_uid_data); } | 
					
						
							| 
									
										
										
										
											2013-06-23 19:28:36 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-12 12:04:56 +02:00
										 |  |  | 	u32 components : 23; | 
					
						
							| 
									
										
										
										
											2012-08-06 22:41:30 +02:00
										 |  |  | 	u32 numTexGens : 4; | 
					
						
							| 
									
										
										
										
											2013-08-12 12:04:56 +02:00
										 |  |  | 	u32 numColorChans : 2; | 
					
						
							| 
									
										
										
										
											2013-06-23 19:28:36 +02:00
										 |  |  | 	u32 dualTexTrans_enabled : 1; | 
					
						
							| 
									
										
										
										
											2013-06-30 14:27:04 +02:00
										 |  |  | 	u32 pixel_lighting : 1; | 
					
						
							| 
									
										
										
										
											2013-08-12 12:04:56 +02:00
										 |  |  | 	u32 pad0 : 1; | 
					
						
							| 
									
										
										
										
											2013-06-23 19:28:36 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-28 17:43:53 +02:00
										 |  |  | 	u32 texMtxInfo_n_projection : 16; // Stored separately to guarantee that the texMtxInfo struct is 8 bits wide
 | 
					
						
							| 
									
										
										
										
											2012-08-06 22:41:30 +02:00
										 |  |  | 	struct { | 
					
						
							| 
									
										
										
										
											2013-06-28 17:43:53 +02:00
										 |  |  | 		u32 inputform : 2; | 
					
						
							|  |  |  | 		u32 texgentype : 3; | 
					
						
							|  |  |  | 		u32 sourcerow : 5; | 
					
						
							|  |  |  | 		u32 embosssourceshift : 3; | 
					
						
							|  |  |  | 		u32 embosslightshift : 3; | 
					
						
							|  |  |  | 	} texMtxInfo[8]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	struct { | 
					
						
							|  |  |  | 		u32 index : 6; | 
					
						
							|  |  |  | 		u32 normalize : 1; | 
					
						
							|  |  |  | 		u32 pad : 1; | 
					
						
							|  |  |  | 	} postMtxInfo[8]; | 
					
						
							| 
									
										
										
										
											2013-03-31 23:29:33 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	LightingUidData lighting; | 
					
						
							| 
									
										
										
										
											2012-08-06 22:41:30 +02:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											2013-03-31 20:55:57 +02:00
										 |  |  | #pragma pack()
 | 
					
						
							| 
									
										
										
										
											2008-12-26 10:43:18 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-07 01:02:04 +02:00
										 |  |  | typedef ShaderUid<vertex_shader_uid_data> VertexShaderUid; | 
					
						
							| 
									
										
										
										
											2013-03-29 22:24:49 +01:00
										 |  |  | typedef ShaderCode VertexShaderCode; // TODO: Obsolete..
 | 
					
						
							| 
									
										
										
										
											2008-12-26 10:43:18 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-06 23:09:43 +02:00
										 |  |  | void GetVertexShaderUid(VertexShaderUid& object, u32 components, API_TYPE api_type); | 
					
						
							|  |  |  | void GenerateVertexShaderCode(VertexShaderCode& object, u32 components, API_TYPE api_type); | 
					
						
							| 
									
										
										
										
											2013-03-29 22:24:49 +01:00
										 |  |  | void GenerateVSOutputStructForGS(ShaderCode& object, u32 components, API_TYPE api_type); | 
					
						
							| 
									
										
										
										
											2011-09-09 00:32:04 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-07-26 09:52:35 +00:00
										 |  |  | #endif // GCOGL_VERTEXSHADER_H
 |