diff options
Diffstat (limited to '3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/fact_manager.h')
-rw-r--r-- | 3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/fact_manager.h | 30 |
1 files changed, 21 insertions, 9 deletions
diff --git a/3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/fact_manager.h b/3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/fact_manager.h index e2fccbb7a91..7ee31d022c6 100644 --- a/3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/fact_manager.h +++ b/3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/fact_manager.h @@ -20,6 +20,7 @@ #include <utility> #include <vector> +#include "source/fuzz/data_descriptor.h" #include "source/fuzz/protobufs/spirvfuzz_protobufs.h" #include "source/opt/constants.h" @@ -52,6 +53,11 @@ class FactManager { // fact manager. bool AddFact(const protobufs::Fact& fact, opt::IRContext* context); + // Record the fact that |data1| and |data2| are synonymous. + void AddFactDataSynonym(const protobufs::DataDescriptor& data1, + const protobufs::DataDescriptor& data2, + opt::IRContext* context); + // The fact manager is responsible for managing a few distinct categories of // facts. In principle there could be different fact managers for each kind // of fact, but in practice providing one 'go to' place for facts is @@ -101,13 +107,18 @@ class FactManager { // Returns every id for which a fact of the form "this id is synonymous // with this piece of data" is known. - const std::set<uint32_t>& GetIdsForWhichSynonymsAreKnown() const; + std::vector<uint32_t> GetIdsForWhichSynonymsAreKnown() const; - // Requires that at least one synonym for |id| is known, and returns the - // sequence of all known synonyms. - const std::vector<protobufs::DataDescriptor>& GetSynonymsForId( + // Returns the equivalence class of all known synonyms of |id|, or an empty + // set if no synonyms are known. + std::vector<const protobufs::DataDescriptor*> GetSynonymsForId( uint32_t id) const; + // Return true if and ony if |data_descriptor1| and |data_descriptor2| are + // known to be synonymous. + bool IsSynonymous(const protobufs::DataDescriptor& data_descriptor1, + const protobufs::DataDescriptor& data_descriptor2) const; + // End of id synonym facts //============================== @@ -115,14 +126,15 @@ class FactManager { // For each distinct kind of fact to be managed, we use a separate opaque // struct type. - struct ConstantUniformFacts; // Opaque struct for holding data about uniform - // buffer elements. + struct ConstantUniformFacts; // Opaque class for management of + // constant uniform facts. std::unique_ptr<ConstantUniformFacts> uniform_constant_facts_; // Unique pointer to internal data. - struct IdSynonymFacts; // Opaque struct for holding data about id synonyms. - std::unique_ptr<IdSynonymFacts> - id_synonym_facts_; // Unique pointer to internal data. + struct DataSynonymFacts; // Opaque class for management of data synonym + // facts. + std::unique_ptr<DataSynonymFacts> + data_synonym_facts_; // Unique pointer to internal data. }; } // namespace fuzz |