Mesa (master): turnip: don't hardcode gmem base for input attachment
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Fri Feb 28 14:28:09 UTC 2020
Module: Mesa
Branch: master
Commit: cf302c9a22fab86da0bc70f377c8f0c43f5d8d77
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=cf302c9a22fab86da0bc70f377c8f0c43f5d8d77
Author: Jonathan Marek <jonathan at marek.ca>
Date: Thu Feb 27 11:18:45 2020 -0500
turnip: don't hardcode gmem base for input attachment
Newer a6xx no longer has programmable GMEM base, so we can't rely on the
kernel driver setting it to 0x100000 (GMEM base is 0 on such GPUs).
Signed-off-by: Jonathan Marek <jonathan at marek.ca>
Reviewed-by: Eric Anholt <eric at anholt.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3979>
---
src/freedreno/vulkan/tu_cmd_buffer.c | 2 +-
src/freedreno/vulkan/tu_device.c | 8 ++++++++
src/freedreno/vulkan/tu_drm.c | 6 ++++++
src/freedreno/vulkan/tu_private.h | 4 ++++
4 files changed, 19 insertions(+), 1 deletion(-)
diff --git a/src/freedreno/vulkan/tu_cmd_buffer.c b/src/freedreno/vulkan/tu_cmd_buffer.c
index d24e869daf2..f8e1ffe1c9d 100644
--- a/src/freedreno/vulkan/tu_cmd_buffer.c
+++ b/src/freedreno/vulkan/tu_cmd_buffer.c
@@ -2771,7 +2771,7 @@ write_tex_const(struct tu_cmd_buffer *cmd,
A6XX_TEX_CONST_2_TYPE(A6XX_TEX_2D) |
A6XX_TEX_CONST_2_PITCH(tiling->tile0.extent.width * att->cpp);
dst[3] = 0;
- dst[4] = 0x100000 + att->gmem_offset;
+ dst[4] = cmd->device->physical_device->gmem_base + att->gmem_offset;
dst[5] = A6XX_TEX_CONST_5_DEPTH(1);
for (unsigned i = 6; i < A6XX_TEX_CONST_DWORDS; i++)
dst[i] = 0;
diff --git a/src/freedreno/vulkan/tu_device.c b/src/freedreno/vulkan/tu_device.c
index f78de1bfd4c..8c0459f4680 100644
--- a/src/freedreno/vulkan/tu_device.c
+++ b/src/freedreno/vulkan/tu_device.c
@@ -252,6 +252,14 @@ tu_physical_device_init(struct tu_physical_device *device,
goto fail;
}
+ if (tu_drm_get_gmem_base(device, &device->gmem_base)) {
+ if (instance->debug_flags & TU_DEBUG_STARTUP)
+ tu_logi("Could not query the GMEM size");
+ result = vk_errorf(instance, VK_ERROR_INITIALIZATION_FAILED,
+ "could not get GMEM size");
+ goto fail;
+ }
+
memset(device->name, 0, sizeof(device->name));
sprintf(device->name, "FD%d", device->gpu_id);
diff --git a/src/freedreno/vulkan/tu_drm.c b/src/freedreno/vulkan/tu_drm.c
index 9b2e6f78879..5e91adaf89e 100644
--- a/src/freedreno/vulkan/tu_drm.c
+++ b/src/freedreno/vulkan/tu_drm.c
@@ -79,6 +79,12 @@ tu_drm_get_gmem_size(const struct tu_physical_device *dev, uint32_t *size)
return 0;
}
+int
+tu_drm_get_gmem_base(const struct tu_physical_device *dev, uint64_t *base)
+{
+ return tu_drm_get_param(dev, MSM_PARAM_GMEM_BASE, base);
+}
+
int
tu_drm_submitqueue_new(const struct tu_device *dev,
int priority,
diff --git a/src/freedreno/vulkan/tu_private.h b/src/freedreno/vulkan/tu_private.h
index f0b6943f465..d076df1fdbc 100644
--- a/src/freedreno/vulkan/tu_private.h
+++ b/src/freedreno/vulkan/tu_private.h
@@ -313,6 +313,7 @@ struct tu_physical_device
unsigned gpu_id;
uint32_t gmem_size;
+ uint64_t gmem_base;
uint32_t tile_align_w;
uint32_t tile_align_h;
@@ -1624,6 +1625,9 @@ tu_drm_get_gpu_id(const struct tu_physical_device *dev, uint32_t *id);
int
tu_drm_get_gmem_size(const struct tu_physical_device *dev, uint32_t *size);
+int
+tu_drm_get_gmem_base(const struct tu_physical_device *dev, uint64_t *base);
+
int
tu_drm_submitqueue_new(const struct tu_device *dev,
int priority,
More information about the mesa-commit
mailing list