llvmpipe: Put jit_context in store.
authorJosé Fonseca <jfonseca@vmware.com>
Fri, 9 Oct 2009 13:30:25 +0000 (14:30 +0100)
committerJosé Fonseca <jfonseca@vmware.com>
Fri, 9 Oct 2009 13:33:21 +0000 (14:33 +0100)
src/gallium/drivers/llvmpipe/lp_setup.c
src/gallium/drivers/llvmpipe/lp_setup_context.h

index ba9d801032495c3162a6cb2bef46eaaf73f6ff35..8a9c1696345282151a90ce41d3a9299693bd29a9 100644 (file)
@@ -480,12 +480,36 @@ lp_setup_is_texture_referenced( struct setup_context *setup,
 }
 
 
+static INLINE void
+lp_setup_update_shader_state( struct setup_context *setup )
+{
+
+   if(setup->fs.jit_context_dirty) {
+      if(!setup->fs.last_jc ||
+         memcmp(setup->fs.last_jc, &setup->fs.jit_context, sizeof *setup->fs.last_jc)) {
+         struct lp_jit_context *jc;
+
+         jc = get_data(&setup->data, sizeof *jc);
+         if(jc) {
+            memcpy(jc, &setup->fs.jit_context, sizeof *jc);
+            setup->fs.last_jc = jc;
+         }
+      }
+
+      setup->fs.jit_context_dirty = FALSE;
+   }
+
+   assert(setup->fs.last_jc);
+}
+
+
 /* Stubs for lines & points for now:
  */
 void
 lp_setup_point(struct setup_context *setup,
                     const float (*v0)[4])
 {
+   lp_setup_update_shader_state(setup);
    setup->point( setup, v0 );
 }
 
@@ -494,6 +518,7 @@ lp_setup_line(struct setup_context *setup,
                    const float (*v0)[4],
                    const float (*v1)[4])
 {
+   lp_setup_update_shader_state(setup);
    setup->line( setup, v0, v1 );
 }
 
@@ -503,6 +528,7 @@ lp_setup_tri(struct setup_context *setup,
              const float (*v1)[4],
              const float (*v2)[4])
 {
+   lp_setup_update_shader_state(setup);
    setup->triangle( setup, v0, v1, v2 );
 }
 
index 2e2380dd8065978ca51b2bc70e2ec233839d6b1a..747e90fe202b52963d89477a97a6a24acb9f66da 100644 (file)
@@ -114,6 +114,8 @@ struct setup_context {
       lp_jit_frag_func jit_function;
 
       boolean jit_context_dirty;
+
+      const struct lp_jit_context *last_jc;
    } fs;
 
    void (*point)( struct setup_context *,