intel: Fix requests for exact surface row pitch (v2)
authorChad Versace <chadversary@chromium.org>
Sat, 25 Feb 2017 01:15:43 +0000 (17:15 -0800)
committerChad Versace <chadversary@chromium.org>
Tue, 28 Mar 2017 16:44:44 +0000 (09:44 -0700)
All callers of isl_surf_init() that set 'min_row_pitch' wanted to
request an *exact* row pitch, as evidenced by nearby asserts, but isl
lacked API for doing so. Now that isl has an API for that, update the
code to use it.

v2: Assert that isl_surf_init() succeeds because the callers assume
    it.  [for jekstrand]

Reviewed-by: Nanley Chery <nanley.g.chery@intel.com> (v1)
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com> (v1)
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net> (v2)
src/intel/blorp/blorp_blit.c
src/intel/vulkan/anv_blorp.c
src/intel/vulkan/anv_image.c

index 280b76ab70cd00182f8da50ed4d180d790f7bdda..691564c87884b13837029e7375783438f947586e 100644 (file)
@@ -1375,6 +1375,8 @@ static void
 surf_convert_to_single_slice(const struct isl_device *isl_dev,
                              struct brw_blorp_surface_info *info)
 {
+   bool ok UNUSED;
+
    /* Just bail if we have nothing to do. */
    if (info->surf.dim == ISL_SURF_DIM_2D &&
        info->view.base_level == 0 && info->view.base_array_layer == 0 &&
@@ -1421,13 +1423,13 @@ surf_convert_to_single_slice(const struct isl_device *isl_dev,
       .levels = 1,
       .array_len = 1,
       .samples = info->surf.samples,
-      .min_pitch = info->surf.row_pitch,
+      .row_pitch = info->surf.row_pitch,
       .usage = info->surf.usage,
       .tiling_flags = 1 << info->surf.tiling,
    };
 
-   isl_surf_init_s(isl_dev, &info->surf, &init_info);
-   assert(info->surf.row_pitch == init_info.min_pitch);
+   ok = isl_surf_init_s(isl_dev, &info->surf, &init_info);
+   assert(ok);
 
    /* The view is also different now. */
    info->view.base_level = 0;
index 9b3910f1b0b7be37f06e19b7ce4b28e5a54d80a8..16f1692ff53cf27231f457d1b44daf0e5600fc25 100644 (file)
@@ -133,6 +133,7 @@ get_blorp_surf_for_anv_buffer(struct anv_device *device,
 {
    const struct isl_format_layout *fmtl =
       isl_format_get_layout(format);
+   bool ok UNUSED;
 
    /* ASTC is the only format which doesn't support linear layouts.
     * Create an equivalently sized surface with ISL to get around this.
@@ -155,20 +156,20 @@ get_blorp_surf_for_anv_buffer(struct anv_device *device,
       },
    };
 
-   isl_surf_init(&device->isl_dev, isl_surf,
-                 .dim = ISL_SURF_DIM_2D,
-                 .format = format,
-                 .width = width,
-                 .height = height,
-                 .depth = 1,
-                 .levels = 1,
-                 .array_len = 1,
-                 .samples = 1,
-                 .min_pitch = row_pitch,
-                 .usage = ISL_SURF_USAGE_TEXTURE_BIT |
-                          ISL_SURF_USAGE_RENDER_TARGET_BIT,
-                 .tiling_flags = ISL_TILING_LINEAR_BIT);
-   assert(isl_surf->row_pitch == row_pitch);
+   ok = isl_surf_init(&device->isl_dev, isl_surf,
+                     .dim = ISL_SURF_DIM_2D,
+                     .format = format,
+                     .width = width,
+                     .height = height,
+                     .depth = 1,
+                     .levels = 1,
+                     .array_len = 1,
+                     .samples = 1,
+                     .row_pitch = row_pitch,
+                     .usage = ISL_SURF_USAGE_TEXTURE_BIT |
+                              ISL_SURF_USAGE_RENDER_TARGET_BIT,
+                     .tiling_flags = ISL_TILING_LINEAR_BIT);
+   assert(ok);
 }
 
 static void
index 33499abca1a54d6384b57f308481d7d98bdc9ed5..cf34dbe3b0aad7ff3dbfc8e24651fcc37a2ae428 100644 (file)
@@ -166,7 +166,7 @@ make_surface(const struct anv_device *dev,
       .array_len = vk_info->arrayLayers,
       .samples = vk_info->samples,
       .min_alignment = 0,
-      .min_pitch = anv_info->stride,
+      .row_pitch = anv_info->stride,
       .usage = choose_isl_surf_usage(image->usage, aspect),
       .tiling_flags = tiling_flags);