mirror of
https://github.com/KhronosGroup/SPIRV-Tools
synced 2024-10-18 11:10:05 +00:00
Add support for LiteralFloat type (#5323)
Signed-off-by: Arvind Sudarsanam <arvind.sudarsanam@intel.com>
This commit is contained in:
parent
85a4482131
commit
6add9ccf07
@ -143,6 +143,7 @@ typedef enum spv_operand_type_t {
|
||||
// may be larger than 32, which would require such a typed literal value to
|
||||
// occupy multiple SPIR-V words.
|
||||
SPV_OPERAND_TYPE_TYPED_LITERAL_NUMBER,
|
||||
SPV_OPERAND_TYPE_LITERAL_FLOAT, // Always 32-bit float.
|
||||
|
||||
// Set 3: The literal string operand type.
|
||||
SPV_OPERAND_TYPE_LITERAL_STRING,
|
||||
|
@ -546,6 +546,13 @@ spv_result_t Parser::parseOperand(size_t inst_offset,
|
||||
parsed_operand.number_bit_width = 32;
|
||||
break;
|
||||
|
||||
case SPV_OPERAND_TYPE_LITERAL_FLOAT:
|
||||
// These are regular single-word literal float operands.
|
||||
parsed_operand.type = SPV_OPERAND_TYPE_LITERAL_FLOAT;
|
||||
parsed_operand.number_kind = SPV_NUMBER_FLOATING;
|
||||
parsed_operand.number_bit_width = 32;
|
||||
break;
|
||||
|
||||
case SPV_OPERAND_TYPE_TYPED_LITERAL_NUMBER:
|
||||
case SPV_OPERAND_TYPE_OPTIONAL_TYPED_LITERAL_INTEGER:
|
||||
parsed_operand.type = SPV_OPERAND_TYPE_TYPED_LITERAL_NUMBER;
|
||||
|
@ -2038,6 +2038,10 @@ spv_number_kind_t Differ::GetNumberKind(const IdInstructions& id_to,
|
||||
// Always unsigned integers.
|
||||
*number_bit_width = 32;
|
||||
return SPV_NUMBER_UNSIGNED_INT;
|
||||
case SPV_OPERAND_TYPE_LITERAL_FLOAT:
|
||||
// Always float.
|
||||
*number_bit_width = 32;
|
||||
return SPV_NUMBER_FLOATING;
|
||||
case SPV_OPERAND_TYPE_TYPED_LITERAL_NUMBER:
|
||||
case SPV_OPERAND_TYPE_OPTIONAL_TYPED_LITERAL_INTEGER:
|
||||
switch (inst.opcode()) {
|
||||
|
@ -357,7 +357,8 @@ void InstructionDisassembler::EmitOperand(const spv_parsed_instruction_t& inst,
|
||||
stream_ << opcode_desc->name;
|
||||
} break;
|
||||
case SPV_OPERAND_TYPE_LITERAL_INTEGER:
|
||||
case SPV_OPERAND_TYPE_TYPED_LITERAL_NUMBER: {
|
||||
case SPV_OPERAND_TYPE_TYPED_LITERAL_NUMBER:
|
||||
case SPV_OPERAND_TYPE_LITERAL_FLOAT: {
|
||||
SetRed();
|
||||
EmitNumericLiteral(&stream_, inst, operand);
|
||||
ResetColor();
|
||||
|
@ -155,6 +155,7 @@ const char* spvOperandTypeStr(spv_operand_type_t type) {
|
||||
case SPV_OPERAND_TYPE_LITERAL_INTEGER:
|
||||
case SPV_OPERAND_TYPE_OPTIONAL_LITERAL_INTEGER:
|
||||
case SPV_OPERAND_TYPE_OPTIONAL_LITERAL_NUMBER:
|
||||
case SPV_OPERAND_TYPE_LITERAL_FLOAT:
|
||||
return "literal number";
|
||||
case SPV_OPERAND_TYPE_OPTIONAL_TYPED_LITERAL_INTEGER:
|
||||
return "possibly multi-word literal integer";
|
||||
@ -332,6 +333,7 @@ bool spvOperandIsConcrete(spv_operand_type_t type) {
|
||||
}
|
||||
switch (type) {
|
||||
case SPV_OPERAND_TYPE_LITERAL_INTEGER:
|
||||
case SPV_OPERAND_TYPE_LITERAL_FLOAT:
|
||||
case SPV_OPERAND_TYPE_EXTENSION_INSTRUCTION_NUMBER:
|
||||
case SPV_OPERAND_TYPE_SPEC_CONSTANT_OP_NUMBER:
|
||||
case SPV_OPERAND_TYPE_TYPED_LITERAL_NUMBER:
|
||||
|
@ -24,6 +24,7 @@ namespace spvtools {
|
||||
void EmitNumericLiteral(std::ostream* out, const spv_parsed_instruction_t& inst,
|
||||
const spv_parsed_operand_t& operand) {
|
||||
if (operand.type != SPV_OPERAND_TYPE_LITERAL_INTEGER &&
|
||||
operand.type != SPV_OPERAND_TYPE_LITERAL_FLOAT &&
|
||||
operand.type != SPV_OPERAND_TYPE_TYPED_LITERAL_NUMBER &&
|
||||
operand.type != SPV_OPERAND_TYPE_OPTIONAL_LITERAL_INTEGER &&
|
||||
operand.type != SPV_OPERAND_TYPE_OPTIONAL_TYPED_LITERAL_INTEGER)
|
||||
|
@ -312,6 +312,17 @@ spv_result_t spvTextEncodeOperand(const spvtools::AssemblyGrammar& grammar,
|
||||
}
|
||||
} break;
|
||||
|
||||
case SPV_OPERAND_TYPE_LITERAL_FLOAT: {
|
||||
// The current operand is a 32-bit float.
|
||||
// That's just how the grammar works.
|
||||
spvtools::IdType expected_type = {
|
||||
32, false, spvtools::IdTypeClass::kScalarFloatType};
|
||||
if (auto error = context->binaryEncodeNumericLiteral(
|
||||
textValue, error_code_for_literals, expected_type, pInst)) {
|
||||
return error;
|
||||
}
|
||||
} break;
|
||||
|
||||
case SPV_OPERAND_TYPE_OPTIONAL_LITERAL_NUMBER:
|
||||
// This is a context-independent literal number which can be a 32-bit
|
||||
// number of floating point value.
|
||||
|
Loading…
Reference in New Issue
Block a user