summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/VertexLoaderBase.cpp
diff options
context:
space:
mode:
authorPokechu22 <Pokechu022@gmail.com>2021-03-11 11:23:13 -0800
committerPokechu22 <Pokechu022@gmail.com>2021-05-07 15:42:17 -0700
commitfa7077763f91980e372d502b4357f3dda971ffbe (patch)
treefa543683445144ea350b2339514c32bbbf7497de /Source/Core/VideoCommon/VertexLoaderBase.cpp
parentcafffff75ea4fc42c401b87370e94efe17309cad (diff)
Remove VertexLoaderBase::IsInitialized
It is no longer relevant for the current set of loaders after 70305425462843af192489da00389559cd6f5834. If it becomes relevant again, a static function named IsUsable or IsCompatibleWithCurrentMachine or something would be a better approach.
Diffstat (limited to 'Source/Core/VideoCommon/VertexLoaderBase.cpp')
-rw-r--r--Source/Core/VideoCommon/VertexLoaderBase.cpp84
1 files changed, 34 insertions, 50 deletions
diff --git a/Source/Core/VideoCommon/VertexLoaderBase.cpp b/Source/Core/VideoCommon/VertexLoaderBase.cpp
index 6a8c6498c0..84d7eb43c0 100644
--- a/Source/Core/VideoCommon/VertexLoaderBase.cpp
+++ b/Source/Core/VideoCommon/VertexLoaderBase.cpp
@@ -34,31 +34,23 @@ public:
const TVtxDesc& vtx_desc, const VAT& vtx_attr)
: VertexLoaderBase(vtx_desc, vtx_attr), a(std::move(a_)), b(std::move(b_))
{
- m_initialized = a && b && a->IsInitialized() && b->IsInitialized();
-
- if (m_initialized)
+ ASSERT(a && b);
+ if (a->m_VertexSize == b->m_VertexSize && a->m_native_components == b->m_native_components &&
+ a->m_native_vtx_decl.stride == b->m_native_vtx_decl.stride)
+ {
+ m_VertexSize = a->m_VertexSize;
+ m_native_components = a->m_native_components;
+ memcpy(&m_native_vtx_decl, &a->m_native_vtx_decl, sizeof(PortableVertexDeclaration));
+ }
+ else
{
- m_initialized = a->m_VertexSize == b->m_VertexSize &&
- a->m_native_components == b->m_native_components &&
- a->m_native_vtx_decl.stride == b->m_native_vtx_decl.stride;
-
- if (m_initialized)
- {
- m_VertexSize = a->m_VertexSize;
- m_native_components = a->m_native_components;
- memcpy(&m_native_vtx_decl, &a->m_native_vtx_decl, sizeof(PortableVertexDeclaration));
- }
- else
- {
- ERROR_LOG_FMT(VIDEO, "Can't compare vertex loaders that expect different vertex formats!");
- ERROR_LOG_FMT(VIDEO, "a: m_VertexSize {}, m_native_components {:#010x}, stride {}",
- a->m_VertexSize, a->m_native_components, a->m_native_vtx_decl.stride);
- ERROR_LOG_FMT(VIDEO, "b: m_VertexSize {}, m_native_components {:#010x}, stride {}",
- b->m_VertexSize, b->m_native_components, b->m_native_vtx_decl.stride);
- }
+ ERROR_LOG_FMT(VIDEO, "Can't compare vertex loaders that expect different vertex formats!");
+ ERROR_LOG_FMT(VIDEO, "a: m_VertexSize {}, m_native_components {:#010x}, stride {}",
+ a->m_VertexSize, a->m_native_components, a->m_native_vtx_decl.stride);
+ ERROR_LOG_FMT(VIDEO, "b: m_VertexSize {}, m_native_components {:#010x}, stride {}",
+ b->m_VertexSize, b->m_native_components, b->m_native_vtx_decl.stride);
}
}
- ~VertexLoaderTester() override {}
int RunVertices(DataReader src, DataReader dst, int count) override
{
buffer_a.resize(count * a->m_native_vtx_decl.stride + 4);
@@ -81,21 +73,17 @@ public:
std::min(count_a, count_b) * m_native_vtx_decl.stride))
{
ERROR_LOG_FMT(VIDEO,
- "The two vertex loaders have loaded different data "
- "(guru meditation {:#010x}, {:#010x}, {:#010x}, {:#010x}, {:#010x}).",
- m_VtxDesc.low.Hex, m_VtxDesc.high.Hex, m_VtxAttr.g0.Hex, m_VtxAttr.g1.Hex,
- m_VtxAttr.g2.Hex);
+ "The two vertex loaders have loaded different data. Configuration:"
+ "\nVertex desc:\n{}\n\nVertex attr:\n{}",
+ m_VtxDesc, m_VtxAttr);
}
memcpy(dst.GetPointer(), buffer_a.data(), count_a * m_native_vtx_decl.stride);
m_numLoadedVertices += count;
return count_a;
}
- bool IsInitialized() override { return m_initialized; }
private:
- bool m_initialized;
-
std::unique_ptr<VertexLoaderBase> a;
std::unique_ptr<VertexLoaderBase> b;
@@ -106,33 +94,29 @@ private:
std::unique_ptr<VertexLoaderBase> VertexLoaderBase::CreateVertexLoader(const TVtxDesc& vtx_desc,
const VAT& vtx_attr)
{
- std::unique_ptr<VertexLoaderBase> loader;
+ std::unique_ptr<VertexLoaderBase> loader = nullptr;
//#define COMPARE_VERTEXLOADERS
-#if defined(COMPARE_VERTEXLOADERS) && defined(_M_X86_64)
- // first try: Any new VertexLoader vs the old one
- loader = std::make_unique<VertexLoaderTester>(
- std::make_unique<VertexLoader>(vtx_desc, vtx_attr), // the software one
- std::make_unique<VertexLoaderX64>(vtx_desc, vtx_attr), // the new one to compare
- vtx_desc, vtx_attr);
- if (loader->IsInitialized())
- return loader;
-#elif defined(_M_X86_64)
+#if defined(_M_X86_64)
loader = std::make_unique<VertexLoaderX64>(vtx_desc, vtx_attr);
- if (loader->IsInitialized())
- return loader;
#elif defined(_M_ARM_64)
loader = std::make_unique<VertexLoaderARM64>(vtx_desc, vtx_attr);
- if (loader->IsInitialized())
- return loader;
#endif
- // last try: The old VertexLoader
- loader = std::make_unique<VertexLoader>(vtx_desc, vtx_attr);
- if (loader->IsInitialized())
- return loader;
-
- PanicAlertFmt("No Vertex Loader found.");
- return nullptr;
+ // Use the software loader as a fallback
+ // (not currently applicable, as both VertexLoaderX64 and VertexLoaderARM64
+ // are always usable, but if a loader that only works on some CPUs is created
+ // then this fallback would be used)
+ if (!loader)
+ loader = std::make_unique<VertexLoader>(vtx_desc, vtx_attr);
+
+#if defined(COMPARE_VERTEXLOADERS)
+ return std::make_unique<VertexLoaderTester>(
+ std::make_unique<VertexLoader>(vtx_desc, vtx_attr), // the software one
+ std::move(loader), // the new one to compare
+ vtx_desc, vtx_attr);
+#else
+ return loader;
+#endif
}