mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-12-15 08:03:30 -08:00
vkd3d-shader/dxil: Set the parser status to VKD3D_ERROR_NOT_IMPLEMENTED on missing functionality.
This commit is contained in:
committed by
Henri Verbeet
parent
aa943c51ea
commit
1512c6c809
Notes:
Henri Verbeet
2025-10-03 00:55:08 +02:00
Approved-by: Henri Verbeet (@hverbeet) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1761
@@ -3011,8 +3011,7 @@ static bool sm6_value_validate_is_backward_ref(const struct sm6_value *value, st
|
|||||||
{
|
{
|
||||||
if (!value->is_back_ref)
|
if (!value->is_back_ref)
|
||||||
{
|
{
|
||||||
FIXME("Forward-referenced pointers are not supported.\n");
|
vkd3d_shader_parser_error(&sm6->p, VKD3D_SHADER_ERROR_DXIL_NOT_IMPLEMENTED,
|
||||||
vkd3d_shader_parser_error(&sm6->p, VKD3D_SHADER_ERROR_DXIL_INVALID_OPERAND,
|
|
||||||
"Forward-referenced pointer declarations are not supported.");
|
"Forward-referenced pointer declarations are not supported.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -3224,8 +3223,7 @@ static enum vkd3d_result value_allocate_constant_array(struct sm6_value *dst, co
|
|||||||
/* Multidimensional arrays are emitted in flattened form. */
|
/* Multidimensional arrays are emitted in flattened form. */
|
||||||
if (elem_type->class != TYPE_CLASS_INTEGER && elem_type->class != TYPE_CLASS_FLOAT)
|
if (elem_type->class != TYPE_CLASS_INTEGER && elem_type->class != TYPE_CLASS_FLOAT)
|
||||||
{
|
{
|
||||||
FIXME("Unhandled element type %u for data array.\n", elem_type->class);
|
vkd3d_shader_parser_error(&sm6->p, VKD3D_SHADER_ERROR_DXIL_NOT_IMPLEMENTED,
|
||||||
vkd3d_shader_parser_error(&sm6->p, VKD3D_SHADER_ERROR_DXIL_INVALID_OPERAND,
|
|
||||||
"The element data type for an immediate constant buffer is not scalar integer or floating point.");
|
"The element data type for an immediate constant buffer is not scalar integer or floating point.");
|
||||||
return VKD3D_ERROR_INVALID_SHADER;
|
return VKD3D_ERROR_INVALID_SHADER;
|
||||||
}
|
}
|
||||||
@@ -3776,11 +3774,8 @@ static void sm6_parser_declare_tgsm_raw(struct sm6_parser *sm6, const struct sm6
|
|||||||
if (byte_count == 2)
|
if (byte_count == 2)
|
||||||
byte_count = 4;
|
byte_count = 4;
|
||||||
if (byte_count != 4)
|
if (byte_count != 4)
|
||||||
{
|
vkd3d_shader_parser_error(&sm6->p, VKD3D_SHADER_ERROR_DXIL_NOT_IMPLEMENTED,
|
||||||
FIXME("Unsupported byte count %u.\n", byte_count);
|
|
||||||
vkd3d_shader_parser_error(&sm6->p, VKD3D_SHADER_ERROR_DXIL_INVALID_OPERAND,
|
|
||||||
"Raw TGSM byte count %u is not supported.", byte_count);
|
"Raw TGSM byte count %u is not supported.", byte_count);
|
||||||
}
|
|
||||||
ins->declaration.tgsm_raw.byte_count = byte_count;
|
ins->declaration.tgsm_raw.byte_count = byte_count;
|
||||||
/* The initialiser value index will be resolved later when forward references can be handled. */
|
/* The initialiser value index will be resolved later when forward references can be handled. */
|
||||||
ins->flags = init;
|
ins->flags = init;
|
||||||
@@ -3802,11 +3797,8 @@ static void sm6_parser_declare_tgsm_structured(struct sm6_parser *sm6, const str
|
|||||||
dst->structure_stride = 4;
|
dst->structure_stride = 4;
|
||||||
vsir_register_from_dxil_value(&ins->declaration.tgsm_structured.reg.reg, dst, 0, sm6);
|
vsir_register_from_dxil_value(&ins->declaration.tgsm_structured.reg.reg, dst, 0, sm6);
|
||||||
if (dst->structure_stride != 4)
|
if (dst->structure_stride != 4)
|
||||||
{
|
vkd3d_shader_parser_error(&sm6->p, VKD3D_SHADER_ERROR_DXIL_NOT_IMPLEMENTED,
|
||||||
FIXME("Unsupported structure stride %u.\n", dst->structure_stride);
|
|
||||||
vkd3d_shader_parser_error(&sm6->p, VKD3D_SHADER_ERROR_DXIL_INVALID_OPERAND,
|
|
||||||
"Structured TGSM byte stride %u is not supported.", dst->structure_stride);
|
"Structured TGSM byte stride %u is not supported.", dst->structure_stride);
|
||||||
}
|
|
||||||
ins->declaration.tgsm_structured.alignment = alignment;
|
ins->declaration.tgsm_structured.alignment = alignment;
|
||||||
ins->declaration.tgsm_structured.byte_stride = dst->structure_stride;
|
ins->declaration.tgsm_structured.byte_stride = dst->structure_stride;
|
||||||
ins->declaration.tgsm_structured.structure_count = count;
|
ins->declaration.tgsm_structured.structure_count = count;
|
||||||
@@ -3831,8 +3823,7 @@ static bool sm6_parser_declare_global(struct sm6_parser *sm6, const struct dxil_
|
|||||||
{
|
{
|
||||||
if (!sm6_type_is_scalar(type->u.array.elem_type))
|
if (!sm6_type_is_scalar(type->u.array.elem_type))
|
||||||
{
|
{
|
||||||
FIXME("Unsupported nested type class %u.\n", type->u.array.elem_type->class);
|
vkd3d_shader_parser_error(&sm6->p, VKD3D_SHADER_ERROR_DXIL_NOT_IMPLEMENTED,
|
||||||
vkd3d_shader_parser_error(&sm6->p, VKD3D_SHADER_ERROR_DXIL_INVALID_OPERAND,
|
|
||||||
"Global array variables with nested type class %u are not supported.",
|
"Global array variables with nested type class %u are not supported.",
|
||||||
type->u.array.elem_type->class);
|
type->u.array.elem_type->class);
|
||||||
return false;
|
return false;
|
||||||
@@ -3847,8 +3838,7 @@ static bool sm6_parser_declare_global(struct sm6_parser *sm6, const struct dxil_
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
FIXME("Unsupported type class %u.\n", type->class);
|
vkd3d_shader_parser_error(&sm6->p, VKD3D_SHADER_ERROR_DXIL_NOT_IMPLEMENTED,
|
||||||
vkd3d_shader_parser_error(&sm6->p, VKD3D_SHADER_ERROR_DXIL_INVALID_OPERAND,
|
|
||||||
"Global variables of type class %u are not supported.", type->class);
|
"Global variables of type class %u are not supported.", type->class);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -3953,8 +3943,7 @@ static bool sm6_parser_declare_global(struct sm6_parser *sm6, const struct dxil_
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
FIXME("Unhandled address space %"PRIu64".\n", address_space);
|
vkd3d_shader_parser_error(&sm6->p, VKD3D_SHADER_ERROR_DXIL_NOT_IMPLEMENTED,
|
||||||
vkd3d_shader_parser_error(&sm6->p, VKD3D_SHADER_ERROR_DXIL_INVALID_OPERAND,
|
|
||||||
"Global variables with address space %"PRIu64" are not supported.", address_space);
|
"Global variables with address space %"PRIu64" are not supported.", address_space);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -4011,8 +4000,7 @@ static bool resolve_forward_zero_initialiser(size_t index, struct sm6_parser *sm
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
FIXME("Non-zero initialisers are not supported.\n");
|
vkd3d_shader_parser_error(&sm6->p, VKD3D_SHADER_ERROR_DXIL_NOT_IMPLEMENTED,
|
||||||
vkd3d_shader_parser_error(&sm6->p, VKD3D_SHADER_ERROR_DXIL_INVALID_OPERAND,
|
|
||||||
"Non-zero TGSM initialisers are not supported.");
|
"Non-zero TGSM initialisers are not supported.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -4364,8 +4352,7 @@ static void sm6_parser_emit_alloca(struct sm6_parser *sm6, const struct dxil_rec
|
|||||||
WARN("Ignoring in_alloca flag.\n");
|
WARN("Ignoring in_alloca flag.\n");
|
||||||
if (!(packed_operands & ALLOCA_FLAG_EXPLICIT_TYPE))
|
if (!(packed_operands & ALLOCA_FLAG_EXPLICIT_TYPE))
|
||||||
{
|
{
|
||||||
FIXME("Unhandled implicit type.\n");
|
vkd3d_shader_parser_error(&sm6->p, VKD3D_SHADER_ERROR_DXIL_NOT_IMPLEMENTED,
|
||||||
vkd3d_shader_parser_error(&sm6->p, VKD3D_SHADER_ERROR_DXIL_INVALID_OPERAND,
|
|
||||||
"Implicit result type for ALLOCA instructions is not supported.");
|
"Implicit result type for ALLOCA instructions is not supported.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -4401,8 +4388,7 @@ static void sm6_parser_emit_alloca(struct sm6_parser *sm6, const struct dxil_rec
|
|||||||
/* A size of 1 means one instance of type[0], i.e. one array. */
|
/* A size of 1 means one instance of type[0], i.e. one array. */
|
||||||
if (sm6_value_get_constant_uint(size, sm6) != 1)
|
if (sm6_value_get_constant_uint(size, sm6) != 1)
|
||||||
{
|
{
|
||||||
FIXME("Allocation size is not 1.\n");
|
vkd3d_shader_parser_error(&sm6->p, VKD3D_SHADER_ERROR_DXIL_NOT_IMPLEMENTED,
|
||||||
vkd3d_shader_parser_error(&sm6->p, VKD3D_SHADER_ERROR_DXIL_INVALID_OPERAND,
|
|
||||||
"ALLOCA instruction allocation sizes other than 1 are not supported.");
|
"ALLOCA instruction allocation sizes other than 1 are not supported.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -4484,8 +4470,7 @@ static void sm6_parser_emit_atomicrmw(struct sm6_parser *sm6, const struct dxil_
|
|||||||
|
|
||||||
if ((op = map_dx_atomicrmw_op(code = record->operands[i++])) == VSIR_OP_INVALID)
|
if ((op = map_dx_atomicrmw_op(code = record->operands[i++])) == VSIR_OP_INVALID)
|
||||||
{
|
{
|
||||||
FIXME("Unhandled atomicrmw op %"PRIu64".\n", code);
|
vkd3d_shader_parser_error(&sm6->p, VKD3D_SHADER_ERROR_DXIL_NOT_IMPLEMENTED,
|
||||||
vkd3d_shader_parser_error(&sm6->p, VKD3D_SHADER_ERROR_DXIL_INVALID_OPERAND,
|
|
||||||
"Operation %"PRIu64" for an atomicrmw instruction is unhandled.", code);
|
"Operation %"PRIu64" for an atomicrmw instruction is unhandled.", code);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -4613,8 +4598,7 @@ static enum vkd3d_shader_opcode map_binary_op(uint64_t code, const struct sm6_ty
|
|||||||
is_valid = is_int;
|
is_valid = is_int;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
FIXME("Unhandled binary op %#"PRIx64".\n", code);
|
vkd3d_shader_parser_error(&sm6->p, VKD3D_SHADER_ERROR_DXIL_NOT_IMPLEMENTED,
|
||||||
vkd3d_shader_parser_error(&sm6->p, VKD3D_SHADER_ERROR_DXIL_INVALID_OPERAND,
|
|
||||||
"Binary operation %#"PRIx64" is unhandled.", code);
|
"Binary operation %#"PRIx64" is unhandled.", code);
|
||||||
return VSIR_OP_INVALID;
|
return VSIR_OP_INVALID;
|
||||||
}
|
}
|
||||||
@@ -5055,8 +5039,7 @@ static enum vkd3d_shader_opcode map_dx_atomic_binop(const struct sm6_value *oper
|
|||||||
return VSIR_OP_IMM_ATOMIC_XOR;
|
return VSIR_OP_IMM_ATOMIC_XOR;
|
||||||
/* DXIL currently doesn't use SUB and NAND. */
|
/* DXIL currently doesn't use SUB and NAND. */
|
||||||
default:
|
default:
|
||||||
FIXME("Unhandled atomic binop %"PRIu64".\n", code);
|
vkd3d_shader_parser_error(&sm6->p, VKD3D_SHADER_ERROR_DXIL_NOT_IMPLEMENTED,
|
||||||
vkd3d_shader_parser_error(&sm6->p, VKD3D_SHADER_ERROR_DXIL_INVALID_OPERAND,
|
|
||||||
"Operation %"PRIu64" for an atomic binop instruction is unhandled.", code);
|
"Operation %"PRIu64" for an atomic binop instruction is unhandled.", code);
|
||||||
return VSIR_OP_INVALID;
|
return VSIR_OP_INVALID;
|
||||||
}
|
}
|
||||||
@@ -5164,8 +5147,7 @@ static void sm6_parser_emit_dx_buffer_update_counter(struct sm6_parser *sm6, enu
|
|||||||
|
|
||||||
if (!sm6_value_is_constant(operands[1]))
|
if (!sm6_value_is_constant(operands[1]))
|
||||||
{
|
{
|
||||||
FIXME("Unsupported dynamic update operand.\n");
|
vkd3d_shader_parser_error(&sm6->p, VKD3D_SHADER_ERROR_DXIL_NOT_IMPLEMENTED,
|
||||||
vkd3d_shader_parser_error(&sm6->p, VKD3D_SHADER_ERROR_DXIL_INVALID_OPERAND,
|
|
||||||
"A dynamic update value for a UAV counter operation is not supported.");
|
"A dynamic update value for a UAV counter operation is not supported.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -746,6 +746,14 @@ void VKD3D_PRINTF_FUNC(3, 4) vkd3d_shader_parser_error(struct vkd3d_shader_parse
|
|||||||
{
|
{
|
||||||
switch (error)
|
switch (error)
|
||||||
{
|
{
|
||||||
|
case VKD3D_SHADER_ERROR_SPV_NOT_IMPLEMENTED:
|
||||||
|
case VKD3D_SHADER_ERROR_HLSL_NOT_IMPLEMENTED:
|
||||||
|
case VKD3D_SHADER_ERROR_D3DBC_NOT_IMPLEMENTED:
|
||||||
|
case VKD3D_SHADER_ERROR_DXIL_NOT_IMPLEMENTED:
|
||||||
|
case VKD3D_SHADER_ERROR_VSIR_NOT_IMPLEMENTED:
|
||||||
|
case VKD3D_SHADER_ERROR_FX_NOT_IMPLEMENTED:
|
||||||
|
parser->status = VKD3D_ERROR_NOT_IMPLEMENTED;
|
||||||
|
break;
|
||||||
case VKD3D_SHADER_ERROR_DXBC_OUT_OF_MEMORY:
|
case VKD3D_SHADER_ERROR_DXBC_OUT_OF_MEMORY:
|
||||||
case VKD3D_SHADER_ERROR_TPF_OUT_OF_MEMORY:
|
case VKD3D_SHADER_ERROR_TPF_OUT_OF_MEMORY:
|
||||||
case VKD3D_SHADER_ERROR_SPV_OUT_OF_MEMORY:
|
case VKD3D_SHADER_ERROR_SPV_OUT_OF_MEMORY:
|
||||||
|
|||||||
@@ -226,6 +226,7 @@ enum vkd3d_shader_error
|
|||||||
VKD3D_SHADER_ERROR_DXIL_INVALID_RESOURCES = 8018,
|
VKD3D_SHADER_ERROR_DXIL_INVALID_RESOURCES = 8018,
|
||||||
VKD3D_SHADER_ERROR_DXIL_INVALID_RESOURCE_HANDLE = 8019,
|
VKD3D_SHADER_ERROR_DXIL_INVALID_RESOURCE_HANDLE = 8019,
|
||||||
VKD3D_SHADER_ERROR_DXIL_INVALID_CONSTANT = 8020,
|
VKD3D_SHADER_ERROR_DXIL_INVALID_CONSTANT = 8020,
|
||||||
|
VKD3D_SHADER_ERROR_DXIL_NOT_IMPLEMENTED = 8021,
|
||||||
|
|
||||||
VKD3D_SHADER_WARNING_DXIL_UNKNOWN_MAGIC_NUMBER = 8300,
|
VKD3D_SHADER_WARNING_DXIL_UNKNOWN_MAGIC_NUMBER = 8300,
|
||||||
VKD3D_SHADER_WARNING_DXIL_UNKNOWN_SHADER_TYPE = 8301,
|
VKD3D_SHADER_WARNING_DXIL_UNKNOWN_SHADER_TYPE = 8301,
|
||||||
|
|||||||
Reference in New Issue
Block a user