Move string functions to state_tracker, add queries to pipe, winsys.
authorKeith Whitwell <keith@tungstengraphics.com>
Fri, 10 Aug 2007 15:42:26 +0000 (16:42 +0100)
committerKeith Whitwell <keith@tungstengraphics.com>
Fri, 10 Aug 2007 15:44:07 +0000 (16:44 +0100)
14 files changed:
src/mesa/drivers/dri/intel_winsys/intel_winsys_pipe.c
src/mesa/pipe/i915simple/Makefile
src/mesa/pipe/i915simple/i915_context.c
src/mesa/pipe/i915simple/i915_context.h
src/mesa/pipe/i915simple/i915_reg.h
src/mesa/pipe/i915simple/i915_strings.c [new file with mode: 0644]
src/mesa/pipe/p_context.h
src/mesa/pipe/p_winsys.h
src/mesa/pipe/softpipe/sp_context.c
src/mesa/sources
src/mesa/state_tracker/st_cb_strings.c [new file with mode: 0644]
src/mesa/state_tracker/st_cb_strings.h [new file with mode: 0644]
src/mesa/state_tracker/st_context.c
src/mesa/state_tracker/st_context.h

index 015d8fc2bbf0d1bd9533f8b5e9bb3999aa1c248b..eb64f5aa201e7ffed6bb0112492ad291ed64eda8 100644 (file)
@@ -185,6 +185,12 @@ intel_printf( struct pipe_winsys *sws, const char *fmtString, ... )
    va_end( args );
 }
 
+static const char *
+intel_get_name( struct pipe_winsys *sws )
+{
+   return "Intel/DRI/ttm";
+}
+
 
 struct pipe_winsys *
 intel_create_pipe_winsys( struct intel_context *intel )
@@ -209,6 +215,7 @@ intel_create_pipe_winsys( struct intel_context *intel )
    iws->winsys.flush_frontbuffer = intel_flush_frontbuffer;
    iws->winsys.wait_idle = intel_wait_idle;
    iws->winsys.printf = intel_printf;
+   iws->winsys.get_name = intel_get_name;
    iws->intel = intel;
 
    return &iws->winsys;
index 28fe70d0693ee4faa7471ff7166cba8e62c6bd89..9a0d40a8d4907dd37057cc3923b0b23cad5fd612 100644 (file)
@@ -19,6 +19,7 @@ DRIVER_SOURCES = \
        i915_state_derived.c \
        i915_state_emit.c \
        i915_state_fragprog.c \
+       i915_strings.c \
        i915_prim_emit.c \
        i915_tex_layout.c \
        i915_surface.c 
index d9fbada1ff6c3b01a51eb5dd61c9e4782a4538a5..199352cd704805bc463c51344c7927587ff8259b 100644 (file)
 #include "i915_state.h"
 #include "i915_batch.h"
 #include "i915_tex_layout.h"
+#include "i915_reg.h"
 
 #include "pipe/draw/draw_context.h"
 #include "pipe/p_defines.h"
 #include "pipe/p_winsys.h"
 
