Browse Source

i965g: add data type tags to aid dumping/decoding

tags/7.8-rc1
Keith Whitwell 16 years ago
parent
commit
6ac38232ee

+ 13
- 4
src/gallium/drivers/i965/brw_batchbuffer.c View File

@@ -53,7 +53,9 @@ brw_batchbuffer_reset(struct brw_batchbuffer *batch)
if (batch->malloc_buffer)
batch->map = batch->malloc_buffer;
else
batch->map = batch->sws->bo_map(batch->buf, GL_TRUE);
batch->map = batch->sws->bo_map(batch->buf,
BRW_DATA_OTHER,
GL_TRUE);

batch->size = BRW_BATCH_SIZE;
batch->ptr = batch->map;
@@ -132,7 +134,10 @@ _brw_batchbuffer_flush(struct brw_batchbuffer *batch,
used = batch->ptr - batch->map;

if (batch->use_malloc_buffer) {
batch->sws->bo_subdata(batch->buf, 0, used, batch->map );
batch->sws->bo_subdata(batch->buf,
BRW_DATA_OTHER,
0, used,
batch->map );
batch->map = NULL;
}
else {
@@ -145,7 +150,9 @@ _brw_batchbuffer_flush(struct brw_batchbuffer *batch,
batch->sws->bo_exec(batch->buf, used );

if (1 /*BRW_DEBUG & DEBUG_BATCH*/) {
void *ptr = batch->sws->bo_map(batch->buf, GL_FALSE);
void *ptr = batch->sws->bo_map(batch->buf,
BRW_DATA_OTHER,
GL_FALSE);

intel_decode(ptr,
used / 4,
@@ -162,7 +169,9 @@ _brw_batchbuffer_flush(struct brw_batchbuffer *batch,
* interface.
*/
debug_printf("waiting for idle\n");
batch->sws->bo_map(batch->buf, GL_TRUE);
batch->sws->bo_map(batch->buf,
BRW_DATA_OTHER,
GL_TRUE);
batch->sws->bo_unmap(batch->buf);
}


+ 22
- 18
src/gallium/drivers/i965/brw_context.h View File

@@ -347,25 +347,27 @@ struct brw_vs_ouput_sizes {
#define SURF_INDEX_VERT_CONST_BUFFER 0


/* Bit of a hack to align these with the winsys buffer_data_type enum.
*/
enum brw_cache_id {
BRW_CC_VP,
BRW_CC_UNIT,
BRW_WM_PROG,
BRW_SAMPLER_DEFAULT_COLOR,
BRW_SAMPLER,
BRW_WM_UNIT,
BRW_SF_PROG,
BRW_SF_VP,
BRW_SF_UNIT,
BRW_VS_UNIT,
BRW_VS_PROG,
BRW_GS_UNIT,
BRW_GS_PROG,
BRW_CLIP_VP,
BRW_CLIP_UNIT,
BRW_CLIP_PROG,
BRW_SS_SURFACE,
BRW_SS_SURF_BIND,
BRW_CC_VP = BRW_DATA_GS_CC_VP,
BRW_CC_UNIT = BRW_DATA_GS_CC_UNIT,
BRW_WM_PROG = BRW_DATA_GS_WM_PROG,
BRW_SAMPLER_DEFAULT_COLOR = BRW_DATA_GS_SAMPLER_DEFAULT_COLOR,
BRW_SAMPLER = BRW_DATA_GS_SAMPLER,
BRW_WM_UNIT = BRW_DATA_GS_WM_UNIT,
BRW_SF_PROG = BRW_DATA_GS_SF_PROG,
BRW_SF_VP = BRW_DATA_GS_SF_VP,
BRW_SF_UNIT = BRW_DATA_GS_SF_UNIT,
BRW_VS_UNIT = BRW_DATA_GS_VS_UNIT,
BRW_VS_PROG = BRW_DATA_GS_VS_PROG,
BRW_GS_UNIT = BRW_DATA_GS_GS_UNIT,
BRW_GS_PROG = BRW_DATA_GS_GS_PROG,
BRW_CLIP_VP = BRW_DATA_GS_CLIP_VP,
BRW_CLIP_UNIT = BRW_DATA_GS_CLIP_UNIT,
BRW_CLIP_PROG = BRW_DATA_GS_CLIP_PROG,
BRW_SS_SURFACE = BRW_DATA_SS_SURFACE,
BRW_SS_SURF_BIND = BRW_DATA_SS_SURF_BIND,

BRW_MAX_CACHE
};
@@ -399,6 +401,8 @@ struct brw_cache {
struct brw_cache_item **items;
GLuint size, n_items;

enum brw_buffer_type buffer_type;

GLuint key_size[BRW_MAX_CACHE]; /* for fixed-size keys */
GLuint aux_size[BRW_MAX_CACHE];
char *name[BRW_MAX_CACHE];

+ 1
- 0
src/gallium/drivers/i965/brw_curbe.c View File

@@ -289,6 +289,7 @@ static int prepare_curbe_buffer(struct brw_context *brw)
*/
brw->sws->bo_subdata(brw->curbe.curbe_bo,
brw->curbe.curbe_offset,
BRW_DATA_OTHER,
bufsz,
buf);
}

+ 1
- 1
src/gallium/drivers/i965/brw_pipe_query.c View File

@@ -63,7 +63,7 @@ brw_query_get_result(struct pipe_context *pipe,
if (brw->sws->bo_is_busy(query->bo) && !wait)
return FALSE;
map = brw->sws->bo_map(query->bo, GL_FALSE);
map = brw->sws->bo_map(query->bo, BRW_DATA_OTHER, GL_FALSE);
if (map == NULL)
return FALSE;

+ 7
- 6
src/gallium/drivers/i965/brw_screen_buffers.c View File

@@ -24,6 +24,7 @@ brw_buffer_map( struct pipe_screen *screen,
return buf->user_buffer;

return sws->bo_map( buf->bo,
BRW_DATA_OTHER,
(usage & PIPE_BUFFER_USAGE_CPU_WRITE) ? TRUE : FALSE );
}

@@ -64,7 +65,7 @@ brw_buffer_create(struct pipe_screen *screen,
struct brw_screen *bscreen = brw_screen(screen);
struct brw_winsys_screen *sws = bscreen->sws;
struct brw_buffer *buf;
unsigned usage_type;
unsigned buffer_type;
buf = CALLOC_STRUCT(brw_buffer);
if (!buf)
@@ -84,24 +85,24 @@ brw_buffer_create(struct pipe_screen *screen,
case PIPE_BUFFER_USAGE_VERTEX:
case PIPE_BUFFER_USAGE_INDEX:
case (PIPE_BUFFER_USAGE_VERTEX|PIPE_BUFFER_USAGE_INDEX):
usage_type = BRW_BUFFER_TYPE_VERTEX;
buffer_type = BRW_BUFFER_TYPE_VERTEX;
break;
case PIPE_BUFFER_USAGE_PIXEL:
usage_type = BRW_BUFFER_TYPE_PIXEL;
buffer_type = BRW_BUFFER_TYPE_PIXEL;
break;

case PIPE_BUFFER_USAGE_CONSTANT:
usage_type = BRW_BUFFER_TYPE_SHADER_CONSTANTS;
buffer_type = BRW_BUFFER_TYPE_SHADER_CONSTANTS;
break;

default:
usage_type = BRW_BUFFER_TYPE_GENERIC;
buffer_type = BRW_BUFFER_TYPE_GENERIC;
break;
}
buf->bo = sws->bo_alloc( sws,
usage_type,
buffer_type,
size,
alignment );

+ 7
- 11
src/gallium/drivers/i965/brw_screen_texture.c View File

@@ -186,6 +186,7 @@ static struct pipe_texture *brw_texture_create( struct pipe_screen *screen,
{
struct brw_screen *bscreen = brw_screen(screen);
struct brw_texture *tex;
enum brw_buffer_type buffer_type;
tex = CALLOC_STRUCT(brw_texture);
if (tex == NULL)
@@ -226,21 +227,16 @@ static struct pipe_texture *brw_texture_create( struct pipe_screen *screen,
goto fail;

if (templ->tex_usage & PIPE_TEXTURE_USAGE_RENDER_TARGET) {
}
else if (templ->tex_usage & (PIPE_TEXTURE_USAGE_DISPLAY_TARGET |
PIPE_TEXTURE_USAGE_PRIMARY)) {
}
else if (templ->tex_usage & PIPE_TEXTURE_USAGE_DEPTH_STENCIL) {
}
else if (templ->tex_usage & PIPE_TEXTURE_USAGE_SAMPLER) {
if (templ->tex_usage & (PIPE_TEXTURE_USAGE_DISPLAY_TARGET |
PIPE_TEXTURE_USAGE_PRIMARY)) {
buffer_type = BRW_BUFFER_TYPE_SCANOUT;
}
if (templ->tex_usage & PIPE_TEXTURE_USAGE_DYNAMIC) {
else {
buffer_type = BRW_BUFFER_TYPE_TEXTURE;
}

tex->bo = bscreen->sws->bo_alloc( bscreen->sws,
BRW_USAGE_SAMPLER,
buffer_type,
tex->pitch * tex->total_height * tex->cpp,
64 );


+ 12
- 11
src/gallium/drivers/i965/brw_state_cache.c View File

@@ -228,7 +228,7 @@ brw_upload_cache( struct brw_cache *cache,
* these various entities.
*/
bo = cache->sws->bo_alloc(cache->sws,
BRW_BUFFER_TYPE_STATE_CACHE,
cache->buffer_type,
data_size, 1 << 6);


@@ -273,7 +273,9 @@ brw_upload_cache( struct brw_cache *cache,
data_size, cache_id);

/* Copy data to the buffer */
cache->sws->bo_subdata(bo, 0, data_size, data);
cache->sws->bo_subdata(bo,
cache_id,
0, data_size, data);

update_cache_last(cache, cache_id, bo);

@@ -332,11 +334,6 @@ brw_cache_data(struct brw_cache *cache,
reloc_bufs, nr_reloc_bufs);
}

enum pool_type {
DW_SURFACE_STATE,
DW_GENERAL_STATE
};


static void
brw_init_cache_id(struct brw_cache *cache,
@@ -352,13 +349,15 @@ brw_init_cache_id(struct brw_cache *cache,


static void
brw_init_non_surface_cache(struct brw_context *brw)
brw_init_general_state_cache(struct brw_context *brw)
{
struct brw_cache *cache = &brw->cache;

cache->brw = brw;
cache->sws = brw->sws;

cache->buffer_type = BRW_BUFFER_TYPE_GENERAL_STATE;

cache->size = 7;
cache->n_items = 0;
cache->items = (struct brw_cache_item **)
@@ -457,13 +456,15 @@ brw_init_non_surface_cache(struct brw_context *brw)


static void
brw_init_surface_cache(struct brw_context *brw)
brw_init_surface_state_cache(struct brw_context *brw)
{
struct brw_cache *cache = &brw->surface_cache;

cache->brw = brw;
cache->sws = brw->sws;

cache->buffer_type = BRW_BUFFER_TYPE_SURFACE_STATE;

cache->size = 7;
cache->n_items = 0;
cache->items = (struct brw_cache_item **)
@@ -486,8 +487,8 @@ brw_init_surface_cache(struct brw_context *brw)
void
brw_init_caches(struct brw_context *brw)
{
brw_init_non_surface_cache(brw);
brw_init_surface_cache(brw);
brw_init_general_state_cache(brw);
brw_init_surface_state_cache(brw);
}



+ 10
- 4
src/gallium/drivers/i965/brw_state_dump.c View File

@@ -65,7 +65,7 @@ state_struct_out(struct brw_winsys_screen *sws,
if (buffer == NULL)
return;

data = sws->bo_map(buffer, GL_FALSE);
data = sws->bo_map(buffer, BRW_DATA_OTHER, GL_FALSE);
for (i = 0; i < state_size / 4; i++) {
state_out(name, data, buffer->offset[0], i,
"dword %d\n", i);
@@ -114,7 +114,9 @@ static void dump_wm_surface_state(struct brw_context *brw)
debug_printf(" WM SS%d: NULL\n", i);
continue;
}
surf = (struct brw_surface_state *)brw->sws->bo_map(surf_bo, GL_FALSE);
surf = (struct brw_surface_state *)brw->sws->bo_map(surf_bo,
BRW_DATA_OTHER,
GL_FALSE);
surfoff = surf_bo->offset[0];

sprintf(name, "WM SS%d", i);
@@ -144,7 +146,9 @@ static void dump_sf_viewport_state(struct brw_context *brw)
if (brw->sf.vp_bo == NULL)
return;

vp = (struct brw_sf_viewport *)brw->sws->bo_map(brw->sf.vp_bo, GL_FALSE);
vp = (struct brw_sf_viewport *)brw->sws->bo_map(brw->sf.vp_bo,
BRW_DATA_OTHER,
GL_FALSE);
vp_off = brw->sf.vp_bo->offset[0];

state_out(name, vp, vp_off, 0, "m00 = %f\n", vp->viewport.m00);
@@ -172,7 +176,9 @@ static void brw_debug_prog(struct brw_winsys_screen *sws,
if (prog == NULL)
return;

data = (uint32_t *)sws->bo_map(prog, GL_FALSE);
data = (uint32_t *)sws->bo_map(prog,
BRW_DATA_OTHER,
GL_FALSE);

for (i = 0; i < prog->size / 4 / 4; i++) {
debug_printf("%8s: 0x%08x: 0x%08x 0x%08x 0x%08x 0x%08x\n",

+ 47
- 22
src/gallium/drivers/i965/brw_winsys.h View File

@@ -44,21 +44,6 @@ struct brw_winsys_buffer {
unsigned size;
};

/* Describe the usage of a particular buffer in a relocation. The DRM
* winsys will translate these back to GEM read/write domain flags.
*/
enum brw_buffer_usage {
BRW_USAGE_STATE, /* INSTRUCTION, 0 */
BRW_USAGE_QUERY_RESULT, /* INSTRUCTION, INSTRUCTION */
BRW_USAGE_RENDER_TARGET, /* RENDER, 0 */
BRW_USAGE_DEPTH_BUFFER, /* RENDER, RENDER */
BRW_USAGE_BLIT_SOURCE, /* RENDER, 0 */
BRW_USAGE_BLIT_DEST, /* RENDER, RENDER */
BRW_USAGE_SAMPLER, /* SAMPLER, 0 */
BRW_USAGE_VERTEX, /* VERTEX, 0 */
BRW_USAGE_SCRATCH, /* 0, 0 */
BRW_USAGE_MAX
};

/* Should be possible to validate usages above against buffer creation
* types, below:
@@ -73,12 +58,53 @@ enum brw_buffer_type
BRW_BUFFER_TYPE_SHADER_CONSTANTS,
BRW_BUFFER_TYPE_SHADER_SCRATCH,
BRW_BUFFER_TYPE_BATCH,
BRW_BUFFER_TYPE_STATE_CACHE,
BRW_BUFFER_TYPE_GENERAL_STATE,
BRW_BUFFER_TYPE_SURFACE_STATE,
BRW_BUFFER_TYPE_PIXEL, /* image uploads, pbo's, etc */
BRW_BUFFER_TYPE_GENERIC, /* unknown */
BRW_BUFFER_TYPE_MAX /* Count of possible values */
};


/* Describe the usage of a particular buffer in a relocation. The DRM
* winsys will translate these back to GEM read/write domain flags.
*/
enum brw_buffer_usage {
BRW_USAGE_STATE, /* INSTRUCTION, 0 */
BRW_USAGE_QUERY_RESULT, /* INSTRUCTION, INSTRUCTION */
BRW_USAGE_RENDER_TARGET, /* RENDER, 0 */
BRW_USAGE_DEPTH_BUFFER, /* RENDER, RENDER */
BRW_USAGE_BLIT_SOURCE, /* RENDER, 0 */
BRW_USAGE_BLIT_DEST, /* RENDER, RENDER */
BRW_USAGE_SAMPLER, /* SAMPLER, 0 */
BRW_USAGE_VERTEX, /* VERTEX, 0 */
BRW_USAGE_SCRATCH, /* 0, 0 */
BRW_USAGE_MAX
};

enum brw_buffer_data_type {
BRW_DATA_GS_CC_VP,
BRW_DATA_GS_CC_UNIT,
BRW_DATA_GS_WM_PROG,
BRW_DATA_GS_SAMPLER_DEFAULT_COLOR,
BRW_DATA_GS_SAMPLER,
BRW_DATA_GS_WM_UNIT,
BRW_DATA_GS_SF_PROG,
BRW_DATA_GS_SF_VP,
BRW_DATA_GS_SF_UNIT,
BRW_DATA_GS_VS_UNIT,
BRW_DATA_GS_VS_PROG,
BRW_DATA_GS_GS_UNIT,
BRW_DATA_GS_GS_PROG,
BRW_DATA_GS_CLIP_VP,
BRW_DATA_GS_CLIP_UNIT,
BRW_DATA_GS_CLIP_PROG,
BRW_DATA_SS_SURFACE,
BRW_DATA_SS_SURF_BIND,
BRW_DATA_OTHER,
BRW_DATA_MAX
};

struct brw_winsys_screen {


@@ -113,9 +139,10 @@ struct brw_winsys_screen {
unsigned bytes_used );

int (*bo_subdata)(struct brw_winsys_buffer *buffer,
size_t offset,
size_t size,
const void *data);
enum brw_buffer_data_type data_type,
size_t offset,
size_t size,
const void *data);

boolean (*bo_is_busy)(struct brw_winsys_buffer *buffer);
boolean (*bo_references)(struct brw_winsys_buffer *a,
@@ -132,6 +159,7 @@ struct brw_winsys_screen {
* Map a buffer.
*/
void *(*bo_map)(struct brw_winsys_buffer *buffer,
enum brw_buffer_data_type data_type,
boolean write);

/**
@@ -140,9 +168,6 @@ struct brw_winsys_screen {
void (*bo_unmap)(struct brw_winsys_buffer *buffer);
/*@}*/




/**
* Destroy the winsys.
*/

+ 62
- 33
src/gallium/winsys/drm/i965/xlib/xlib_i965.c View File

@@ -82,31 +82,57 @@ xlib_brw_buffer( struct brw_winsys_buffer *buffer )


const char *names[BRW_BUFFER_TYPE_MAX] = {
"texture",
"scanout",
"vertex",
"curbe",
"query",
"shader_constants",
"wm_scratch",
"batch",
"state_cache",
"pixel",
"generic",
"TEXTURE",
"SCANOUT",
"VERTEX",
"CURBE",
"QUERY",
"SHADER_CONSTANTS",
"WM_SCRATCH",
"BATCH",
"GENERAL_STATE",
"SURFACE_STATE",
"PIXEL",
"GENERIC",
};

const char *usages[BRW_USAGE_MAX] = {
"state",
"query_result",
"render_target",
"depth_buffer",
"blit_source",
"blit_dest",
"sampler",
"vertex",
"scratch"
"STATE",
"QUERY_RESULT",
"RENDER_TARGET",
"DEPTH_BUFFER",
"BLIT_SOURCE",
"BLIT_DEST",
"SAMPLER",
"VERTEX",
"SCRATCH"
};


const char *data_types[BRW_DATA_MAX] =
{
"GS: CC_VP",
"GS: CC_UNIT",
"GS: WM_PROG",
"GS: SAMPLER_DEFAULT_COLOR",
"GS: SAMPLER",
"GS: WM_UNIT",
"GS: SF_PROG",
"GS: SF_VP",
"GS: SF_UNIT",
"GS: VS_UNIT",
"GS: VS_PROG",
"GS: GS_UNIT",
"GS: GS_PROG",
"GS: CLIP_VP",
"GS: CLIP_UNIT",
"GS: CLIP_PROG",
"SS: SURFACE",
"SS: SURF_BIND",
"(untyped)"
};


static struct brw_winsys_buffer *
xlib_brw_bo_alloc( struct brw_winsys_screen *sws,
enum brw_buffer_type type,
@@ -116,8 +142,8 @@ xlib_brw_bo_alloc( struct brw_winsys_screen *sws,
struct xlib_brw_winsys *xbw = xlib_brw_winsys(sws);
struct xlib_brw_buffer *buf;

debug_printf("%s type %d sz %d align %d\n",
__FUNCTION__, type, size, alignment );
debug_printf("%s type %s sz %d align %d\n",
__FUNCTION__, names[type], size, alignment );

buf = CALLOC_STRUCT(xlib_brw_buffer);
if (!buf)
@@ -168,10 +194,10 @@ xlib_brw_bo_unreference( struct brw_winsys_buffer *buffer )

static int
xlib_brw_bo_emit_reloc( struct brw_winsys_buffer *buffer,
enum brw_buffer_usage usage,
unsigned delta,
unsigned offset,
struct brw_winsys_buffer *buffer2)
enum brw_buffer_usage usage,
unsigned delta,
unsigned offset,
struct brw_winsys_buffer *buffer2)
{
struct xlib_brw_buffer *buf = xlib_brw_buffer(buffer);
struct xlib_brw_buffer *buf2 = xlib_brw_buffer(buffer2);
@@ -197,15 +223,16 @@ xlib_brw_bo_exec( struct brw_winsys_buffer *buffer,

static int
xlib_brw_bo_subdata(struct brw_winsys_buffer *buffer,
size_t offset,
size_t size,
const void *data)
enum brw_buffer_data_type data_type,
size_t offset,
size_t size,
const void *data)
{
struct xlib_brw_buffer *buf = xlib_brw_buffer(buffer);

debug_printf("%s buf %p off %d sz %d data %p\n",
debug_printf("%s buf %p off %d sz %d data %p %s\n",
__FUNCTION__,
(void *)buffer, offset, size, data);
(void *)buffer, offset, size, data, data_types[data_type]);

memcpy(buf->virtual + offset, data, size);
return 0;
@@ -247,12 +274,14 @@ xlib_brw_check_aperture_space( struct brw_winsys_screen *iws,

static void *
xlib_brw_bo_map(struct brw_winsys_buffer *buffer,
enum brw_buffer_data_type data_type,
boolean write)
{
struct xlib_brw_buffer *buf = xlib_brw_buffer(buffer);

debug_printf("%s %p %s\n", __FUNCTION__, (void *)buffer,
write ? "read/write" : "read");
debug_printf("%s %p %s %s\n", __FUNCTION__, (void *)buffer,
write ? "read/write" : "read",
write ? data_types[data_type] : "");

buf->map_count++;
return buf->virtual;

Loading…
Cancel
Save