// Copyright 2019 yuzu Emulator Project // Licensed under GPLv2 or any later version // Refer to the license.txt file included. #pragma once #include #include "common/common_types.h" #include "video_core/dirty_flags.h" #include "video_core/engines/maxwell_3d.h" namespace Core { class System; } namespace OpenGL { namespace Dirty { enum : u8 { First = VideoCommon::Dirty::LastCommonEntry, VertexFormats, VertexFormat0, VertexFormat31 = VertexFormat0 + 31, VertexBuffers, VertexBuffer0, VertexBuffer31 = VertexBuffer0 + 31, VertexInstances, VertexInstance0, VertexInstance31 = VertexInstance0 + 31, ViewportTransform, Viewports, Viewport0, Viewport15 = Viewport0 + 15, Scissors, Scissor0, Scissor15 = Scissor0 + 15, ColorMaskCommon, ColorMasks, ColorMask0, ColorMask7 = ColorMask0 + 7, Shaders, CullTestEnable, FrontFace, CullFace, PrimitiveRestart, DepthTest, StencilTest, ColorMask, BlendState, PolygonOffset, Last }; static_assert(Last <= std::numeric_limits::max()); } // namespace Dirty class StateTracker { public: explicit StateTracker(Core::System& system); void Initialize(); void NotifyScreenDrawVertexArray() { auto& flags = system.GPU().Maxwell3D().dirty.flags; flags[OpenGL::Dirty::VertexFormats] = true; flags[OpenGL::Dirty::VertexFormat0 + 0] = true; flags[OpenGL::Dirty::VertexFormat0 + 1] = true; flags[OpenGL::Dirty::VertexBuffers] = true; flags[OpenGL::Dirty::VertexBuffer0] = true; flags[OpenGL::Dirty::VertexInstances] = true; flags[OpenGL::Dirty::VertexInstance0 + 0] = true; flags[OpenGL::Dirty::VertexInstance0 + 1] = true; } void NotifyViewport0() { auto& flags = system.GPU().Maxwell3D().dirty.flags; flags[OpenGL::Dirty::Viewports] = true; flags[OpenGL::Dirty::Viewport0] = true; } void NotifyScissor0() { auto& flags = system.GPU().Maxwell3D().dirty.flags; flags[OpenGL::Dirty::Scissors] = true; flags[OpenGL::Dirty::Scissor0] = true; } void NotifyColorMask0() { auto& flags = system.GPU().Maxwell3D().dirty.flags; flags[OpenGL::Dirty::ColorMasks] = true; flags[OpenGL::Dirty::ColorMask0] = true; } void NotifyFramebuffer() { auto& flags = system.GPU().Maxwell3D().dirty.flags; flags[VideoCommon::Dirty::RenderTargets] = true; } private: Core::System& system; }; } // namespace OpenGL