vkd3d-shader: Introduce an interface to specify 1.x texture dimensions.

This commit is contained in:
Elizabeth Figura
2025-10-03 15:00:48 -05:00
committed by Henri Verbeet
parent 937b80f3f2
commit 539a5be370
Notes: Henri Verbeet 2025-10-13 19:31:51 +02:00
Approved-by: Henri Verbeet (@hverbeet)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1769
5 changed files with 128 additions and 1 deletions

View File

@@ -248,6 +248,8 @@ struct vkd3d_shader_sm1_parser
struct vkd3d_shader_parser p;
struct vsir_program *program;
const struct vkd3d_shader_d3dbc_source_info *d3dbc_source_info;
uint16_t texture_descriptors;
struct
@@ -1223,6 +1225,8 @@ static void shader_sm1_read_comment(struct vkd3d_shader_sm1_parser *sm1)
static void d3dbc_update_descriptors(struct vkd3d_shader_sm1_parser *d3dbc,
const struct vkd3d_shader_instruction *ins)
{
enum vkd3d_shader_resource_type type = VKD3D_SHADER_RESOURCE_TEXTURE_2D;
const struct vkd3d_shader_d3dbc_source_info *source_info;
unsigned int sampler_idx;
switch (ins->opcode)
@@ -1243,7 +1247,10 @@ static void d3dbc_update_descriptors(struct vkd3d_shader_sm1_parser *d3dbc,
if ((d3dbc->texture_descriptors & (1u << sampler_idx)))
break;
d3dbc_add_combined_sampler_descriptor(d3dbc, sampler_idx, VKD3D_SHADER_RESOURCE_TEXTURE_2D);
if ((source_info = d3dbc->d3dbc_source_info)
&& sampler_idx < ARRAY_SIZE(source_info->texture_dimensions))
type = source_info->texture_dimensions[sampler_idx];
d3dbc_add_combined_sampler_descriptor(d3dbc, sampler_idx, type);
d3dbc->texture_descriptors |= (1u << sampler_idx);
break;
@@ -1456,6 +1463,8 @@ static enum vkd3d_result shader_sm1_init(struct vkd3d_shader_sm1_parser *sm1, st
uint16_t shader_type;
size_t token_count;
sm1->d3dbc_source_info = vkd3d_find_struct(compile_info->next, D3DBC_SOURCE_INFO);
token_count = code_size / sizeof(*sm1->start);
if (token_count < 2)