The Curious Engineer

All blogs / Graphics

Richard Geldreich's Blog

richg42.blogspot.com

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.

GraphicsPerformance / optimization

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

  1. neural_upsampler: neural 2x upsampling as a tiny drop-in C++ library
  2. Neural JPEG artifact reduction in C++
  3. A heavily perceptual LRDO XUASTC LDR encoder is coming soon
  4. NNTC PBR material set compressor: now supports CPU encoding
  5. Latent-based GPU texture public Prior Art from 2012
  6. NNTC viewing example which uses VK_NV_cooperative_vector
  7. Notes on NNTC vs. neural texturing
  8. NNTC repo now on GitHub
  9. Neural texture decoders can suppress DCT ringing artifacts within latent features
  10. New GitHub repo release: "neural_block_textures"
  11. Neural block textures vs. GPU textures (like BC7) at Equal Bitrates
  12. Neural block textures stored inside KTX2: a near-perfect fit
  13. Neural block GPU texture compression: Prior Art disclosure
  14. Neural block texturing example
  15. Neural block texture compression trained with Evolution Strategies (ES) on GitHub
  16. Neural block texture compression with CUDA
  17. Neural GPU block compression
  18. Fitting Neural Textures and PBR Material Maps with ES (No Backprop)
  19. Mirror of neural texture compression trained with Evolution Strategies
  20. ETC1S Chroma Artifact Filtering, Real-Time Encoders and Transcoding Format Graph Expansion
  21. Fitting a neural texture decoder with ES (no backprop)
  22. XUBC7 Low-Level Format Document
  23. In-loop deblocking of GPU textures
  24. Basis Universal v2.50 has shipped with ASTC in-loop deblocking, XUBC7, and universal .DDS transcoding
  25. Basis Universal library .DDS support coming in v2.5
  26. XUBC7/XBC7: Trellis quantization added
  27. XBC7 planning
  28. XBC7/XUBC7 (supercompressed weight grid residual DCT+endpoint DPCM+Zstd) prototype is done
  29. Intra-Residual Weight Grid DCT/DST for BC7/ASTC
  30. "Shrek" Xbox
  31. Basis Universal v2.5 with in-loop deblocking: shipping soon
  32. bug found in Intel's ASTC compressor (part of ispc_texcomp)
  33. Block blurring (prefiltering)
  34. Large block size ASTC has been misunderstood
  35. Petascale changes everything
  36. My day job: optimizing this equation
  37. XUASTC's next step: Intra-prediction of weight grids
  38. First XUASTC LDR 4x4 rate-distortion graphs
  39. Open Geospatial Consortium membership
  40. Basis Universal v2.1 library wiki mirror
  41. The KTX-Software repo has been forked
  42. Degenerate but valid ASTC configs: suboptimal CEM encodings
  43. Updated: "ASTC GPU Texture Decoding: Software Decoders, Spec Issues, and ARM Errata"
  44. .ASTC (the File Format): No Longer a Black Box
  45. ASTC Decoding: Software Decoders, Spec Issues, and ARM Errata
  46. ARM ASTC Decoding Errata
  47. Some things we've learned about GPU textures at planetary scale
  48. The Three Generations of GPU Texture Distribution
  49. ASTC Texture Sampling with Deblocking in a Simple Pixel Shader
  50. GPU Textures as Derived (Compiled) Data
  51. JPEG for ASTC
  52. Basis Universal v2.0: ASTC and XUASTC Usage Guide Is Live
  53. bc7f: A New Real-Time Analytical BC7 Encoder

2023 7

  1. LZ_XOR/LZ_ADD progress
  2. Somewhere Range Coding went off the rails
  3. Comparing Vectorized Huffman and Range Decoding vs. rANS (Or: rANS entropy coding is overrated)
  4. Vectorized interleaved Range Coding using SSE 4.1
  5. Faster LZ is not the answer to 150-250+ GB video game downloads
  6. The Dark Horse of the Image Codec World: Near-Lossless Image Formats Using Ultra-Fast LZ Codecs
  7. EA/Microsoft Neural Network GPU Texture Compression Patents

