khronosgroup / basis-universal-transcoders Goto Github PK
View Code? Open in Web Editor NEWA collection of optimized WebAssembly transcoders for Basis Universal compressed GPU texture formats.
License: Apache License 2.0
A collection of optimized WebAssembly transcoders for Basis Universal compressed GPU texture formats.
License: Apache License 2.0
Use of unsigned types slightly improves the performance. Early tests show that the compiled binary remains the same with the only difference being instructions like shr_s
, gt_s
, etc being replaced with their unsigned counterparts. However, some code paths are faster with signed types, so further evaluation is required.
Per discussion last week, is it OK if I rename this repository Basis-Universal-Transcoders
? GitHub will automatically redirect from the old URL.
/cc @lexaknyazev @bghgary
Replace it to builtin intrinsics after landing AssemblyScript/assemblyscript#1474
I realize the implementation status table shows "planned" for this and other transcoding paths, but in case there's a need to prioritize among them — I would personally vote for BasisLZ → RGBA8 as the highest-priority item on the list.
All of the existing BasisU decoders (libktx, basisu, ...) are pretty complex to use as dependencies of a library, by JavaScript standards. Users can't just install the library anymore, they now have to install my library, and then install the BasisU decoder, and configure their build tools to deal with the WASM, which varies by build tool and platform and module syntax. The KhronosGroup/Basis-Universal-Transcoders project is (IMHO) the easiest to deal with of the available decoders, as a library author. But it's still prohibitively complex for me to try to support this alongside basisu or libktx — using this project for formats it supports, and another project for other formats. So far, that has unfortunately prevented me from using the KhronosGroup/Basis-Universal-Transcoders decoders at all. Not meant as a criticism, but hopefully a helpful FYI for maintainers. :)
The shortest path that would unblock my using this library would be having access to RGBA8 decoders for both UASTC and ETC1S. Even without the other transcode target formats, this allows me to at least use these lightweight transcoders for applications that just need to decode the images, e.g. to show small thumbnails of embedded textures.
Store pre-expanded partition patterns instead of expanding them on the fly. This requires further specializing memory page 0 layouts for different target formats. Afterwards, some (if not all) branches in weights inversion routines for ASTC and BC7 could be eliminated.
Some parts of UASTC transcoders have lots of similar operations, so they likely could be implemented more efficiently via SIMD instructions.
References:
See #13 (comment) as a starting point.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.