diff options
author | Connor Abbott <cwabbott0@gmail.com> | 2020-08-31 12:25:44 +0200 |
---|---|---|
committer | Marge Bot <eric+marge@anholt.net> | 2020-09-29 16:16:05 +0000 |
commit | 67ac16611bd31a84e9dd6e54ea4747ab7aad717a (patch) | |
tree | 519306a6a8b9d4142ee7afb2a079c7b5af2165f0 | |
parent | a3363c348dcd968f2d3e413099a4d28fcda047eb (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.c | 48 |
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); |