-#define PCI_CHIP_I915_G                        0x2582
-#define PCI_CHIP_I915_GM               0x2592
-#define PCI_CHIP_I945_G                        0x2772
-#define PCI_CHIP_I945_GM               0x27A2
-#define PCI_CHIP_I945_GME              0x27AE
-#define PCI_CHIP_G33_G                 0x29C2
-#define PCI_CHIP_Q35_G                 0x29B2
-#define PCI_CHIP_Q33_G                 0x29D2
-
 
 /**
  * Return list of supported surface/texture formats.
@@ -190,8 +182,6 @@ struct pipe_context *i915_create( struct pipe_winsys *pipe_winsys,
    struct i915_context *i915;
    unsigned is_i945 = 0;
 
-   /* TODO: Push this down into the pipe driver:
-    */
    switch (pci_id) {
    case PCI_CHIP_I915_G:
    case PCI_CHIP_I915_GM:
@@ -241,7 +231,10 @@ struct pipe_context *i915_create( struct pipe_winsys *pipe_winsys,
    i915_init_surface_functions(i915);
    i915_init_state_functions(i915);
    i915_init_flush_functions(i915);
+   i915_init_string_functions(i915);
 
+   i915->pci_id = pci_id;
+   i915->flags.is_i945 = is_i945;
 
    if (i915->flags.is_i945)
       i915->pipe.mipmap_tree_layout = i945_miptree_layout;
index 7a73a8d8d0708ee077d92f073751cc23a3f0e1f2..93b5e2546c33093f16d30243517bab45c829557a 100644 (file)
@@ -121,6 +121,7 @@ struct i915_context
    GLuint hardware_dirty;
    
    GLuint debug;
+   GLuint pci_id;
 
    struct {
       unsigned is_i945:1;
@@ -188,6 +189,7 @@ void i915_init_region_functions( struct i915_context *i915 );
 void i915_init_surface_functions( struct i915_context *i915 );
 void i915_init_state_functions( struct i915_context *i915 );
 void i915_init_flush_functions( struct i915_context *i915 );
+void i915_init_string_functions( struct i915_context *i915 );
 
 
 
index 0776b75ef928c244033a28a26ac5bc574f4ffe33..f4070ef93e824c4fe734ab5e8f857a7cc79876b7 100644 (file)
 #define BLENDFACT_INV_CONST_ALPHA      0x0f
 #define BLENDFACT_MASK                 0x0f
 
+#define PCI_CHIP_I915_G                        0x2582
+#define PCI_CHIP_I915_GM               0x2592
+#define PCI_CHIP_I945_G                        0x2772
+#define PCI_CHIP_I945_GM               0x27A2
+#define PCI_CHIP_I945_GME              0x27AE
+#define PCI_CHIP_G33_G                 0x29C2
+#define PCI_CHIP_Q35_G                 0x29B2
+#define PCI_CHIP_Q33_G                 0x29D2
+
 
 #endif
diff --git a/src/mesa/pipe/i915simple/i915_strings.c b/src/mesa/pipe/i915simple/i915_strings.c
new file mode 100644 (file)
index 0000000..a9b0bfc
--- /dev/null
@@ -0,0 +1,83 @@
+/**************************************************************************
+ * 
+ * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.
+ * All Rights Reserved.
+ * 
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sub license, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ * 
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
+ * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ * 
+ **************************************************************************/
+
+#include "i915_context.h"
+#include "i915_reg.h"
+
+
+static const char *i915_get_vendor( struct pipe_context *pipe )
+{
+   return "Tungsten Graphics, Inc.";
+}
+
+
+static const char *i915_get_name( struct pipe_context *pipe )
+{
+   static char buffer[128];
+   const char *chipset;
+
+   switch (i915_context(pipe)->pci_id) {
+   case PCI_CHIP_I915_G:
+      chipset = "915G";
+      break;
+   case PCI_CHIP_I915_GM:
+      chipset = "915GM";
+      break;
+   case PCI_CHIP_I945_G:
+      chipset = "945G";
+      break;
+   case PCI_CHIP_I945_GM:
+      chipset = "945GM";
+      break;
+   case PCI_CHIP_I945_GME:
+      chipset = "945GME";
+      break;
+   case PCI_CHIP_G33_G:
+      chipset = "G33";
+      break;
+   case PCI_CHIP_Q35_G:
+      chipset = "Q35";
+      break;
+   case PCI_CHIP_Q33_G:
+      chipset = "Q33";
+      break;
+   default:
+      chipset = "unknown";
+      break;
+   }
+
+   snprintf(buffer, sizeof(buffer), "pipe/i915 (chipset: %s)", chipset);
+   return buffer;
+}
+
+
+void
+i915_init_string_functions(struct i915_context *i915)
+{
+   i915->pipe.get_name = i915_get_name;
+   i915->pipe.get_vendor = i915_get_vendor;
+}
index b303cee5ccaa18301ea2cc1cb0a8237723f13634..84557b9a4a705d147dc10ef4fc807aaad9b2683e 100644 (file)
@@ -51,12 +51,19 @@ struct pipe_context {
     */
    const GLuint *(*supported_formats)(struct pipe_context *pipe,
                                       GLuint *numFormats);
+
    void (*max_texture_size)(struct pipe_context *pipe,
                             GLuint textureType, /* PIPE_TEXTURE_x */
                             GLuint *maxWidth,
                             GLuint *maxHeight,
                             GLuint *maxDepth);
 
+   const char *(*get_name)( struct pipe_context *pipe );
+
+   const char *(*get_vendor)( struct pipe_context *pipe );
+
+   
+
    /*
     * Drawing
     */
index c455ebdbbeeede95a97cb04ee773629223be79dd..b7495a205fe13869cbee3f968e61eceed0b769ea 100644 (file)
@@ -107,6 +107,10 @@ struct pipe_winsys {
     */
    void (*wait_idle)( struct pipe_winsys *sws );
 
+   /* Queries:
+    */
+   const char *(*get_name)( struct pipe_winsys *sws );
+
 };
 
 
index b35bd660815f14e00c514da0dc810ee7e47af3ba..d67ad2c01da55c610a1ea93433f0acf18eedb4b0 100644 (file)
@@ -224,6 +224,16 @@ static GLuint softpipe_get_occlusion_counter(struct pipe_context *pipe)
    return softpipe->occlusion_counter;
 }
 
+static const char *softpipe_get_name( struct pipe_context *pipe )
+{
+   return "softpipe";
+}
+
+static const char *softpipe_get_vendor( struct pipe_context *pipe )
+{
+   return "Tungsten Graphics, Inc.";
+}
+
 
 struct pipe_context *softpipe_create( struct pipe_winsys *pipe_winsys,
                                      struct softpipe_winsys *softpipe_winsys )
@@ -259,6 +269,8 @@ struct pipe_context *softpipe_create( struct pipe_winsys *pipe_winsys,
    softpipe->pipe.flush = softpipe_flush;
    softpipe->pipe.reset_occlusion_counter = softpipe_reset_occlusion_counter;
    softpipe->pipe.get_occlusion_counter = softpipe_get_occlusion_counter;
+   softpipe->pipe.get_name = softpipe_get_name;
+   softpipe->pipe.get_vendor = softpipe_get_vendor;
 
    /* textures */
    softpipe->pipe.mipmap_tree_layout = softpipe_mipmap_tree_layout;
index a2b9fed82b76acf69b4ac5386ca1a294dda014db..c94cd3de269af47bcd1200955a8939ca3dd957e6 100644 (file)
@@ -199,6 +199,7 @@ STATETRACKER_SOURCES = \
        state_tracker/st_cb_fbo.c \
        state_tracker/st_cb_program.c \
        state_tracker/st_cb_readpixels.c \
+       state_tracker/st_cb_strings.c \
        state_tracker/st_cb_texture.c \
        state_tracker/st_context.c \
        state_tracker/st_draw.c \
diff --git a/src/mesa/state_tracker/st_cb_strings.c b/src/mesa/state_tracker/st_cb_strings.c
new file mode 100644 (file)
index 0000000..ac1a8b1
--- /dev/null
@@ -0,0 +1,86 @@
+/**************************************************************************
+ * 
+ * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas.
+ * All Rights Reserved.
+ * 
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sub license, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ * 
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
+ * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ * 
+ **************************************************************************/
+
+ /*
+  * Authors:
+  *   Keith Whitwell <keith@tungstengraphics.com>
+  *   Brian Paul
+  */
+
+#include "main/glheader.h"
+#include "main/macros.h"
+#include "main/version.h"
+#include "pipe/p_context.h"
+#include "pipe/p_winsys.h"
+#include "st_context.h"
+#include "st_cb_strings.h"
+
+#define ST_VERSION_STRING "0.1"
+
+static const GLubyte *
+st_get_string(GLcontext * ctx, GLenum name)
+{
+   struct st_context *st = st_context(ctx);
+   struct pipe_context *pipe = st->pipe;
+   static char buffer[128];
+
+
+   switch (name) {
+   case GL_VENDOR: {
+      const char *vendor = pipe->get_vendor( pipe );
+      const char *tungsten = "Tungsten Graphics, Inc.";
+
+      /* Tungsten developed the state_tracker module (and much of
+       * Mesa), but the driver itself may come from elsewhere.  The
+       * additional string allows "and XyzCorp" to reflect this.
+       */
+      if (vendor && strcmp(vendor, tungsten) != 0)
+        snprintf(buffer, sizeof(buffer), "%s and %s",  tungsten, vendor);
+      else
+        snprintf(buffer, sizeof(buffer), "%s", tungsten);
+
+      return (GLubyte *) buffer;
+      break;
+   }
+
+   case GL_RENDERER:
+      snprintf(buffer, sizeof(buffer), "TG3D, %s on %s", 
+              pipe->get_name( pipe ),
+              pipe->winsys->get_name( pipe->winsys ));
+
+      return (GLubyte *) buffer;
+
+   default:
+      return NULL;
+   }
+}
+
+
+void st_init_string_functions(struct dd_function_table *functions)
+{
+   functions->GetString = st_get_string;
+}
diff --git a/src/mesa/state_tracker/st_cb_strings.h b/src/mesa/state_tracker/st_cb_strings.h
new file mode 100644 (file)
index 0000000..3b765aa
--- /dev/null
@@ -0,0 +1,38 @@
+/**************************************************************************
+ * 
+ * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas.
+ * All Rights Reserved.
+ * 
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sub license, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ * 
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
+ * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ * 
+ **************************************************************************/
+
+
+#ifndef ST_CB_STRINGS_H
+#define ST_CB_STRINGS_H
+
+
+extern void
+st_init_string_functions(struct dd_function_table *functions);
+
+
+#endif /* ST_CB_CLEAR_H */
+
index 2bdcc6caf3254f1818eb120175641147903b3981..7bb9cbda45494f7be64ca693f8276a0d16599182 100644 (file)
@@ -35,6 +35,7 @@
 #include "st_cb_readpixels.h"
 #include "st_cb_texture.h"
 #include "st_cb_flush.h"
+#include "st_cb_strings.h"
 #include "st_atom.h"
 #include "st_draw.h"
 #include "st_program.h"
@@ -111,4 +112,5 @@ void st_init_driver_functions(struct dd_function_table *functions)
    st_init_readpixels_functions(functions);
    st_init_texture_functions(functions);
    st_init_flush_functions(functions);
+   st_init_string_functions(functions);
 }
index 88e2701fc3c7bd8c1a00cfa30109174fbd3f76ce..8ce85cddaaacc145346a97e50093669b9c112f35 100644 (file)
@@ -116,4 +116,6 @@ static INLINE struct st_context *st_context(GLcontext *ctx)
 extern void st_init_driver_functions(struct dd_function_table *functions);
 
 
+
+
 #endif