radeonsi: enable ARB_sparse_texture

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/14223>
This commit is contained in:
Qiang Yu 2021-12-10 21:59:58 +08:00
parent 5a844f87a1
commit 71e2df73d9
3 changed files with 21 additions and 5 deletions

View File

@ -311,8 +311,8 @@ Khronos, ARB, and OES extensions that are not part of any OpenGL or OpenGL ES ve
GL_ARB_shader_stencil_export DONE (i965/gen9+, r600, radeonsi, softpipe, llvmpipe, virgl, panfrost, zink)
GL_ARB_shader_viewport_layer_array DONE (i965/gen6+, nvc0, radeonsi, zink)
GL_ARB_shading_language_include DONE
GL_ARB_sparse_buffer DONE (radeonsi/CIK+, zink)
GL_ARB_sparse_texture not started
GL_ARB_sparse_buffer DONE (radeonsi/gfx9+, zink)
GL_ARB_sparse_texture DONE (radeonsi/gfx9+)
GL_ARB_sparse_texture2 not started
GL_ARB_sparse_texture_clamp not started
GL_ARB_texture_filter_minmax DONE (nvc0/gm200+, zink)

View File

@ -2,3 +2,4 @@ lavapipe,radv KHR_dynamic_rendering
radv EXT_image_view_min_lod
VK_KHR_synchronization2 on RADV.
OpenSWR has been moved to the Amber branch
radeonsi ARB_sparse_texture

View File

@ -48,6 +48,10 @@ static int si_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
{
struct si_screen *sscreen = (struct si_screen *)pscreen;
/* Gfx8 (Polaris11) hangs, so don't enable this on Gfx8 and older chips. */
bool enable_sparse = sscreen->info.chip_class >= GFX9 &&
sscreen->info.has_sparse_vm_mappings;
switch (param) {
/* Supported features (boolean caps). */
case PIPE_CAP_ACCELERATED:
@ -242,9 +246,7 @@ static int si_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
return 0;
case PIPE_CAP_SPARSE_BUFFER_PAGE_SIZE:
/* Gfx8 (Polaris11) hangs, so don't enable this on Gfx8 and older chips. */
return sscreen->info.chip_class >= GFX9 &&
sscreen->info.has_sparse_vm_mappings ? RADEON_SPARSE_PAGE_SIZE : 0;
return enable_sparse ? RADEON_SPARSE_PAGE_SIZE : 0;
case PIPE_CAP_UMA:
case PIPE_CAP_PREFER_IMM_ARRAYS_AS_CONSTBUF:
@ -313,6 +315,19 @@ static int si_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
/* textures support 8192, but layered rendering supports 2048 */
return 2048;
/* Sparse texture */
case PIPE_CAP_MAX_SPARSE_TEXTURE_SIZE:
return enable_sparse ?
si_get_param(pscreen, PIPE_CAP_MAX_TEXTURE_2D_SIZE) : 0;
case PIPE_CAP_MAX_SPARSE_3D_TEXTURE_SIZE:
return enable_sparse ?
(1 << (si_get_param(pscreen, PIPE_CAP_MAX_TEXTURE_3D_LEVELS) - 1)) : 0;
case PIPE_CAP_MAX_SPARSE_ARRAY_TEXTURE_LAYERS:
return enable_sparse ?
si_get_param(pscreen, PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS) : 0;
case PIPE_CAP_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS:
return enable_sparse ? 1 : 0;
/* Viewports and render targets. */
case PIPE_CAP_MAX_VIEWPORTS:
return SI_MAX_VIEWPORTS;