aboutsummaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers
diff options
context:
space:
mode:
authorKeith Whitwell <[email protected]>2009-11-01 19:30:53 +0000
committerKeith Whitwell <[email protected]>2009-11-01 19:30:53 +0000
commit15a8ac2c9d6ed13468ef88f3f3bd3ccf4ee2fd0e (patch)
treef84ed0c5a9169caf1486b7325a7bc9dc6f40b63f /src/gallium/drivers
parentefda453d646c767fbf0f8e85aa09178095ab04d6 (diff)
i965g: driver and winsys compile
A milestone of sorts. Still a long way from something working -- the old one compiled too, at least some of the time...
Diffstat (limited to 'src/gallium/drivers')
-rw-r--r--src/gallium/drivers/i965/brw_batchbuffer.c11
-rw-r--r--src/gallium/drivers/i965/brw_cc.c2
-rw-r--r--src/gallium/drivers/i965/brw_clip_state.c2
-rw-r--r--src/gallium/drivers/i965/brw_gs_state.c2
-rw-r--r--src/gallium/drivers/i965/brw_screen_texture.c6
-rw-r--r--src/gallium/drivers/i965/brw_sf_state.c4
-rw-r--r--src/gallium/drivers/i965/brw_state_dump.c6
-rw-r--r--src/gallium/drivers/i965/brw_vs_state.c2
-rw-r--r--src/gallium/drivers/i965/brw_winsys.h39
-rw-r--r--src/gallium/drivers/i965/brw_wm_sampler_state.c2
-rw-r--r--src/gallium/drivers/i965/brw_wm_state.c6
-rw-r--r--src/gallium/drivers/i965/brw_wm_surface_state.c4
12 files changed, 46 insertions, 40 deletions
diff --git a/src/gallium/drivers/i965/brw_batchbuffer.c b/src/gallium/drivers/i965/brw_batchbuffer.c
index 080c92046b8..72650cdb5d5 100644
--- a/src/gallium/drivers/i965/brw_batchbuffer.c
+++ b/src/gallium/drivers/i965/brw_batchbuffer.c
@@ -36,7 +36,6 @@
#include "brw_debug.h"
#include "brw_structs.h"
-#define BATCH_SIZE (32*1024)
#define USE_LOCAL_BUFFER 1
#define ALWAYS_EMIT_MI_FLUSH 1
@@ -49,17 +48,17 @@ brw_batchbuffer_reset(struct brw_batchbuffer *batch)
}
if (USE_LOCAL_BUFFER && !batch->buffer)
- batch->buffer = MALLOC(BATCH_SIZE);
+ batch->buffer = MALLOC(BRW_BATCH_SIZE);
batch->buf = batch->sws->bo_alloc(batch->sws,
BRW_BUFFER_TYPE_BATCH,
- BATCH_SIZE, 4096);
+ BRW_BATCH_SIZE, 4096);
if (batch->buffer)
batch->map = batch->buffer;
else
batch->map = batch->sws->bo_map(batch->buf, GL_TRUE);
- batch->size = BATCH_SIZE;
+ batch->size = BRW_BATCH_SIZE;
batch->ptr = batch->map;
}
@@ -132,7 +131,7 @@ _brw_batchbuffer_flush(struct brw_batchbuffer *batch,
batch->map = NULL;
batch->ptr = NULL;
- batch->sws->bo_exec(batch->buf, used, NULL, 0, 0 );
+ batch->sws->bo_exec(batch->buf, used );
#if 0
if (BRW_DEBUG & DEBUG_BATCH) {
@@ -196,7 +195,7 @@ brw_batchbuffer_emit_reloc(struct brw_batchbuffer *batch,
* the buffer doesn't move and we can short-circuit the relocation processing
* in the kernel
*/
- brw_batchbuffer_emit_dword (batch, buffer->offset + delta);
+ brw_batchbuffer_emit_dword (batch, buffer->offset[0] + delta);
return 0;
}
diff --git a/src/gallium/drivers/i965/brw_cc.c b/src/gallium/drivers/i965/brw_cc.c
index bdd6418ae10..cf3791e11e3 100644
--- a/src/gallium/drivers/i965/brw_cc.c
+++ b/src/gallium/drivers/i965/brw_cc.c
@@ -137,7 +137,7 @@ cc_unit_create_from_key(struct brw_context *brw, struct brw_cc_unit_key *key)
cc.cc3 = key->cc3;
/* CACHE_NEW_CC_VP */
- cc.cc4.cc_viewport_state_offset = brw->cc.vp_bo->offset >> 5; /* reloc */
+ cc.cc4.cc_viewport_state_offset = *(brw->cc.vp_bo->offset) >> 5; /* reloc */
cc.cc5 = key->cc5;
cc.cc6 = key->cc6;
diff --git a/src/gallium/drivers/i965/brw_clip_state.c b/src/gallium/drivers/i965/brw_clip_state.c
index bf4e6f51036..31e2e0bc17b 100644
--- a/src/gallium/drivers/i965/brw_clip_state.c
+++ b/src/gallium/drivers/i965/brw_clip_state.c
@@ -83,7 +83,7 @@ clip_unit_create_from_key(struct brw_context *brw,
clip.thread0.grf_reg_count = align(key->total_grf, 16) / 16 - 1;
/* reloc */
- clip.thread0.kernel_start_pointer = brw->clip.prog_bo->offset >> 6;
+ clip.thread0.kernel_start_pointer = *(brw->clip.prog_bo->offset) >> 6;
clip.thread1.floating_point_mode = BRW_FLOATING_POINT_NON_IEEE_754;
clip.thread1.single_program_flow = 1;
diff --git a/src/gallium/drivers/i965/brw_gs_state.c b/src/gallium/drivers/i965/brw_gs_state.c
index 15a66c97410..9046969394b 100644
--- a/src/gallium/drivers/i965/brw_gs_state.c
+++ b/src/gallium/drivers/i965/brw_gs_state.c
@@ -79,7 +79,7 @@ gs_unit_create_from_key(struct brw_context *brw, struct brw_gs_unit_key *key)
gs.thread0.grf_reg_count = align(key->total_grf, 16) / 16 - 1;
if (key->prog_active) /* reloc */
- gs.thread0.kernel_start_pointer = brw->gs.prog_bo->offset >> 6;
+ gs.thread0.kernel_start_pointer = brw->gs.prog_bo->offset[0] >> 6;
gs.thread1.floating_point_mode = BRW_FLOATING_POINT_NON_IEEE_754;
gs.thread1.single_program_flow = 1;
diff --git a/src/gallium/drivers/i965/brw_screen_texture.c b/src/gallium/drivers/i965/brw_screen_texture.c
index 3fd486986ff..48b3451bfc4 100644
--- a/src/gallium/drivers/i965/brw_screen_texture.c
+++ b/src/gallium/drivers/i965/brw_screen_texture.c
@@ -222,7 +222,11 @@ static struct pipe_texture *brw_texture_create( struct pipe_screen *screen,
/* This is ok for all textures with channel width 8bit or less:
*/
/* tex->ss.ss0.data_return_format = BRW_SURFACERETURNFORMAT_S1; */
- tex->ss.ss1.base_addr = tex->bo->offset; /* reloc */
+
+
+ /* XXX: what happens when tex->bo->offset changes???
+ */
+ tex->ss.ss1.base_addr = tex->bo->offset[0]; /* reloc */
tex->ss.ss2.mip_count = tex->base.last_level;
tex->ss.ss2.width = tex->base.width[0] - 1;
tex->ss.ss2.height = tex->base.height[0] - 1;
diff --git a/src/gallium/drivers/i965/brw_sf_state.c b/src/gallium/drivers/i965/brw_sf_state.c
index fbc9f15eb43..4ab5709d533 100644
--- a/src/gallium/drivers/i965/brw_sf_state.c
+++ b/src/gallium/drivers/i965/brw_sf_state.c
@@ -138,7 +138,7 @@ sf_unit_create_from_key(struct brw_context *brw, struct brw_sf_unit_key *key,
memset(&sf, 0, sizeof(sf));
sf.thread0.grf_reg_count = align(key->total_grf, 16) / 16 - 1;
- sf.thread0.kernel_start_pointer = brw->sf.prog_bo->offset >> 6; /* reloc */
+ sf.thread0.kernel_start_pointer = brw->sf.prog_bo->offset[0] >> 6; /* reloc */
sf.thread1.floating_point_mode = BRW_FLOATING_POINT_NON_IEEE_754;
@@ -171,7 +171,7 @@ sf_unit_create_from_key(struct brw_context *brw, struct brw_sf_unit_key *key,
sf.thread4.stats_enable = 1;
/* CACHE_NEW_SF_VP */
- sf.sf5.sf_viewport_state_offset = brw->sf.vp_bo->offset >> 5; /* reloc */
+ sf.sf5.sf_viewport_state_offset = brw->sf.vp_bo->offset[0] >> 5; /* reloc */
sf.sf5.viewport_transform = 1;
diff --git a/src/gallium/drivers/i965/brw_state_dump.c b/src/gallium/drivers/i965/brw_state_dump.c
index 72604304d41..345e42a6b20 100644
--- a/src/gallium/drivers/i965/brw_state_dump.c
+++ b/src/gallium/drivers/i965/brw_state_dump.c
@@ -67,7 +67,7 @@ state_struct_out(struct brw_winsys_screen *sws,
data = sws->bo_map(buffer, GL_FALSE);
for (i = 0; i < state_size / 4; i++) {
- state_out(name, data, buffer->offset, i,
+ state_out(name, data, buffer->offset[0], i,
"dword %d\n", i);
}
sws->bo_unmap(buffer);
@@ -115,7 +115,7 @@ static void dump_wm_surface_state(struct brw_context *brw)
continue;
}
surf = (struct brw_surface_state *)brw->sws->bo_map(surf_bo, GL_FALSE);
- surfoff = surf_bo->offset;
+ surfoff = surf_bo->offset[0];
sprintf(name, "WM SS%d", i);
state_out(name, surf, surfoff, 0, "%s %s\n",
@@ -145,7 +145,7 @@ static void dump_sf_viewport_state(struct brw_context *brw)
return;
vp = (struct brw_sf_viewport *)brw->sws->bo_map(brw->sf.vp_bo, GL_FALSE);
- vp_off = brw->sf.vp_bo->offset;
+ vp_off = brw->sf.vp_bo->offset[0];
state_out(name, vp, vp_off, 0, "m00 = %f\n", vp->viewport.m00);
state_out(name, vp, vp_off, 1, "m11 = %f\n", vp->viewport.m11);
diff --git a/src/gallium/drivers/i965/brw_vs_state.c b/src/gallium/drivers/i965/brw_vs_state.c
index 549696f7ae7..6a2395dd967 100644
--- a/src/gallium/drivers/i965/brw_vs_state.c
+++ b/src/gallium/drivers/i965/brw_vs_state.c
@@ -87,7 +87,7 @@ vs_unit_create_from_key(struct brw_context *brw, struct brw_vs_unit_key *key)
memset(&vs, 0, sizeof(vs));
- vs.thread0.kernel_start_pointer = brw->vs.prog_bo->offset >> 6; /* reloc */
+ vs.thread0.kernel_start_pointer = brw->vs.prog_bo->offset[0] >> 6; /* reloc */
vs.thread0.grf_reg_count = align(key->total_grf, 16) / 16 - 1;
vs.thread1.floating_point_mode = BRW_FLOATING_POINT_NON_IEEE_754;
/* Choosing multiple program flow means that we may get 2-vertex threads,
diff --git a/src/gallium/drivers/i965/brw_winsys.h b/src/gallium/drivers/i965/brw_winsys.h
index bc3d31196c1..d19cd5d248c 100644
--- a/src/gallium/drivers/i965/brw_winsys.h
+++ b/src/gallium/drivers/i965/brw_winsys.h
@@ -31,12 +31,15 @@
struct brw_winsys;
struct pipe_fence_handle;
-/* This currently just wraps dri_bo:
+/* Not sure why the winsys needs this:
+ */
+#define BRW_BATCH_SIZE (32*1024)
+
+
+/* Need a tiny bit of information inside the abstract buffer struct:
*/
struct brw_winsys_buffer {
- struct brw_winsys_screen *sws;
- void *bo;
- unsigned offset;
+ unsigned *offset;
unsigned size;
};
@@ -70,6 +73,8 @@ enum brw_buffer_type
BRW_BUFFER_TYPE_WM_SCRATCH,
BRW_BUFFER_TYPE_BATCH,
BRW_BUFFER_TYPE_STATE_CACHE,
+
+ BRW_BUFFER_TYPE_MAX /* Count of possible values */
};
struct brw_winsys_screen {
@@ -103,12 +108,9 @@ struct brw_winsys_screen {
struct brw_winsys_buffer *b2);
int (*bo_exec)( struct brw_winsys_buffer *buffer,
- unsigned bytes_used,
- void *foo,
- int a,
- int b );
+ unsigned bytes_used );
- void (*bo_subdata)(struct brw_winsys_buffer *buffer,
+ int (*bo_subdata)(struct brw_winsys_buffer *buffer,
size_t offset,
size_t size,
const void *data);
@@ -142,14 +144,14 @@ struct brw_winsys_screen {
/**
* Destroy the winsys.
*/
- void (*destroy)(struct brw_winsys *iws);
+ void (*destroy)(struct brw_winsys_screen *iws);
};
/**
* Create brw pipe_screen.
*/
-struct pipe_screen *brw_create_screen(struct brw_winsys *iws, unsigned pci_id);
+struct pipe_screen *brw_create_screen(struct brw_winsys_screen *iws, unsigned pci_id);
/**
* Create a brw pipe_context.
@@ -162,19 +164,20 @@ struct pipe_context *brw_create_context(struct pipe_screen *screen);
* TODO UGLY
*/
struct pipe_texture;
-boolean brw_get_texture_buffer_brw(struct pipe_texture *texture,
- struct brw_winsys_buffer **buffer,
- unsigned *stride);
+boolean brw_texture_get_winsys_buffer(struct pipe_texture *texture,
+ struct brw_winsys_buffer **buffer,
+ unsigned *stride);
/**
* Wrap a brw_winsys buffer with a texture blanket.
*
* TODO UGLY
*/
-struct pipe_texture * brw_texture_blanket_ws(struct pipe_screen *screen,
- const struct pipe_texture *tmplt,
- const unsigned *stride,
- struct brw_winsys_buffer *buffer);
+struct pipe_texture *
+brw_texture_blanket_winsys_buffer(struct pipe_screen *screen,
+ const struct pipe_texture *template,
+ const unsigned pitch,
+ struct brw_winsys_buffer *buffer);
diff --git a/src/gallium/drivers/i965/brw_wm_sampler_state.c b/src/gallium/drivers/i965/brw_wm_sampler_state.c
index ddd88d6e22e..d43968c85ac 100644
--- a/src/gallium/drivers/i965/brw_wm_sampler_state.c
+++ b/src/gallium/drivers/i965/brw_wm_sampler_state.c
@@ -81,7 +81,7 @@ brw_wm_sampler_populate_key(struct brw_context *brw,
entry->ss0 = sampler->ss0;
entry->ss1 = sampler->ss1;
- entry->ss2.default_color_pointer = brw->wm.sdc_bo[i]->offset >> 5; /* reloc */
+ entry->ss2.default_color_pointer = brw->wm.sdc_bo[i]->offset[0] >> 5; /* reloc */
entry->ss3 = sampler->ss3;
/* Cube-maps on 965 and later must use the same wrap mode for all 3
diff --git a/src/gallium/drivers/i965/brw_wm_state.c b/src/gallium/drivers/i965/brw_wm_state.c
index f161de9b401..5cfa8fe2d19 100644
--- a/src/gallium/drivers/i965/brw_wm_state.c
+++ b/src/gallium/drivers/i965/brw_wm_state.c
@@ -148,7 +148,7 @@ wm_unit_create_from_key(struct brw_context *brw, struct brw_wm_unit_key *key,
memset(&wm, 0, sizeof(wm));
wm.thread0.grf_reg_count = align(key->total_grf, 16) / 16 - 1;
- wm.thread0.kernel_start_pointer = brw->wm.prog_bo->offset >> 6; /* reloc */
+ wm.thread0.kernel_start_pointer = brw->wm.prog_bo->offset[0] >> 6; /* reloc */
wm.thread1.depth_coef_urb_read_offset = 1;
wm.thread1.floating_point_mode = BRW_FLOATING_POINT_NON_IEEE_754;
@@ -159,7 +159,7 @@ wm_unit_create_from_key(struct brw_context *brw, struct brw_wm_unit_key *key,
if (key->total_scratch != 0) {
wm.thread2.scratch_space_base_pointer =
- brw->wm.scratch_bo->offset >> 10; /* reloc */
+ brw->wm.scratch_bo->offset[0] >> 10; /* reloc */
wm.thread2.per_thread_scratch_space = key->total_scratch / 1024 - 1;
} else {
wm.thread2.scratch_space_base_pointer = 0;
@@ -179,7 +179,7 @@ wm_unit_create_from_key(struct brw_context *brw, struct brw_wm_unit_key *key,
if (brw->wm.sampler_bo != NULL) {
/* reloc */
- wm.wm4.sampler_state_pointer = brw->wm.sampler_bo->offset >> 5;
+ wm.wm4.sampler_state_pointer = brw->wm.sampler_bo->offset[0] >> 5;
} else {
wm.wm4.sampler_state_pointer = 0;
}
diff --git a/src/gallium/drivers/i965/brw_wm_surface_state.c b/src/gallium/drivers/i965/brw_wm_surface_state.c
index 88485c76cb4..f55a6c4af2e 100644
--- a/src/gallium/drivers/i965/brw_wm_surface_state.c
+++ b/src/gallium/drivers/i965/brw_wm_surface_state.c
@@ -118,7 +118,7 @@ brw_update_renderbuffer_surface(struct brw_context *brw,
*/
brw->sws->bo_emit_reloc(brw->wm.surf_bo[unit],
I915_GEM_DOMAIN_RENDER, 0,
- ss.ss1.base_addr - surface->bo->offset, /* XXX */
+ ss.ss1.base_addr - surface->bo->offset[0], /* XXX */
offsetof(struct brw_surface_state, ss1),
surface->bo);
}
@@ -150,7 +150,7 @@ brw_wm_get_binding_table(struct brw_context *brw)
int i;
for (i = 0; i < brw->wm.nr_surfaces; i++)
- data[i] = brw->wm.surf_bo[i]->offset;
+ data[i] = brw->wm.surf_bo[i]->offset[0];
bind_bo = brw_upload_cache( &brw->surface_cache, BRW_SS_SURF_BIND,
NULL, 0,