r300g: add debugging options "notiling" and "noimmd" (for testing)
authorMarek Olšák <maraeo@gmail.com>
Sun, 18 Apr 2010 00:32:54 +0000 (02:32 +0200)
committerMarek Olšák <maraeo@gmail.com>
Sun, 18 Apr 2010 00:56:09 +0000 (02:56 +0200)
notiling = Disable texture tiling
noimmd = Disable immediate mode (this optimization was really worth it!)

src/gallium/drivers/r300/r300_debug.c
src/gallium/drivers/r300/r300_render.c
src/gallium/drivers/r300/r300_screen.h
src/gallium/drivers/r300/r300_texture.c

index 016e8d6606114dd0d97dcda8cb179352a88d4427..6e84bf82469eb93beccad0af960a53b99ff8aa37 100644 (file)
@@ -32,13 +32,15 @@ struct debug_option {
 
 static struct debug_option debug_options[] = {
     { "help", DBG_HELP, "Helpful meta-information about the driver" },
-    { "fp", DBG_FP, "Fragment program handling" },
-    { "vp", DBG_VP, "Vertex program handling" },
-    { "cs", DBG_CS, "Command submissions" },
-    { "draw", DBG_DRAW, "Draw and emit" },
-    { "tex", DBG_TEX, "Textures" },
-    { "fall", DBG_FALL, "Fallbacks" },
-    { "anisohq", DBG_ANISOHQ, "High quality anisotropic filtering (for benchmarking purposes only!)" },
+    { "fp", DBG_FP, "Fragment program handling (for debugging)" },
+    { "vp", DBG_VP, "Vertex program handling (for debugging)" },
+    { "cs", DBG_CS, "Command submissions (for debugging)" },
+    { "draw", DBG_DRAW, "Draw and emit (for debugging)" },
+    { "tex", DBG_TEX, "Textures (for debugging)" },
+    { "fall", DBG_FALL, "Fallbacks (for debugging)" },
+    { "anisohq", DBG_ANISOHQ, "High quality anisotropic filtering (for benchmarking)" },
+    { "notiling", DBG_NO_TILING, "Disable tiling (for benchmarking)" },
+    { "noimmd", DBG_NO_IMMD, "Disable immediate mode (for benchmarking)" },
 
     { "all", ~0, "Convenience option that enables all debug flags" },
 
index 751a7e6d5bd667b50e30d3c9d356eb9e75206896..fa7b70b08462b92406d3ae721fbd452b08887af7 100644 (file)
@@ -138,7 +138,7 @@ static boolean immd_is_good_idea(struct r300_context *r300,
     unsigned vertex_element_count = r300->velems->count;
     unsigned i, vbi;
 
-    if (count > 10) {
+    if (count > 10 || DBG_ON(r300, DBG_NO_IMMD)) {
         return FALSE;
     }
 
index 2f951c7097c047ca9375e8c7ac6ac123ae2c9ba4..4077424e5496468957ffba2289d366c79ed9e58a 100644 (file)
@@ -69,6 +69,8 @@ static INLINE struct r300_screen* r300_screen(struct pipe_screen* screen) {
 #define DBG_TEX     0x0000020
 #define DBG_FALL    0x0000040
 #define DBG_ANISOHQ 0x0000080
+#define DBG_NO_TILING 0x0000100
+#define DBG_NO_IMMD 0x0000200
 /*@}*/
 
 static INLINE boolean SCREEN_DBG_ON(struct r300_screen * screen, unsigned flags)
index a37b33edf29d6cde3d1bb0c6096f9f5f578f4e9d..0c3502ff936ef2e2f07bbd8ad2eee71de9a3090f 100644 (file)
@@ -836,13 +836,14 @@ static void r300_setup_tiling(struct pipe_screen *screen,
     enum pipe_format format = tex->b.b.format;
     boolean rv350_mode = r300_screen(screen)->caps.family >= CHIP_FAMILY_RV350;
     boolean is_zb = util_format_is_depth_or_stencil(format);
+    boolean dbg_no_tiling = SCREEN_DBG_ON(r300_screen(screen), DBG_NO_TILING);
 
     if (!r300_format_is_plain(format)) {
         return;
     }
 
     /* If height == 1, disable microtiling except for zbuffer. */
-    if (!is_zb && tex->b.b.height0 == 1) {
+    if (!is_zb && (tex->b.b.height0 == 1 || dbg_no_tiling)) {
         return;
     }
 
@@ -861,6 +862,10 @@ static void r300_setup_tiling(struct pipe_screen *screen,
             break;
     }
 
+    if (dbg_no_tiling) {
+        return;
+    }
+
     /* Set macrotiling. */
     if (r300_texture_macro_switch(tex, 0, rv350_mode, TILE_WIDTH) &&
         r300_texture_macro_switch(tex, 0, rv350_mode, TILE_HEIGHT)) {