add number of passes count to ati_fragment_shader
authorDave Airlie <airliedfreedesktop.org>
Sun, 30 Jan 2005 06:24:30 +0000 (06:24 +0000)
committerDave Airlie <airliedfreedesktop.org>
Sun, 30 Jan 2005 06:24:30 +0000 (06:24 +0000)
src/mesa/main/mtypes.h
src/mesa/shader/atifragshader.c

index dc3dcbb..416f77d 100644 (file)
@@ -1756,6 +1756,7 @@ struct ati_fragment_shader
   struct program Base;
   struct atifs_instruction *Instructions;
   GLfloat Constants[8][4];
+  GLint NumPasses;
   GLint cur_pass;
 };
 
index 2a8cf90..d8df8f5 100644 (file)
@@ -231,7 +231,8 @@ _mesa_EndFragmentShaderATI(void)
 #endif
 
    ctx->ATIFragmentShader.Compiling = 0;
-
+   ctx->ATIFragmentShader.Current->NumPasses = ctx->ATIFragmentShader.Current->cur_pass;
+   ctx->ATIFragmentShader.Current->cur_pass=0;
 #if MESA_DEBUG_ATI_FS
    for (i = 0; i < curProg->Base.NumInstructions; i++) {
       GLuint op0 = curProg->Instructions[i].Opcode[0];
@@ -255,6 +256,9 @@ _mesa_PassTexCoordATI(GLuint dst, GLuint coord, GLenum swizzle)
    GLint ci;
    struct atifs_instruction *curI;
 
+   if (ctx->ATIFragmentShader.Current->cur_pass==1)
+     ctx->ATIFragmentShader.Current->cur_pass=2;
+
    new_inst(curProg);
    ci = curProg->Base.NumInstructions - 1;
    /* some validation 
@@ -287,6 +291,10 @@ _mesa_SampleMapATI(GLuint dst, GLuint interp, GLenum swizzle)
    GLint ci;
    struct atifs_instruction *curI;
 
+   if (ctx->ATIFragmentShader.Current->cur_pass==1)
+     ctx->ATIFragmentShader.Current->cur_pass=2;
+
+
    new_inst(curProg);
 
    ci = curProg->Base.NumInstructions - 1;
@@ -318,6 +326,9 @@ _mesa_FragmentOpXATI(GLint optype, GLuint arg_count, GLenum op, GLuint dst,
    GLint ci;
    struct atifs_instruction *curI;
 
+   if (ctx->ATIFragmentShader.Current->cur_pass==0)
+     ctx->ATIFragmentShader.Current->cur_pass=1;
+
    /* decide whether this is a new instruction or not ... all color instructions are new */
    if (optype == 0)
       new_inst(curProg);