r300g: fix min/max lod computation
[mesa.git] / src / gallium / drivers / identity / id_objects.c
index d37fb0042e54a2c6d46dfb1d2a6fb704ddb4236a..593928f399c7edaa7ee904169541f0426e617184 100644 (file)
 #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)
+struct pipe_resource *
+identity_resource_create(struct identity_screen *id_screen,
+                        struct pipe_resource *resource)
 {
-   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 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;
@@ -113,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)
@@ -123,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;
@@ -136,88 +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_context *id_context,
-                        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;
-   id_transfer->transfer = transfer;
+   id_view = CALLOC_STRUCT(identity_sampler_view);
 
-   pipe_texture_reference(&id_transfer->base.texture, &id_texture->base);
-   assert(id_transfer->base.texture == &id_texture->base);
-
-   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:
-   id_context->pipe->tex_transfer_destroy(id_context->pipe, transfer);
    return NULL;
 }
 
 void
-identity_transfer_destroy(struct identity_context *id_context,
-                          struct identity_transfer *id_transfer)
+identity_sampler_view_destroy(struct identity_context *id_context,
+                              struct identity_sampler_view *id_view)
 {
-   pipe_texture_reference(&id_transfer->base.texture, NULL);
-   id_context->pipe->tex_transfer_destroy(id_context->pipe,
-                                          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));
+
+   id_transfer->base.resource = NULL;
+   id_transfer->transfer = 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;
+   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);
 }
+