diff --git a/docs/features.txt b/docs/features.txt index 2b4e96b3829..ec15bbbb62b 100644 --- a/docs/features.txt +++ b/docs/features.txt @@ -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) diff --git a/docs/relnotes/new_features.txt b/docs/relnotes/new_features.txt index df676f2ee7d..89789ee9ccd 100644 --- a/docs/relnotes/new_features.txt +++ b/docs/relnotes/new_features.txt @@ -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 diff --git a/src/gallium/drivers/radeonsi/si_get.c b/src/gallium/drivers/radeonsi/si_get.c index b4064cd8f0b..3c2caeabaf6 100644 --- a/src/gallium/drivers/radeonsi/si_get.c +++ b/src/gallium/drivers/radeonsi/si_get.c @@ -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;