fix(agc): accept the sampler ANISO_OVERRIDE bit

Mesa sets ANISO_OVERRIDE (S# word 2, bit 29) on every GFX10+ sampler
unless aniso_single_level is on; it turns anisotropic filtering off for
single-level views. Samplers carrying it were rejected. Accept and
ignore it: host samplers are built from the S# alone and shared between
images, so single-level views keep the sampler's anisotropy. The gap is
recorded in TechnicalDebt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Scott Schuster 2026-10-07 22:12:46 -05:00 committed by Adrià Franch
parent c9f9e0f139
commit d8bb441118
2 changed files with 10 additions and 4 deletions

View File

@ -111,7 +111,7 @@ GuestSamplerResource DecodeSamplerResource(std::span<const std::uint32_t> words,
Require(!disableDegamma, "guest sampler descriptor disables degamma which is not implemented");
Require(lodBiasSec == 0, "guest sampler descriptor uses a secondary LOD bias which is not implemented");
Require(!pointPreclamp, "guest sampler descriptor uses point preclamping which is not implemented");
Require(!anisoOverride, "guest sampler descriptor uses an anisotropy override which is not implemented");
static_cast<void>(anisoOverride);
Require(!blendZeroPrt, "guest sampler descriptor uses PRT blend-zero which is not implemented");
if (mipFilter > 2u) Require(false, "guest sampler descriptor uses an unknown mip filter " + std::to_string(mipFilter));
Require(mipFilter != 2u || reductionMode == VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT, "guest sampler descriptor combines a min or max reduction with a linear mip filter, which is not implemented");

View File

@ -449,9 +449,15 @@ void RunGuestSamplerResourceTests() {
badPreclamp.pointPreclamp = true;
rejectFields(badPreclamp, "point preclamping");
Fields badAnisoOverride = base;
badAnisoOverride.anisoOverride = true;
rejectFields(badAnisoOverride, "anisotropy override");
Fields anisoOverride = base;
anisoOverride.xyMagFilter = 2;
anisoOverride.xyMinFilter = 2;
anisoOverride.zFilter = 2;
anisoOverride.maxAnisoRatio = 3;
const auto withoutOverride = DecodeSamplerResource(pack(anisoOverride));
anisoOverride.anisoOverride = true;
const auto withOverride = DecodeSamplerResource(pack(anisoOverride));
Require(withOverride.anisotropyEnable == withoutOverride.anisotropyEnable && withOverride.maxAnisotropy == withoutOverride.maxAnisotropy && withOverride.magFilter == withoutOverride.magFilter && withOverride.minFilter == withoutOverride.minFilter, "ANISO_OVERRIDE changed the decoded sampler");
Fields badBlendZero = base;
badBlendZero.blendZeroPrt = true;