From e552b9bd099b9fce1cd58ce7922a0c9f74cad034 Mon Sep 17 00:00:00 2001 From: Brian Date: Fri, 12 Oct 2007 09:42:06 -0600 Subject: initial use of KIL for glBitmap rendering --- src/mesa/state_tracker/st_cb_drawpixels.c | 51 ++++++++++++++++++++++++++----- 1 file changed, 44 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/mesa/state_tracker/st_cb_drawpixels.c b/src/mesa/state_tracker/st_cb_drawpixels.c index f58b5d947d..f3d624f14b 100644 --- a/src/mesa/state_tracker/st_cb_drawpixels.c +++ b/src/mesa/state_tracker/st_cb_drawpixels.c @@ -66,8 +66,14 @@ make_fragment_shader(struct st_context *st, GLboolean bitmapMode) if (!p) return NULL; +#define CULL 1 /* Use KIL to cull 0 bits/pixels in bitmap? */ + if (bitmapMode) +#if CULL + p->NumInstructions = 7; +#else p->NumInstructions = 3; +#endif else p->NumInstructions = 2; @@ -95,6 +101,36 @@ make_fragment_shader(struct st_context *st, GLboolean bitmapMode) p->Instructions[ic].TexSrcUnit = 0; p->Instructions[ic].TexSrcTarget = TEXTURE_2D_INDEX; ic++; +#if CULL + /* IF temp0 */ + p->Instructions[ic].Opcode = OPCODE_IF; + p->Instructions[ic].SrcReg[0].File = PROGRAM_TEMPORARY; + p->Instructions[ic].SrcReg[0].Index = 0; + p->Instructions[ic].SrcReg[0].Swizzle = SWIZZLE_WWWW; + p->Instructions[ic].BranchTarget = ic + 2; + ic++; + + /* MOV result.color, fragment.color */ + p->Instructions[ic].Opcode = OPCODE_MOV; + p->Instructions[ic].DstReg.File = PROGRAM_OUTPUT; + p->Instructions[ic].DstReg.Index = FRAG_RESULT_COLR; + p->Instructions[ic].SrcReg[0].File = PROGRAM_INPUT; + p->Instructions[ic].SrcReg[0].Index = FRAG_ATTRIB_COL0; + ic++; + + /* ELSE */ + p->Instructions[ic].Opcode = OPCODE_ELSE; + p->Instructions[ic].BranchTarget = ic + 2; + ic++; + + /* KILL */ + p->Instructions[ic].Opcode = OPCODE_KIL_NV; + ic++; + + /* ENDIF */ + p->Instructions[ic].Opcode = OPCODE_ENDIF; + ic++; +#else /* MUL result.color, temp0.xxxx, fragment.color */ p->Instructions[ic].Opcode = OPCODE_MUL; p->Instructions[ic].DstReg.File = PROGRAM_OUTPUT; @@ -105,17 +141,18 @@ make_fragment_shader(struct st_context *st, GLboolean bitmapMode) p->Instructions[ic].SrcReg[1].File = PROGRAM_INPUT; p->Instructions[ic].SrcReg[1].Index = FRAG_ATTRIB_COL0; ic++; +#endif } else { /* DrawPixels mode */ /* TEX result.color, fragment.texcoord[0], texture[0], 2D; */ - p->Instructions[0].Opcode = OPCODE_TEX; - p->Instructions[0].DstReg.File = PROGRAM_OUTPUT; - p->Instructions[0].DstReg.Index = FRAG_RESULT_COLR; - p->Instructions[0].SrcReg[0].File = PROGRAM_INPUT; - p->Instructions[0].SrcReg[0].Index = FRAG_ATTRIB_TEX0; - p->Instructions[0].TexSrcUnit = 0; - p->Instructions[0].TexSrcTarget = TEXTURE_2D_INDEX; + p->Instructions[ic].Opcode = OPCODE_TEX; + p->Instructions[ic].DstReg.File = PROGRAM_OUTPUT; + p->Instructions[ic].DstReg.Index = FRAG_RESULT_COLR; + p->Instructions[ic].SrcReg[0].File = PROGRAM_INPUT; + p->Instructions[ic].SrcReg[0].Index = FRAG_ATTRIB_TEX0; + p->Instructions[ic].TexSrcUnit = 0; + p->Instructions[ic].TexSrcTarget = TEXTURE_2D_INDEX; ic++; } /* END; */ -- cgit v1.2.3