summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/bgfx/3rdparty/spirv-tools/source/fuzz/fact_manager.h
diff options
context:
space:
mode:
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.h30
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