mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-12-15 08:03:30 -08:00
vkd3d-shader/msl: Introduce msl_get_binding().
This commit is contained in:
committed by
Henri Verbeet
parent
94c9595196
commit
491fecc6a3
Notes:
Henri Verbeet
2025-10-28 16:58:29 +01:00
Approved-by: Henri Verbeet (@hverbeet) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1802
@@ -209,8 +209,9 @@ static bool msl_check_shader_visibility(const struct msl_generator *gen,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct vkd3d_shader_descriptor_binding *msl_get_cbv_binding(const struct msl_generator *gen,
|
static const struct vkd3d_shader_descriptor_binding *msl_get_binding(const struct msl_generator *gen,
|
||||||
unsigned int register_space, unsigned int register_idx)
|
unsigned int register_space, unsigned int register_idx, enum vkd3d_shader_descriptor_type type,
|
||||||
|
enum vkd3d_shader_binding_flag flags)
|
||||||
{
|
{
|
||||||
const struct vkd3d_shader_interface_info *interface_info = gen->interface_info;
|
const struct vkd3d_shader_interface_info *interface_info = gen->interface_info;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
@@ -222,7 +223,7 @@ static const struct vkd3d_shader_descriptor_binding *msl_get_cbv_binding(const s
|
|||||||
{
|
{
|
||||||
const struct vkd3d_shader_resource_binding *binding = &interface_info->bindings[i];
|
const struct vkd3d_shader_resource_binding *binding = &interface_info->bindings[i];
|
||||||
|
|
||||||
if (binding->type != VKD3D_SHADER_DESCRIPTOR_TYPE_CBV)
|
if (binding->type != type)
|
||||||
continue;
|
continue;
|
||||||
if (binding->register_space != register_space)
|
if (binding->register_space != register_space)
|
||||||
continue;
|
continue;
|
||||||
@@ -230,7 +231,7 @@ static const struct vkd3d_shader_descriptor_binding *msl_get_cbv_binding(const s
|
|||||||
continue;
|
continue;
|
||||||
if (!msl_check_shader_visibility(gen, binding->shader_visibility))
|
if (!msl_check_shader_visibility(gen, binding->shader_visibility))
|
||||||
continue;
|
continue;
|
||||||
if (!(binding->flags & VKD3D_SHADER_BINDING_FLAG_BUFFER))
|
if ((binding->flags & flags) != flags)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
return &binding->binding;
|
return &binding->binding;
|
||||||
@@ -239,102 +240,33 @@ static const struct vkd3d_shader_descriptor_binding *msl_get_cbv_binding(const s
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const struct vkd3d_shader_descriptor_binding *msl_get_cbv_binding(const struct msl_generator *gen,
|
||||||
|
unsigned int register_space, unsigned int register_idx)
|
||||||
|
{
|
||||||
|
return msl_get_binding(gen, register_space, register_idx,
|
||||||
|
VKD3D_SHADER_DESCRIPTOR_TYPE_CBV, VKD3D_SHADER_BINDING_FLAG_BUFFER);
|
||||||
|
}
|
||||||
|
|
||||||
static const struct vkd3d_shader_descriptor_binding *msl_get_sampler_binding(const struct msl_generator *gen,
|
static const struct vkd3d_shader_descriptor_binding *msl_get_sampler_binding(const struct msl_generator *gen,
|
||||||
unsigned int register_space, unsigned int register_idx)
|
unsigned int register_space, unsigned int register_idx)
|
||||||
{
|
{
|
||||||
const struct vkd3d_shader_interface_info *interface_info = gen->interface_info;
|
return msl_get_binding(gen, register_space, register_idx, VKD3D_SHADER_DESCRIPTOR_TYPE_SAMPLER, 0);
|
||||||
const struct vkd3d_shader_resource_binding *binding;
|
|
||||||
unsigned int i;
|
|
||||||
|
|
||||||
if (!interface_info)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
for (i = 0; i < interface_info->binding_count; ++i)
|
|
||||||
{
|
|
||||||
binding = &interface_info->bindings[i];
|
|
||||||
|
|
||||||
if (binding->type != VKD3D_SHADER_DESCRIPTOR_TYPE_SAMPLER)
|
|
||||||
continue;
|
|
||||||
if (binding->register_space != register_space)
|
|
||||||
continue;
|
|
||||||
if (binding->register_index != register_idx)
|
|
||||||
continue;
|
|
||||||
if (!msl_check_shader_visibility(gen, binding->shader_visibility))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
return &binding->binding;
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct vkd3d_shader_descriptor_binding *msl_get_srv_binding(const struct msl_generator *gen,
|
static const struct vkd3d_shader_descriptor_binding *msl_get_srv_binding(const struct msl_generator *gen,
|
||||||
unsigned int register_space, unsigned int register_idx, enum vkd3d_shader_resource_type resource_type)
|
unsigned int register_space, unsigned int register_idx, enum vkd3d_shader_resource_type resource_type)
|
||||||
{
|
{
|
||||||
const struct vkd3d_shader_interface_info *interface_info = gen->interface_info;
|
return msl_get_binding(gen, register_space, register_idx,
|
||||||
enum vkd3d_shader_binding_flag resource_type_flag;
|
VKD3D_SHADER_DESCRIPTOR_TYPE_SRV, resource_type == VKD3D_SHADER_RESOURCE_BUFFER
|
||||||
unsigned int i;
|
? VKD3D_SHADER_BINDING_FLAG_BUFFER : VKD3D_SHADER_BINDING_FLAG_IMAGE);
|
||||||
|
|
||||||
if (!interface_info)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
resource_type_flag = resource_type == VKD3D_SHADER_RESOURCE_BUFFER
|
|
||||||
? VKD3D_SHADER_BINDING_FLAG_BUFFER : VKD3D_SHADER_BINDING_FLAG_IMAGE;
|
|
||||||
|
|
||||||
for (i = 0; i < interface_info->binding_count; ++i)
|
|
||||||
{
|
|
||||||
const struct vkd3d_shader_resource_binding *binding = &interface_info->bindings[i];
|
|
||||||
|
|
||||||
if (binding->type != VKD3D_SHADER_DESCRIPTOR_TYPE_SRV)
|
|
||||||
continue;
|
|
||||||
if (binding->register_space != register_space)
|
|
||||||
continue;
|
|
||||||
if (binding->register_index != register_idx)
|
|
||||||
continue;
|
|
||||||
if (!msl_check_shader_visibility(gen, binding->shader_visibility))
|
|
||||||
continue;
|
|
||||||
if (!(binding->flags & resource_type_flag))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
return &binding->binding;
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct vkd3d_shader_descriptor_binding *msl_get_uav_binding(const struct msl_generator *gen,
|
static const struct vkd3d_shader_descriptor_binding *msl_get_uav_binding(const struct msl_generator *gen,
|
||||||
unsigned int register_space, unsigned int register_idx, enum vkd3d_shader_resource_type resource_type)
|
unsigned int register_space, unsigned int register_idx, enum vkd3d_shader_resource_type resource_type)
|
||||||
{
|
{
|
||||||
const struct vkd3d_shader_interface_info *interface_info = gen->interface_info;
|
return msl_get_binding(gen, register_space, register_idx,
|
||||||
const struct vkd3d_shader_resource_binding *binding;
|
VKD3D_SHADER_DESCRIPTOR_TYPE_UAV, resource_type == VKD3D_SHADER_RESOURCE_BUFFER
|
||||||
enum vkd3d_shader_binding_flag resource_type_flag;
|
? VKD3D_SHADER_BINDING_FLAG_BUFFER : VKD3D_SHADER_BINDING_FLAG_IMAGE);
|
||||||
unsigned int i;
|
|
||||||
|
|
||||||
if (!interface_info)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
resource_type_flag = resource_type == VKD3D_SHADER_RESOURCE_BUFFER
|
|
||||||
? VKD3D_SHADER_BINDING_FLAG_BUFFER : VKD3D_SHADER_BINDING_FLAG_IMAGE;
|
|
||||||
|
|
||||||
for (i = 0; i < interface_info->binding_count; ++i)
|
|
||||||
{
|
|
||||||
binding = &interface_info->bindings[i];
|
|
||||||
|
|
||||||
if (binding->type != VKD3D_SHADER_DESCRIPTOR_TYPE_UAV)
|
|
||||||
continue;
|
|
||||||
if (binding->register_space != register_space)
|
|
||||||
continue;
|
|
||||||
if (binding->register_index != register_idx)
|
|
||||||
continue;
|
|
||||||
if (!msl_check_shader_visibility(gen, binding->shader_visibility))
|
|
||||||
continue;
|
|
||||||
if (!(binding->flags & resource_type_flag))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
return &binding->binding;
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void msl_print_cbv_name(struct vkd3d_string_buffer *buffer, unsigned int binding)
|
static void msl_print_cbv_name(struct vkd3d_string_buffer *buffer, unsigned int binding)
|
||||||
|
|||||||
Reference in New Issue
Block a user