RSSAmplifier

Blog

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.

richg42.blogspot.comRSS feed ↗25 posts

Latest posts

Basis Universal v2.50 has shipped with ASTC in-loop deblocking, XUBC7, and universal .DDS transcoding

The documentation is still coming online. This wiki page was just added: https://github.com/BinomialLLC/basis_universal/wiki/Shader-and-In-Loop-Deblocking

Basis Universal library .DDS support coming in v2.5

The Basis Universal GPU texture library v2.5 will have full .DDS file format support: 2D/cubemaps/texarrays+mips, BC1-7 and uncompressed, are usable on any GPU device/API. It uses near-lossless transcoding to ASTC LDR 4x4, and in cases when it can't do a format latent to latent transcode it falls back to real-time full-featured analytical encoding for other LDR formats using bc7f, etc1f etc. It…

XUBC7/XBC7: Trellis quantization added

We just added Trellis quantization to XUBC7 (supercompressed universal BC7) via AC truncation, as long as the PSNR drop is within a configurable channel-weighted PSNR window, and the PSNR doesn't fall below a lower limit. This helps at higher Q (DCT quality) levels. Trellis quant is another video method we've ported successfully into GPU texture supercompression.…

XBC7 planning

I've been doing this for fun as a side project, as ASTC is still way more important. (ASTC is the most deployed GPU format in the world, BC7 is niche by comparison.) It'll all be entirely open source: - XBC7 v1 (completed, integrating ongoing): Always lossless for mode config+RGBA endpoints, lossless or lossy weights using either lossless residual DPCM or lossy absolute or residual DCT. DPCM…

XBC7/XUBC7 (supercompressed weight grid residual DCT+endpoint DPCM+Zstd) prototype is done

The next step is integration and connecting the BC7->ASTC LDR 4x4, ETC1, etc. transcoders into place in the Basis Universal library. Bitrate and quality at low Q's (Q=1/100) are exceptional vs. XUASTC LDR 4x4 (~1.5-3.0 bpp), and at Q=100 it's lossless in BC7 space at up to ~5.6 bpp or less depending on the content. Q=1 is totally usable, unlike XUASTC LDR where it falls apart because it's stuck…

Intra-Residual Weight Grid DCT/DST for BC7/ASTC

