diff options
author | Erik Faye-Lund <[email protected]> | 2018-08-14 13:06:02 +0100 |
---|---|---|
committer | Erik Faye-Lund <[email protected]> | 2018-08-15 18:48:16 +0200 |
commit | 98b3b6367a919990bc2832183fdcf285ffeb4b8a (patch) | |
tree | f8d564c45584a7982c2aae86c2f5a3922ce90523 /src/gallium | |
parent | 825aaeae3942effc29aba6ae182146c0f97d277c (diff) |
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 <[email protected]>
Reviewed-by: Jakob Bornecrantz <[email protected]>
Diffstat (limited to 'src/gallium')
-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; |