<div dir="ltr">Sorry, I didn't mean to make that much of a stink.  Either's fine with me as long as we're not doing 32 for half-float.<br><br>Reviewed-by: Jason Ekstrand <<a href="mailto:jason.ekstrand@intel.com">jason.ekstrand@intel.com</a>><br>
</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Aug 12, 2014 at 8:09 AM, Neil Roberts <span dir="ltr"><<a href="mailto:neil@linux.intel.com" target="_blank">neil@linux.intel.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I'm not sure if we came to a decision about what to do with the<br>
channel bits. I guess it's not really that important because probably<br>
nothing uses it for compressed formats except to check for the<br>
existence of the channels. Here is a v2 patch which picks 8/8/8/8 for<br>
the RGBA formats and 16/16/16 for the half-float formats. Would that<br>
be ok?<br>
<br>
I guess we should pick a policy and make it consistent for the other<br>
formats too but perhaps we can leave that to a later patch. It looks<br>
like the NVidia approach might be to return a number of bits that you<br>
would need to create a texture to represent the possible generated<br>
values from the decompressor. However that doesn't quite add up for<br>
the half-float formats because in that case you could accurately<br>
represent the values with a half-float texture and only 16 bits.<br>
<br>
If we wanted to pick that policy we would also have to change what we<br>
return for the S3TC formats because they can also return 8 bits of<br>
variance. The ETC2 formats already return 8.<br>
<br>
- Neil<br>
<br>
------- >8 --------------- (use git am --scissors to automatically chop here)<br>
<div class=""><br>
Adds the ‘bptc’ layout to get_channel_bits. The channel bits for BPTC depend<br>
</div>on the mode but as it only has to be an approximation this sets it to 8 for<br>
the two UNORM formats and 16 for the two half-float formats. These represent<br>
the minimum number of bits of variation that can be generated by the<br>
interpolation of the two formats.<br>
<br>
This doesn't quite match what we do for S3TC which only returns 4 even though<br>
it can similarly generate 8 bits from the interpolation. However it does match<br>
what we return for ETC2. For reference, NVidia seems to return 8 bits for the<br>
UNORM formats and 32 bits for the half-float formats.<br>
<br>
v2: Change the number of bits to 8/8/8/8 for the UNORM formats and 16/16/16<br>
    for the half-float formats.<br>
---<br>
 src/mesa/main/format_info.py | 3 +++<br>
 1 file changed, 3 insertions(+)<br>
<br>
diff --git a/src/mesa/main/format_info.py b/src/mesa/main/format_info.py<br>
index a0eecd3..7424fe0 100644<br>
--- a/src/mesa/main/format_info.py<br>
+++ b/src/mesa/main/format_info.py<br>
@@ -127,6 +127,9 @@ def get_channel_bits(fmat, chan_name):<br>
<br>
          bits = 11 if fmat.name.endswith('11_EAC') else 8<br>
          return bits if fmat.has_channel(chan_name) else 0<br>
+      elif fmat.layout == 'bptc':<br>
+         bits = 16 if fmat.name.endswith('_FLOAT') else 8<br>
+         return bits if fmat.has_channel(chan_name) else 0<br>
       else:<br>
          assert False<br>
    else:<br>
<span class="HOEnZb"><font color="#888888">--<br>
1.9.3<br>
<br>
</font></span></blockquote></div><br></div>