Просмотр исходного кода

state_tracker: workaround channel setup for homebrew

Liam 3 лет назад
Родитель
Сommit
0d99b7962d

+ 4 - 2
src/video_core/query_cache.h

@@ -135,8 +135,10 @@ public:
     /// Updates counters from GPU state. Expected to be called once per draw, clear or dispatch.
     void UpdateCounters() {
         std::unique_lock lock{mutex};
-        const auto& regs = maxwell3d->regs;
-        Stream(VideoCore::QueryType::SamplesPassed).Update(regs.samplecnt_enable);
+        if (maxwell3d) {
+            const auto& regs = maxwell3d->regs;
+            Stream(VideoCore::QueryType::SamplesPassed).Update(regs.samplecnt_enable);
+        }
     }
 
     /// Resets a counter to zero. It doesn't disable the query after resetting.

+ 1 - 1
src/video_core/renderer_opengl/gl_state_tracker.cpp

@@ -237,6 +237,6 @@ void StateTracker::InvalidateState() {
     flags->set();
 }
 
-StateTracker::StateTracker() : flags{} {}
+StateTracker::StateTracker() : flags{&default_flags} {}
 
 } // namespace OpenGL

+ 1 - 0
src/video_core/renderer_opengl/gl_state_tracker.h

@@ -223,6 +223,7 @@ public:
 
 private:
     Tegra::Engines::Maxwell3D::DirtyState::Flags* flags;
+    Tegra::Engines::Maxwell3D::DirtyState::Flags default_flags{};
 
     GLuint framebuffer = 0;
     GLuint index_buffer = 0;

+ 2 - 1
src/video_core/renderer_vulkan/vk_state_tracker.cpp

@@ -206,6 +206,7 @@ void StateTracker::InvalidateState() {
     flags->set();
 }
 
-StateTracker::StateTracker() : flags{}, invalidation_flags{MakeInvalidationFlags()} {}
+StateTracker::StateTracker()
+    : flags{&default_flags}, default_flags{}, invalidation_flags{MakeInvalidationFlags()} {}
 
 } // namespace Vulkan

+ 1 - 0
src/video_core/renderer_vulkan/vk_state_tracker.h

@@ -161,6 +161,7 @@ private:
     }
 
     Tegra::Engines::Maxwell3D::DirtyState::Flags* flags;
+    Tegra::Engines::Maxwell3D::DirtyState::Flags default_flags;
     Tegra::Engines::Maxwell3D::DirtyState::Flags invalidation_flags;
     Maxwell::PrimitiveTopology current_topology = INVALID_TOPOLOGY;
 };