vkd3d-shader/msl: Get rid of the "lod" field of struct msl_resource_type_info.

1D read() is specified to support a level/lod parameter. The MSL
specification claims it needs to be 0 because "mipmaps are not supported
for 1D textures", but that restriction isn't documented for the
"mipmapLevelCount" property of MTLTextureDescriptor. Other APIs do
supported mipmapped 1D textures. Multi-sample textures aren't supported
by msl_ld(), so we don't need to worry about them.
This commit is contained in:
Henri Verbeet
2025-05-26 13:34:23 +02:00
parent 02d7d6038d
commit 6a93c503cd
Notes: Henri Verbeet 2025-06-05 16:18:34 +02:00
Approved-by: Giovanni Mascellani (@giomasce)
Approved-by: Henri Verbeet (@hverbeet)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1535

View File

@@ -57,7 +57,6 @@ struct msl_resource_type_info
{ {
size_t read_coord_size; size_t read_coord_size;
bool array; bool array;
bool lod;
const char *type_suffix; const char *type_suffix;
}; };
@@ -76,17 +75,17 @@ static const struct msl_resource_type_info *msl_get_resource_type_info(enum vkd3
{ {
static const struct msl_resource_type_info info[] = static const struct msl_resource_type_info info[] =
{ {
[VKD3D_SHADER_RESOURCE_NONE] = {0, false, false, "none"}, [VKD3D_SHADER_RESOURCE_NONE] = {0, 0, "none"},
[VKD3D_SHADER_RESOURCE_BUFFER] = {1, false, false, "_buffer"}, [VKD3D_SHADER_RESOURCE_BUFFER] = {1, 0, "_buffer"},
[VKD3D_SHADER_RESOURCE_TEXTURE_1D] = {1, false, false, "1d"}, [VKD3D_SHADER_RESOURCE_TEXTURE_1D] = {1, 0, "1d"},
[VKD3D_SHADER_RESOURCE_TEXTURE_2D] = {2, false, true, "2d"}, [VKD3D_SHADER_RESOURCE_TEXTURE_2D] = {2, 0, "2d"},
[VKD3D_SHADER_RESOURCE_TEXTURE_2DMS] = {2, false, false, "2d_ms"}, [VKD3D_SHADER_RESOURCE_TEXTURE_2DMS] = {2, 0, "2d_ms"},
[VKD3D_SHADER_RESOURCE_TEXTURE_3D] = {3, false, true, "3d"}, [VKD3D_SHADER_RESOURCE_TEXTURE_3D] = {3, 0, "3d"},
[VKD3D_SHADER_RESOURCE_TEXTURE_CUBE] = {2, false, true, "cube"}, [VKD3D_SHADER_RESOURCE_TEXTURE_CUBE] = {2, 0, "cube"},
[VKD3D_SHADER_RESOURCE_TEXTURE_1DARRAY] = {1, true, false, "1d_array"}, [VKD3D_SHADER_RESOURCE_TEXTURE_1DARRAY] = {1, 1, "1d_array"},
[VKD3D_SHADER_RESOURCE_TEXTURE_2DARRAY] = {2, true, true, "2d_array"}, [VKD3D_SHADER_RESOURCE_TEXTURE_2DARRAY] = {2, 1, "2d_array"},
[VKD3D_SHADER_RESOURCE_TEXTURE_2DMSARRAY] = {2, true, false, "2d_ms_array"}, [VKD3D_SHADER_RESOURCE_TEXTURE_2DMSARRAY] = {2, 1, "2d_ms_array"},
[VKD3D_SHADER_RESOURCE_TEXTURE_CUBEARRAY] = {2, true, true, "cube_array"}, [VKD3D_SHADER_RESOURCE_TEXTURE_CUBEARRAY] = {2, 1, "cube_array"},
}; };
if (!t || t >= ARRAY_SIZE(info)) if (!t || t >= ARRAY_SIZE(info))
@@ -798,7 +797,7 @@ static void msl_ld(struct msl_generator *gen, const struct vkd3d_shader_instruct
vkd3d_string_buffer_printf(read, ", "); vkd3d_string_buffer_printf(read, ", ");
msl_print_src_with_type(read, gen, &ins->src[0], coord_mask + 1, VKD3D_DATA_UINT); msl_print_src_with_type(read, gen, &ins->src[0], coord_mask + 1, VKD3D_DATA_UINT);
} }
if (resource_type_info->lod) if (resource_type != VKD3D_SHADER_RESOURCE_BUFFER)
{ {
vkd3d_string_buffer_printf(read, ", "); vkd3d_string_buffer_printf(read, ", ");
msl_print_src_with_type(read, gen, &ins->src[0], VKD3DSP_WRITEMASK_3, VKD3D_DATA_UINT); msl_print_src_with_type(read, gen, &ins->src[0], VKD3DSP_WRITEMASK_3, VKD3D_DATA_UINT);