#pragma once namespace shader { enum class Access { None = 0, Read = 1 << 0, Write = 1 << 1, ReadWrite = Read | Write }; constexpr Access operator|(Access lhs, Access rhs) { return static_cast(static_cast(lhs) | static_cast(rhs)); } constexpr Access operator&(Access lhs, Access rhs) { return static_cast(static_cast(lhs) & static_cast(rhs)); } constexpr Access operator~(Access rhs) { return static_cast(~static_cast(rhs)); } constexpr Access &operator|=(Access &lhs, Access rhs) { return ((lhs = lhs | rhs)); } constexpr Access &operator&=(Access &lhs, Access rhs) { return ((lhs = lhs & rhs)); } } // namespace shader