summaryrefslogtreecommitdiff
path: root/src/gallium/auxiliary/driver_trace/tr_context.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/auxiliary/driver_trace/tr_context.c')
-rw-r--r--src/gallium/auxiliary/driver_trace/tr_context.c407
1 files changed, 336 insertions, 71 deletions
diff --git a/src/gallium/auxiliary/driver_trace/tr_context.c b/src/gallium/auxiliary/driver_trace/tr_context.c
index 3f35852a75b..74a215231fb 100644
--- a/src/gallium/auxiliary/driver_trace/tr_context.c
+++ b/src/gallium/auxiliary/driver_trace/tr_context.c
@@ -28,10 +28,9 @@
#include "util/ralloc.h"
#include "util/u_inlines.h"
#include "util/u_memory.h"
-#include "util/simple_list.h"
#include "util/u_framebuffer.h"
-#include "pipe/p_format.h"
+#include "util/format/u_formats.h"
#include "pipe/p_screen.h"
#include "tr_dump.h"
@@ -41,12 +40,15 @@
#include "tr_screen.h"
#include "tr_texture.h"
#include "tr_context.h"
+#include "tr_util.h"
+#include "tr_video.h"
struct trace_query
{
struct threaded_query base;
unsigned type;
+ unsigned index;
struct pipe_query *query;
};
@@ -95,14 +97,15 @@ dump_fb_state(struct trace_context *tr_ctx,
bool deep)
{
struct pipe_context *pipe = tr_ctx->pipe;
+ struct pipe_framebuffer_state *state = &tr_ctx->unwrapped_state;
trace_dump_call_begin("pipe_context", method);
trace_dump_arg(ptr, pipe);
if (deep)
- trace_dump_arg(framebuffer_state_deep, &tr_ctx->unwrapped_state);
+ trace_dump_arg(framebuffer_state_deep, state);
else
- trace_dump_arg(framebuffer_state, &tr_ctx->unwrapped_state);
+ trace_dump_arg(framebuffer_state, state);
trace_dump_call_end();
tr_ctx->seen_fb_state = true;
@@ -140,6 +143,58 @@ trace_context_draw_vbo(struct pipe_context *_pipe,
trace_dump_call_end();
}
+static void
+trace_context_draw_mesh_tasks(struct pipe_context *_pipe,
+ const struct pipe_grid_info *info)
+{
+ struct trace_context *tr_ctx = trace_context(_pipe);
+ struct pipe_context *pipe = tr_ctx->pipe;
+
+ trace_dump_call_begin("pipe_context", "draw_mesh_tasks");
+
+ trace_dump_arg(ptr, pipe);
+ trace_dump_arg(grid_info, info);
+
+ trace_dump_trace_flush();
+
+ pipe->draw_mesh_tasks(pipe, info);
+
+ trace_dump_call_end();
+}
+
+
+static void
+trace_context_draw_vertex_state(struct pipe_context *_pipe,
+ struct pipe_vertex_state *state,
+ uint32_t partial_velem_mask,
+ struct pipe_draw_vertex_state_info info,
+ const struct pipe_draw_start_count_bias *draws,
+ unsigned num_draws)
+{
+ struct trace_context *tr_ctx = trace_context(_pipe);
+ struct pipe_context *pipe = tr_ctx->pipe;
+
+ if (!tr_ctx->seen_fb_state && trace_dump_is_triggered())
+ dump_fb_state(tr_ctx, "current_framebuffer_state", true);
+
+ trace_dump_call_begin("pipe_context", "draw_vertex_state");
+
+ trace_dump_arg(ptr, pipe);
+ trace_dump_arg(ptr, state);
+ trace_dump_arg(uint, partial_velem_mask);
+ trace_dump_arg(draw_vertex_state_info, info);
+ trace_dump_arg_begin("draws");
+ trace_dump_struct_array(draw_start_count, draws, num_draws);
+ trace_dump_arg_end();
+ trace_dump_arg(uint, num_draws);
+
+ trace_dump_trace_flush();
+
+ pipe->draw_vertex_state(pipe, state, partial_velem_mask, info, draws,
+ num_draws);
+ trace_dump_call_end();
+}
+
static struct pipe_query *
trace_context_create_query(struct pipe_context *_pipe,
@@ -168,6 +223,7 @@ trace_context_create_query(struct pipe_context *_pipe,
if (tr_query) {
tr_query->type = query_type;
tr_query->query = query;
+ tr_query->index = index;
query = (struct pipe_query *)tr_query;
} else {
pipe->destroy_query(pipe, query);
@@ -272,7 +328,7 @@ trace_context_get_query_result(struct pipe_context *_pipe,
trace_dump_arg_begin("result");
if (ret) {
- trace_dump_query_result(tr_query->type, result);
+ trace_dump_query_result(tr_query->type, tr_query->index, result);
} else {
trace_dump_null();
}
@@ -285,6 +341,38 @@ trace_context_get_query_result(struct pipe_context *_pipe,
return ret;
}
+static void
+trace_context_get_query_result_resource(struct pipe_context *_pipe,
+ struct pipe_query *_query,
+ enum pipe_query_flags flags,
+ enum pipe_query_value_type result_type,
+ int index,
+ struct pipe_resource *resource,
+ unsigned offset)
+{
+ struct trace_context *tr_ctx = trace_context(_pipe);
+ struct pipe_context *pipe = tr_ctx->pipe;
+ struct trace_query *tr_query = trace_query(_query);
+ struct pipe_query *query = tr_query->query;
+
+ trace_dump_call_begin("pipe_context", "get_query_result_resource");
+
+ trace_dump_arg(ptr, pipe);
+ trace_dump_arg(ptr, query);
+ trace_dump_arg(query_flags, flags);
+ trace_dump_arg(uint, result_type);
+ trace_dump_arg(uint, index);
+ trace_dump_arg(ptr, resource);
+ trace_dump_arg(uint, offset);
+
+ if (tr_ctx->threaded)
+ threaded_query(query)->flushed = tr_query->base.flushed;
+
+ trace_dump_call_end();
+
+ pipe->get_query_result_resource(pipe, query, flags, result_type, index, resource, offset);
+}
+
static void
trace_context_set_active_query_state(struct pipe_context *_pipe,
@@ -423,7 +511,7 @@ trace_context_bind_sampler_states(struct pipe_context *_pipe,
trace_dump_call_begin("pipe_context", "bind_sampler_states");
trace_dump_arg(ptr, pipe);
- trace_dump_arg(uint, shader);
+ trace_dump_arg_enum(pipe_shader_type, shader);
trace_dump_arg(uint, start);
trace_dump_arg(uint, num_states);
trace_dump_arg_array(ptr, states, num_states);
@@ -660,9 +748,23 @@ TRACE_SHADER_STATE(vs)
TRACE_SHADER_STATE(gs)
TRACE_SHADER_STATE(tcs)
TRACE_SHADER_STATE(tes)
+TRACE_SHADER_STATE(ms)
+TRACE_SHADER_STATE(ts)
#undef TRACE_SHADER_STATE
+static void
+trace_context_link_shader(struct pipe_context *_pipe, void **shaders)
+{
+ struct trace_context *tr_ctx = trace_context(_pipe);
+ struct pipe_context *pipe = tr_ctx->pipe;
+
+ trace_dump_call_begin("pipe_context", "link_shader");
+ trace_dump_arg(ptr, pipe);
+ trace_dump_arg_array(ptr, shaders, PIPE_SHADER_TYPES);
+ pipe->link_shader(pipe, shaders);
+ trace_dump_call_end();
+}
static inline void *
trace_context_create_compute_state(struct pipe_context *_pipe,
@@ -855,7 +957,7 @@ trace_context_set_constant_buffer(struct pipe_context *_pipe,
trace_dump_call_begin("pipe_context", "set_constant_buffer");
trace_dump_arg(ptr, pipe);
- trace_dump_arg(uint, shader);
+ trace_dump_arg_enum(pipe_shader_type, shader);
trace_dump_arg(uint, index);
trace_dump_arg(bool, take_ownership);
trace_dump_arg(constant_buffer, constant_buffer);
@@ -898,7 +1000,7 @@ trace_context_set_inlinable_constants(struct pipe_context *_pipe, enum pipe_shad
trace_dump_call_begin("pipe_context", "set_inlinable_constants");
trace_dump_arg(ptr, pipe);
- trace_dump_arg(uint, shader);
+ trace_dump_arg_enum(pipe_shader_type, shader);
trace_dump_arg(uint, num_values);
trace_dump_arg_array(uint, values, num_values);
@@ -995,7 +1097,6 @@ trace_context_create_sampler_view(struct pipe_context *_pipe,
struct trace_context *tr_ctx = trace_context(_pipe);
struct pipe_context *pipe = tr_ctx->pipe;
struct pipe_sampler_view *result;
- struct trace_sampler_view *tr_view;
trace_dump_call_begin("pipe_context", "create_sampler_view");
@@ -1003,7 +1104,7 @@ trace_context_create_sampler_view(struct pipe_context *_pipe,
trace_dump_arg(ptr, resource);
trace_dump_arg_begin("templ");
- trace_dump_sampler_view_template(templ, resource->target);
+ trace_dump_sampler_view_template(templ);
trace_dump_arg_end();
result = pipe->create_sampler_view(pipe, resource, templ);
@@ -1012,19 +1113,7 @@ trace_context_create_sampler_view(struct pipe_context *_pipe,
trace_dump_call_end();
- /*
- * Wrap pipe_sampler_view
- */
- tr_view = CALLOC_STRUCT(trace_sampler_view);
- tr_view->base = *templ;
- tr_view->base.reference.count = 1;
- tr_view->base.texture = NULL;
- pipe_resource_reference(&tr_view->base.texture, resource);
- tr_view->base.context = _pipe;
- tr_view->sampler_view = result;
- result->reference.count += 100000000;
- tr_view->refcount = 100000000;
- result = &tr_view->base;
+ result = trace_sampler_view_create(tr_ctx, resource, result);
return result;
}
@@ -1044,13 +1133,9 @@ trace_context_sampler_view_destroy(struct pipe_context *_pipe,
trace_dump_arg(ptr, pipe);
trace_dump_arg(ptr, view);
- p_atomic_add(&tr_view->sampler_view->reference.count, -tr_view->refcount);
- pipe_sampler_view_reference(&tr_view->sampler_view, NULL);
+ trace_sampler_view_destroy(tr_view);
trace_dump_call_end();
-
- pipe_resource_reference(&_view->texture, NULL);
- FREE(_view);
}
/********************************************************************
@@ -1129,21 +1214,14 @@ trace_context_set_sampler_views(struct pipe_context *_pipe,
for (i = 0; i < num; ++i) {
tr_view = trace_sampler_view(views[i]);
- if (tr_view) {
- tr_view->refcount--;
- if (!tr_view->refcount) {
- tr_view->refcount = 100000000;
- p_atomic_add(&tr_view->sampler_view->reference.count, tr_view->refcount);
- }
- }
- unwrapped_views[i] = tr_view ? tr_view->sampler_view : NULL;
+ unwrapped_views[i] = trace_sampler_view_unwrap(tr_view);
}
views = unwrapped_views;
trace_dump_call_begin("pipe_context", "set_sampler_views");
trace_dump_arg(ptr, pipe);
- trace_dump_arg(uint, shader);
+ trace_dump_arg_enum(pipe_shader_type, shader);
trace_dump_arg(uint, start);
trace_dump_arg(uint, num);
trace_dump_arg(uint, unbind_num_trailing_slots);
@@ -1159,9 +1237,7 @@ trace_context_set_sampler_views(struct pipe_context *_pipe,
static void
trace_context_set_vertex_buffers(struct pipe_context *_pipe,
- unsigned start_slot, unsigned num_buffers,
- unsigned unbind_num_trailing_slots,
- bool take_ownership,
+ unsigned num_buffers,
const struct pipe_vertex_buffer *buffers)
{
struct trace_context *tr_ctx = trace_context(_pipe);
@@ -1170,18 +1246,13 @@ trace_context_set_vertex_buffers(struct pipe_context *_pipe,
trace_dump_call_begin("pipe_context", "set_vertex_buffers");
trace_dump_arg(ptr, pipe);
- trace_dump_arg(uint, start_slot);
trace_dump_arg(uint, num_buffers);
- trace_dump_arg(uint, unbind_num_trailing_slots);
- trace_dump_arg(bool, take_ownership);
trace_dump_arg_begin("buffers");
trace_dump_struct_array(vertex_buffer, buffers, num_buffers);
trace_dump_arg_end();
- pipe->set_vertex_buffers(pipe, start_slot, num_buffers,
- unbind_num_trailing_slots, take_ownership,
- buffers);
+ pipe->set_vertex_buffers(pipe, num_buffers, buffers);
trace_dump_call_end();
}
@@ -1343,12 +1414,10 @@ trace_context_clear(struct pipe_context *_pipe,
trace_dump_arg_begin("scissor_state");
trace_dump_scissor_state(scissor_state);
trace_dump_arg_end();
- trace_dump_arg_begin("color");
if (color)
- trace_dump_array(float, color->f, 4);
+ trace_dump_arg_array(uint, color->ui, 4);
else
trace_dump_null();
- trace_dump_arg_end();
trace_dump_arg(float, depth);
trace_dump_arg(uint, stencil);
@@ -1375,7 +1444,7 @@ trace_context_clear_render_target(struct pipe_context *_pipe,
trace_dump_arg(ptr, pipe);
trace_dump_arg(ptr, dst);
- trace_dump_arg_array(float, color->f, 4);
+ trace_dump_arg_array(uint, color->ui, 4);
trace_dump_arg(uint, dstx);
trace_dump_arg(uint, dsty);
trace_dump_arg(uint, width);
@@ -1457,18 +1526,31 @@ trace_context_clear_texture(struct pipe_context *_pipe,
const void *data)
{
struct trace_context *tr_ctx = trace_context(_pipe);
+ const struct util_format_description *desc = util_format_description(res->format);
struct pipe_context *pipe = tr_ctx->pipe;
-
+ union pipe_color_union color;
+ float depth = 0.0f;
+ uint8_t stencil = 0;
trace_dump_call_begin("pipe_context", "clear_texture");
-
trace_dump_arg(ptr, pipe);
trace_dump_arg(ptr, res);
trace_dump_arg(uint, level);
trace_dump_arg_begin("box");
trace_dump_box(box);
trace_dump_arg_end();
- trace_dump_arg(ptr, data);
+ if (util_format_has_depth(desc)) {
+ util_format_unpack_z_float(res->format, &depth, data, 1);
+ trace_dump_arg(float, depth);
+ }
+ if (util_format_has_stencil(desc)) {
+ util_format_unpack_s_8uint(res->format, &stencil, data, 1);
+ trace_dump_arg(uint, stencil);
+ }
+ if (!util_format_is_depth_or_stencil(res->format)) {
+ util_format_unpack_rgba(res->format, color.ui, data, 1);
+ trace_dump_arg_array(uint, color.ui, 4);
+ }
pipe->clear_texture(pipe, res, level, box, data);
@@ -1514,7 +1596,7 @@ trace_context_create_fence_fd(struct pipe_context *_pipe,
trace_dump_call_begin("pipe_context", "create_fence_fd");
trace_dump_arg(ptr, pipe);
- trace_dump_arg(int, fd);
+ trace_dump_arg_enum(pipe_fd_type, fd);
trace_dump_arg(uint, type);
pipe->create_fence_fd(pipe, fence, fd, type);
@@ -1544,6 +1626,24 @@ trace_context_fence_server_sync(struct pipe_context *_pipe,
}
+static void
+trace_context_fence_server_signal(struct pipe_context *_pipe,
+ struct pipe_fence_handle *fence)
+{
+ struct trace_context *tr_ctx = trace_context(_pipe);
+ struct pipe_context *pipe = tr_ctx->pipe;
+
+ trace_dump_call_begin("pipe_context", "fence_server_signal");
+
+ trace_dump_arg(ptr, pipe);
+ trace_dump_arg(ptr, fence);
+
+ pipe->fence_server_signal(pipe, fence);
+
+ trace_dump_call_end();
+}
+
+
static inline bool
trace_context_generate_mipmap(struct pipe_context *_pipe,
struct pipe_resource *res,
@@ -1624,7 +1724,7 @@ trace_context_transfer_map(struct pipe_context *_context,
trace_dump_arg(ptr, pipe);
trace_dump_arg(ptr, resource);
trace_dump_arg(uint, level);
- trace_dump_arg(uint, usage);
+ trace_dump_arg_enum(pipe_map_flags, usage);
trace_dump_arg(box, box);
trace_dump_arg(ptr, xfer);
@@ -1688,7 +1788,7 @@ trace_context_transfer_unmap(struct pipe_context *_context,
unsigned usage = transfer->usage;
const struct pipe_box *box = &transfer->box;
unsigned stride = transfer->stride;
- unsigned layer_stride = transfer->layer_stride;
+ uintptr_t layer_stride = transfer->layer_stride;
if (resource->target == PIPE_BUFFER) {
unsigned offset = box->x;
@@ -1698,7 +1798,7 @@ trace_context_transfer_unmap(struct pipe_context *_context,
trace_dump_arg(ptr, context);
trace_dump_arg(ptr, resource);
- trace_dump_arg(uint, usage);
+ trace_dump_arg_enum(pipe_map_flags, usage);
trace_dump_arg(uint, offset);
trace_dump_arg(uint, size);
@@ -1722,7 +1822,7 @@ trace_context_transfer_unmap(struct pipe_context *_context,
trace_dump_arg(ptr, context);
trace_dump_arg(ptr, resource);
trace_dump_arg(uint, level);
- trace_dump_arg(uint, usage);
+ trace_dump_arg_enum(pipe_map_flags, usage);
trace_dump_arg(box, box);
trace_dump_arg_begin("data");
@@ -1764,7 +1864,7 @@ trace_context_buffer_subdata(struct pipe_context *_context,
trace_dump_arg(ptr, context);
trace_dump_arg(ptr, resource);
- trace_dump_arg(uint, usage);
+ trace_dump_arg_enum(pipe_map_flags, usage);
trace_dump_arg(uint, offset);
trace_dump_arg(uint, size);
@@ -1787,7 +1887,7 @@ trace_context_texture_subdata(struct pipe_context *_context,
const struct pipe_box *box,
const void *data,
unsigned stride,
- unsigned layer_stride)
+ uintptr_t layer_stride)
{
struct trace_context *tr_context = trace_context(_context);
struct pipe_context *context = tr_context->pipe;
@@ -1797,7 +1897,7 @@ trace_context_texture_subdata(struct pipe_context *_context,
trace_dump_arg(ptr, context);
trace_dump_arg(ptr, resource);
trace_dump_arg(uint, level);
- trace_dump_arg(uint, usage);
+ trace_dump_arg_enum(pipe_map_flags, usage);
trace_dump_arg(box, box);
trace_dump_arg_begin("data");
@@ -1854,7 +1954,7 @@ trace_context_set_context_param(struct pipe_context *_context,
}
static void
-trace_context_set_debug_callback(struct pipe_context *_context, const struct pipe_debug_callback *cb)
+trace_context_set_debug_callback(struct pipe_context *_context, const struct util_debug_callback *cb)
{
struct trace_context *tr_context = trace_context(_context);
struct pipe_context *context = tr_context->pipe;
@@ -1891,6 +1991,27 @@ trace_context_render_condition(struct pipe_context *_context,
context->render_condition(context, query, condition, mode);
}
+static void
+trace_context_render_condition_mem(struct pipe_context *_context,
+ struct pipe_resource *buffer,
+ uint32_t offset,
+ bool condition)
+{
+ struct trace_context *tr_context = trace_context(_context);
+ struct pipe_context *context = tr_context->pipe;
+
+ trace_dump_call_begin("pipe_context", "render_condition_mem");
+
+ trace_dump_arg(ptr, context);
+ trace_dump_arg(ptr, buffer);
+ trace_dump_arg(uint, offset);
+ trace_dump_arg(bool, condition);
+
+ trace_dump_call_end();
+
+ context->render_condition_mem(context, buffer, offset, condition);
+}
+
static void
trace_context_texture_barrier(struct pipe_context *_context, unsigned flags)
@@ -1944,6 +2065,79 @@ trace_context_resource_commit(struct pipe_context *_context,
return context->resource_commit(context, resource, level, box, commit);
}
+static struct pipe_video_codec *
+trace_context_create_video_codec(struct pipe_context *_context,
+ const struct pipe_video_codec *templat)
+{
+ struct trace_context *tr_context = trace_context(_context);
+ struct pipe_context *context = tr_context->pipe;
+ struct pipe_video_codec *result;
+
+ trace_dump_call_begin("pipe_context", "create_video_codec");
+
+ trace_dump_arg(ptr, context);
+ trace_dump_arg(video_codec_template, templat);
+
+ result = context->create_video_codec(context, templat);
+
+ trace_dump_ret(ptr, result);
+ trace_dump_call_end();
+
+ result = trace_video_codec_create(tr_context, result);
+
+ return result;
+}
+
+static struct pipe_video_buffer *
+trace_context_create_video_buffer_with_modifiers(struct pipe_context *_context,
+ const struct pipe_video_buffer *templat,
+ const uint64_t *modifiers,
+ unsigned int modifiers_count)
+{
+ struct trace_context *tr_context = trace_context(_context);
+ struct pipe_context *context = tr_context->pipe;
+ struct pipe_video_buffer *result;
+
+ trace_dump_call_begin("pipe_screen", "create_video_buffer_with_modifiers");
+
+ trace_dump_arg(ptr, context);
+ trace_dump_arg(video_buffer_template, templat);
+ trace_dump_arg_array(uint, modifiers, modifiers_count);
+ trace_dump_arg(uint, modifiers_count);
+
+ result = context->create_video_buffer_with_modifiers(context, templat, modifiers, modifiers_count);
+
+ trace_dump_ret(ptr, result);
+ trace_dump_call_end();
+
+ result = trace_video_buffer_create(tr_context, result);
+
+ return result;
+}
+
+static struct pipe_video_buffer *
+trace_context_create_video_buffer(struct pipe_context *_context,
+ const struct pipe_video_buffer *templat)
+{
+ struct trace_context *tr_context = trace_context(_context);
+ struct pipe_context *context = tr_context->pipe;
+ struct pipe_video_buffer *result;
+
+ trace_dump_call_begin("pipe_screen", "create_video_buffer");
+
+ trace_dump_arg(ptr, context);
+ trace_dump_arg(video_buffer_template, templat);
+
+ result = context->create_video_buffer(context, templat);
+
+ trace_dump_ret(ptr, result);
+ trace_dump_call_end();
+
+ result = trace_video_buffer_create(tr_context, result);
+
+ return result;
+}
+
static void
trace_context_set_tess_state(struct pipe_context *_context,
const float default_outer_level[4],
@@ -2051,13 +2245,13 @@ static uint64_t trace_context_create_texture_handle(struct pipe_context *_pipe,
trace_dump_call_begin("pipe_context", "create_texture_handle");
trace_dump_arg(ptr, pipe);
trace_dump_arg(ptr, view);
- trace_dump_arg_begin("state");
trace_dump_arg(sampler_state, state);
- trace_dump_arg_end();
handle = pipe->create_texture_handle(pipe, view, state);
- trace_dump_ret(uint, handle);
+ uintptr_t *texture_handle = (uintptr_t*)(uintptr_t)handle;
+ trace_dump_ret(ptr, texture_handle);
+
trace_dump_call_end();
return handle;
@@ -2071,7 +2265,8 @@ static void trace_context_delete_texture_handle(struct pipe_context *_pipe,
trace_dump_call_begin("pipe_context", "delete_texture_handle");
trace_dump_arg(ptr, pipe);
- trace_dump_arg(uint, handle);
+ uintptr_t *texture_handle = (uintptr_t*)(uintptr_t)handle;
+ trace_dump_ret(ptr, texture_handle);
trace_dump_call_end();
pipe->delete_texture_handle(pipe, handle);
@@ -2086,7 +2281,8 @@ static void trace_context_make_texture_handle_resident(struct pipe_context *_pip
trace_dump_call_begin("pipe_context", "make_texture_handle_resident");
trace_dump_arg(ptr, pipe);
- trace_dump_arg(uint, handle);
+ uintptr_t *texture_handle = (uintptr_t*)(uintptr_t)handle;
+ trace_dump_ret(ptr, texture_handle);
trace_dump_arg(bool, resident);
trace_dump_call_end();
@@ -2108,7 +2304,8 @@ static uint64_t trace_context_create_image_handle(struct pipe_context *_pipe,
handle = pipe->create_image_handle(pipe, image);
- trace_dump_ret(uint, handle);
+ uintptr_t *image_handle = (uintptr_t*)(uintptr_t)handle;
+ trace_dump_ret(ptr, image_handle);
trace_dump_call_end();
return handle;
@@ -2122,7 +2319,8 @@ static void trace_context_delete_image_handle(struct pipe_context *_pipe,
trace_dump_call_begin("pipe_context", "delete_image_handle");
trace_dump_arg(ptr, pipe);
- trace_dump_arg(uint, handle);
+ uintptr_t *image_handle = (uintptr_t*)(uintptr_t)handle;
+ trace_dump_ret(ptr, image_handle);
trace_dump_call_end();
pipe->delete_image_handle(pipe, handle);
@@ -2138,7 +2336,8 @@ static void trace_context_make_image_handle_resident(struct pipe_context *_pipe,
trace_dump_call_begin("pipe_context", "make_image_handle_resident");
trace_dump_arg(ptr, pipe);
- trace_dump_arg(uint, handle);
+ uintptr_t *image_handle = (uintptr_t*)(uintptr_t)handle;
+ trace_dump_ret(ptr, image_handle);
trace_dump_arg(uint, access);
trace_dump_arg(bool, resident);
trace_dump_call_end();
@@ -2146,6 +2345,52 @@ static void trace_context_make_image_handle_resident(struct pipe_context *_pipe,
pipe->make_image_handle_resident(pipe, handle, access, resident);
}
+static void trace_context_set_global_binding(struct pipe_context *_pipe,
+ unsigned first, unsigned count,
+ struct pipe_resource **resources,
+ uint32_t **handles)
+{
+ struct trace_context *tr_ctx = trace_context(_pipe);
+ struct pipe_context *pipe = tr_ctx->pipe;
+
+ trace_dump_call_begin("pipe_context", "set_global_binding");
+ trace_dump_arg(ptr, pipe);
+ trace_dump_arg(uint, first);
+ trace_dump_arg(uint, count);
+ trace_dump_arg_array(ptr, resources, count);
+ trace_dump_arg_array_val(uint, handles, count);
+
+ pipe->set_global_binding(pipe, first, count, resources, handles);
+
+ /* TODO: the handles are 64 bit if ADDRESS_BITS are 64, this is better than
+ * nothing though
+ */
+ trace_dump_ret_array_val(uint, handles, count);
+ trace_dump_call_end();
+}
+
+static void
+trace_context_set_hw_atomic_buffers(struct pipe_context *_pipe,
+ unsigned start_slot, unsigned count,
+ const struct pipe_shader_buffer *buffers)
+{
+ struct trace_context *tr_ctx = trace_context(_pipe);
+ struct pipe_context *pipe = tr_ctx->pipe;
+
+ trace_dump_call_begin("pipe_context", "set_hw_atomic_buffers");
+ trace_dump_arg(ptr, pipe);
+ trace_dump_arg(uint, start_slot);
+ trace_dump_arg(uint, count);
+
+ trace_dump_arg_begin("buffers");
+ trace_dump_struct_array(shader_buffer, buffers, count);
+ trace_dump_arg_end();
+
+ pipe->set_hw_atomic_buffers(pipe, start_slot, count, buffers);
+
+ trace_dump_call_end();
+}
+
struct pipe_context *
trace_context_create(struct trace_screen *tr_scr,
struct pipe_context *pipe)
@@ -2158,7 +2403,7 @@ trace_context_create(struct trace_screen *tr_scr,
if (!trace_enabled())
goto error1;
- tr_ctx = ralloc(NULL, struct trace_context);
+ tr_ctx = rzalloc(NULL, struct trace_context);
if (!tr_ctx)
goto error1;
@@ -2177,12 +2422,16 @@ trace_context_create(struct trace_screen *tr_scr,
tr_ctx->base . _member = pipe -> _member ? trace_context_ ## _member : NULL
TR_CTX_INIT(draw_vbo);
+ TR_CTX_INIT(draw_mesh_tasks);
+ TR_CTX_INIT(draw_vertex_state);
TR_CTX_INIT(render_condition);
+ TR_CTX_INIT(render_condition_mem);
TR_CTX_INIT(create_query);
TR_CTX_INIT(destroy_query);
TR_CTX_INIT(begin_query);
TR_CTX_INIT(end_query);
TR_CTX_INIT(get_query_result);
+ TR_CTX_INIT(get_query_result_resource);
TR_CTX_INIT(set_active_query_state);
TR_CTX_INIT(create_blend_state);
TR_CTX_INIT(bind_blend_state);
@@ -2211,9 +2460,16 @@ trace_context_create(struct trace_screen *tr_scr,
TR_CTX_INIT(create_tes_state);
TR_CTX_INIT(bind_tes_state);
TR_CTX_INIT(delete_tes_state);
+ TR_CTX_INIT(create_ts_state);
+ TR_CTX_INIT(bind_ts_state);
+ TR_CTX_INIT(delete_ts_state);
+ TR_CTX_INIT(create_ms_state);
+ TR_CTX_INIT(bind_ms_state);
+ TR_CTX_INIT(delete_ms_state);
TR_CTX_INIT(create_compute_state);
TR_CTX_INIT(bind_compute_state);
TR_CTX_INIT(delete_compute_state);
+ TR_CTX_INIT(link_shader);
TR_CTX_INIT(create_vertex_elements_state);
TR_CTX_INIT(bind_vertex_elements_state);
TR_CTX_INIT(delete_vertex_elements_state);
@@ -2237,6 +2493,8 @@ trace_context_create(struct trace_screen *tr_scr,
TR_CTX_INIT(create_stream_output_target);
TR_CTX_INIT(stream_output_target_destroy);
TR_CTX_INIT(set_stream_output_targets);
+ /* this is lavapipe-only and can't be traced */
+ tr_ctx->base.stream_output_target_offset = pipe->stream_output_target_offset;
TR_CTX_INIT(resource_copy_region);
TR_CTX_INIT(blit);
TR_CTX_INIT(flush_resource);
@@ -2248,10 +2506,14 @@ trace_context_create(struct trace_screen *tr_scr,
TR_CTX_INIT(flush);
TR_CTX_INIT(create_fence_fd);
TR_CTX_INIT(fence_server_sync);
+ TR_CTX_INIT(fence_server_signal);
TR_CTX_INIT(generate_mipmap);
TR_CTX_INIT(texture_barrier);
TR_CTX_INIT(memory_barrier);
TR_CTX_INIT(resource_commit);
+ TR_CTX_INIT(create_video_codec);
+ TR_CTX_INIT(create_video_buffer_with_modifiers);
+ TR_CTX_INIT(create_video_buffer);
TR_CTX_INIT(set_tess_state);
TR_CTX_INIT(set_patch_vertices);
TR_CTX_INIT(set_shader_buffers);
@@ -2272,6 +2534,9 @@ trace_context_create(struct trace_screen *tr_scr,
TR_CTX_INIT(invalidate_resource);
TR_CTX_INIT(set_context_param);
TR_CTX_INIT(set_debug_callback);
+ TR_CTX_INIT(set_global_binding);
+ TR_CTX_INIT(set_hw_atomic_buffers);
+
#undef TR_CTX_INIT