i965/surface_formats: Don't advertise 8 or 16-bit RGB formats
authorJason Ekstrand <jason.ekstrand@intel.com>
Wed, 27 Jul 2016 03:59:38 +0000 (20:59 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Tue, 23 Aug 2016 18:45:24 +0000 (11:45 -0700)
We have implicitly been not advertising these formats since we had them
turned off in the format capabilities table.  We are about to update that
table and this prevents a change in behavior.  The only change in behavior
created by this patch is that we no longer advertise support for
R16G16B16_FLOAT which means that it's now renderable which seems like a
bonus.  Maybe someday we'll want to change things to start supporting
16-bit RGB formats natively but, at the moment, there's no need.

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Nanley Chery <nanley.g.chery@intel.com>
src/mesa/drivers/dri/i965/brw_surface_formats.c

index 2543f4b514fdae275ec24d58f378f900a17b6411..a9d8544f340d04b6c9ffbb7c275448c41a8c7006 100644 (file)
@@ -311,6 +311,16 @@ brw_init_surface_formats(struct brw_context *brw)
       if (texture == 0 && format != MESA_FORMAT_RGBA_FLOAT32)
         continue;
 
+      /* Don't advertise 8 and 16-bit RGB formats to core mesa.  This ensures
+       * that they are renderable from an API perspective since core mesa will
+       * fall back to RGBA or RGBX (we can't render to non-power-of-two
+       * formats).  For 8-bit, formats, this also keeps us from hitting some
+       * nasty corners in intel_miptree_map_blit if you ever try to map one.
+       */
+      int format_size = _mesa_get_format_bytes(format);
+      if (format_size == 3 || format_size == 6)
+         continue;
+
       if (isl_format_supports_sampling(devinfo, texture) &&
           (isl_format_supports_filtering(devinfo, texture) || is_integer))
         ctx->TextureFormatSupported[format] = true;