1// Copyright (c) 2017 Google Inc.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15#ifndef SOURCE_SPIRV_VALIDATOR_OPTIONS_H_
16#define SOURCE_SPIRV_VALIDATOR_OPTIONS_H_
17
18#include "spirv-tools/libspirv.h"
19
20// Return true if the command line option for the validator limit is valid (Also
21// returns the Enum for option in this case). Returns false otherwise.
22bool spvParseUniversalLimitsOptions(const char* s, spv_validator_limit* limit);
23
24// Default initialization of this structure is to the default Universal Limits
25// described in the SPIR-V Spec.
26struct validator_universal_limits_t {
27 uint32_t max_struct_members{16383};
28 uint32_t max_struct_depth{255};
29 uint32_t max_local_variables{524287};
30 uint32_t max_global_variables{65535};
31 uint32_t max_switch_branches{16383};
32 uint32_t max_function_args{255};
33 uint32_t max_control_flow_nesting_depth{1023};
34 uint32_t max_access_chain_indexes{255};
35 uint32_t max_id_bound{0x3FFFFF};
36};
37
38// Manages command line options passed to the SPIR-V Validator. New struct
39// members may be added for any new option.
40struct spv_validator_options_t {
41 spv_validator_options_t()
42 : universal_limits_(),
43 relax_struct_store(false),
44 relax_logical_pointer(false),
45 relax_block_layout(false),
46 uniform_buffer_standard_layout(false),
47 scalar_block_layout(false),
48 workgroup_scalar_block_layout(false),
49 skip_block_layout(false),
50 allow_localsizeid(false),
51 before_hlsl_legalization(false) {}
52
53 validator_universal_limits_t universal_limits_;
54 bool relax_struct_store;
55 bool relax_logical_pointer;
56 bool relax_block_layout;
57 bool uniform_buffer_standard_layout;
58 bool scalar_block_layout;
59 bool workgroup_scalar_block_layout;
60 bool skip_block_layout;
61 bool allow_localsizeid;
62 bool before_hlsl_legalization;
63};
64
65#endif // SOURCE_SPIRV_VALIDATOR_OPTIONS_H_
66