virtgpu_virgl: implement backend get_max_texture_2d_size()
BUG=b:194426249
TEST=launch Cuttlefish w/ 2D mode
TEST=launch Cuttlefish w/ 3D mode
Change-Id: Ib96be2c783d47959a24f579a1ae99244f8afffdb
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/minigbm/+/3194814
Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org>
Tested-by: Yiwei Zhang <zzyiwei@chromium.org>
Commit-Queue: Yiwei Zhang <zzyiwei@chromium.org>
diff --git a/virtgpu_virgl.c b/virtgpu_virgl.c
index 3423b42..82a39d9 100644
--- a/virtgpu_virgl.c
+++ b/virtgpu_virgl.c
@@ -22,6 +22,8 @@
#define PIPE_TEXTURE_2D 2
+#define MESA_LLVMPIPE_MAX_TEXTURE_2D_LEVELS 15
+#define MESA_LLVMPIPE_MAX_TEXTURE_2D_SIZE (1 << (MESA_LLVMPIPE_MAX_TEXTURE_2D_LEVELS - 1))
#define MESA_LLVMPIPE_TILE_ORDER 6
#define MESA_LLVMPIPE_TILE_SIZE (1 << MESA_LLVMPIPE_TILE_ORDER)
@@ -508,6 +510,16 @@
gem_map.offset);
}
+static uint32_t virgl_3d_get_max_texture_2d_size(struct driver *drv)
+{
+ struct virgl_priv *priv = (struct virgl_priv *)drv->priv;
+
+ if (priv->caps.v2.max_texture_2d_size)
+ return priv->caps.v2.max_texture_2d_size;
+
+ return UINT32_MAX;
+}
+
static int virgl_get_caps(struct driver *drv, union virgl_caps *caps, int *caps_is_v2)
{
int ret;
@@ -1028,6 +1040,14 @@
return 0;
}
+static uint32_t virgl_get_max_texture_2d_size(struct driver *drv)
+{
+ if (params[param_3d].value)
+ return virgl_3d_get_max_texture_2d_size(drv);
+ else
+ return MESA_LLVMPIPE_MAX_TEXTURE_2D_SIZE;
+}
+
const struct backend virtgpu_virgl = { .name = "virtgpu_virgl",
.init = virgl_init,
.close = virgl_close,
@@ -1040,4 +1060,5 @@
.bo_flush = virgl_bo_flush,
.resolve_format = virgl_resolve_format,
.resolve_use_flags = virgl_resolve_use_flags,
- .resource_info = virgl_resource_info };
+ .resource_info = virgl_resource_info,
+ .get_max_texture_2d_size = virgl_get_max_texture_2d_size };