Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. /**************************************************************************
  2.  *
  3.  * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
  4.  * All Rights Reserved.
  5.  *
  6.  * Permission is hereby granted, free of charge, to any person obtaining a
  7.  * copy of this software and associated documentation files (the
  8.  * "Software"), to deal in the Software without restriction, including
  9.  * without limitation the rights to use, copy, modify, merge, publish,
  10.  * distribute, sub license, and/or sell copies of the Software, and to
  11.  * permit persons to whom the Software is furnished to do so, subject to
  12.  * the following conditions:
  13.  *
  14.  * The above copyright notice and this permission notice (including the
  15.  * next paragraph) shall be included in all copies or substantial portions
  16.  * of the Software.
  17.  *
  18.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  19.  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  20.  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
  21.  * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
  22.  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
  23.  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
  24.  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  25.  *
  26.  **************************************************************************/
  27.  
  28. #include "util/u_inlines.h"
  29. #include "util/u_hash_table.h"
  30. #include "util/u_memory.h"
  31. #include "util/u_simple_list.h"
  32.  
  33. #include "tr_screen.h"
  34. #include "tr_context.h"
  35. #include "tr_texture.h"
  36.  
  37.  
  38. struct pipe_resource *
  39. trace_resource_create(struct trace_screen *tr_scr,
  40.                      struct pipe_resource *texture)
  41. {
  42.    struct trace_resource *tr_res;
  43.  
  44.    if(!texture)
  45.       goto error;
  46.  
  47.    assert(texture->screen == tr_scr->screen);
  48.  
  49.    tr_res = CALLOC_STRUCT(trace_resource);
  50.    if(!tr_res)
  51.       goto error;
  52.  
  53.    memcpy(&tr_res->base, texture, sizeof(struct pipe_resource));
  54.  
  55.    pipe_reference_init(&tr_res->base.reference, 1);
  56.    tr_res->base.screen = &tr_scr->base;
  57.    tr_res->resource = texture;
  58.  
  59.    return &tr_res->base;
  60.  
  61. error:
  62.    pipe_resource_reference(&texture, NULL);
  63.    return NULL;
  64. }
  65.  
  66.  
  67. void
  68. trace_resource_destroy(struct trace_screen *tr_scr,
  69.                        struct trace_resource *tr_res)
  70. {
  71.    pipe_resource_reference(&tr_res->resource, NULL);
  72.    FREE(tr_res);
  73. }
  74.  
  75.  
  76. struct pipe_surface *
  77. trace_surf_create(struct trace_context *tr_ctx,
  78.                   struct trace_resource *tr_res,
  79.                   struct pipe_surface *surface)
  80. {
  81.    struct trace_surface *tr_surf;
  82.  
  83.    if(!surface)
  84.       goto error;
  85.  
  86.    assert(surface->texture == tr_res->resource);
  87.  
  88.    tr_surf = CALLOC_STRUCT(trace_surface);
  89.    if(!tr_surf)
  90.       goto error;
  91.  
  92.    memcpy(&tr_surf->base, surface, sizeof(struct pipe_surface));
  93.    tr_surf->base.context = &tr_ctx->base;
  94.  
  95.    pipe_reference_init(&tr_surf->base.reference, 1);
  96.    tr_surf->base.texture = NULL;
  97.    pipe_resource_reference(&tr_surf->base.texture, &tr_res->base);
  98.    tr_surf->surface = surface;
  99.  
  100.    return &tr_surf->base;
  101.  
  102. error:
  103.    pipe_surface_reference(&surface, NULL);
  104.    return NULL;
  105. }
  106.  
  107.  
  108. void
  109. trace_surf_destroy(struct trace_surface *tr_surf)
  110. {
  111.    trace_context_check(tr_surf->base.context);
  112.    pipe_resource_reference(&tr_surf->base.texture, NULL);
  113.    pipe_surface_reference(&tr_surf->surface, NULL);
  114.    FREE(tr_surf);
  115. }
  116.  
  117.  
  118. struct pipe_transfer *
  119. trace_transfer_create(struct trace_context *tr_ctx,
  120.                       struct trace_resource *tr_res,
  121.                       struct pipe_transfer *transfer)
  122. {
  123.    struct trace_transfer *tr_trans;
  124.  
  125.    if(!transfer)
  126.       goto error;
  127.  
  128.    assert(transfer->resource == tr_res->resource);
  129.  
  130.    tr_trans = CALLOC_STRUCT(trace_transfer);
  131.    if(!tr_trans)
  132.       goto error;
  133.  
  134.    memcpy(&tr_trans->base, transfer, sizeof(struct pipe_transfer));
  135.  
  136.    tr_trans->base.resource = NULL;
  137.    tr_trans->transfer = transfer;
  138.  
  139.    pipe_resource_reference(&tr_trans->base.resource, &tr_res->base);
  140.    assert(tr_trans->base.resource == &tr_res->base);
  141.  
  142.    return &tr_trans->base;
  143.  
  144. error:
  145.    tr_ctx->pipe->transfer_unmap(tr_ctx->pipe, transfer);
  146.    return NULL;
  147. }
  148.  
  149.  
  150. void
  151. trace_transfer_destroy(struct trace_context *tr_context,
  152.                        struct trace_transfer *tr_trans)
  153. {
  154.    pipe_resource_reference(&tr_trans->base.resource, NULL);
  155.    FREE(tr_trans);
  156. }
  157.  
  158.