2022 7

  1. Lagrangian RDO PNG
  2. Fast AVX2 PNG writer
  3. LZ_XOR on canterbury corpus
  4. One nice property of highly constrained length limited prefix codes
  5. LZ_XOR on enwik8
  6. Other LZ_XOR variants
  7. Lzxor

2021 25

  1. Lena is Retired
  2. Average rate-distortion curves for bc7enc_rdo
  3. First RDO LDR ASTC 6x6 encodings
  4. First-ever RDO ASTC encodings
  5. bc7e.ispc integrated into bc7enc_rdo
  6. Updated bc7enc_rdo with improved smooth block handling
  7. Dirac video codec authors on Rate-Distortion Optimization
  8. Weighted/biased BC7 encoding for reduced output data entropy (with no slowdowns)
  9. bc7enc_rdo now supports RDO for all BC1-7 texture formats
  10. Entropy Reduction Transform on BC1 texture data
  11. bc7enc_rdo encoding examples
  12. Graphing length of introduced matches in the BC7 ERT
  13. RDO texture encoding notes
  14. bc7enc_rdo repo updated
  15. More RDO BC7 encoding - new algorithm
  16. Low bitrate RDO BC7 with lzham_devel
  17. More RDO BC7 progress
  18. BC7 RDO rate distortion curves
  19. Lagrangian multiplier based RDO encoding early outs
  20. BC7 DDS file entropy visualization
  21. The two types of RDO BC7 encoders
  22. Simple and fast ways to reduce BC7's output entropy (and increase LZ matches)
  23. More RDO BC7 encoder progress
  24. RDO BC1-BC7 progress
  25. How to benchmark or use the UASTC encoder in the Basis Universal library

