コード例 #1
0
ファイル: tr_winsys.c プロジェクト: astrofimov/vgallium
static void
trace_winsys_buffer_unmap(struct pipe_winsys *_winsys, 
                          struct pipe_buffer *buffer)
{
   struct trace_winsys *tr_ws = trace_winsys(_winsys);
   struct pipe_winsys *winsys = tr_ws->winsys;
   const void *map;
   
   map = hash_table_get(tr_ws->buffer_maps, buffer);
   if(map) {
      trace_dump_call_begin("pipe_winsys", "buffer_write");
      
      trace_dump_arg(ptr, winsys);
      
      trace_dump_arg(ptr, buffer);
      
      trace_dump_arg_begin("data");
      trace_dump_bytes(map, buffer->size);
      trace_dump_arg_end();

      trace_dump_arg_begin("size");
      trace_dump_uint(buffer->size);
      trace_dump_arg_end();
   
      trace_dump_call_end();

      hash_table_remove(tr_ws->buffer_maps, buffer);
   }
   
   winsys->buffer_unmap(winsys, buffer);
}
コード例 #2
0
ファイル: tr_winsys.c プロジェクト: astrofimov/vgallium
void
trace_winsys_user_buffer_update(struct pipe_winsys *_winsys, 
                                struct pipe_buffer *buffer)
{
   struct trace_winsys *tr_ws = trace_winsys(_winsys);
   struct pipe_winsys *winsys = tr_ws->winsys;
   const void *map;
   
   if(buffer && buffer->usage & TRACE_BUFFER_USAGE_USER) {
      map = winsys->buffer_map(winsys, buffer, PIPE_BUFFER_USAGE_CPU_READ);
      if(map) {
         trace_dump_call_begin("pipe_winsys", "buffer_write");
         
         trace_dump_arg(ptr, winsys);
         
         trace_dump_arg(ptr, buffer);
         
         trace_dump_arg_begin("data");
         trace_dump_bytes(map, buffer->size);
         trace_dump_arg_end();
      
         trace_dump_arg_begin("size");
         trace_dump_uint(buffer->size);
         trace_dump_arg_end();
      
         trace_dump_call_end();
         
         winsys->buffer_unmap(winsys, buffer);
      }
   }
}
コード例 #3
0
ファイル: tr_winsys.c プロジェクト: astrofimov/vgallium
static struct pipe_buffer *
trace_winsys_user_buffer_create(struct pipe_winsys *_winsys, 
                                void *data,
                                unsigned size)
{
   struct trace_winsys *tr_ws = trace_winsys(_winsys);
   struct pipe_winsys *winsys = tr_ws->winsys;
   struct pipe_buffer *result;
   
   trace_dump_call_begin("pipe_winsys", "user_buffer_create");
   
   trace_dump_arg(ptr, winsys);
   trace_dump_arg_begin("data");
   trace_dump_bytes(data, size);
   trace_dump_arg_end();
   trace_dump_arg(uint, size);

   result = winsys->user_buffer_create(winsys, data, size);
   
   trace_dump_ret(ptr, result);
   
   trace_dump_call_end();
   
   /* XXX: Mark the user buffers. (we should wrap pipe_buffers, but is is 
    * impossible to do so while texture-less surfaces are still around */
   if(result) {
      assert(!(result->usage & TRACE_BUFFER_USAGE_USER));
      result->usage |= TRACE_BUFFER_USAGE_USER;
   }
   
   return result;
}
コード例 #4
0
ファイル: tr_dump.c プロジェクト: Distrotech/Mesa
void trace_dump_box_bytes(const void *data,
                          struct pipe_resource *resource,
			  const struct pipe_box *box,
			  unsigned stride,
			  unsigned slice_stride)
{
   size_t size;

   /*
    * Only dump buffer transfers to avoid huge files.
    * TODO: Make this run-time configurable
    */
   if (resource->target != PIPE_BUFFER) {
      size = 0;
   } else {
      enum pipe_format format = resource->format;
      if (slice_stride)
         size = box->depth * slice_stride;
      else if (stride)
         size = util_format_get_nblocksy(format, box->height) * stride;
      else {
         size = util_format_get_nblocksx(format, box->width) * util_format_get_blocksize(format);
      }
   }

   trace_dump_bytes(data, size);
}
コード例 #5
0
static struct pipe_resource *
trace_screen_user_buffer_create(struct pipe_screen *_screen,
                                void *data,
                                unsigned size,
				unsigned usage)
{
   struct trace_screen *tr_scr = trace_screen(_screen);
   struct pipe_screen *screen = tr_scr->screen;
   struct pipe_resource *result;

   trace_dump_call_begin("pipe_screen", "user_buffer_create");

   trace_dump_arg(ptr, screen);
   trace_dump_arg_begin("data");
   trace_dump_bytes(data, size);
   trace_dump_arg_end();
   trace_dump_arg(uint, size);
   trace_dump_arg(uint, usage);

   result = screen->user_buffer_create(screen, data, size, usage);

   trace_dump_ret(ptr, result);

   trace_dump_call_end();

   if(result) {
      assert(!(result->flags & TRACE_FLAG_USER_BUFFER));
      result->flags |= TRACE_FLAG_USER_BUFFER;
   }

   return trace_resource_create(tr_scr, result);
}
コード例 #6
0
void trace_dump_blend_state(const struct pipe_blend_state *state)
{
   if (!trace_dumping_enabled_locked())
      return;

   if(!state) {
      trace_dump_null();
      return;
   }

   trace_dump_bytes(state, sizeof *state);
}
コード例 #7
0
void trace_dump_box_bytes(const void *data,
			  enum pipe_format format,
			  const struct pipe_box *box,
			  unsigned stride,
			  unsigned slice_stride)
{
   size_t size;

   if (slice_stride)
      size = box->depth * slice_stride;
   else if (stride)
      size = util_format_get_nblocksy(format, box->height) * stride;
   else {
      size = util_format_get_nblocksx(format, box->width) * util_format_get_blocksize(format);
   }

   trace_dump_bytes(data, size);
}