struct pipe_screen * trace_screen_create(struct pipe_screen *screen) { struct trace_screen *tr_scr; if(!screen) goto error1; if (!trace_enabled()) goto error1; trace_dump_call_begin("", "pipe_screen_create"); tr_scr = CALLOC_STRUCT(trace_screen); if(!tr_scr) goto error2; tr_scr->base.destroy = trace_screen_destroy; tr_scr->base.get_name = trace_screen_get_name; tr_scr->base.get_vendor = trace_screen_get_vendor; tr_scr->base.get_param = trace_screen_get_param; tr_scr->base.get_shader_param = trace_screen_get_shader_param; tr_scr->base.get_paramf = trace_screen_get_paramf; tr_scr->base.is_format_supported = trace_screen_is_format_supported; assert(screen->context_create); tr_scr->base.context_create = trace_screen_context_create; tr_scr->base.resource_create = trace_screen_resource_create; tr_scr->base.resource_from_handle = trace_screen_resource_from_handle; tr_scr->base.resource_get_handle = trace_screen_resource_get_handle; tr_scr->base.resource_destroy = trace_screen_resource_destroy; tr_scr->base.fence_reference = trace_screen_fence_reference; tr_scr->base.fence_signalled = trace_screen_fence_signalled; tr_scr->base.fence_finish = trace_screen_fence_finish; tr_scr->base.flush_frontbuffer = trace_screen_flush_frontbuffer; tr_scr->base.get_timestamp = trace_screen_get_timestamp; tr_scr->screen = screen; trace_dump_ret(ptr, screen); trace_dump_call_end(); return &tr_scr->base; error2: trace_dump_ret(ptr, screen); trace_dump_call_end(); error1: return screen; }
// vaEndPicture VAStatus vdpau_EndPicture( VADriverContextP ctx, VAContextID context ) { VDPAU_DRIVER_DATA_INIT; unsigned int i; object_context_p obj_context = VDPAU_CONTEXT(context); if (!obj_context) return VA_STATUS_ERROR_INVALID_CONTEXT; object_surface_p obj_surface = VDPAU_SURFACE(obj_context->current_render_target); if (!obj_surface) return VA_STATUS_ERROR_INVALID_SURFACE; if (trace_enabled()) { switch (obj_context->vdp_codec) { case VDP_CODEC_MPEG1: case VDP_CODEC_MPEG2: dump_VdpPictureInfoMPEG1Or2(&obj_context->vdp_picture_info.mpeg2); break; #if HAVE_VDPAU_MPEG4 case VDP_CODEC_MPEG4: dump_VdpPictureInfoMPEG4Part2(&obj_context->vdp_picture_info.mpeg4); break; #endif case VDP_CODEC_H264: dump_VdpPictureInfoH264(&obj_context->vdp_picture_info.h264); break; case VDP_CODEC_VC1: dump_VdpPictureInfoVC1(&obj_context->vdp_picture_info.vc1); break; default: break; } for (i = 0; i < obj_context->vdp_bitstream_buffers_count; i++) dump_VdpBitstreamBuffer(&obj_context->vdp_bitstream_buffers[i]); } VAStatus va_status; VdpStatus vdp_status; vdp_status = ensure_decoder_with_max_refs( driver_data, obj_context, get_num_ref_frames(obj_context) ); if (vdp_status == VDP_STATUS_OK) vdp_status = vdpau_decoder_render( driver_data, obj_context->vdp_decoder, obj_surface->vdp_surface, (VdpPictureInfo)&obj_context->vdp_picture_info, obj_context->vdp_bitstream_buffers_count, obj_context->vdp_bitstream_buffers ); va_status = vdpau_get_VAStatus(vdp_status); /* XXX: assume we are done with rendering right away */ obj_context->current_render_target = VA_INVALID_SURFACE; /* Release pending buffers */ destroy_dead_va_buffers(driver_data, obj_context); return va_status; }
struct pipe_context * trace_context_create(struct trace_screen *tr_scr, struct pipe_context *pipe) { struct trace_context *tr_ctx; if(!pipe) goto error1; if(!trace_enabled()) goto error1; tr_ctx = CALLOC_STRUCT(trace_context); if(!tr_ctx) goto error1; tr_ctx->base.winsys = NULL; tr_ctx->base.priv = pipe->priv; /* expose wrapped priv data */ tr_ctx->base.screen = &tr_scr->base; tr_ctx->draw_blocker = debug_get_flags_option("RBUG_BLOCK", rbug_blocker_flags, 0); pipe_mutex_init(tr_ctx->draw_mutex); pipe_condvar_init(tr_ctx->draw_cond); pipe_mutex_init(tr_ctx->list_mutex); make_empty_list(&tr_ctx->shaders); tr_ctx->base.destroy = trace_context_destroy; tr_ctx->base.draw_arrays = trace_context_draw_arrays; tr_ctx->base.draw_elements = trace_context_draw_elements; tr_ctx->base.draw_range_elements = trace_context_draw_range_elements; tr_ctx->base.create_query = trace_context_create_query; tr_ctx->base.destroy_query = trace_context_destroy_query; tr_ctx->base.begin_query = trace_context_begin_query; tr_ctx->base.end_query = trace_context_end_query; tr_ctx->base.get_query_result = trace_context_get_query_result; tr_ctx->base.create_blend_state = trace_context_create_blend_state; tr_ctx->base.bind_blend_state = trace_context_bind_blend_state; tr_ctx->base.delete_blend_state = trace_context_delete_blend_state; tr_ctx->base.create_sampler_state = trace_context_create_sampler_state; tr_ctx->base.bind_fragment_sampler_states = trace_context_bind_fragment_sampler_states; tr_ctx->base.bind_vertex_sampler_states = trace_context_bind_vertex_sampler_states; tr_ctx->base.delete_sampler_state = trace_context_delete_sampler_state; tr_ctx->base.create_rasterizer_state = trace_context_create_rasterizer_state; tr_ctx->base.bind_rasterizer_state = trace_context_bind_rasterizer_state; tr_ctx->base.delete_rasterizer_state = trace_context_delete_rasterizer_state; tr_ctx->base.create_depth_stencil_alpha_state = trace_context_create_depth_stencil_alpha_state; tr_ctx->base.bind_depth_stencil_alpha_state = trace_context_bind_depth_stencil_alpha_state; tr_ctx->base.delete_depth_stencil_alpha_state = trace_context_delete_depth_stencil_alpha_state; tr_ctx->base.create_fs_state = trace_context_create_fs_state; tr_ctx->base.bind_fs_state = trace_context_bind_fs_state; tr_ctx->base.delete_fs_state = trace_context_delete_fs_state; tr_ctx->base.create_vs_state = trace_context_create_vs_state; tr_ctx->base.bind_vs_state = trace_context_bind_vs_state; tr_ctx->base.delete_vs_state = trace_context_delete_vs_state; tr_ctx->base.set_blend_color = trace_context_set_blend_color; tr_ctx->base.set_stencil_ref = trace_context_set_stencil_ref; tr_ctx->base.set_clip_state = trace_context_set_clip_state; tr_ctx->base.set_constant_buffer = trace_context_set_constant_buffer; tr_ctx->base.set_framebuffer_state = trace_context_set_framebuffer_state; tr_ctx->base.set_polygon_stipple = trace_context_set_polygon_stipple; tr_ctx->base.set_scissor_state = trace_context_set_scissor_state; tr_ctx->base.set_viewport_state = trace_context_set_viewport_state; tr_ctx->base.set_fragment_sampler_textures = trace_context_set_fragment_sampler_textures; tr_ctx->base.set_vertex_sampler_textures = trace_context_set_vertex_sampler_textures; tr_ctx->base.set_vertex_buffers = trace_context_set_vertex_buffers; tr_ctx->base.set_vertex_elements = trace_context_set_vertex_elements; if (pipe->surface_copy) tr_ctx->base.surface_copy = trace_context_surface_copy; if (pipe->surface_fill) tr_ctx->base.surface_fill = trace_context_surface_fill; tr_ctx->base.clear = trace_context_clear; tr_ctx->base.flush = trace_context_flush; tr_ctx->base.is_texture_referenced = trace_is_texture_referenced; tr_ctx->base.is_buffer_referenced = trace_is_buffer_referenced; tr_ctx->pipe = pipe; trace_screen_add_to_list(tr_scr, contexts, tr_ctx); return &tr_ctx->base; error1: return pipe; }