diff options
Diffstat (limited to 'src/mesa/drivers/dri')
| -rw-r--r-- | src/mesa/drivers/dri/r300/compiler/radeon_code.h | 150 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/r300/compiler/radeon_compiler.h | 122 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/r300/r300_context.h | 2 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/r300/r300_fragprog_common.c | 2 | 
4 files changed, 154 insertions, 122 deletions
diff --git a/src/mesa/drivers/dri/r300/compiler/radeon_code.h b/src/mesa/drivers/dri/r300/compiler/radeon_code.h new file mode 100644 index 0000000000..7d8bf483e7 --- /dev/null +++ b/src/mesa/drivers/dri/r300/compiler/radeon_code.h @@ -0,0 +1,150 @@ +/* + * Copyright 2009 Nicolai Hähnle <nhaehnle@gmail.com> + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * on the rights to use, copy, modify, merge, publish, distribute, sub + * license, and/or sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + * USE OR OTHER DEALINGS IN THE SOFTWARE. */ + +#ifndef RADEON_CODE_H +#define RADEON_CODE_H + + +#define R300_PFS_MAX_ALU_INST     64 +#define R300_PFS_MAX_TEX_INST     32 +#define R300_PFS_MAX_TEX_INDIRECT 4 +#define R300_PFS_NUM_TEMP_REGS    32 +#define R300_PFS_NUM_CONST_REGS   32 + +#define R500_PFS_MAX_INST         512 +#define R500_PFS_NUM_TEMP_REGS    128 +#define R500_PFS_NUM_CONST_REGS   256 + + +#define STATE_R300_WINDOW_DIMENSION (STATE_INTERNAL_DRIVER+0) +#define STATE_R300_TEXRECT_FACTOR (STATE_INTERNAL_DRIVER+1) + + +/** + * Stores state that influences the compilation of a fragment program. + */ +struct r300_fragment_program_external_state { +	struct { +		/** +		 * If the sampler is used as a shadow sampler, +		 * this field is: +		 *  0 - GL_LUMINANCE +		 *  1 - GL_INTENSITY +		 *  2 - GL_ALPHA +		 * depending on the depth texture mode. +		 */ +		GLuint depth_texture_mode : 2; + +		/** +		 * If the sampler is used as a shadow sampler, +		 * this field is (texture_compare_func - GL_NEVER). +		 * [e.g. if compare function is GL_LEQUAL, this field is 3] +		 * +		 * Otherwise, this field is 0. +		 */ +		GLuint texture_compare_func : 3; +	} unit[16]; +}; + + + +struct r300_fragment_program_node { +	int tex_offset; /**< first tex instruction */ +	int tex_end; /**< last tex instruction, relative to tex_offset */ +	int alu_offset; /**< first ALU instruction */ +	int alu_end; /**< last ALU instruction, relative to alu_offset */ +	int flags; +}; + +/** + * Stores an R300 fragment program in its compiled-to-hardware form. + */ +struct r300_fragment_program_code { +	struct { +		int length; /**< total # of texture instructions used */ +		GLuint inst[R300_PFS_MAX_TEX_INST]; +	} tex; + +	struct { +		int length; /**< total # of ALU instructions used */ +		struct { +			GLuint inst0; +			GLuint inst1; +			GLuint inst2; +			GLuint inst3; +		} inst[R300_PFS_MAX_ALU_INST]; +	} alu; + +	struct r300_fragment_program_node node[4]; +	int cur_node; +	int first_node_has_tex; + +	/** +	 * Remember which program register a given hardware constant +	 * belongs to. +	 */ +	struct prog_src_register constant[R300_PFS_NUM_CONST_REGS]; +	int const_nr; + +	int max_temp_idx; +}; + + +struct r500_fragment_program_code { +	struct { +		GLuint inst0; +		GLuint inst1; +		GLuint inst2; +		GLuint inst3; +		GLuint inst4; +		GLuint inst5; +	} inst[R500_PFS_MAX_INST]; + +	int inst_offset; +	int inst_end; + +	/** +	 * Remember which program register a given hardware constant +	 * belongs to. +	 */ +	struct prog_src_register constant[R500_PFS_NUM_CONST_REGS]; +	int const_nr; + +	int max_temp_idx; +}; + +struct rX00_fragment_program_code { +	union { +		struct r300_fragment_program_code r300; +		struct r500_fragment_program_code r500; +	} code; + +	GLboolean writes_depth; + +	/* attribute that we are sending the WPOS in */ +	gl_frag_attrib wpos_attr; +	/* attribute that we are sending the fog coordinate in */ +	gl_frag_attrib fog_attr; +}; + + +#endif /* RADEON_CODE_H */
\ No newline at end of file diff --git a/src/mesa/drivers/dri/r300/compiler/radeon_compiler.h b/src/mesa/drivers/dri/r300/compiler/radeon_compiler.h index 9b9b9c5c65..a5f70173b7 100644 --- a/src/mesa/drivers/dri/r300/compiler/radeon_compiler.h +++ b/src/mesa/drivers/dri/r300/compiler/radeon_compiler.h @@ -27,128 +27,8 @@  #include "shader/prog_instruction.h"  #include "memory_pool.h" +#include "radeon_code.h" -#define R300_PFS_MAX_ALU_INST     64 -#define R300_PFS_MAX_TEX_INST     32 -#define R300_PFS_MAX_TEX_INDIRECT 4 -#define R300_PFS_NUM_TEMP_REGS    32 -#define R300_PFS_NUM_CONST_REGS   32 - -#define R500_PFS_MAX_INST         512 -#define R500_PFS_NUM_TEMP_REGS    128 -#define R500_PFS_NUM_CONST_REGS   256 - - -#define STATE_R300_WINDOW_DIMENSION (STATE_INTERNAL_DRIVER+0) -#define STATE_R300_TEXRECT_FACTOR (STATE_INTERNAL_DRIVER+1) - - -/** - * Stores state that influences the compilation of a fragment program. - */ -struct r300_fragment_program_external_state { -	struct { -		/** -		 * If the sampler is used as a shadow sampler, -		 * this field is: -		 *  0 - GL_LUMINANCE -		 *  1 - GL_INTENSITY -		 *  2 - GL_ALPHA -		 * depending on the depth texture mode. -		 */ -		GLuint depth_texture_mode : 2; - -		/** -		 * If the sampler is used as a shadow sampler, -		 * this field is (texture_compare_func - GL_NEVER). -		 * [e.g. if compare function is GL_LEQUAL, this field is 3] -		 * -		 * Otherwise, this field is 0. -		 */ -		GLuint texture_compare_func : 3; -	} unit[16]; -}; - - - -struct r300_fragment_program_node { -	int tex_offset; /**< first tex instruction */ -	int tex_end; /**< last tex instruction, relative to tex_offset */ -	int alu_offset; /**< first ALU instruction */ -	int alu_end; /**< last ALU instruction, relative to alu_offset */ -	int flags; -}; - -/** - * Stores an R300 fragment program in its compiled-to-hardware form. - */ -struct r300_fragment_program_code { -	struct { -		int length; /**< total # of texture instructions used */ -		GLuint inst[R300_PFS_MAX_TEX_INST]; -	} tex; - -	struct { -		int length; /**< total # of ALU instructions used */ -		struct { -			GLuint inst0; -			GLuint inst1; -			GLuint inst2; -			GLuint inst3; -		} inst[R300_PFS_MAX_ALU_INST]; -	} alu; - -	struct r300_fragment_program_node node[4]; -	int cur_node; -	int first_node_has_tex; - -	/** -	 * Remember which program register a given hardware constant -	 * belongs to. -	 */ -	struct prog_src_register constant[R300_PFS_NUM_CONST_REGS]; -	int const_nr; - -	int max_temp_idx; -}; - - -struct r500_fragment_program_code { -	struct { -		GLuint inst0; -		GLuint inst1; -		GLuint inst2; -		GLuint inst3; -		GLuint inst4; -		GLuint inst5; -	} inst[R500_PFS_MAX_INST]; - -	int inst_offset; -	int inst_end; - -	/** -	 * Remember which program register a given hardware constant -	 * belongs to. -	 */ -	struct prog_src_register constant[R500_PFS_NUM_CONST_REGS]; -	int const_nr; - -	int max_temp_idx; -}; - -struct rX00_fragment_program_code { -	union { -		struct r300_fragment_program_code r300; -		struct r500_fragment_program_code r500; -	} code; - -	GLboolean writes_depth; - -	/* attribute that we are sending the WPOS in */ -	gl_frag_attrib wpos_attr; -	/* attribute that we are sending the fog coordinate in */ -	gl_frag_attrib fog_attr; -};  struct rc_instruction {  	struct rc_instruction * Prev; diff --git a/src/mesa/drivers/dri/r300/r300_context.h b/src/mesa/drivers/dri/r300/r300_context.h index ea30d3e12f..ce742641a4 100644 --- a/src/mesa/drivers/dri/r300/r300_context.h +++ b/src/mesa/drivers/dri/r300/r300_context.h @@ -44,7 +44,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  #include "main/mtypes.h"  #include "shader/prog_instruction.h" -#include "compiler/radeon_compiler.h" +#include "compiler/radeon_code.h"  struct r300_context;  typedef struct r300_context r300ContextRec; diff --git a/src/mesa/drivers/dri/r300/r300_fragprog_common.c b/src/mesa/drivers/dri/r300/r300_fragprog_common.c index a89dbb0049..27aec64575 100644 --- a/src/mesa/drivers/dri/r300/r300_fragprog_common.c +++ b/src/mesa/drivers/dri/r300/r300_fragprog_common.c @@ -42,6 +42,8 @@  #include "shader/prog_parameter.h"  #include "shader/prog_print.h" +#include "compiler/radeon_compiler.h" +  #include "r300_state.h"  | 
