vkd3d-shader/dxil: Use vkd3d_shader_parser_error() to report errors in vsir_data_type_from_dxil().

This commit is contained in:
Henri Verbeet
2025-09-01 19:56:42 +02:00
parent fdc1edb647
commit 2aefcf5d99
Notes: Henri Verbeet 2025-09-03 13:10:19 +02:00
Approved-by: Henri Verbeet (@hverbeet)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1710
2 changed files with 13 additions and 11 deletions

View File

@@ -2475,7 +2475,7 @@ static void register_init_with_id(struct vkd3d_shader_register *reg,
reg->idx[0].offset = id; reg->idx[0].offset = id;
} }
static enum vsir_data_type vsir_data_type_from_dxil(const struct sm6_type *type) static enum vsir_data_type vsir_data_type_from_dxil(const struct sm6_type *type, struct sm6_parser *dxil)
{ {
if (type->class == TYPE_CLASS_INTEGER) if (type->class == TYPE_CLASS_INTEGER)
{ {
@@ -2492,7 +2492,8 @@ static enum vsir_data_type vsir_data_type_from_dxil(const struct sm6_type *type)
case 64: case 64:
return VSIR_DATA_U64; return VSIR_DATA_U64;
default: default:
FIXME("Unhandled width %u.\n", type->u.width); vkd3d_shader_parser_error(&dxil->p, VKD3D_SHADER_ERROR_DXIL_UNSUPPORTED,
"Unhandled integer width %u.", type->u.width);
return VSIR_DATA_U32; return VSIR_DATA_U32;
} }
} }
@@ -2507,12 +2508,14 @@ static enum vsir_data_type vsir_data_type_from_dxil(const struct sm6_type *type)
case 64: case 64:
return VSIR_DATA_F64; return VSIR_DATA_F64;
default: default:
FIXME("Unhandled width %u.\n", type->u.width); vkd3d_shader_parser_error(&dxil->p, VKD3D_SHADER_ERROR_DXIL_UNSUPPORTED,
"Unhandled floating-point width %u.", type->u.width);
return VSIR_DATA_F32; return VSIR_DATA_F32;
} }
} }
FIXME("Unhandled type %u.\n", type->class); vkd3d_shader_parser_error(&dxil->p, VKD3D_SHADER_ERROR_DXIL_UNSUPPORTED,
"Unhandled type %#x.", type->class);
return VSIR_DATA_U32; return VSIR_DATA_U32;
} }
@@ -2599,7 +2602,7 @@ static void sm6_register_from_value(struct vkd3d_shader_register *reg, const str
enum vsir_data_type data_type; enum vsir_data_type data_type;
scalar_type = sm6_type_get_scalar_type(value->type, 0); scalar_type = sm6_type_get_scalar_type(value->type, 0);
data_type = vsir_data_type_from_dxil(scalar_type); data_type = vsir_data_type_from_dxil(scalar_type, sm6);
switch (value->value_type) switch (value->value_type)
{ {
@@ -3239,7 +3242,7 @@ static enum vkd3d_result value_allocate_constant_array(struct sm6_value *dst, co
dst->u.data = icb; dst->u.data = icb;
icb->register_idx = sm6->icb_count++; icb->register_idx = sm6->icb_count++;
icb->data_type = vsir_data_type_from_dxil(elem_type); icb->data_type = vsir_data_type_from_dxil(elem_type, sm6);
icb->element_count = type->u.array.count; icb->element_count = type->u.array.count;
icb->component_count = 1; icb->component_count = 1;
icb->is_null = !operands; icb->is_null = !operands;
@@ -3693,7 +3696,7 @@ static void sm6_parser_declare_indexable_temp(struct sm6_parser *sm6, const stru
unsigned int count, unsigned int alignment, bool has_function_scope, unsigned int init, unsigned int count, unsigned int alignment, bool has_function_scope, unsigned int init,
struct vkd3d_shader_instruction *ins, struct sm6_value *dst) struct vkd3d_shader_instruction *ins, struct sm6_value *dst)
{ {
enum vsir_data_type data_type = vsir_data_type_from_dxil(elem_type); enum vsir_data_type data_type = vsir_data_type_from_dxil(elem_type, sm6);
if (ins) if (ins)
vsir_instruction_init(ins, &sm6->p.location, VSIR_OP_DCL_INDEXABLE_TEMP); vsir_instruction_init(ins, &sm6->p.location, VSIR_OP_DCL_INDEXABLE_TEMP);
@@ -4012,8 +4015,7 @@ static enum vkd3d_result sm6_parser_globals_init(struct sm6_parser *sm6)
return VKD3D_ERROR_INVALID_SHADER; return VKD3D_ERROR_INVALID_SHADER;
if ((version = record->operands[0]) != 1) if ((version = record->operands[0]) != 1)
{ {
FIXME("Unsupported format version %#"PRIx64".\n", version); vkd3d_shader_parser_error(&sm6->p, VKD3D_SHADER_ERROR_DXIL_UNSUPPORTED,
vkd3d_shader_parser_error(&sm6->p, VKD3D_SHADER_ERROR_DXIL_UNSUPPORTED_BITCODE_FORMAT,
"Bitcode format version %#"PRIx64" is unsupported.", version); "Bitcode format version %#"PRIx64" is unsupported.", version);
return VKD3D_ERROR_INVALID_SHADER; return VKD3D_ERROR_INVALID_SHADER;
} }
@@ -5183,7 +5185,7 @@ static void sm6_parser_emit_dx_cbuffer_load(struct sm6_parser *sm6, enum dx_intr
type = sm6_type_get_scalar_type(dst->type, 0); type = sm6_type_get_scalar_type(dst->type, 0);
VKD3D_ASSERT(type); VKD3D_ASSERT(type);
src_param->reg.data_type = vsir_data_type_from_dxil(type); src_param->reg.data_type = vsir_data_type_from_dxil(type, sm6);
if (data_type_is_64_bit(src_param->reg.data_type)) if (data_type_is_64_bit(src_param->reg.data_type))
src_param->swizzle = vsir_swizzle_64_from_32(src_param->swizzle); src_param->swizzle = vsir_swizzle_64_from_32(src_param->swizzle);
else else

View File

@@ -213,7 +213,7 @@ enum vkd3d_shader_error
VKD3D_SHADER_ERROR_DXIL_INVALID_OPERAND_COUNT = 8005, VKD3D_SHADER_ERROR_DXIL_INVALID_OPERAND_COUNT = 8005,
VKD3D_SHADER_ERROR_DXIL_INVALID_TYPE_TABLE = 8006, VKD3D_SHADER_ERROR_DXIL_INVALID_TYPE_TABLE = 8006,
VKD3D_SHADER_ERROR_DXIL_INVALID_VALUE_SYMTAB = 8007, VKD3D_SHADER_ERROR_DXIL_INVALID_VALUE_SYMTAB = 8007,
VKD3D_SHADER_ERROR_DXIL_UNSUPPORTED_BITCODE_FORMAT = 8008, VKD3D_SHADER_ERROR_DXIL_UNSUPPORTED = 8008,
VKD3D_SHADER_ERROR_DXIL_INVALID_FUNCTION_DCL = 8009, VKD3D_SHADER_ERROR_DXIL_INVALID_FUNCTION_DCL = 8009,
VKD3D_SHADER_ERROR_DXIL_INVALID_TYPE_ID = 8010, VKD3D_SHADER_ERROR_DXIL_INVALID_TYPE_ID = 8010,
VKD3D_SHADER_ERROR_DXIL_INVALID_MODULE = 8011, VKD3D_SHADER_ERROR_DXIL_INVALID_MODULE = 8011,