#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
/**
-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;