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;
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;
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; */