X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fdrivers%2Ftrace%2Ftr_texture.c;h=30ae55b356b209b5cdfbd84be8c594ddb436359a;hb=6f7371619c5edcde647ae8f4822d1b5bae050ef6;hp=120ba0dd3179470dc230d117aab6dc4f782e6cf9;hpb=dceb09909ea9d6eaef0334897ebed6da45db6faa;p=mesa.git diff --git a/src/gallium/drivers/trace/tr_texture.c b/src/gallium/drivers/trace/tr_texture.c index 120ba0dd317..30ae55b356b 100644 --- a/src/gallium/drivers/trace/tr_texture.c +++ b/src/gallium/drivers/trace/tr_texture.c @@ -1,6 +1,6 @@ /************************************************************************** * - * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. + * Copyright 2008 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a @@ -18,81 +18,87 @@ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR + * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * **************************************************************************/ -#include "pipe/p_inlines.h" +#include "util/u_inlines.h" #include "util/u_hash_table.h" #include "util/u_memory.h" +#include "util/u_simple_list.h" #include "tr_screen.h" +#include "tr_context.h" #include "tr_texture.h" -struct pipe_texture * -trace_texture_create(struct trace_screen *tr_scr, - struct pipe_texture *texture) +struct pipe_resource * +trace_resource_create(struct trace_screen *tr_scr, + struct pipe_resource *texture) { - struct trace_texture *tr_tex; - + struct trace_resource *tr_res; + if(!texture) goto error; - + assert(texture->screen == tr_scr->screen); - - tr_tex = CALLOC_STRUCT(trace_texture); - if(!tr_tex) + + tr_res = CALLOC_STRUCT(trace_resource); + if(!tr_res) goto error; - - memcpy(&tr_tex->base, texture, sizeof(struct pipe_texture)); - tr_tex->base.screen = &tr_scr->base; - tr_tex->texture = texture; - - return &tr_tex->base; - + + memcpy(&tr_res->base, texture, sizeof(struct pipe_resource)); + + pipe_reference_init(&tr_res->base.reference, 1); + tr_res->base.screen = &tr_scr->base; + tr_res->resource = texture; + + return &tr_res->base; + error: - pipe_texture_reference(&texture, NULL); + pipe_resource_reference(&texture, NULL); return NULL; } void -trace_texture_destroy(struct trace_screen *tr_scr, - struct pipe_texture *texture) +trace_resource_destroy(struct trace_screen *tr_scr, + struct trace_resource *tr_res) { - struct trace_texture *tr_tex = trace_texture(tr_scr, texture); - pipe_texture_reference(&tr_tex->texture, NULL); - FREE(tr_tex); + pipe_resource_reference(&tr_res->resource, NULL); + FREE(tr_res); } struct pipe_surface * -trace_surface_create(struct trace_texture *tr_tex, - struct pipe_surface *surface) +trace_surf_create(struct trace_context *tr_ctx, + struct trace_resource *tr_res, + struct pipe_surface *surface) { struct trace_surface *tr_surf; - + if(!surface) goto error; - - assert(surface->texture == tr_tex->texture); - + + assert(surface->texture == tr_res->resource); + tr_surf = CALLOC_STRUCT(trace_surface); if(!tr_surf) goto error; - + memcpy(&tr_surf->base, surface, sizeof(struct pipe_surface)); - + tr_surf->base.context = &tr_ctx->base; + + pipe_reference_init(&tr_surf->base.reference, 1); tr_surf->base.texture = NULL; - pipe_texture_reference(&tr_surf->base.texture, &tr_tex->base); + pipe_resource_reference(&tr_surf->base.texture, &tr_res->base); tr_surf->surface = surface; return &tr_surf->base; - + error: pipe_surface_reference(&surface, NULL); return NULL; @@ -100,52 +106,52 @@ error: void -trace_surface_destroy(struct trace_texture *tr_tex, - struct pipe_surface *surface) +trace_surf_destroy(struct trace_surface *tr_surf) { - struct trace_surface *tr_surf = trace_surface(tr_tex, surface); - pipe_texture_reference(&tr_surf->base.texture, NULL); + trace_context_check(tr_surf->base.context); + pipe_resource_reference(&tr_surf->base.texture, NULL); pipe_surface_reference(&tr_surf->surface, NULL); FREE(tr_surf); } struct pipe_transfer * -trace_transfer_create(struct trace_texture *tr_tex, - struct pipe_transfer *transfer) +trace_transfer_create(struct trace_context *tr_ctx, + struct trace_resource *tr_res, + struct pipe_transfer *transfer) { struct trace_transfer *tr_trans; - + if(!transfer) goto error; - - assert(transfer->texture == tr_tex->texture); - + + assert(transfer->resource == tr_res->resource); + tr_trans = CALLOC_STRUCT(trace_transfer); if(!tr_trans) goto error; - + memcpy(&tr_trans->base, transfer, sizeof(struct pipe_transfer)); - - tr_trans->base.texture = NULL; - pipe_texture_reference(&tr_trans->base.texture, &tr_tex->base); + + tr_trans->base.resource = NULL; tr_trans->transfer = transfer; + pipe_resource_reference(&tr_trans->base.resource, &tr_res->base); + assert(tr_trans->base.resource == &tr_res->base); + return &tr_trans->base; - + error: - pipe_transfer_reference(&transfer, NULL); + tr_ctx->pipe->transfer_unmap(tr_ctx->pipe, transfer); return NULL; } void -trace_transfer_destroy(struct trace_texture *tr_tex, - struct pipe_transfer *transfer) +trace_transfer_destroy(struct trace_context *tr_context, + struct trace_transfer *tr_trans) { - struct trace_transfer *tr_trans = trace_transfer(tr_tex, transfer); - pipe_texture_reference(&tr_trans->base.texture, NULL); - pipe_transfer_reference(&tr_trans->transfer, NULL); + pipe_resource_reference(&tr_trans->base.resource, NULL); FREE(tr_trans); }