svga: Hardcode SVGA_COMBINE_USERBUFFERS to 1.
authorJosé Fonseca <jfonseca@vmware.com>
Wed, 16 Mar 2011 15:43:00 +0000 (15:43 +0000)
committerJosé Fonseca <jfonseca@vmware.com>
Wed, 16 Mar 2011 15:43:00 +0000 (15:43 +0000)
The code no longer supports otherwise -- it relies on buffers being
uploaded via u_upload_mgr -- so make this clear.

Also, there's no need to flush after draws from user buffers, given all
user content should have been copied by then.

src/gallium/drivers/svga/svga_pipe_draw.c
src/gallium/drivers/svga/svga_resource_buffer.h
src/gallium/drivers/svga/svga_resource_buffer_upload.c
src/gallium/drivers/svga/svga_screen.h
src/gallium/drivers/svga/svga_state_vdecl.c

index fda5c28433c2a93ec5879a2f43c3ffb9e1617ca6..2093bcae101c8626cedf17a17456db763e3e4a99 100644 (file)
@@ -73,12 +73,6 @@ retry_draw_range_elements( struct svga_context *svga,
    if (ret)
       goto retry;
 
-   if (svga->curr.any_user_vertex_buffers) {
-      ret = svga_hwtnl_flush( svga->hwtnl );
-      if (ret)
-         goto retry;
-   }
-
    return PIPE_OK;
 
 retry:
@@ -122,12 +116,6 @@ retry_draw_arrays( struct svga_context *svga,
    if (ret)
       goto retry;
 
-   if (svga->curr.any_user_vertex_buffers) {
-      ret = svga_hwtnl_flush( svga->hwtnl );
-      if (ret)
-         goto retry;
-   }
-
    return 0;
 
 retry:
index a689fcb3bb7925518efc948c56284bec9669d545..95032213fa50767ddc3c982add1a5ac7a6dff9c1 100644 (file)
@@ -90,7 +90,9 @@ struct svga_buffer
     * Host surface handle.
     * 
     * This is a platform independent abstraction for host SID. We create when 
-    * trying to bind
+    * trying to bind.
+    *
+    * Only set for non-user buffers.
     */
    struct svga_winsys_surface *handle;
 
@@ -135,6 +137,8 @@ struct svga_buffer
     * A piece of GMR memory, with the same size of the buffer. It is created
     * when mapping the buffer, and will be used to upload vertex data to the
     * host.
+    *
+    * Only set for non-user buffers.
     */
    struct svga_winsys_buffer *hwbuf;
 
index 0bfa8a14a6fcfa57a359f4c6681a597076e93c86..e1cff3219bd5e79795cded2cf45abdc0ffcfe272 100644 (file)
@@ -131,6 +131,8 @@ enum pipe_error
 svga_buffer_create_host_surface(struct svga_screen *ss,
                                 struct svga_buffer *sbuf)
 {
+   assert(!sbuf->user);
+
    if(!sbuf->handle) {
       sbuf->key.flags = 0;
       
@@ -665,6 +667,9 @@ svga_redefine_user_buffer(struct pipe_context *pipe,
    struct svga_buffer *sbuf = svga_buffer(resource);
 
    assert(sbuf->user);
+   assert(!sbuf->dma.pending);
+   assert(!sbuf->handle);
+   assert(!sbuf->hwbuf);
 
    /*
     * Release any uploaded user buffer.
@@ -677,26 +682,7 @@ svga_redefine_user_buffer(struct pipe_context *pipe,
 
    pipe_mutex_lock(ss->swc_mutex);
 
-   if (offset + size > resource->width0) {
-      /*
-       * User buffers shouldn't have DMA directly, unless
-       * SVGA_COMBINE_USERBUFFERS is not set.
-       */
-
-      if (sbuf->dma.pending) {
-         svga_buffer_upload_flush(svga, sbuf);
-      }
-
-      if (sbuf->handle) {
-         svga_buffer_destroy_host_surface(ss, sbuf);
-      }
-
-      if (sbuf->hwbuf) {
-         svga_buffer_destroy_hw_storage(ss, sbuf);
-      }
-
-      sbuf->key.size.width = sbuf->b.b.width0 = offset + size;
-   }
+   sbuf->key.size.width = sbuf->b.b.width0 = offset + size;
 
    pipe_mutex_unlock(ss->swc_mutex);
 
index 7ef627f928d6ef5851dbf4a1f08156eeea799acb..6d8d287ce9591ad007819209c8d359e578eae6b1 100644 (file)
@@ -39,8 +39,6 @@ struct svga_winsys_screen;
 struct svga_winsys_context;
 struct SVGACmdMemory;
 
-#define SVGA_COMBINE_USERBUFFERS 1
-
 /**
  * Subclass of pipe_screen
  */
index 2f85f9488f9dda03578d39b15080da7d5152d46c..d65c6f66c1ec713589cc021f3dac9d5c1e2d1e7a 100644 (file)
@@ -149,9 +149,7 @@ static int emit_hw_vdecl( struct svga_context *svga,
     * userbuffers now and try to combine multiple userbuffers from
     * multiple draw calls into a single host buffer for performance.
     */
-   if (svga->curr.any_user_vertex_buffers &&
-       SVGA_COMBINE_USERBUFFERS)
-   {
+   if (svga->curr.any_user_vertex_buffers) {
       ret = upload_user_buffers( svga );
       if (ret)
          return ret;