Merge remote branch 'origin/7.8'
[mesa.git] / src / gallium / drivers / identity / id_screen.c
index 53eae3ef5440c821bb78e1d9471befadaaa75b1d..419b146578770be49c54c665d684c765788322f5 100644 (file)
@@ -32,6 +32,7 @@
 
 #include "id_public.h"
 #include "id_screen.h"
+#include "id_context.h"
 #include "id_objects.h"
 
 
@@ -103,6 +104,20 @@ identity_screen_is_format_supported(struct pipe_screen *_screen,
                                       geom_flags);
 }
 
+static struct pipe_context *
+identity_screen_context_create(struct pipe_screen *_screen,
+                               void *priv)
+{
+   struct identity_screen *id_screen = identity_screen(_screen);
+   struct pipe_screen *screen = id_screen->screen;
+   struct pipe_context *result;
+
+   result = screen->context_create(screen, priv);
+   if (result)
+      return identity_context_create(_screen, result);
+   return NULL;
+}
+
 static struct pipe_texture *
 identity_screen_texture_create(struct pipe_screen *_screen,
                                const struct pipe_texture *templat)
@@ -120,27 +135,40 @@ identity_screen_texture_create(struct pipe_screen *_screen,
 }
 
 static struct pipe_texture *
-identity_screen_texture_blanket(struct pipe_screen *_screen,
-                                const struct pipe_texture *templat,
-                                const unsigned *stride,
-                                struct pipe_buffer *_buffer)
+identity_screen_texture_from_handle(struct pipe_screen *_screen,
+                                    const struct pipe_texture *templ,
+                                    struct winsys_handle *handle)
 {
    struct identity_screen *id_screen = identity_screen(_screen);
-   struct identity_buffer *id_buffer = identity_buffer(_buffer);
    struct pipe_screen *screen = id_screen->screen;
-   struct pipe_buffer *buffer = id_buffer->buffer;
    struct pipe_texture *result;
 
-   result = screen->texture_blanket(screen,
-                                    templat,
-                                    stride,
-                                    buffer);
+   /* TODO trace call */
 
-   if (result)
-      return identity_texture_create(id_screen, result);
-   return NULL;
+   result = screen->texture_from_handle(screen, templ, handle);
+
+   result = identity_texture_create(identity_screen(_screen), result);
+
+   return result;
 }
 
+static boolean
+identity_screen_texture_get_handle(struct pipe_screen *_screen,
+                                   struct pipe_texture *_texture,
+                                   struct winsys_handle *handle)
+{
+   struct identity_screen *id_screen = identity_screen(_screen);
+   struct identity_texture *id_texture = identity_texture(_texture);
+   struct pipe_screen *screen = id_screen->screen;
+   struct pipe_texture *texture = id_texture->texture;
+
+   /* TODO trace call */
+
+   return screen->texture_get_handle(screen, texture, handle);
+}
+
+
+
 static void
 identity_screen_texture_destroy(struct pipe_texture *_texture)
 {
@@ -179,71 +207,6 @@ identity_screen_tex_surface_destroy(struct pipe_surface *_surface)
    identity_surface_destroy(identity_surface(_surface));
 }
 
