radeonsi: enable ARB_sparse_texture
authorQiang Yu <yuq825@gmail.com>
Fri, 10 Dec 2021 13:59:58 +0000 (21:59 +0800)
committerQiang Yu <yuq825@gmail.com>
Thu, 30 Dec 2021 08:11:19 +0000 (16:11 +0800)
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>

docs/features.txt
docs/relnotes/new_features.txt
src/gallium/drivers/radeonsi/si_get.c

index 2b4e96b..ec15bbb 100644 (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)
index df676f2..89789ee 100644 (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
index b4064cd..3c2caea 100644 (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;