i965g: more work on compiling
authorKeith Whitwell <keithw@vmware.com>
Sat, 24 Oct 2009 16:07:01 +0000 (17:07 +0100)
committerKeith Whitwell <keithw@vmware.com>
Sat, 24 Oct 2009 16:07:28 +0000 (17:07 +0100)
43 files changed:
src/gallium/drivers/i965/Makefile
src/gallium/drivers/i965/brw_batchbuffer.h
src/gallium/drivers/i965/brw_cc.c
src/gallium/drivers/i965/brw_clip.c
src/gallium/drivers/i965/brw_clip.h
src/gallium/drivers/i965/brw_clip_line.c
src/gallium/drivers/i965/brw_clip_point.c
src/gallium/drivers/i965/brw_clip_state.c
src/gallium/drivers/i965/brw_clip_tri.c
src/gallium/drivers/i965/brw_clip_unfilled.c
src/gallium/drivers/i965/brw_clip_util.c
src/gallium/drivers/i965/brw_context.c
src/gallium/drivers/i965/brw_context.h
src/gallium/drivers/i965/brw_curbe.c
src/gallium/drivers/i965/brw_debug.h [new file with mode: 0644]
src/gallium/drivers/i965/brw_defines.h
src/gallium/drivers/i965/brw_draw.c
src/gallium/drivers/i965/brw_draw.h
src/gallium/drivers/i965/brw_draw_upload.c
src/gallium/drivers/i965/brw_eu.h
src/gallium/drivers/i965/brw_misc_state.c
src/gallium/drivers/i965/brw_pipe_debug.c [deleted file]
src/gallium/drivers/i965/brw_pipe_query.c
src/gallium/drivers/i965/brw_pipe_vertex.c [new file with mode: 0644]
src/gallium/drivers/i965/brw_reg.h
src/gallium/drivers/i965/brw_screen.c [new file with mode: 0644]
src/gallium/drivers/i965/brw_screen.h
src/gallium/drivers/i965/brw_sf.c
src/gallium/drivers/i965/brw_sf_state.c
src/gallium/drivers/i965/brw_state_cache.c
src/gallium/drivers/i965/brw_state_debug.c [new file with mode: 0644]
src/gallium/drivers/i965/brw_state_upload.c
src/gallium/drivers/i965/brw_tex.c
src/gallium/drivers/i965/brw_tex_layout.c
src/gallium/drivers/i965/brw_types.h
src/gallium/drivers/i965/brw_vs_surface_state.c
src/gallium/drivers/i965/brw_winsys.h
src/gallium/drivers/i965/brw_wm.c
src/gallium/drivers/i965/brw_wm_state.c
src/gallium/drivers/i965/brw_wm_surface_state.c
src/gallium/drivers/i965/intel_chipset.h [deleted file]
src/gallium/drivers/i965/intel_tex_format.c [deleted file]
src/gallium/drivers/i965/intel_tex_layout.c

index 480d2efbc5216369582cda3441e1dbcf285da8dc..40c836482496ee1b9505341944639c59866ee25d 100644 (file)
@@ -26,7 +26,6 @@ C_SOURCES = \
        brw_gs_state.c \
        brw_misc_state.c \
        brw_pipe_blend.c \
-       brw_pipe_debug.c \
        brw_pipe_depth.c \
        brw_pipe_fb.c \
        brw_pipe_flush.c \
@@ -63,7 +62,6 @@ C_SOURCES = \
        brw_wm_surface_state.c \
        brw_bo.c \
        intel_batchbuffer.c \
-       intel_tex_format.c \
        intel_tex_layout.c 
 
 include ../../Makefile.template
index 76b3c1bf69a55be11255786257ec676d84cb32d2..b8492882e10fc9edea792449afe843a43cdf80cc 100644 (file)
@@ -4,6 +4,7 @@
 #include "brw_types.h"
 #include "brw_winsys.h"
 #include "brw_reg.h"
+#include "util/u_debug.h"
 
 #define BATCH_SZ 16384
 #define BATCH_RESERVED 16
@@ -68,56 +69,50 @@ brw_batchbuffer_emit_dword(struct brw_batchbuffer *batch, GLuint dword)
 
 static INLINE boolean
 brw_batchbuffer_require_space(struct brw_batchbuffer *batch,
-                                GLuint sz,
-                               enum cliprect_mode cliprect_mode)
+                                GLuint sz)
 {
    assert(sz < batch->size - 8);
    if (brw_batchbuffer_space(batch) < sz) {
       assert(0);
       return FALSE;
    }
-
-   /* All commands should be executed once regardless of cliprect
-    * mode.
-    */
-   (void)cliprect_mode;
+#ifdef DEBUG
+   batch->emit.end_ptr = batch->ptr + sz;
+#endif
+   return TRUE;
 }
 
 /* Here are the crusty old macros, to be removed:
  */
-#define BATCH_LOCALS
-
 #define BEGIN_BATCH(n, cliprect_mode) do {                             \
-   brw_batchbuffer_require_space(intel->batch, (n)*4, cliprect_mode); \
-   assert(intel->batch->emit.start_ptr == NULL);                       \
-   intel->batch->emit.total = (n) * 4;                                 \
-   intel->batch->emit.start_ptr = intel->batch->ptr;                   \
+   brw_batchbuffer_require_space(brw->batch, (n)*4); \
 } while (0)
 
-#define OUT_BATCH(d) brw_batchbuffer_emit_dword(intel->batch, d)
+#define OUT_BATCH(d) brw_batchbuffer_emit_dword(brw->batch, d)
 
 #define OUT_RELOC(buf, read_domains, write_domain, delta) do {         \
    assert((unsigned) (delta) < buf->size);                             \
-   brw_batchbuffer_emit_reloc(intel->batch, buf,                       \
+   brw_batchbuffer_emit_reloc(brw->batch, buf,                 \
                                read_domains, write_domain, delta);     \
 } while (0)
 
+#ifdef DEBUG
 #define ADVANCE_BATCH() do {                                           \
-   unsigned int _n = intel->batch->ptr - intel->batch->emit.start_ptr; \
-   assert(intel->batch->emit.start_ptr != NULL);                       \
-   if (_n != intel->batch->emit.total) {                               \
-      fprintf(stderr, "ADVANCE_BATCH: %d of %d dwords emitted\n",      \
-             _n, intel->batch->emit.total);                            \
+   unsigned int _n = brw->batch->ptr - brw->batch->emit.end_ptr;       \
+   if (_n != 0) {                                                      \
+      debug_printf("%s: %d too many bytes emitted to batch\n", __FUNCTION__, _n); \
       abort();                                                         \
    }                                                                   \
-   intel->batch->emit.start_ptr = NULL;                                        \
+   brw->batch->emit.end_ptr = NULL;                                    \
 } while(0)
-
+#else
+#define ADVANCE_BATCH()
+#endif
 
 static INLINE void
 brw_batchbuffer_emit_mi_flush(struct brw_batchbuffer *batch)
 {
-   brw_batchbuffer_require_space(batch, 4, IGNORE_CLIPRECTS);
+   brw_batchbuffer_require_space(batch, 4);
    brw_batchbuffer_emit_dword(batch, MI_FLUSH);
 }
 
