aboutsummaryrefslogtreecommitdiff
path: root/source/val/validation_state.h
diff options
context:
space:
mode:
Diffstat (limited to 'source/val/validation_state.h')
-rw-r--r--source/val/validation_state.h43
1 files changed, 23 insertions, 20 deletions
diff --git a/source/val/validation_state.h b/source/val/validation_state.h
index 57634bf4..89834a0d 100644
--- a/source/val/validation_state.h
+++ b/source/val/validation_state.h
@@ -67,7 +67,7 @@ class ValidationState_t {
bool declare_int16_type = false; // Allow OpTypeInt with 16 bit width?
bool declare_float16_type = false; // Allow OpTypeFloat with 16 bit width?
bool free_fp_rounding_mode = false; // Allow the FPRoundingMode decoration
- // and its vaules to be used without
+ // and its values to be used without
// requiring any capability
// Allow functionalities enabled by VariablePointers capability.
@@ -90,23 +90,6 @@ class ValidationState_t {
// conversion opcodes
bool use_int8_type = false;
- // Use scalar block layout. See VK_EXT_scalar_block_layout:
- // Defines scalar alignment:
- // - scalar alignment equals the scalar size in bytes
- // - array alignment is same as its element alignment
- // - array alignment is max alignment of any of its members
- // - vector alignment is same as component alignment
- // - matrix alignment is same as component alignment
- // For struct in Uniform, StorageBuffer, PushConstant:
- // - Offset of a member is multiple of scalar alignment of that member
- // - ArrayStride and MatrixStride are multiples of scalar alignment
- // Members need not be listed in offset order
- bool scalar_block_layout = false;
-
- // Use scalar block layout (as defined above) for Workgroup block
- // variables. See VK_KHR_workgroup_memory_explicit_layout.
- bool workgroup_scalar_block_layout = false;
-
// SPIR-V 1.4 allows us to select between any two composite values
// of the same type.
bool select_between_composites = false;
@@ -121,6 +104,9 @@ class ValidationState_t {
// SPIR-V 1.4 allows Function and Private variables to be NonWritable
bool nonwritable_var_in_function_or_private = false;
+
+ // Whether LocalSizeId execution mode is allowed by the environment.
+ bool env_allow_localsizeid = false;
};
ValidationState_t(const spv_const_context context,
@@ -493,6 +479,12 @@ class ValidationState_t {
return features_.env_relaxed_block_layout || options()->relax_block_layout;
}
+ // Returns true if allowing localsizeid, either because the environment always
+ // allows it, or because it is enabled from the command-line.
+ bool IsLocalSizeIdAllowed() const {
+ return features_.env_allow_localsizeid || options()->allow_localsizeid;
+ }
+
/// Sets the struct nesting depth for a given struct ID
void set_struct_nesting_depth(uint32_t id, uint32_t depth) {
struct_nesting_depth_[id] = depth;
@@ -595,6 +587,17 @@ class ValidationState_t {
// 16-bit float that is not generally enabled for use.
bool ContainsLimitedUseIntOrFloatType(uint32_t id) const;
+ // Returns true if |id| is a type that contains a runtime-sized array.
+ // Does not consider a pointers as contains the array.
+ bool ContainsRuntimeArray(uint32_t id) const;
+
+ // Generic type traversal.
+ // Only traverse pointers and functions if |traverse_all_types| is true.
+ // Recursively tests |f| against the type hierarchy headed by |id|.
+ bool ContainsType(uint32_t id,
+ const std::function<bool(const Instruction*)>& f,
+ bool traverse_all_types = true) const;
+
// Gets value from OpConstant and OpSpecConstant as uint64.
// Returns false on failure (no instruction, wrong instruction, not int).
bool GetConstantValUint64(uint32_t id, uint64_t* val) const;
@@ -794,7 +797,7 @@ class ValidationState_t {
/// IDs that are entry points, ie, arguments to OpEntryPoint.
std::vector<uint32_t> entry_points_;
- /// Maps an entry point id to its desciptions.
+ /// Maps an entry point id to its descriptions.
std::unordered_map<uint32_t, std::vector<EntryPointDescription>>
entry_point_descriptions_;
@@ -841,7 +844,7 @@ class ValidationState_t {
// have the same pointer size (for physical pointer types).
uint32_t pointer_size_and_alignment_;
- /// NOTE: See correspoding getter functions
+ /// NOTE: See corresponding getter functions
bool in_function_;
/// The state of optional features. These are determined by capabilities