X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fdrivers%2Fidentity%2Fid_objects.c;h=593928f399c7edaa7ee904169541f0426e617184;hb=25ecc9521dcab781a8a3688ab331fdaee34a4fff;hp=2b1a60c1bf135a8943c90f601ced350190222fe0;hpb=653a83445f94620673f747a4ace6847a2c7fdb4d;p=mesa.git diff --git a/src/gallium/drivers/identity/id_objects.c b/src/gallium/drivers/identity/id_objects.c index 2b1a60c1bf1..593928f399c 100644 --- a/src/gallium/drivers/identity/id_objects.c +++ b/src/gallium/drivers/identity/id_objects.c @@ -30,81 +30,48 @@ #include "id_screen.h" #include "id_objects.h" +#include "id_context.h" -struct pipe_buffer * -identity_buffer_create(struct identity_screen *id_screen, - struct pipe_buffer *buffer) -{ - struct identity_buffer *id_buffer; - - if(!buffer) - goto error; - - assert(buffer->screen == id_screen->screen); - - id_buffer = CALLOC_STRUCT(identity_buffer); - if(!id_buffer) - goto error; - - memcpy(&id_buffer->base, buffer, sizeof(struct pipe_buffer)); - - pipe_reference_init(&id_buffer->base.reference, 1); - id_buffer->base.screen = &id_screen->base; - id_buffer->buffer = buffer; - - return &id_buffer->base; - -error: - pipe_buffer_reference(&buffer, NULL); - return NULL; -} - -void -identity_buffer_destroy(struct identity_buffer *id_buffer) -{ - pipe_buffer_reference(&id_buffer->buffer, NULL); - FREE(id_buffer); -} -struct pipe_texture * -identity_texture_create(struct identity_screen *id_screen, - struct pipe_texture *texture) +struct pipe_resource * +identity_resource_create(struct identity_screen *id_screen, + struct pipe_resource *resource) { - struct identity_texture *id_texture; + struct identity_resource *id_resource; - if(!texture) + if(!resource) goto error; - assert(texture->screen == id_screen->screen); + assert(resource->screen == id_screen->screen); - id_texture = CALLOC_STRUCT(identity_texture); - if(!id_texture) + id_resource = CALLOC_STRUCT(identity_resource); + if(!id_resource) goto error; - memcpy(&id_texture->base, texture, sizeof(struct pipe_texture)); + memcpy(&id_resource->base, resource, sizeof(struct pipe_resource)); - pipe_reference_init(&id_texture->base.reference, 1); - id_texture->base.screen = &id_screen->base; - id_texture->texture = texture; + pipe_reference_init(&id_resource->base.reference, 1); + id_resource->base.screen = &id_screen->base; + id_resource->resource = resource; - return &id_texture->base; + return &id_resource->base; error: - pipe_texture_reference(&texture, NULL); + pipe_resource_reference(&resource, NULL); return NULL; } void -identity_texture_destroy(struct identity_texture *id_texture) +identity_resource_destroy(struct identity_resource *id_resource) { - pipe_texture_reference(&id_texture->texture, NULL); - FREE(id_texture); + pipe_resource_reference(&id_resource->resource, NULL); + FREE(id_resource); } struct pipe_surface * -identity_surface_create(struct identity_texture *id_texture, +identity_surface_create(struct identity_resource *id_resource, struct pipe_surface *surface) { struct identity_surface *id_surface; @@ -112,7 +79,7 @@ identity_surface_create(struct identity_texture *id_texture, if(!surface) goto error; - assert(surface->texture == id_texture->texture); + assert(surface->texture == id_resource->resource); id_surface = CALLOC_STRUCT(identity_surface); if(!id_surface) @@ -122,7 +89,7 @@ identity_surface_create(struct identity_texture *id_texture, pipe_reference_init(&id_surface->base.reference, 1); id_surface->base.texture = NULL; - pipe_texture_reference(&id_surface->base.texture, &id_texture->base); + pipe_resource_reference(&id_surface->base.texture, &id_resource->base); id_surface->surface = surface; return &id_surface->base; @@ -135,87 +102,87 @@ error: void identity_surface_destroy(struct identity_surface *id_surface) { - pipe_texture_reference(&id_surface->base.texture, NULL); + pipe_resource_reference(&id_surface->base.texture, NULL); pipe_surface_reference(&id_surface->surface, NULL); FREE(id_surface); } -struct pipe_transfer * -identity_transfer_create(struct identity_texture *id_texture, - struct pipe_transfer *transfer) +struct pipe_sampler_view * +identity_sampler_view_create(struct identity_context *id_context, + struct identity_resource *id_resource, + struct pipe_sampler_view *view) { - struct identity_transfer *id_transfer; - - if(!transfer) - goto error; - - assert(transfer->texture == id_texture->texture); + struct identity_sampler_view *id_view; - id_transfer = CALLOC_STRUCT(identity_transfer); - if(!id_transfer) + if (!view) goto error; - memcpy(&id_transfer->base, transfer, sizeof(struct pipe_transfer)); + assert(view->texture == id_resource->resource); - id_transfer->base.texture = NULL; - pipe_texture_reference(&id_transfer->base.texture, &id_texture->base); - id_transfer->transfer = transfer; - assert(id_transfer->base.texture == &id_texture->base); + id_view = CALLOC_STRUCT(identity_sampler_view); - return &id_transfer->base; + id_view->base = *view; + id_view->base.reference.count = 1; + id_view->base.texture = NULL; + pipe_resource_reference(&id_view->base.texture, id_resource->resource); + id_view->base.context = id_context->pipe; + id_view->sampler_view = view; + return &id_view->base; error: - transfer->texture->screen->tex_transfer_destroy(transfer); return NULL; } void -identity_transfer_destroy(struct identity_transfer *id_transfer) +identity_sampler_view_destroy(struct identity_context *id_context, + struct identity_sampler_view *id_view) { - struct identity_screen *id_screen = identity_screen(id_transfer->base.texture->screen); - struct pipe_screen *screen = id_screen->screen; - - pipe_texture_reference(&id_transfer->base.texture, NULL); - screen->tex_transfer_destroy(id_transfer->transfer); - FREE(id_transfer); + pipe_resource_reference(&id_view->base.texture, NULL); + id_context->pipe->sampler_view_destroy(id_context->pipe, + id_view->sampler_view); + FREE(id_view); } -struct pipe_video_surface * -identity_video_surface_create(struct identity_screen *id_screen, - struct pipe_video_surface *video_surface) + +struct pipe_transfer * +identity_transfer_create(struct identity_context *id_context, + struct identity_resource *id_resource, + struct pipe_transfer *transfer) { - struct identity_video_surface *id_video_surface; + struct identity_transfer *id_transfer; - if (!video_surface) { + if(!transfer) goto error; - } - assert(video_surface->screen == id_screen->screen); + assert(transfer->resource == id_resource->resource); - id_video_surface = CALLOC_STRUCT(identity_video_surface); - if (!id_video_surface) { + id_transfer = CALLOC_STRUCT(identity_transfer); + if(!id_transfer) goto error; - } - memcpy(&id_video_surface->base, - video_surface, - sizeof(struct pipe_video_surface)); + memcpy(&id_transfer->base, transfer, sizeof(struct pipe_transfer)); - pipe_reference_init(&id_video_surface->base.reference, 1); - id_video_surface->base.screen = &id_screen->base; - id_video_surface->video_surface = video_surface; + id_transfer->base.resource = NULL; + id_transfer->transfer = transfer; + + pipe_resource_reference(&id_transfer->base.resource, &id_resource->base); + assert(id_transfer->base.resource == &id_resource->base); - return &id_video_surface->base; + return &id_transfer->base; error: - pipe_video_surface_reference(&video_surface, NULL); + id_context->pipe->transfer_destroy(id_context->pipe, transfer); return NULL; } void -identity_video_surface_destroy(struct identity_video_surface *id_video_surface) +identity_transfer_destroy(struct identity_context *id_context, + struct identity_transfer *id_transfer) { - pipe_video_surface_reference(&id_video_surface->video_surface, NULL); - FREE(id_video_surface); + pipe_resource_reference(&id_transfer->base.resource, NULL); + id_context->pipe->transfer_destroy(id_context->pipe, + id_transfer->transfer); + FREE(id_transfer); } +