summaryrefslogtreecommitdiff
path: root/src/gallium/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/drivers')
-rw-r--r--src/gallium/drivers/cell/spu/spu_exec.c21
-rw-r--r--src/gallium/drivers/i915simple/i915_fpc_translate.c16
-rw-r--r--src/gallium/drivers/softpipe/sp_setup.c6
-rw-r--r--src/gallium/drivers/trace/tr_context.c142
-rw-r--r--src/gallium/drivers/trace/tr_context.h5
-rw-r--r--src/gallium/drivers/trace/tr_dump.c11
-rw-r--r--src/gallium/drivers/trace/tr_screen.c13
-rw-r--r--src/gallium/drivers/trace/tr_state.c15
-rw-r--r--src/gallium/drivers/trace/tr_winsys.c68
9 files changed, 139 insertions, 158 deletions
diff --git a/src/gallium/drivers/cell/spu/spu_exec.c b/src/gallium/drivers/cell/spu/spu_exec.c
index 96393732ed..42e5022f30 100644
--- a/src/gallium/drivers/cell/spu/spu_exec.c
+++ b/src/gallium/drivers/cell/spu/spu_exec.c
@@ -603,8 +603,8 @@ store_dest(
* Kill fragment if any of the four values is less than zero.
*/
static void
-exec_kilp(struct spu_exec_machine *mach,
- const struct tgsi_full_instruction *inst)
+exec_kil(struct spu_exec_machine *mach,
+ const struct tgsi_full_instruction *inst)
{
uint uniquemask;
uint chan_index;
@@ -640,6 +640,20 @@ exec_kilp(struct spu_exec_machine *mach,
mach->Temps[TEMP_KILMASK_I].xyzw[TEMP_KILMASK_C].u[0] |= kilmask;
}
+/**
+ * Execute NVIDIA-style KIL which is predicated by a condition code.
+ * Kill fragment if the condition code is TRUE.
+ */
+static void
+exec_kilp(struct tgsi_exec_machine *mach,
+ const struct tgsi_full_instruction *inst)
+{
+ uint kilmask = 0; /* bit 0 = pixel 0, bit 1 = pixel 1, etc */
+
+ /* TODO: build kilmask from CC mask */
+
+ mach->Temps[TEMP_KILMASK_I].xyzw[TEMP_KILMASK_C].u[0] |= kilmask;
+}
/*
* Fetch a texel using STR texture coordinates.
@@ -1336,8 +1350,7 @@ exec_instruction(
break;
case TGSI_OPCODE_KIL:
- /* for enabled ExecMask bits, set the killed bit */
- mach->Temps[TEMP_KILMASK_I].xyzw[TEMP_KILMASK_C].u[0] |= mach->ExecMask;
+ exec_kil (mach, inst);
break;
case TGSI_OPCODE_PK2H:
diff --git a/src/gallium/drivers/i915simple/i915_fpc_translate.c b/src/gallium/drivers/i915simple/i915_fpc_translate.c
index 04507ab8ad..64432982c4 100644
--- a/src/gallium/drivers/i915simple/i915_fpc_translate.c
+++ b/src/gallium/drivers/i915simple/i915_fpc_translate.c
@@ -560,18 +560,6 @@ i915_translate_instruction(struct i915_fp_compile *p,
break;
case TGSI_OPCODE_KIL:
- /* unconditional kill */
- assert(0); /* not tested yet */
-#if 0
- src0 = src_vector(p, &inst->FullSrcRegisters[0]);
- tmp = i915_get_utemp(p);
-
- i915_emit_texld(p, tmp, A0_DEST_CHANNEL_ALL, /* use a dummy dest reg */
- 0, src0, T0_TEXKILL);
-#endif
- break;
-
- case TGSI_OPCODE_KILP:
/* kill if src[0].x < 0 || src[0].y < 0 ... */
src0 = src_vector(p, &inst->FullSrcRegisters[0]);
tmp = i915_get_utemp(p);
@@ -584,6 +572,10 @@ i915_translate_instruction(struct i915_fp_compile *p,
T0_TEXKILL); /* opcode */
break;
+ case TGSI_OPCODE_KILP:
+ assert(0); /* not tested yet */
+ break;
+
case TGSI_OPCODE_LG2:
src0 = src_vector(p, &inst->FullSrcRegisters[0]);
diff --git a/src/gallium/drivers/softpipe/sp_setup.c b/src/gallium/drivers/softpipe/sp_setup.c
index b48eec730b..b7f2f16307 100644
--- a/src/gallium/drivers/softpipe/sp_setup.c
+++ b/src/gallium/drivers/softpipe/sp_setup.c
@@ -39,6 +39,7 @@
#include "sp_quad.h"
#include "sp_state.h"
#include "sp_prim_setup.h"
+#include "draw/draw_context.h"
#include "draw/draw_private.h"
#include "draw/draw_vertex.h"
#include "pipe/p_util.h"
@@ -1272,10 +1273,7 @@ void setup_prepare( struct setup_context *setup )
}
/* Note: nr_attrs is only used for debugging (vertex printing) */
- {
- const struct sp_fragment_shader *fs = setup->softpipe->fs;
- setup->quad.nr_attrs = fs->info.num_inputs + 1; /* +1 for vert pos */
- }
+ setup->quad.nr_attrs = draw_num_vs_outputs(sp->draw);
sp->quad.first->begin(sp->quad.first);
diff --git a/src/gallium/drivers/trace/tr_context.c b/src/gallium/drivers/trace/tr_context.c
index 47a217ec7c..f82126370c 100644
--- a/src/gallium/drivers/trace/tr_context.c
+++ b/src/gallium/drivers/trace/tr_context.c
@@ -40,8 +40,7 @@ trace_context_set_edgeflags(struct pipe_context *_pipe,
const unsigned *bitfield)
{
struct trace_context *tr_ctx = trace_context(_pipe);
- struct trace_screen *tr_scr = trace_screen(_pipe->screen);
- struct trace_stream *stream = tr_scr->stream;
+ struct trace_stream *stream = tr_ctx->stream;
struct pipe_context *pipe = tr_ctx->pipe;
trace_dump_call_begin(stream, "pipe_context", "set_edgeflags");
@@ -61,8 +60,7 @@ trace_context_draw_arrays(struct pipe_context *_pipe,
unsigned mode, unsigned start, unsigned count)
{
struct trace_context *tr_ctx = trace_context(_pipe);
- struct trace_screen *tr_scr = trace_screen(_pipe->screen);
- struct trace_stream *stream = tr_scr->stream;
+ struct trace_stream *stream = tr_ctx->stream;
struct pipe_context *pipe = tr_ctx->pipe;
boolean result;
@@ -90,8 +88,7 @@ trace_context_draw_elements(struct pipe_context *_pipe,
unsigned mode, unsigned start, unsigned count)
{
struct trace_context *tr_ctx = trace_context(_pipe);
- struct trace_screen *tr_scr = trace_screen(_pipe->screen);
- struct trace_stream *stream = tr_scr->stream;
+ struct trace_stream *stream = tr_ctx->stream;
struct pipe_context *pipe = tr_ctx->pipe;
boolean result;
@@ -125,8 +122,7 @@ trace_context_draw_range_elements(struct pipe_context *_pipe,
unsigned count)
{
struct trace_context *tr_ctx = trace_context(_pipe);
- struct trace_screen *tr_scr = trace_screen(_pipe->screen);
- struct trace_stream *stream = tr_scr->stream;
+ struct trace_stream *stream = tr_ctx->stream;
struct pipe_context *pipe = tr_ctx->pipe;
boolean result;
@@ -159,8 +155,7 @@ trace_context_create_query(struct pipe_context *_pipe,
unsigned query_type)
{
struct trace_context *tr_ctx = trace_context(_pipe);
- struct trace_screen *tr_scr = trace_screen(_pipe->screen);
- struct trace_stream *stream = tr_scr->stream;
+ struct trace_stream *stream = tr_ctx->stream;
struct pipe_context *pipe = tr_ctx->pipe;
struct pipe_query *result;
@@ -184,8 +179,7 @@ trace_context_destroy_query(struct pipe_context *_pipe,
struct pipe_query *query)
{
struct trace_context *tr_ctx = trace_context(_pipe);
- struct trace_screen *tr_scr = trace_screen(_pipe->screen);
- struct trace_stream *stream = tr_scr->stream;
+ struct trace_stream *stream = tr_ctx->stream;
struct pipe_context *pipe = tr_ctx->pipe;
trace_dump_call_begin(stream, "pipe_context", "destroy_query");
@@ -204,8 +198,7 @@ trace_context_begin_query(struct pipe_context *_pipe,
struct pipe_query *query)
{
struct trace_context *tr_ctx = trace_context(_pipe);
- struct trace_screen *tr_scr = trace_screen(_pipe->screen);
- struct trace_stream *stream = tr_scr->stream;
+ struct trace_stream *stream = tr_ctx->stream;
struct pipe_context *pipe = tr_ctx->pipe;
trace_dump_call_begin(stream, "pipe_context", "begin_query");
@@ -224,8 +217,7 @@ trace_context_end_query(struct pipe_context *_pipe,
struct pipe_query *query)
{
struct trace_context *tr_ctx = trace_context(_pipe);
- struct trace_screen *tr_scr = trace_screen(_pipe->screen);
- struct trace_stream *stream = tr_scr->stream;
+ struct trace_stream *stream = tr_ctx->stream;
struct pipe_context *pipe = tr_ctx->pipe;
trace_dump_call_begin(stream, "pipe_context", "end_query");
@@ -246,8 +238,7 @@ trace_context_get_query_result(struct pipe_context *_pipe,
uint64 *presult)
{
struct trace_context *tr_ctx = trace_context(_pipe);
- struct trace_screen *tr_scr = trace_screen(_pipe->screen);
- struct trace_stream *stream = tr_scr->stream;
+ struct trace_stream *stream = tr_ctx->stream;
struct pipe_context *pipe = tr_ctx->pipe;
uint64 result;
boolean _result;
@@ -273,8 +264,7 @@ trace_context_create_blend_state(struct pipe_context *_pipe,
const struct pipe_blend_state *state)
{
struct trace_context *tr_ctx = trace_context(_pipe);
- struct trace_screen *tr_scr = trace_screen(_pipe->screen);
- struct trace_stream *stream = tr_scr->stream;
+ struct trace_stream *stream = tr_ctx->stream;
struct pipe_context *pipe = tr_ctx->pipe;
void * result;
@@ -285,6 +275,8 @@ trace_context_create_blend_state(struct pipe_context *_pipe,
result = pipe->create_blend_state(pipe, state);;
+ trace_dump_ret(stream, ptr, result);
+
trace_dump_call_end(stream);
return result;
@@ -296,8 +288,7 @@ trace_context_bind_blend_state(struct pipe_context *_pipe,
void *state)
{
struct trace_context *tr_ctx = trace_context(_pipe);
- struct trace_screen *tr_scr = trace_screen(_pipe->screen);
- struct trace_stream *stream = tr_scr->stream;
+ struct trace_stream *stream = tr_ctx->stream;
struct pipe_context *pipe = tr_ctx->pipe;
trace_dump_call_begin(stream, "pipe_context", "bind_blend_state");
@@ -316,8 +307,7 @@ trace_context_delete_blend_state(struct pipe_context *_pipe,
void *state)
{
struct trace_context *tr_ctx = trace_context(_pipe);
- struct trace_screen *tr_scr = trace_screen(_pipe->screen);
- struct trace_stream *stream = tr_scr->stream;
+ struct trace_stream *stream = tr_ctx->stream;
struct pipe_context *pipe = tr_ctx->pipe;
trace_dump_call_begin(stream, "pipe_context", "delete_blend_state");
@@ -336,8 +326,7 @@ trace_context_create_sampler_state(struct pipe_context *_pipe,
const struct pipe_sampler_state *state)
{
struct trace_context *tr_ctx = trace_context(_pipe);
- struct trace_screen *tr_scr = trace_screen(_pipe->screen);
- struct trace_stream *stream = tr_scr->stream;
+ struct trace_stream *stream = tr_ctx->stream;
struct pipe_context *pipe = tr_ctx->pipe;
void * result;
@@ -361,8 +350,7 @@ trace_context_bind_sampler_states(struct pipe_context *_pipe,
unsigned num_states, void **states)
{
struct trace_context *tr_ctx = trace_context(_pipe);
- struct trace_screen *tr_scr = trace_screen(_pipe->screen);
- struct trace_stream *stream = tr_scr->stream;
+ struct trace_stream *stream = tr_ctx->stream;
struct pipe_context *pipe = tr_ctx->pipe;
trace_dump_call_begin(stream, "pipe_context", "bind_sampler_states");
@@ -382,8 +370,7 @@ trace_context_delete_sampler_state(struct pipe_context *_pipe,
void *state)
{
struct trace_context *tr_ctx = trace_context(_pipe);
- struct trace_screen *tr_scr = trace_screen(_pipe->screen);
- struct trace_stream *stream = tr_scr->stream;
+ struct trace_stream *stream = tr_ctx->stream;
struct pipe_context *pipe = tr_ctx->pipe;
trace_dump_call_begin(stream, "pipe_context", "delete_sampler_state");
@@ -402,8 +389,7 @@ trace_context_create_rasterizer_state(struct pipe_context *_pipe,
const struct pipe_rasterizer_state *state)
{
struct trace_context *tr_ctx = trace_context(_pipe);
- struct trace_screen *tr_scr = trace_screen(_pipe->screen);
- struct trace_stream *stream = tr_scr->stream;
+ struct trace_stream *stream = tr_ctx->stream;
struct pipe_context *pipe = tr_ctx->pipe;
void * result;
@@ -427,8 +413,7 @@ trace_context_bind_rasterizer_state(struct pipe_context *_pipe,
void *state)
{
struct trace_context *tr_ctx = trace_context(_pipe);
- struct trace_screen *tr_scr = trace_screen(_pipe->screen);
- struct trace_stream *stream = tr_scr->stream;
+ struct trace_stream *stream = tr_ctx->stream;
struct pipe_context *pipe = tr_ctx->pipe;
trace_dump_call_begin(stream, "pipe_context", "bind_rasterizer_state");
@@ -447,8 +432,7 @@ trace_context_delete_rasterizer_state(struct pipe_context *_pipe,
void *state)
{
struct trace_context *tr_ctx = trace_context(_pipe);
- struct trace_screen *tr_scr = trace_screen(_pipe->screen);
- struct trace_stream *stream = tr_scr->stream;
+ struct trace_stream *stream = tr_ctx->stream;
struct pipe_context *pipe = tr_ctx->pipe;
trace_dump_call_begin(stream, "pipe_context", "delete_rasterizer_state");
@@ -467,8 +451,7 @@ trace_context_create_depth_stencil_alpha_state(struct pipe_context *_pipe,
const struct pipe_depth_stencil_alpha_state *state)
{
struct trace_context *tr_ctx = trace_context(_pipe);
- struct trace_screen *tr_scr = trace_screen(_pipe->screen);
- struct trace_stream *stream = tr_scr->stream;
+ struct trace_stream *stream = tr_ctx->stream;
struct pipe_context *pipe = tr_ctx->pipe;
void * result;
@@ -476,8 +459,10 @@ trace_context_create_depth_stencil_alpha_state(struct pipe_context *_pipe,
result = pipe->create_depth_stencil_alpha_state(pipe, state);;
- trace_dump_ret(stream, ptr, result);
+ trace_dump_arg(stream, ptr, pipe);
trace_dump_arg(stream, depth_stencil_alpha_state, state);
+
+ trace_dump_ret(stream, ptr, result);
trace_dump_call_end(stream);
@@ -490,8 +475,7 @@ trace_context_bind_depth_stencil_alpha_state(struct pipe_context *_pipe,
void *state)
{
struct trace_context *tr_ctx = trace_context(_pipe);
- struct trace_screen *tr_scr = trace_screen(_pipe->screen);
- struct trace_stream *stream = tr_scr->stream;
+ struct trace_stream *stream = tr_ctx->stream;
struct pipe_context *pipe = tr_ctx->pipe;
trace_dump_call_begin(stream, "pipe_context", "bind_depth_stencil_alpha_state");
@@ -510,8 +494,7 @@ trace_context_delete_depth_stencil_alpha_state(struct pipe_context *_pipe,
void *state)
{
struct trace_context *tr_ctx = trace_context(_pipe);
- struct trace_screen *tr_scr = trace_screen(_pipe->screen);
- struct trace_stream *stream = tr_scr->stream;
+ struct trace_stream *stream = tr_ctx->stream;
struct pipe_context *pipe = tr_ctx->pipe;
trace_dump_call_begin(stream, "pipe_context", "delete_depth_stencil_alpha_state");
@@ -530,8 +513,7 @@ trace_context_create_fs_state(struct pipe_context *_pipe,
const struct pipe_shader_state *state)
{
struct trace_context *tr_ctx = trace_context(_pipe);
- struct trace_screen *tr_scr = trace_screen(_pipe->screen);
- struct trace_stream *stream = tr_scr->stream;
+ struct trace_stream *stream = tr_ctx->stream;
struct pipe_context *pipe = tr_ctx->pipe;
void * result;
@@ -555,8 +537,7 @@ trace_context_bind_fs_state(struct pipe_context *_pipe,
void *state)
{
struct trace_context *tr_ctx = trace_context(_pipe);
- struct trace_screen *tr_scr = trace_screen(_pipe->screen);
- struct trace_stream *stream = tr_scr->stream;
+ struct trace_stream *stream = tr_ctx->stream;
struct pipe_context *pipe = tr_ctx->pipe;
trace_dump_call_begin(stream, "pipe_context", "bind_fs_state");
@@ -575,8 +556,7 @@ trace_context_delete_fs_state(struct pipe_context *_pipe,
void *state)
{
struct trace_context *tr_ctx = trace_context(_pipe);
- struct trace_screen *tr_scr = trace_screen(_pipe->screen);
- struct trace_stream *stream = tr_scr->stream;
+ struct trace_stream *stream = tr_ctx->stream;
struct pipe_context *pipe = tr_ctx->pipe;
trace_dump_call_begin(stream, "pipe_context", "delete_fs_state");
@@ -595,8 +575,7 @@ trace_context_create_vs_state(struct pipe_context *_pipe,
const struct pipe_shader_state *state)
{
struct trace_context *tr_ctx = trace_context(_pipe);
- struct trace_screen *tr_scr = trace_screen(_pipe->screen);
- struct trace_stream *stream = tr_scr->stream;
+ struct trace_stream *stream = tr_ctx->stream;
struct pipe_context *pipe = tr_ctx->pipe;
void * result;
@@ -620,8 +599,7 @@ trace_context_bind_vs_state(struct pipe_context *_pipe,
void *state)
{
struct trace_context *tr_ctx = trace_context(_pipe);
- struct trace_screen *tr_scr = trace_screen(_pipe->screen);
- struct trace_stream *stream = tr_scr->stream;
+ struct trace_stream *stream = tr_ctx->stream;
struct pipe_context *pipe = tr_ctx->pipe;
trace_dump_call_begin(stream, "pipe_context", "bind_vs_state");
@@ -640,8 +618,7 @@ trace_context_delete_vs_state(struct pipe_context *_pipe,
void *state)
{
struct trace_context *tr_ctx = trace_context(_pipe);
- struct trace_screen *tr_scr = trace_screen(_pipe->screen);
- struct trace_stream *stream = tr_scr->stream;
+ struct trace_stream *stream = tr_ctx->stream;
struct pipe_context *pipe = tr_ctx->pipe;
trace_dump_call_begin(stream, "pipe_context", "delete_vs_state");
@@ -660,8 +637,7 @@ trace_context_set_blend_color(struct pipe_context *_pipe,
const struct pipe_blend_color *state)
{
struct trace_context *tr_ctx = trace_context(_pipe);
- struct trace_screen *tr_scr = trace_screen(_pipe->screen);
- struct trace_stream *stream = tr_scr->stream;
+ struct trace_stream *stream = tr_ctx->stream;
struct pipe_context *pipe = tr_ctx->pipe;
trace_dump_call_begin(stream, "pipe_context", "set_blend_color");
@@ -680,8 +656,7 @@ trace_context_set_clip_state(struct pipe_context *_pipe,
const struct pipe_clip_state *state)
{
struct trace_context *tr_ctx = trace_context(_pipe);
- struct trace_screen *tr_scr = trace_screen(_pipe->screen);
- struct trace_stream *stream = tr_scr->stream;
+ struct trace_stream *stream = tr_ctx->stream;
struct pipe_context *pipe = tr_ctx->pipe;
trace_dump_call_begin(stream, "pipe_context", "set_clip_state");
@@ -701,8 +676,7 @@ trace_context_set_constant_buffer(struct pipe_context *_pipe,
const struct pipe_constant_buffer *buffer)
{
struct trace_context *tr_ctx = trace_context(_pipe);
- struct trace_screen *tr_scr = trace_screen(_pipe->screen);
- struct trace_stream *stream = tr_scr->stream;
+ struct trace_stream *stream = tr_ctx->stream;
struct pipe_context *pipe = tr_ctx->pipe;
trace_dump_call_begin(stream, "pipe_context", "set_constant_buffer");
@@ -723,8 +697,7 @@ trace_context_set_framebuffer_state(struct pipe_context *_pipe,
const struct pipe_framebuffer_state *state)
{
struct trace_context *tr_ctx = trace_context(_pipe);
- struct trace_screen *tr_scr = trace_screen(_pipe->screen);
- struct trace_stream *stream = tr_scr->stream;
+ struct trace_stream *stream = tr_ctx->stream;
struct pipe_context *pipe = tr_ctx->pipe;
trace_dump_call_begin(stream, "pipe_context", "set_framebuffer_state");
@@ -743,8 +716,7 @@ trace_context_set_polygon_stipple(struct pipe_context *_pipe,
const struct pipe_poly_stipple *state)
{
struct trace_context *tr_ctx = trace_context(_pipe);
- struct trace_screen *tr_scr = trace_screen(_pipe->screen);
- struct trace_stream *stream = tr_scr->stream;
+ struct trace_stream *stream = tr_ctx->stream;
struct pipe_context *pipe = tr_ctx->pipe;
trace_dump_call_begin(stream, "pipe_context", "set_polygon_stipple");
@@ -763,8 +735,7 @@ trace_context_set_scissor_state(struct pipe_context *_pipe,
const struct pipe_scissor_state *state)
{
struct trace_context *tr_ctx = trace_context(_pipe);
- struct trace_screen *tr_scr = trace_screen(_pipe->screen);
- struct trace_stream *stream = tr_scr->stream;
+ struct trace_stream *stream = tr_ctx->stream;
struct pipe_context *pipe = tr_ctx->pipe;
trace_dump_call_begin(stream, "pipe_context", "set_scissor_state");
@@ -783,8 +754,7 @@ trace_context_set_viewport_state(struct pipe_context *_pipe,
const struct pipe_viewport_state *state)
{
struct trace_context *tr_ctx = trace_context(_pipe);
- struct trace_screen *tr_scr = trace_screen(_pipe->screen);
- struct trace_stream *stream = tr_scr->stream;
+ struct trace_stream *stream = tr_ctx->stream;
struct pipe_context *pipe = tr_ctx->pipe;
trace_dump_call_begin(stream, "pipe_context", "set_viewport_state");
@@ -804,8 +774,7 @@ trace_context_set_sampler_textures(struct pipe_context *_pipe,
struct pipe_texture **textures)
{
struct trace_context *tr_ctx = trace_context(_pipe);
- struct trace_screen *tr_scr = trace_screen(_pipe->screen);
- struct trace_stream *stream = tr_scr->stream;
+ struct trace_stream *stream = tr_ctx->stream;
struct pipe_context *pipe = tr_ctx->pipe;
trace_dump_call_begin(stream, "pipe_context", "set_sampler_textures");
@@ -826,8 +795,7 @@ trace_context_set_vertex_buffers(struct pipe_context *_pipe,
const struct pipe_vertex_buffer *buffers)
{
struct trace_context *tr_ctx = trace_context(_pipe);
- struct trace_screen *tr_scr = trace_screen(_pipe->screen);
- struct trace_stream *stream = tr_scr->stream;
+ struct trace_stream *stream = tr_ctx->stream;
struct pipe_context *pipe = tr_ctx->pipe;
trace_dump_call_begin(stream, "pipe_context", "set_vertex_buffers");
@@ -851,15 +819,13 @@ trace_context_set_vertex_elements(struct pipe_context *_pipe,
const struct pipe_vertex_element *elements)
{
struct trace_context *tr_ctx = trace_context(_pipe);
- struct trace_screen *tr_scr = trace_screen(_pipe->screen);
- struct trace_stream *stream = tr_scr->stream;
+ struct trace_stream *stream = tr_ctx->stream;
struct pipe_context *pipe = tr_ctx->pipe;
trace_dump_call_begin(stream, "pipe_context", "set_vertex_elements");
trace_dump_arg(stream, ptr, pipe);
trace_dump_arg(stream, uint, num_elements);
- trace_dump_arg(stream, ptr, elements);
trace_dump_arg_begin(stream, "elements");
trace_dump_struct_array(stream, vertex_element, elements, num_elements);
@@ -881,8 +847,7 @@ trace_context_surface_copy(struct pipe_context *_pipe,
unsigned width, unsigned height)
{
struct trace_context *tr_ctx = trace_context(_pipe);
- struct trace_screen *tr_scr = trace_screen(_pipe->screen);
- struct trace_stream *stream = tr_scr->stream;
+ struct trace_stream *stream = tr_ctx->stream;
struct pipe_context *pipe = tr_ctx->pipe;
trace_dump_call_begin(stream, "pipe_context", "surface_copy");
@@ -914,8 +879,7 @@ trace_context_surface_fill(struct pipe_context *_pipe,
unsigned value)
{
struct trace_context *tr_ctx = trace_context(_pipe);
- struct trace_screen *tr_scr = trace_screen(_pipe->screen);
- struct trace_stream *stream = tr_scr->stream;
+ struct trace_stream *stream = tr_ctx->stream;
struct pipe_context *pipe = tr_ctx->pipe;
trace_dump_call_begin(stream, "pipe_context", "surface_fill");
@@ -939,8 +903,7 @@ trace_context_clear(struct pipe_context *_pipe,
unsigned clearValue)
{
struct trace_context *tr_ctx = trace_context(_pipe);
- struct trace_screen *tr_scr = trace_screen(_pipe->screen);
- struct trace_stream *stream = tr_scr->stream;
+ struct trace_stream *stream = tr_ctx->stream;
struct pipe_context *pipe = tr_ctx->pipe;
trace_dump_call_begin(stream, "pipe_context", "clear");
@@ -961,8 +924,7 @@ trace_context_flush(struct pipe_context *_pipe,
struct pipe_fence_handle **fence)
{
struct trace_context *tr_ctx = trace_context(_pipe);
- struct trace_screen *tr_scr = trace_screen(_pipe->screen);
- struct trace_stream *stream = tr_scr->stream;
+ struct trace_stream *stream = tr_ctx->stream;
struct pipe_context *pipe = tr_ctx->pipe;
trace_dump_call_begin(stream, "pipe_context", "flush");
@@ -981,8 +943,7 @@ static INLINE void
trace_context_destroy(struct pipe_context *_pipe)
{
struct trace_context *tr_ctx = trace_context(_pipe);
- struct trace_screen *tr_scr = trace_screen(_pipe->screen);
- struct trace_stream *stream = tr_scr->stream;
+ struct trace_stream *stream = tr_ctx->stream;
struct pipe_context *pipe = tr_ctx->pipe;
trace_dump_call_begin(stream, "pipe_context", "destroy");
@@ -1000,6 +961,7 @@ trace_context_destroy(struct pipe_context *_pipe)
struct pipe_context *
trace_context_create(struct pipe_context *pipe)
{
+ struct trace_stream *stream;
struct trace_context *tr_ctx;
if(!debug_get_bool_option("GALLIUM_TRACE", FALSE))
@@ -1055,10 +1017,18 @@ trace_context_create(struct pipe_context *pipe)
tr_ctx->base.flush = trace_context_flush;
tr_ctx->pipe = pipe;
+ tr_ctx->stream = stream = trace_winsys(pipe->winsys)->stream;
/* We don't want to trace the internal pipe calls */
pipe->winsys = trace_winsys(pipe->winsys)->winsys;
pipe->screen = trace_screen(pipe->screen)->screen;
+ trace_dump_call_begin(stream, "", "pipe_context_create");
+ trace_dump_arg_begin(stream, "screen");
+ trace_dump_ptr(stream, pipe->screen);
+ trace_dump_arg_end(stream);
+ trace_dump_ret(stream, ptr, pipe);
+ trace_dump_call_end(stream);
+
return &tr_ctx->base;
}
diff --git a/src/gallium/drivers/trace/tr_context.h b/src/gallium/drivers/trace/tr_context.h
index 80fb5980d6..2c0b0c72e4 100644
--- a/src/gallium/drivers/trace/tr_context.h
+++ b/src/gallium/drivers/trace/tr_context.h
@@ -34,11 +34,16 @@
#include "pipe/p_context.h"
+struct trace_stream;
+
+
struct trace_context
{
struct pipe_context base;
struct pipe_context *pipe;
+
+ struct trace_stream *stream;
};
diff --git a/src/gallium/drivers/trace/tr_dump.c b/src/gallium/drivers/trace/tr_dump.c
index f545de30f4..5269c4ddc8 100644
--- a/src/gallium/drivers/trace/tr_dump.c
+++ b/src/gallium/drivers/trace/tr_dump.c
@@ -276,17 +276,16 @@ void trace_dump_bytes(struct trace_stream *stream,
const void *data,
long unsigned size)
{
- static char hex_table[] = "0123456789ABCDE";
+ static const char hex_table[16] = "0123456789ABCDEF";
const uint8_t *p = data;
long unsigned i;
trace_dump_write(stream, "<bytes>");
for(i = 0; i < size; ++i) {
uint8_t byte = *p++;
- char str[3];
- str[0] = hex_table[byte >> 4];
- str[1] = hex_table[byte & 0xf];
- str[2] = 0;
- trace_dump_write(stream, str);
+ char hex[2];
+ hex[0] = hex_table[byte >> 4];
+ hex[1] = hex_table[byte & 0xf];
+ trace_stream_write(stream, hex, 2);
}
trace_dump_write(stream, "</bytes>");
}
diff --git a/src/gallium/drivers/trace/tr_screen.c b/src/gallium/drivers/trace/tr_screen.c
index de885abae2..27c218039e 100644
--- a/src/gallium/drivers/trace/tr_screen.c
+++ b/src/gallium/drivers/trace/tr_screen.c
@@ -346,6 +346,7 @@ trace_screen_destroy(struct pipe_screen *_screen)
struct pipe_screen *
trace_screen_create(struct pipe_screen *screen)
{
+ struct trace_stream *stream;
struct trace_screen *tr_scr;
if(!debug_get_bool_option("GALLIUM_TRACE", FALSE))
@@ -371,13 +372,17 @@ trace_screen_create(struct pipe_screen *screen)
tr_scr->base.surface_unmap = trace_screen_surface_unmap;
tr_scr->screen = screen;
-
- tr_scr->stream = trace_winsys(screen->winsys)->stream;
- if(!tr_scr->stream)
- return NULL;
+ tr_scr->stream = stream = trace_winsys(screen->winsys)->stream;
/* We don't want to trace the internal pipe calls */
screen->winsys = trace_winsys(screen->winsys)->winsys;
+ trace_dump_call_begin(stream, "", "pipe_screen_create");
+ trace_dump_arg_begin(stream, "winsys");
+ trace_dump_ptr(stream, screen->winsys);
+ trace_dump_arg_end(stream);
+ trace_dump_ret(stream, ptr, screen);
+ trace_dump_call_end(stream);
+
return &tr_scr->base;
}
diff --git a/src/gallium/drivers/trace/tr_state.c b/src/gallium/drivers/trace/tr_state.c
index 9ffe77146d..e074ae7abc 100644
--- a/src/gallium/drivers/trace/tr_state.c
+++ b/src/gallium/drivers/trace/tr_state.c
@@ -73,6 +73,10 @@ void trace_dump_template(struct trace_stream *stream,
trace_dump_array(stream, uint, templat->height, 1);
trace_dump_member_end(stream);
+ trace_dump_member_begin(stream, "depth");
+ trace_dump_array(stream, uint, templat->depth, 1);
+ trace_dump_member_end(stream);
+
trace_dump_member_begin(stream, "block");
trace_dump_block(stream, &templat->block);
trace_dump_member_end(stream);
@@ -146,9 +150,10 @@ void trace_dump_poly_stipple(struct trace_stream *stream,
trace_dump_struct_begin(stream, "pipe_poly_stipple");
trace_dump_member_begin(stream, "stipple");
- trace_dump_bytes(stream,
+ trace_dump_array(stream,
+ uint,
state->stipple,
- sizeof(state->stipple));
+ Elements(state->stipple));
trace_dump_member_end(stream);
trace_dump_struct_end(stream);
@@ -273,7 +278,7 @@ void trace_dump_depth_stencil_alpha_state(struct trace_stream *stream,
trace_dump_struct_begin(stream, "pipe_depth_stencil_alpha_state");
trace_dump_member_begin(stream, "depth");
- trace_dump_struct_begin(stream, "");
+ trace_dump_struct_begin(stream, "pipe_depth_state");
trace_dump_member(stream, bool, &state->depth, enabled);
trace_dump_member(stream, bool, &state->depth, writemask);
trace_dump_member(stream, uint, &state->depth, func);
@@ -285,7 +290,7 @@ void trace_dump_depth_stencil_alpha_state(struct trace_stream *stream,
trace_dump_array_begin(stream);
for(i = 0; i < Elements(state->stencil); ++i) {
trace_dump_elem_begin(stream);
- trace_dump_struct_begin(stream, "");
+ trace_dump_struct_begin(stream, "pipe_stencil_state");
trace_dump_member(stream, bool, &state->stencil[i], enabled);
trace_dump_member(stream, uint, &state->stencil[i], func);
trace_dump_member(stream, uint, &state->stencil[i], fail_op);
@@ -301,7 +306,7 @@ void trace_dump_depth_stencil_alpha_state(struct trace_stream *stream,
trace_dump_member_end(stream);
trace_dump_member_begin(stream, "alpha");
- trace_dump_struct_begin(stream, "");
+ trace_dump_struct_begin(stream, "pipe_alpha_state");
trace_dump_member(stream, bool, &state->alpha, enabled);
trace_dump_member(stream, uint, &state->alpha, func);
trace_dump_member(stream, float, &state->alpha, ref);
diff --git a/src/gallium/drivers/trace/tr_winsys.c b/src/gallium/drivers/trace/tr_winsys.c
index 964da5677b..eec84a1981 100644
--- a/src/gallium/drivers/trace/tr_winsys.c
+++ b/src/gallium/drivers/trace/tr_winsys.c
@@ -26,6 +26,7 @@
**************************************************************************/
#include "pipe/p_util.h"
+#include "pipe/p_state.h"
#include "util/u_hash_table.h"
#include "tr_stream.h"
@@ -178,7 +179,7 @@ trace_winsys_buffer_create(struct pipe_winsys *_winsys,
struct trace_winsys *tr_ws = trace_winsys(_winsys);
struct trace_stream *stream = tr_ws->stream;
struct pipe_winsys *winsys = tr_ws->winsys;
- struct pipe_buffer *result;
+ struct pipe_buffer *buffer;
trace_dump_call_begin(stream, "pipe_winsys", "buffer_create");
@@ -187,13 +188,23 @@ trace_winsys_buffer_create(struct pipe_winsys *_winsys,
trace_dump_arg(stream, uint, usage);
trace_dump_arg(stream, uint, size);
- result = winsys->buffer_create(winsys, alignment, usage, size);
+ buffer = winsys->buffer_create(winsys, alignment, usage, size);
- trace_dump_ret(stream, ptr, result);
+ trace_dump_ret(stream, ptr, buffer);
trace_dump_call_end(stream);
+
+ /* Zero the buffer to avoid dumping uninitialized memory */
+ if(buffer->usage & PIPE_BUFFER_USAGE_CPU_WRITE) {
+ void *map;
+ map = winsys->buffer_map(winsys, buffer, PIPE_BUFFER_USAGE_CPU_WRITE);
+ if(map) {
+ memset(map, 0, buffer->size);
+ winsys->buffer_unmap(winsys, buffer);
+ }
+ }
- return result;
+ return buffer;
}
@@ -229,30 +240,18 @@ trace_winsys_buffer_map(struct pipe_winsys *_winsys,
unsigned usage)
{
struct trace_winsys *tr_ws = trace_winsys(_winsys);
- struct trace_stream *stream = tr_ws->stream;
struct pipe_winsys *winsys = tr_ws->winsys;
- void *result;
-
- trace_dump_call_begin(stream, "pipe_winsys", "buffer_map");
+ void *map;
- trace_dump_arg(stream, ptr, winsys);
- trace_dump_arg(stream, ptr, buffer);
- trace_dump_arg(stream, uint, usage);
-
- result = winsys->buffer_map(winsys, buffer, usage);
-
- trace_dump_ret(stream, ptr, result);
-
- trace_dump_call_end(stream);
-
- if(result) {
+ map = winsys->buffer_map(winsys, buffer, usage);
+ if(map) {
if(usage & PIPE_BUFFER_USAGE_CPU_WRITE) {
assert(!hash_table_get(tr_ws->buffer_maps, buffer));
- hash_table_set(tr_ws->buffer_maps, buffer, result);
+ hash_table_set(tr_ws->buffer_maps, buffer, map);
}
}
- return result;
+ return map;
}
@@ -267,13 +266,13 @@ trace_winsys_buffer_unmap(struct pipe_winsys *_winsys,
map = hash_table_get(tr_ws->buffer_maps, buffer);
if(map) {
- trace_dump_call_begin(stream, "", "memcpy");
+ trace_dump_call_begin(stream, "pipe_winsys", "buffer_write");
- trace_dump_arg_begin(stream, "dst");
- trace_dump_ptr(stream, map);
- trace_dump_arg_end(stream);
+ trace_dump_arg(stream, ptr, winsys);
- trace_dump_arg_begin(stream, "src");
+ trace_dump_arg(stream, ptr, buffer);
+
+ trace_dump_arg_begin(stream, "data");
trace_dump_bytes(stream, map, buffer->size);
trace_dump_arg_end(stream);
@@ -283,19 +282,10 @@ trace_winsys_buffer_unmap(struct pipe_winsys *_winsys,
trace_dump_call_end(stream);
- winsys->buffer_unmap(winsys, buffer);
-
hash_table_remove(tr_ws->buffer_maps, buffer);
}
- trace_dump_call_begin(stream, "pipe_winsys", "buffer_unmap");
-
- trace_dump_arg(stream, ptr, winsys);
- trace_dump_arg(stream, ptr, buffer);
-
winsys->buffer_unmap(winsys, buffer);
-
- trace_dump_call_end(stream);
}
@@ -420,6 +410,7 @@ trace_winsys_destroy(struct pipe_winsys *_winsys)
struct pipe_winsys *
trace_winsys_create(struct pipe_winsys *winsys)
{
+ struct trace_stream *stream;
struct trace_winsys *tr_ws;
if(!debug_get_bool_option("GALLIUM_TRACE", FALSE))
@@ -446,7 +437,7 @@ trace_winsys_create(struct pipe_winsys *winsys)
tr_ws->winsys = winsys;
- tr_ws->stream = trace_stream_create("gallium", "trace");
+ tr_ws->stream = stream = trace_stream_create("gallium", "trace");
if(!tr_ws->stream)
return NULL;
@@ -455,8 +446,11 @@ trace_winsys_create(struct pipe_winsys *winsys)
if(!tr_ws->buffer_maps)
return NULL;
-
trace_dump_trace_begin(tr_ws->stream, 0);
+ trace_dump_call_begin(stream, "", "pipe_winsys_create");
+ trace_dump_ret(stream, ptr, winsys);
+ trace_dump_call_end(stream);
+
return &tr_ws->base;
}