android: freedreno: move a2xx disasm out of gallium
[mesa.git] / src / gallium / winsys / svga / drm / vmw_context.c
index addb58d165ac5357fed7b6331a001e2963ccffa2..da7506e779702def2bb4304ca86da50c0d9f76bf 100644 (file)
@@ -65,6 +65,7 @@
 #define VMW_MAX_SURF_MEM_FACTOR 2
 
 
+
 struct vmw_buffer_relocation
 {
    struct pb_buffer *buffer;
@@ -95,7 +96,7 @@ struct vmw_svga_winsys_context
    struct svga_winsys_context base;
 
    struct vmw_winsys_screen *vws;
-   struct util_hash_table *hash;
+   struct hash_table *hash;
 
 #ifdef DEBUG
    boolean must_flush;
@@ -260,7 +261,7 @@ vmw_swc_flush(struct svga_winsys_context *swc,
       vmw_svga_winsys_surface_reference(&isurf->vsurf, NULL);
    }
 
-   util_hash_table_clear(vswc->hash);
+   _mesa_hash_table_clear(vswc->hash, NULL);
    vswc->surface.used = 0;
    vswc->surface.reserved = 0;
 
@@ -370,24 +371,15 @@ vmw_swc_add_validate_buffer(struct vmw_svga_winsys_context *vswc,
                            struct pb_buffer *pb_buf,
                            unsigned flags)
 {
-   enum pipe_error ret;
+   ASSERTED enum pipe_error ret;
    unsigned translated_flags;
+   boolean already_present;
 
-   /*
-    * TODO: Update pb_validate to provide a similar functionality
-    * (Check buffer already present before adding)
-    */
-   if (util_hash_table_get(vswc->hash, pb_buf) != pb_buf) {
-      translated_flags = vmw_translate_to_pb_flags(flags);
-      ret = pb_validate_add_buffer(vswc->validate, pb_buf, translated_flags);
-      /* TODO: Update pipebuffer to reserve buffers and not fail here */
-      assert(ret == PIPE_OK);
-      (void)ret;
-      (void)util_hash_table_set(vswc->hash, pb_buf, pb_buf);
-      return TRUE;
-   }
-
-   return FALSE;
+   translated_flags = vmw_translate_to_pb_flags(flags);
+   ret = pb_validate_add_buffer(vswc->validate, pb_buf, translated_flags,
+                                vswc->hash, &already_present);
+   assert(ret == PIPE_OK);
+   return !already_present;
 }
 
 static void
@@ -513,12 +505,8 @@ vmw_swc_surface_only_relocation(struct svga_winsys_context *swc,
       isrf = &vswc->surface.items[vswc->surface.used + vswc->surface.staged];
       vmw_svga_winsys_surface_reference(&isrf->vsurf, vsurf);
       isrf->referenced = FALSE;
-      /*
-       * Note that a failure here may just fall back to unhashed behavior
-       * and potentially cause unnecessary flushing, so ignore the
-       * return code.
-       */
-      (void) util_hash_table_set(vswc->hash, vsurf, isrf);
+
+      _mesa_hash_table_insert(vswc->hash, vsurf, isrf);
       ++vswc->surface.staged;
 
       vswc->seen_surfaces += vsurf->size;
@@ -609,12 +597,8 @@ vmw_swc_shader_relocation(struct svga_winsys_context *swc,
          ishader = &vswc->shader.items[vswc->shader.used + vswc->shader.staged];
          vmw_svga_winsys_shader_reference(&ishader->vshader, vshader);
          ishader->referenced = FALSE;
-         /*
-          * Note that a failure here may just fall back to unhashed behavior
-          * and potentially cause unnecessary flushing, so ignore the
-          * return code.
-          */
-         (void) util_hash_table_set(vswc->hash, vshader, ishader);
+
+         _mesa_hash_table_insert(vswc->hash, vshader, ishader);
          ++vswc->shader.staged;
       }
 
@@ -691,7 +675,7 @@ vmw_swc_destroy(struct svga_winsys_context *swc)
       vmw_svga_winsys_shader_reference(&ishader->vshader, NULL);
    }
 
-   util_hash_table_destroy(vswc->hash);
+   _mesa_hash_table_destroy(vswc->hash, NULL);
    pb_validate_destroy(vswc->validate);
    vmw_ioctl_context_destroy(vswc->vws, swc->cid);
 #ifdef DEBUG
@@ -700,17 +684,6 @@ vmw_swc_destroy(struct svga_winsys_context *swc)
    FREE(vswc);
 }
 
-static unsigned vmw_hash_ptr(void *p)
-{
-   return (unsigned)(unsigned long)p;
-}
-
-static int vmw_ptr_compare(void *key1, void *key2)
-{
-   return (key1 == key2) ? 0 : 1;
-}
-
-
 /**
  * vmw_svga_winsys_vgpu10_shader_screate - The winsys shader_crate callback
  *
@@ -729,20 +702,19 @@ vmw_svga_winsys_vgpu10_shader_create(struct svga_winsys_context *swc,
                                      uint32 shaderId,
                                      SVGA3dShaderType shaderType,
                                      const uint32 *bytecode,
-                                     uint32 bytecodeLen)
+                                     uint32 bytecodeLen,
+                                     const SVGA3dDXShaderSignatureHeader *sgnInfo,
+                                     uint32 sgnLen)
 {
    struct vmw_svga_winsys_context *vswc = vmw_svga_winsys_context(swc);
    struct vmw_svga_winsys_shader *shader;
-   struct svga_winsys_gb_shader *gb_shader =
-      vmw_svga_winsys_shader_create(&vswc->vws->base, shaderType, bytecode,
-                                    bytecodeLen);
-   if (!gb_shader)
+   shader = vmw_svga_shader_create(&vswc->vws->base, shaderType, bytecode,
+                                   bytecodeLen, sgnInfo, sgnLen);
+   if (!shader)
       return NULL;
 
-   shader = vmw_svga_winsys_shader(gb_shader);
    shader->shid = shaderId;
-
-   return gb_shader;
+   return svga_winsys_shader(shader);
 }
 
 /**
@@ -853,7 +825,7 @@ vmw_svga_winsys_context_create(struct svga_winsys_screen *sws)
    if(!vswc->validate)
       goto out_no_validate;
 
-   vswc->hash = util_hash_table_create(vmw_hash_ptr, vmw_ptr_compare);
+   vswc->hash = util_hash_table_create_ptr_keys();
    if (!vswc->hash)
       goto out_no_hash;
 
@@ -861,6 +833,7 @@ vmw_svga_winsys_context_create(struct svga_winsys_screen *sws)
    vswc->fctx = debug_flush_ctx_create(TRUE, VMW_DEBUG_FLUSH_STACK);
 #endif
 
+   vswc->base.force_coherent = vws->force_coherent;
    return &vswc->base;
 
 out_no_hash: