svga: sync with upstream changes to surface flags
authorCharmaine Lee <charmainel@vmware.com>
Thu, 1 Jun 2017 22:12:14 +0000 (15:12 -0700)
committerBrian Paul <brianp@vmware.com>
Wed, 5 Sep 2018 17:22:42 +0000 (11:22 -0600)
SVGA device now supports 64 bits surface flags. This patch
updates the winsys interface to allow 64 bits surface flags.
The linux winsys layer will for now only honor the lower 32 bits of
the surface flags.

Reviewed-by: Brian Paul <brianp@vmware.com>
src/gallium/drivers/svga/svga_screen_cache.c
src/gallium/drivers/svga/svga_screen_cache.h
src/gallium/drivers/svga/svga_surface.c
src/gallium/drivers/svga/svga_surface.h
src/gallium/drivers/svga/svga_winsys.h
src/gallium/winsys/svga/drm/vmw_screen.h
src/gallium/winsys/svga/drm/vmw_screen_dri.c
src/gallium/winsys/svga/drm/vmw_screen_ioctl.c
src/gallium/winsys/svga/drm/vmw_screen_svga.c

index 4c923bf8eeddcacf503dccf1489c2747e7ec274f..82dd2b2c3a0b83fea9ad561995ac6efd9e6d61c3 100644 (file)
@@ -478,7 +478,7 @@ svga_screen_surface_create(struct svga_screen *svgascreen,
    if (cachable) {
       /* Try to re-cycle a previously freed, cached surface */
       if (key->format == SVGA3D_BUFFER) {
-         SVGA3dSurface1Flags hint_flag;
+         SVGA3dSurfaceAllFlags hint_flag;
 
          /* For buffers, round the buffer size up to the nearest power
           * of two to increase the probability of cache hits.  Keep
index aa8e0c3eff230ed1add9eaee282d2c3b96ed3c02..a239b761fc2705a0ba4a03f249fe6db4b7a26437 100644 (file)
@@ -60,7 +60,7 @@ struct svga_context;
  */
 struct svga_host_surface_cache_key
 {
-   SVGA3dSurface1Flags flags;
+   SVGA3dSurfaceAllFlags flags;
    SVGA3dSurfaceFormat format;
    SVGA3dSize size;
    uint32_t numFaces:3;
index 98a0cf6ade33e71741746ae000e79f8ad664b91b..cb74a00c1e0165441043a7ae030f65e1303ad335 100644 (file)
@@ -151,7 +151,7 @@ struct svga_winsys_surface *
 svga_texture_view_surface(struct svga_context *svga,
                           struct svga_texture *tex,
                           unsigned bind_flags,
-                          SVGA3dSurface1Flags flags,
+                          SVGA3dSurfaceAllFlags flags,
                           SVGA3dSurfaceFormat format,
                           unsigned start_mip,
                           unsigned num_mip,
@@ -261,7 +261,7 @@ svga_create_surface_view(struct pipe_context *pipe,
    struct svga_surface *s;
    unsigned layer, zslice, bind;
    unsigned nlayers = 1;
-   SVGA3dSurface1Flags flags = 0;
+   SVGA3dSurfaceAllFlags flags = 0;
    SVGA3dSurfaceFormat format;
    struct pipe_surface *retVal = NULL;
 
index fc6b333fe7b36f6ddecdb61c9b4804dae9b001a5..6c1e0e72165d2da038f882952250681b88cd65d6 100644 (file)
@@ -95,7 +95,7 @@ struct svga_winsys_surface *
 svga_texture_view_surface(struct svga_context *svga,
                           struct svga_texture *tex,
                           unsigned bind_flags,
-                          SVGA3dSurface1Flags flags,
+                          SVGA3dSurfaceAllFlags flags,
                           SVGA3dSurfaceFormat format,
                           unsigned start_mip,
                           unsigned num_mip,
index a4c4d6a885891fb3b3c2ec2601671f37e0980b18..ea7bbb380a8e8d7ac87d33b9e0ea26e4e093ed37 100644 (file)
@@ -530,7 +530,7 @@ struct svga_winsys_screen
     */
    struct svga_winsys_surface *
    (*surface_create)(struct svga_winsys_screen *sws,
-                     SVGA3dSurface1Flags flags,
+                     SVGA3dSurfaceAllFlags flags,
                      SVGA3dSurfaceFormat format,
                      unsigned usage,
                      SVGA3dSize size,
index f21cabb51f93acfb98cf27bdd4e5dc2cdb63637e..ea4d2e453bebfc4ba8e271595af57b2929b4426b 100644 (file)
@@ -128,7 +128,7 @@ vmw_ioctl_context_destroy(struct vmw_winsys_screen *vws,
 
 uint32
 vmw_ioctl_surface_create(struct vmw_winsys_screen *vws,
-                         SVGA3dSurfaceFlags flags,
+                         SVGA3dSurface1Flags flags,
                          SVGA3dSurfaceFormat format,
                          unsigned usage,
                          SVGA3dSize size,
@@ -137,7 +137,7 @@ vmw_ioctl_surface_create(struct vmw_winsys_screen *vws,
                          unsigned sampleCount);
 uint32
 vmw_ioctl_gb_surface_create(struct vmw_winsys_screen *vws,
-                           SVGA3dSurfaceFlags flags,
+                           SVGA3dSurface1Flags flags,
                            SVGA3dSurfaceFormat format,
                             unsigned usage,
                            SVGA3dSize size,
@@ -150,7 +150,7 @@ vmw_ioctl_gb_surface_create(struct vmw_winsys_screen *vws,
 int
 vmw_ioctl_gb_surface_ref(struct vmw_winsys_screen *vws,
                          const struct winsys_handle *whandle,
-                         SVGA3dSurfaceFlags *flags,
+                         SVGA3dSurface1Flags *flags,
                          SVGA3dSurfaceFormat *format,
                          uint32_t *numMipLevels,
                          uint32_t *handle,
index 76f29e2acedb2706b5eaf31a2968fe17b76a9f3d..4dbac43d314af9ce804edb6d9e7be6dd8977e8e9 100644 (file)
@@ -146,7 +146,7 @@ vmw_drm_gb_surface_from_handle(struct svga_winsys_screen *sws,
     struct vmw_svga_winsys_surface *vsrf;
     struct svga_winsys_surface *ssrf;
     struct vmw_winsys_screen *vws = vmw_winsys_screen(sws);
-    SVGA3dSurfaceFlags flags;
+    SVGA3dSurface1Flags flags;
     uint32_t mip_levels;
     struct vmw_buffer_desc desc;
     struct pb_manager *provider = vws->pools.gmr;
index 99f8f42107e04636953fcb8f92f92453ca920290..cb2eb1b493670d612da3e17399d45cf8274db131 100644 (file)
@@ -131,7 +131,7 @@ vmw_ioctl_context_destroy(struct vmw_winsys_screen *vws, uint32 cid)
 
 uint32
 vmw_ioctl_surface_create(struct vmw_winsys_screen *vws,
-                         SVGA3dSurfaceFlags flags,
+                         SVGA3dSurface1Flags flags,
                          SVGA3dSurfaceFormat format,
                          unsigned usage,
                          SVGA3dSize size,
@@ -193,7 +193,7 @@ vmw_ioctl_surface_create(struct vmw_winsys_screen *vws,
 
 uint32
 vmw_ioctl_gb_surface_create(struct vmw_winsys_screen *vws,
-                           SVGA3dSurfaceFlags flags,
+                           SVGA3dSurface1Flags flags,
                            SVGA3dSurfaceFormat format,
                             unsigned usage,
                            SVGA3dSize size,
@@ -342,7 +342,7 @@ vmw_ioctl_surface_req(const struct vmw_winsys_screen *vws,
 int
 vmw_ioctl_gb_surface_ref(struct vmw_winsys_screen *vws,
                          const struct winsys_handle *whandle,
-                         SVGA3dSurfaceFlags *flags,
+                         SVGA3dSurface1Flags *flags,
                          SVGA3dSurfaceFormat *format,
                          uint32_t *numMipLevels,
                          uint32_t *handle,
index 27a8b07016613b7e0875c438967b2fbdb2722720..9decf0c70530b9f689ee8ee6b90fae7853a05cf1 100644 (file)
@@ -170,7 +170,7 @@ vmw_svga_winsys_fence_server_sync(struct svga_winsys_screen *sws,
 
 static struct svga_winsys_surface *
 vmw_svga_winsys_surface_create(struct svga_winsys_screen *sws,
-                               SVGA3dSurfaceFlags flags,
+                               SVGA3dSurfaceAllFlags allflags,
                                SVGA3dSurfaceFormat format,
                                unsigned usage,
                                SVGA3dSize size,
@@ -184,6 +184,11 @@ vmw_svga_winsys_surface_create(struct svga_winsys_screen *sws,
    struct pb_manager *provider;
    uint32_t buffer_size;
 
+   /* Until the kernel supports 64 bits surface flag, the linux driver
+    * only honors the lower 32 bits of the surface flag.
+    */
+   SVGA3dSurface1Flags flags = (SVGA3dSurface1Flags)allflags;
+
    memset(&desc, 0, sizeof(desc));
    surface = CALLOC_STRUCT(vmw_svga_winsys_surface);
    if(!surface)