llvmpipe: fix crash when not all attachments are populated in a fb
[mesa.git] / src / gallium / drivers / identity / id_objects.c
index 593928f399c7edaa7ee904169541f0426e617184..a26d9874870b9bc0b0f3f3f8953003ca6ee7c0a0 100644 (file)
@@ -71,7 +71,8 @@ identity_resource_destroy(struct identity_resource *id_resource)
 
 
 struct pipe_surface *
-identity_surface_create(struct identity_resource *id_resource,
+identity_surface_create(struct identity_context *id_context,
+                        struct identity_resource *id_resource,
                         struct pipe_surface *surface)
 {
    struct identity_surface *id_surface;
@@ -100,10 +101,12 @@ error:
 }
 
 void
-identity_surface_destroy(struct identity_surface *id_surface)
+identity_surface_destroy(struct identity_context *id_context,
+                         struct identity_surface *id_surface)
 {
    pipe_resource_reference(&id_surface->base.texture, NULL);
-   pipe_surface_reference(&id_surface->surface, NULL);
+   id_context->pipe->surface_destroy(id_context->pipe,
+                                     id_surface->surface);
    FREE(id_surface);
 }
 
@@ -146,9 +149,9 @@ identity_sampler_view_destroy(struct identity_context *id_context,
 
 
 struct pipe_transfer *
-identity_transfer_create(struct identity_context *id_context,
-                         struct identity_resource *id_resource,
-                         struct pipe_transfer *transfer)
+identity_transfer_map(struct identity_context *id_context,
+                      struct identity_resource *id_resource,
+                      struct pipe_transfer *transfer)
 {
    struct identity_transfer *id_transfer;
 
@@ -172,7 +175,7 @@ identity_transfer_create(struct identity_context *id_context,
    return &id_transfer->base;
 
 error:
-   id_context->pipe->transfer_destroy(id_context->pipe, transfer);
+   id_context->pipe->transfer_unmap(id_context->pipe, transfer);
    return NULL;
 }
 
@@ -181,8 +184,6 @@ identity_transfer_destroy(struct identity_context *id_context,
                           struct identity_transfer *id_transfer)
 {
    pipe_resource_reference(&id_transfer->base.resource, NULL);
-   id_context->pipe->transfer_destroy(id_context->pipe,
-                                      id_transfer->transfer);
    FREE(id_transfer);
 }