third_party/tinyexr/tools/texcomp/NOTICE.md
The TinyEXR texcomp texture-compression suite (everything under
tools/texcomp/) is original work licensed under the Apache License,
Version 2.0.
Copyright 2014-2026 Syoyo Fujita and TinyEXR authors
SPDX-License-Identifier: Apache-2.0
The full license text is in LICENSE in this directory, and every
source file carries an SPDX-License-Identifier: Apache-2.0 tag.
Note: this is a licensing choice for the texcomp subcomponent specifically. The rest of the TinyEXR project is BSD-3-Clause; Apache-2.0 is compatible with it for combined/redistributed works.
The pure-C11 library (make texcomp) has no third-party runtime
dependencies. The pieces below are either (a) vendored elsewhere in the repo
and only used by optional CLI/test targets, or (b) small ports / spec-data
transcriptions whose provenance is credited here and in the relevant file
headers.
deps/astcenc; license in
deps/astcenc/LICENSE.txt.make texcomp-arm builds astcenc as an alternate
encoder selectable with --encoder arm. The default make texcomp build is
pure C11 with no C++ parts.src/texcomp_astc_hdr.c
(tc_astc_cem7_pack/unpack, tc_astc_cem11_pack/unpack) are ports of
astcenc's quantize_hdr_rgbo, hdr_rgbo_unpack and hdr_rgb_unpack.texcomp-astc-arm-gate and
texcomp-astc-hdr-gate tests decode texcomp output with astcenc's conformant
decoder to verify correctness.test/bc7_ref_decode.h, and the BC6H two-region (mode 9) partition table
and block bit layout in src/texcomp_bc6h.c, are transcribed / mirrored
from bcdec (the tables published in the Khronos spec contain known errors).test/bc6h_ref_decode.h (all 14 modes) is a
C port of bcdec's bcdec_bc6h_half, used test-only as the conformance oracle
for the texcomp-bc6h-gate. It is not linked into the shipped library.src/texcomp_astc.c, and the BC6H/BC7 block bit
layouts, follow the Khronos Data Format Specification (ASTC) and the BPTC
spec. Specification data (constants, bit layouts) is not copyrightable.--format uastc_ldr / astc_hdr follow the Basis UASTC specifications (all
output is standard ASTC). The xbc7 format is a texcomp-native take on the
XBC7 idea (windowed RDO + entropy coding of BC7) — it is not
bitstream-compatible with Basis XBC7.uni universal-transcodable intermediate (--format uni,
src/texcomp_uni.c: encode once, transcode at load to BC7/BC1/ASTC/ETC2)
follows the concept pioneered by Basis Universal / UASTC — a canonical
single-subset block re-packed cheaply to the device's GPU format. It is a
texcomp-native intermediate and is not the Basis .basis/UASTC bitstream.
Its optional codebook supercompression (--basis) is a BasisLZ-style
endpoint/selector deduplication with RDO; it is not the Basis ETC1S codec
and does not emit KTX2 supercompressionScheme=1 (BasisLZ) — the KTX2 output
uses Zstd (scheme 2) with the codebook as an inner pre-transform.b88c8f4).deps/zstd
(tinyexr_zstd). The xbc7 container entropy-codes the BC7 stream with zstd,
and the uni KTX2 writer uses zstd for per-level supercompression
(supercompressionScheme=2). Only the CLI links zstd; the pure-C11 texcomp
library does not depend on it.examples/common/stb_image.h, used by the CLI (texcomp_cli.c)
only, for PNG loading.--rdo).--format uastc_ldr).--basis) + Zstd KTX2 mip chain.Conformance is verified by in-tree reference decoders (test/astc_ref_decode.h,
test/bc7_ref_decode.h, test/astc_hdr_ref_decode.h) and by cross-checks
against astcenc; quality is tracked by make texcomp-astc-psnr.