Browse Source

i915g: Rework debug print code

tags/mesa-7.9-rc1
Jakob Bornecrantz 15 years ago
parent
commit
abbb1bde06

+ 7
- 10
src/gallium/drivers/i915/i915_blit.c View File

@@ -31,7 +31,6 @@
#include "i915_batch.h"
#include "i915_debug.h"

#define FILE_DEBUG_FLAG DEBUG_BLIT

void
i915_fill_blit(struct i915_context *i915,
@@ -47,10 +46,8 @@ i915_fill_blit(struct i915_context *i915,
unsigned BR13, CMD;


I915_DBG(i915,
"%s dst:buf(%p)/%d+%d %d,%d sz:%dx%d\n",
__FUNCTION__,
dst_buffer, dst_pitch, dst_offset, x, y, w, h);
I915_DBG(DBG_BLIT, "%s dst:buf(%p)/%d+%d %d,%d sz:%dx%d\n",
__FUNCTION__, dst_buffer, dst_pitch, dst_offset, x, y, w, h);

switch (cpp) {
case 1:
@@ -100,11 +97,11 @@ i915_copy_blit(struct i915_context *i915,
int dst_x2 = dst_x + w;


I915_DBG(i915,
"%s src:buf(%p)/%d+%d %d,%d dst:buf(%p)/%d+%d %d,%d sz:%dx%d\n",
__FUNCTION__,
src_buffer, src_pitch, src_offset, src_x, src_y,
dst_buffer, dst_pitch, dst_offset, dst_x, dst_y, w, h);
I915_DBG(DBG_BLIT,
"%s src:buf(%p)/%d+%d %d,%d dst:buf(%p)/%d+%d %d,%d sz:%dx%d\n",
__FUNCTION__,
src_buffer, src_pitch, src_offset, src_x, src_y,
dst_buffer, dst_pitch, dst_offset, dst_x, dst_y, w, h);

switch (cpp) {
case 1:

+ 0
- 2
src/gallium/drivers/i915/i915_context.h View File

@@ -237,8 +237,6 @@ struct i915_context

struct i915_state current;
unsigned hardware_dirty;
unsigned debug;
};

/* A flag for each state_tracker state object:

+ 89
- 0
src/gallium/drivers/i915/i915_debug.c View File

@@ -27,11 +27,37 @@

#include "i915_reg.h"
#include "i915_context.h"
#include "i915_screen.h"
#include "i915_debug.h"
#include "i915_debug_private.h"
#include "i915_batch.h"
#include "util/u_debug.h"



static const struct debug_named_value debug_options[] = {
{"blit", DBG_BLIT, "Print when using the 2d blitter"},
{"emit", DBG_EMIT, "State emit information"},
{"atoms", DBG_ATOMS, "Print dirty state atoms"},
{"flush", DBG_FLUSH, "Flushing information"},
{"texture", DBG_TEXTURE, "Texture information"},
{"constants", DBG_CONSTANTS, "Constant buffers"},
DEBUG_NAMED_VALUE_END
};

unsigned i915_debug = 0;

void i915_debug_init(struct i915_screen *screen)
{
i915_debug = debug_get_flags_option("I915_DEBUG", debug_options, 0);
}



/***********************************************************************
* Batchbuffer dumping
*/

static void
PRINTF(
struct debug_stream *stream,
@@ -896,3 +922,66 @@ i915_dump_batchbuffer( struct i915_winsys_batchbuffer *batch )
}



/***********************************************************************
* Dirty state atom dumping
*/

void
i915_dump_dirty(struct i915_context *i915, const char *func)
{
struct {
unsigned dirty;
const char *name;
} l[] = {
{I915_NEW_VIEWPORT, "viewport"},
{I915_NEW_RASTERIZER, "rasterizer"},
{I915_NEW_FS, "fs"},
{I915_NEW_BLEND, "blend"},
{I915_NEW_CLIP, "clip"},
{I915_NEW_SCISSOR, "scissor"},
{I915_NEW_STIPPLE, "stipple"},
{I915_NEW_FRAMEBUFFER, "framebuffer"},
{I915_NEW_ALPHA_TEST, "alpha_test"},
{I915_NEW_DEPTH_STENCIL, "depth_stencil"},
{I915_NEW_SAMPLER, "sampler"},
{I915_NEW_SAMPLER_VIEW, "sampler_view"},
{I915_NEW_CONSTANTS, "constants"},
{I915_NEW_VBO, "vbo"},
{I915_NEW_VS, "vs"},
{0, NULL},
};
int i;

debug_printf("%s: ", func);
for (i = 0; l[i].name; i++)
if (i915->dirty & l[i].dirty)
debug_printf("%s ", l[i].name);
debug_printf("\n");
}

void
i915_dump_hardware_dirty(struct i915_context *i915, const char *func)
{
struct {
unsigned dirty;
const char *name;
} l[] = {
{I915_HW_STATIC, "static"},
{I915_HW_DYNAMIC, "dynamic"},
{I915_HW_SAMPLER, "sampler"},
{I915_HW_MAP, "map"},
{I915_HW_PROGRAM, "program"},
{I915_HW_CONSTANTS, "constants"},
{I915_HW_IMMEDIATE, "immediate"},
{I915_HW_INVARIENT, "invarient"},
{0, NULL},
};
int i;

debug_printf("%s: ", func);
for (i = 0; l[i].name; i++)
if (i915->hardware_dirty & l[i].dirty)
debug_printf("%s ", l[i].name);
debug_printf("\n");
}

+ 25
- 63
src/gallium/drivers/i915/i915_debug.h View File

@@ -26,89 +26,51 @@
**************************************************************************/

/* Authors: Keith Whitwell <keith@tungstengraphics.com>
* Jakob Bornecrantz <wallbraker@gmail.com>
*/

#ifndef I915_DEBUG_H
#define I915_DEBUG_H

#include <stdarg.h>
#include "util/u_debug.h"

struct i915_screen;
struct i915_context;
struct i915_winsys_batchbuffer;

struct debug_stream
{
unsigned offset; /* current gtt offset */
char *ptr; /* pointer to gtt offset zero */
char *end; /* pointer to gtt offset zero */
unsigned print_addresses;
};


/* Internal functions
*/
void i915_disassemble_program(struct debug_stream *stream,
const unsigned *program, unsigned sz);

void i915_print_ureg(const char *msg, unsigned ureg);


#define DEBUG_BATCH 0x1
#define DEBUG_BLIT 0x2
#define DEBUG_BUFFER 0x4
#define DEBUG_CONSTANTS 0x8
#define DEBUG_CONTEXT 0x10
#define DEBUG_DRAW 0x20
#define DEBUG_DYNAMIC 0x40
#define DEBUG_FLUSH 0x80
#define DEBUG_MAP 0x100
#define DEBUG_PROGRAM 0x200
#define DEBUG_REGIONS 0x400
#define DEBUG_SAMPLER 0x800
#define DEBUG_STATIC 0x1000
#define DEBUG_SURFACE 0x2000
#define DEBUG_WINSYS 0x4000

#include "pipe/p_compiler.h"
#define DBG_BLIT 0x1
#define DBG_EMIT 0x2
#define DBG_ATOMS 0x4
#define DBG_FLUSH 0x8
#define DBG_TEXTURE 0x10
#define DBG_CONSTANTS 0x20

#if defined(DEBUG) && defined(FILE_DEBUG_FLAG)
extern unsigned i915_debug;

#include "util/u_simple_screen.h"
static INLINE boolean
I915_DBG_ON(unsigned flags)
{
return i915_debug & flags;
}

static INLINE void
I915_DBG(
struct i915_context *i915,
const char *fmt,
... )
I915_DBG(unsigned flags, const char *fmt, ...)
{
if ((i915)->debug & FILE_DEBUG_FLAG) {
if (I915_DBG_ON(flags)) {
va_list args;

va_start( args, fmt );
debug_vprintf( fmt, args );
va_end( args );
va_start(args, fmt);
debug_vprintf(fmt, args);
va_end(args);
}
}

#else

static INLINE void
I915_DBG(
struct i915_context *i915,
const char *fmt,
... )
{
(void) i915;
(void) fmt;
}

#endif


struct i915_winsys_batchbuffer;
void i915_debug_init(struct i915_screen *i915);

void i915_dump_batchbuffer( struct i915_winsys_batchbuffer *i915 );
void i915_dump_batchbuffer(struct i915_winsys_batchbuffer *i915);

void i915_debug_init( struct i915_context *i915 );
void i915_dump_dirty(struct i915_context *i915, const char *func);

void i915_dump_hardware_dirty(struct i915_context *i915, const char *func);

#endif

+ 1
- 0
src/gallium/drivers/i915/i915_debug_fp.c View File

@@ -28,6 +28,7 @@

#include "i915_reg.h"
#include "i915_debug.h"
#include "i915_debug_private.h"
#include "util/u_debug.h"



+ 45
- 0
src/gallium/drivers/i915/i915_debug_private.h View File

@@ -0,0 +1,45 @@
/**************************************************************************
*
* Copyright 2007 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.
*
**************************************************************************/

/* Authors: Keith Whitwell <keith@tungstengraphics.com>
*/

#ifndef I915_DEBUG_PRIVATE_H
#define I915_DEBUG_PRIVATE_H

struct debug_stream
{
unsigned offset; /* current gtt offset */
char *ptr; /* pointer to gtt offset zero */
char *end; /* pointer to gtt offset zero */
unsigned print_addresses;
};

void i915_disassemble_program(struct debug_stream *stream,
const unsigned *program, unsigned sz);

#endif

+ 3
- 2
src/gallium/drivers/i915/i915_flush.c View File

@@ -35,6 +35,7 @@
#include "i915_context.h"
#include "i915_reg.h"
#include "i915_batch.h"
#include "i915_debug.h"


static void i915_flush( struct pipe_context *pipe,
@@ -76,9 +77,9 @@ static void i915_flush( struct pipe_context *pipe,
*/
FLUSH_BATCH(fence);
i915->vbo_flushed = 1;
}


I915_DBG(DBG_FLUSH, "%s: #####\n", __FUNCTION__);
}

void i915_init_flush_functions( struct i915_context *i915 )
{

+ 3
- 0
src/gallium/drivers/i915/i915_screen.c View File

@@ -31,6 +31,7 @@
#include "util/u_string.h"

#include "i915_reg.h"
#include "i915_debug.h"
#include "i915_context.h"
#include "i915_screen.h"
#include "i915_surface.h"
@@ -330,5 +331,7 @@ i915_screen_create(struct i915_winsys *iws)
i915_init_screen_resource_functions(is);
i915_init_screen_surface_functions(is);

i915_debug_init(is);

return &is->base;
}

+ 4
- 0
src/gallium/drivers/i915/i915_state_derived.c View File

@@ -32,6 +32,7 @@
#include "draw/draw_vertex.h"
#include "i915_context.h"
#include "i915_state.h"
#include "i915_debug.h"
#include "i915_reg.h"


@@ -205,6 +206,9 @@ void i915_update_derived(struct i915_context *i915)
{
int i;

if (I915_DBG_ON(DBG_ATOMS))
i915_dump_dirty(i915, __FUNCTION__);

for (i = 0; atoms[i]; i++)
if (atoms[i]->dirty & i915->dirty)
atoms[i]->update(i915);

+ 0
- 1
src/gallium/drivers/i915/i915_state_dynamic.c View File

@@ -34,7 +34,6 @@
#include "util/u_memory.h"
#include "util/u_pack_color.h"

#define FILE_DEBUG_FLAG DEBUG_STATE

/* State that we have chosen to store in the DYNAMIC segment of the
* i915 indirect state mechanism.

+ 13
- 4
src/gallium/drivers/i915/i915_state_emit.c View File

@@ -29,6 +29,7 @@
#include "i915_reg.h"
#include "i915_context.h"
#include "i915_batch.h"
#include "i915_debug.h"
#include "i915_reg.h"
#include "i915_resource.h"

@@ -111,15 +112,20 @@ i915_emit_hardware_state(struct i915_context *i915 )
3
) * 3/2; /* plus 50% margin */

#if 0
debug_printf("i915_emit_hardware_state: %d dwords, %d relocs\n", dwords, relocs);
#endif
uintptr_t save_ptr;
size_t save_relocs;

if (I915_DBG_ON(DBG_ATOMS))
i915_dump_hardware_dirty(i915, __FUNCTION__);

if(!BEGIN_BATCH(dwords, relocs)) {
FLUSH_BATCH(NULL);
assert(BEGIN_BATCH(dwords, relocs));
}

save_ptr = (uintptr_t)i915->batch->ptr;
save_relocs = i915->batch->relocs;

/* 14 dwords, 0 relocs */
if (i915->hardware_dirty & I915_HW_INVARIENT)
{
@@ -399,6 +405,9 @@ i915_emit_hardware_state(struct i915_context *i915 )
OUT_BATCH(0);
}

I915_DBG(DBG_EMIT, "%s: used %d dwords, %d relocs\n", __FUNCTION__,
((uintptr_t)i915->batch->ptr - save_ptr) / 4,
i915->batch->relocs - save_relocs);

i915->hardware_dirty = 0;
}

Loading…
Cancel
Save