Richard Geldreich's Blog
Co-owner of Binomial LLC, working on GPU texture interchange. Open source developer, Open Geospatial Consortium member, graphics programmer, former video game developer. Worked previously at SpaceX (Starlink), Valve, Ensemble Studios (Microsoft), DICE Canada.
- Posts
- 366 from 26 Jul 2012 to 29 Oct 2026
- Posting
- weekly (53 in the last year)
- Kind
- personal blog
- Feed
- https://richg42.blogspot.com/feeds/posts/default
2026 53
- neural_upsampler: neural 2x upsampling as a tiny drop-in C++ library
- Neural JPEG artifact reduction in C++
- A heavily perceptual LRDO XUASTC LDR encoder is coming soon
- NNTC PBR material set compressor: now supports CPU encoding
- Latent-based GPU texture public Prior Art from 2012
- NNTC viewing example which uses VK_NV_cooperative_vector
- Notes on NNTC vs. neural texturing
- NNTC repo now on GitHub
- Neural texture decoders can suppress DCT ringing artifacts within latent features
- New GitHub repo release: "neural_block_textures"
- Neural block textures vs. GPU textures (like BC7) at Equal Bitrates
- Neural block textures stored inside KTX2: a near-perfect fit
- Neural block GPU texture compression: Prior Art disclosure
- Neural block texturing example
- Neural block texture compression trained with Evolution Strategies (ES) on GitHub
- Neural block texture compression with CUDA
- Neural GPU block compression
- Fitting Neural Textures and PBR Material Maps with ES (No Backprop)
- Mirror of neural texture compression trained with Evolution Strategies
- ETC1S Chroma Artifact Filtering, Real-Time Encoders and Transcoding Format Graph Expansion
- Fitting a neural texture decoder with ES (no backprop)
- XUBC7 Low-Level Format Document
- In-loop deblocking of GPU textures
- Basis Universal v2.50 has shipped with ASTC in-loop deblocking, XUBC7, and universal .DDS transcoding
- Basis Universal library .DDS support coming in v2.5
- XUBC7/XBC7: Trellis quantization added
- XBC7 planning
- XBC7/XUBC7 (supercompressed weight grid residual DCT+endpoint DPCM+Zstd) prototype is done
- Intra-Residual Weight Grid DCT/DST for BC7/ASTC
- "Shrek" Xbox
- Basis Universal v2.5 with in-loop deblocking: shipping soon
- bug found in Intel's ASTC compressor (part of ispc_texcomp)
- Block blurring (prefiltering)
- Large block size ASTC has been misunderstood
- Petascale changes everything
- My day job: optimizing this equation
- XUASTC's next step: Intra-prediction of weight grids
- First XUASTC LDR 4x4 rate-distortion graphs
- Open Geospatial Consortium membership
- Basis Universal v2.1 library wiki mirror
- The KTX-Software repo has been forked
- Degenerate but valid ASTC configs: suboptimal CEM encodings
- Updated: "ASTC GPU Texture Decoding: Software Decoders, Spec Issues, and ARM Errata"
- .ASTC (the File Format): No Longer a Black Box
- ASTC Decoding: Software Decoders, Spec Issues, and ARM Errata
- ARM ASTC Decoding Errata
- Some things we've learned about GPU textures at planetary scale
- The Three Generations of GPU Texture Distribution
- ASTC Texture Sampling with Deblocking in a Simple Pixel Shader
- GPU Textures as Derived (Compiled) Data
- JPEG for ASTC
- Basis Universal v2.0: ASTC and XUASTC Usage Guide Is Live
- bc7f: A New Real-Time Analytical BC7 Encoder
2023 7
- LZ_XOR/LZ_ADD progress
- Somewhere Range Coding went off the rails
- Comparing Vectorized Huffman and Range Decoding vs. rANS (Or: rANS entropy coding is overrated)
- Vectorized interleaved Range Coding using SSE 4.1
- Faster LZ is not the answer to 150-250+ GB video game downloads
- The Dark Horse of the Image Codec World: Near-Lossless Image Formats Using Ultra-Fast LZ Codecs
- EA/Microsoft Neural Network GPU Texture Compression Patents
2022 7
2021 25
- Lena is Retired
- Average rate-distortion curves for bc7enc_rdo
- First RDO LDR ASTC 6x6 encodings
- First-ever RDO ASTC encodings
- bc7e.ispc integrated into bc7enc_rdo
- Updated bc7enc_rdo with improved smooth block handling
- Dirac video codec authors on Rate-Distortion Optimization
- Weighted/biased BC7 encoding for reduced output data entropy (with no slowdowns)
- bc7enc_rdo now supports RDO for all BC1-7 texture formats
- Entropy Reduction Transform on BC1 texture data
- bc7enc_rdo encoding examples
- Graphing length of introduced matches in the BC7 ERT
- RDO texture encoding notes
- bc7enc_rdo repo updated
- More RDO BC7 encoding - new algorithm
- Low bitrate RDO BC7 with lzham_devel
- More RDO BC7 progress
- BC7 RDO rate distortion curves
- Lagrangian multiplier based RDO encoding early outs
- BC7 DDS file entropy visualization
- The two types of RDO BC7 encoders
- Simple and fast ways to reduce BC7's output entropy (and increase LZ matches)
- More RDO BC7 encoder progress
- RDO BC1-BC7 progress
- How to benchmark or use the UASTC encoder in the Basis Universal library
2020 12
- LZHAM and crunch are now Public Domain software
- LZHAM and "crunch" IP will be placed into the Public Domain on 9/15/2020
- Yet another BC1 encoder benchmark
- BC1 encoding initial endpoint determination benchmark
- AMD GPU BC1 decoding lookup tables
- CPU BC1 Encoding Pareto Frontier
- New BC1 benchmark
- UASTC benchmark
- LDR ASTC mode list (all CEM's the same)
- ARM's ASTC encoder now uses the Apache 2.0 license
- UASTC1 block format encoding, revision 8
- Universal ASTC (UASTC) Tech Details
2019 12
- Parsing ASTC's overly restrictive end user license
- ARM's ASTC encoder patents - is it safe to write encoders for this format?
- Unified texture encoder for BC7 and ASTC 4x4
- Idea for next texture compression experiment (originally published 9/11/16)
- Few more random thoughts on a "universal" GPU texture format (originally published 9/9/16)
- More universal GPU texture format stuff (originally published 9/9/16)
- Few more random thoughts on a "universal" GPU texture format (originally published 9/9/16)
- Universal texture compression: 5th experiment (originally published 9/15/16)
- Direct conversion of ETC1 to DXT1 texture data: 4th experiment (originally published 9/11/16)
- Direct conversion of ETC1 to DXT1 texture data: 3rd experiment (originally published 9/7/16)
- Direct conversion of ETC1 to DXT1 texture data: 2nd experiment (originally published 9/06/16)
- Direct conversion of ETC1 to DXT1 texture data (originally published 9/11/16)
2018 43
- Existing BC7 codecs don't handle textures with decorrelated alpha channels well
- Tech company patterns
- This is why we're working on Basis.
- A little ETC1S history
- Basis status update
- PVRTC encoding examples
- Real-time PVRTC encoding for a universal GPU texture format system
- Lookup table based real-time PVRTC encoding
- ETC1S texture format encoding and how it's transcoded to BC1
- How to improve crunch's codebook generators
- Better PVRTC encoding
- xmen_1024 encoded to .basis at various bitrates
- Basis universal GPU texture format examples
- Some Basis baseline universal format details
- Graphing BC7 with random codec options
- BC7 opaque encoding sweetspots
- Graphing our BC7 encoder's quality vs. encoding time for opaque textures
- Basis non-RDO BC7 benchmark
- BC7 mode 0-only encoding examples
- One last non-RDO BC7 benchmark: ispc_texcomp slow vs. my encoder in perceptual mode
- BC7 showdown #2: Basis ispc vs. NVidia Texture Tools vs. ispc_texcomp slow
- New BC7 encoder open sourced
- A tale of multiple BC7 encoders
- Comparing ispc_texcomp alpha performance vs. my encoder
- BC7 mode utilization comparison of three encoders
- GPU texture compression error metrics
- LZHAM decompressor vectorization
- DirectXTex BC7 3 subset wierdness
- Proper pbit computation in the BC7 texture format
- RDO BC7 encoder planning
- BC7 showdown: ispc_texcomp vs. my ispc encoder
- ispc_texcomp BC7 issues
- A few Intel SPMD Compiler (ispc) C porting tips
- BC7 encoding using weighted YCbCr colorspace metrics
- Imaginary GPU formats
- Basis feature support
- Basis GPU format support update
- Basis update - now with PVRTC support!
- Basis v1.11 with universal GPU texture support has shipped
- On Age DE's pathing/movement
- Age DE's latency matrix
- Lessons learned while developing Age of Empires 1 Definitive Edition
- 10 abusive company types
2017 24
- Universal GPU texture codec update
- More universal GPU texture format examples
- Universal GPU texture format: DXT5 support
- "Universal" GPU texture/image format examples
- On whiteboard coding interviews
- Things learned while running your own self-funded startup
- Why crunch likes uncompressed texture data
- Seattle
- Basis's RDO DXTc compression API
- Binomial stuff
- Basis status
- Probiotic yogurt making
- Nerd/Brogrammer spectrum
- Virtual selector codebook example image
- Virtual global selector codebooks in Basis
- Interesting looking ETC1/2 encoder
- Adaptogens
- "Hybrid" supercompressed texture approach
- Basis ETC1 support progress
- Basis ETC1 intermediate format support is now round-tripping
- ETC1 intermediate format progress
- The "Faster Zombies!" blog post
- I love ebikes
- Pic of Matt Pritchard's shipped title award
2016 77
- End of year realization
- Visual Studio 2015's Busted Find Dialog
- "The Ballad of the Green Beret"
- Why Age3 used low poly skinned meshes
- Another little note about the Halo Wars engine
- RDO ETC1 compression examples
- Effect of ETC1 selector quantization on Luma SSIM/PSNR
- Effect of ETC1 endpoint quantization on Luma SSIM/PSNR
- Rate distortion performance of Basis ETC1 RDO+LZMA on the Kodak test set
- status of basis ETC1 support
- In-app charting/graphing using pplot
- GST: GPU-decodable Supercompressed Textures
- 2D Haar Wavelet Transform on GPU texture selector indices
- RDO ETC1 texture compression tool output
- RDO ETC1 texture compression prototype
- ETC1 block color clusterization progress
- ETC1 optimization notes
- ETC2 planar block only output created with etcpak
- ETC2 texture compression using exclusively planar blocks
- Visualization of random ETC2 Planar Mode blocks
- ETC1 encoder performance on kodim18 at various quality/effort levels
- More ETC1 cluster fit data
- ETC1 block flip estimation
- Example code: 4x4 Haar transform on ETC1 selectors
- libsquish's DXT1 "Cluster Fit" method applied to ETC1
- LodePNG
- An interesting ETC1/2 encoding test vector
- How to use crunch's GPU block encoder test vector generator
- More on SSIM
- Image error metrics
- Here's a useful PCA paper I found while writing HW1's renderer
- Ssim
- About the HW1 codebase having "too many globals"
- ETC1/2 vs. DXT1 texture compression benchmark
- Let's try DXT1 vs. ETC1/2 benchmarks
- Important note about PSNR
- How to compute PSNR (from an old Berkeley course)
- ETC1 and ETC1/2 Texture Compressor Benchmark
- ETC1 compressor quality comparison on 1,572 textures
- Let's evaluate the current state of ETC1/2 compression libraries
- On 30Hz console games
- Quick etcpak quality test
- ETC1 with 3D/4D random-restart hill climbing
- Visualizing ETC1 block encoding error as a 4D function
- ETC1 texture format visualizations
- FasTC library
- Google's new ETC2 codec looks awesome
- ETC1 principle axis optimization
- Etcpak
- Idea for next texture compression experiment
- Hierarchical clustering
- Few more random thoughts on a "universal" GPU texture format
- Some memories
- ETC1->DXT1 encoding table error visualization
- More thoughts on a universal GPU texture interchange format
- Visualizing ETC1 texture compression
- ETC1 block color clusterization experiment
- Good article: Why software patents are evil
- Brotli levels 0-10 vs. Oodle Kraken
- Few notes about the previous post
- RAD's ground breaking lossless compression product benchmarked
- lz4hc vs. lz4 performance on the LZHAM test corpus
- New lossless compression benchmarks on the way
- enet networking library
- Welcome to "The Hunger Games"
- What a company-wide "reorg" looks like in a flat, manager-less company
- We Need to Collectively Renegotiate
- A consultant's perspective on working full-time for a corporation
- Rad's Kraken is looking awesome
- More company culture quotes from Disrupted
- Hiring Group Dynamics
- Tips for Interviewing at Software Companies
- Why I left Unity
- Quotes from "My Year In Startup Hell"
- Compression ratio plots of zlib competitors Brotli and BitKnit
- zlib in serious danger of becoming obsolete
- Scatter graphs can be beautiful
2015 62
- Light Indexed Deferred Rendering
- Data Compression in Dungeon Boss
- Binary delta compression and seed dictionaries as universal OS services
- Crunch texture compression library has moved
- Why by-convention read-only shared state is bad
- Okumura's "ar002" and reverse engineering the internals of Katz's PKZIP
- The awesomeness that is ClangFormat
- The future of GPU texture compression
- Mobile-friendly binary delta compression
- How to deeply integrate a data compressor into a game engine
- One test showing the performance of miniz vs. zlib
- A graph submission API for lossless data compression
- The Key Missing API in Lossless Data Compressors
- Important aspects of LZHAM's design
- Future Directions in Lossless Compression
- Quick Survey of the Lossless Decompression Pareto Frontier
- LZHAM custom codec plugin for 7-zip v15.12
- Visualizing the Calgary compression corpus
- Visualization of file contents using LZ compression
- More on bsdiff and delta compression
- A few observations about Unity
- 15 Reasons why developers won't use your awesome codec
- Grab bag list of LZHAM improvements
- Compression is Compilation
- Quick EXE patching experiment: bsdiff/xdelta vs. lzham
- Patching related papers/links
- File patching using data compression with flushing
- A simple way to reduce memory pressure on Unity iOS (and maybe Android) titles
- iOS Memory Pressure Hell: Apple's 64-bit requirement+Unity's IL2CPP tech
- Lessons learned while fixing memory leaks in our first Unity title
- The great github migration
- LZHAM decompressor optimization ideas
- Dungeon Boss's current memory footprint on iOS
- Industrial strength Mono memory analysis tools for large scale Unity games
- Garbage collected systems must have good tools
- LZHAM v1.0 is back on the Pareto frontier for decompression speed
- Graphing Heap Memory Allocations
- A Telemetry-style visualization of LZHAM v1.1's multithreaded compressor
- More LZHAM small block optimizations
- Upcoming LZHAM decompressor optimizations
- 7zip 9.38 custom codec plugin for LZHAM 1.0
- LZHAM 1.0 integrated into 7zip command line and GUI
- LZHAM v1.0 released on github
- Windows 10: An Arrow Aimed Straight at Steam
- LZHAM v1.0 is being tested on iOS/OSX/Linux/Win
- LZHAM v1.0 vs. LZMA decompression perf. on iPhone 6+
- First LZHAM iOS stats with Unity asset bundle data
- LZHAM v1.0 vs. LZMA decomp. perf on a large corpus of files
- Parallelized download+decomp performance of various codecs
- Lossless codec performance on Unity asset bundle data
- LZHAM v1.0 vs. LZMA relative decompression rate on 262 Unity asset bundle files
- Good lossless codec API design
- More LZHAM v1.0 progress
- LZHAM v1.0 progress
- More LZHAM notes
- Improved Unity asset bundle file compression
- Utils/tools to help transition to OSX from Windows
- BonusXP's hybrid office arrangement
- Robot Entertainment knows how to make open offices work better
- Microsoft's vs. Valve's digs
- Bungie sure packs them in
- Open Office Spaces and Cabal Rooms Suck
2014 34
- State of Linux Gaming
- Interesting Talks and Articles
- Moving back to Texas!
- More apitest related links and notes
- State of GL 4.x revealed via "apitest" benchmark
- Article: "DirectX Creator Says Apple’s Metal Heralds the End of OpenGL"
- How I learned to stop worrying and love OpenGL
- "OpenGL Is Broken"
- Apple Metal API
- The Truth on OpenGL Driver Quality
- Things that drive me nuts about OpenGL
- Replay Divergence Hell
- vogl Windows port, new regression test system, new vogl_chroot repo
- vogl support for Unreal Engine 4
- couple vogl debugger/editor UI screenshots
- vogl's tracer/replayer now supports the Steam Linux client
- Trying SmartGitHg build v6 preview 4
- Completed another round of testing on AMD's (fglrx) driver
- vogl's github wiki is up
- Notes on current vogl limitations
- zip64 version of the miniz library released as part of the vogl codebase
- vogl GL debugger source is on github
- togl D3D9->OpenGL layer source release on github
- Finished Up Support for the Hitachi 6309 CPU
- Source level debugger and monitor app for 6809/6309 CPU
- CoCo 3 Upgrades: Hitachi 6309 CPU, 512KB RAM, PS2 keyboard
- The Color Computer 3's 256 Color (Artifacting) Mode
- picojpeg: Decoding Lena on a Tandy Color Computer 3
- picojpeg on a Tandy Color Computer 3 (6809 processor)
- Few tips from Mike Sartain on QtCreator Projects, Ninja warning/error parsing
- GL Game Devs: Please Send Us Your Game Traces!
- VOGL OpenGL Tracer/Debugger - Bonus Content
- Minimal OpenGL JSON Trace
- OpenGL State Snapshot JSON File - Visualized as a Graph