index c8e7851d7567c6f75f12892556f5c1ba26ce23ea..76759304eb02867f160b57e13e1e8810050f73be 100644 (file)
@@ -109,10 +109,10 @@ static void
 cc_unit_populate_key(const struct brw_context *brw,
                     struct brw_cc_unit_key *key)
 {
-   key->cc0 = brw->curr.dsa->cc0;
-   key->cc1 = brw->curr.dsa->cc1;
-   key->cc2 = brw->curr.dsa->cc2;
-   key->cc3 = combine_cc3( brw->curr.dsa->cc3, brw->curr.blend->cc3 );
+   key->cc0 = brw->curr.zstencil->cc0;
+   key->cc1 = brw->curr.zstencil->cc1;
+   key->cc2 = brw->curr.zstencil->cc2;
+   key->cc3 = combine_cc3( brw->curr.zstencil->cc3, brw->curr.blend->cc3 );
    key->cc5 = brw->curr.blend->cc5;
    key->cc6 = brw->curr.blend->cc6;
    key->cc7 = brw->curr.blend->cc7;
index 591e9047053e814e2802e2808437ee6a890d899a..622d9dba96ac193b4e4aaa0bbcdaf1af87d62dbe 100644 (file)
@@ -65,15 +65,16 @@ static void compile_clip_prog( struct brw_context *brw,
 
    c.func.single_program_flow = 1;
 
+   c.chipset = brw->chipset;
    c.key = *key;
-   c.need_ff_sync = BRW_IS_IGDNG(brw);
+   c.need_ff_sync = c.chipset.is_igdng;
 
    /* Need to locate the two positions present in vertex + header.
     * These are currently hardcoded:
     */
    c.header_position_offset = ATTR_SIZE;
 
-   if (BRW_IS_IGDNG(brw))
+   if (c.chipset.is_igdng)
        delta = 3 * REG_SIZE;
    else
        delta = REG_SIZE;
@@ -160,7 +161,7 @@ static void upload_clip_prog(struct brw_context *brw)
    key.primitive = brw->reduced_primitive;
 
    /* PIPE_NEW_VS */
-   key.nr_attrs = brw->curr.vs->info.file_max[TGSI_FILE_OUTPUT] + 1;
+   key.nr_attrs = brw->curr.vertex_shader->info.file_max[TGSI_FILE_OUTPUT] + 1;
 
    /* PIPE_NEW_CLIP */
    key.nr_userclip = brw->curr.ucp.nr;
index cfe51bf29209936657f9c2dac5b52125278180be..772c34be88313f44dba7793a5e6efd3a88c0f399 100644 (file)
@@ -32,8 +32,8 @@
 #ifndef BRW_CLIP_H
 #define BRW_CLIP_H
 
-
-#include "brw_context.h"
+#include "pipe/p_state.h"
+#include "brw_reg.h"
 #include "brw_eu.h"
 
 #define MAX_VERTS (3+6+6)      
@@ -60,6 +60,12 @@ struct brw_clip_prog_key {
    GLfloat offset_units;
 };
 
+struct brw_clip_prog_data {
+   GLuint curb_read_length;    /* user planes? */
+   GLuint clip_mode;
+   GLuint urb_read_length;
+   GLuint total_grf;
+};
 
 #define CLIP_LINE   0
 #define CLIP_POINT  1
@@ -112,12 +118,21 @@ struct brw_clip_compile {
    GLuint last_tmp;
 
    GLboolean need_direction;
+   struct brw_chipset chipset;
 
    GLuint last_mrf;
 
    GLuint header_position_offset;
    GLuint offset[PIPE_MAX_SHADER_OUTPUTS];
    GLboolean need_ff_sync;
+
+   GLuint nr_color_attrs;
+   GLuint offset_color0;
+   GLuint offset_color1;
+   GLuint offset_bfc0;
+   GLuint offset_bfc1;
+   
+   GLuint offset_edge;
 };
 
 #define ATTR_SIZE  (4*4)
index 6b4da256448632f7084fd4aa108236dfba05efe1..a4790bda954f9b79cfc25939335fdeef3ac41a72 100644 (file)
   *   Keith Whitwell <keith@tungstengraphics.com>
   */
 
+#include "util/u_debug.h"
+
 #include "brw_defines.h"
-#include "brw_context.h"
 #include "brw_eu.h"
 #include "brw_util.h"
 #include "brw_clip.h"
 
 
 
+
 static void brw_clip_line_alloc_regs( struct brw_clip_compile *c )
 {
    GLuint i = 0,j;
@@ -130,6 +132,7 @@ static void clip_and_emit_line( struct brw_clip_compile *c )
    struct brw_instruction *is_neg2 = NULL;
    struct brw_instruction *not_culled;
    struct brw_reg v1_null_ud = retype(vec1(brw_null_reg()), BRW_REGISTER_TYPE_UD);
+   const int hpos = 0;         /* XXX: position not always first element */
 
    brw_MOV(p, get_addr_reg(vtx0),      brw_address(c->reg.vertex[0]));
    brw_MOV(p, get_addr_reg(vtx1),      brw_address(c->reg.vertex[1]));
@@ -145,7 +148,7 @@ static void clip_and_emit_line( struct brw_clip_compile *c )
    brw_clip_init_clipmask(c);
 
    /* -ve rhw workaround */
-   if (BRW_IS_965(p->brw)) {
+   if (c->chipset.is_965) {
       brw_set_conditionalmod(p, BRW_CONDITIONAL_NZ);
       brw_AND(p, brw_null_reg(), get_element_ud(c->reg.R0, 2),
               brw_imm_ud(1<<20));
@@ -170,19 +173,19 @@ static void clip_and_emit_line( struct brw_clip_compile *c )
 
         /* dp = DP4(vtx->position, plane) 
          */
-        brw_DP4(p, vec4(c->reg.dp0), deref_4f(vtx0, c->offset[VERT_RESULT_HPOS]), c->reg.plane_equation);
+        brw_DP4(p, vec4(c->reg.dp0), deref_4f(vtx0, c->offset[hpos]), c->reg.plane_equation);
 
         /* if (IS_NEGATIVE(dp1)) 
          */
         brw_set_conditionalmod(p, BRW_CONDITIONAL_L);
-        brw_DP4(p, vec4(c->reg.dp1), deref_4f(vtx1, c->offset[VERT_RESULT_HPOS]), c->reg.plane_equation);
+        brw_DP4(p, vec4(c->reg.dp1), deref_4f(vtx1, c->offset[hpos]), c->reg.plane_equation);
         is_negative = brw_IF(p, BRW_EXECUTE_1);
         {
              /*
               * Both can be negative on GM965/G965 due to RHW workaround
               * if so, this object should be rejected.
               */
-             if (BRW_IS_965(p->brw)) {
+             if (c->chipset.is_965) {
                  brw_CMP(p, vec1(brw_null_reg()), BRW_CONDITIONAL_LE, c->reg.dp0, brw_imm_f(0.0));
                  is_neg2 = brw_IF(p, BRW_EXECUTE_1);
                  {
@@ -207,7 +210,7 @@ static void clip_and_emit_line( struct brw_clip_compile *c )
 
              /* If both are positive, do nothing */
              /* Only on GM965/G965 */
-             if (BRW_IS_965(p->brw)) {
+             if (c->chipset.is_965) {
                  brw_CMP(p, vec1(brw_null_reg()), BRW_CONDITIONAL_L, c->reg.dp0, brw_imm_f(0.0));
                  is_neg2 = brw_IF(p, BRW_EXECUTE_1);
              }
@@ -222,7 +225,7 @@ static void clip_and_emit_line( struct brw_clip_compile *c )
                  brw_set_predicate_control(p, BRW_PREDICATE_NONE);
              }
 
-             if (BRW_IS_965(p->brw)) {
+             if (c->chipset.is_965) {
                  brw_ENDIF(p, is_neg2);
              }
          }
@@ -245,8 +248,8 @@ static void clip_and_emit_line( struct brw_clip_compile *c )
    brw_CMP(p, vec1(brw_null_reg()), BRW_CONDITIONAL_L, c->reg.t, brw_imm_f(1.0));
    not_culled = brw_IF(p, BRW_EXECUTE_1);
    {
-      brw_clip_interp_vertex(c, newvtx0, vtx0, vtx1, c->reg.t0, GL_FALSE);
-      brw_clip_interp_vertex(c, newvtx1, vtx1, vtx0, c->reg.t1, GL_FALSE);
+      brw_clip_interp_vertex(c, newvtx0, vtx0, vtx1, c->reg.t0, FALSE);
+      brw_clip_interp_vertex(c, newvtx1, vtx1, vtx0, c->reg.t1, FALSE);
 
       brw_clip_emit_vue(c, newvtx0, 1, 0, (_3DPRIM_LINESTRIP << 2) | R02_PRIM_START);
       brw_clip_emit_vue(c, newvtx1, 0, 1, (_3DPRIM_LINESTRIP << 2) | R02_PRIM_END); 
index b2cf7b20119a44a253e0a65190e4b855a3677873..e0a5330556d671036ad23256d5cc2fa2b300864e 100644 (file)
@@ -30,7 +30,6 @@
   */
 
 #include "brw_defines.h"
-#include "brw_context.h"
 #include "brw_eu.h"
 #include "brw_util.h"
 #include "brw_clip.h"
index 0ea7ce5734a1d3190d159181e20119fc98ecec4f..25b8c6372fac80113e937484aaf75dd817a5eefb 100644 (file)
   *   Keith Whitwell <keith@tungstengraphics.com>
   */
 
+#include "util/u_math.h"
+
 #include "brw_context.h"
+#include "brw_clip.h"
 #include "brw_state.h"
 #include "brw_defines.h"
+#include "brw_debug.h"
 
 struct brw_clip_unit_key {
    unsigned int total_grf;
@@ -77,7 +81,7 @@ clip_unit_create_from_key(struct brw_context *brw,
 
    memset(&clip, 0, sizeof(clip));
 
-   clip.thread0.grf_reg_count = ALIGN(key->total_grf, 16) / 16 - 1;
+   clip.thread0.grf_reg_count = align(key->total_grf, 16) / 16 - 1;
    /* reloc */
    clip.thread0.kernel_start_pointer = brw->clip.prog_bo->offset >> 6;
 
@@ -112,10 +116,10 @@ clip_unit_create_from_key(struct brw_context *brw,
       clip.thread4.max_threads = 1 - 1;
    }
 
-   if (INTEL_DEBUG & DEBUG_SINGLE_THREAD)
+   if (BRW_DEBUG & DEBUG_SINGLE_THREAD)
       clip.thread4.max_threads = 0;
 
-   if (INTEL_DEBUG & DEBUG_STATS)
+   if (BRW_DEBUG & DEBUG_STATS)
       clip.thread4.stats_enable = 1;
 
    clip.clip5.userclip_enable_flags = 0x7f;
@@ -145,12 +149,12 @@ clip_unit_create_from_key(struct brw_context *brw,
 
    /* Emit clip program relocation */
    assert(brw->clip.prog_bo);
-   dri_bo_emit_reloc(bo,
-                    I915_GEM_DOMAIN_INSTRUCTION,
-                    0,
-                    clip.thread0.grf_reg_count << 1,
-                    offsetof(struct brw_clip_unit_state, thread0),
-                    brw->clip.prog_bo);
+   brw->sws->bo_emit_reloc(bo,
+                          I915_GEM_DOMAIN_INSTRUCTION,
+                          0,
+                          clip.thread0.grf_reg_count << 1,
+                          offsetof(struct brw_clip_unit_state, thread0),
+                          brw->clip.prog_bo);
 
    return bo;
 }
index d8feca6a8743fe5b0355203fbd7ca0d1d1fc143c..5486f4fa89f4b2d8ce92eacff86adc43eab2b089 100644 (file)
@@ -30,7 +30,6 @@
   */
 
 #include "brw_defines.h"
-#include "brw_context.h"
 #include "brw_eu.h"
 #include "brw_util.h"
 #include "brw_clip.h"
@@ -71,7 +70,7 @@ void brw_clip_tri_alloc_regs( struct brw_clip_compile *c,
       for (j = 0; j < 3; j++) {
         GLuint delta = c->nr_attrs*16 + 32;
 
-         if (BRW_IS_IGDNG(c->func.brw))
+         if (c->chipset.is_igdng)
              delta = c->nr_attrs * 16 + 32 * 3;
 
         brw_MOV(&c->func, byte_offset(c->reg.vertex[j], delta), brw_imm_f(0));
@@ -565,7 +564,7 @@ void brw_emit_tri_clip( struct brw_clip_compile *c )
 
    /* if -ve rhw workaround bit is set, 
       do cliptest */
-   if (BRW_IS_965(p->brw)) {
+   if (c->chipset.is_965) {
       brw_set_conditionalmod(p, BRW_CONDITIONAL_NZ);
       brw_AND(p, brw_null_reg(), get_element_ud(c->reg.R0, 2), 
               brw_imm_ud(1<<20));
index 8501599aef8e6fb590358aa627c5cb6ca9e2117a..1cb86dd25bd796ee7500383cb07ad80558fa1e99 100644 (file)
   *   Keith Whitwell <keith@tungstengraphics.com>
   */
 
-#include "brw_batchbuffer.h"
-
 #include "brw_defines.h"
-#include "brw_context.h"
 #include "brw_eu.h"
 #include "brw_util.h"
 #include "brw_clip.h"
@@ -126,8 +123,7 @@ static void copy_bfc( struct brw_clip_compile *c )
 
    /* Do we have any colors to copy? 
     */
-   if (!(c->offset[VERT_RESULT_COL0] && c->offset[VERT_RESULT_BFC0]) &&
-       !(c->offset[VERT_RESULT_COL1] && c->offset[VERT_RESULT_BFC1]))
+   if (c->nr_color_attrs == 0)
       return;
 
    /* In some wierd degnerate cases we can end up testing the
@@ -150,15 +146,15 @@ static void copy_bfc( struct brw_clip_compile *c )
       GLuint i;
 
       for (i = 0; i < 3; i++) {
-        if (c->offset[VERT_RESULT_COL0] && c->offset[VERT_RESULT_BFC0])
+        if (c->offset_color0 && c->offset_bfc0)
            brw_MOV(p, 
-                   byte_offset(c->reg.vertex[i], c->offset[VERT_RESULT_COL0]),
-                   byte_offset(c->reg.vertex[i], c->offset[VERT_RESULT_BFC0]));
+                   byte_offset(c->reg.vertex[i], c->offset_color0),
+                   byte_offset(c->reg.vertex[i], c->offset_bfc0));
 
-        if (c->offset[VERT_RESULT_COL1] && c->offset[VERT_RESULT_BFC1])
+        if (c->offset_color1 && c->offset_bfc1)
            brw_MOV(p, 
-                   byte_offset(c->reg.vertex[i], c->offset[VERT_RESULT_COL1]),
-                   byte_offset(c->reg.vertex[i], c->offset[VERT_RESULT_BFC1]));
+                   byte_offset(c->reg.vertex[i], c->offset_color0),
+                   byte_offset(c->reg.vertex[i], c->offset_bfc0));
       }
    }
    brw_ENDIF(p, ccw);
@@ -218,12 +214,12 @@ static void merge_edgeflags( struct brw_clip_compile *c )
    {   
       brw_set_conditionalmod(p, BRW_CONDITIONAL_EQ);
       brw_AND(p, vec1(brw_null_reg()), get_element_ud(c->reg.R0, 2), brw_imm_ud(1<<8));
-      brw_MOV(p, byte_offset(c->reg.vertex[0], c->offset[VERT_RESULT_EDGE]), brw_imm_f(0));
+      brw_MOV(p, byte_offset(c->reg.vertex[0], c->offset_edge), brw_imm_f(0));
       brw_set_predicate_control(p, BRW_PREDICATE_NONE);
 
       brw_set_conditionalmod(p, BRW_CONDITIONAL_EQ);
       brw_AND(p, vec1(brw_null_reg()), get_element_ud(c->reg.R0, 2), brw_imm_ud(1<<9));
-      brw_MOV(p, byte_offset(c->reg.vertex[2], c->offset[VERT_RESULT_EDGE]), brw_imm_f(0));
+      brw_MOV(p, byte_offset(c->reg.vertex[2], c->offset_edge), brw_imm_f(0));
       brw_set_predicate_control(p, BRW_PREDICATE_NONE);
    }
    brw_ENDIF(p, is_poly);
@@ -294,7 +290,7 @@ static void emit_lines(struct brw_clip_compile *c,
       /* draw edge if edgeflag != 0 */
       brw_CMP(p, 
              vec1(brw_null_reg()), BRW_CONDITIONAL_NZ, 
-             deref_1f(v0, c->offset[VERT_RESULT_EDGE]),
+             deref_1f(v0, c->offset_edge),
              brw_imm_f(0));
       draw_edge = brw_IF(p, BRW_EXECUTE_1);
       {
@@ -333,7 +329,7 @@ static void emit_points(struct brw_clip_compile *c,
        */
       brw_CMP(p, 
              vec1(brw_null_reg()), BRW_CONDITIONAL_NZ, 
-             deref_1f(v0, c->offset[VERT_RESULT_EDGE]),
+             deref_1f(v0, c->offset_edge),
              brw_imm_f(0));
       draw_point = brw_IF(p, BRW_EXECUTE_1);
       {
@@ -450,7 +446,7 @@ void brw_emit_unfilled_clip( struct brw_clip_compile *c )
    brw_clip_tri_init_vertices(c);
    brw_clip_init_ff_sync(c);
 
-   assert(c->offset[VERT_RESULT_EDGE]);
+   assert(c->offset_edge);
 
    if (c->key.fill_ccw == CLIP_CULL &&
        c->key.fill_cw == CLIP_CULL) {
index 60bfd3538e2bd807d75b14f03f50d999601faa6b..f8f98c8037860bc3008dd8fabe1c7558f3de46f7 100644 (file)
@@ -31,7 +31,6 @@
 
 
 #include "brw_defines.h"
-#include "brw_context.h"
 #include "brw_eu.h"
 #include "brw_util.h"
 #include "brw_clip.h"
@@ -144,10 +143,10 @@ void brw_clip_interp_vertex( struct brw_clip_compile *c,
    for (i = 0; i < c->nr_attrs; i++) {
       GLuint delta = i*16 + 32;
 
-      if (BRW_IS_IGDNG(p->brw))
+      if (c->chipset.is_igdng)
           delta = i * 16 + 32 * 3;
 
-      if (delta == c->offset[VERT_RESULT_EDGE]) {
+      if (delta == c->offset_edge) {
         if (force_edgeflag) 
            brw_MOV(p, deref_4f(dest_ptr, delta), brw_imm_f(1));
         else
@@ -178,7 +177,7 @@ void brw_clip_interp_vertex( struct brw_clip_compile *c,
    if (i & 1) {
       GLuint delta = i*16 + 32;
 
-      if (BRW_IS_IGDNG(p->brw))
+      if (c->chipset.is_igdng)
           delta = i * 16 + 32 * 3;
 
       brw_MOV(p, deref_4f(dest_ptr, delta), brw_imm_f(0));
@@ -304,25 +303,25 @@ void brw_clip_copy_colors( struct brw_clip_compile *c,
 {
    struct brw_compile *p = &c->func;
 
-   if (c->offset[VERT_RESULT_COL0])
+   if (c->offset_color0)
       brw_MOV(p, 
-             byte_offset(c->reg.vertex[to], c->offset[VERT_RESULT_COL0]),
-             byte_offset(c->reg.vertex[from], c->offset[VERT_RESULT_COL0]));
+             byte_offset(c->reg.vertex[to], c->offset_color0),
+             byte_offset(c->reg.vertex[from], c->offset_color0));
 
-   if (c->offset[VERT_RESULT_COL1])
+   if (c->offset_color1)
       brw_MOV(p, 
-             byte_offset(c->reg.vertex[to], c->offset[VERT_RESULT_COL1]),
-             byte_offset(c->reg.vertex[from], c->offset[VERT_RESULT_COL1]));
+             byte_offset(c->reg.vertex[to], c->offset_color1),
+             byte_offset(c->reg.vertex[from], c->offset_color1));
 
-   if (c->offset[VERT_RESULT_BFC0])
+   if (c->offset_bfc0)
       brw_MOV(p, 
-             byte_offset(c->reg.vertex[to], c->offset[VERT_RESULT_BFC0]),
-             byte_offset(c->reg.vertex[from], c->offset[VERT_RESULT_BFC0]));
+             byte_offset(c->reg.vertex[to], c->offset_bfc0),
+             byte_offset(c->reg.vertex[from], c->offset_bfc0));
 
-   if (c->offset[VERT_RESULT_BFC1])
+   if (c->offset_bfc1)
       brw_MOV(p, 
-             byte_offset(c->reg.vertex[to], c->offset[VERT_RESULT_BFC1]),
-             byte_offset(c->reg.vertex[from], c->offset[VERT_RESULT_BFC1]));
+             byte_offset(c->reg.vertex[to], c->offset_bfc1),
+             byte_offset(c->reg.vertex[from], c->offset_bfc1));
 }
 
 
index 07a5420d6eecea200402d123f2edfab840682b7c..e9605bafe6b527e00fa0f733a653b09918a30b95 100644 (file)
 
 
 #include "pipe/p_context.h"
+#include "util/u_simple_list.h"
 
 #include "brw_context.h"
 #include "brw_defines.h"
 #include "brw_draw.h"
 #include "brw_state.h"
-#include "brw_vs.h"
-#include "brw_screen_tex.h"
 #include "brw_batchbuffer.h"
+#include "brw_winsys.h"
 
 
-
-
-struct pipe_context *brw_create_context( struct pipe_screen *screen,
-                                        void *priv )
-{
-   struct brw_context *brw = (struct brw_context *) CALLOC_STRUCT(brw_context);
-
-   if (!brw) {
-      debug_printf("%s: failed to alloc context\n", __FUNCTION__);
-      return GL_FALSE;
-   }
-
-   /* We want the GLSL compiler to emit code that uses condition codes */
-   ctx->Shader.EmitCondCodes = GL_TRUE;
-   ctx->Shader.EmitNVTempInitialization = GL_TRUE;
-
-
-   brw_init_query( brw );
-   brw_init_state( brw );
-   brw_draw_init( brw );
-
-   brw->state.dirty.mesa = ~0;
-   brw->state.dirty.brw = ~0;
-
-   brw->emit_state_always = 0;
-
-   make_empty_list(&brw->query.active_head);
-
-
-   return GL_TRUE;
-}
-
-/**
- * called from intelDestroyContext()
- */
-static void brw_destroy_context( struct brw_context *brw )
+static void brw_destroy_context( struct pipe_context *pipe )
 {
+   struct brw_context *brw = brw_context(pipe);
    int i;
 
    brw_destroy_state(brw);
-   brw_draw_destroy( brw );
 
-   _mesa_free(brw->wm.compile_data);
+   brw_draw_cleanup( brw );
+
+   FREE(brw->wm.compile_data);
 
-   for (i = 0; i < brw->state.nr_color_regions; i++)
-      intel_region_release(&brw->state.color_regions[i]);
-   brw->state.nr_color_regions = 0;
-   intel_region_release(&brw->state.depth_region);
+   for (i = 0; i < brw->curr.fb.nr_cbufs; i++)
+      pipe_surface_reference(&brw->curr.fb.cbufs[i], NULL);
+   brw->curr.fb.nr_cbufs = 0;
+   pipe_surface_reference(&brw->curr.fb.zsbuf, NULL);
 
    brw->sws->bo_unreference(brw->curbe.curbe_bo);
    brw->sws->bo_unreference(brw->vs.prog_bo);
@@ -114,3 +81,35 @@ static void brw_destroy_context( struct brw_context *brw )
    brw->sws->bo_unreference(brw->cc.state_bo);
    brw->sws->bo_unreference(brw->cc.vp_bo);
 }
+
+
+struct pipe_context *brw_create_context(struct pipe_screen *screen)
+{
+   struct brw_context *brw = (struct brw_context *) CALLOC_STRUCT(brw_context);
+
+   if (!brw) {
+      debug_printf("%s: failed to alloc context\n", __FUNCTION__);
+      return GL_FALSE;
+   }
+
+   /* We want the GLSL compiler to emit code that uses condition codes */
+   //ctx->Shader.EmitCondCodes = GL_TRUE;
+   //ctx->Shader.EmitNVTempInitialization = GL_TRUE;
+
+   brw->base.destroy = brw_destroy_context;
+
+   brw_init_query( brw );
+   brw_init_state( brw );
+   brw_draw_init( brw );
+
+   brw->state.dirty.mesa = ~0;
+   brw->state.dirty.brw = ~0;
+
+   brw->emit_state_always = 0;
+
+   make_empty_list(&brw->query.active_head);
+
+
+   return &brw->base;
+}
+
index 3a2fece45c60b38dd145efd56aac0aa23a167576..dd782fdba9ef30df682f6e33d6bce6fb4326c674 100644 (file)
@@ -35,6 +35,7 @@
 
 #include "brw_structs.h"
 #include "brw_winsys.h"
+#include "brw_reg.h"
 #include "pipe/p_state.h"
 #include "pipe/p_context.h"
 #include "tgsi/tgsi_scan.h"
@@ -178,8 +179,8 @@ struct brw_fragment_shader {
 #define PIPE_NEW_VERTEX_ELEMENT         0x2
 #define PIPE_NEW_FRAGMENT_SHADER        0x2
 #define PIPE_NEW_VERTEX_SHADER          0x2
-#define PIPE_NEW_FRAGMENT_CONSTS        0x2
-#define PIPE_NEW_VERTEX_CONSTS          0x2
+#define PIPE_NEW_FRAGMENT_CONSTANTS     0x2
+#define PIPE_NEW_VERTEX_CONSTANTS       0x2
 #define PIPE_NEW_CLIP                   0x2
 
 
@@ -256,12 +257,8 @@ struct brw_sf_prog_data {
    GLuint urb_entry_size;
 };
 
-struct brw_clip_prog_data {
-   GLuint curb_read_length;    /* user planes? */
-   GLuint clip_mode;
-   GLuint urb_read_length;
-   GLuint total_grf;
-};
+
+struct brw_clip_prog_data;
 
 struct brw_gs_prog_data {
    GLuint urb_read_length;
@@ -298,15 +295,15 @@ struct brw_vs_ouput_sizes {
  * This contains pointers to the drawing surfaces and current texture
  * objects and shader constant buffers (+2).
  */
-#define BRW_WM_MAX_SURF (MAX_DRAW_BUFFERS + BRW_MAX_TEX_UNIT + 1)
+#define BRW_WM_MAX_SURF (PIPE_MAX_COLOR_BUFS + BRW_MAX_TEX_UNIT + 1)
 
 /**
  * Helpers to convert drawing buffers, textures and constant buffers
  * to surface binding table indexes, for WM.
  */
 #define SURF_INDEX_DRAW(d)           (d)
-#define SURF_INDEX_FRAG_CONST_BUFFER (MAX_DRAW_BUFFERS) 
-#define SURF_INDEX_TEXTURE(t)        (MAX_DRAW_BUFFERS + 1 + (t))
+#define SURF_INDEX_FRAG_CONST_BUFFER (PIPE_MAX_COLOR_BUFS) 
+#define SURF_INDEX_TEXTURE(t)        (PIPE_MAX_COLOR_BUFS + 1 + (t))
 
 /**
  * Size of surface binding table for the VS.
@@ -457,28 +454,32 @@ struct brw_query_object {
  */
 struct brw_context 
 {
-   struct pipe_context pipe;
+   struct pipe_context base;
+   struct brw_chipset chipset;
 
    struct brw_screen *brw_screen;   
    struct brw_winsys_screen *sws;
 
+   struct brw_batchbuffer *batch;
+
    GLuint primitive;
    GLuint reduced_primitive;
 
    GLboolean emit_state_always;
-   GLboolean no_batch_wrap;
 
    /* Active vertex program: 
     */
    struct {
-      const struct brw_vertex_shader *vs;
-      const struct brw_fragment_shader *fs;
+      const struct brw_vertex_shader *vertex_shader;
+      const struct brw_fragment_shader *fragment_shader;
       const struct brw_blend_state *blend;
       const struct brw_rasterizer_state *rast;
-      const struct brw_depth_stencil_alpha_state *dsa;
+      const struct brw_depth_stencil_alpha_state *zstencil;
       struct pipe_framebuffer_state fb;
       struct pipe_viewport_state vp;
       struct pipe_clip_state ucp;
+      struct pipe_buffer *vertex_constants;
+      struct pipe_buffer *fragment_constants;
    } curr;
 
    struct {
@@ -673,15 +674,6 @@ struct brw_context
 };
 
 
-#define BRW_PACKCOLOR8888(r,g,b,a)  ((r<<24) | (g<<16) | (b<<8) | a)
-
-
-
-/*======================================================================
- * brw_vtbl.c
- */
-void brwInitVtbl( struct brw_context *brw );
-
 
 /*======================================================================
  * brw_queryobj.c
@@ -730,9 +722,10 @@ brw_context( struct pipe_context *ctx )
 }
 
 
+#define BRW_IS_965(brw)    ((brw)->chipset.is_965)
+#define BRW_IS_IGDNG(brw)  ((brw)->chipset.is_igdng)
+#define BRW_IS_G4X(brw)    ((brw)->chipset.is_g4x)
 
 
-#define DO_SETUP_BITS ((1<<(FRAG_ATTRIB_MAX)) - 1)
-
 #endif
 
index f2524d75e2cf1680b1a49d8e6bfe7a85672cd7c6..edc39ff2236fd0be8de9fb1ce5b0a64ab51030a2 100644 (file)
   *   Keith Whitwell <keith@tungstengraphics.com>
   */
 
+#include "util/u_memory.h"
+#include "util/u_math.h"
 
 #include "brw_batchbuffer.h"
-#include "intel_regions.h"
 #include "brw_context.h"
 #include "brw_defines.h"
 #include "brw_state.h"
 #include "brw_util.h"
+#include "brw_debug.h"
+#include "brw_screen.h"
 
 
 /**
@@ -57,7 +60,7 @@ static void calculate_curbe_offsets( struct brw_context *brw )
 
    /* PIPE_NEW_CLIP */
    if (brw->curr.ucp.nr) {
-      GLuint nr_planes = 6 + brw->nr_ucp;
+      GLuint nr_planes = 6 + brw->curr.ucp.nr;
       nr_clip_regs = (nr_planes * 4 + 15) / 16;
    }
 
@@ -156,10 +159,6 @@ static GLfloat fixed_plane[6][4] = {
  */
 static void prepare_constant_buffer(struct brw_context *brw)
 {
-   const struct brw_vertex_program *vp =
-      brw_vertex_program_const(brw->vertex_program);
-   const struct brw_fragment_program *fp =
-      brw_fragment_program_const(brw->fragment_program);
    const GLuint sz = brw->curbe.total_size;
    const GLuint bufsz = sz * 16 * sizeof(GLfloat);
    GLfloat *buf;
@@ -174,7 +173,7 @@ static void prepare_constant_buffer(struct brw_context *brw)
       return;
    }
 
-   buf = (GLfloat *) _mesa_calloc(bufsz);
+   buf = (GLfloat *) CALLOC(bufsz, 1);
 
    /* fragment shader constants */
    if (brw->curbe.wm_size) {
@@ -208,12 +207,12 @@ static void prepare_constant_buffer(struct brw_context *brw)
 
       /* Clip planes:
        */
-      assert(brw->nr_ucp <= 6);
-      for (j = 0; j < brw->nr_ucp; j++) {
-        buf[offset + i * 4 + 0] = brw->ucp[j][0];
-        buf[offset + i * 4 + 1] = brw->ucp[j][1];
-        buf[offset + i * 4 + 2] = brw->ucp[j][2];
-        buf[offset + i * 4 + 3] = brw->ucp[j][3];
+      assert(brw->curr.ucp.nr <= 6);
+      for (j = 0; j < brw->curr.ucp.nr; j++) {
+        buf[offset + i * 4 + 0] = brw->curr.ucp.ucp[j][0];
+        buf[offset + i * 4 + 1] = brw->curr.ucp.ucp[j][1];
+        buf[offset + i * 4 + 2] = brw->curr.ucp.ucp[j][2];
+        buf[offset + i * 4 + 3] = brw->curr.ucp.ucp[j][3];
         i++;
       }
    }
@@ -221,23 +220,21 @@ static void prepare_constant_buffer(struct brw_context *brw)
    /* vertex shader constants */
    if (brw->curbe.vs_size) {
       GLuint offset = brw->curbe.vs_start * 16;
-      GLuint nr = brw->vs.prog_data->nr_params / 4;
+      GLuint nr = brw->curr.vertex_shader->info.file_max[TGSI_FILE_CONSTANT];
+      struct pipe_screen *screen = &brw->brw_screen->base;
 
-      /* map vs constant buffer */
+      const GLfloat *value = screen->buffer_map( screen,
+                                                brw->curr.vertex_constants,
+                                                PIPE_BUFFER_USAGE_CPU_READ);
 
-      /* XXX just use a memcpy here */
-      for (i = 0; i < nr; i++) {
-         const GLfloat *value = vp->program.Base.Parameters->ParameterValues[i];
-        buf[offset + i * 4 + 0] = value[0];
-        buf[offset + i * 4 + 1] = value[1];
-        buf[offset + i * 4 + 2] = value[2];
-        buf[offset + i * 4 + 3] = value[3];
-      }
+      /* XXX: what if user's constant buffer is too small?
+       */
+      memcpy(&buf[offset], value, nr * 4 * sizeof(float));
 
-      /* unmap vs constant buffer */
+      screen->buffer_unmap( screen, brw->curr.vertex_constants );
    }
 
-   if (0) {
+   if (BRW_DEBUG & DEBUG_CURBE) {
       for (i = 0; i < sz*16; i+=4) 
         debug_printf("curbe %d.%d: %f %f %f %f\n", i/8, i&4,
                      buf[i+0], buf[i+1], buf[i+2], buf[i+3]);
@@ -275,18 +272,22 @@ static void prepare_constant_buffer(struct brw_context *brw)
         /* Allocate a single page for CURBE entries for this batchbuffer.
          * They're generally around 64b.
          */
-        brw->curbe.curbe_bo = dri_bo_alloc(brw->intel.bufmgr, "CURBE",
-                                           4096, 1 << 6);
+        brw->curbe.curbe_bo = brw->sws->bo_alloc(brw->sws, 
+                                                 BRW_BUFFER_TYPE_CURBE,
+                                                 4096, 1 << 6);
         brw->curbe.curbe_next_offset = 0;
       }
 
       brw->curbe.curbe_offset = brw->curbe.curbe_next_offset;
       brw->curbe.curbe_next_offset += bufsz;
-      brw->curbe.curbe_next_offset = ALIGN(brw->curbe.curbe_next_offset, 64);
+      brw->curbe.curbe_next_offset = align(brw->curbe.curbe_next_offset, 64);
 
       /* Copy data to the buffer:
        */
-      dri_bo_subdata(brw->curbe.curbe_bo, brw->curbe.curbe_offset, bufsz, buf);
+      brw->sws->bo_subdata(brw->curbe.curbe_bo,
+                          brw->curbe.curbe_offset,
+                          bufsz,
+                          buf);
    }
 
    brw_add_validated_bo(brw, brw->curbe.curbe_bo);
@@ -325,8 +326,8 @@ static void emit_constant_buffer(struct brw_context *brw)
 
 const struct brw_tracked_state brw_constant_buffer = {
    .dirty = {
-      .mesa = (PIPE_NEW_FS_CONSTANTS |
-              PIPE_NEW_VS_CONSTANTS |
+      .mesa = (PIPE_NEW_FRAGMENT_CONSTANTS |
+              PIPE_NEW_VERTEX_CONSTANTS |
               PIPE_NEW_CLIP),
       .brw  = (BRW_NEW_FRAGMENT_PROGRAM |
               BRW_NEW_VERTEX_PROGRAM |
diff --git a/src/gallium/drivers/i965/brw_debug.h b/src/gallium/drivers/i965/brw_debug.h
new file mode 100644 (file)
index 0000000..aee62f7
--- /dev/null
@@ -0,0 +1,42 @@
+#ifndef BRW_DEBUG_H
+#define BRW_DEBUG_H
+
+/* ================================================================
+ * Debugging:
+ */
+
+#define DEBUG_TEXTURE          0x1
+#define DEBUG_STATE            0x2
+#define DEBUG_IOCTL            0x4
+#define DEBUG_BLIT             0x8
+#define DEBUG_CURBE             0x10
+#define DEBUG_FALLBACKS                0x20
+#define DEBUG_VERBOSE          0x40
+#define DEBUG_BATCH             0x80
+#define DEBUG_PIXEL             0x100
+#define DEBUG_BUFMGR            0x200
+#define DEBUG_unused1           0x400
+#define DEBUG_unused2           0x800
+#define DEBUG_unused3           0x1000
+#define DEBUG_SYNC             0x2000
+#define DEBUG_PRIMS            0x4000
+#define DEBUG_VERTS            0x8000
+#define DEBUG_unused4           0x10000
+#define DEBUG_DMA               0x20000
+#define DEBUG_SANITY            0x40000
+#define DEBUG_SLEEP             0x80000
+#define DEBUG_STATS             0x100000
+#define DEBUG_unused5           0x200000
+#define DEBUG_SINGLE_THREAD     0x400000
+#define DEBUG_WM                0x800000
+#define DEBUG_URB               0x1000000
+#define DEBUG_VS                0x2000000
+
+#ifdef DEBUG
+extern int BRW_DEBUG;
+#else
+#define BRW_DEBUG 0
+#endif
+
+
+#endif
index 1dc64ddc8fa82166b611774ba81a2e78fb8465e0..544d36306cdb20a3cf55290c2df087b7c11cb93c 100644 (file)
 #define R02_PRIM_END    0x1
 #define R02_PRIM_START  0x2
 
-#include "intel_chipset.h"
-
-#define BRW_IS_G4X(brw)         (IS_G4X((brw)->brw_screen->pci_id))
-#define BRW_IS_IGDNG(brw)         (IS_IGDNG((brw)->brw_screen->pci_id))
-#define BRW_IS_965(brw)         (!(BRW_IS_G4X(brw) || BRW_IS_IGDNG(brw)))
-#define CMD_PIPELINE_SELECT(brw)        ((BRW_IS_G4X(brw) || BRW_IS_IGDNG(brw)) ? CMD_PIPELINE_SELECT_GM45 : CMD_PIPELINE_SELECT_965)
-#define CMD_VF_STATISTICS(brw)          ((BRW_IS_G4X(brw) || BRW_IS_IGDNG(brw)) ? CMD_VF_STATISTICS_GM45 : CMD_VF_STATISTICS_965)
 #define URB_SIZES(brw)                  (BRW_IS_IGDNG(brw) ? 1024 : \
                                          (BRW_IS_G4X(brw) ? 384 : 256))  /* 512 bit units */
 
index 741537309ad8610fec9c7bb65b1be60469657ccb..7af490bc5ae4530bba2cd55555034f10137693bc 100644 (file)
@@ -30,9 +30,9 @@
 #include "brw_defines.h"
 #include "brw_context.h"
 #include "brw_state.h"
+#include "brw_debug.h"
 
 #include "brw_batchbuffer.h"
-#include "intel_buffer_objects.h"
 
 #define FILE_DEBUG_FLAG DEBUG_BATCH
 
@@ -56,26 +56,18 @@ static uint32_t prim_to_hw_prim[PIPE_PRIM_POLYGON+1] = {
  * programs be immune to the active primitive (ie. cope with all
  * possibilities).  That may not be realistic however.
  */
-static GLuint brw_set_prim(struct brw_context *brw, GLenum prim)
+static GLuint brw_set_prim(struct brw_context *brw, unsigned prim)
 {
 
-   if (INTEL_DEBUG & DEBUG_PRIMS)
-      _mesa_printf("PRIM: %s\n", _mesa_lookup_enum_by_nr(prim));
+   if (BRW_DEBUG & DEBUG_PRIMS)
+      debug_printf("PRIM: %s\n", u_prim_name(prim));
    
-   /* Slight optimization to avoid the GS program when not needed:
-    */
-   if (prim == GL_QUAD_STRIP &&
-       ctx->Light.ShadeModel != GL_FLAT &&
-       ctx->Polygon.FrontMode == GL_FILL &&
-       ctx->Polygon.BackMode == GL_FILL)
-      prim = GL_TRIANGLE_STRIP;
-
    if (prim != brw->primitive) {
       brw->primitive = prim;
       brw->state.dirty.brw |= BRW_NEW_PRIMITIVE;
 
-      if (reduced_prim[prim] != brw->intel.reduced_primitive) {
-        brw->intel.reduced_primitive = reduced_prim[prim];
+      if (reduced_prim[prim] != brw->reduced_primitive) {
+        brw->reduced_primitive = reduced_prim[prim];
         brw->state.dirty.brw |= BRW_NEW_REDUCED_PRIMITIVE;
       }
    }
@@ -84,43 +76,33 @@ static GLuint brw_set_prim(struct brw_context *brw, GLenum prim)
 }
 
 
-static GLuint trim(GLenum prim, GLuint length)
-{
-   if (prim == GL_QUAD_STRIP)
-      return length > 3 ? (length - length % 2) : 0;
-   else if (prim == GL_QUADS)
-      return length - length % 4;
-   else 
-      return length;
-}
-
 
-static void brw_emit_prim(struct brw_context *brw,
-                         const struct _mesa_prim *prim,
-                         uint32_t hw_prim)
+static enum pipe_error brw_emit_prim(struct brw_context *brw,
+                                    unsigned prim,
+                                    unsigned start,
+                                    unsigned count,
+                                    boolean indexed,
+                                    uint32_t hw_prim)
 {
    struct brw_3d_primitive prim_packet;
 
    if (INTEL_DEBUG & DEBUG_PRIMS)
-      _mesa_printf("PRIM: %s %d %d\n", _mesa_lookup_enum_by_nr(prim->mode), 
-                  prim->start, prim->count);
+      debug_printf("PRIM: %s %d %d\n", u_prim_name(prim), start, count);
 
    prim_packet.header.opcode = CMD_3D_PRIM;
    prim_packet.header.length = sizeof(prim_packet)/4 - 2;
    prim_packet.header.pad = 0;
    prim_packet.header.topology = hw_prim;
-   prim_packet.header.indexed = prim->indexed;
+   prim_packet.header.indexed = indexed;
 
-   prim_packet.verts_per_instance = trim(prim->mode, prim->count);
-   prim_packet.start_vert_location = prim->start;
-   if (prim->indexed)
+   prim_packet.verts_per_instance = count;
+   prim_packet.start_vert_location = start;
+   if (indexed)
       prim_packet.start_vert_location += brw->ib.start_vertex_offset;
    prim_packet.instance_count = 1;
    prim_packet.start_instance_location = 0;
    prim_packet.base_vert_location = prim->basevertex;
 
-   /* Can't wrap here, since we rely on the validated state. */
-   brw->no_batch_wrap = GL_TRUE;
 
    /* If we're set to always flush, do it before and after the primitive emit.
     * We want to catch both missed flushes that hurt instruction/state cache
@@ -128,13 +110,15 @@ static void brw_emit_prim(struct brw_context *brw,
     * the besides the draw code.
     */
    if (intel->always_flush_cache) {
-      BEGIN_BATCH(1, IGNORE_CLIPRECTS);
+      BEGIN_BATCH(1, IGNORE_CLIPRECTS)
       OUT_BATCH(intel->vtbl.flush_cmd());
       ADVANCE_BATCH();
    }
    if (prim_packet.verts_per_instance) {
-      brw_batchbuffer_data( brw->intel.batch, &prim_packet,
-                             sizeof(prim_packet), LOOP_CLIPRECTS);
+      ret = brw_batchbuffer_data( brw->intel.batch, &prim_packet,
+                                 sizeof(prim_packet), LOOP_CLIPRECTS);
+      if (ret)
+        return ret;
    }
    if (intel->always_flush_cache) {
       BEGIN_BATCH(1, IGNORE_CLIPRECTS);
@@ -142,34 +126,9 @@ static void brw_emit_prim(struct brw_context *brw,
       ADVANCE_BATCH();
    }
 
-   brw->no_batch_wrap = GL_FALSE;
+   return 0;
 }
 
-static void brw_merge_inputs( struct brw_context *brw,
-                      const struct gl_client_array *arrays[])
-{
-   struct brw_vertex_info old = brw->vb.info;
-   GLuint i;
-
-   for (i = 0; i < VERT_ATTRIB_MAX; i++)
-      brw->sws->bo_unreference(brw->vb.inputs[i].bo);
-
-   memset(&brw->vb.inputs, 0, sizeof(brw->vb.inputs));
-   memset(&brw->vb.info, 0, sizeof(brw->vb.info));
-
-   for (i = 0; i < VERT_ATTRIB_MAX; i++) {
-      brw->vb.inputs[i].glarray = arrays[i];
-      brw->vb.inputs[i].attrib = (gl_vert_attrib) i;
-
-      if (arrays[i]->StrideB != 0)
-        brw->vb.info.sizes[i/16] |= (brw->vb.inputs[i].glarray->Size - 1) <<
-           ((i%16) * 2);
-   }
-
-   /* Raise statechanges if input sizes have changed. */
-   if (memcmp(brw->vb.info.sizes, old.sizes, sizeof(old.sizes)) != 0)
-      brw->state.dirty.brw |= BRW_NEW_INPUT_DIMENSIONS;
-}
 
 /* May fail if out of video memory for texture or vbo upload, or on
  * fallback conditions.
@@ -229,14 +188,14 @@ static GLboolean brw_try_draw_prims( struct brw_context *brw,
    return 0;
 }
 
-void brw_draw_prims( struct brw_context *brw,
-                    const struct gl_client_array *arrays[],
-                    const struct _mesa_prim *prim,
-                    GLuint nr_prims,
-                    const struct _mesa_index_buffer *ib,
-                    GLboolean index_bounds_valid,
-                    GLuint min_index,
-                    GLuint max_index )
+
+static boolean
+brw_draw_range_elements(struct pipe_context *pipe,
+                       struct pipe_buffer *index_buffer,
+                       unsigned index_size,
+                       unsigned min_index,
+                       unsigned max_index,
+                       unsigned mode, unsigned start, unsigned count)
 {
    enum pipe_error ret;
 
@@ -256,15 +215,40 @@ void brw_draw_prims( struct brw_context *brw,
       ret = brw_try_draw_prims(ctx, arrays, prim, nr_prims, ib, min_index, max_index);
       assert(ret == 0);
    }
+
+   return TRUE;
 }
 
-void brw_draw_init( struct brw_context *brw )
+static boolean
+brw_draw_elements(struct pipe_context *pipe,
+                 struct pipe_buffer *index_buffer,
+                 unsigned index_size,
+                 unsigned mode, 
+                 unsigned start, unsigned count)
 {
-   struct vbo_context *vbo = vbo_context(ctx);
+   return brw_draw_range_elements( pipe, index_buffer,
+                                  index_size,
+                                  0, 0xffffffff,
+                                  mode, 
+                                  start, count );
+}
 
+static boolean
+brw_draw_arrays(struct pipe_context *pipe, unsigned mode,
+                     unsigned start, unsigned count)
+{
+   return brw_draw_elements(pipe, NULL, 0, mode, start, count);
+}
+
+
+
+void brw_draw_init( struct brw_context *brw )
+{
    /* Register our drawing function: 
     */
-   vbo->draw_prims = brw_draw_prims;
+   brw->base.draw_arrays = brw_draw_arrays;
+   brw->base.draw_elements = brw_draw_elements;
+   brw->base.draw_range_elements = brw_draw_range_elements;
 }
 
 void brw_draw_destroy( struct brw_context *brw )
index dc7ca8731df6e42a7fc74964dda1dd786479185d..13f0443a817e55c3454e68d2662a12dfd300922e 100644 (file)
 struct brw_context;
 
 
-void brw_draw_prims( struct brw_context *brw,
-                    const struct gl_client_array *arrays[],
-                    const struct _mesa_prim *prims,
-                    GLuint nr_prims,
-                    const struct _mesa_index_buffer *ib,
-                    GLboolean index_bounds_valid,
-                    GLuint min_index,
-                    GLuint max_index );
-
 void brw_draw_init( struct brw_context *brw );
-void brw_draw_destroy( struct brw_context *brw );
+void brw_draw_cleanup( struct brw_context *brw );
 
-/* brw_draw_current.c
- */
-void brw_init_current_values(struct brw_context *brw,
-                            struct gl_client_array *arrays);
 
 #endif
index 1ab65d60c4188d94e2ee54be218aff4c7bd90fe6..7b0860d04c3fb0eabc7d593bf3503a32b230bf3a 100644 (file)
@@ -36,8 +36,6 @@
 #include "brw_fallback.h"
 
 #include "brw_batchbuffer.h"
-#include "intel_buffer_objects.h"
-#include "intel_tex.h"
 
 
 
index 46d52a473b6be9b06e2b82a198168af975db0e19..ac5a623cac6a0557bbd839364bc9efdb756ff75e 100644 (file)
@@ -33,6 +33,8 @@
 #ifndef BRW_EU_H
 #define BRW_EU_H
 
+#include "util/u_debug.h"
+
 #include "brw_structs.h"
 #include "brw_defines.h"
 
index eb39be85454b46bedd790ee7795b0dab171bb20b..0f2612c181781ac03590b1f08e06201e216e9bad 100644 (file)
@@ -32,8 +32,6 @@
 
 
 #include "brw_batchbuffer.h"
-#include "intel_regions.h"
-
 #include "brw_context.h"
 #include "brw_state.h"
 #include "brw_defines.h"
diff --git a/src/gallium/drivers/i965/brw_pipe_debug.c b/src/gallium/drivers/i965/brw_pipe_debug.c
deleted file mode 100644 (file)
index 34d6d40..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-   if (INTEL_DEBUG & DEBUG_STATS)
-      cc.cc5.statistics_enable = 1;
index 55242ac6adf051fa763d5689991e46ffdd880326..a2da1373bfd3c14be41875fdbc7dd70035016c8d 100644 (file)
@@ -43,7 +43,7 @@
 #include "brw_context.h"
 #include "brw_state.h"
 #include "brw_batchbuffer.h"
-#include "intel_reg.h"
+#include "brw_reg.h"
 
 /** Waits on the query object's BO and totals the results for this query */
 static void
@@ -165,7 +165,7 @@ brw_prepare_query_begin(struct brw_context *brw)
       brw->sws->bo_unreference(brw->query.bo);
       brw->query.bo = NULL;
 
-      brw->query.bo = dri_bo_alloc(brw->bufmgr, "query", 4096, 1);
+      brw->query.bo = brw->sws->bo_alloc(brw->sws, BRW_BUFFER_TYPE_QUERY, 4096, 1);
       brw->query.index = 0;
    }
 
diff --git a/src/gallium/drivers/i965/brw_pipe_vertex.c b/src/gallium/drivers/i965/brw_pipe_vertex.c
new file mode 100644 (file)
index 0000000..b0928ad
--- /dev/null
@@ -0,0 +1,26 @@
+
+static void brw_merge_inputs( struct brw_context *brw,
+                      const struct gl_client_array *arrays[])
+{
+   struct brw_vertex_info old = brw->vb.info;
+   GLuint i;
+
+   for (i = 0; i < VERT_ATTRIB_MAX; i++)
+      brw->sws->bo_unreference(brw->vb.inputs[i].bo);
+
+   memset(&brw->vb.inputs, 0, sizeof(brw->vb.inputs));
+   memset(&brw->vb.info, 0, sizeof(brw->vb.info));
+
+   for (i = 0; i < VERT_ATTRIB_MAX; i++) {
+      brw->vb.inputs[i].glarray = arrays[i];
+      brw->vb.inputs[i].attrib = (gl_vert_attrib) i;
+
+      if (arrays[i]->StrideB != 0)
+        brw->vb.info.sizes[i/16] |= (brw->vb.inputs[i].glarray->Size - 1) <<
+           ((i%16) * 2);
+   }
+
+   /* Raise statechanges if input sizes have changed. */
+   if (memcmp(brw->vb.info.sizes, old.sizes, sizeof(old.sizes)) != 0)
+      brw->state.dirty.brw |= BRW_NEW_INPUT_DIMENSIONS;
+}
index a640104d71b279c5a9e4401e3be45588172301bc..f428ec92696ad1fd55c3b47d4f9ef8711895f38c 100644 (file)
 #define FENCE_YMAJOR 2
 
 
+
+/* PCI IDs
+ */
+#define PCI_CHIP_I965_G                        0x29A2
+#define PCI_CHIP_I965_Q                        0x2992
+#define PCI_CHIP_I965_G_1              0x2982
+#define PCI_CHIP_I946_GZ               0x2972
+#define PCI_CHIP_I965_GM                0x2A02
+#define PCI_CHIP_I965_GME               0x2A12
+
+#define PCI_CHIP_GM45_GM                0x2A42
+
+#define PCI_CHIP_IGD_E_G                0x2E02
+#define PCI_CHIP_Q45_G                  0x2E12
+#define PCI_CHIP_G45_G                  0x2E22
+#define PCI_CHIP_G41_G                  0x2E32
+#define PCI_CHIP_B43_G                  0x2E42
+
+#define PCI_CHIP_ILD_G                  0x0042
+#define PCI_CHIP_ILM_G                  0x0046
+
+struct brw_chipset {
+   int pci_id:16;
+   int is_965:1;
+   int is_igdng:1;
+   int is_g4x:1;
+   int pad:13;
+};
+
+
+/* XXX: hacks
+ */
+#define VERT_RESULT_HPOS 0     /* not always true */
+#define VERT_RESULT_PSIZ 10000 /* disabled */
+
+
 #endif
diff --git a/src/gallium/drivers/i965/brw_screen.c b/src/gallium/drivers/i965/brw_screen.c
new file mode 100644 (file)
index 0000000..6714679
--- /dev/null
@@ -0,0 +1,365 @@
+/**************************************************************************
+ * 
+ * Copyright 2008 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 "pipe/p_inlines.h"
+#include "util/u_memory.h"
+#include "util/u_string.h"
+
+#include "brw_reg.h"
+#include "brw_context.h"
+#include "brw_screen.h"
+#include "brw_buffer.h"
+#include "brw_texture.h"
+#include "brw_winsys.h"
+
+#ifdef DEBUG
+static const struct debug_named_value debug_names[] = {
+   { "tex",   DEBUG_TEXTURE},
+   { "state", DEBUG_STATE},
+   { "ioctl", DEBUG_IOCTL},
+   { "blit",  DEBUG_BLIT},
+   { "curbe", DEBUG_CURBE},
+   { "fall",  DEBUG_FALLBACKS},
+   { "verb",  DEBUG_VERBOSE},
+   { "bat",   DEBUG_BATCH},
+   { "pix",   DEBUG_PIXEL},
+   { "buf",   DEBUG_BUFMGR},
+   { "reg",   DEBUG_REGION},
+   { "fbo",   DEBUG_FBO},
+   { "lock",  DEBUG_LOCK},
+   { "sync",  DEBUG_SYNC},
+   { "prim",  DEBUG_PRIMS },
+   { "vert",  DEBUG_VERTS },
+   { "dri",   DEBUG_DRI },
+   { "dma",   DEBUG_DMA },
+   { "san",   DEBUG_SANITY },
+   { "sleep", DEBUG_SLEEP },
+   { "stats", DEBUG_STATS },
+   { "tile",  DEBUG_TILE },
+   { "sing",  DEBUG_SINGLE_THREAD },
+   { "thre",  DEBUG_SINGLE_THREAD },
+   { "wm",    DEBUG_WM },
+   { "urb",   DEBUG_URB },
+   { "vs",    DEBUG_VS },
+   { NULL,    0 }
+};
+
+int BRW_DEBUG = 0;
+#endif
+
+
+/*
+ * Probe functions
+ */
+
+
+static const char *
+brw_get_vendor(struct pipe_screen *screen)
+{
+   return "VMware, Inc.";
+}
+
+static const char *
+brw_get_name(struct pipe_screen *screen)
+{
+   static char buffer[128];
+   const char *chipset;
+
+   switch (brw_screen(screen)->pci_id) {
+   case PCI_CHIP_I965_G:
+      chipset = "I965_G";
+      break;
+   case PCI_CHIP_I965_Q:
+      chipset = "I965_Q";
+      break;
+   case PCI_CHIP_I965_G_1:
+      chipset = "I965_G_1";
+      break;
+   case PCI_CHIP_I946_GZ:
+      chipset = "I946_GZ";
+      break;
+   case PCI_CHIP_I965_GM:
+      chipset = "I965_GM";
+      break;
+   case PCI_CHIP_I965_GME:
+      chipset = "I965_GME";
+      break;
+   case PCI_CHIP_GM45_GM:
+      chipset = "GM45_GM";
+      break;
+   case PCI_CHIP_IGD_E_G:
+      chipset = "IGD_E_G";
+      break;
+   case PCI_CHIP_Q45_G:
+      chipset = "Q45_G";
+      break;
+   case PCI_CHIP_G45_G:
+      chipset = "G45_G";
+      break;
+   case PCI_CHIP_G41_G:
+      chipset = "G41_G";
+      break;
+   case PCI_CHIP_B43_G:
+      chipset = "B43_G";
+      break;
+   case PCI_CHIP_ILD_G:
+      chipset = "ILD_G";
+      break;
+   case PCI_CHIP_ILM_G:
+      chipset = "ILM_G";
+      break;
+   }
+
+   util_snprintf(buffer, sizeof(buffer), "i965 (chipset: %s)", chipset);
+   return buffer;
+}
+
+static int
+brw_get_param(struct pipe_screen *screen, int param)
+{
+   switch (param) {
+   case PIPE_CAP_MAX_TEXTURE_IMAGE_UNITS:
+      return 8;
+   case PIPE_CAP_NPOT_TEXTURES:
+      return 1;
+   case PIPE_CAP_TWO_SIDED_STENCIL:
+      return 1;
+   case PIPE_CAP_GLSL:
+      return 0;
+   case PIPE_CAP_ANISOTROPIC_FILTER:
+      return 0;
+   case PIPE_CAP_POINT_SPRITE:
+      return 0;
+   case PIPE_CAP_MAX_RENDER_TARGETS:
+      return 1;
+   case PIPE_CAP_OCCLUSION_QUERY:
+      return 0;
+   case PIPE_CAP_TEXTURE_SHADOW_MAP:
+      return 1;
+   case PIPE_CAP_MAX_TEXTURE_2D_LEVELS:
+      return 11; /* max 1024x1024 */
+   case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
+      return 8;  /* max 128x128x128 */
+   case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
+      return 11; /* max 1024x1024 */
+   default:
+      return 0;
+   }
+}
+
+static float
+brw_get_paramf(struct pipe_screen *screen, int param)
+{
+   switch (param) {
+   case PIPE_CAP_MAX_LINE_WIDTH:
+      /* fall-through */
+   case PIPE_CAP_MAX_LINE_WIDTH_AA:
+      return 7.5;
+
+   case PIPE_CAP_MAX_POINT_WIDTH:
+      /* fall-through */
+   case PIPE_CAP_MAX_POINT_WIDTH_AA:
+      return 255.0;
+
+   case PIPE_CAP_MAX_TEXTURE_ANISOTROPY:
+      return 4.0;
+
+   case PIPE_CAP_MAX_TEXTURE_LOD_BIAS:
+      return 16.0;
+
+   default:
+      return 0;
+   }
+}
+
+static boolean
+brw_is_format_supported(struct pipe_screen *screen,
+                         enum pipe_format format, 
+                         enum pipe_texture_target target,
+                         unsigned tex_usage, 
+                         unsigned geom_flags)
+{
+   static const enum pipe_format tex_supported[] = {
+      PIPE_FORMAT_R8G8B8A8_UNORM,
+      PIPE_FORMAT_A8R8G8B8_UNORM,
+      PIPE_FORMAT_R5G6B5_UNORM,
+      PIPE_FORMAT_L8_UNORM,
+      PIPE_FORMAT_A8_UNORM,
+      PIPE_FORMAT_I8_UNORM,
+      PIPE_FORMAT_A8L8_UNORM,
+      PIPE_FORMAT_YCBCR,
+      PIPE_FORMAT_YCBCR_REV,
+      PIPE_FORMAT_S8Z24_UNORM,
+      PIPE_FORMAT_NONE  /* list terminator */
+   };
+   static const enum pipe_format surface_supported[] = {
+      PIPE_FORMAT_A8R8G8B8_UNORM,
+      PIPE_FORMAT_R5G6B5_UNORM,
+      PIPE_FORMAT_S8Z24_UNORM,
+      PIPE_FORMAT_NONE  /* list terminator */
+   };
+   const enum pipe_format *list;
+   uint i;
+
+   if(tex_usage & PIPE_TEXTURE_USAGE_RENDER_TARGET)
+      list = surface_supported;
+   else
+      list = tex_supported;
+
+   for (i = 0; list[i] != PIPE_FORMAT_NONE; i++) {
+      if (list[i] == format)
+         return TRUE;
+   }
+
+   return FALSE;
+}
+
+
+/*
+ * Fence functions
+ */
+
+
+static void
+brw_fence_reference(struct pipe_screen *screen,
+                     struct pipe_fence_handle **ptr,
+                     struct pipe_fence_handle *fence)
+{
+   struct brw_screen *is = brw_screen(screen);
+
+   is->iws->fence_reference(is->iws, ptr, fence);
+}
+
+static int
+brw_fence_signalled(struct pipe_screen *screen,
+                     struct pipe_fence_handle *fence,
+                     unsigned flags)
+{
+   struct brw_screen *is = brw_screen(screen);
+
+   return is->iws->fence_signalled(is->iws, fence);
+}
+
+static int
+brw_fence_finish(struct pipe_screen *screen,
+                  struct pipe_fence_handle *fence,
+                  unsigned flags)
+{
+   struct brw_screen *is = brw_screen(screen);
+
+   return is->iws->fence_finish(is->iws, fence);
+}
+
+
+/*
+ * Generic functions
+ */
+
+
+static void
+brw_destroy_screen(struct pipe_screen *screen)
+{
+   struct brw_screen *is = brw_screen(screen);
+
+   if (is->iws)
+      is->iws->destroy(is->iws);
+
+   FREE(is);
+}
+
+/**
+ * Create a new brw_screen object
+ */
+struct pipe_screen *
+brw_create_screen(struct intel_winsys *iws, uint pci_id)
+{
+   struct brw_screen *is;
+   struct brw_chipset chipset;
+
+#ifdef DEBUG
+   BRW_DEBUG = debug_get_flags_option("BRW_DEBUG", debug_names, 0);
+   BRW_DEBUG |= debug_get_flags_option("INTEL_DEBUG", debug_names, 0);
+#endif
+
+   memset(&chipset, 0, sizeof chipset);
+
+   chipset.pci_id = pci_id;
+
+   switch (pci_id) {
+   case PCI_CHIP_I965_G:
+   case PCI_CHIP_I965_Q:
+   case PCI_CHIP_I965_G_1:
+   case PCI_CHIP_I946_GZ:
+   case PCI_CHIP_I965_GM:
+   case PCI_CHIP_I965_GME:
+      chipset.is_965 = TRUE;
+      break;
+
+   case PCI_CHIP_GM45_GM:
+   case PCI_CHIP_IGD_E_G:
+   case PCI_CHIP_Q45_G:
+   case PCI_CHIP_G45_G:
+   case PCI_CHIP_G41_G:
+   case PCI_CHIP_B43_G:
+      chipset.is_g4x = TRUE;
+      break;
+
+   case PCI_CHIP_ILD_G:
+   case PCI_CHIP_ILM_G:
+      chipset.is_igdng = TRUE;
+      break;
+
+   default:
+      debug_printf("%s: unknown pci id 0x%x, cannot create screen\n", 
+                   __FUNCTION__, pci_id);
+      return NULL;
+   }
+
+
+   is = CALLOC_STRUCT(brw_screen);
+   if (!is)
+      return NULL;
+
+   is->chipset = chipset;
+   is->iws = iws;
+   is->base.winsys = NULL;
+   is->base.destroy = brw_destroy_screen;
+   is->base.get_name = brw_get_name;
+   is->base.get_vendor = brw_get_vendor;
+   is->base.get_param = brw_get_param;
+   is->base.get_paramf = brw_get_paramf;
+   is->base.is_format_supported = brw_is_format_supported;
+   is->base.fence_reference = brw_fence_reference;
+   is->base.fence_signalled = brw_fence_signalled;
+   is->base.fence_finish = brw_fence_finish;
+
+   brw_screen_init_texture_functions(is);
+   brw_screen_init_buffer_functions(is);
+
+   return &is->base;
+}
index 716b55c52bc44d97dc89252f4db8ee16f9a697fa..79d595d0adf9c31849c8ae7537b8f41aa69e1fcf 100644 (file)
@@ -31,6 +31,7 @@
 #include "pipe/p_state.h"
 #include "pipe/p_screen.h"
 
+#include "brw_reg.h"
 
 struct brw_winsys_screen;
 
@@ -41,11 +42,8 @@ struct brw_winsys_screen;
 struct brw_screen
 {
    struct pipe_screen base;
-
+   struct brw_chipset chipset;
    struct brw_winsys_screen *sws;
-
-   boolean is_i945;
-   uint pci_id;
 };
 
 /**
index 54202cbd12350e3ccc2e6a08c6b721f55ba411d1..53e8f09e372232e5f1b402151e42f4ab528217f5 100644 (file)
@@ -56,7 +56,7 @@ static void compile_sf_prog( struct brw_context *brw,
    c.key = *key;
    c.nr_attrs = util_count_bits(c.key.attrs);
    c.nr_attr_regs = (c.nr_attrs+1)/2;
-   c.nr_setup_attrs = util_count_bits(c.key.attrs & DO_SETUP_BITS);
+   c.nr_setup_attrs = c.key.nr_attrs;
    c.nr_setup_regs = (c.nr_setup_attrs+1)/2;
 
    c.prog_data.urb_read_length = c.nr_attr_regs;
index 5e1229d22f53430af6d31d195880c319b9fec0b8..0e406f12e1443f112ba3ee41640b1a26a78c91c4 100644 (file)
@@ -68,8 +68,7 @@ static void upload_sf_vp(struct brw_context *brw)
     */
 
    /* The scissor only needs to handle the intersection of drawable and
-    * scissor rect.  Clipping to the boundaries of static shared buffers
-    * for front/back/depth is covered by looping over cliprects in brw_draw.c.
+    * scissor rect.
     *
     * Note that the hardware's coordinates are inclusive, while Mesa's min is
     * inclusive but max is exclusive.
index 1b5f27cc1608528d927b19254a51cacbcb0cf645..97f88b3ab3929e9b228d3eeee6bc3fb6255b67d2 100644 (file)
@@ -220,8 +220,8 @@ brw_upload_cache( struct brw_cache *cache,
    int i;
 
    /* Create the buffer object to contain the data */
-   bo = dri_bo_alloc(cache->brw->intel.bufmgr,
-                    cache->name[cache_id], data_size, 1 << 6);
+   bo = brw->sws->bo_alloc(cache->sws,
+                          cache->buffer_type[cache_id], data_size, 1 << 6);
 
 
    /* Set up the memory containing the key, aux_data, and reloc_bufs */
diff --git a/src/gallium/drivers/i965/brw_state_debug.c b/src/gallium/drivers/i965/brw_state_debug.c
new file mode 100644 (file)
index 0000000..812b761
--- /dev/null
@@ -0,0 +1,145 @@
+/*
+ Copyright (C) Intel Corp.  2006.  All Rights Reserved.
+ Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
+ develop this 3D driver.
+ 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, sublicense, 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 NONINFRINGEMENT.
+ IN NO EVENT SHALL THE COPYRIGHT OWNER(S) 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 "brw_context.h"
+#include "brw_state.h"
+
+
+struct dirty_bit_map {
+   uint32_t bit;
+   char *name;
+   uint32_t count;
+};
+
+#define DEFINE_BIT(name) {name, #name, 0}
+
+static struct dirty_bit_map mesa_bits[] = {
+   DEFINE_BIT(_NEW_MODELVIEW),
+   DEFINE_BIT(_NEW_PROJECTION),
+   DEFINE_BIT(_NEW_TEXTURE_MATRIX),
+   DEFINE_BIT(_NEW_COLOR_MATRIX),
+   DEFINE_BIT(_NEW_ACCUM),
+   DEFINE_BIT(_NEW_COLOR),
+   DEFINE_BIT(_NEW_DEPTH),
+   DEFINE_BIT(_NEW_EVAL),
+   DEFINE_BIT(_NEW_FOG),
+   DEFINE_BIT(_NEW_HINT),
+   DEFINE_BIT(_NEW_LIGHT),
+   DEFINE_BIT(_NEW_LINE),
+   DEFINE_BIT(_NEW_PIXEL),
+   DEFINE_BIT(_NEW_POINT),
+   DEFINE_BIT(_NEW_POLYGON),
+   DEFINE_BIT(_NEW_POLYGONSTIPPLE),
+   DEFINE_BIT(_NEW_SCISSOR),
+   DEFINE_BIT(_NEW_STENCIL),
+   DEFINE_BIT(_NEW_TEXTURE),
+   DEFINE_BIT(_NEW_TRANSFORM),
+   DEFINE_BIT(_NEW_VIEWPORT),
+   DEFINE_BIT(_NEW_PACKUNPACK),
+   DEFINE_BIT(_NEW_ARRAY),
+   DEFINE_BIT(_NEW_RENDERMODE),
+   DEFINE_BIT(_NEW_BUFFERS),
+   DEFINE_BIT(_NEW_MULTISAMPLE),
+   DEFINE_BIT(_NEW_TRACK_MATRIX),
+   DEFINE_BIT(_NEW_PROGRAM),
+   DEFINE_BIT(_NEW_PROGRAM_CONSTANTS),
+   {0, 0, 0}
+};
+
+static struct dirty_bit_map brw_bits[] = {
+   DEFINE_BIT(BRW_NEW_URB_FENCE),
+   DEFINE_BIT(BRW_NEW_FRAGMENT_PROGRAM),
+   DEFINE_BIT(BRW_NEW_VERTEX_PROGRAM),
+   DEFINE_BIT(BRW_NEW_INPUT_DIMENSIONS),
+   DEFINE_BIT(BRW_NEW_CURBE_OFFSETS),
+   DEFINE_BIT(BRW_NEW_REDUCED_PRIMITIVE),
+   DEFINE_BIT(BRW_NEW_PRIMITIVE),
+   DEFINE_BIT(BRW_NEW_CONTEXT),
+   DEFINE_BIT(BRW_NEW_WM_INPUT_DIMENSIONS),
+   DEFINE_BIT(BRW_NEW_PSP),
+   DEFINE_BIT(BRW_NEW_FENCE),
+   DEFINE_BIT(BRW_NEW_INDICES),
+   DEFINE_BIT(BRW_NEW_INDEX_BUFFER),
+   DEFINE_BIT(BRW_NEW_VERTICES),
+   DEFINE_BIT(BRW_NEW_BATCH),
+   DEFINE_BIT(BRW_NEW_DEPTH_BUFFER),
+   {0, 0, 0}
+};
+
+static struct dirty_bit_map cache_bits[] = {
+   DEFINE_BIT(CACHE_NEW_CC_VP),
+   DEFINE_BIT(CACHE_NEW_CC_UNIT),
+   DEFINE_BIT(CACHE_NEW_WM_PROG),
+   DEFINE_BIT(CACHE_NEW_SAMPLER_DEFAULT_COLOR),
+   DEFINE_BIT(CACHE_NEW_SAMPLER),
+   DEFINE_BIT(CACHE_NEW_WM_UNIT),
+   DEFINE_BIT(CACHE_NEW_SF_PROG),
+   DEFINE_BIT(CACHE_NEW_SF_VP),
+   DEFINE_BIT(CACHE_NEW_SF_UNIT),
+   DEFINE_BIT(CACHE_NEW_VS_UNIT),
+   DEFINE_BIT(CACHE_NEW_VS_PROG),
+   DEFINE_BIT(CACHE_NEW_GS_UNIT),
+   DEFINE_BIT(CACHE_NEW_GS_PROG),
+   DEFINE_BIT(CACHE_NEW_CLIP_VP),
+   DEFINE_BIT(CACHE_NEW_CLIP_UNIT),
+   DEFINE_BIT(CACHE_NEW_CLIP_PROG),
+   DEFINE_BIT(CACHE_NEW_SURFACE),
+   DEFINE_BIT(CACHE_NEW_SURF_BIND),
+   {0, 0, 0}
+};
+
+
+static void
+brw_update_dirty_count(struct dirty_bit_map *bit_map, int32_t bits)
+{
+   int i;
+
+   for (i = 0; i < 32; i++) {
+      if (bit_map[i].bit == 0)
+        return;
+
+      if (bit_map[i].bit & bits)
+        bit_map[i].count++;
+   }
+}
+
+static void
+brw_print_dirty_count(struct dirty_bit_map *bit_map, int32_t bits)
+{
+   int i;
+
+   for (i = 0; i < 32; i++) {
+      if (bit_map[i].bit == 0)
+        return;
+
+      fprintf(stderr, "0x%08x: %12d (%s)\n",
+             bit_map[i].bit, bit_map[i].count, bit_map[i].name);
+   }
+}
+
index 842380e38f11efe909765454d4f9d0925a0e0d19..8659e35289fc9f2c7e30d7ae800de249e46744fa 100644 (file)
@@ -45,7 +45,7 @@ const struct brw_tracked_state *atoms[] =
 {
    &brw_check_fallback,
 
-   &brw_wm_input_sizes,
+//   &brw_wm_input_sizes,
    &brw_vs_prog,
    &brw_gs_prog, 
    &brw_clip_prog, 
@@ -155,117 +155,6 @@ brw_clear_validated_bos(struct brw_context *brw)
    brw->state.validated_bo_count = 0;
 }
 
-struct dirty_bit_map {
-   uint32_t bit;
-   char *name;
-   uint32_t count;
-};
-
-#define DEFINE_BIT(name) {name, #name, 0}
-
-static struct dirty_bit_map mesa_bits[] = {
-   DEFINE_BIT(_NEW_MODELVIEW),
-   DEFINE_BIT(_NEW_PROJECTION),
-   DEFINE_BIT(_NEW_TEXTURE_MATRIX),
-   DEFINE_BIT(_NEW_COLOR_MATRIX),
-   DEFINE_BIT(_NEW_ACCUM),
-   DEFINE_BIT(_NEW_COLOR),
-   DEFINE_BIT(_NEW_DEPTH),
-   DEFINE_BIT(_NEW_EVAL),
-   DEFINE_BIT(_NEW_FOG),
-   DEFINE_BIT(_NEW_HINT),
-   DEFINE_BIT(_NEW_LIGHT),
-   DEFINE_BIT(_NEW_LINE),
-   DEFINE_BIT(_NEW_PIXEL),
-   DEFINE_BIT(_NEW_POINT),
-   DEFINE_BIT(_NEW_POLYGON),
-   DEFINE_BIT(_NEW_POLYGONSTIPPLE),
-   DEFINE_BIT(_NEW_SCISSOR),
-   DEFINE_BIT(_NEW_STENCIL),
-   DEFINE_BIT(_NEW_TEXTURE),
-   DEFINE_BIT(_NEW_TRANSFORM),
-   DEFINE_BIT(_NEW_VIEWPORT),
-   DEFINE_BIT(_NEW_PACKUNPACK),
-   DEFINE_BIT(_NEW_ARRAY),
-   DEFINE_BIT(_NEW_RENDERMODE),
-   DEFINE_BIT(_NEW_BUFFERS),
-   DEFINE_BIT(_NEW_MULTISAMPLE),
-   DEFINE_BIT(_NEW_TRACK_MATRIX),
-   DEFINE_BIT(_NEW_PROGRAM),
-   DEFINE_BIT(_NEW_PROGRAM_CONSTANTS),
-   {0, 0, 0}
-};
-
-static struct dirty_bit_map brw_bits[] = {
-   DEFINE_BIT(BRW_NEW_URB_FENCE),
-   DEFINE_BIT(BRW_NEW_FRAGMENT_PROGRAM),
-   DEFINE_BIT(BRW_NEW_VERTEX_PROGRAM),
-   DEFINE_BIT(BRW_NEW_INPUT_DIMENSIONS),
-   DEFINE_BIT(BRW_NEW_CURBE_OFFSETS),
-   DEFINE_BIT(BRW_NEW_REDUCED_PRIMITIVE),
-   DEFINE_BIT(BRW_NEW_PRIMITIVE),
-   DEFINE_BIT(BRW_NEW_CONTEXT),
-   DEFINE_BIT(BRW_NEW_WM_INPUT_DIMENSIONS),
-   DEFINE_BIT(BRW_NEW_PSP),
-   DEFINE_BIT(BRW_NEW_FENCE),
-   DEFINE_BIT(BRW_NEW_INDICES),
-   DEFINE_BIT(BRW_NEW_INDEX_BUFFER),
-   DEFINE_BIT(BRW_NEW_VERTICES),
-   DEFINE_BIT(BRW_NEW_BATCH),
-   DEFINE_BIT(BRW_NEW_DEPTH_BUFFER),
-   {0, 0, 0}
-};
-
-static struct dirty_bit_map cache_bits[] = {
-   DEFINE_BIT(CACHE_NEW_CC_VP),
-   DEFINE_BIT(CACHE_NEW_CC_UNIT),
-   DEFINE_BIT(CACHE_NEW_WM_PROG),
-   DEFINE_BIT(CACHE_NEW_SAMPLER_DEFAULT_COLOR),
-   DEFINE_BIT(CACHE_NEW_SAMPLER),
-   DEFINE_BIT(CACHE_NEW_WM_UNIT),
-   DEFINE_BIT(CACHE_NEW_SF_PROG),
-   DEFINE_BIT(CACHE_NEW_SF_VP),
-   DEFINE_BIT(CACHE_NEW_SF_UNIT),
-   DEFINE_BIT(CACHE_NEW_VS_UNIT),
-   DEFINE_BIT(CACHE_NEW_VS_PROG),
-   DEFINE_BIT(CACHE_NEW_GS_UNIT),
-   DEFINE_BIT(CACHE_NEW_GS_PROG),
-   DEFINE_BIT(CACHE_NEW_CLIP_VP),
-   DEFINE_BIT(CACHE_NEW_CLIP_UNIT),
-   DEFINE_BIT(CACHE_NEW_CLIP_PROG),
-   DEFINE_BIT(CACHE_NEW_SURFACE),
-   DEFINE_BIT(CACHE_NEW_SURF_BIND),
-   {0, 0, 0}
-};
-
-
-static void
-brw_update_dirty_count(struct dirty_bit_map *bit_map, int32_t bits)
-{
-   int i;
-
-   for (i = 0; i < 32; i++) {
-      if (bit_map[i].bit == 0)
-        return;
-
-      if (bit_map[i].bit & bits)
-        bit_map[i].count++;
-   }
-}
-
-static void
-brw_print_dirty_count(struct dirty_bit_map *bit_map, int32_t bits)
-{
-   int i;
-
-   for (i = 0; i < 32; i++) {
-      if (bit_map[i].bit == 0)
-        return;
-
-      fprintf(stderr, "0x%08x: %12d (%s)\n",
-             bit_map[i].bit, bit_map[i].count, bit_map[i].name);
-   }
-}
 
 /***********************************************************************
  * Emit all state:
index c33c19ee51771368308951fe31ad36be7f7b0abe..6f7adb6393cef38cc35c027112f6c6d4f40120f8 100644 (file)
@@ -30,8 +30,6 @@
   */
         
 
-#include "intel_regions.h"
-#include "intel_tex.h"
 #include "brw_context.h"
 
 /**
index 813cd31f49c2df9838835751fedbeed89bfd5dbe..50c30878c6f1dd22275da33dd6d06ec818d1c4a1 100644 (file)
@@ -32,9 +32,7 @@
 /* Code to layout images in a mipmap tree for i965.
  */
 
-#include "intel_mipmap_tree.h"
-#include "intel_tex_layout.h"
-#include "intel_chipset.h"
+#include "brw_tex_layout.h"
 
 #define FILE_DEBUG_FLAG DEBUG_MIPTREE
 
index 87dae13d94599ba1c5c4ec196ad7901d044ed700..89e08a5c804b651f7c2ba3db4f6479d4022b1122 100644 (file)
@@ -15,4 +15,7 @@ typedef float GLfloat;
 
 typedef uint8_t GLboolean;
 
+#define GL_FALSE FALSE
+#define GL_TRUE TRUE
+
 #endif
index 6446e8e761123ae7e2cd13db7ee8e98cea332ff7..319e29bfcbcd4c5011b49e0457e0bb01643c4d5b 100644 (file)
@@ -52,7 +52,8 @@ brw_vs_update_constant_buffer(struct brw_context *brw)
    if (!vp->use_const_buffer)
       return NULL;
 
-   const_buffer = drm_intel_bo_alloc(intel->bufmgr, "vp_const_buffer",
+   const_buffer = brw->sws->bo_alloc(brw->sws, 
+                                    BRW_BUFFER_TYPE_SHADER_CONSTANTS,
                                     size, 64);
 
    /* _NEW_PROGRAM_CONSTANTS */
index 2142db5a4db9ef307a269128ae91784d6c4f6f1f..82cd8007aca784ae8e3295ffafdd35df369557ad 100644 (file)
@@ -37,6 +37,7 @@ struct brw_winsys_buffer {
    struct brw_winsys_screen *sws;
    void *bo;
    unsigned offset;
+   unsigned size;
 };
 
 enum brw_buffer_usage {
@@ -63,6 +64,11 @@ enum brw_buffer_type
    BRW_BUFFER_TYPE_TEXTURE,
    BRW_BUFFER_TYPE_SCANOUT, /**< a texture used for scanning out from */
    BRW_BUFFER_TYPE_VERTEX,
+   BRW_BUFFER_TYPE_CURBE,
+   BRW_BUFFER_TYPE_QUERY,
+   BRW_BUFFER_TYPE_SHADER_CONSTANTS,
+   BRW_BUFFER_TYPE_WM_SCRATCH,
+   BRW_BUFFER_TYPE_BATCH,
 };
 
 
@@ -82,6 +88,10 @@ struct brw_batchbuffer {
    uint8_t *map;
    uint8_t *ptr;
    size_t size;
+   struct {
+      uint8_t *end_ptr;
+   } emit;
+
 
    size_t relocs;
    size_t max_relocs;
@@ -125,15 +135,15 @@ struct brw_winsys_screen {
    /**
     * Buffer functions.
     */
+
    /*@{*/
    /**
     * Create a buffer.
     */
-   struct brw_winsys_buffer *(*buffer_create)(struct brw_winsys *iws,
-                                             unsigned size, 
-                                             unsigned alignment,
-                                             enum brw_buffer_type type);
-
+   struct brw_winsys_buffer *(*bo_alloc)( struct brw_winsys_screen *sws,
+                                         enum brw_buffer_type type,
+                                         unsigned size,
+                                         unsigned alignment );
 
    /* Reference and unreference buffers:
     */
@@ -146,6 +156,11 @@ struct brw_winsys_screen {
                          unsigned offset,
                          struct brw_winsys_buffer *b2);
 
+   void (*bo_subdata)(struct brw_winsys_buffer *dst,
+                     size_t offset,
+                     size_t size,
+                     const void *data);
+
    /**
     * Map a buffer.
     */
@@ -159,17 +174,6 @@ struct brw_winsys_screen {
    void (*buffer_unmap)(struct brw_winsys *iws,
                         struct brw_winsys_buffer *buffer);
 
-   /**
-    * Write to a buffer.
-    *
-    * Arguments follows pipe_buffer_write.
-    */
-   int (*buffer_write)(struct brw_winsys *iws,
-                       struct brw_winsys_buffer *dst,
-                       size_t offset,
-                       size_t size,
-                       const void *data);
-
    void (*buffer_destroy)(struct brw_winsys *iws,
                           struct brw_winsys_buffer *buffer);
    /*@}*/
@@ -208,14 +212,14 @@ struct brw_winsys_screen {
 
 
 /**
- * Create i915 pipe_screen.
+ * Create brw pipe_screen.
  */
-struct pipe_screen *i915_create_screen(struct brw_winsys *iws, unsigned pci_id);
+struct pipe_screen *brw_create_screen(struct brw_winsys *iws, unsigned pci_id);
 
 /**
- * Create a i915 pipe_context.
+ * Create a brw pipe_context.
  */
-struct pipe_context *i915_create_context(struct pipe_screen *screen);
+struct pipe_context *brw_create_context(struct pipe_screen *screen);
 
 /**
  * Get the brw_winsys buffer backing the texture.
@@ -223,7 +227,7 @@ struct pipe_context *i915_create_context(struct pipe_screen *screen);
  * TODO UGLY
  */
 struct pipe_texture;
-boolean i915_get_texture_buffer_brw(struct pipe_texture *texture,
+boolean brw_get_texture_buffer_brw(struct pipe_texture *texture,
                                    struct brw_winsys_buffer **buffer,
                                    unsigned *stride);
 
@@ -232,10 +236,10 @@ boolean i915_get_texture_buffer_brw(struct pipe_texture *texture,
  *
  * TODO UGLY
  */
-struct pipe_texture * i915_texture_blanket_brw(struct pipe_screen *screen,
-                                                 struct pipe_texture *tmplt,
-                                                 unsigned pitch,
-                                                 struct brw_winsys_buffer *buffer);
+struct pipe_texture * brw_texture_blanket(struct pipe_screen *screen,
+                                         struct pipe_texture *tmplt,
+                                         unsigned pitch,
+                                         struct brw_winsys_buffer *buffer);
 
 
 
index 32b8900bac45ed39207c8d4e4e10902f9ba0379f..284cf42f8bd948fe2e6a4005b22f995184117a77 100644 (file)
@@ -310,7 +310,7 @@ static void brw_wm_populate_key( struct brw_context *brw,
    }
 
    /* CACHE_NEW_VS_PROG */
-   key->vp_outputs_written = brw->vs.prog_data->outputs_written & DO_SETUP_BITS;
+   key->vp_outputs_written = brw->vs.prog_data->outputs_written; /* bitmask */
 
    /* The unique fragment program ID */
    key->program_string_id = fp->id;
index 958c00d3e0baf39fe17537eaa5dd5d656e7a0886..16a2324049d482e26713ea27c3da6b911eb186ec 100644 (file)
@@ -272,10 +272,10 @@ static void upload_wm_unit( struct brw_context *brw )
         brw->wm.scratch_bo = NULL;
       }
       if (brw->wm.scratch_bo == NULL) {
-        brw->wm.scratch_bo = dri_bo_alloc(intel->bufmgr,
-                                           "wm scratch",
-                                           total,
-                                           4096);
+        brw->wm.scratch_bo = brw->sws->bo_alloc(brw->sws,
+                                                BRW_BUFFER_TYPE_WM_SCRATCH,
+                                                total,
+                                                4096);
       }
    }
 
index 5045c9b4a66f255167aa2288be1bf0b4a58fbf4b..e1ed6438dca820d2c88269df5fb1eb646d894fb0 100644 (file)
   */
                    
 
-#include "intel_mipmap_tree.h"
 #include "brw_batchbuffer.h"
-#include "intel_tex.h"
-#include "intel_fbo.h"
-
 #include "brw_context.h"
 #include "brw_state.h"
 #include "brw_defines.h"
@@ -365,7 +361,8 @@ brw_wm_update_constant_buffer(struct brw_context *brw)
    if (!fp->use_const_buffer)
       return NULL;
 
-   const_buffer = drm_intel_bo_alloc(intel->bufmgr, "fp_const_buffer",
+   const_buffer = drm_intel_bo_alloc(intel->bufmgr, 
+                                    BRW_BUFFER_TYPE_SHADER_CONSTANTS,
                                     size, 64);
 
    /* _NEW_PROGRAM_CONSTANTS */
@@ -686,7 +683,7 @@ static void prepare_wm_surfaces(struct brw_context *brw )
    }
 
    old_nr_surfaces = brw->wm.nr_surfaces;
-   brw->wm.nr_surfaces = MAX_DRAW_BUFFERS;
+   brw->wm.nr_surfaces = PIPE_MAX_COLOR_BUFS;
 
    if (brw->wm.surf_bo[SURF_INDEX_FRAG_CONST_BUFFER] != NULL)
        brw->wm.nr_surfaces = SURF_INDEX_FRAG_CONST_BUFFER + 1;
diff --git a/src/gallium/drivers/i965/intel_chipset.h b/src/gallium/drivers/i965/intel_chipset.h
deleted file mode 100644 (file)
index 3c38f16..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright © 2007 Intel Corporation
- *
- * 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, sublicense,
- * 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 NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS 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:
- *    Eric Anholt <eric@anholt.net>
- *
- */
-
-#define PCI_CHIP_I810                  0x7121
-#define PCI_CHIP_I810_DC100            0x7123
-#define PCI_CHIP_I810_E                        0x7125
-#define PCI_CHIP_I815                  0x1132
-
-#define PCI_CHIP_I830_M                        0x3577
-#define PCI_CHIP_845_G                 0x2562
-#define PCI_CHIP_I855_GM               0x3582
-#define PCI_CHIP_I865_G                        0x2572
-
-#define PCI_CHIP_I915_G                        0x2582
-#define PCI_CHIP_E7221_G               0x258A
-#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_Q35_G                 0x29B2
-#define PCI_CHIP_G33_G                 0x29C2
-#define PCI_CHIP_Q33_G                 0x29D2
-
-#define PCI_CHIP_IGD_GM                        0xA011
-#define PCI_CHIP_IGD_G                 0xA001
-
-#define IS_IGDGM(devid)        (devid == PCI_CHIP_IGD_GM)
-#define IS_IGDG(devid) (devid == PCI_CHIP_IGD_G)
-#define IS_IGD(devid) (IS_IGDG(devid) || IS_IGDGM(devid))
-
-#define PCI_CHIP_I965_G                        0x29A2
-#define PCI_CHIP_I965_Q                        0x2992
-#define PCI_CHIP_I965_G_1              0x2982
-#define PCI_CHIP_I946_GZ               0x2972
-#define PCI_CHIP_I965_GM                0x2A02
-#define PCI_CHIP_I965_GME               0x2A12
-
-#define PCI_CHIP_GM45_GM                0x2A42
-
-#define PCI_CHIP_IGD_E_G                0x2E02
-#define PCI_CHIP_Q45_G                  0x2E12
-#define PCI_CHIP_G45_G                  0x2E22
-#define PCI_CHIP_G41_G                  0x2E32
-
-#define PCI_CHIP_ILD_G                  0x0042
-#define PCI_CHIP_ILM_G                  0x0046
-
-#define IS_MOBILE(devid)       (devid == PCI_CHIP_I855_GM || \
-                                devid == PCI_CHIP_I915_GM || \
-                                devid == PCI_CHIP_I945_GM || \
-                                devid == PCI_CHIP_I945_GME || \
-                                devid == PCI_CHIP_I965_GM || \
-                                devid == PCI_CHIP_I965_GME || \
-                                devid == PCI_CHIP_GM45_GM || \
-                                IS_IGD(devid) || \
-                                devid == PCI_CHIP_ILM_G)
-
-#define IS_G45(devid)           (devid == PCI_CHIP_IGD_E_G || \
-                                 devid == PCI_CHIP_Q45_G || \
-                                 devid == PCI_CHIP_G45_G || \
-                                 devid == PCI_CHIP_G41_G)
-#define IS_GM45(devid)          (devid == PCI_CHIP_GM45_GM)
-#define IS_G4X(devid)          (IS_G45(devid) || IS_GM45(devid))
-
-#define IS_ILD(devid)           (devid == PCI_CHIP_ILD_G)
-#define IS_ILM(devid)           (devid == PCI_CHIP_ILM_G)
-#define IS_IGDNG(devid)           (IS_ILD(devid) || IS_ILM(devid))
-
-#define IS_915(devid)          (devid == PCI_CHIP_I915_G || \
-                                devid == PCI_CHIP_E7221_G || \
-                                devid == PCI_CHIP_I915_GM)
-
-#define IS_945(devid)          (devid == PCI_CHIP_I945_G || \
-                                devid == PCI_CHIP_I945_GM || \
-                                devid == PCI_CHIP_I945_GME || \
-                                devid == PCI_CHIP_G33_G || \
-                                devid == PCI_CHIP_Q33_G || \
-                                devid == PCI_CHIP_Q35_G || IS_IGD(devid))
-
-#define IS_965(devid)          (devid == PCI_CHIP_I965_G || \
-                                devid == PCI_CHIP_I965_Q || \
-                                devid == PCI_CHIP_I965_G_1 || \
-                                devid == PCI_CHIP_I965_GM || \
-                                devid == PCI_CHIP_I965_GME || \
-                                devid == PCI_CHIP_I946_GZ || \
-                                IS_G4X(devid) || \
-                                IS_IGDNG(devid))
-
-#define IS_9XX(devid)          (IS_915(devid) || \
-                                IS_945(devid) || \
-                                IS_965(devid))
diff --git a/src/gallium/drivers/i965/intel_tex_format.c b/src/gallium/drivers/i965/intel_tex_format.c
deleted file mode 100644 (file)
index c62ecda..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-#include "intel_context.h"
-#include "intel_tex.h"
-#include "intel_chipset.h"
-
-
-
-
-int intel_compressed_num_bytes(GLuint mesaFormat)
-{
-   int bytes = 0;
-   switch(mesaFormat) {
-     
-   case MESA_FORMAT_RGB_FXT1:
-   case MESA_FORMAT_RGBA_FXT1:
-   case MESA_FORMAT_RGB_DXT1:
-   case MESA_FORMAT_RGBA_DXT1:
-     bytes = 2;
-     break;
-     
-   case MESA_FORMAT_RGBA_DXT3:
-   case MESA_FORMAT_RGBA_DXT5:
-     bytes = 4;
-   default:
-     break;
-   }
-   
-   return bytes;
-}
index 1cdab49e5ef34ce8d874e3ee8a8dd19565e72e5f..7e0ca553f2fa975a9770521345b1f5a9c24c5292 100644 (file)
@@ -30,9 +30,7 @@
   *   Michel Dänzer <michel@tungstengraphics.com>
   */
 
-#include "intel_mipmap_tree.h"
 #include "intel_tex_layout.h"
-#include "intel_context.h"
 
 void intel_get_texture_alignment_unit(GLenum internalFormat, GLuint *w, GLuint *h)
 {