So we have shown we can handle the interpolation of the 1, 2, 3, and 4-corner
cases all with the existing bilinear interpolation function available on the hardware.
The implementation of this filtering is a bit tricky,
however, because we have a large number of different cases to deal with. For
example,
several of the 6 cases I showed earlier could be rotated or
flipped in many ways.
The full discussion of this
implementation is given in the paper and we do not have time to discuss it here.
However, I can give you a high-level idea of our implementation. We note that
every case uses
bilinearly interpolated texture lookups with different input
coordinates. Thus, it becomes
a problem of getting the fragment program to move the right
inputs into the texture
lookup based on the particular configuration. To do this, we
implement a "multiplexer"
with a fragment program that uses the
configuration information to perform conditional moves and get
the right values into the inputs of the TEX lookup. To
simplify the implementation, a
truth table and a Karnaugh map were created for all
the cases and input combinations
to simplify the logic required.
All these details can be found in the paper...