2020 12

  1. LZHAM and crunch are now Public Domain software
  2. LZHAM and "crunch" IP will be placed into the Public Domain on 9/15/2020
  3. Yet another BC1 encoder benchmark
  4. BC1 encoding initial endpoint determination benchmark
  5. AMD GPU BC1 decoding lookup tables
  6. CPU BC1 Encoding Pareto Frontier
  7. New BC1 benchmark
  8. UASTC benchmark
  9. LDR ASTC mode list (all CEM's the same)
  10. ARM's ASTC encoder now uses the Apache 2.0 license
  11. UASTC1 block format encoding, revision 8
  12. Universal ASTC (UASTC) Tech Details

2019 12

  1. Parsing ASTC's overly restrictive end user license
  2. ARM's ASTC encoder patents - is it safe to write encoders for this format?
  3. Unified texture encoder for BC7 and ASTC 4x4
  4. Idea for next texture compression experiment (originally published 9/11/16)
  5. Few more random thoughts on a "universal" GPU texture format (originally published 9/9/16)
  6. More universal GPU texture format stuff (originally published 9/9/16)
  7. Few more random thoughts on a "universal" GPU texture format (originally published 9/9/16)
  8. Universal texture compression: 5th experiment (originally published 9/15/16)
  9. Direct conversion of ETC1 to DXT1 texture data: 4th experiment (originally published 9/11/16)
  10. Direct conversion of ETC1 to DXT1 texture data: 3rd experiment (originally published 9/7/16)
  11. Direct conversion of ETC1 to DXT1 texture data: 2nd experiment (originally published 9/06/16)
  12. Direct conversion of ETC1 to DXT1 texture data (originally published 9/11/16)

2018 43

  1. Existing BC7 codecs don't handle textures with decorrelated alpha channels well
  2. Tech company patterns
  3. This is why we're working on Basis.
  4. A little ETC1S history
  5. Basis status update
  6. PVRTC encoding examples
  7. Real-time PVRTC encoding for a universal GPU texture format system
  8. Lookup table based real-time PVRTC encoding
  9. ETC1S texture format encoding and how it's transcoded to BC1
  10. How to improve crunch's codebook generators
  11. Better PVRTC encoding
  12. xmen_1024 encoded to .basis at various bitrates
  13. Basis universal GPU texture format examples
  14. Some Basis baseline universal format details
  15. Graphing BC7 with random codec options
  16. BC7 opaque encoding sweetspots
  17. Graphing our BC7 encoder's quality vs. encoding time for opaque textures
  18. Basis non-RDO BC7 benchmark
  19. BC7 mode 0-only encoding examples
  20. One last non-RDO BC7 benchmark: ispc_texcomp slow vs. my encoder in perceptual mode
  21. BC7 showdown #2: Basis ispc vs. NVidia Texture Tools vs. ispc_texcomp slow
  22. New BC7 encoder open sourced
  23. A tale of multiple BC7 encoders
  24. Comparing ispc_texcomp alpha performance vs. my encoder
  25. BC7 mode utilization comparison of three encoders
  26. GPU texture compression error metrics
  27. LZHAM decompressor vectorization
  28. DirectXTex BC7 3 subset wierdness
  29. Proper pbit computation in the BC7 texture format
  30. RDO BC7 encoder planning
  31. BC7 showdown: ispc_texcomp vs. my ispc encoder
  32. ispc_texcomp BC7 issues
  33. A few Intel SPMD Compiler (ispc) C porting tips
  34. BC7 encoding using weighted YCbCr colorspace metrics
  35. Imaginary GPU formats
  36. Basis feature support
  37. Basis GPU format support update
  38. Basis update - now with PVRTC support!
  39. Basis v1.11 with universal GPU texture support has shipped
  40. On Age DE's pathing/movement
  41. Age DE's latency matrix
  42. Lessons learned while developing Age of Empires 1 Definitive Edition
  43. 10 abusive company types

2017 24

  1. Universal GPU texture codec update
  2. More universal GPU texture format examples
  3. Universal GPU texture format: DXT5 support
  4. "Universal" GPU texture/image format examples
  5. On whiteboard coding interviews
  6. Things learned while running your own self-funded startup
  7. Why crunch likes uncompressed texture data
  8. Seattle
  9. Basis's RDO DXTc compression API
  10. Binomial stuff
  11. Basis status
  12. Probiotic yogurt making
  13. Nerd/Brogrammer spectrum
  14. Virtual selector codebook example image
  15. Virtual global selector codebooks in Basis
  16. Interesting looking ETC1/2 encoder
  17. Adaptogens
  18. "Hybrid" supercompressed texture approach
  19. Basis ETC1 support progress
  20. Basis ETC1 intermediate format support is now round-tripping
  21. ETC1 intermediate format progress
  22. The "Faster Zombies!" blog post
  23. I love ebikes
  24. Pic of Matt Pritchard's shipped title award

2016 77

  1. End of year realization
  2. Visual Studio 2015's Busted Find Dialog
  3. "The Ballad of the Green Beret"
  4. Why Age3 used low poly skinned meshes
  5. Another little note about the Halo Wars engine
  6. RDO ETC1 compression examples
  7. Effect of ETC1 selector quantization on Luma SSIM/PSNR
  8. Effect of ETC1 endpoint quantization on Luma SSIM/PSNR
  9. Rate distortion performance of Basis ETC1 RDO+LZMA on the Kodak test set
  10. status of basis ETC1 support
  11. In-app charting/graphing using pplot
  12. GST: GPU-decodable Supercompressed Textures
  13. 2D Haar Wavelet Transform on GPU texture selector indices
  14. RDO ETC1 texture compression tool output
  15. RDO ETC1 texture compression prototype
  16. ETC1 block color clusterization progress
  17. ETC1 optimization notes
  18. ETC2 planar block only output created with etcpak
  19. ETC2 texture compression using exclusively planar blocks
  20. Visualization of random ETC2 Planar Mode blocks
  21. ETC1 encoder performance on kodim18 at various quality/effort levels
  22. More ETC1 cluster fit data
  23. ETC1 block flip estimation
  24. Example code: 4x4 Haar transform on ETC1 selectors
  25. libsquish's DXT1 "Cluster Fit" method applied to ETC1
  26. LodePNG
  27. An interesting ETC1/2 encoding test vector
  28. How to use crunch's GPU block encoder test vector generator
  29. More on SSIM
  30. Image error metrics
  31. Here's a useful PCA paper I found while writing HW1's renderer
  32. Ssim
  33. About the HW1 codebase having "too many globals"
  34. ETC1/2 vs. DXT1 texture compression benchmark
  35. Let's try DXT1 vs. ETC1/2 benchmarks
  36. Important note about PSNR
  37. How to compute PSNR (from an old Berkeley course)
  38. ETC1 and ETC1/2 Texture Compressor Benchmark
  39. ETC1 compressor quality comparison on 1,572 textures
  40. Let's evaluate the current state of ETC1/2 compression libraries
  41. On 30Hz console games
  42. Quick etcpak quality test
  43. ETC1 with 3D/4D random-restart hill climbing
  44. Visualizing ETC1 block encoding error as a 4D function
  45. ETC1 texture format visualizations
  46. FasTC library
  47. Google's new ETC2 codec looks awesome
  48. ETC1 principle axis optimization
  49. Etcpak
  50. Idea for next texture compression experiment
  51. Hierarchical clustering
  52. Few more random thoughts on a "universal" GPU texture format
  53. Some memories
  54. ETC1->DXT1 encoding table error visualization
  55. More thoughts on a universal GPU texture interchange format
  56. Visualizing ETC1 texture compression
  57. ETC1 block color clusterization experiment
  58. Good article: Why software patents are evil
  59. Brotli levels 0-10 vs. Oodle Kraken
  60. Few notes about the previous post
  61. RAD's ground breaking lossless compression product benchmarked
  62. lz4hc vs. lz4 performance on the LZHAM test corpus
  63. New lossless compression benchmarks on the way
  64. enet networking library
  65. Welcome to "The Hunger Games"
  66. What a company-wide "reorg" looks like in a flat, manager-less company
  67. We Need to Collectively Renegotiate
  68. A consultant's perspective on working full-time for a corporation
  69. Rad's Kraken is looking awesome
  70. More company culture quotes from Disrupted
  71. Hiring Group Dynamics
  72. Tips for Interviewing at Software Companies
  73. Why I left Unity
  74. Quotes from "My Year In Startup Hell"
  75. Compression ratio plots of zlib competitors Brotli and BitKnit
  76. zlib in serious danger of becoming obsolete
  77. Scatter graphs can be beautiful

2015 62

  1. Light Indexed Deferred Rendering
  2. Data Compression in Dungeon Boss
  3. Binary delta compression and seed dictionaries as universal OS services
  4. Crunch texture compression library has moved
  5. Why by-convention read-only shared state is bad
  6. Okumura's "ar002" and reverse engineering the internals of Katz's PKZIP
  7. The awesomeness that is ClangFormat
  8. The future of GPU texture compression
  9. Mobile-friendly binary delta compression
  10. How to deeply integrate a data compressor into a game engine
  11. One test showing the performance of miniz vs. zlib
  12. A graph submission API for lossless data compression
  13. The Key Missing API in Lossless Data Compressors
  14. Important aspects of LZHAM's design
  15. Future Directions in Lossless Compression
  16. Quick Survey of the Lossless Decompression Pareto Frontier
  17. LZHAM custom codec plugin for 7-zip v15.12
  18. Visualizing the Calgary compression corpus
  19. Visualization of file contents using LZ compression
  20. More on bsdiff and delta compression
  21. A few observations about Unity
  22. 15 Reasons why developers won't use your awesome codec
  23. Grab bag list of LZHAM improvements
  24. Compression is Compilation
  25. Quick EXE patching experiment: bsdiff/xdelta vs. lzham
  26. Patching related papers/links
  27. File patching using data compression with flushing
  28. A simple way to reduce memory pressure on Unity iOS (and maybe Android) titles
  29. iOS Memory Pressure Hell: Apple's 64-bit requirement+Unity's IL2CPP tech
  30. Lessons learned while fixing memory leaks in our first Unity title
  31. The great github migration
  32. LZHAM decompressor optimization ideas
  33. Dungeon Boss's current memory footprint on iOS
  34. Industrial strength Mono memory analysis tools for large scale Unity games
  35. Garbage collected systems must have good tools
  36. LZHAM v1.0 is back on the Pareto frontier for decompression speed
  37. Graphing Heap Memory Allocations
  38. A Telemetry-style visualization of LZHAM v1.1's multithreaded compressor
  39. More LZHAM small block optimizations
  40. Upcoming LZHAM decompressor optimizations
  41. 7zip 9.38 custom codec plugin for LZHAM 1.0
  42. LZHAM 1.0 integrated into 7zip command line and GUI
  43. LZHAM v1.0 released on github
  44. Windows 10: An Arrow Aimed Straight at Steam
  45. LZHAM v1.0 is being tested on iOS/OSX/Linux/Win
  46. LZHAM v1.0 vs. LZMA decompression perf. on iPhone 6+
  47. First LZHAM iOS stats with Unity asset bundle data
  48. LZHAM v1.0 vs. LZMA decomp. perf on a large corpus of files
  49. Parallelized download+decomp performance of various codecs
  50. Lossless codec performance on Unity asset bundle data
  51. LZHAM v1.0 vs. LZMA relative decompression rate on 262 Unity asset bundle files
  52. Good lossless codec API design
  53. More LZHAM v1.0 progress
  54. LZHAM v1.0 progress
  55. More LZHAM notes
  56. Improved Unity asset bundle file compression
  57. Utils/tools to help transition to OSX from Windows
  58. BonusXP's hybrid office arrangement
  59. Robot Entertainment knows how to make open offices work better
  60. Microsoft's vs. Valve's digs
  61. Bungie sure packs them in
  62. Open Office Spaces and Cabal Rooms Suck

2014 34

  1. State of Linux Gaming
  2. Interesting Talks and Articles
  3. Moving back to Texas!
  4. More apitest related links and notes
  5. State of GL 4.x revealed via "apitest" benchmark
  6. Article: "DirectX Creator Says Apple’s Metal Heralds the End of OpenGL"
  7. How I learned to stop worrying and love OpenGL
  8. "OpenGL Is Broken"
  9. Apple Metal API
  10. The Truth on OpenGL Driver Quality
  11. Things that drive me nuts about OpenGL
  12. Replay Divergence Hell
  13. vogl Windows port, new regression test system, new vogl_chroot repo
  14. vogl support for Unreal Engine 4
  15. couple vogl debugger/editor UI screenshots
  16. vogl's tracer/replayer now supports the Steam Linux client
  17. Trying SmartGitHg build v6 preview 4
  18. Completed another round of testing on AMD's (fglrx) driver
  19. vogl's github wiki is up
  20. Notes on current vogl limitations
  21. zip64 version of the miniz library released as part of the vogl codebase
  22. vogl GL debugger source is on github
  23. togl D3D9->OpenGL layer source release on github
  24. Finished Up Support for the Hitachi 6309 CPU
  25. Source level debugger and monitor app for 6809/6309 CPU
  26. CoCo 3 Upgrades: Hitachi 6309 CPU, 512KB RAM, PS2 keyboard
  27. The Color Computer 3's 256 Color (Artifacting) Mode
  28. picojpeg: Decoding Lena on a Tandy Color Computer 3
  29. picojpeg on a Tandy Color Computer 3 (6809 processor)
  30. Few tips from Mike Sartain on QtCreator Projects, Ninja warning/error parsing
  31. GL Game Devs: Please Send Us Your Game Traces!
  32. VOGL OpenGL Tracer/Debugger - Bonus Content
  33. Minimal OpenGL JSON Trace
  34. OpenGL State Snapshot JSON File - Visualized as a Graph

2013 6

  1. Some Advice When Starting a New Job
  2. QtCreator's Python Debug Visualizers
  3. A Shout-Out to QtCreator 2.8.x on Linux
  4. The big miniz zip64 merge
  5. miniz.c: Finally added zip64 support, other fixes/improvements incoming
  6. LZHAM2 notes

2012 4

  1. Released crunch v1.04
  2. Left 4 Dead 2 Linux at SIGGRAPH 2012
  3. More on Crunch vs. US Patent #20110115806
  4. "Crunch" Open Source Texture Compression Library vs. US Patent #20110115806