mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2026-10-01 06:36:48 -05:00
Merge pull request #13794 from Sintendo/doouble-lookup
Avoid map/set double lookups
This commit is contained in:
@@ -197,14 +197,13 @@ void GraphicsModManager::Load(const GraphicsModGroupConfig& config)
|
||||
{
|
||||
for (const GraphicsTargetGroupConfig& group : mod.m_groups)
|
||||
{
|
||||
if (m_groups.contains(group.m_name))
|
||||
if (const bool inserted = m_groups.insert(group.m_name).second; !inserted)
|
||||
{
|
||||
WARN_LOG_FMT(
|
||||
VIDEO,
|
||||
"Specified graphics mod group '{}' for mod '{}' is already specified by another mod.",
|
||||
group.m_name, mod.m_title);
|
||||
}
|
||||
m_groups.insert(group.m_name);
|
||||
|
||||
const auto internal_group = fmt::format("{}.{}", mod.m_title, group.m_name);
|
||||
for (const GraphicsTargetConfig& target : group.m_targets)
|
||||
|
||||
@@ -1535,26 +1535,21 @@ const AbstractPipeline* ShaderCache::GetTextureReinterpretPipeline(TextureFormat
|
||||
TextureFormat to_format)
|
||||
{
|
||||
const auto key = std::make_pair(from_format, to_format);
|
||||
auto iter = m_texture_reinterpret_pipelines.find(key);
|
||||
if (iter != m_texture_reinterpret_pipelines.end())
|
||||
const auto [iter, inserted] = m_texture_reinterpret_pipelines.emplace(key, nullptr);
|
||||
|
||||
if (!inserted)
|
||||
return iter->second.get();
|
||||
|
||||
std::string shader_source =
|
||||
FramebufferShaderGen::GenerateTextureReinterpretShader(from_format, to_format);
|
||||
if (shader_source.empty())
|
||||
{
|
||||
m_texture_reinterpret_pipelines.emplace(key, nullptr);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
std::unique_ptr<AbstractShader> shader = g_gfx->CreateShaderFromSource(
|
||||
ShaderStage::Pixel, shader_source,
|
||||
fmt::format("Texture reinterpret pixel shader: {} to {}", from_format, to_format));
|
||||
if (!shader)
|
||||
{
|
||||
m_texture_reinterpret_pipelines.emplace(key, nullptr);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
AbstractPipelineConfig config;
|
||||
config.vertex_format = nullptr;
|
||||
@@ -1566,8 +1561,8 @@ const AbstractPipeline* ShaderCache::GetTextureReinterpretPipeline(TextureFormat
|
||||
config.blending_state = RenderState::GetNoBlendingBlendState();
|
||||
config.framebuffer_state = RenderState::GetRGBA8FramebufferState();
|
||||
config.usage = AbstractPipelineUsage::Utility;
|
||||
auto iiter = m_texture_reinterpret_pipelines.emplace(key, g_gfx->CreatePipeline(config));
|
||||
return iiter.first->second.get();
|
||||
iter->second = g_gfx->CreatePipeline(config);
|
||||
return iter->second.get();
|
||||
}
|
||||
|
||||
const AbstractShader*
|
||||
@@ -1576,17 +1571,14 @@ ShaderCache::GetTextureDecodingShader(TextureFormat format,
|
||||
{
|
||||
const auto key = std::make_pair(static_cast<u32>(format),
|
||||
static_cast<u32>(palette_format.value_or(TLUTFormat::IA8)));
|
||||
const auto iter = m_texture_decoding_shaders.find(key);
|
||||
if (iter != m_texture_decoding_shaders.end())
|
||||
const auto [iter, inserted] = m_texture_decoding_shaders.emplace(key, nullptr);
|
||||
if (!inserted)
|
||||
return iter->second.get();
|
||||
|
||||
const std::string shader_source =
|
||||
TextureConversionShaderTiled::GenerateDecodingShader(format, palette_format, APIType::OpenGL);
|
||||
if (shader_source.empty())
|
||||
{
|
||||
m_texture_decoding_shaders.emplace(key, nullptr);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
const std::string name =
|
||||
palette_format.has_value() ?
|
||||
@@ -1596,12 +1588,9 @@ ShaderCache::GetTextureDecodingShader(TextureFormat format,
|
||||
std::unique_ptr<AbstractShader> shader =
|
||||
g_gfx->CreateShaderFromSource(ShaderStage::Compute, shader_source, name);
|
||||
if (!shader)
|
||||
{
|
||||
m_texture_decoding_shaders.emplace(key, nullptr);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
const auto iiter = m_texture_decoding_shaders.emplace(key, std::move(shader));
|
||||
return iiter.first->second.get();
|
||||
iter->second = std::move(shader);
|
||||
return iter->second.get();
|
||||
}
|
||||
} // namespace VideoCommon
|
||||
|
||||
@@ -652,8 +652,8 @@ void TextureCacheBase::DoSaveState(PointerWrap& p)
|
||||
|
||||
auto refpair1 = std::make_pair(*id1, *id2);
|
||||
auto refpair2 = std::make_pair(*id2, *id1);
|
||||
if (!reference_pairs.contains(refpair1) && !reference_pairs.contains(refpair2))
|
||||
reference_pairs.insert(refpair1);
|
||||
if (!reference_pairs.contains(refpair2))
|
||||
reference_pairs.insert(std::move(refpair1));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user