MSL/C: Add _2 variant for the resource binding API.

Adds missing count variable for bindless.
This commit is contained in:
Hans-Kristian Arntzen 2024-06-17 13:19:53 +02:00
parent ab608ac89c
commit 11be429ef2
3 changed files with 64 additions and 3 deletions

View File

@ -243,7 +243,7 @@ set(spirv-cross-util-sources
${CMAKE_CURRENT_SOURCE_DIR}/spirv_cross_util.hpp)
set(spirv-cross-abi-major 0)
set(spirv-cross-abi-minor 60)
set(spirv-cross-abi-minor 61)
set(spirv-cross-abi-patch 0)
set(SPIRV_CROSS_VERSION ${spirv-cross-abi-major}.${spirv-cross-abi-minor}.${spirv-cross-abi-patch})

View File

@ -1355,6 +1355,34 @@ spvc_result spvc_compiler_msl_add_resource_binding(spvc_compiler compiler,
#endif
}
spvc_result spvc_compiler_msl_add_resource_binding_2(spvc_compiler compiler,
const spvc_msl_resource_binding_2 *binding)
{
#if SPIRV_CROSS_C_API_MSL
if (compiler->backend != SPVC_BACKEND_MSL)
{
compiler->context->report_error("MSL function used on a non-MSL backend.");
return SPVC_ERROR_INVALID_ARGUMENT;
}
auto &msl = *static_cast<CompilerMSL *>(compiler->compiler.get());
MSLResourceBinding bind;
bind.binding = binding->binding;
bind.desc_set = binding->desc_set;
bind.stage = static_cast<spv::ExecutionModel>(binding->stage);
bind.msl_buffer = binding->msl_buffer;
bind.msl_texture = binding->msl_texture;
bind.msl_sampler = binding->msl_sampler;
bind.count = binding->count;
msl.add_msl_resource_binding(bind);
return SPVC_SUCCESS;
#else
(void)binding;
compiler->context->report_error("MSL function used on a non-MSL backend.");
return SPVC_ERROR_INVALID_ARGUMENT;
#endif
}
spvc_result spvc_compiler_msl_add_dynamic_buffer(spvc_compiler compiler, unsigned desc_set, unsigned binding, unsigned index)
{
#if SPIRV_CROSS_C_API_MSL
@ -2811,6 +2839,22 @@ void spvc_msl_resource_binding_init(spvc_msl_resource_binding *binding)
#endif
}
void spvc_msl_resource_binding_init_2(spvc_msl_resource_binding_2 *binding)
{
#if SPIRV_CROSS_C_API_MSL
MSLResourceBinding binding_default;
binding->desc_set = binding_default.desc_set;
binding->binding = binding_default.binding;
binding->msl_buffer = binding_default.msl_buffer;
binding->msl_texture = binding_default.msl_texture;
binding->msl_sampler = binding_default.msl_sampler;
binding->stage = static_cast<SpvExecutionModel>(binding_default.stage);
binding->count = 0;
#else
memset(binding, 0, sizeof(*binding));
#endif
}
void spvc_hlsl_resource_binding_init(spvc_hlsl_resource_binding *binding)
{
#if SPIRV_CROSS_C_API_HLSL

View File

@ -40,7 +40,7 @@ extern "C" {
/* Bumped if ABI or API breaks backwards compatibility. */
#define SPVC_C_API_VERSION_MAJOR 0
/* Bumped if APIs or enumerations are added in a backwards compatible way. */
#define SPVC_C_API_VERSION_MINOR 60
#define SPVC_C_API_VERSION_MINOR 61
/* Bumped if internal implementation details change. */
#define SPVC_C_API_VERSION_PATCH 0
@ -380,7 +380,8 @@ typedef struct spvc_msl_shader_interface_var_2
*/
SPVC_PUBLIC_API void spvc_msl_shader_interface_var_init_2(spvc_msl_shader_interface_var_2 *var);
/* Maps to C++ API. */
/* Maps to C++ API.
* Deprecated. Use spvc_msl_resource_binding_2. */
typedef struct spvc_msl_resource_binding
{
SpvExecutionModel stage;
@ -391,11 +392,24 @@ typedef struct spvc_msl_resource_binding
unsigned msl_sampler;
} spvc_msl_resource_binding;
typedef struct spvc_msl_resource_binding_2
{
SpvExecutionModel stage;
unsigned desc_set;
unsigned binding;
unsigned count;
unsigned msl_buffer;
unsigned msl_texture;
unsigned msl_sampler;
} spvc_msl_resource_binding_2;
/*
* Initializes the resource binding struct.
* The defaults are non-zero.
* Deprecated: Use spvc_msl_resource_binding_init_2.
*/
SPVC_PUBLIC_API void spvc_msl_resource_binding_init(spvc_msl_resource_binding *binding);
SPVC_PUBLIC_API void spvc_msl_resource_binding_init_2(spvc_msl_resource_binding_2 *binding);
#define SPVC_MSL_PUSH_CONSTANT_DESC_SET (~(0u))
#define SPVC_MSL_PUSH_CONSTANT_BINDING (0)
@ -836,8 +850,11 @@ SPVC_PUBLIC_API spvc_bool spvc_compiler_msl_needs_patch_output_buffer(spvc_compi
SPVC_PUBLIC_API spvc_bool spvc_compiler_msl_needs_input_threadgroup_mem(spvc_compiler compiler);
SPVC_PUBLIC_API spvc_result spvc_compiler_msl_add_vertex_attribute(spvc_compiler compiler,
const spvc_msl_vertex_attribute *attrs);
/* Deprecated; use spvc_compiler_msl_add_resource_binding_2(). */
SPVC_PUBLIC_API spvc_result spvc_compiler_msl_add_resource_binding(spvc_compiler compiler,
const spvc_msl_resource_binding *binding);
SPVC_PUBLIC_API spvc_result spvc_compiler_msl_add_resource_binding_2(spvc_compiler compiler,
const spvc_msl_resource_binding_2 *binding);
/* Deprecated; use spvc_compiler_msl_add_shader_input_2(). */
SPVC_PUBLIC_API spvc_result spvc_compiler_msl_add_shader_input(spvc_compiler compiler,
const spvc_msl_shader_interface_var *input);