Pass pci_id to i915_create()
authorKeith Whitwell <keith@tungstengraphics.com>
Fri, 10 Aug 2007 09:01:15 +0000 (10:01 +0100)
committerKeith Whitwell <keith@tungstengraphics.com>
Fri, 10 Aug 2007 09:15:31 +0000 (10:15 +0100)
src/mesa/pipe/i915simple/i915_context.c
src/mesa/pipe/i915simple/i915_context.h
src/mesa/pipe/i915simple/i915_winsys.h

index eb7f3804d3b15c3b79935036717cd0f4e546940f..a15d3505d77352c47a9e9e0f7ed91cc2dca45b44 100644 (file)
 #include "pipe/draw/draw_context.h"
 #include "pipe/p_defines.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
 
 
 /**
@@ -143,14 +151,40 @@ i915_draw_vertices(struct pipe_context *pipe,
 
 
 
-struct pipe_context *i915_create( struct i915_winsys *winsys )
+struct pipe_context *i915_create( struct i915_winsys *winsys,
+                                 unsigned pci_id )
 {
-   struct i915_context *i915 = CALLOC_STRUCT(i915_context);
+   struct i915_context *i915;
+   unsigned is_i945 = 0;
 
-   i915->pipe.destroy = i915_destroy;
+   /* TODO: Push this down into the pipe driver:
+    */
+   switch (pci_id) {
+   case PCI_CHIP_I915_G:
+   case PCI_CHIP_I915_GM:
+      break;
+
+   case PCI_CHIP_I945_G:
+   case PCI_CHIP_I945_GM:
+   case PCI_CHIP_I945_GME:
+   case PCI_CHIP_G33_G:
+   case PCI_CHIP_Q33_G:
+   case PCI_CHIP_Q35_G:
+      is_i945 = 1;
+      break;
 
-   i915->pipe.supported_formats = i915_supported_formats;
+   default:
+      winsys->printf(winsys, "%s: unknown pci id 0x%x, cannot create context\n", 
+                    __FUNCTION__, pci_id);
+      return NULL;
+   }
+
+   i915 = CALLOC_STRUCT(i915_context);
+   if (i915 == NULL)
+      return NULL;
 
+   i915->pipe.destroy = i915_destroy;
+   i915->pipe.supported_formats = i915_supported_formats;
    i915->pipe.draw_vb = i915_draw_vb;
    i915->pipe.draw_vertices = i915_draw_vertices;
    i915->pipe.clear = i915_clear;
index 550d9c012ff912cb1fa8b1ad0803f668860f7d81..e8db2b7c363eeb737fdb4c9cf106b2f031540950 100644 (file)
@@ -122,8 +122,9 @@ struct i915_context
    
    GLuint debug;
 
-
-   struct pipe_scissor_state cliprect;
+   struct {
+      unsigned is_i945:1;
+   } flags;
 };
 
 /* A flag for each state_tracker state object:
index 887308f5ddaed12ee403075219979f220c6c7ce2..9802148aa1be7f42efb639fc1c6e17acbdafdc35 100644 (file)
@@ -123,7 +123,8 @@ struct i915_winsys {
 #define I915_BUFFER_ACCESS_READ    0x2
 
 
-struct pipe_context *i915_create( struct i915_winsys * );
+struct pipe_context *i915_create( struct i915_winsys *,
+                                 unsigned pci_id );
 
 
 #endif