Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/KhronosGroup/SPIRV-Cross.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'main.cpp')
-rw-r--r--main.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/main.cpp b/main.cpp
index 8b8ca7eb..7f7bda4b 100644
--- a/main.cpp
+++ b/main.cpp
@@ -710,7 +710,12 @@ struct CLIArguments
bool msl = false;
bool hlsl = false;
bool hlsl_compat = false;
+
bool hlsl_support_nonzero_base = false;
+ bool hlsl_base_vertex_index_explicit_binding = false;
+ uint32_t hlsl_base_vertex_index_register_index = 0;
+ uint32_t hlsl_base_vertex_index_register_space = 0;
+
bool hlsl_force_storage_buffer_as_uav = false;
bool hlsl_nonwritable_uav_texture_as_srv = false;
bool hlsl_enable_16bit_types = false;
@@ -807,6 +812,7 @@ static void print_help_hlsl()
"\t\tPointSize is ignored, and PointCoord returns (0.5, 0.5).\n"
"\t[--hlsl-support-nonzero-basevertex-baseinstance]:\n\t\tSupport base vertex and base instance by emitting a special cbuffer declared as:\n"
"\t\tcbuffer SPIRV_Cross_VertexInfo { int SPIRV_Cross_BaseVertex; int SPIRV_Cross_BaseInstance; };\n"
+ "\t[--hlsl-basevertex-baseinstance-binding <register index> <register space>]:\n\t\tAssign a fixed binding to SPIRV_Cross_VertexInfo.\n"
"\t[--hlsl-auto-binding (push, cbv, srv, uav, sampler, all)]\n"
"\t\tDo not emit any : register(#) bindings for specific resource types, and rely on HLSL compiler to assign something.\n"
"\t[--hlsl-force-storage-buffer-as-uav]:\n\t\tAlways emit SSBOs as UAVs, even when marked as read-only.\n"
@@ -1371,6 +1377,12 @@ static string compile_iteration(const CLIArguments &args, std::vector<uint32_t>
hlsl_opts.flatten_matrix_vertex_input_semantics = args.hlsl_flatten_matrix_vertex_input_semantics;
hlsl->set_hlsl_options(hlsl_opts);
hlsl->set_resource_binding_flags(args.hlsl_binding_flags);
+ if (args.hlsl_base_vertex_index_explicit_binding)
+ {
+ hlsl->set_hlsl_aux_buffer_binding(HLSL_AUX_BINDING_BASE_VERTEX_INSTANCE,
+ args.hlsl_base_vertex_index_register_index,
+ args.hlsl_base_vertex_index_register_space);
+ }
}
if (build_dummy_sampler)
@@ -1533,6 +1545,11 @@ static int main_inner(int argc, char *argv[])
cbs.add("--hlsl-enable-compat", [&args](CLIParser &) { args.hlsl_compat = true; });
cbs.add("--hlsl-support-nonzero-basevertex-baseinstance",
[&args](CLIParser &) { args.hlsl_support_nonzero_base = true; });
+ cbs.add("--hlsl-basevertex-baseinstance-binding", [&args](CLIParser &parser) {
+ args.hlsl_base_vertex_index_explicit_binding = true;
+ args.hlsl_base_vertex_index_register_index = parser.next_uint();
+ args.hlsl_base_vertex_index_register_space = parser.next_uint();
+ });
cbs.add("--hlsl-auto-binding", [&args](CLIParser &parser) {
args.hlsl_binding_flags |= hlsl_resource_type_to_flag(parser.next_string());
});