gallium: add multi_sample parameter to get_sparse_texture_virtual_page_size

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 <michael.blumenkrantz@gmail.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Signed-off-by: Qiang Yu <yuq825@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14362>
This commit is contained in:
Qiang Yu 2021-12-30 15:03:57 +08:00
parent 2c994e17c1
commit 485ceb5c51
8 changed files with 20 additions and 10 deletions

View file

@ -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);
}
/********************************************************************

View file

@ -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,

View file

@ -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 *

View file

@ -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);

View file

@ -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)

View file

@ -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);

View file

@ -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

View file

@ -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;