fix a few vert/frag program items to get i915 driver going again
authorBrian <brian.paul@tungstengraphics.com>
Mon, 1 Oct 2007 19:45:53 +0000 (13:45 -0600)
committerBrian <brian.paul@tungstengraphics.com>
Mon, 1 Oct 2007 19:45:53 +0000 (13:45 -0600)
src/mesa/pipe/i915simple/i915_context.c
src/mesa/pipe/p_defines.h
src/mesa/pipe/softpipe/sp_context.c
src/mesa/state_tracker/st_atom_shader.c
src/mesa/state_tracker/st_program.c

index 89252e38d58c681e6749475e427073085cfc3fab..b27ab48a501ca779e6108af983836eb5bcd899f6 100644 (file)
@@ -142,8 +142,6 @@ static int
 i915_get_param(struct pipe_context *pipe, int param)
 {
    switch (param) {
-   case PIPE_PARAM_FS_NEEDS_POS:
-      return 0;
    default:
       return 0;
    }
index 2a8109b10c9b2ba31e4205e6d23968fd55f1f39b..d336f8399808fdf15ae036a993be8c165844dd4e 100644 (file)
 #define PIPE_QUERY_TYPES                 3
 
 
-/**
- * Pipe capabilities/queries
- */
-#define PIPE_PARAM_FS_NEEDS_POS  1
-
-
 #endif
index 695bf1a9e02efc0cf289e35834c6069e3dc7c1f4..610e7ad6899940173414560c65b5d5a57d71ae11 100644 (file)
@@ -239,8 +239,6 @@ static const char *softpipe_get_vendor( struct pipe_context *pipe )
 static int softpipe_get_param(struct pipe_context *pipe, int param)
 {
    switch (param) {
-   case PIPE_PARAM_FS_NEEDS_POS:
-      return 1;
    default:
       return 0;
    }
index 0a905fb563b5b1c5c4045375ef076f5eb0dd4423..8aa977179a2b14d61640a23c5b174b38dd111277 100644 (file)
@@ -57,6 +57,8 @@
  */
 struct translated_vertex_program
 {
+   struct st_vertex_program *master;
+
    /** The fragment shader "signature" this vertex shader is meant for: */
    GLbitfield frag_inputs;
 
@@ -183,7 +185,7 @@ find_translated_vp(struct st_context *st,
     * XXX This could be a hash lookup, using InputsRead as the key.
     */
    for (xvp = stfp->vertex_programs; xvp; xvp = xvp->next) {
-      if (xvp->frag_inputs == fragInputsRead) {
+      if (xvp->master == stvp && xvp->frag_inputs == fragInputsRead) {
          break;
       }
    }
@@ -192,6 +194,7 @@ find_translated_vp(struct st_context *st,
    if (!xvp) {
       xvp = CALLOC_STRUCT(translated_vertex_program);
       xvp->frag_inputs = fragInputsRead;
+      xvp->master = stvp;
 
       xvp->next = stfp->vertex_programs;
       stfp->vertex_programs = xvp;
index a41b953a21d5d2b35d6c9351401e27204d5ceaab..a00f296d15f05b922bcd3f3daecdb216e1b05506 100644 (file)
@@ -281,12 +281,11 @@ st_translate_fragment_program(struct st_context *st,
    GLuint attr;
    GLbitfield inputsRead = stfp->Base.Base.InputsRead;
 
-   /* Check if all fragment programs need the fragment position (in order
-    * to do perspective-corrected interpolation).
+   /* For software rendering, we always need the fragment input position
+    * in order to calculate interpolated values.
+    * For i915, we always want to emit the semantic info for position.
     */
-   /* XXX temporary! */
-   if (st->pipe->get_param(st->pipe, PIPE_PARAM_FS_NEEDS_POS))
-      inputsRead |= FRAG_BIT_WPOS;
+   inputsRead |= FRAG_BIT_WPOS;
 
    memset(&fs, 0, sizeof(fs));