From 98b3b6367a919990bc2832183fdcf285ffeb4b8a Mon Sep 17 00:00:00 2001 From: Erik Faye-Lund Date: Tue, 14 Aug 2018 13:06:02 +0100 Subject: [PATCH] virgl: report actual max-texture sizes Instead of doing conservative guesses, we should report the max levels based on the max sizes we get from GL on the host. Signed-off-by: Erik Faye-Lund Reviewed-by: Jakob Bornecrantz --- src/gallium/drivers/virgl/virgl_hw.h | 3 +++ src/gallium/drivers/virgl/virgl_screen.c | 7 +++++++ 2 files changed, 10 insertions(+) diff --git a/src/gallium/drivers/virgl/virgl_hw.h b/src/gallium/drivers/virgl/virgl_hw.h index b56f554b001..787452d3287 100644 --- a/src/gallium/drivers/virgl/virgl_hw.h +++ b/src/gallium/drivers/virgl/virgl_hw.h @@ -347,6 +347,9 @@ struct virgl_caps_v2 { uint32_t max_compute_shared_memory_size; uint32_t max_compute_grid_size[3]; uint32_t max_compute_block_size[3]; + uint32_t max_texture_2d_size; + uint32_t max_texture_3d_size; + uint32_t max_texture_cube_size; }; union virgl_caps { diff --git a/src/gallium/drivers/virgl/virgl_screen.c b/src/gallium/drivers/virgl/virgl_screen.c index 0ac976acbd3..86063c66aaf 100644 --- a/src/gallium/drivers/virgl/virgl_screen.c +++ b/src/gallium/drivers/virgl/virgl_screen.c @@ -24,6 +24,7 @@ #include "util/u_format.h" #include "util/u_format_s3tc.h" #include "util/u_video.h" +#include "util/u_math.h" #include "util/os_time.h" #include "pipe/p_defines.h" #include "pipe/p_screen.h" @@ -72,10 +73,16 @@ virgl_get_param(struct pipe_screen *screen, enum pipe_cap param) case PIPE_CAP_TEXTURE_SWIZZLE: return 1; case PIPE_CAP_MAX_TEXTURE_2D_LEVELS: + if (vscreen->caps.caps.v2.max_texture_2d_size) + return 1 + util_logbase2(vscreen->caps.caps.v2.max_texture_2d_size); return 15; /* 16K x 16K */ case PIPE_CAP_MAX_TEXTURE_3D_LEVELS: + if (vscreen->caps.caps.v2.max_texture_3d_size) + return 1 + util_logbase2(vscreen->caps.caps.v2.max_texture_3d_size); return 9; /* 256 x 256 x 256 */ case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS: + if (vscreen->caps.caps.v2.max_texture_cube_size) + return 1 + util_logbase2(vscreen->caps.caps.v2.max_texture_cube_size); return 13; /* 4K x 4K */ case PIPE_CAP_BLEND_EQUATION_SEPARATE: return 1; -- 2.30.2