summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorConnor Abbott <cwabbott0@gmail.com>2020-08-31 12:25:44 +0200
committerMarge Bot <eric+marge@anholt.net>2020-09-29 16:16:05 +0000
commit67ac16611bd31a84e9dd6e54ea4747ab7aad717a (patch)
tree519306a6a8b9d4142ee7afb2a079c7b5af2165f0
parenta3363c348dcd968f2d3e413099a4d28fcda047eb (diff)
tu: Write multiview control registers in binning pass
Multiview is never used with binning, but we still need to make sure to disable it in the binning pass. Fixes: c0c7dbd ("tu: Implement multiview pipeline state") Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6515>
-rw-r--r--src/freedreno/vulkan/tu_pipeline.c48
1 files changed, 23 insertions, 25 deletions
diff --git a/src/freedreno/vulkan/tu_pipeline.c b/src/freedreno/vulkan/tu_pipeline.c
index b1913777ab9..c1d41cf182a 100644
--- a/src/freedreno/vulkan/tu_pipeline.c
+++ b/src/freedreno/vulkan/tu_pipeline.c
@@ -1426,31 +1426,29 @@ tu6_emit_program(struct tu_cs *cs,
tu6_emit_xs_config(cs, stage, xs, builder->shader_iova[stage]);
}
- if (!binning_pass) {
- uint32_t multiview_views = util_logbase2(builder->multiview_mask) + 1;
- uint32_t multiview_cntl = builder->multiview_mask ?
- A6XX_PC_MULTIVIEW_CNTL_ENABLE |
- A6XX_PC_MULTIVIEW_CNTL_VIEWS(multiview_views) |
- A6XX_PC_MULTIVIEW_CNTL_DISABLEMULTIPOS /* TODO multi-pos output */
- : 0;
-
- /* Copy what the blob does here. This will emit an extra 0x3f
- * CP_EVENT_WRITE when multiview is disabled. I'm not exactly sure what
- * this is working around yet.
- */
- tu_cs_emit_pkt7(cs, CP_REG_WRITE, 3);
- tu_cs_emit(cs, CP_REG_WRITE_0_TRACKER(UNK_EVENT_WRITE));
- tu_cs_emit(cs, REG_A6XX_PC_MULTIVIEW_CNTL);
- tu_cs_emit(cs, multiview_cntl);
-
- tu_cs_emit_pkt4(cs, REG_A6XX_VFD_MULTIVIEW_CNTL, 1);
- tu_cs_emit(cs, multiview_cntl);
-
- if (multiview_cntl &&
- builder->device->physical_device->supports_multiview_mask) {
- tu_cs_emit_pkt4(cs, REG_A6XX_PC_MULTIVIEW_MASK, 1);
- tu_cs_emit(cs, builder->multiview_mask);
- }
+ uint32_t multiview_views = util_logbase2(builder->multiview_mask) + 1;
+ uint32_t multiview_cntl = builder->multiview_mask ?
+ A6XX_PC_MULTIVIEW_CNTL_ENABLE |
+ A6XX_PC_MULTIVIEW_CNTL_VIEWS(multiview_views) |
+ A6XX_PC_MULTIVIEW_CNTL_DISABLEMULTIPOS /* TODO multi-pos output */
+ : 0;
+
+ /* Copy what the blob does here. This will emit an extra 0x3f
+ * CP_EVENT_WRITE when multiview is disabled. I'm not exactly sure what
+ * this is working around yet.
+ */
+ tu_cs_emit_pkt7(cs, CP_REG_WRITE, 3);
+ tu_cs_emit(cs, CP_REG_WRITE_0_TRACKER(UNK_EVENT_WRITE));
+ tu_cs_emit(cs, REG_A6XX_PC_MULTIVIEW_CNTL);
+ tu_cs_emit(cs, multiview_cntl);
+
+ tu_cs_emit_pkt4(cs, REG_A6XX_VFD_MULTIVIEW_CNTL, 1);
+ tu_cs_emit(cs, multiview_cntl);
+
+ if (multiview_cntl &&
+ builder->device->physical_device->supports_multiview_mask) {
+ tu_cs_emit_pkt4(cs, REG_A6XX_PC_MULTIVIEW_MASK, 1);
+ tu_cs_emit(cs, builder->multiview_mask);
}
tu_cs_emit_pkt4(cs, REG_A6XX_SP_HS_UNKNOWN_A831, 1);