Merge branch 'sparse-bring-back-ds' into 'main'

anv: bring back sparse depth/stencil

See merge request mesa/mesa!37423
This commit is contained in:
Paulo Zanoni 2026-05-07 16:48:42 -07:00
commit 27712212e0
2 changed files with 28 additions and 8 deletions

View file

@ -136,13 +136,15 @@ split_tex_residency(nir_builder *b, nir_tex_instr *tex, bool jay)
/* Clone the original instruction */
nir_tex_instr *sparse_tex =
nir_instr_as_tex(nir_instr_clone(b->shader, &tex->instr));
nir_def_init(&sparse_tex->instr, &sparse_tex->def, 2, tex->def.bit_size);
nir_def_init(&sparse_tex->instr, &sparse_tex->def,
tex->def.num_components, tex->def.bit_size);
nir_builder_instr_insert(b, &sparse_tex->instr);
if (jay) {
sparse_tex->op = tex->op == nir_texop_txf ?
nir_texop_sparse_residency_txf_intel :
nir_texop_sparse_residency_intel;
sparse_tex->def.num_components = 2;
}
/* txl/txb/tex and tg4 both access the same pixels for residency checking

View file

@ -1658,15 +1658,30 @@ anv_sparse_image_check_support(struct anv_physical_device *pdevice,
return VK_ERROR_FEATURE_NOT_PRESENT;
}
/* While our hardware allows us to support sparse with some depth/stencil
* formats (e.g., single-sampled 2D), the spec seems to be expecting that,
* if we support a format, we have to support it with all the multi-sampled
* flags we support for non-sparse. Therefore, just give up depth/stencil
* entirely since games don't seem to be requiring it.
/* Please see ISL's filter_tiling() functions for accurate explanations on
* why depth/stencil images are not always supported with the tiling
* formats we want.
*/
VkImageAspectFlags aspects = vk_format_aspects(vk_format);
if (aspects & (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT))
return VK_ERROR_FORMAT_NOT_SUPPORTED;
if (aspects & (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT)) {
/* For multi-sampled images, the image layouts for color and
* depth/stencil are different, and only the color layout is compatible
* with the standard block shapes.
*/
valid_samples &= VK_SAMPLE_COUNT_1_BIT;
/* For 125+, isl_gfx125_filter_tiling() claims 3D is not supported.
* For the previous platforms, isl_gfx6_filter_tiling() says only 2D is
* supported.
*/
if (pdevice->info.verx10 >= 125) {
if (type == VK_IMAGE_TYPE_3D)
return VK_ERROR_FORMAT_NOT_SUPPORTED;
} else {
if (type != VK_IMAGE_TYPE_2D)
return VK_ERROR_FORMAT_NOT_SUPPORTED;
}
}
const struct anv_format *anv_format = anv_get_format(pdevice, vk_format);
if (!anv_format)
@ -1709,5 +1724,8 @@ anv_sparse_image_check_support(struct anv_physical_device *pdevice,
if (valid_samples_out)
*valid_samples_out = valid_samples;
if (!valid_samples)
return VK_ERROR_FORMAT_NOT_SUPPORTED;
return VK_SUCCESS;
}