ilo: replace bo alloc flags by initial domains
authorChia-I Wu <olvaffe@gmail.com>
Sat, 8 Mar 2014 15:55:15 +0000 (23:55 +0800)
committerChia-I Wu <olvaffe@gmail.com>
Mon, 10 Mar 2014 08:42:42 +0000 (16:42 +0800)
The only alloc flag is INTEL_ALLOC_FOR_RENDER, which can as well be expressed
by specifying the initial write domain.  The change makes it obvious that we
failed to set INTEL_ALLOC_FOR_RENDER in several places.

src/gallium/drivers/ilo/ilo_3d.c
src/gallium/drivers/ilo/ilo_3d_pipeline.c
src/gallium/drivers/ilo/ilo_cp.c
src/gallium/drivers/ilo/ilo_query.c
src/gallium/drivers/ilo/ilo_resource.c
src/gallium/drivers/ilo/ilo_resource.h
src/gallium/winsys/intel/drm/intel_drm_winsys.c
src/gallium/winsys/intel/intel_winsys.h

index e9bf4100b1d56b706b39b0c6d29e2d58fc6f53f5..218849a20d9ee94e85549f30616a78446f6b39a6 100644 (file)
@@ -662,7 +662,7 @@ upload_shaders(struct ilo_3d *hw3d, struct ilo_shader_cache *shc)
          intel_bo_unreference(hw3d->kernel.bo);
 
       hw3d->kernel.bo = intel_winsys_alloc_buffer(hw3d->cp->winsys,
-            "kernel bo", new_size, 0);
+            "kernel bo", new_size, INTEL_DOMAIN_CPU);
       if (!hw3d->kernel.bo) {
          ilo_err("failed to allocate kernel bo\n");
          return false;
index ca02b35137091e24b45cf754180273ad0d119808..17ac1e524349f89340dc19e2179f9d33004374ed 100644 (file)
@@ -95,7 +95,7 @@ ilo_3d_pipeline_create(struct ilo_cp *cp, const struct ilo_dev_info *dev)
    p->invalidate_flags = ILO_3D_PIPELINE_INVALIDATE_ALL;
 
    p->workaround_bo = intel_winsys_alloc_buffer(p->cp->winsys,
-         "PIPE_CONTROL workaround", 4096, 0);
+         "PIPE_CONTROL workaround", 4096, INTEL_DOMAIN_INSTRUCTION);
    if (!p->workaround_bo) {
       ilo_warn("failed to allocate PIPE_CONTROL workaround bo\n");
       FREE(p);
index e2e0ece78fe81902e633fe056e74caed8993bcc4..cda58eb0a8070542106d683924540a9641efc93c 100644 (file)
@@ -160,7 +160,7 @@ ilo_cp_realloc_bo(struct ilo_cp *cp)
     * won't point at the same address, which is needed for jmpbuf
     */
    bo = intel_winsys_alloc_buffer(cp->winsys,
-         "batch buffer", cp->bo_size * 4, 0);
+         "batch buffer", cp->bo_size * 4, INTEL_DOMAIN_CPU);
    if (unlikely(!bo)) {
       /* reuse the old one */
       bo = cp->bo;
index 59a6b0686c305d494bd0c1486241f38c8c407966..6a7da7f2730ddbf760291a4d39ec1a453bfdbb3c 100644 (file)
@@ -211,7 +211,8 @@ ilo_query_alloc_bo(struct ilo_query *q, int reg_count, int repeat_count,
       if (q->bo)
          intel_bo_unreference(q->bo);
 
-      q->bo = intel_winsys_alloc_buffer(winsys, name, size, 0);
+      q->bo = intel_winsys_alloc_buffer(winsys,
+            name, size, INTEL_DOMAIN_INSTRUCTION);
       q->reg_total = (q->bo) ? reg_total : 0;
    }
 
index 46eaae65885b3650f8962b3effa78a55781faa22..dbcc5f8a82ed286e840a2f9186ce36d21b8f3484 100644 (file)
@@ -997,9 +997,14 @@ tex_create_bo(struct ilo_texture *tex,
             &tiling, &pitch);
    }
    else {
+      const uint32_t initial_domain =
+         (tex->base.bind & (PIPE_BIND_DEPTH_STENCIL |
+                            PIPE_BIND_RENDER_TARGET)) ?
+         INTEL_DOMAIN_RENDER : 0;
+
       bo = intel_winsys_alloc_texture(is->winsys, name,
             tex->bo_width, tex->bo_height, tex->bo_cpp,
-            tex->tiling, tex->bo_flags, &pitch);
+            tex->tiling, initial_domain, &pitch);
 
       tiling = tex->tiling;
    }
@@ -1090,7 +1095,7 @@ tex_create_hiz(struct ilo_texture *tex, const struct tex_layout *layout)
 
    tex->hiz.bo = intel_winsys_alloc_texture(is->winsys,
          "hiz texture", hz_width, hz_height, 1,
-         INTEL_TILING_Y, INTEL_ALLOC_FOR_RENDER, &pitch);
+         INTEL_TILING_Y, INTEL_DOMAIN_RENDER, &pitch);
    if (!tex->hiz.bo)
       return false;
 
