diff options
Diffstat (limited to 'src/gallium/auxiliary/driver_trace/tr_context.c')
-rw-r--r-- | src/gallium/auxiliary/driver_trace/tr_context.c | 407 |
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 |