intel: factor out meta compressed image adjustment
Move the width/height adjustment to a separate function.
diff --git a/icd/intel/cmd_meta.c b/icd/intel/cmd_meta.c
index f383fad..d21756e 100644
--- a/icd/intel/cmd_meta.c
+++ b/icd/intel/cmd_meta.c
@@ -148,6 +148,37 @@
intel_img_view_destroy(view);
}
+static void cmd_meta_adjust_compressed_dst(struct intel_cmd *cmd,
+ const struct intel_img *img,
+ struct intel_cmd_meta *meta)
+{
+ XGL_INT w, h;
+
+ if (cmd_gen(cmd) >= INTEL_GEN(7)) {
+ w = GEN_EXTRACT(meta->dst.surface[2], GEN7_SURFACE_DW2_WIDTH);
+ h = GEN_EXTRACT(meta->dst.surface[2], GEN7_SURFACE_DW2_HEIGHT);
+ meta->dst.surface[2] &= ~(GEN7_SURFACE_DW2_WIDTH__MASK |
+ GEN7_SURFACE_DW2_HEIGHT__MASK);
+ } else {
+ w = GEN_EXTRACT(meta->dst.surface[2], GEN6_SURFACE_DW2_WIDTH);
+ h = GEN_EXTRACT(meta->dst.surface[2], GEN6_SURFACE_DW2_HEIGHT);
+ meta->dst.surface[2] &= ~(GEN6_SURFACE_DW2_WIDTH__MASK |
+ GEN6_SURFACE_DW2_HEIGHT__MASK);
+ }
+
+ /* note that the width/height fields have the real values minus 1 */
+ w = (w + img->layout.block_width) / img->layout.block_width - 1;
+ h = (h + img->layout.block_height) / img->layout.block_height - 1;
+
+ if (cmd_gen(cmd) >= INTEL_GEN(7)) {
+ meta->dst.surface[2] |= GEN_SHIFT32(w, GEN7_SURFACE_DW2_WIDTH) |
+ GEN_SHIFT32(h, GEN7_SURFACE_DW2_HEIGHT);
+ } else {
+ meta->dst.surface[2] |= GEN_SHIFT32(w, GEN6_SURFACE_DW2_WIDTH) |
+ GEN_SHIFT32(h, GEN6_SURFACE_DW2_HEIGHT);
+ }
+}
+
static void cmd_meta_set_dst_for_img(struct intel_cmd *cmd,
const struct intel_img *img,
XGL_FORMAT format,
@@ -177,39 +208,13 @@
memcpy(meta->dst.surface, rt->cmd, sizeof(rt->cmd[0]) * rt->cmd_len);
meta->dst.surface_len = rt->cmd_len;
- /* adjust width/height */
- if (icd_format_is_compressed(img->layout.format)) {
- XGL_INT w, h;
-
- if (cmd_gen(cmd) >= INTEL_GEN(7)) {
- w = GEN_EXTRACT(meta->dst.surface[2], GEN7_SURFACE_DW2_WIDTH);
- h = GEN_EXTRACT(meta->dst.surface[2], GEN7_SURFACE_DW2_HEIGHT);
- meta->dst.surface[2] &= ~(GEN7_SURFACE_DW2_WIDTH__MASK |
- GEN7_SURFACE_DW2_HEIGHT__MASK);
- } else {
- w = GEN_EXTRACT(meta->dst.surface[2], GEN6_SURFACE_DW2_WIDTH);
- h = GEN_EXTRACT(meta->dst.surface[2], GEN6_SURFACE_DW2_HEIGHT);
- meta->dst.surface[2] &= ~(GEN6_SURFACE_DW2_WIDTH__MASK |
- GEN6_SURFACE_DW2_HEIGHT__MASK);
- }
-
- /* note that the width/height fields have the real values minus 1 */
- w = (w + img->layout.block_width) / img->layout.block_width - 1;
- h = (h + img->layout.block_height) / img->layout.block_height - 1;
-
- if (cmd_gen(cmd) >= INTEL_GEN(7)) {
- meta->dst.surface[2] |= GEN_SHIFT32(w, GEN7_SURFACE_DW2_WIDTH) |
- GEN_SHIFT32(h, GEN7_SURFACE_DW2_HEIGHT);
- } else {
- meta->dst.surface[2] |= GEN_SHIFT32(w, GEN6_SURFACE_DW2_WIDTH) |
- GEN_SHIFT32(h, GEN6_SURFACE_DW2_HEIGHT);
- }
- }
-
meta->dst.reloc_target = (intptr_t) img->obj.mem->bo;
meta->dst.reloc_offset = 0;
meta->dst.reloc_flags = INTEL_RELOC_WRITE;
+ if (icd_format_is_compressed(img->layout.format))
+ cmd_meta_adjust_compressed_dst(cmd, img, meta);
+
intel_rt_view_destroy(rt);
}