-static struct pipe_transfer *
-identity_screen_get_tex_transfer(struct pipe_screen *_screen,
-                                 struct pipe_texture *_texture,
-                                 unsigned face,
-                                 unsigned level,
-                                 unsigned zslice,
-                                 enum pipe_transfer_usage usage,
-                                 unsigned x,
-                                 unsigned y,
-                                 unsigned w,
-                                 unsigned h)
-{
-   struct identity_screen *id_screen = identity_screen(_screen);
-   struct identity_texture *id_texture = identity_texture(_texture);
-   struct pipe_screen *screen = id_screen->screen;
-   struct pipe_texture *texture = id_texture->texture;
-   struct pipe_transfer *result;
-
-   result = screen->get_tex_transfer(screen,
-                                     texture,
-                                     face,
-                                     level,
-                                     zslice,
-                                     usage,
-                                     x,
-                                     y,
-                                     w,
-                                     h);
-
-   if (result)
-      return identity_transfer_create(id_texture, result);
-   return NULL;
-}
-
-static void
-identity_screen_tex_transfer_destroy(struct pipe_transfer *_transfer)
-{
-   identity_transfer_destroy(identity_transfer(_transfer));
-}
-
-static void *
-identity_screen_transfer_map(struct pipe_screen *_screen,
-                             struct pipe_transfer *_transfer)
-{
-   struct identity_screen *id_screen = identity_screen(_screen);
-   struct identity_transfer *id_transfer = identity_transfer(_transfer);
-   struct pipe_screen *screen = id_screen->screen;
-   struct pipe_transfer *transfer = id_transfer->transfer;
-
-   return screen->transfer_map(screen,
-                               transfer);
-}
-
-static void
-identity_screen_transfer_unmap(struct pipe_screen *_screen,
-                               struct pipe_transfer *_transfer)
-{
-   struct identity_screen *id_screen = identity_screen(_screen);
-   struct identity_transfer *id_transfer = identity_transfer(_transfer);
-   struct pipe_screen *screen = id_screen->screen;
-   struct pipe_transfer *transfer = id_transfer->transfer;
-
-   screen->transfer_unmap(screen,
-                          transfer);
-}
 
 static struct pipe_buffer *
 identity_screen_buffer_create(struct pipe_screen *_screen,
@@ -283,31 +246,6 @@ identity_screen_user_buffer_create(struct pipe_screen *_screen,
    return NULL;
 }
 
-static struct pipe_buffer *
-identity_screen_surface_buffer_create(struct pipe_screen *_screen,
-                                      unsigned width,
-                                      unsigned height,
-                                      enum pipe_format format,
-                                      unsigned usage,
-                                      unsigned tex_usage,
-                                      unsigned *stride)
-{
-   struct identity_screen *id_screen = identity_screen(_screen);
-   struct pipe_screen *screen = id_screen->screen;
-   struct pipe_buffer *result;
-
-   result = screen->surface_buffer_create(screen,
-                                          width,
-                                          height,
-                                          format,
-                                          usage,
-                                          tex_usage,
-                                          stride);
-
-   if (result)
-      return identity_buffer_create(id_screen, result);
-   return NULL;
-}
 
 static void *
 identity_screen_buffer_map(struct pipe_screen *_screen,
@@ -478,18 +416,15 @@ identity_screen_create(struct pipe_screen *screen)
    id_screen->base.get_param = identity_screen_get_param;
    id_screen->base.get_paramf = identity_screen_get_paramf;
    id_screen->base.is_format_supported = identity_screen_is_format_supported;
+   id_screen->base.context_create = identity_screen_context_create;
    id_screen->base.texture_create = identity_screen_texture_create;
-   id_screen->base.texture_blanket = identity_screen_texture_blanket;
+   id_screen->base.texture_from_handle = identity_screen_texture_from_handle;
+   id_screen->base.texture_get_handle = identity_screen_texture_get_handle;
    id_screen->base.texture_destroy = identity_screen_texture_destroy;
    id_screen->base.get_tex_surface = identity_screen_get_tex_surface;
    id_screen->base.tex_surface_destroy = identity_screen_tex_surface_destroy;
-   id_screen->base.get_tex_transfer = identity_screen_get_tex_transfer;
-   id_screen->base.tex_transfer_destroy = identity_screen_tex_transfer_destroy;
-   id_screen->base.transfer_map = identity_screen_transfer_map;
-   id_screen->base.transfer_unmap = identity_screen_transfer_unmap;
    id_screen->base.buffer_create = identity_screen_buffer_create;
    id_screen->base.user_buffer_create = identity_screen_user_buffer_create;
-   id_screen->base.surface_buffer_create = identity_screen_surface_buffer_create;
    if (screen->buffer_map)
       id_screen->base.buffer_map = identity_screen_buffer_map;
    if (screen->buffer_map_range)