This GPU texture supercompression method for weights (or "indices", or "selectors") uses neighboring blocks to predict the weight grid of the current block, before applying a forward 2D DCT/DST to the weights, quantizing the coefficients, and coding them. The current working prototype (which I've been showing live on X) creates weight predictions using weights from a small neighborhood of already…

"Shrek" Xbox

“Shrek” was a launch title for the original Xbox that I worked on 25 years ago (in 2001). It was the first shipped game to use a technique called Deferred Shading. It wasn’t my first 3D game, though: I wrote Sandbox Studios’ software rasterizer and D3D7 renderers. https://xboxdevwiki.net/Shrek From the site - G-buffer visualization: Light accumulation - with static and dynamic stencil shadow…

Basis Universal v2.5 with in-loop deblocking: shipping soon

We're feature complete. We're now on the downslope to shipping support for in-loop deblocking using a simple standardized reconstruction operator. The operator uses 1 tap or 5 taps (1 center, 2 up/down, 2 left/right) near ASTC block edges, and is fully compatible with mipmapping and bilinear/trilinear filtering. It can be applied in a simple GPU pixel shader or during transcoding. It's so simple…

bug found in Intel's ASTC compressor (part of ispc_texcomp)

I've ported Intel's ASTC compressor (in ispc_texcomp) to pure C for benchmarking and discovered this gem during the process. The swap() utility function for float values, located near the top, has a silly typo bug that casts the first value to int (!). It's used in several places on floating point values, including block errors (scores).…

Block blurring (prefiltering)

Modern GPU texture compressors have a secret (but dangerous) superpower: prefiltering (blurring). Sometimes an encoder way overfits edges, causing overall perceptual quality to collapse. One way to overcome this is to blur the input and encode the block again. This is what we do in HDR on the very worst blocks (as measured by SSIM). It's paradoxical: blurring can boost perceptual quality.

Large block size ASTC has been misunderstood

Most game developers misunderstand ASTC: the largest block sizes were intended for the largest resolution content (4k) . GPU shader deblocking is easy: at the largest block sizes it's essentially free (because the bottleneck is typically memory bandwidth on mobile/tablets, not some ALU or cached tfetches). The largest block sizes collapse memory consumption/bandwidth enormously (0.89-1.28 bpp for…

Petascale changes everything

Let's say you have multiple petabytes of JPEG's/WebP/etc. content and you need (not want - because your competitors are doing it already) to add GPU texture support to your app. What do you do? Encode 2-3x times without supercompression (BC7+ASTC, maybe ETC1 too, no supercompression): utterly impractical, explodes (8x-16x or more) overall content size. Even 1 format (say ASTC) without…

My day job: optimizing this equation

XUASTC's next step: Intra-prediction of weight grids

Binomial has shown that image compression and GPU texture compression aren't separate fields . They're the same field, and the tools from one transfer directly to the other. XUASTC is currently using JPEG-style DCT (from 1992) on ASTC weight grids: https://github.com/BinomialLLC/basis_universal/wiki/XUASTC-LDR-Weight-Grid-DCT We ported JPEG-style coding into ASTC, even preserving how libjpeg-style…

First XUASTC LDR 4x4 rate-distortion graphs

ASTC GPU texture blocks form a latent image space where JPEG techniques still work . (So does BC7.) Here's a XUASTC LDR 4x4 (arithmetic vs. Zstd profile) bit rate vs. distortion graph across 151 test textures/images (the same test corpus we used to create bc7e.ispc ). Distortion was measured using PSNR-HVS-M . XUASTC LDR 4x4 transcodes to standard ASTC LDR 4x4 in memory/VRAM (8.0 bpp). It supports…

Open Geospatial Consortium membership

I'm now a member of the OGC: https://www.ogc.org/

Basis Universal v2.1 library wiki mirror

It's been automatically converted to HTML and mirrored outside of GitHub here: Home . A static mirror of the GitHub repo is here .

The KTX-Software repo has been forked

Binomial LLC has forked the Khronos Group's KTX-Software repo, to use as a staging ground for next-generation GPU texture compression technology: https://github.com/BinomialLLC/KTX-Software-Binomial-Fork/

Degenerate but valid ASTC configs: suboptimal CEM encodings

See: https://github.com/BinomialLLC/basis_universal/wiki/List-of-Available-Software-ASTC-Decoders#degenerate-but-valid-astc-configs-suboptimal-cem-encoding

Updated: "ASTC GPU Texture Decoding: Software Decoders, Spec Issues, and ARM Errata"

ASTC's complexity has created an ecosystem where correctness is an ongoing research problem rather than a fully solved one. See: https://github.com/BinomialLLC/basis_universal/wiki/List-of-Available-Software-ASTC-Decoders

.ASTC (the File Format): No Longer a Black Box

The basisu command line tool has a new option, -peek , which opens any standard ARM LDR/HDR .ASTC texture file , unpacks each block, and computes a bunch of statistics about the exact ASTC configurations the blocks used. This is how we found out that Intel's ispc_texcomp's ASTC encoder is, for all practical purposes, broken.…

ASTC Decoding: Software Decoders, Spec Issues, and ARM Errata

See here: https://github.com/BinomialLLC/basis_universal/wiki/List-of-Available-Software-ASTC-Decoders

ARM ASTC Decoding Errata

See here: https://documentation-service.arm.com/static/67ca1a5ece2747241fced502 More general info on the real-world complexities of decoding ASTC are here: https://github.com/BinomialLLC/basis_universal/wiki/List-of-Available-Software-ASTC-Decoders

Some things we've learned about GPU textures at planetary scale

1. ASTC is now the king : In billions of devices. Everything else=fallback, including BC7. To us, BC7 is essentially a greatly simplified ASTC, but with some p-bits. 2. At multi-petabyte ( planetary ) scales: Supercompression bitrate=Matters enormously. Notably, game developers (who have been using compressed textures the longest) don't work at scales this large, so the approaches and techniques…

The Three Generations of GPU Texture Distribution

In the Basis Universal v2.0 wiki: https://github.com/BinomialLLC/basis_universal/wiki/The-Three-Generations-of-GPU-Texture-Distribution