@@ -1209,10 +1214,6 @@ tex_create(struct pipe_screen *screen,
 
    tex->imported = (handle != NULL);
 
-   if (tex->base.bind & (PIPE_BIND_DEPTH_STENCIL |
-                         PIPE_BIND_RENDER_TARGET))
-      tex->bo_flags |= INTEL_ALLOC_FOR_RENDER;
-
    tex_layout_init(&layout, screen, templ, tex->slices);
 
    switch (templ->target) {
@@ -1316,6 +1317,9 @@ tex_estimate_size(struct pipe_screen *screen,
 static bool
 buf_create_bo(struct ilo_buffer *buf)
 {
+   const uint32_t initial_domain =
+      (buf->base.bind & PIPE_BIND_STREAM_OUTPUT) ?
+      INTEL_DOMAIN_RENDER : 0;
    struct ilo_screen *is = ilo_screen(buf->base.screen);
    const char *name;
    struct intel_bo *bo;
@@ -1339,7 +1343,7 @@ buf_create_bo(struct ilo_buffer *buf)
    }
 
    bo = intel_winsys_alloc_buffer(is->winsys,
-         name, buf->bo_size, buf->bo_flags);
+         name, buf->bo_size, initial_domain);
    if (!bo)
       return false;
 
@@ -1372,7 +1376,6 @@ buf_create(struct pipe_screen *screen, const struct pipe_resource *templ)
    pipe_reference_init(&buf->base.reference, 1);
 
    buf->bo_size = templ->width0;
-   buf->bo_flags = 0;
 
    /*
     * From the Sandy Bridge PRM, volume 1 part 1, page 118:
index cba425c11dc528e470a090b55bd06beee3c446ee..f11cd94d64b1c221c5bd2de2c4b5d50b3e86ab43 100644 (file)
@@ -81,7 +81,6 @@ struct ilo_buffer {
 
    struct intel_bo *bo;
    unsigned bo_size;
-   unsigned bo_flags;
 };
 
 /**
@@ -109,7 +108,6 @@ struct ilo_texture {
    struct pipe_resource base;
 
    bool imported;
-   unsigned bo_flags;
 
    enum pipe_format bo_format;
    struct intel_bo *bo;
index 12ae4aae8e2f11bd056fbb232d07718618877749..e119f9ed9a194cc623ea3cc107e3b2dfb8b12c07 100644 (file)
@@ -219,17 +219,18 @@ struct intel_bo *
 intel_winsys_alloc_buffer(struct intel_winsys *winsys,
                           const char *name,
                           unsigned long size,
-                          unsigned long flags)
+                          uint32_t initial_domain)
 {
+   const bool for_render =
+      (initial_domain & (INTEL_DOMAIN_RENDER | INTEL_DOMAIN_INSTRUCTION));
    const int alignment = 4096; /* always page-aligned */
    drm_intel_bo *bo;
 
-   if (flags == INTEL_ALLOC_FOR_RENDER) {
+   if (for_render) {
       bo = drm_intel_bo_alloc_for_render(winsys->bufmgr,
             name, size, alignment);
    }
    else {
-      assert(!flags);
       bo = drm_intel_bo_alloc(winsys->bufmgr, name, size, alignment);
    }
 
@@ -241,9 +242,12 @@ intel_winsys_alloc_texture(struct intel_winsys *winsys,
                            const char *name,
                            int width, int height, int cpp,
                            enum intel_tiling_mode tiling,
-                           unsigned long flags,
+                           uint32_t initial_domain,
                            unsigned long *pitch)
 {
+   const unsigned long flags =
+      (initial_domain & (INTEL_DOMAIN_RENDER | INTEL_DOMAIN_INSTRUCTION)) ?
+      BO_ALLOC_FOR_RENDER : 0;
    uint32_t real_tiling = tiling;
    drm_intel_bo *bo;
 
index ccc4620275d99eb713c1a53362764d2b2b693441..b16f3a2d8a8985e7fa25ae7e1d4ca812bf324f02 100644 (file)
@@ -62,11 +62,6 @@ enum intel_tiling_mode {
    INTEL_TILING_Y    = 2,
 };
 
-/* this is compatible with intel_bufmgr.h's definitions */
-enum intel_alloc_flag {
-   INTEL_ALLOC_FOR_RENDER     = 1 << 0,
-};
-
 struct winsys_handle;
 struct intel_winsys;
 struct intel_context;
@@ -117,13 +112,13 @@ intel_winsys_read_reg(struct intel_winsys *winsys,
  *
  * \param name             Informative description of the bo.
  * \param size             Size of the bo.
- * \param flags            bitmask of enum intel_alloc_flag.
+ * \param initial_domain   Initial (write) domain.
  */
 struct intel_bo *
 intel_winsys_alloc_buffer(struct intel_winsys *winsys,
                           const char *name,
                           unsigned long size,
-                          unsigned long flags);
+                          uint32_t initial_domain);
 
 /**
  * Allocate a 2-dimentional buffer object.
@@ -133,7 +128,7 @@ intel_winsys_alloc_buffer(struct intel_winsys *winsys,
  * \param height           Height of the bo.
  * \param cpp              Bytes per texel.
  * \param tiling           Tiling mode.
- * \param flags            bitmask of enum intel_alloc_flag.
+ * \param initial_domain   Initial (write) domain.
  * \param pitch            Pitch of the bo.
  */
 struct intel_bo *
@@ -141,7 +136,7 @@ intel_winsys_alloc_texture(struct intel_winsys *winsys,
                            const char *name,
                            int width, int height, int cpp,
                            enum intel_tiling_mode tiling,
-                           unsigned long flags,
+                           uint32_t initial_domain,
                            unsigned long *pitch);
 
 /**