nv50,nvc0: implement blit
[mesa.git] / src / gallium / drivers / svga / svga_pipe_vs.c
index c104c41f5f87343b97553dee471bdf37b51a49b9..11d1dc3761196d18c5771cbe6c6a985ab0f5d6ac 100644 (file)
  **********************************************************/
 
 #include "draw/draw_context.h"
-#include "pipe/p_inlines.h"
+#include "util/u_inlines.h"
 #include "util/u_math.h"
 #include "util/u_memory.h"
+#include "util/u_bitmask.h"
 #include "tgsi/tgsi_parse.h"
 #include "tgsi/tgsi_text.h"
 
-#include "svga_screen.h"
 #include "svga_context.h"
-#include "svga_state.h"
 #include "svga_tgsi.h"
 #include "svga_hw_reg.h"
 #include "svga_cmd.h"
@@ -101,7 +100,6 @@ svga_create_vs_state(struct pipe_context *pipe,
                      const struct pipe_shader_state *templ)
 {
    struct svga_context *svga = svga_context(pipe);
-   struct svga_screen *svgascreen = svga_screen(pipe->screen);
    struct svga_vertex_shader *vs = CALLOC_STRUCT(svga_vertex_shader);
    if (!vs)
       return NULL;
@@ -126,7 +124,6 @@ svga_create_vs_state(struct pipe_context *pipe,
    }
 
    vs->base.id = svga->debug.shader_id++;
-   vs->base.use_sm30 = svgascreen->use_vs30;
 
    if (SVGA_DEBUG & DEBUG_TGSI || 0) {
       debug_printf("%s id: %u, inputs: %u, outputs: %u\n",
@@ -172,7 +169,16 @@ static void svga_delete_vs_state(struct pipe_context *pipe, void *shader)
          assert(ret == PIPE_OK);
       }
 
+      util_bitmask_clear( svga->vs_bm, result->id );
+
       svga_destroy_shader_result( result );
+
+      /*
+       * Remove stale references to this result to ensure a new result on the
+       * same address will be detected as a change.
+       */
+      if(result == svga->state.hw_draw.vs)
+         svga->state.hw_draw.vs = NULL;
    }
 
    FREE((void *)vs->base.tokens);