@ -32,7 +32,6 @@ enum : u8 {
DepthWriteEnable ,
DepthCompareOp ,
FrontFace ,
PrimitiveTopology ,
StencilOp ,
StencilTestEnable ,
@ -43,6 +42,8 @@ static_assert(Last <= std::numeric_limits<u8>::max());
} // namespace Dirty
class StateTracker {
using Maxwell = Tegra : : Engines : : Maxwell3D : : Regs ;
public :
explicit StateTracker ( Core : : System & system ) ;
@ -102,10 +103,6 @@ public:
return Exchange ( Dirty : : FrontFace , false ) ;
}
bool TouchPrimitiveTopology ( ) {
return Exchange ( Dirty : : PrimitiveTopology , false ) ;
}
bool TouchStencilOp ( ) {
return Exchange ( Dirty : : StencilOp , false ) ;
}
@ -114,7 +111,15 @@ public:
return Exchange ( Dirty : : StencilTestEnable , false ) ;
}
bool ChangePrimitiveTopology ( Maxwell : : PrimitiveTopology new_topology ) {
const bool has_changed = current_topology ! = new_topology ;
current_topology = new_topology ;
return has_changed ;
}
private :
static constexpr auto INVALID_TOPOLOGY = static_cast < Maxwell : : PrimitiveTopology > ( ~ 0u ) ;
bool Exchange ( std : : size_t id , bool new_value ) const noexcept {
auto & flags = system . GPU ( ) . Maxwell3D ( ) . dirty . flags ;
const bool is_dirty = flags [ id ] ;
@ -124,6 +129,7 @@ private:
Core : : System & system ;
Tegra : : Engines : : Maxwell3D : : DirtyState : : Flags invalidation_flags ;
Maxwell : : PrimitiveTopology current_topology = INVALID_TOPOLOGY ;
} ;
} // namespace Vulkan