David Neto | 482550a | 2018-03-24 05:21:07 -0700 | [diff] [blame] | 1 | // Copyright 2018 The Clspv Authors. All rights reserved. |
| 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 | // This translation unit defines all Clspv command line option variables. |
| 16 | |
Diego Novillo | a4c44fa | 2019-04-11 10:56:15 -0400 | [diff] [blame] | 17 | #include "llvm/PassRegistry.h" |
David Neto | 118188e | 2018-08-24 11:27:54 -0400 | [diff] [blame] | 18 | #include "llvm/Support/CommandLine.h" |
David Neto | 482550a | 2018-03-24 05:21:07 -0700 | [diff] [blame] | 19 | |
Diego Novillo | a4c44fa | 2019-04-11 10:56:15 -0400 | [diff] [blame] | 20 | #include "Passes.h" |
Kévin Petit | f051571 | 2020-01-07 18:29:20 +0000 | [diff] [blame] | 21 | #include "clspv/Option.h" |
Diego Novillo | a4c44fa | 2019-04-11 10:56:15 -0400 | [diff] [blame] | 22 | |
David Neto | 482550a | 2018-03-24 05:21:07 -0700 | [diff] [blame] | 23 | namespace { |
David Neto | 862b7d8 | 2018-06-14 18:48:37 -0400 | [diff] [blame] | 24 | |
Alan Baker | af289ab | 2018-08-29 11:26:44 -0400 | [diff] [blame] | 25 | llvm::cl::opt<bool> |
| 26 | inline_entry_points("inline-entry-points", llvm::cl::init(false), |
| 27 | llvm::cl::desc("Exhaustively inline entry points.")); |
| 28 | |
Alan Baker | 0dd3fd2 | 2018-08-24 11:03:12 -0400 | [diff] [blame] | 29 | llvm::cl::opt<bool> no_inline_single_call_site( |
| 30 | "no-inline-single", llvm::cl::init(false), |
| 31 | llvm::cl::desc("Disable inlining functions with single call sites.")); |
| 32 | |
David Neto | c5fb524 | 2018-07-30 13:28:31 -0400 | [diff] [blame] | 33 | // Should the compiler try to use direct resource accesses within helper |
David Neto | 862b7d8 | 2018-06-14 18:48:37 -0400 | [diff] [blame] | 34 | // functions instead of passing pointers via function arguments? |
David Neto | c5fb524 | 2018-07-30 13:28:31 -0400 | [diff] [blame] | 35 | llvm::cl::opt<bool> no_direct_resource_access( |
| 36 | "no-dra", llvm::cl::init(false), |
David Neto | 862b7d8 | 2018-06-14 18:48:37 -0400 | [diff] [blame] | 37 | llvm::cl::desc( |
David Neto | c5fb524 | 2018-07-30 13:28:31 -0400 | [diff] [blame] | 38 | "No Direct Resource Access: Avoid rewriting helper functions " |
| 39 | "to access resources directly instead of by pointers " |
| 40 | "in function arguments. Affects kernel arguments of type " |
| 41 | "pointer-to-global, pointer-to-constant, image, and sampler.")); |
David Neto | 862b7d8 | 2018-06-14 18:48:37 -0400 | [diff] [blame] | 42 | |
Alan Baker | fc6888e | 2018-08-20 20:54:33 -0400 | [diff] [blame] | 43 | llvm::cl::opt<bool> no_share_module_scope_variables( |
| 44 | "no-smsv", llvm::cl::init(false), |
| 45 | llvm::cl::desc("No Share Module Scope Variables: Avoid de-duplicating " |
| 46 | "module scope variables.")); |
| 47 | |
David Neto | 482550a | 2018-03-24 05:21:07 -0700 | [diff] [blame] | 48 | // By default, reuse the same descriptor set number for all arguments. |
| 49 | // To turn that off, use -distinct-kernel-descriptor-sets |
| 50 | llvm::cl::opt<bool> distinct_kernel_descriptor_sets( |
| 51 | "distinct-kernel-descriptor-sets", llvm::cl::init(false), |
Alan Baker | fc6888e | 2018-08-20 20:54:33 -0400 | [diff] [blame] | 52 | llvm::cl::desc("Each kernel uses its own descriptor set for its arguments. " |
| 53 | "Turns off direct-resource-access optimizations.")); |
David Neto | 482550a | 2018-03-24 05:21:07 -0700 | [diff] [blame] | 54 | |
David Neto | b6e2e06 | 2018-04-25 10:32:06 -0400 | [diff] [blame] | 55 | llvm::cl::opt<bool> hack_initializers( |
| 56 | "hack-initializers", llvm::cl::init(false), |
| 57 | llvm::cl::desc( |
| 58 | "At the start of each kernel, explicitly write the initializer " |
| 59 | "value for a compiler-generated variable containing the workgroup " |
| 60 | "size. Required by some drivers to make the get_global_size builtin " |
| 61 | "function work when used with non-constant dimension index.")); |
| 62 | |
David Neto | 862b7d8 | 2018-06-14 18:48:37 -0400 | [diff] [blame] | 63 | llvm::cl::opt<bool> hack_dis( |
| 64 | "hack-dis", llvm::cl::init(false), |
Alan Baker | fc6888e | 2018-08-20 20:54:33 -0400 | [diff] [blame] | 65 | llvm::cl::desc("Force use of a distinct image or sampler variable for each " |
| 66 | "image or sampler kernel argument. This prevents sharing " |
| 67 | "of resource variables.")); |
David Neto | 862b7d8 | 2018-06-14 18:48:37 -0400 | [diff] [blame] | 68 | |
David Neto | 482550a | 2018-03-24 05:21:07 -0700 | [diff] [blame] | 69 | llvm::cl::opt<bool> hack_inserts( |
| 70 | "hack-inserts", llvm::cl::init(false), |
| 71 | llvm::cl::desc( |
| 72 | "Avoid all single-index OpCompositInsert instructions " |
| 73 | "into struct types by using complete composite construction and " |
| 74 | "extractions")); |
| 75 | |
David Neto | 3a0df83 | 2018-08-03 14:35:42 -0400 | [diff] [blame] | 76 | llvm::cl::opt<bool> hack_signed_compare_fixup( |
| 77 | "hack-scf", llvm::cl::init(false), |
| 78 | llvm::cl::desc("Rewrite signed integer comparisons to use other kinds of " |
| 79 | "instructions")); |
| 80 | |
David Neto | 482550a | 2018-03-24 05:21:07 -0700 | [diff] [blame] | 81 | // Some drivers don't like to see constant composite values constructed |
| 82 | // from scalar Undef values. Replace numeric scalar and vector Undef with |
| 83 | // corresponding OpConstantNull. We need to keep Undef for image values, |
| 84 | // for example. In the LLVM domain, image values are passed as pointer to |
| 85 | // struct. |
| 86 | // See https://github.com/google/clspv/issues/95 |
| 87 | llvm::cl::opt<bool> hack_undef( |
| 88 | "hack-undef", llvm::cl::init(false), |
| 89 | llvm::cl::desc("Use OpConstantNull instead of OpUndef for floating point, " |
| 90 | "integer, or vectors of them")); |
| 91 | |
Alan Baker | 33376ea | 2018-08-30 12:02:31 -0400 | [diff] [blame] | 92 | llvm::cl::opt<bool> hack_phis( |
| 93 | "hack-phis", llvm::cl::init(false), |
| 94 | llvm::cl::desc( |
| 95 | "Scalarize phi instructions of struct type before code generation")); |
| 96 | |
alan-baker | 3fa76d9 | 2018-11-12 14:54:40 -0500 | [diff] [blame] | 97 | llvm::cl::opt<bool> hack_block_order( |
| 98 | "hack-block-order", llvm::cl::init(false), |
| 99 | llvm::cl::desc("Order basic blocks using structured order")); |
| 100 | |
David Neto | 482550a | 2018-03-24 05:21:07 -0700 | [diff] [blame] | 101 | llvm::cl::opt<bool> |
| 102 | pod_ubo("pod-ubo", llvm::cl::init(false), |
| 103 | llvm::cl::desc("POD kernel arguments are in uniform buffers")); |
| 104 | |
alan-baker | 9b0ec3c | 2020-04-06 14:45:34 -0400 | [diff] [blame] | 105 | llvm::cl::opt<bool> pod_pushconstant( |
| 106 | "pod-pushconstant", |
| 107 | llvm::cl::desc("POD kernel arguments are in the push constant interface"), |
| 108 | llvm::cl::init(false)); |
| 109 | |
David Neto | 8508264 | 2018-03-24 06:55:20 -0700 | [diff] [blame] | 110 | llvm::cl::opt<bool> module_constants_in_storage_buffer( |
| 111 | "module-constants-in-storage-buffer", llvm::cl::init(false), |
| 112 | llvm::cl::desc( |
| 113 | "Module-scope __constants are collected into a single storage buffer. " |
| 114 | "The binding and initialization data are reported in the descriptor " |
| 115 | "map.")); |
| 116 | |
David Neto | 482550a | 2018-03-24 05:21:07 -0700 | [diff] [blame] | 117 | llvm::cl::opt<bool> show_ids("show-ids", llvm::cl::init(false), |
| 118 | llvm::cl::desc("Show SPIR-V IDs for functions")); |
| 119 | |
Alan Baker | fcda948 | 2018-10-02 17:09:59 -0400 | [diff] [blame] | 120 | llvm::cl::opt<bool> constant_args_in_uniform_buffer( |
| 121 | "constant-args-ubo", llvm::cl::init(false), |
| 122 | llvm::cl::desc("Put pointer-to-constant kernel args in UBOs.")); |
| 123 | |
alan-baker | 3d9e201 | 2019-01-11 14:55:30 -0500 | [diff] [blame] | 124 | // Default to 64kB. |
| 125 | llvm::cl::opt<int> maximum_ubo_size( |
| 126 | "max-ubo-size", llvm::cl::init(64 << 10), |
| 127 | llvm::cl::desc("Specify the maximum UBO array size in bytes.")); |
| 128 | |
alan-baker | 9b0ec3c | 2020-04-06 14:45:34 -0400 | [diff] [blame] | 129 | llvm::cl::opt<int> maximum_pushconstant_size( |
| 130 | "max-pushconstant-size", llvm::cl::init(128), |
| 131 | llvm::cl::desc( |
| 132 | "Specify the maximum push constant interface size in bytes.")); |
| 133 | |
alan-baker | 3d9e201 | 2019-01-11 14:55:30 -0500 | [diff] [blame] | 134 | llvm::cl::opt<bool> relaxed_ubo_layout( |
| 135 | "relaxed-ubo-layout", |
| 136 | llvm::cl::desc("Allow UBO layouts, that do not satisfy the restriction " |
| 137 | "that ArrayStride is a multiple of array alignment. This " |
| 138 | "does not generate valid SPIR-V for the Vulkan environment; " |
| 139 | "however, some drivers may accept it.")); |
| 140 | |
alan-baker | a3e0238 | 2019-02-15 08:27:27 -0500 | [diff] [blame] | 141 | llvm::cl::opt<bool> std430_ubo_layout( |
alan-baker | 4217b32 | 2019-03-06 08:56:12 -0500 | [diff] [blame] | 142 | "std430-ubo-layout", llvm::cl::init(false), |
alan-baker | a3e0238 | 2019-02-15 08:27:27 -0500 | [diff] [blame] | 143 | llvm::cl::desc("Allow UBO layouts that conform to std430 (SSBO) layout " |
| 144 | "requirements. This does not generate valid SPIR-V for the " |
| 145 | "Vulkan environment; however, some drivers may accept it.")); |
| 146 | |
alan-baker | 4217b32 | 2019-03-06 08:56:12 -0500 | [diff] [blame] | 147 | llvm::cl::opt<bool> keep_unused_arguments( |
| 148 | "keep-unused-arguments", llvm::cl::init(false), |
| 149 | llvm::cl::desc("Do not remove unused non-kernel function arguments.")); |
| 150 | |
alan-baker | ace4e59 | 2019-04-09 08:43:22 -0400 | [diff] [blame] | 151 | llvm::cl::opt<bool> int8_support("int8", llvm::cl::init(true), |
alan-baker | b39c826 | 2019-03-08 14:03:37 -0500 | [diff] [blame] | 152 | llvm::cl::desc("Allow 8-bit integers")); |
| 153 | |
Marco Antognini | 535998c | 2020-09-16 18:48:51 +0100 | [diff] [blame] | 154 | llvm::cl::opt<bool> long_vector_support( |
| 155 | "long-vector", llvm::cl::init(false), |
| 156 | llvm::cl::desc("Allow vectors of 8 and 16 elements. Experimental")); |
| 157 | |
Kévin Petit | f051571 | 2020-01-07 18:29:20 +0000 | [diff] [blame] | 158 | llvm::cl::opt<clspv::Option::SourceLanguage> cl_std( |
| 159 | "cl-std", llvm::cl::desc("Select OpenCL standard"), |
| 160 | llvm::cl::init(clspv::Option::SourceLanguage::OpenCL_C_12), |
| 161 | llvm::cl::values(clEnumValN(clspv::Option::SourceLanguage::OpenCL_C_10, |
| 162 | "CL1.0", "OpenCL C 1.0"), |
| 163 | clEnumValN(clspv::Option::SourceLanguage::OpenCL_C_11, |
| 164 | "CL1.1", "OpenCL C 1.1"), |
| 165 | clEnumValN(clspv::Option::SourceLanguage::OpenCL_C_12, |
| 166 | "CL1.2", "OpenCL C 1.2"), |
| 167 | clEnumValN(clspv::Option::SourceLanguage::OpenCL_C_20, |
| 168 | "CL2.0", "OpenCL C 2.0"), |
| 169 | clEnumValN(clspv::Option::SourceLanguage::OpenCL_CPP, |
| 170 | "CLC++", "C++ for OpenCL"))); |
Kévin Petit | a624c0c | 2019-05-07 20:27:43 +0800 | [diff] [blame] | 171 | |
SJW | 806a5d8 | 2020-07-15 12:51:38 -0500 | [diff] [blame] | 172 | llvm::cl::opt<clspv::Option::SPIRVVersion> spv_version( |
| 173 | "spv-version", llvm::cl::desc("Specify the SPIR-V binary version"), |
| 174 | llvm::cl::init(clspv::Option::SPIRVVersion::SPIRV_1_0), |
| 175 | llvm::cl::values( |
| 176 | clEnumValN(clspv::Option::SPIRVVersion::SPIRV_1_0, "1.0", |
| 177 | "SPIR-V version 1.0 (Vulkan 1.0)"), |
| 178 | clEnumValN(clspv::Option::SPIRVVersion::SPIRV_1_3, "1.3", |
| 179 | "SPIR-V version 1.3 (Vulkan 1.1). Experimental"))); |
| 180 | |
Kévin Petit | a624c0c | 2019-05-07 20:27:43 +0800 | [diff] [blame] | 181 | static llvm::cl::opt<bool> images("images", llvm::cl::init(true), |
| 182 | llvm::cl::desc("Enable support for images")); |
alan-baker | 09cb980 | 2019-12-10 13:16:27 -0500 | [diff] [blame] | 183 | |
Kévin Petit | bbbda97 | 2020-03-03 19:16:31 +0000 | [diff] [blame] | 184 | static llvm::cl::opt<bool> |
| 185 | scalar_block_layout("scalar-block-layout", llvm::cl::init(false), |
| 186 | llvm::cl::desc("Assume VK_EXT_scalar_block_layout")); |
| 187 | |
| 188 | static llvm::cl::opt<bool> work_dim( |
alan-baker | bed3a88 | 2020-04-21 14:42:41 -0400 | [diff] [blame] | 189 | "work-dim", llvm::cl::init(true), |
Kévin Petit | bbbda97 | 2020-03-03 19:16:31 +0000 | [diff] [blame] | 190 | llvm::cl::desc("Enable support for get_work_dim() built-in function")); |
| 191 | |
| 192 | static llvm::cl::opt<bool> |
| 193 | global_offset("global-offset", llvm::cl::init(false), |
| 194 | llvm::cl::desc("Enable support for global offsets")); |
| 195 | |
alan-baker | e199697 | 2020-05-04 08:38:12 -0400 | [diff] [blame] | 196 | static llvm::cl::opt<bool> global_offset_push_constant( |
| 197 | "global-offset-push-constant", llvm::cl::init(false), |
| 198 | llvm::cl::desc("Enable support for global offsets in push constants")); |
| 199 | |
alan-baker | 09cb980 | 2019-12-10 13:16:27 -0500 | [diff] [blame] | 200 | static bool use_sampler_map = false; |
alan-baker | 9b0ec3c | 2020-04-06 14:45:34 -0400 | [diff] [blame] | 201 | |
| 202 | static llvm::cl::opt<bool> cluster_non_pointer_kernel_args( |
alan-baker | 374ce1a | 2020-04-07 20:37:20 -0400 | [diff] [blame] | 203 | "cluster-pod-kernel-args", llvm::cl::init(true), |
alan-baker | 9b0ec3c | 2020-04-06 14:45:34 -0400 | [diff] [blame] | 204 | llvm::cl::desc("Collect plain-old-data kernel arguments into a struct in " |
| 205 | "a single storage buffer, using a binding number after " |
| 206 | "other arguments. Use this to reduce storage buffer " |
| 207 | "descriptors.")); |
| 208 | |
alan-baker | 7efcaaa | 2020-05-06 19:33:27 -0400 | [diff] [blame] | 209 | static llvm::cl::list<clspv::Option::StorageClass> no_16bit_storage( |
| 210 | "no-16bit-storage", |
| 211 | llvm::cl::desc("Disable fine-grained 16-bit storage capabilities."), |
| 212 | llvm::cl::Prefix, llvm::cl::CommaSeparated, llvm::cl::ZeroOrMore, |
| 213 | llvm::cl::values( |
| 214 | clEnumValN(clspv::Option::StorageClass::kSSBO, "ssbo", |
| 215 | "Disallow 16-bit types in SSBO interfaces"), |
| 216 | clEnumValN(clspv::Option::StorageClass::kUBO, "ubo", |
| 217 | "Disallow 16-bit types in UBO interfaces"), |
| 218 | clEnumValN(clspv::Option::StorageClass::kPushConstant, "pushconstant", |
| 219 | "Disallow 16-bit types in push constant interfaces"))); |
| 220 | |
| 221 | static llvm::cl::list<clspv::Option::StorageClass> no_8bit_storage( |
| 222 | "no-8bit-storage", |
| 223 | llvm::cl::desc("Disable fine-grained 8-bit storage capabilities."), |
| 224 | llvm::cl::Prefix, llvm::cl::CommaSeparated, llvm::cl::ZeroOrMore, |
| 225 | llvm::cl::values( |
| 226 | clEnumValN(clspv::Option::StorageClass::kSSBO, "ssbo", |
| 227 | "Disallow 8-bit types in SSBO interfaces"), |
| 228 | clEnumValN(clspv::Option::StorageClass::kUBO, "ubo", |
| 229 | "Disallow 8-bit types in UBO interfaces"), |
| 230 | clEnumValN(clspv::Option::StorageClass::kPushConstant, "pushconstant", |
| 231 | "Disallow 8-bit types in push constant interfaces"))); |
| 232 | |
David Neto | 482550a | 2018-03-24 05:21:07 -0700 | [diff] [blame] | 233 | } // namespace |
| 234 | |
| 235 | namespace clspv { |
| 236 | namespace Option { |
| 237 | |
Alan Baker | af289ab | 2018-08-29 11:26:44 -0400 | [diff] [blame] | 238 | bool InlineEntryPoints() { return inline_entry_points; } |
Alan Baker | 0dd3fd2 | 2018-08-24 11:03:12 -0400 | [diff] [blame] | 239 | bool InlineSingleCallSite() { return !no_inline_single_call_site; } |
David Neto | c5fb524 | 2018-07-30 13:28:31 -0400 | [diff] [blame] | 240 | bool DirectResourceAccess() { |
| 241 | return !(no_direct_resource_access || distinct_kernel_descriptor_sets); |
| 242 | } |
Alan Baker | fc6888e | 2018-08-20 20:54:33 -0400 | [diff] [blame] | 243 | bool ShareModuleScopeVariables() { return !no_share_module_scope_variables; } |
David Neto | 482550a | 2018-03-24 05:21:07 -0700 | [diff] [blame] | 244 | bool DistinctKernelDescriptorSets() { return distinct_kernel_descriptor_sets; } |
David Neto | 862b7d8 | 2018-06-14 18:48:37 -0400 | [diff] [blame] | 245 | bool HackDistinctImageSampler() { return hack_dis; } |
David Neto | b6e2e06 | 2018-04-25 10:32:06 -0400 | [diff] [blame] | 246 | bool HackInitializers() { return hack_initializers; } |
David Neto | 482550a | 2018-03-24 05:21:07 -0700 | [diff] [blame] | 247 | bool HackInserts() { return hack_inserts; } |
David Neto | 3a0df83 | 2018-08-03 14:35:42 -0400 | [diff] [blame] | 248 | bool HackSignedCompareFixup() { return hack_signed_compare_fixup; } |
David Neto | 482550a | 2018-03-24 05:21:07 -0700 | [diff] [blame] | 249 | bool HackUndef() { return hack_undef; } |
Alan Baker | 33376ea | 2018-08-30 12:02:31 -0400 | [diff] [blame] | 250 | bool HackPhis() { return hack_phis; } |
alan-baker | 3fa76d9 | 2018-11-12 14:54:40 -0500 | [diff] [blame] | 251 | bool HackBlockOrder() { return hack_block_order; } |
Alan Baker | fc6888e | 2018-08-20 20:54:33 -0400 | [diff] [blame] | 252 | bool ModuleConstantsInStorageBuffer() { |
| 253 | return module_constants_in_storage_buffer; |
| 254 | } |
David Neto | 482550a | 2018-03-24 05:21:07 -0700 | [diff] [blame] | 255 | bool PodArgsInUniformBuffer() { return pod_ubo; } |
alan-baker | 9b0ec3c | 2020-04-06 14:45:34 -0400 | [diff] [blame] | 256 | bool PodArgsInPushConstants() { return pod_pushconstant; } |
David Neto | 482550a | 2018-03-24 05:21:07 -0700 | [diff] [blame] | 257 | bool ShowIDs() { return show_ids; } |
alan-baker | 3fa76d9 | 2018-11-12 14:54:40 -0500 | [diff] [blame] | 258 | bool ConstantArgsInUniformBuffer() { return constant_args_in_uniform_buffer; } |
alan-baker | 3d9e201 | 2019-01-11 14:55:30 -0500 | [diff] [blame] | 259 | uint64_t MaxUniformBufferSize() { return maximum_ubo_size; } |
alan-baker | 9b0ec3c | 2020-04-06 14:45:34 -0400 | [diff] [blame] | 260 | uint32_t MaxPushConstantsSize() { return maximum_pushconstant_size; } |
alan-baker | 3d9e201 | 2019-01-11 14:55:30 -0500 | [diff] [blame] | 261 | bool RelaxedUniformBufferLayout() { return relaxed_ubo_layout; } |
alan-baker | a3e0238 | 2019-02-15 08:27:27 -0500 | [diff] [blame] | 262 | bool Std430UniformBufferLayout() { return std430_ubo_layout; } |
alan-baker | 4217b32 | 2019-03-06 08:56:12 -0500 | [diff] [blame] | 263 | bool KeepUnusedArguments() { return keep_unused_arguments; } |
alan-baker | b39c826 | 2019-03-08 14:03:37 -0500 | [diff] [blame] | 264 | bool Int8Support() { return int8_support; } |
Marco Antognini | 535998c | 2020-09-16 18:48:51 +0100 | [diff] [blame] | 265 | bool LongVectorSupport() { return long_vector_support; } |
Kévin Petit | a624c0c | 2019-05-07 20:27:43 +0800 | [diff] [blame] | 266 | bool ImageSupport() { return images; } |
alan-baker | 09cb980 | 2019-12-10 13:16:27 -0500 | [diff] [blame] | 267 | bool UseSamplerMap() { return use_sampler_map; } |
| 268 | void SetUseSamplerMap(bool use) { use_sampler_map = use; } |
Kévin Petit | f051571 | 2020-01-07 18:29:20 +0000 | [diff] [blame] | 269 | SourceLanguage Language() { return cl_std; } |
SJW | 806a5d8 | 2020-07-15 12:51:38 -0500 | [diff] [blame] | 270 | SPIRVVersion SpvVersion() { return spv_version; } |
Kévin Petit | bbbda97 | 2020-03-03 19:16:31 +0000 | [diff] [blame] | 271 | bool ScalarBlockLayout() { return scalar_block_layout; } |
| 272 | bool WorkDim() { return work_dim; } |
| 273 | bool GlobalOffset() { return global_offset; } |
alan-baker | e199697 | 2020-05-04 08:38:12 -0400 | [diff] [blame] | 274 | bool GlobalOffsetPushConstant() { return global_offset_push_constant; } |
alan-baker | 9b0ec3c | 2020-04-06 14:45:34 -0400 | [diff] [blame] | 275 | bool ClusterPodKernelArgs() { return cluster_non_pointer_kernel_args; } |
David Neto | 482550a | 2018-03-24 05:21:07 -0700 | [diff] [blame] | 276 | |
alan-baker | 7efcaaa | 2020-05-06 19:33:27 -0400 | [diff] [blame] | 277 | bool Supports16BitStorageClass(StorageClass sc) { |
| 278 | // -no-16bit-storage removes storage capabilities. |
| 279 | for (auto storage_class : no_16bit_storage) { |
| 280 | if (storage_class == sc) |
| 281 | return false; |
| 282 | } |
| 283 | |
| 284 | return true; |
| 285 | } |
| 286 | |
| 287 | bool Supports8BitStorageClass(StorageClass sc) { |
| 288 | // -no-8bit-storage removes storage capabilities. |
| 289 | for (auto storage_class : no_8bit_storage) { |
| 290 | if (storage_class == sc) |
| 291 | return false; |
| 292 | } |
| 293 | |
| 294 | return true; |
| 295 | } |
| 296 | |
David Neto | 482550a | 2018-03-24 05:21:07 -0700 | [diff] [blame] | 297 | } // namespace Option |
| 298 | } // namespace clspv |