vkd3d-shader/dxil: Use sm6_parser_add_instruction() in sm6_parser_descriptor_type_init().

This commit is contained in:
Francisco Casas
2025-08-13 18:32:03 -04:00
committed by Henri Verbeet
parent 1ee42bd406
commit 158f8b3cf6
Notes: Henri Verbeet 2025-08-29 15:13:14 +02:00
Approved-by: Henri Verbeet (@hverbeet)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1690

View File

@@ -9515,8 +9515,8 @@ static enum vkd3d_result sm6_parser_descriptor_type_init(struct sm6_parser *sm6,
struct vkd3d_shader_instruction *ins; struct vkd3d_shader_instruction *ins;
const struct sm6_metadata_node *node; const struct sm6_metadata_node *node;
const struct sm6_metadata_value *m; const struct sm6_metadata_value *m;
enum vkd3d_result ret = VKD3D_OK;
struct sm6_descriptor_info *d; struct sm6_descriptor_info *d;
enum vkd3d_result ret;
unsigned int i; unsigned int i;
for (i = 0; i < descriptor_node->operand_count; ++i) for (i = 0; i < descriptor_node->operand_count; ++i)
@@ -9565,9 +9565,10 @@ static enum vkd3d_result sm6_parser_descriptor_type_init(struct sm6_parser *sm6,
return VKD3D_ERROR_INVALID_SHADER; return VKD3D_ERROR_INVALID_SHADER;
} }
if (!(ins = sm6_parser_require_space(sm6, 1))) if (!(ins = sm6_parser_add_instruction(sm6, VSIR_OP_NOP)))
{ {
ERR("Failed to allocate instruction.\n"); vkd3d_shader_parser_error(&sm6->p, VKD3D_SHADER_ERROR_DXIL_OUT_OF_MEMORY,
"Out of memory emitting shader instructions.");
return VKD3D_ERROR_OUT_OF_MEMORY; return VKD3D_ERROR_OUT_OF_MEMORY;
} }
@@ -9575,32 +9576,34 @@ static enum vkd3d_result sm6_parser_descriptor_type_init(struct sm6_parser *sm6,
{ {
case VKD3D_SHADER_DESCRIPTOR_TYPE_CBV: case VKD3D_SHADER_DESCRIPTOR_TYPE_CBV:
if ((ret = sm6_parser_resources_load_cbv(sm6, node, d, ins)) < 0) if ((ret = sm6_parser_resources_load_cbv(sm6, node, d, ins)) < 0)
return ret; goto done;
break; break;
case VKD3D_SHADER_DESCRIPTOR_TYPE_SRV: case VKD3D_SHADER_DESCRIPTOR_TYPE_SRV:
if ((ret = sm6_parser_resources_load_srv(sm6, node, d, ins)) < 0) if ((ret = sm6_parser_resources_load_srv(sm6, node, d, ins)) < 0)
return ret; goto done;
break; break;
case VKD3D_SHADER_DESCRIPTOR_TYPE_UAV: case VKD3D_SHADER_DESCRIPTOR_TYPE_UAV:
if ((ret = sm6_parser_resources_load_uav(sm6, node, d, ins)) < 0) if ((ret = sm6_parser_resources_load_uav(sm6, node, d, ins)) < 0)
return ret; goto done;
break; break;
case VKD3D_SHADER_DESCRIPTOR_TYPE_SAMPLER: case VKD3D_SHADER_DESCRIPTOR_TYPE_SAMPLER:
if ((ret = sm6_parser_resources_load_sampler(sm6, node, d, ins)) < 0) if ((ret = sm6_parser_resources_load_sampler(sm6, node, d, ins)) < 0)
return ret; goto done;
break; break;
default: default:
FIXME("Unsupported descriptor type %u.\n", type);
vkd3d_shader_parser_error(&sm6->p, VKD3D_SHADER_ERROR_DXIL_INVALID_RESOURCES, vkd3d_shader_parser_error(&sm6->p, VKD3D_SHADER_ERROR_DXIL_INVALID_RESOURCES,
"Resource descriptor type %u is unsupported.", type); "Resource descriptor type %#x is unsupported.", type);
return VKD3D_ERROR_INVALID_SHADER; ret = VKD3D_ERROR_INVALID_SHADER;
goto done;
} }
++sm6->descriptor_count; ++sm6->descriptor_count;
++sm6->program->instructions.count;
} }
return VKD3D_OK; done:
if (ret < 0)
vsir_instruction_init(ins, &ins->location, VSIR_OP_NOP);
return ret;
} }
static enum vkd3d_result sm6_parser_resources_init(struct sm6_parser *sm6) static enum vkd3d_result sm6_parser_resources_init(struct sm6_parser *sm6)