From 7f48aba64197d0cae648cc046869e1afd6f3da6e Mon Sep 17 00:00:00 2001 From: Qiang Yu Date: Fri, 3 Dec 2021 16:12:42 +0800 Subject: [PATCH] gallium: add caps for sparse texture support MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Reviewed-by: Marek Olšák Signed-off-by: Qiang Yu Part-of: --- docs/gallium/screen.rst | 4 ++++ src/gallium/auxiliary/util/u_screen.c | 6 ++++++ src/gallium/drivers/nouveau/nv50/nv50_screen.c | 4 ++++ src/gallium/drivers/nouveau/nvc0/nvc0_screen.c | 4 ++++ src/gallium/include/pipe/p_defines.h | 4 ++++ 5 files changed, 22 insertions(+) diff --git a/docs/gallium/screen.rst b/docs/gallium/screen.rst index b51fe49..c42d965 100644 --- a/docs/gallium/screen.rst +++ b/docs/gallium/screen.rst @@ -632,6 +632,10 @@ The integer capabilities: * ``PIPE_CAP_PREFER_BACK_BUFFER_REUSE``: Only applies to DRI_PRIME. If 1, the driver prefers that DRI3 tries to use the same back buffer each frame. If 0, this means DRI3 will at least use 2 back buffers and ping-pong between them to allow the tiled->linear copy to run in parallel. * ``PIPE_CAP_DRAW_VERTEX_STATE``: Driver supports `pipe_screen::create_vertex_state/vertex_state_destroy` and `pipe_context::draw_vertex_state`. Only used by display lists and designed to serve vbo_save. * ``PIPE_CAP_PREFER_POT_ALIGNED_VARYINGS``: Driver prefers varyings to be aligned to power of two in a slot. If this cap is enabled, vec4 varying will be placed in .xyzw components of the varying slot, vec3 in .xyz and vec2 in .xy or .zw +* ``PIPE_CAP_MAX_SPARSE_TEXTURE_SIZE``: Maximum 1D/2D/rectangle texture image dimension for a sparse texture. +* ``PIPE_CAP_MAX_SPARSE_3D_TEXTURE_SIZE``: Maximum 3D texture image dimension for a sparse texture. +* ``PIPE_CAP_MAX_SPARSE_ARRAY_TEXTURE_LAYERS``: Maximum number of layers in a sparse array texture. +* ``PIPE_CAP_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS``: TRUE if there are no restrictions on the allocation of mipmaps in sparse textures and FALSE otherwise. See SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_ARB description in ARB_sparse_texture extension spec. .. _pipe_capf: diff --git a/src/gallium/auxiliary/util/u_screen.c b/src/gallium/auxiliary/util/u_screen.c index baaac25..907026f 100644 --- a/src/gallium/auxiliary/util/u_screen.c +++ b/src/gallium/auxiliary/util/u_screen.c @@ -480,6 +480,12 @@ u_pipe_screen_get_param_defaults(struct pipe_screen *pscreen, case PIPE_CAP_PREFER_POT_ALIGNED_VARYINGS: return 0; + case PIPE_CAP_MAX_SPARSE_TEXTURE_SIZE: + case PIPE_CAP_MAX_SPARSE_3D_TEXTURE_SIZE: + case PIPE_CAP_MAX_SPARSE_ARRAY_TEXTURE_LAYERS: + case PIPE_CAP_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS: + return 0; + default: unreachable("bad PIPE_CAP_*"); } diff --git a/src/gallium/drivers/nouveau/nv50/nv50_screen.c b/src/gallium/drivers/nouveau/nv50/nv50_screen.c index 7fe61bb..6b24412 100644 --- a/src/gallium/drivers/nouveau/nv50/nv50_screen.c +++ b/src/gallium/drivers/nouveau/nv50/nv50_screen.c @@ -405,6 +405,10 @@ nv50_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param) case PIPE_CAP_SAMPLER_REDUCTION_MINMAX_ARB: case PIPE_CAP_DRAW_VERTEX_STATE: case PIPE_CAP_PREFER_POT_ALIGNED_VARYINGS: + case PIPE_CAP_MAX_SPARSE_TEXTURE_SIZE: + case PIPE_CAP_MAX_SPARSE_3D_TEXTURE_SIZE: + case PIPE_CAP_MAX_SPARSE_ARRAY_TEXTURE_LAYERS: + case PIPE_CAP_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS: return 0; case PIPE_CAP_VENDOR_ID: diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c index 7379b14..5af0560 100644 --- a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c @@ -434,6 +434,10 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param) case PIPE_CAP_SAMPLER_REDUCTION_MINMAX_ARB: case PIPE_CAP_DRAW_VERTEX_STATE: case PIPE_CAP_PREFER_POT_ALIGNED_VARYINGS: + case PIPE_CAP_MAX_SPARSE_TEXTURE_SIZE: + case PIPE_CAP_MAX_SPARSE_3D_TEXTURE_SIZE: + case PIPE_CAP_MAX_SPARSE_ARRAY_TEXTURE_LAYERS: + case PIPE_CAP_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS: return 0; case PIPE_CAP_VENDOR_ID: diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h index 644257e..4c5e29e 100644 --- a/src/gallium/include/pipe/p_defines.h +++ b/src/gallium/include/pipe/p_defines.h @@ -1000,6 +1000,10 @@ enum pipe_cap PIPE_CAP_PREFER_BACK_BUFFER_REUSE, PIPE_CAP_DRAW_VERTEX_STATE, PIPE_CAP_PREFER_POT_ALIGNED_VARYINGS, + PIPE_CAP_MAX_SPARSE_TEXTURE_SIZE, + PIPE_CAP_MAX_SPARSE_3D_TEXTURE_SIZE, + PIPE_CAP_MAX_SPARSE_ARRAY_TEXTURE_LAYERS, + PIPE_CAP_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS, PIPE_CAP_LAST, /* XXX do not add caps after PIPE_CAP_LAST! */ -- 2.7.4