Share sampler state objects between textures

#rb none

#ROBOMERGE-OWNER: dmitriy.dyomin
#ROBOMERGE-AUTHOR: dmitriy.dyomin
#ROBOMERGE-SOURCE: CL 11596383 via CL 11596386 via CL 11596387
#ROBOMERGE-BOT: (v656-11643781)

[CL 11722115 by dmitriy dyomin in Main branch]
This commit is contained in:
dmitriy dyomin
2020-02-27 21:27:55 -05:00
parent 2872976877
commit 8e45629b19
19 changed files with 93 additions and 96 deletions
@@ -796,3 +796,36 @@ void FMipBiasFade::SetNewMipCount( float ActualMipCount, float TargetMipCount, d
}
}
}
class FTextureSamplerStateCache : public FRenderResource
{
public:
TMap<FSamplerStateInitializerRHI, FRHISamplerState*> Samplers;
virtual void ReleaseRHI() override
{
for (auto Pair : Samplers)
{
Pair.Value->Release();
}
Samplers.Empty();
}
};
TGlobalResource<FTextureSamplerStateCache> GTextureSamplerStateCache;
FRHISamplerState* FTexture::GetOrCreateSamplerState(const FSamplerStateInitializerRHI& Initializer)
{
FRHISamplerState** Found = GTextureSamplerStateCache.Samplers.Find(Initializer);
if (Found)
{
return *Found;
}
FSamplerStateRHIRef NewState = RHICreateSamplerState(Initializer);
// Add an extra reference so we don't have TRefCountPtr in the maps
NewState->AddRef();
GTextureSamplerStateCache.Samplers.Add(Initializer, NewState);
return NewState;
}