Vertex packing

21 July 2022

This blog started out as one of those interesting Twitter discussions that really needed a bit more space to explain properly. The basic question was relatively simple:

read more

ASTC runtime compression

18 May 2022

This is a bit of a brain dump on what a BC7 equivalent in ASTC would look like for targeting runtime compression for virtual texturing - “astcenc-rt”. This is an evening thought experiment over a beer, so beware I’ve not tried to actually build this (yet) …

read more

Future astcenc ideas

01 May 2022

It’s taken a couple of years, but the current astcenc release (3.7) has been pretty well dialled in for both x86 and Arm implementations. Nearly every path has been vectorized, and the heuristics have been tuned up to give a good performance-quality return.

read more

Optimizing astcenc

22 April 2022

After two years of incremental improvement the astcenc 3.6 release is around 20 to 25 times faster than the 1.7 release I started with. This blog is a look at some of the techniques I used, and a few that I tried but found didn’t work.

read more

Android Vulkan layers

20 April 2022

I’ve seen a few developers struggling to get Vulkan validation layers working for Android applications, so here is quick recipe to do it with the fewest moving parts.

read more

Texture sampling tips

27 March 2022

Shader texture sampling is a really interesting area of graphics technology, and one of the areas where there are some nicely hidden gotchas in terms of performance. This blog explores some of the issues …

read more

Branches in mobile shaders

09 December 2021

Shader branch performance is one of the topics that is most misunderstood by new developers, mostly due to an abundance of rehashed “branches are bad” information that is now years out of date. This blog is a rummage around the topic, looking at branches and loops.

read more

Floating-point in mobile shaders

23 November 2021

Computer floating-point maths is the evil twin of sensible real-world maths. It provides great flexibility, being capable of high precision and high dynamic range (although not both simultaneously), but comes with some nasty boundary conditions that can cause major issues with algorithmic stability.

read more

ASTC codecs compared II

06 March 2021

The upcoming astcenc 2.5 release is the last major release in the 2.x series, although we will be supporting it as an ongoing LTS branch and back-porting any bug fixes. Now that the release is stable and in beta, this felt like a good time to pull together some benchmark data and look at the progress thus far.

read more

Invariant float accumulators

25 February 2021

One of the requirements we have for astcenc is ensuring that the output of the codec is consistent across instruction sets. Users quite like having the choice of SSE4.1 or AVX2 when their machine supports it – faster compression is always good – but no dev team wants game builds that look different just because a different machine was used to build it.

read more

ASTC codecs compared

02 March 2020

We’ve just released astcenc 2.0 alpha, which is 2-3 times faster than the last release of the 1.x series (1.7). One question which has come up in a few conversations with developers since we announced the 2.x series is …

read more