This update impacts the UASTC HDR 4x4, UASTC HDR 6x6i, and XUASTC LDR formats. New KTX2 files in these specific formats using v2.1 can't be loaded using v2.0, however we've kept backwards compatibility with all of our previously written KTX2 files. (v2.1 can transcode all previously written files.) This is part of our effort to be compatible with Khronos's specification. bc6hf encoder's smooth block path updated to handle inputs with texels close to MAX_HALF_FLOAT. Adding command line options to basisu tool so it can write either v2.0 or v1.6 compatible UASTC HDR 6x6i files. The default is v1.6. Updating WebGL KTX2 testbed so on ASTC devices it automatically switches between sRGB or linear internal formats for the created texture.
Python support is still new and coming online, but is entirely functional. The library's pure C (WASM friendly) API's are completely exposed to Python. Our next goal is to work on official Wheels, once the API is settled and more examples are written.
The Python integration first tries to use native .so's in the basisu_py directory. If they don't exist, it tries the slower and single threaded WASM fallbacks under basisu_py/wasm, which requires wasmtime for Python to be installed. Some tests require an input.ktx2 or test.ktx2 to be in the current directory.
Building:
Under the repo's root directory - build the native SO's:
mkdir build_python
cd build_python
cmake -DBASISU_BUILD_PYTHON=ON ..
make
Build the WASM modules (see README_WASI.md file for instructions on how to install the WASI SDK, which is required):
mkdir build_wasm_st
cd build_wasm_st
cmake .. -DCMAKE_TOOLCHAIN_FILE=$WASI_SDK_PATH/share/cmake/wasi-sdk.cmake -DCMAKE_BUILD_TYPE=Release -DBASISU_WASM_THREADING=OFF
make
Running Tests
The tests assume the current directory is "python". Under Windows we've tested with Python v3.12.10, and under Linux v3.12.13.
Higher-level tests:
- python3 -m tests.test_backend_loading
- python3 -m tests.test_basic_wasm_selection
- python3 -m tests.test_basic_backend_selection
- python3 -m tests.test_basic_decode
- python3 -m tests.test_basic_transcode
- python3 -m tests.test_compress_swirl
- python3 -m tests.test_compress_swirl_hdr
- python3 -m tests.test_transcoder_astc
- python3 -m tests.test_transcoder_backend_loading
- python3 -m tests.test_transcoder_end_to_end
- python3 -m tests.test_transcoder_end_to_end_hdr
- python3 -m tests.test_transcoder_helpers
Low-level tests (used while bringing up the codec):
- python3 -m lowlevel_test_native.basic_test
- python3 -m lowlevel_test_native.test_transcoder_basic
- python3 -m lowlevel_test_native.example_capi_python
- python3 -m lowlevel_test_wasm.basic_test
- python3 -m lowlevel_test_wasm.compress_test
- python3 -m lowlevel_test_wasm.compress_test_float
Example output:
richg@ryzen9:/mnt/c/dev/bu_1_22_snapshot2/basis_universal-master/python$ python3 -m tests.test_backend_loading
========== BACKEND LOADING TEST ==========
Testing native backend...
[Encoder] Using native backend
[OK] Native backend loaded
Hello from basisu_wasm_api.cpp version 200
Native get_version() ? 200
Native alloc() returned ptr = 685784256
Native free() OK
[OK] Native basic operations working.
Testing WASM backend...
[WASM Encoder] Loaded: /mnt/c/dev/bu_1_22_snapshot2/basis_universal-master/python/basisu_py/wasm/basisu_module_st.wasm
[Encoder] Using WASM backend
[OK] WASM backend loaded
Hello from basisu_wasm_api.cpp version 200
WASM get_version() ? 200
WASM alloc() returned ptr = 26920160
WASM free() OK
[OK] WASM basic operations working.
========== DONE ==========