Lines Matching +full:cap +full:- +full:std +full:- +full:ext
1 // Copyright (c) 2015-2016 The Khronos Group Inc.
7 // http://www.apache.org/licenses/LICENSE-2.0
38 #include "spirv-tools/libspirv.h"
63 /// This class manages the state of the SPIR-V validation as it is being parsed.
92 // SPIR-V 1.4 allows us to select between any two composite values
96 // SPIR-V 1.4 allows two memory access operands for OpCopyMemory and
100 // SPIR-V 1.4 allows UConvert as a spec constant op in any environment.
104 // SPIR-V 1.4 allows Function and Private variables to be NonWritable
128 /// Sets the SPIR-V version of this module.
131 /// Gets the SPIR-V version of this module.
147 void AssignNameToId(uint32_t id, std::string name);
152 std::string getIdName(uint32_t id) const;
165 std::vector<uint32_t> UnresolvedForwardIds() const;
196 std::vector<Function>& functions();
215 std::string name;
216 std::vector<uint32_t> interfaces;
229 const std::vector<uint32_t>& entry_points() const { return entry_points_; } in entry_points()
233 const std::set<uint32_t>& recursive_entry_points() const { in recursive_entry_points()
244 const std::vector<EntryPointDescription>& entry_point_descriptions( in entry_point_descriptions()
251 const std::set<spv::ExecutionModel>* GetExecutionModels( in GetExecutionModels()
258 return &it->second; in GetExecutionModels()
263 const std::set<spv::ExecutionMode>* GetExecutionModes( in GetExecutionModes()
269 return &it->second; in GetExecutionModes()
282 const std::vector<uint32_t>& FunctionEntryPoints(uint32_t func) const;
287 std::set<uint32_t> EntryPointReferences(uint32_t id) const;
304 void RegisterCapability(spv::Capability cap);
307 void RegisterExtension(Extension ext);
319 bool HasCapability(spv::Capability cap) const { in HasCapability() argument
320 return module_capabilities_.contains(cap); in HasCapability()
330 bool HasExtension(Extension ext) const { in HasExtension() argument
331 return module_extensions_.contains(ext); in HasExtension()
400 std::set<Decoration>& cur_decs = id_decorations_[id]; in RegisterDecorationsForId()
410 std::set<Decoration>& cur_decs = id_decorations_[struct_id]; in RegisterDecorationsForStructMember()
421 std::set<Decoration>& id_decorations(uint32_t id) { in id_decorations()
427 std::set<Decoration>::const_iterator begin;
428 std::set<Decoration>::const_iterator end;
447 const std::map<uint32_t, std::set<Decoration>>& id_decorations() const { in id_decorations()
457 return std::any_of( in HasDecoration()
458 decorations->second.begin(), decorations->second.end(), in HasDecoration()
471 const std::vector<Instruction>& ordered_instructions() const { in ordered_instructions()
476 const std::unordered_map<uint32_t, Instruction*>& all_definitions() const { in all_definitions()
482 std::vector<Instruction*> getSampledImageConsumers(uint32_t id) const;
500 std::unordered_set<uint32_t>& global_vars() { return global_vars_; } in global_vars()
503 std::unordered_set<uint32_t>& local_vars() { return local_vars_; } in local_vars()
520 return features_.env_relaxed_block_layout || options()->relax_block_layout; in IsRelaxedBlockLayout()
524 // allows it, or because it is enabled from the command-line.
526 return features_.env_allow_localsizeid || options()->allow_localsizeid; in IsLocalSizeIdAllowed()
551 /// Records that the structure type has a member decorated with a built-in.
570 // - scalar, vector or matrix type
571 // - object of either scalar, vector or matrix type
575 // - 1 for scalar types or objects
576 // - vector size for vector types or objects
577 // - num columns for matrix types or objects
584 // - scalar, vector or matrix type
585 // - object of either scalar, vector or matrix type
598 std::vector<uint32_t>* member_types) const;
635 // Returns true if |id| is a type id that contains a 8- or 16-bit int or
636 // 16-bit float that is not generally enabled for use.
639 // Returns true if |id| is a type that contains a runtime-sized array.
647 const std::function<bool(const Instruction*)>& f,
671 // Is the ID the type of a pointer to a uniform block: Block-decorated struct
693 // Is the ID the type of a pointer to a storage buffer: BufferBlock-decorated
694 // struct in uniform storage class, or Block-decorated struct in StorageBuffer
728 // Tries to evaluate a 32-bit signed or unsigned scalar integer constant.
732 std::tuple<bool, bool, uint32_t> EvalInt32IfConst(uint32_t id) const;
735 std::string Disassemble(const Instruction& inst) const;
738 std::string Disassemble(const uint32_t* words, uint16_t num_words) const;
741 std::string SpvDecorationString(uint32_t decoration) { in SpvDecorationString()
745 return std::string("Unknown"); in SpvDecorationString()
747 return std::string(desc->name); in SpvDecorationString()
749 std::string SpvDecorationString(spv::Decoration decoration) { in SpvDecorationString()
787 // will return a non-empty string only if ID is known and targeting Vulkan.
788 // VUIDs are found in the Vulkan-Docs repo in the form "[[VUID-ref-ref-id]]"
794 // https://github.com/KhronosGroup/Vulkan-Guide/blob/master/chapters/validation_overview.md
795 std::string VkErrorID(uint32_t id, const char* reference = nullptr) const;
817 /// The SPIR-V binary module we're validating.
821 /// The generator of the SPIR-V.
824 /// The version of the SPIR-V.
833 std::unordered_set<uint32_t> unresolved_forward_ids_;
836 std::unordered_set<uint32_t> forward_pointer_ids_;
840 std::unordered_map<uint32_t, std::vector<Instruction*>>
845 std::unordered_set<uint32_t> qcom_image_processing_consumers_;
848 std::unordered_map<uint32_t, std::string> operand_names_;
856 std::vector<Function> module_functions_;
865 std::vector<Instruction> ordered_instructions_;
868 std::unordered_map<uint32_t, Instruction*> all_definitions_;
871 std::vector<uint32_t> entry_points_;
874 std::unordered_map<uint32_t, std::vector<EntryPointDescription>>
879 std::set<uint32_t> recursive_entry_points_;
882 std::unordered_set<uint32_t> function_call_targets_;
888 std::unordered_set<uint32_t> global_vars_;
891 std::unordered_set<uint32_t> local_vars_;
894 std::unordered_set<uint32_t> builtin_structs_;
897 std::unordered_map<uint32_t, uint32_t> struct_nesting_depth_;
900 std::unordered_map<uint32_t, bool>
904 std::map<uint32_t, std::set<Decoration>> id_decorations_;
906 /// Stores type declarations which need to be unique (i.e. non-aggregates),
909 /// The size of this container is expected not to exceed double-digits.
910 std::set<std::vector<uint32_t>> unique_type_declarations_;
931 std::unordered_map<uint32_t, Function*> id_to_function_;
933 /// Mapping entry point -> execution models. It is presumed that the same
936 std::unordered_map<uint32_t, std::set<spv::ExecutionModel>>
939 /// Mapping entry point -> execution modes.
940 std::unordered_map<uint32_t, std::set<spv::ExecutionMode>>
943 /// Mapping function -> array of entry points inside this
945 std::unordered_map<uint32_t, std::vector<uint32_t>> function_to_entry_points_;
946 const std::vector<uint32_t> empty_ids_;
948 // The IDs of types of pointers to Block-decorated structs in Uniform storage
950 std::unordered_set<uint32_t> pointer_to_uniform_block_;
953 std::unordered_set<uint32_t> struct_for_uniform_block_;
954 // The IDs of types of pointers to BufferBlock-decorated structs in Uniform
955 // storage class, or Block-decorated structs in StorageBuffer storage class.
957 std::unordered_set<uint32_t> pointer_to_storage_buffer_;
960 std::unordered_set<uint32_t> struct_for_storage_buffer_;
963 std::unordered_set<uint32_t> pointer_to_storage_image_;
966 std::unique_ptr<spvtools::FriendlyNameMapper> friendly_mapper_;