From 485ceb5c519226aeea078dc71767bd9004dcc512 Mon Sep 17 00:00:00 2001 From: Qiang Yu Date: Thu, 30 Dec 2021 15:03:57 +0800 Subject: [PATCH] gallium: add multi_sample parameter to get_sparse_texture_virtual_page_size MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Instead of using actual sample count as parameter, we only use a bool to indicate if the target is multi sample. This is because we don't know the sample count when glGetInternalformativ() case. Reviewed-by: Mike Blumenkrantz Reviewed-by: Marek Olšák Signed-off-by: Qiang Yu Part-of: --- src/gallium/auxiliary/driver_ddebug/dd_screen.c | 3 ++- src/gallium/auxiliary/driver_noop/noop_pipe.c | 5 +++-- src/gallium/auxiliary/driver_rbug/rbug_screen.c | 5 +++-- src/gallium/auxiliary/driver_trace/tr_screen.c | 5 +++-- src/gallium/drivers/radeonsi/si_texture.c | 1 + src/gallium/include/pipe/p_screen.h | 1 + src/mesa/state_tracker/st_cb_texture.c | 4 +++- src/mesa/state_tracker/st_format.c | 6 ++++-- 8 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/gallium/auxiliary/driver_ddebug/dd_screen.c b/src/gallium/auxiliary/driver_ddebug/dd_screen.c index 381ad248a9b..70b29350636 100644 --- a/src/gallium/auxiliary/driver_ddebug/dd_screen.c +++ b/src/gallium/auxiliary/driver_ddebug/dd_screen.c @@ -355,6 +355,7 @@ dd_screen_check_resource_capability(struct pipe_screen *_screen, static int dd_screen_get_sparse_texture_virtual_page_size(struct pipe_screen *_screen, enum pipe_texture_target target, + bool multi_sample, enum pipe_format format, unsigned offset, unsigned size, int *x, int *y, int *z) @@ -362,7 +363,7 @@ dd_screen_get_sparse_texture_virtual_page_size(struct pipe_screen *_screen, struct pipe_screen *screen = dd_screen(_screen)->screen; return screen->get_sparse_texture_virtual_page_size( - _screen, target, format, offset, size, x, y, z); + _screen, target, multi_sample, format, offset, size, x, y, z); } /******************************************************************** diff --git a/src/gallium/auxiliary/driver_noop/noop_pipe.c b/src/gallium/auxiliary/driver_noop/noop_pipe.c index 000898b264d..a1aca264de3 100644 --- a/src/gallium/auxiliary/driver_noop/noop_pipe.c +++ b/src/gallium/auxiliary/driver_noop/noop_pipe.c @@ -666,6 +666,7 @@ static void noop_get_device_uuid(struct pipe_screen *screen, char *uuid) static int noop_get_sparse_texture_virtual_page_size(struct pipe_screen *screen, enum pipe_texture_target target, + bool multi_sample, enum pipe_format format, unsigned offset, unsigned size, int *x, int *y, int *z) @@ -673,8 +674,8 @@ static int noop_get_sparse_texture_virtual_page_size(struct pipe_screen *screen, struct noop_pipe_screen *noop_screen = (struct noop_pipe_screen*)screen; struct pipe_screen *oscreen = noop_screen->oscreen; - return oscreen->get_sparse_texture_virtual_page_size(screen, target, format, offset, - size, x, y, z); + return oscreen->get_sparse_texture_virtual_page_size(screen, target, multi_sample, + format, offset, size, x, y, z); } static void noop_query_dmabuf_modifiers(struct pipe_screen *screen, diff --git a/src/gallium/auxiliary/driver_rbug/rbug_screen.c b/src/gallium/auxiliary/driver_rbug/rbug_screen.c index bb89078382d..9ddb6dfa762 100644 --- a/src/gallium/auxiliary/driver_rbug/rbug_screen.c +++ b/src/gallium/auxiliary/driver_rbug/rbug_screen.c @@ -194,6 +194,7 @@ rbug_screen_get_dmabuf_modifier_planes(struct pipe_screen *_screen, static int rbug_screen_get_sparse_texture_virtual_page_size(struct pipe_screen *_screen, enum pipe_texture_target target, + bool multi_sample, enum pipe_format format, unsigned offset, unsigned size, int *x, int *y, int *z) @@ -201,8 +202,8 @@ rbug_screen_get_sparse_texture_virtual_page_size(struct pipe_screen *_screen, struct rbug_screen *rb_screen = rbug_screen(_screen); struct pipe_screen *screen = rb_screen->screen; - return screen->get_sparse_texture_virtual_page_size(screen, target, format, offset, - size, x, y, z); + return screen->get_sparse_texture_virtual_page_size(screen, target, multi_sample, + format, offset, size, x, y, z); } static struct pipe_context * diff --git a/src/gallium/auxiliary/driver_trace/tr_screen.c b/src/gallium/auxiliary/driver_trace/tr_screen.c index 936d039000c..839d89995d9 100644 --- a/src/gallium/auxiliary/driver_trace/tr_screen.c +++ b/src/gallium/auxiliary/driver_trace/tr_screen.c @@ -1043,6 +1043,7 @@ trace_screen_get_dmabuf_modifier_planes(struct pipe_screen *_screen, uint64_t mo static int trace_screen_get_sparse_texture_virtual_page_size(struct pipe_screen *_screen, enum pipe_texture_target target, + bool multi_sample, enum pipe_format format, unsigned offset, unsigned size, int *x, int *y, int *z) @@ -1061,8 +1062,8 @@ trace_screen_get_sparse_texture_virtual_page_size(struct pipe_screen *_screen, trace_dump_arg(ptr, y); trace_dump_arg(ptr, z); - int ret = screen->get_sparse_texture_virtual_page_size(screen, target, format, offset, - size, x, y, z); + int ret = screen->get_sparse_texture_virtual_page_size(screen, target, multi_sample, + format, offset, size, x, y, z); trace_dump_ret(int, ret); diff --git a/src/gallium/drivers/radeonsi/si_texture.c b/src/gallium/drivers/radeonsi/si_texture.c index 65c7f99fd9a..052cc3b52ad 100644 --- a/src/gallium/drivers/radeonsi/si_texture.c +++ b/src/gallium/drivers/radeonsi/si_texture.c @@ -2266,6 +2266,7 @@ static bool si_check_resource_capability(struct pipe_screen *screen, struct pipe static int si_get_sparse_texture_virtual_page_size(struct pipe_screen *screen, enum pipe_texture_target target, + bool multi_sample, enum pipe_format format, unsigned offset, unsigned size, int *x, int *y, int *z) diff --git a/src/gallium/include/pipe/p_screen.h b/src/gallium/include/pipe/p_screen.h index 54eea130c96..edb5cc8decb 100644 --- a/src/gallium/include/pipe/p_screen.h +++ b/src/gallium/include/pipe/p_screen.h @@ -665,6 +665,7 @@ struct pipe_screen { */ int (*get_sparse_texture_virtual_page_size)(struct pipe_screen *screen, enum pipe_texture_target target, + bool multi_sample, enum pipe_format format, unsigned offset, unsigned size, int *x, int *y, int *z); diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c index a91d68cf663..fa5f4a6612d 100644 --- a/src/mesa/state_tracker/st_cb_texture.c +++ b/src/mesa/state_tracker/st_cb_texture.c @@ -34,6 +34,7 @@ #include "main/format_utils.h" #include "main/glformats.h" #include "main/image.h" +#include "main/formatquery.h" #include "main/macros.h" #include "main/mipmap.h" @@ -3726,10 +3727,11 @@ st_GetSparseTextureVirtualPageSize(struct gl_context *ctx, struct pipe_screen *screen = st->screen; enum pipe_texture_target ptarget = gl_target_to_pipe(target); enum pipe_format pformat = st_mesa_format_to_pipe_format(st, format); + bool multi_sample = _mesa_is_multisample_target(target); /* Get an XYZ page size combination specified by index. */ return !!screen->get_sparse_texture_virtual_page_size( - screen, ptarget, pformat, index, 1, x, y, z); + screen, ptarget, multi_sample, pformat, index, 1, x, y, z); } void diff --git a/src/mesa/state_tracker/st_format.c b/src/mesa/state_tracker/st_format.c index 1905d1f7515..105d84016cf 100644 --- a/src/mesa/state_tracker/st_format.c +++ b/src/mesa/state_tracker/st_format.c @@ -1520,17 +1520,19 @@ st_QueryInternalFormat(struct gl_context *ctx, GLenum target, if (pformat != PIPE_FORMAT_NONE) { struct pipe_screen *screen = st->screen; enum pipe_texture_target ptarget = gl_target_to_pipe(target); + bool multi_sample = _mesa_is_multisample_target(target); if (pname == GL_NUM_VIRTUAL_PAGE_SIZES_ARB) params[0] = screen->get_sparse_texture_virtual_page_size( - screen, ptarget, pformat, 0, 0, NULL, NULL, NULL); + screen, ptarget, multi_sample, pformat, 0, 0, NULL, NULL, NULL); else { int *args[3] = {0}; args[pname - GL_VIRTUAL_PAGE_SIZE_X_ARB] = params; /* 16 comes from the caller _mesa_GetInternalformativ() */ screen->get_sparse_texture_virtual_page_size( - screen, ptarget, pformat, 0, 16, args[0], args[1], args[2]); + screen, ptarget, multi_sample, pformat, 0, 16, + args[0], args[1], args[2]); } } break;