softpipe: minor code refactoring to remove softpipe/tile cache dependencies
authorBrian Paul <brianp@vmware.com>
Fri, 21 Aug 2009 20:01:58 +0000 (14:01 -0600)
committerBrian Paul <brianp@vmware.com>
Fri, 21 Aug 2009 20:01:58 +0000 (14:01 -0600)
The tile cache code now has no hard dependencies on softpipe.

src/gallium/drivers/softpipe/sp_state_derived.c
src/gallium/drivers/softpipe/sp_tile_cache.c
src/gallium/drivers/softpipe/sp_tile_cache.h

index 531092833202217f2ca5e6f45a9611abc43f7ed4..202a2bc94c8cf8891e19dbf397999ae0d332d8ec 100644 (file)
@@ -34,6 +34,8 @@
 #include "sp_context.h"
 #include "sp_screen.h"
 #include "sp_state.h"
+#include "sp_texture.h"
+#include "sp_tile_cache.h"
 
 
 /**
@@ -201,10 +203,19 @@ update_tgsi_samplers( struct softpipe_context *softpipe )
    softpipe_reset_sampler_varients( softpipe );
 
    for (i = 0; i < PIPE_MAX_SAMPLERS; i++) {
-      sp_tile_cache_validate_texture( softpipe->tex_cache[i] );
+      struct softpipe_tile_cache *tc = softpipe->tex_cache[i];
+      if (tc->texture) {
+         struct softpipe_texture *spt = softpipe_texture(tc->texture);
+         if (spt->timestamp != tc->timestamp) {
+            sp_tile_cache_validate_texture( tc );
+            _debug_printf("INV %d %d\n", tc->timestamp, spt->timestamp);
+            tc->timestamp = spt->timestamp;
+         }
+      }
    }
 }
 
+
 /* Hopefully this will remain quite simple, otherwise need to pull in
  * something like the state tracker mechanism.
  */
index 77d02fa3e7ae551285446ae388f3875d834a4af9..e075ab6290243e51fae8dcd41497383c16000ac8 100644 (file)
@@ -35,9 +35,6 @@
 #include "pipe/p_inlines.h"
 #include "util/u_memory.h"
 #include "util/u_tile.h"
-#include "sp_context.h"
-#include "sp_surface.h"
-#include "sp_texture.h"
 #include "sp_tile_cache.h"
 
 
@@ -200,24 +197,25 @@ sp_tile_cache_unmap_transfers(struct softpipe_tile_cache *tc)
    }
 }
 
+
+/**
+ * Invalidate all cached tiles for the cached texture.
+ * Should be called when the texture is modified.
+ */
 void
 sp_tile_cache_validate_texture(struct softpipe_tile_cache *tc)
 {
-   if (tc->texture) {
-      struct softpipe_texture *spt = softpipe_texture(tc->texture);
-      if (spt->timestamp != tc->timestamp) {
-         /* texture was modified, invalidate all cached tiles */
-         uint i;
-         _debug_printf("INV %d %d\n", tc->timestamp, spt->timestamp);
-         for (i = 0; i < NUM_ENTRIES; i++) {
-            tc->entries[i].addr.bits.invalid = 1;
-         }
+   uint i;
 
-         tc->timestamp = spt->timestamp;
-      }
+   assert(tc);
+   assert(tc->texture);
+
+   for (i = 0; i < NUM_ENTRIES; i++) {
+      tc->entries[i].addr.bits.invalid = 1;
    }
 }
 
+
 /**
  * Specify the texture to cache.
  */
index ac2aae587589efc5f9c70715844b4fff468deae5..1596cd0ae7622db0802d27ad73761fa0b7daf6ee 100644 (file)
@@ -34,7 +34,6 @@
 #include "pipe/p_compiler.h"
 
 
-struct softpipe_context;
 struct softpipe_tile_cache;