svga: Remove the surface_invalidate winsys function
authorThomas Hellstrom <thellstrom@vmware.com>
Wed, 8 May 2019 13:50:18 +0000 (15:50 +0200)
committerThomas Hellstrom <thellstrom@vmware.com>
Fri, 17 May 2019 06:44:31 +0000 (08:44 +0200)
Instead unconditionally call SVGA3D_InvalidateGBSurface() since it's needed
also for Linux for dirty buffers and operation without SurfaceDMA.
For non-guest-backed operation, remove the surface cache surface invalidation
altogether.

Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
Reviewed-by: Charmaine Lee <charmainel@vmware.com>
src/gallium/drivers/svga/svga_screen_cache.c
src/gallium/drivers/svga/svga_surface.c
src/gallium/drivers/svga/svga_winsys.h
src/gallium/winsys/svga/drm/vmw_context.c
src/gallium/winsys/svga/drm/vmw_surface.c
src/gallium/winsys/svga/drm/vmw_surface.h

index 82dd2b2c3a0b83fea9ad561995ac6efd9e6d61c3..e2282d6a15c9ce7b324e9ee1ab406f5fd829cf95 100644 (file)
@@ -33,7 +33,7 @@
 #include "svga_screen.h"
 #include "svga_screen_cache.h"
 #include "svga_context.h"
-
+#include "svga_cmd.h"
 
 #define SVGA_SURFACE_CACHE_ENABLED 1
 
@@ -291,7 +291,12 @@ svga_screen_cache_add(struct svga_screen *svgascreen,
 
       SVGA_DBG(DEBUG_CACHE|DEBUG_DMA,
                "cache sid %p\n", entry->handle);
-      LIST_ADD(&entry->head, &cache->validated);
+
+      /* If we don't have gb objects, we don't need to invalidate. */
+      if (sws->have_gb_objects)
+         LIST_ADD(&entry->head, &cache->validated);
+      else
+         LIST_ADD(&entry->head, &cache->invalidated);
 
       cache->total_size += surf_size;
    }
@@ -355,6 +360,7 @@ svga_screen_cache_flush(struct svga_screen *svgascreen,
       entry = LIST_ENTRY(struct svga_host_surface_cache_entry, curr, head);
 
       assert(entry->handle);
+      assert(svga_have_gb_objects(svga));
 
       if (sws->surface_is_flushed(sws, entry->handle)) {
          /* remove entry from the validated list */
@@ -363,7 +369,7 @@ svga_screen_cache_flush(struct svga_screen *svgascreen,
          /* It is now safe to invalidate the surface content.
           * It will be done using the current context.
           */
-         if (svga->swc->surface_invalidate(svga->swc, entry->handle) != PIPE_OK) {
+         if (SVGA3D_InvalidateGBSurface(svga->swc, entry->handle) != PIPE_OK) {
             MAYBE_UNUSED enum pipe_error ret;
 
             /* Even though surface invalidation here is done after the command
@@ -375,7 +381,7 @@ svga_screen_cache_flush(struct svga_screen *svgascreen,
              * this function itself is called inside svga_context_flush().
              */
             svga->swc->flush(svga->swc, NULL);
-            ret = svga->swc->surface_invalidate(svga->swc, entry->handle);
+            ret = SVGA3D_InvalidateGBSurface(svga->swc, entry->handle);
             assert(ret == PIPE_OK);
          }
 
index 73208cf58ac2c8bac71c2497007657c863b28418..5d1f369fa902d9cbae33032f8a807b21b957ba48 100644 (file)
@@ -591,9 +591,9 @@ svga_validate_surface_view(struct svga_context *svga, struct svga_surface *s)
           * need to update the host-side copy with the invalid
           * content when the associated mob is first bound to the surface.
           */
-         if (svga->swc->surface_invalidate(svga->swc, stex->handle) != PIPE_OK) {
+         if (SVGA3D_InvalidateGBSurface(svga->swc, stex->handle) != PIPE_OK) {
             svga_context_flush(svga, NULL);
-            ret = svga->swc->surface_invalidate(svga->swc, stex->handle);
+            ret = SVGA3D_InvalidateGBSurface(svga->swc, stex->handle);
             assert(ret == PIPE_OK);
          }
          stex->validated = TRUE;
index 14782e19a7ddd77daf6b1f3f8979e0d0c4f62d64..174b5f3b78f1633ae331af96a19a56d0fc1c8174 100644 (file)
@@ -411,13 +411,6 @@ struct svga_winsys_context
                     struct svga_winsys_surface *surface,
                     boolean *rebind);
 
-   /**
-    * Invalidate the content of this surface
-    */
-   enum pipe_error
-   (*surface_invalidate)(struct svga_winsys_context *swc,
-                         struct svga_winsys_surface *surface);
-
    /**
     * Create and define a DX GB shader that resides in the device COTable.
     * Caller of this function will issue the DXDefineShader command.
index 59963ff7a82c3337a94286586f26b864b3832af3..938a3b4a5bcb1e91e15baf0f89aa876e40886895 100644 (file)
@@ -816,7 +816,6 @@ vmw_svga_winsys_context_create(struct svga_winsys_screen *sws)
    vswc->base.flush = vmw_swc_flush;
    vswc->base.surface_map = vmw_svga_winsys_surface_map;
    vswc->base.surface_unmap = vmw_svga_winsys_surface_unmap;
-   vswc->base.surface_invalidate = vmw_svga_winsys_surface_invalidate;
 
    vswc->base.shader_create = vmw_svga_winsys_vgpu10_shader_create;
    vswc->base.shader_destroy = vmw_svga_winsys_vgpu10_shader_destroy;
index 04aa932784b944f76983476faa928f756ffcfa5e..69408ffe9d914c450d8243f461c150c3d28ede16 100644 (file)
@@ -176,19 +176,6 @@ vmw_svga_winsys_surface_unmap(struct svga_winsys_context *swc,
    mtx_unlock(&vsrf->mutex);
 }
 
-enum pipe_error
-vmw_svga_winsys_surface_invalidate(struct svga_winsys_context *swc,
-                                   struct svga_winsys_surface *surf)
-{
-   /* this is a noop since surface invalidation is not needed for DMA path.
-    * DMA is enabled when guest-backed surface is not enabled or
-    * guest-backed dma is enabled.  Since guest-backed dma is enabled
-    * when guest-backed surface is enabled, that implies DMA is always enabled;
-    * hence, surface invalidation is not needed.
-    */
-   return PIPE_OK;
-}
-
 void
 vmw_svga_winsys_surface_reference(struct vmw_svga_winsys_surface **pdst,
                                   struct vmw_svga_winsys_surface *src)
index 0fdc8de1d56e5d46bc25a8e0f70ea1537c6b78a0..b1a1ce746b32b13d0e3921d1d253bb529dc6d478 100644 (file)
@@ -94,8 +94,4 @@ void
 vmw_svga_winsys_surface_unmap(struct svga_winsys_context *swc,
                               struct svga_winsys_surface *srf,
                               boolean *rebind);
-enum pipe_error
-vmw_svga_winsys_surface_invalidate(struct svga_winsys_context *swc,
-                                   struct svga_winsys_surface *srf);
-
 #endif /* VMW_SURFACE_H_ */