summaryrefslogtreecommitdiffstats
path: root/src/intel/isl/isl.h
diff options
context:
space:
mode:
authorJason Ekstrand <[email protected]>2016-03-30 16:15:54 -0700
committerJason Ekstrand <[email protected]>2016-04-08 15:57:58 -0700
commitb37502b9832f02626b0caca22500b46ebbbe8007 (patch)
tree522de991713267d1351cac6b17b992784dde7278 /src/intel/isl/isl.h
parent4caba940869602b750e21a444523b068b1bea339 (diff)
isl: Rework the get_intratile_offset function
The old function tried to work in elements which isn't, strictly speaking, a valid thing to do. In the case of a non-power-of-two format, there is no guarantee that the x offset into the tile is a multiple of the format block size. This commit refactors it to work entirely in terms of a tiling (not a surface) and bytes/rows. Reviewed-by: Nanley Chery <[email protected]>
Diffstat (limited to 'src/intel/isl/isl.h')
-rw-r--r--src/intel/isl/isl.h33
1 files changed, 21 insertions, 12 deletions
diff --git a/src/intel/isl/isl.h b/src/intel/isl/isl.h
index 90193ca08c1..4f796f6c6a8 100644
--- a/src/intel/isl/isl.h
+++ b/src/intel/isl/isl.h
@@ -1143,6 +1143,27 @@ isl_surf_get_image_offset_el(const struct isl_surf *surf,
uint32_t *y_offset_el);
/**
+ * @brief Calculate the intratile offsets to a surface.
+ *
+ * In @a base_address_offset return the offset from the base of the surface to
+ * the base address of the first tile of the subimage. In @a x_offset_B and
+ * @a y_offset_rows, return the offset, in units of bytes and rows, from the
+ * tile's base to the subimage's first surface element. The x and y offsets
+ * are intratile offsets; that is, they do not exceed the boundary of the
+ * surface's tiling format.
+ */
+void
+isl_tiling_get_intratile_offset_el(const struct isl_device *dev,
+ enum isl_tiling tiling,
+ uint8_t bs,
+ uint32_t row_pitch,
+ uint32_t total_x_offset_B,
+ uint32_t total_y_offset_rows,
+ uint32_t *base_address_offset,
+ uint32_t *x_offset_B,
+ uint32_t *y_offset_rows);
+
+/**
* @brief Calculate the intratile offsets to a subimage in the surface.
*
* In @a base_address_offset return the offset from the base of the surface to
@@ -1163,18 +1184,6 @@ isl_surf_get_image_intratile_offset_el(const struct isl_device *dev,
uint32_t *y_offset_el);
/**
- * See above.
- */
-void
-isl_surf_get_image_intratile_offset_el_xy(const struct isl_device *dev,
- const struct isl_surf *surf,
- uint32_t total_x_offset_el,
- uint32_t total_y_offset_el,
- uint32_t *base_address_offset,
- uint32_t *x_offset_el,
- uint32_t *y_offset_el);
-
-/**
* @brief Get value of 3DSTATE_DEPTH_BUFFER.SurfaceFormat
*
* @pre surf->usage has ISL_SURF_USAGE_DEPTH_BIT