SPIRV-Tools/source/spirv_validator_options.h
David Neto 8e9be303b0 Validator: Support VK_EXT_scalar_block_layout
Adds validator option to specify scalar block layout rules.

Both VK_KHR_relax_block_layout and VK_EXT_scalar_block_layout can be
enabled at the same time.  But scalar block layout is as permissive
as relax block layout.

Also, scalar block layout does not require padding at the end of a
struct.

Add test for scalar layout testing ArrayStride 12 on array of vec3s

Cleanup: The internal getSize method does not need a round-up argument,
so remove it.
2018-11-16 15:55:30 -05:00

58 lines
2.0 KiB
C

// Copyright (c) 2017 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef SOURCE_SPIRV_VALIDATOR_OPTIONS_H_
#define SOURCE_SPIRV_VALIDATOR_OPTIONS_H_
#include "spirv-tools/libspirv.h"
// Return true if the command line option for the validator limit is valid (Also
// returns the Enum for option in this case). Returns false otherwise.
bool spvParseUniversalLimitsOptions(const char* s, spv_validator_limit* limit);
// Default initialization of this structure is to the default Universal Limits
// described in the SPIR-V Spec.
struct validator_universal_limits_t {
uint32_t max_struct_members{16383};
uint32_t max_struct_depth{255};
uint32_t max_local_variables{524287};
uint32_t max_global_variables{65535};
uint32_t max_switch_branches{16383};
uint32_t max_function_args{255};
uint32_t max_control_flow_nesting_depth{1023};
uint32_t max_access_chain_indexes{255};
uint32_t max_id_bound{0x3FFFFF};
};
// Manages command line options passed to the SPIR-V Validator. New struct
// members may be added for any new option.
struct spv_validator_options_t {
spv_validator_options_t()
: universal_limits_(),
relax_struct_store(false),
relax_logical_pointer(false),
relax_block_layout(false),
scalar_block_layout(false),
skip_block_layout(false) {}
validator_universal_limits_t universal_limits_;
bool relax_struct_store;
bool relax_logical_pointer;
bool relax_block_layout;
bool scalar_block_layout;
bool skip_block_layout;
};
#endif // SOURCE_SPIRV_VALIDATOR_OPTIONS_H_