diff --git a/src/freedreno/common/freedreno_dev_info.h b/src/freedreno/common/freedreno_dev_info.h
index 13e7a6ca4ea..aa44d8bc002 100644
--- a/src/freedreno/common/freedreno_dev_info.h
+++ b/src/freedreno/common/freedreno_dev_info.h
@@ -146,6 +146,12 @@ struct fd_dev_info {
bool has_lrz_dir_tracking;
bool lrz_track_quirk;
+ /* Some generations have a bit to add the multiview index to the
+ * viewport index, which lets us implement different scaling for
+ * different views.
+ */
+ bool has_per_view_viewport;
+
struct {
uint32_t PC_POWER_CNTL;
uint32_t TPL1_DBG_ECO_CNTL;
diff --git a/src/freedreno/common/freedreno_devices.py b/src/freedreno/common/freedreno_devices.py
index 221199d63d8..0acec2f29af 100644
--- a/src/freedreno/common/freedreno_devices.py
+++ b/src/freedreno/common/freedreno_devices.py
@@ -238,6 +238,7 @@ a6xx_gen3 = dict(
has_lrz_dir_tracking = True,
enable_lrz_fast_clear = True,
lrz_track_quirk = True,
+ has_per_view_viewport = True,
)
# a635, a660:
@@ -263,6 +264,7 @@ a6xx_gen4 = dict(
has_dp4acc = True,
enable_lrz_fast_clear = True,
has_lrz_dir_tracking = True,
+ has_per_view_viewport = True,
)
add_gpus([
diff --git a/src/freedreno/registers/adreno/a6xx.xml b/src/freedreno/registers/adreno/a6xx.xml
index 79261dba648..99697411ebb 100644
--- a/src/freedreno/registers/adreno/a6xx.xml
+++ b/src/freedreno/registers/adreno/a6xx.xml
@@ -1732,12 +1732,19 @@ to upconvert to 32b float internally?
-
-
-
+
+
+
+
diff --git a/src/freedreno/vulkan/tu_pipeline.cc b/src/freedreno/vulkan/tu_pipeline.cc
index 060198d7674..d42f556f239 100644
--- a/src/freedreno/vulkan/tu_pipeline.cc
+++ b/src/freedreno/vulkan/tu_pipeline.cc
@@ -2205,8 +2205,8 @@ tu6_gras_su_cntl(const VkPipelineRasterizationStateCreateInfo *rast_info,
if (multiview) {
gras_su_cntl |=
- A6XX_GRAS_SU_CNTL_UNK17 |
- A6XX_GRAS_SU_CNTL_MULTIVIEW_ENABLE;
+ A6XX_GRAS_SU_CNTL_MULTIVIEW_ENABLE |
+ A6XX_GRAS_SU_CNTL_RENDERTARGETINDEXINCR;
}
return gras_su_cntl;