r600g: simplify deducing chip family
[mesa.git] / src / mesa / program / arbprogparse.c
index 6373529e4e86c4665e58e38089dd1fcd5a3f22b6..dffc8abf7358254a107c92b1ab9957a965206afd 100644 (file)
@@ -64,7 +64,7 @@ having three separate program parameter arrays.
 
 
 void
-_mesa_parse_arb_fragment_program(GLcontext* ctx, GLenum target,
+_mesa_parse_arb_fragment_program(struct gl_context* ctx, GLenum target,
                                  const GLvoid *str, GLsizei len,
                                  struct gl_fragment_program *program)
 {
@@ -109,26 +109,18 @@ _mesa_parse_arb_fragment_program(GLcontext* ctx, GLenum target,
    program->Base.NumNativeTexIndirections = prog.NumTexIndirections;
    program->Base.InputsRead      = prog.InputsRead;
    program->Base.OutputsWritten  = prog.OutputsWritten;
+   program->Base.IndirectRegisterFiles = prog.IndirectRegisterFiles;
    for (i = 0; i < MAX_TEXTURE_IMAGE_UNITS; i++) {
       program->Base.TexturesUsed[i] = prog.TexturesUsed[i];
       if (prog.TexturesUsed[i])
          program->Base.SamplersUsed |= (1 << i);
    }
    program->Base.ShadowSamplers = prog.ShadowSamplers;
-   switch (state.option.Fog) {
-   case OPTION_FOG_EXP:    program->FogOption = GL_EXP;    break;
-   case OPTION_FOG_EXP2:   program->FogOption = GL_EXP2;   break;
-   case OPTION_FOG_LINEAR: program->FogOption = GL_LINEAR; break;
-   default:                program->FogOption = GL_NONE;   break;
-   }
    program->OriginUpperLeft = state.option.OriginUpperLeft;
    program->PixelCenterInteger = state.option.PixelCenterInteger;
 
    program->UsesKill            = state.fragment.UsesKill;
 
-   if (program->FogOption)
-      program->Base.InputsRead |= FRAG_BIT_FOGC;
-
    if (program->Base.Instructions)
       free(program->Base.Instructions);
    program->Base.Instructions = prog.Instructions;
@@ -142,9 +134,15 @@ _mesa_parse_arb_fragment_program(GLcontext* ctx, GLenum target,
     * there's no hardware that wants to do fog in a discrete stage separate
     * from the fragment shader.
     */
-   if (program->FogOption != GL_NONE) {
-      _mesa_append_fog_code(ctx, program);
-      program->FogOption = GL_NONE;
+   if (state.option.Fog != OPTION_NONE) {
+      static const GLenum fog_modes[4] = {
+        GL_NONE, GL_EXP, GL_EXP2, GL_LINEAR
+      };
+
+      /* XXX: we should somehow recompile this to remove clamping if disabled
+       * On the ATI driver, this is unclampled if fragment clamping is disabled
+       */
+      _mesa_append_fog_code(ctx, program, fog_modes[state.option.Fog], GL_TRUE);
    }
 
 #if DEBUG_FP
@@ -161,7 +159,7 @@ _mesa_parse_arb_fragment_program(GLcontext* ctx, GLenum target,
  * object unchanged.
  */
 void
-_mesa_parse_arb_vertex_program(GLcontext *ctx, GLenum target,
+_mesa_parse_arb_vertex_program(struct gl_context *ctx, GLenum target,
                               const GLvoid *str, GLsizei len,
                               struct gl_vertex_program *program)
 {
@@ -199,6 +197,7 @@ _mesa_parse_arb_vertex_program(GLcontext *ctx, GLenum target,
    program->Base.NumNativeAddressRegs = prog.NumNativeAddressRegs;
    program->Base.InputsRead     = prog.InputsRead;
    program->Base.OutputsWritten = prog.OutputsWritten;
+   program->Base.IndirectRegisterFiles = prog.IndirectRegisterFiles;
    program->IsPositionInvariant = (state.option.PositionInvariant)
       ? GL_TRUE : GL_FALSE;