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)
{
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:
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:
/* 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;