From f13a5cff723eb9a7baf5850fdbf8d7ebefbb1677 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Mon, 11 Dec 2017 22:09:02 -0800 Subject: [PATCH] spirv: Unify boolean constants and add better validation Reviewed-by: Lionel Landwerlin --- src/compiler/spirv/spirv_to_nir.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c index 39c0b5f5dbc..ebc1fefc517 100644 --- a/src/compiler/spirv/spirv_to_nir.c +++ b/src/compiler/spirv/spirv_to_nir.c @@ -1281,19 +1281,20 @@ vtn_handle_constant(struct vtn_builder *b, SpvOp opcode, val->constant = rzalloc(b, nir_constant); switch (opcode) { case SpvOpConstantTrue: - vtn_assert(val->type->type == glsl_bool_type()); - val->constant->values[0].u32[0] = NIR_TRUE; - break; case SpvOpConstantFalse: - vtn_assert(val->type->type == glsl_bool_type()); - val->constant->values[0].u32[0] = NIR_FALSE; - break; - case SpvOpSpecConstantTrue: case SpvOpSpecConstantFalse: { - vtn_assert(val->type->type == glsl_bool_type()); - uint32_t int_val = - get_specialization(b, val, (opcode == SpvOpSpecConstantTrue)); + vtn_fail_if(val->type->type != glsl_bool_type(), + "Result type of %s must be OpTypeBool", + spirv_op_to_string(opcode)); + + uint32_t int_val = (opcode == SpvOpConstantTrue || + opcode == SpvOpSpecConstantTrue); + + if (opcode == SpvOpSpecConstantTrue || + opcode == SpvOpSpecConstantFalse) + int_val = get_specialization(b, val, int_val); + val->constant->values[0].u32[0] = int_val ? NIR_TRUE : NIR_FALSE; break; } -- 2.30.2