diff --git a/src/Common/StateMap/StateMapLayout.cpp b/src/Common/StateMap/StateMapLayout.cpp index ffe60d84..08e71b7d 100644 --- a/src/Common/StateMap/StateMapLayout.cpp +++ b/src/Common/StateMap/StateMapLayout.cpp @@ -1,7 +1,53 @@ #include "StateMapLayout.h" +#include + using namespace state_map; +namespace state_map +{ +#ifdef _DEBUG + void ValidateStateMapLayout(const StateMapLayout& layout) + { + // Must have at least one state bits field + assert(layout.m_state_bits_count > 0); + + for (const auto& var : layout.m_var_layout.m_vars) + { + // Cannot exceed state bits fields + assert(var.m_state_bits_index < layout.m_state_bits_count); + + for (auto i = 0u; i < var.m_values.size(); i++) + { + const auto& value = var.m_values[i]; + + // Zero mask values must be last + assert(value.m_state_bits_mask != 0 || i == var.m_values.size() - 1); + } + } + + for (const auto& entry : layout.m_entry_layout.m_entries) + { + // Cannot exceed state bits fields + assert(entry.m_state_bits_index < layout.m_state_bits_count); + + // Has to have a mask for passthrough + assert(entry.m_state_bits_mask != 0); + + for (auto& resultVar : entry.m_result_vars) + { + const auto correspondingVar = std::find_if(layout.m_var_layout.m_vars.begin(), layout.m_var_layout.m_vars.end(), [&resultVar](const StateMapLayoutVar& var) + { + return var.m_name == resultVar; + }); + + // Has to have a corresponding var + assert(correspondingVar != layout.m_var_layout.m_vars.end()); + } + } + } +#endif +} StateMapLayoutEntry::StateMapLayoutEntry(std::string name, const size_t stateBitsIndex, const size_t stateBitsMask, std::vector resultVars) : m_name(std::move(name)), @@ -39,4 +85,7 @@ StateMapLayout::StateMapLayout(const size_t stateBitsCount, const StateMapLayout m_entry_layout(entryLayout), m_var_layout(varLayout) { +#ifdef _DEBUG + ValidateStateMapLayout(*this); +#endif } diff --git a/src/ObjCommon/Game/IW4/TechsetConstantsIW4.h b/src/ObjCommon/Game/IW4/TechsetConstantsIW4.h index afdf0e90..599f6de7 100644 --- a/src/ObjCommon/Game/IW4/TechsetConstantsIW4.h +++ b/src/ObjCommon/Game/IW4/TechsetConstantsIW4.h @@ -790,10 +790,9 @@ namespace IW4 }, { "mtlStencil", 1, { - {"Disable", 0}, {"OneSided", GFXS1_STENCIL_FRONT_ENABLE}, {"TwoSided", GFXS1_STENCIL_FRONT_ENABLE | GFXS1_STENCIL_BACK_ENABLE}, - {"0", GFXS1_POLYGON_OFFSET_0}, + {"Disable", 0}, } }, {