mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-10 23:02:08 +00:00
- fixed: Vulkan descriptor sets must check the real translation, not just the translation ID.
In particular the one for the menu's player sprite and ACS translations can alter a translation ID's actual translation at run time, these changes never triggered a descriptor set change.
This commit is contained in:
parent
298407aaf3
commit
c11729c2bb
2 changed files with 6 additions and 5 deletions
|
@ -380,12 +380,13 @@ VulkanDescriptorSet* VkMaterial::GetDescriptorSet(const FMaterialState& state)
|
|||
auto base = Source();
|
||||
int clampmode = state.mClampMode;
|
||||
int translation = state.mTranslation;
|
||||
auto translationp = IsLuminosityTranslation(translation)? translation : intptr_t(GPalette.GetTranslation(GetTranslationType(translation), GetTranslationIndex(translation)));
|
||||
|
||||
clampmode = base->GetClampMode(clampmode);
|
||||
|
||||
for (auto& set : mDescriptorSets)
|
||||
{
|
||||
if (set.descriptor && set.clampmode == clampmode && set.flags == translation) return set.descriptor.get();
|
||||
if (set.descriptor && set.clampmode == clampmode && set.remap == translationp) return set.descriptor.get();
|
||||
}
|
||||
|
||||
int numLayers = NumLayers();
|
||||
|
@ -430,7 +431,7 @@ VulkanDescriptorSet* VkMaterial::GetDescriptorSet(const FMaterialState& state)
|
|||
}
|
||||
|
||||
update.updateSets(fb->device);
|
||||
mDescriptorSets.emplace_back(clampmode, translation, std::move(descriptor));
|
||||
mDescriptorSets.emplace_back(clampmode, translationp, std::move(descriptor));
|
||||
return mDescriptorSets.back().descriptor.get();
|
||||
}
|
||||
|
||||
|
|
|
@ -70,13 +70,13 @@ class VkMaterial : public FMaterial
|
|||
struct DescriptorEntry
|
||||
{
|
||||
int clampmode;
|
||||
int flags;
|
||||
intptr_t remap;
|
||||
std::unique_ptr<VulkanDescriptorSet> descriptor;
|
||||
|
||||
DescriptorEntry(int cm, int f, std::unique_ptr<VulkanDescriptorSet>&& d)
|
||||
DescriptorEntry(int cm, intptr_t f, std::unique_ptr<VulkanDescriptorSet>&& d)
|
||||
{
|
||||
clampmode = cm;
|
||||
flags = f;
|
||||
remap = f;
|
||||
descriptor = std::move(d);
|
||||
}
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue