Quick attempt at fixing the Macross glitch

This commit is contained in:
Henrik Rydgård 2022-07-26 10:43:30 +02:00
parent d7aa3ee486
commit 176b460d76
3 changed files with 4 additions and 1 deletions

View File

@ -162,6 +162,7 @@ SamplerCacheKey TextureCacheCommon::GetSamplingParams(int maxLevel, const TexCac
key.sClamp = gstate.isTexCoordClampedS(); key.sClamp = gstate.isTexCoordClampedS();
key.tClamp = gstate.isTexCoordClampedT(); key.tClamp = gstate.isTexCoordClampedT();
key.aniso = false; key.aniso = false;
key.texture3d = gstate_c.curTextureIs3D;
GETexLevelMode mipMode = gstate.getTexLevelMode(); GETexLevelMode mipMode = gstate.getTexLevelMode();
bool autoMip = mipMode == GE_TEXLEVEL_MODE_AUTO; bool autoMip = mipMode == GE_TEXLEVEL_MODE_AUTO;

View File

@ -71,6 +71,7 @@ struct SamplerCacheKey {
bool sClamp : 1; bool sClamp : 1;
bool tClamp : 1; bool tClamp : 1;
bool aniso : 1; bool aniso : 1;
bool texture3d : 1;
}; };
}; };
bool operator < (const SamplerCacheKey &other) const { bool operator < (const SamplerCacheKey &other) const {

View File

@ -119,7 +119,8 @@ VkSampler SamplerCache::GetOrCreateSampler(const SamplerCacheKey &key) {
VkSamplerCreateInfo samp = { VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO }; VkSamplerCreateInfo samp = { VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO };
samp.addressModeU = key.sClamp ? VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE : VK_SAMPLER_ADDRESS_MODE_REPEAT; samp.addressModeU = key.sClamp ? VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE : VK_SAMPLER_ADDRESS_MODE_REPEAT;
samp.addressModeV = key.tClamp ? VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE : VK_SAMPLER_ADDRESS_MODE_REPEAT; samp.addressModeV = key.tClamp ? VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE : VK_SAMPLER_ADDRESS_MODE_REPEAT;
samp.addressModeW = samp.addressModeU; // irrelevant, but Mali recommends that all clamp modes are the same if possible. // W addressing is irrelevant for 2d textures, but Mali recommends that all clamp modes are the same if possible so just copy from U.
samp.addressModeW = key.texture3d ? VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE : samp.addressModeU;
samp.compareOp = VK_COMPARE_OP_ALWAYS; samp.compareOp = VK_COMPARE_OP_ALWAYS;
samp.flags = 0; samp.flags = 0;
samp.magFilter = key.magFilt ? VK_FILTER_LINEAR : VK_FILTER_NEAREST; samp.magFilter = key.magFilt ? VK_FILTER_LINEAR : VK_FILTER_NEAREST;