SPIRV-Tools/source
Neil Roberts 57a2441791 hex_float: Use max_digits10 for the float precision
CPPreference.com has this description of digits10:

“The value of std::numeric_limits<T>::digits10 is the number of
 base-10 digits that can be represented by the type T without change,
 that is, any number with this many significant decimal digits can be
 converted to a value of type T and back to decimal form, without
 change due to rounding or overflow.”

This means that any number with this many digits can be represented
accurately in the corresponding type. A change in any digit in a
number after that may or may not cause it a different bitwise
representation. Therefore this isn’t necessarily enough precision to
accurately represent the value in text. Instead we need max_digits10
which has the following description:

“The value of std::numeric_limits<T>::max_digits10 is the number of
 base-10 digits that are necessary to uniquely represent all distinct
 values of the type T, such as necessary for
 serialization/deserialization to text.”

The patch includes a test case in hex_float_test which tries to do a
round-robin conversion of a number that requires more than 6 decimal
places to be accurately represented. This would fail without the
patch.

Sadly this also breaks a bunch of other tests. Some of the tests in
hex_float_test use ldexp and then compare it with a value which is not
the same as the one returned by ldexp but instead is the value rounded
to 6 decimals. Others use values that are not evenly representable as
a binary floating fraction but then happened to generate the same
value when rounded to 6 decimals. Where the actual value didn’t seem
to matter these have been changed with different values that can be
represented as a binary fraction.
2018-04-03 12:53:10 -04:00
..
comp Remove concept of FIRST_CONCRETE_* operand types 2017-12-18 09:48:51 -05:00
link linker: merge debug annotations from category c) 2018-02-27 12:31:50 -05:00
opt In copy-prop-arrays, indentify copies via OpCompositeInsert 2018-03-29 09:39:55 -04:00
util hex_float: Use max_digits10 for the float precision 2018-04-03 12:53:10 -04:00
val Add Vulkan validation rules for BuiltIn variables 2018-03-23 14:02:42 -04:00
assembly_grammar.cpp Migrate to use unified grammar tables 2018-03-17 15:25:26 -04:00
assembly_grammar.h Add Vulkan validation rules for BuiltIn variables 2018-03-23 14:02:42 -04:00
binary.cpp Consistently include latest spirv.h header file. 2018-02-27 18:47:29 -05:00
binary.h Support building under CYGWIN 2016-12-21 10:34:23 -05:00
cfa.h Fixes compile errors generated with -Wpedantic 2018-03-22 09:40:11 -04:00
CMakeLists.txt Add Vulkan validation rules for BuiltIn variables 2018-03-23 14:02:42 -04:00
diagnostic.cpp Move SetContextMessageConsumer into libspirv namespace 2017-11-23 13:56:12 -05:00
diagnostic.h DiagnosticStream move ctor moves output duties to new object 2017-10-03 11:23:54 -04:00
disassemble.cpp Adding ostream operators for IR structures 2018-01-12 11:19:58 -05:00
disassemble.h Adding ostream operators for IR structures 2018-01-12 11:19:58 -05:00
enum_set.h Refactor include of latest spir-v header versions 2017-12-14 11:18:20 -05:00
enum_string_mapping.cpp Avoid using static unordered_map (#1304) 2018-02-15 10:19:15 -05:00
enum_string_mapping.h Consistently include latest spirv.h header file. 2018-02-27 18:47:29 -05:00
ext_inst.cpp Support SPIR-V 1.3 and Vulkan 1.1 2018-03-06 15:17:31 -05:00
ext_inst.h Relicense SPIRV-Tools under Apache 2.0 2016-09-02 10:00:29 -04:00
extensions.cpp Re-format files in source, source/opt, source/util, source/val and tools. 2017-11-08 14:03:08 -05:00
extensions.h Turn all function static non-POD variables into global POD variables 2017-10-25 15:44:19 -04:00
extinst.debuginfo.grammar.json Add asm, dis support for DebugInfo extended instruction set 2017-12-22 09:39:36 -05:00
extinst.spv-amd-gcn-shader.grammar.json Fix spelling in SPV_AMD_gcn_shader support 2017-04-03 14:59:18 -04:00
extinst.spv-amd-shader-ballot.grammar.json Add support for SPV AMD extensions 2017-06-21 15:08:07 -04:00
extinst.spv-amd-shader-explicit-vertex-parameter.grammar.json Add support for SPV AMD extensions 2017-06-21 15:08:07 -04:00
extinst.spv-amd-shader-trinary-minmax.grammar.json Add support for SPV AMD extensions 2017-06-21 15:08:07 -04:00
id_descriptor.cpp Re-format source tree - NFC. 2017-11-27 14:31:49 -05:00
id_descriptor.h Add new compression algorithm and models 2017-11-21 17:32:58 -05:00
instruction.h Refactor include of latest spir-v header versions 2017-12-14 11:18:20 -05:00
latest_version_glsl_std_450_header.h Use SPIR-V headers from "unified1" directory 2018-01-31 15:36:50 -05:00
latest_version_opencl_std_header.h Use SPIR-V headers from "unified1" directory 2018-01-31 15:36:50 -05:00
latest_version_spirv_header.h Use SPIR-V headers from "unified1" directory 2018-01-31 15:36:50 -05:00
libspirv.cpp Linker code cleanups 2018-01-05 13:28:44 -05:00
macro.h Relicense SPIRV-Tools under Apache 2.0 2016-09-02 10:00:29 -04:00
message.cpp spirv-val prints warnings 2017-03-17 12:48:51 -04:00
message.h Clean up header dependency. 2016-09-22 18:15:23 -04:00
name_mapper.cpp Consistently include latest spirv.h header file. 2018-02-27 18:47:29 -05:00
name_mapper.h Re-format files in source, source/opt, source/util, source/val and tools. 2017-11-08 14:03:08 -05:00
opcode.cpp Use standard SPIR-V version scheme for version requirement 2018-03-29 12:06:54 -04:00
opcode.h Fixes #1403. 2018-03-28 09:04:08 -04:00
operand.cpp Use standard SPIR-V version scheme for version requirement 2018-03-29 12:06:54 -04:00
operand.h Migrate to use unified grammar tables 2018-03-17 15:25:26 -04:00
parsed_operand.cpp Extract EmitNumericLiteral from disassembler 2016-11-15 14:05:03 -05:00
parsed_operand.h Extract EmitNumericLiteral from disassembler 2016-11-15 14:05:03 -05:00
print.cpp Support outputting ANSI color escape sequences in library 2017-12-01 09:03:35 -05:00
print.h Support outputting ANSI color escape sequences in library 2017-12-01 09:03:35 -05:00
software_version.cpp Add missing function parameters in libspirv.h 2018-04-03 10:10:43 -04:00
spirv_constant.h Refactor include of latest spir-v header versions 2017-12-14 11:18:20 -05:00
spirv_definition.h Refactor include of latest spir-v header versions 2017-12-14 11:18:20 -05:00
spirv_endian.cpp Relicense SPIRV-Tools under Apache 2.0 2016-09-02 10:00:29 -04:00
spirv_endian.h Relicense SPIRV-Tools under Apache 2.0 2016-09-02 10:00:29 -04:00
spirv_stats.cpp Re-format files in source, source/opt, source/util, source/val and tools. 2017-11-08 14:03:08 -05:00
spirv_stats.h Re-format files in source, source/opt, source/util, source/val and tools. 2017-11-08 14:03:08 -05:00
spirv_target_env.cpp New spirv-1.3 rules for control barrier 2018-03-27 12:29:50 -04:00
spirv_target_env.h Added Vulkan-specifc checks to image validation 2018-01-24 14:05:42 -08:00
spirv_validator_options.cpp Add missing function parameters in libspirv.h 2018-04-03 10:10:43 -04:00
spirv_validator_options.h Allow relaxing validation of pointers in logical addressing mode 2018-01-08 10:36:23 -05:00
table.cpp Support SPIR-V 1.3 and Vulkan 1.1 2018-03-06 15:17:31 -05:00
table.h Migrate to use unified grammar tables 2018-03-17 15:25:26 -04:00
text_handler.cpp Re-format files in source, source/opt, source/util, source/val and tools. 2017-11-08 14:03:08 -05:00
text_handler.h Re-format source tree - NFC. 2017-11-27 14:31:49 -05:00
text.cpp Add asm, dis support for DebugInfo extended instruction set 2017-12-22 09:39:36 -05:00
text.h Relicense SPIRV-Tools under Apache 2.0 2016-09-02 10:00:29 -04:00
validate_adjacency.cpp Add adjacency validation pass 2018-02-01 14:10:55 -05:00
validate_arithmetics.cpp Re-format source tree - NFC. 2017-11-27 14:31:49 -05:00
validate_atomics.cpp Add Vulkan specific atomic result type restriction 2018-03-26 12:06:25 -04:00
validate_barriers.cpp New spirv-1.3 rules for control barrier 2018-03-27 12:29:50 -04:00
validate_bitwise.cpp Re-format source tree - NFC. 2017-11-27 14:31:49 -05:00
validate_builtins.cpp Add Vulkan validation rules for BuiltIn variables 2018-03-23 14:02:42 -04:00
validate_capability.cpp Improved error message in val capabilities 2018-01-30 16:22:10 -05:00
validate_cfg.cpp Add validation checks for Execution Model 2017-11-23 23:38:03 -05:00
validate_composites.cpp Fixes #1403. 2018-03-28 09:04:08 -04:00
validate_conversion.cpp Re-format files in source, source/opt, source/util, source/val and tools. 2017-11-08 14:03:08 -05:00
validate_datarules.cpp Re-format files in source, source/opt, source/util, source/val and tools. 2017-11-08 14:03:08 -05:00
validate_decorations.cpp Vulkan BuiltIn variables can't have Location/Component decorations 2018-03-01 15:00:08 -05:00
validate_derivatives.cpp Re-format source tree - NFC. 2017-11-27 14:31:49 -05:00
validate_ext_inst.cpp Added OpenCL ExtInst validation rules 2018-02-01 14:14:13 -05:00
validate_id.cpp Add missing <iterator> header for std::back_inserter 2018-03-30 11:30:25 -04:00
validate_image.cpp Add barrier instructions validation pass 2018-02-05 13:14:55 -05:00
validate_instruction.cpp Use standard SPIR-V version scheme for version requirement 2018-03-29 12:06:54 -04:00
validate_layout.cpp Re-format source tree - NFC. 2017-11-27 14:31:49 -05:00
validate_literals.cpp validate & test of literal's upper bits 2017-12-19 13:19:56 -05:00
validate_logicals.cpp Re-format source tree - NFC. 2017-11-27 14:31:49 -05:00
validate_primitives.cpp More validation on primitive instructions 2017-12-19 13:26:07 -05:00
validate_type_unique.cpp Re-format files in source, source/opt, source/util, source/val and tools. 2017-11-08 14:03:08 -05:00
validate.cpp Add Vulkan validation rules for BuiltIn variables 2018-03-23 14:02:42 -04:00
validate.h Add Vulkan validation rules for BuiltIn variables 2018-03-23 14:02:42 -04:00