mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-11-07 10:03:23 +09:00
[Perf] (TLS): pGLContext and gPipeInputs become pointer slots
This commit is contained in:
@@ -7198,9 +7198,9 @@ namespace MobileGL::MG_Backend::DirectGLES {
|
||||
// that needs no work costs the same nothing per draw that any other synced texture does.
|
||||
void BackendTextureObject::StampViewSyncKeys(
|
||||
const SharedPtr<MG_State::GLState::ITextureObject>& stateTextureObject) {
|
||||
if (MG_Pipe::gPipeInputs.IsLive()) {
|
||||
m_syncedShapeContextId = MG_Pipe::gPipeInputs.GetTextureContextId();
|
||||
m_syncedShapeGeneration = MG_Pipe::gPipeInputs.GetSamplingResolutionGeneration();
|
||||
if (MG_Pipe::gPipeInputs->IsLive()) {
|
||||
m_syncedShapeContextId = MG_Pipe::gPipeInputs->GetTextureContextId();
|
||||
m_syncedShapeGeneration = MG_Pipe::gPipeInputs->GetSamplingResolutionGeneration();
|
||||
m_syncedShapeParamsVersion = stateTextureObject->GetTextureParamsVersion();
|
||||
}
|
||||
m_syncedContentVersion = stateTextureObject->GetContentVersion();
|
||||
@@ -7349,9 +7349,9 @@ namespace MobileGL::MG_Backend::DirectGLES {
|
||||
// LEGACY ARM ONLY from P4a on: the memos it reads are the pre-handle ones and the
|
||||
// record above answers the same question in one compare.
|
||||
if (pushedStorage == nullptr)
|
||||
if (m_isInitialized && m_syncedShapeContextId != 0 && MG_Pipe::gPipeInputs.IsLive() &&
|
||||
m_syncedShapeContextId == MG_Pipe::gPipeInputs.GetTextureContextId() &&
|
||||
m_syncedShapeGeneration == MG_Pipe::gPipeInputs.GetSamplingResolutionGeneration() &&
|
||||
if (m_isInitialized && m_syncedShapeContextId != 0 && MG_Pipe::gPipeInputs->IsLive() &&
|
||||
m_syncedShapeContextId == MG_Pipe::gPipeInputs->GetTextureContextId() &&
|
||||
m_syncedShapeGeneration == MG_Pipe::gPipeInputs->GetSamplingResolutionGeneration() &&
|
||||
m_syncedContentVersion == stateTextureObject->GetContentVersion() &&
|
||||
m_syncedShapeParamsVersion == stateTextureObject->GetTextureParamsVersion() &&
|
||||
stateTextureObject->GetStorageType() == TextureStorageType::Mipmap) {
|
||||
@@ -7467,9 +7467,9 @@ namespace MobileGL::MG_Backend::DirectGLES {
|
||||
// The probe just proved "fully synced" from the real state, so the cheap
|
||||
// gate may be (re)stamped here: the coarse generation only ever goes stale
|
||||
// from OTHER textures' churn, and this draw re-validated this one.
|
||||
if (MG_Pipe::gPipeInputs.IsLive()) {
|
||||
m_syncedShapeContextId = MG_Pipe::gPipeInputs.GetTextureContextId();
|
||||
m_syncedShapeGeneration = MG_Pipe::gPipeInputs.GetSamplingResolutionGeneration();
|
||||
if (MG_Pipe::gPipeInputs->IsLive()) {
|
||||
m_syncedShapeContextId = MG_Pipe::gPipeInputs->GetTextureContextId();
|
||||
m_syncedShapeGeneration = MG_Pipe::gPipeInputs->GetSamplingResolutionGeneration();
|
||||
m_syncedShapeParamsVersion = stateTextureObject->GetTextureParamsVersion();
|
||||
}
|
||||
return;
|
||||
@@ -8764,9 +8764,9 @@ namespace MobileGL::MG_Backend::DirectGLES {
|
||||
// Same instant, so the cheap gate's keys describe exactly this synced state.
|
||||
// Only Mipmap storage may arm it - the gate refuses other storage types anyway,
|
||||
// but a stale trio must not linger on an object that later switches type.
|
||||
if (MG_Pipe::gPipeInputs.IsLive() && stateTextureObject->GetStorageType() == TextureStorageType::Mipmap) {
|
||||
m_syncedShapeContextId = MG_Pipe::gPipeInputs.GetTextureContextId();
|
||||
m_syncedShapeGeneration = MG_Pipe::gPipeInputs.GetSamplingResolutionGeneration();
|
||||
if (MG_Pipe::gPipeInputs->IsLive() && stateTextureObject->GetStorageType() == TextureStorageType::Mipmap) {
|
||||
m_syncedShapeContextId = MG_Pipe::gPipeInputs->GetTextureContextId();
|
||||
m_syncedShapeGeneration = MG_Pipe::gPipeInputs->GetSamplingResolutionGeneration();
|
||||
m_syncedShapeParamsVersion = stateTextureObject->GetTextureParamsVersion();
|
||||
} else {
|
||||
m_syncedShapeContextId = 0;
|
||||
@@ -9905,7 +9905,7 @@ namespace MobileGL::MG_Backend::DirectGLES {
|
||||
return record && record->ReadSurface.Kind != MG_Pipe::kMGPipeSurfaceKindNone &&
|
||||
IsSnormFormat(static_cast<TextureInternalFormat>(record->ReadSurface.InternalFormat));
|
||||
const auto& readFBO =
|
||||
MG_Pipe::gPipeInputs.GetFramebufferBindingSlot(FramebufferTarget::Read).GetBoundObject();
|
||||
MG_Pipe::gPipeInputs->GetFramebufferBindingSlot(FramebufferTarget::Read).GetBoundObject();
|
||||
if (!readFBO) {
|
||||
return false;
|
||||
}
|
||||
@@ -11980,19 +11980,19 @@ namespace MobileGL::MG_Backend::DirectGLES {
|
||||
// patch size - so a program built for one value is stale for another. Recorded here
|
||||
// and compared on the draw path (SyncCurrentProgram), the same shape as the
|
||||
// storage-block and image-format signatures next to it.
|
||||
const Uint patchVertices = MG_Pipe::gPipeInputs.IsLive()
|
||||
? MG_Pipe::gPipeInputs.GetPatchVertices()
|
||||
const Uint patchVertices = MG_Pipe::gPipeInputs->IsLive()
|
||||
? MG_Pipe::gPipeInputs->GetPatchVertices()
|
||||
: 3u;
|
||||
m_passthroughTessControlPatchVertices = static_cast<Int>(patchVertices);
|
||||
// PATCH_DEFAULT_{OUTER,INNER}_LEVEL are the same kind of dynamic state and are baked
|
||||
// into the same stage (ES has no such state and no entry point to forward them to), so
|
||||
// they are recorded and compared alongside the patch size - the two move together, as
|
||||
// BuildPassthroughTessControlEssl's contract says.
|
||||
m_passthroughTessControlOuterLevel = MG_Pipe::gPipeInputs.IsLive()
|
||||
? MG_Pipe::gPipeInputs.GetPatchDefaultOuterLevel()
|
||||
m_passthroughTessControlOuterLevel = MG_Pipe::gPipeInputs->IsLive()
|
||||
? MG_Pipe::gPipeInputs->GetPatchDefaultOuterLevel()
|
||||
: FloatVec4(1.0f, 1.0f, 1.0f, 1.0f);
|
||||
m_passthroughTessControlInnerLevel = MG_Pipe::gPipeInputs.IsLive()
|
||||
? MG_Pipe::gPipeInputs.GetPatchDefaultInnerLevel()
|
||||
m_passthroughTessControlInnerLevel = MG_Pipe::gPipeInputs->IsLive()
|
||||
? MG_Pipe::gPipeInputs->GetPatchDefaultInnerLevel()
|
||||
: FloatVec2(1.0f, 1.0f);
|
||||
|
||||
if (tessEvalShaderIndex < 0 ||
|
||||
|
||||
Reference in New Issue
Block a user