diff options
-rw-r--r-- | src/gallium/drivers/virgl/virgl_hw.h | 3 | ||||
-rw-r--r-- | src/gallium/drivers/virgl/virgl_screen.c | 7 |
2 files changed, 10 insertions, 0 deletions
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; |