[Mesa-dev] [PATCH] [v2] i965: Add lossless compression to surface format table

Pohjolainen, Topi topi.pohjolainen at intel.com
Wed Nov 18 01:10:12 PST 2015


On Tue, Nov 17, 2015 at 05:30:06PM -0800, Ben Widawsky wrote:
> Background: Prior to Skylake and since Ivybridge Intel hardware has had the
> ability to use a MCS (Multisample Control Surface) as auxiliary data in
> "compression" operations on the surface. This reduces memory bandwidth.  This
> hardware was either used for MSAA compression, and fast clear operations.  On

This says:

    ... either ... , and ... 

should it have been

    ... either ... or ... 


All in all, I really appreciate the thorough explanation here in this commit,
just had to check. I know I'm late with my comments, so bare with me.

> Gen8, a similar mechanism exists to allow the hiz buffer to be sampled from, and
> therefore this feature is sometimes referred to more generally as "AUX buffers".
> 
> Skylake adds the ability to have the display engine directly source compressed
> surfaces on top of the ability to sample from them. Inference dictates that
> enabling this display features adding a restriction to the formats which could

s/adding/adds/ ?

> actually be compressed. The current set of surfaces seems to be a subset as
> compared to previous gens (see the next patch). Also, if I had to guess I would
> guess that future gens add support for more surface formats. To make handling
> this a bit easier to read, and more future proof, the support for this is moved
> into the surface formats table.
> 
> Along with the modifications to the table, a helper function is also provided to
> determine if a surface is CCS compatible.  Because fast clears are currently
> disabled on SKL, we can plumb the helper all the way through here, and not
> actually have anything break.
> 
> The logic in the table works a bit differently than the other columns in the
> table and therefore deserves a small mention. For most other features, the GEN

I have difficulty here also: the sentence compares table to other columns in
the table ("... logic in the table ... than other columns...").

Did you mean to say that a particular _column_ in the table behaves
differently than the others?

> which began implementing it is set, and it is assumed future gens also support
> this. For this feature, GEN9 actually eliminates support for certain formats. We
> could use this column to determine support for the similar feature on older

And here you refer to the newly added column? Comparing the contents of that
column to the supported render targets (column RT) gives you the delta between
gen9 and older?

> generation hardware. Aside from that being an error prone task which is
> unrelated to enabling this on GEN9, it becomes somewhat tricky to implement
> because of the fact that surface format support diminishes. You'd probably want
> another column to cleanly implement it.

And this is what you did, right?

Again, sorry for the 20 questions.

Otherwise the patch makes sense to me:

Reviewed-by: Topi Pohjolainen <topi.pohjolainen at intel.com>

(You probably want Chad and Neil to give their consent also).

> 
> v2:
> - rename ccs to ccs_e; Requested-by: Chad
> - rename lossless_compression to lossless_compression Requested-by: Chad
> - change meaning of brw_losslessly_compressible_format Requested-by: Chad
>   - related changes to the code to reflect this.
> - remove excess ccs (Chad)
> 
> Requested-by: Chad Versace <chad.versace at intel.com>
> Requested-by: Neil Roberts <neil at linux.intel.com>
> Signed-off-by: Ben Widawsky <benjamin.widawsky at intel.com>
> ---
>  src/mesa/drivers/dri/i965/brw_context.h         |   2 +
>  src/mesa/drivers/dri/i965/brw_surface_formats.c | 525 +++++++++++++-----------
>  src/mesa/drivers/dri/i965/intel_mipmap_tree.c   |   7 +-
>  3 files changed, 282 insertions(+), 252 deletions(-)
> 
> diff --git a/src/mesa/drivers/dri/i965/brw_context.h b/src/mesa/drivers/dri/i965/brw_context.h
> index 8d6bc19..fe45edb 100644
> --- a/src/mesa/drivers/dri/i965/brw_context.h
> +++ b/src/mesa/drivers/dri/i965/brw_context.h
> @@ -1467,6 +1467,8 @@ void brw_upload_image_surfaces(struct brw_context *brw,
>  /* brw_surface_formats.c */
>  bool brw_render_target_supported(struct brw_context *brw,
>                                   struct gl_renderbuffer *rb);
> +bool brw_losslessly_compressible_format(struct brw_context *brw,
> +                                        uint32_t brw_format);
>  uint32_t brw_depth_format(struct brw_context *brw, mesa_format format);
>  mesa_format brw_lower_mesa_image_format(const struct brw_device_info *devinfo,
>                                          mesa_format format);
> diff --git a/src/mesa/drivers/dri/i965/brw_surface_formats.c b/src/mesa/drivers/dri/i965/brw_surface_formats.c
> index 97fff60..16f7fec 100644
> --- a/src/mesa/drivers/dri/i965/brw_surface_formats.c
> +++ b/src/mesa/drivers/dri/i965/brw_surface_formats.c
> @@ -39,14 +39,15 @@ struct surface_format_info {
>     int input_vb;
>     int streamed_output_vb;
>     int color_processing;
> +   int lossless_compression;
>     const char *name;
>  };
>  
>  /* This macro allows us to write the table almost as it appears in the PRM,
>   * while restructuring it to turn it into the C code we want.
>   */
> -#define SF(sampl, filt, shad, ck, rt, ab, vb, so, color, sf) \
> -   [BRW_SURFACEFORMAT_##sf] = { true, sampl, filt, shad, ck, rt, ab, vb, so, color, #sf},
> +#define SF(sampl, filt, shad, ck, rt, ab, vb, so, color, ccs_e, sf) \
> +   [BRW_SURFACEFORMAT_##sf] = { true, sampl, filt, shad, ck, rt, ab, vb, so, color, ccs_e, #sf},
>  
>  #define Y 0
>  #define x 999
> @@ -74,6 +75,7 @@ struct surface_format_info {
>   * VB    - Input Vertex Buffer
>   * SO    - Steamed Output Vertex Buffers (transform feedback)
>   * color - Color Processing
> + * ccs_e - Lossless Compression Support (gen9+ only)
>   * sf    - Surface Format
>   *
>   * See page 88 of the Sandybridge PRM VOL4_Part1 PDF.
> @@ -84,257 +86,258 @@ struct surface_format_info {
>   * - VOL2_Part1 section 2.5.11 Format Conversion (vertex fetch).
>   * - VOL4_Part1 section 2.12.2.1.2 Sampler Output Channel Mapping.
>   * - VOL4_Part1 section 3.9.11 Render Target Write.
> + * - Render Target Surface Types [SKL+]
>   */
>  const struct surface_format_info surface_formats[] = {
> -/* smpl filt shad CK  RT  AB  VB  SO  color */
> -   SF( Y, 50,  x,  x,  Y,  Y,  Y,  Y,  x, R32G32B32A32_FLOAT)
> -   SF( Y,  x,  x,  x,  Y,  x,  Y,  Y,  x, R32G32B32A32_SINT)
> -   SF( Y,  x,  x,  x,  Y,  x,  Y,  Y,  x, R32G32B32A32_UINT)
> -   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x, R32G32B32A32_UNORM)
> -   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x, R32G32B32A32_SNORM)
> -   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x, R64G64_FLOAT)
> -   SF( Y, 50,  x,  x,  x,  x,  x,  x,  x, R32G32B32X32_FLOAT)
> -   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x, R32G32B32A32_SSCALED)
> -   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x, R32G32B32A32_USCALED)
> -   SF( x,  x,  x,  x,  x,  x,  x,  x,  x, R32G32B32A32_SFIXED)
> -   SF( x,  x,  x,  x,  x,  x,  x,  x,  x, R64G64_PASSTHRU)
> -   SF( Y, 50,  x,  x,  x,  x,  Y,  Y,  x, R32G32B32_FLOAT)
> -   SF( Y,  x,  x,  x,  x,  x,  Y,  Y,  x, R32G32B32_SINT)
> -   SF( Y,  x,  x,  x,  x,  x,  Y,  Y,  x, R32G32B32_UINT)
> -   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x, R32G32B32_UNORM)
> -   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x, R32G32B32_SNORM)
> -   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x, R32G32B32_SSCALED)
> -   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x, R32G32B32_USCALED)
> -   SF( x,  x,  x,  x,  x,  x,  x,  x,  x, R32G32B32_SFIXED)
> -   SF( Y,  Y,  x,  x,  Y, 45,  Y,  x, 60, R16G16B16A16_UNORM)
> -   SF( Y,  Y,  x,  x,  Y, 60,  Y,  x,  x, R16G16B16A16_SNORM)
> -   SF( Y,  x,  x,  x,  Y,  x,  Y,  x,  x, R16G16B16A16_SINT)
> -   SF( Y,  x,  x,  x,  Y,  x,  Y,  x,  x, R16G16B16A16_UINT)
> -   SF( Y,  Y,  x,  x,  Y,  Y,  Y,  x,  x, R16G16B16A16_FLOAT)
> -   SF( Y, 50,  x,  x,  Y,  Y,  Y,  Y,  x, R32G32_FLOAT)
> -   SF( Y, 70,  x,  x,  Y,  Y,  Y,  Y,  x, R32G32_FLOAT_LD)
> -   SF( Y,  x,  x,  x,  Y,  x,  Y,  Y,  x, R32G32_SINT)
> -   SF( Y,  x,  x,  x,  Y,  x,  Y,  Y,  x, R32G32_UINT)
> -   SF( Y, 50,  Y,  x,  x,  x,  x,  x,  x, R32_FLOAT_X8X24_TYPELESS)
> -   SF( Y,  x,  x,  x,  x,  x,  x,  x,  x, X32_TYPELESS_G8X24_UINT)
> -   SF( Y, 50,  x,  x,  x,  x,  x,  x,  x, L32A32_FLOAT)
> -   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x, R32G32_UNORM)
> -   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x, R32G32_SNORM)
> -   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x, R64_FLOAT)
> -   SF( Y,  Y,  x,  x,  x,  x,  x,  x,  x, R16G16B16X16_UNORM)
> -   SF( Y,  Y,  x,  x,  x,  x,  x,  x,  x, R16G16B16X16_FLOAT)
> -   SF( Y, 50,  x,  x,  x,  x,  x,  x,  x, A32X32_FLOAT)
> -   SF( Y, 50,  x,  x,  x,  x,  x,  x,  x, L32X32_FLOAT)
> -   SF( Y, 50,  x,  x,  x,  x,  x,  x,  x, I32X32_FLOAT)
> -   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x, R16G16B16A16_SSCALED)
> -   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x, R16G16B16A16_USCALED)
> -   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x, R32G32_SSCALED)
> -   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x, R32G32_USCALED)
> -   SF( x,  x,  x,  x,  x,  x,  x,  x,  x, R32G32_SFIXED)
> -   SF( x,  x,  x,  x,  x,  x,  x,  x,  x, R64_PASSTHRU)
> -   SF( Y,  Y,  x,  Y,  Y,  Y,  Y,  x, 60, B8G8R8A8_UNORM)
> -   SF( Y,  Y,  x,  x,  Y,  Y,  x,  x,  x, B8G8R8A8_UNORM_SRGB)
> -/* smpl filt shad CK  RT  AB  VB  SO  color */
> -   SF( Y,  Y,  x,  x,  Y,  Y,  Y,  x, 60, R10G10B10A2_UNORM)
> -   SF( Y,  Y,  x,  x,  x,  x,  x,  x, 60, R10G10B10A2_UNORM_SRGB)
> -   SF( Y,  x,  x,  x,  Y,  x,  Y,  x,  x, R10G10B10A2_UINT)
> -   SF( Y,  Y,  x,  x,  x,  Y,  Y,  x,  x, R10G10B10_SNORM_A2_UNORM)
> -   SF( Y,  Y,  x,  x,  Y,  Y,  Y,  x, 60, R8G8B8A8_UNORM)
> -   SF( Y,  Y,  x,  x,  Y,  Y,  x,  x, 60, R8G8B8A8_UNORM_SRGB)
> -   SF( Y,  Y,  x,  x,  Y, 60,  Y,  x,  x, R8G8B8A8_SNORM)
> -   SF( Y,  x,  x,  x,  Y,  x,  Y,  x,  x, R8G8B8A8_SINT)
> -   SF( Y,  x,  x,  x,  Y,  x,  Y,  x,  x, R8G8B8A8_UINT)
> -   SF( Y,  Y,  x,  x,  Y, 45,  Y,  x,  x, R16G16_UNORM)
> -   SF( Y,  Y,  x,  x,  Y, 60,  Y,  x,  x, R16G16_SNORM)
> -   SF( Y,  x,  x,  x,  Y,  x,  Y,  x,  x, R16G16_SINT)
> -   SF( Y,  x,  x,  x,  Y,  x,  Y,  x,  x, R16G16_UINT)
> -   SF( Y,  Y,  x,  x,  Y,  Y,  Y,  x,  x, R16G16_FLOAT)
> -   SF( Y,  Y,  x,  x,  Y,  Y,  x,  x, 60, B10G10R10A2_UNORM)
> -   SF( Y,  Y,  x,  x,  Y,  Y,  x,  x, 60, B10G10R10A2_UNORM_SRGB)
> -   SF( Y,  Y,  x,  x,  Y,  Y,  Y,  x,  x, R11G11B10_FLOAT)
> -   SF( Y,  x,  x,  x,  Y,  x,  Y,  Y,  x, R32_SINT)
> -   SF( Y,  x,  x,  x,  Y,  x,  Y,  Y,  x, R32_UINT)
> -   SF( Y, 50,  Y,  x,  Y,  Y,  Y,  Y,  x, R32_FLOAT)
> -   SF( Y, 50,  Y,  x,  x,  x,  x,  x,  x, R24_UNORM_X8_TYPELESS)
> -   SF( Y,  x,  x,  x,  x,  x,  x,  x,  x, X24_TYPELESS_G8_UINT)
> -   SF( Y,  Y,  x,  x,  x,  x,  x,  x,  x, L16A16_UNORM)
> -   SF( Y, 50,  Y,  x,  x,  x,  x,  x,  x, I24X8_UNORM)
> -   SF( Y, 50,  Y,  x,  x,  x,  x,  x,  x, L24X8_UNORM)
> -   SF( Y, 50,  Y,  x,  x,  x,  x,  x,  x, A24X8_UNORM)
> -   SF( Y, 50,  Y,  x,  x,  x,  x,  x,  x, I32_FLOAT)
> -   SF( Y, 50,  Y,  x,  x,  x,  x,  x,  x, L32_FLOAT)
> -   SF( Y, 50,  Y,  x,  x,  x,  x,  x,  x, A32_FLOAT)
> -   SF( Y,  Y,  x,  Y,  x,  x,  x,  x, 60, B8G8R8X8_UNORM)
> -   SF( Y,  Y,  x,  x,  x,  x,  x,  x,  x, B8G8R8X8_UNORM_SRGB)
> -   SF( Y,  Y,  x,  x,  x,  x,  x,  x,  x, R8G8B8X8_UNORM)
> -   SF( Y,  Y,  x,  x,  x,  x,  x,  x,  x, R8G8B8X8_UNORM_SRGB)
> -   SF( Y,  Y,  x,  x,  x,  x,  x,  x,  x, R9G9B9E5_SHAREDEXP)
> -   SF( Y,  Y,  x,  x,  x,  x,  x,  x,  x, B10G10R10X2_UNORM)
> -   SF( Y,  Y,  x,  x,  x,  x,  x,  x,  x, L16A16_FLOAT)
> -   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x, R32_UNORM)
> -   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x, R32_SNORM)
> -/* smpl filt shad CK  RT  AB  VB  SO  color */
> -   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x, R10G10B10X2_USCALED)
> -   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x, R8G8B8A8_SSCALED)
> -   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x, R8G8B8A8_USCALED)
> -   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x, R16G16_SSCALED)
> -   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x, R16G16_USCALED)
> -   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x, R32_SSCALED)
> -   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x, R32_USCALED)
> -   SF( Y,  Y,  x,  Y,  Y,  Y,  x,  x,  x, B5G6R5_UNORM)
> -   SF( Y,  Y,  x,  x,  Y,  Y,  x,  x,  x, B5G6R5_UNORM_SRGB)
> -   SF( Y,  Y,  x,  Y,  Y,  Y,  x,  x,  x, B5G5R5A1_UNORM)
> -   SF( Y,  Y,  x,  x,  Y,  Y,  x,  x,  x, B5G5R5A1_UNORM_SRGB)
> -   SF( Y,  Y,  x,  Y,  Y,  Y,  x,  x,  x, B4G4R4A4_UNORM)
> -   SF( Y,  Y,  x,  x,  Y,  Y,  x,  x,  x, B4G4R4A4_UNORM_SRGB)
> -   SF( Y,  Y,  x,  x,  Y,  Y,  Y,  x,  x, R8G8_UNORM)
> -   SF( Y,  Y,  x,  Y,  Y, 60,  Y,  x,  x, R8G8_SNORM)
> -   SF( Y,  x,  x,  x,  Y,  x,  Y,  x,  x, R8G8_SINT)
> -   SF( Y,  x,  x,  x,  Y,  x,  Y,  x,  x, R8G8_UINT)
> -   SF( Y,  Y,  Y,  x,  Y, 45,  Y,  x, 70, R16_UNORM)
> -   SF( Y,  Y,  x,  x,  Y, 60,  Y,  x,  x, R16_SNORM)
> -   SF( Y,  x,  x,  x,  Y,  x,  Y,  x,  x, R16_SINT)
> -   SF( Y,  x,  x,  x,  Y,  x,  Y,  x,  x, R16_UINT)
> -   SF( Y,  Y,  x,  x,  Y,  Y,  Y,  x,  x, R16_FLOAT)
> -   SF(50, 50,  x,  x,  x,  x,  x,  x,  x, A8P8_UNORM_PALETTE0)
> -   SF(50, 50,  x,  x,  x,  x,  x,  x,  x, A8P8_UNORM_PALETTE1)
> -   SF( Y,  Y,  Y,  x,  x,  x,  x,  x,  x, I16_UNORM)
> -   SF( Y,  Y,  Y,  x,  x,  x,  x,  x,  x, L16_UNORM)
> -   SF( Y,  Y,  Y,  x,  x,  x,  x,  x,  x, A16_UNORM)
> -   SF( Y,  Y,  x,  Y,  x,  x,  x,  x,  x, L8A8_UNORM)
> -   SF( Y,  Y,  Y,  x,  x,  x,  x,  x,  x, I16_FLOAT)
> -   SF( Y,  Y,  Y,  x,  x,  x,  x,  x,  x, L16_FLOAT)
> -   SF( Y,  Y,  Y,  x,  x,  x,  x,  x,  x, A16_FLOAT)
> -   SF(45, 45,  x,  x,  x,  x,  x,  x,  x, L8A8_UNORM_SRGB)
> -   SF( Y,  Y,  x,  Y,  x,  x,  x,  x,  x, R5G5_SNORM_B6_UNORM)
> -   SF( x,  x,  x,  x,  Y,  Y,  x,  x,  x, B5G5R5X1_UNORM)
> -   SF( x,  x,  x,  x,  Y,  Y,  x,  x,  x, B5G5R5X1_UNORM_SRGB)
> -   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x, R8G8_SSCALED)
> -   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x, R8G8_USCALED)
> -/* smpl filt shad CK  RT  AB  VB  SO  color */
> -   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x, R16_SSCALED)
> -   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x, R16_USCALED)
> -   SF(50, 50,  x,  x,  x,  x,  x,  x,  x, P8A8_UNORM_PALETTE0)
> -   SF(50, 50,  x,  x,  x,  x,  x,  x,  x, P8A8_UNORM_PALETTE1)
> -   SF( x,  x,  x,  x,  x,  x,  x,  x,  x, A1B5G5R5_UNORM)
> -   SF( x,  x,  x,  x,  x,  x,  x,  x,  x, A4B4G4R4_UNORM)
> -   SF( x,  x,  x,  x,  x,  x,  x,  x,  x, L8A8_UINT)
> -   SF( x,  x,  x,  x,  x,  x,  x,  x,  x, L8A8_SINT)
> -   SF( Y,  Y,  x, 45,  Y,  Y,  Y,  x,  x, R8_UNORM)
> -   SF( Y,  Y,  x,  x,  Y, 60,  Y,  x,  x, R8_SNORM)
> -   SF( Y,  x,  x,  x,  Y,  x,  Y,  x,  x, R8_SINT)
> -   SF( Y,  x,  x,  x,  Y,  x,  Y,  x,  x, R8_UINT)
> -   SF( Y,  Y,  x,  Y,  Y,  Y,  x,  x,  x, A8_UNORM)
> -   SF( Y,  Y,  x,  x,  x,  x,  x,  x,  x, I8_UNORM)
> -   SF( Y,  Y,  x,  Y,  x,  x,  x,  x,  x, L8_UNORM)
> -   SF( Y,  Y,  x,  x,  x,  x,  x,  x,  x, P4A4_UNORM)
> -   SF( Y,  Y,  x,  x,  x,  x,  x,  x,  x, A4P4_UNORM)
> -   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x, R8_SSCALED)
> -   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x, R8_USCALED)
> -   SF(45, 45,  x,  x,  x,  x,  x,  x,  x, P8_UNORM_PALETTE0)
> -   SF(45, 45,  x,  x,  x,  x,  x,  x,  x, L8_UNORM_SRGB)
> -   SF(45, 45,  x,  x,  x,  x,  x,  x,  x, P8_UNORM_PALETTE1)
> -   SF(45, 45,  x,  x,  x,  x,  x,  x,  x, P4A4_UNORM_PALETTE1)
> -   SF(45, 45,  x,  x,  x,  x,  x,  x,  x, A4P4_UNORM_PALETTE1)
> -   SF( x,  x,  x,  x,  x,  x,  x,  x,  x, Y8_SNORM)
> -   SF( x,  x,  x,  x,  x,  x,  x,  x,  x, L8_UINT)
> -   SF( x,  x,  x,  x,  x,  x,  x,  x,  x, L8_SINT)
> -   SF( x,  x,  x,  x,  x,  x,  x,  x,  x, I8_UINT)
> -   SF( x,  x,  x,  x,  x,  x,  x,  x,  x, I8_SINT)
> -   SF(45, 45,  x,  x,  x,  x,  x,  x,  x, DXT1_RGB_SRGB)
> -   SF( Y,  Y,  x,  x,  x,  x,  x,  x,  x, R1_UINT)
> -   SF( Y,  Y,  x,  Y,  Y,  x,  x,  x, 60, YCRCB_NORMAL)
> -   SF( Y,  Y,  x,  Y,  Y,  x,  x,  x, 60, YCRCB_SWAPUVY)
> -   SF(45, 45,  x,  x,  x,  x,  x,  x,  x, P2_UNORM_PALETTE0)
> -   SF(45, 45,  x,  x,  x,  x,  x,  x,  x, P2_UNORM_PALETTE1)
> -   SF( Y,  Y,  x,  Y,  x,  x,  x,  x,  x, BC1_UNORM)
> -   SF( Y,  Y,  x,  Y,  x,  x,  x,  x,  x, BC2_UNORM)
> -   SF( Y,  Y,  x,  Y,  x,  x,  x,  x,  x, BC3_UNORM)
> -   SF( Y,  Y,  x,  x,  x,  x,  x,  x,  x, BC4_UNORM)
> -   SF( Y,  Y,  x,  x,  x,  x,  x,  x,  x, BC5_UNORM)
> -   SF( Y,  Y,  x,  x,  x,  x,  x,  x,  x, BC1_UNORM_SRGB)
> -   SF( Y,  Y,  x,  x,  x,  x,  x,  x,  x, BC2_UNORM_SRGB)
> -   SF( Y,  Y,  x,  x,  x,  x,  x,  x,  x, BC3_UNORM_SRGB)
> -   SF( Y,  x,  x,  x,  x,  x,  x,  x,  x, MONO8)
> -   SF( Y,  Y,  x,  x,  Y,  x,  x,  x, 60, YCRCB_SWAPUV)
> -   SF( Y,  Y,  x,  x,  Y,  x,  x,  x, 60, YCRCB_SWAPY)
> -   SF( Y,  Y,  x,  x,  x,  x,  x,  x,  x, DXT1_RGB)
> -/* smpl filt shad CK  RT  AB  VB  SO  color */
> -   SF( Y,  Y,  x,  x,  x,  x,  x,  x,  x, FXT1)
> -   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x, R8G8B8_UNORM)
> -   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x, R8G8B8_SNORM)
> -   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x, R8G8B8_SSCALED)
> -   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x, R8G8B8_USCALED)
> -   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x, R64G64B64A64_FLOAT)
> -   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x, R64G64B64_FLOAT)
> -   SF( Y,  Y,  x,  x,  x,  x,  x,  x,  x, BC4_SNORM)
> -   SF( Y,  Y,  x,  x,  x,  x,  x,  x,  x, BC5_SNORM)
> -   SF(50, 50,  x,  x,  x,  x, 60,  x,  x, R16G16B16_FLOAT)
> -   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x, R16G16B16_UNORM)
> -   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x, R16G16B16_SNORM)
> -   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x, R16G16B16_SSCALED)
> -   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x, R16G16B16_USCALED)
> -   SF(70, 70,  x,  x,  x,  x,  x,  x,  x, BC6H_SF16)
> -   SF(70, 70,  x,  x,  x,  x,  x,  x,  x, BC7_UNORM)
> -   SF(70, 70,  x,  x,  x,  x,  x,  x,  x, BC7_UNORM_SRGB)
> -   SF(70, 70,  x,  x,  x,  x,  x,  x,  x, BC6H_UF16)
> -   SF( x,  x,  x,  x,  x,  x,  x,  x,  x, PLANAR_420_8)
> -   SF( x,  x,  x,  x,  x,  x,  x,  x,  x, R8G8B8_UNORM_SRGB)
> -   SF( x,  x,  x,  x,  x,  x,  x,  x,  x, ETC1_RGB8)
> -   SF( x,  x,  x,  x,  x,  x,  x,  x,  x, ETC2_RGB8)
> -   SF( x,  x,  x,  x,  x,  x,  x,  x,  x, EAC_R11)
> -   SF( x,  x,  x,  x,  x,  x,  x,  x,  x, EAC_RG11)
> -   SF( x,  x,  x,  x,  x,  x,  x,  x,  x, EAC_SIGNED_R11)
> -   SF( x,  x,  x,  x,  x,  x,  x,  x,  x, EAC_SIGNED_RG11)
> -   SF( x,  x,  x,  x,  x,  x,  x,  x,  x, ETC2_SRGB8)
> -   SF( x,  x,  x,  x,  x,  x,  x,  x,  x, R16G16B16_UINT)
> -   SF( x,  x,  x,  x,  x,  x,  x,  x,  x, R16G16B16_SINT)
> -   SF( x,  x,  x,  x,  x,  x,  x,  x,  x, R32_SFIXED)
> -   SF( x,  x,  x,  x,  x,  x,  x,  x,  x, R10G10B10A2_SNORM)
> -   SF( x,  x,  x,  x,  x,  x,  x,  x,  x, R10G10B10A2_USCALED)
> -   SF( x,  x,  x,  x,  x,  x,  x,  x,  x, R10G10B10A2_SSCALED)
> -   SF( x,  x,  x,  x,  x,  x,  x,  x,  x, R10G10B10A2_SINT)
> -   SF( x,  x,  x,  x,  x,  x,  x,  x,  x, B10G10R10A2_SNORM)
> -   SF( x,  x,  x,  x,  x,  x,  x,  x,  x, B10G10R10A2_USCALED)
> -   SF( x,  x,  x,  x,  x,  x,  x,  x,  x, B10G10R10A2_SSCALED)
> -   SF( x,  x,  x,  x,  x,  x,  x,  x,  x, B10G10R10A2_UINT)
> -   SF( x,  x,  x,  x,  x,  x,  x,  x,  x, B10G10R10A2_SINT)
> -   SF( x,  x,  x,  x,  x,  x,  x,  x,  x, R64G64B64A64_PASSTHRU)
> -   SF( x,  x,  x,  x,  x,  x,  x,  x,  x, R64G64B64_PASSTHRU)
> -   SF( x,  x,  x,  x,  x,  x,  x,  x,  x, ETC2_RGB8_PTA)
> -   SF( x,  x,  x,  x,  x,  x,  x,  x,  x, ETC2_SRGB8_PTA)
> -   SF( x,  x,  x,  x,  x,  x,  x,  x,  x, ETC2_EAC_RGBA8)
> -   SF( x,  x,  x,  x,  x,  x,  x,  x,  x, ETC2_EAC_SRGB8_A8)
> -   SF( x,  x,  x,  x,  x,  x,  x,  x,  x, R8G8B8_UINT)
> -   SF( x,  x,  x,  x,  x,  x,  x,  x,  x, R8G8B8_SINT)
> -   SF(80, 80,  x,  x,  x,  x,  x,  x,  x, ASTC_LDR_2D_4x4_FLT16)
> -   SF(80, 80,  x,  x,  x,  x,  x,  x,  x, ASTC_LDR_2D_5x4_FLT16)
> -   SF(80, 80,  x,  x,  x,  x,  x,  x,  x, ASTC_LDR_2D_5x5_FLT16)
> -   SF(80, 80,  x,  x,  x,  x,  x,  x,  x, ASTC_LDR_2D_6x5_FLT16)
> -   SF(80, 80,  x,  x,  x,  x,  x,  x,  x, ASTC_LDR_2D_6x6_FLT16)
> -   SF(80, 80,  x,  x,  x,  x,  x,  x,  x, ASTC_LDR_2D_8x5_FLT16)
> -   SF(80, 80,  x,  x,  x,  x,  x,  x,  x, ASTC_LDR_2D_8x6_FLT16)
> -   SF(80, 80,  x,  x,  x,  x,  x,  x,  x, ASTC_LDR_2D_8x8_FLT16)
> -   SF(80, 80,  x,  x,  x,  x,  x,  x,  x, ASTC_LDR_2D_10x5_FLT16)
> -   SF(80, 80,  x,  x,  x,  x,  x,  x,  x, ASTC_LDR_2D_10x6_FLT16)
> -   SF(80, 80,  x,  x,  x,  x,  x,  x,  x, ASTC_LDR_2D_10x8_FLT16)
> -   SF(80, 80,  x,  x,  x,  x,  x,  x,  x, ASTC_LDR_2D_10x10_FLT16)
> -   SF(80, 80,  x,  x,  x,  x,  x,  x,  x, ASTC_LDR_2D_12x10_FLT16)
> -   SF(80, 80,  x,  x,  x,  x,  x,  x,  x, ASTC_LDR_2D_12x12_FLT16)
> -   SF(80, 80,  x,  x,  x,  x,  x,  x,  x, ASTC_LDR_2D_4x4_U8sRGB)
> -   SF(80, 80,  x,  x,  x,  x,  x,  x,  x, ASTC_LDR_2D_5x4_U8sRGB)
> -   SF(80, 80,  x,  x,  x,  x,  x,  x,  x, ASTC_LDR_2D_5x5_U8sRGB)
> -   SF(80, 80,  x,  x,  x,  x,  x,  x,  x, ASTC_LDR_2D_6x5_U8sRGB)
> -   SF(80, 80,  x,  x,  x,  x,  x,  x,  x, ASTC_LDR_2D_6x6_U8sRGB)
> -   SF(80, 80,  x,  x,  x,  x,  x,  x,  x, ASTC_LDR_2D_8x5_U8sRGB)
> -   SF(80, 80,  x,  x,  x,  x,  x,  x,  x, ASTC_LDR_2D_8x6_U8sRGB)
> -   SF(80, 80,  x,  x,  x,  x,  x,  x,  x, ASTC_LDR_2D_8x8_U8sRGB)
> -   SF(80, 80,  x,  x,  x,  x,  x,  x,  x, ASTC_LDR_2D_10x5_U8sRGB)
> -   SF(80, 80,  x,  x,  x,  x,  x,  x,  x, ASTC_LDR_2D_10x6_U8sRGB)
> -   SF(80, 80,  x,  x,  x,  x,  x,  x,  x, ASTC_LDR_2D_10x8_U8sRGB)
> -   SF(80, 80,  x,  x,  x,  x,  x,  x,  x, ASTC_LDR_2D_10x10_U8sRGB)
> -   SF(80, 80,  x,  x,  x,  x,  x,  x,  x, ASTC_LDR_2D_12x10_U8sRGB)
> -   SF(80, 80,  x,  x,  x,  x,  x,  x,  x, ASTC_LDR_2D_12x12_U8sRGB)
> +/* smpl filt shad CK  RT  AB  VB  SO  color ccs_e */
> +   SF( Y, 50,  x,  x,  Y,  Y,  Y,  Y,  x,    x,   R32G32B32A32_FLOAT)
> +   SF( Y,  x,  x,  x,  Y,  x,  Y,  Y,  x,    x,   R32G32B32A32_SINT)
> +   SF( Y,  x,  x,  x,  Y,  x,  Y,  Y,  x,    x,   R32G32B32A32_UINT)
> +   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x,    x,   R32G32B32A32_UNORM)
> +   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x,    x,   R32G32B32A32_SNORM)
> +   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x,    x,   R64G64_FLOAT)
> +   SF( Y, 50,  x,  x,  x,  x,  x,  x,  x,    x,   R32G32B32X32_FLOAT)
> +   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x,    x,   R32G32B32A32_SSCALED)
> +   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x,    x,   R32G32B32A32_USCALED)
> +   SF( x,  x,  x,  x,  x,  x,  x,  x,  x,    x,   R32G32B32A32_SFIXED)
> +   SF( x,  x,  x,  x,  x,  x,  x,  x,  x,    x,   R64G64_PASSTHRU)
> +   SF( Y, 50,  x,  x,  x,  x,  Y,  Y,  x,    x,   R32G32B32_FLOAT)
> +   SF( Y,  x,  x,  x,  x,  x,  Y,  Y,  x,    x,   R32G32B32_SINT)
> +   SF( Y,  x,  x,  x,  x,  x,  Y,  Y,  x,    x,   R32G32B32_UINT)
> +   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x,    x,   R32G32B32_UNORM)
> +   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x,    x,   R32G32B32_SNORM)
> +   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x,    x,   R32G32B32_SSCALED)
> +   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x,    x,   R32G32B32_USCALED)
> +   SF( x,  x,  x,  x,  x,  x,  x,  x,  x,    x,   R32G32B32_SFIXED)
> +   SF( Y,  Y,  x,  x,  Y, 45,  Y,  x, 60,    x,   R16G16B16A16_UNORM)
> +   SF( Y,  Y,  x,  x,  Y, 60,  Y,  x,  x,    x,   R16G16B16A16_SNORM)
> +   SF( Y,  x,  x,  x,  Y,  x,  Y,  x,  x,    x,   R16G16B16A16_SINT)
> +   SF( Y,  x,  x,  x,  Y,  x,  Y,  x,  x,    x,   R16G16B16A16_UINT)
> +   SF( Y,  Y,  x,  x,  Y,  Y,  Y,  x,  x,    x,   R16G16B16A16_FLOAT)
> +   SF( Y, 50,  x,  x,  Y,  Y,  Y,  Y,  x,    x,   R32G32_FLOAT)
> +   SF( Y, 70,  x,  x,  Y,  Y,  Y,  Y,  x,    x,   R32G32_FLOAT_LD)
> +   SF( Y,  x,  x,  x,  Y,  x,  Y,  Y,  x,    x,   R32G32_SINT)
> +   SF( Y,  x,  x,  x,  Y,  x,  Y,  Y,  x,    x,   R32G32_UINT)
> +   SF( Y, 50,  Y,  x,  x,  x,  x,  x,  x,    x,   R32_FLOAT_X8X24_TYPELESS)
> +   SF( Y,  x,  x,  x,  x,  x,  x,  x,  x,    x,   X32_TYPELESS_G8X24_UINT)
> +   SF( Y, 50,  x,  x,  x,  x,  x,  x,  x,    x,   L32A32_FLOAT)
> +   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x,    x,   R32G32_UNORM)
> +   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x,    x,   R32G32_SNORM)
> +   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x,    x,   R64_FLOAT)
> +   SF( Y,  Y,  x,  x,  x,  x,  x,  x,  x,    x,   R16G16B16X16_UNORM)
> +   SF( Y,  Y,  x,  x,  x,  x,  x,  x,  x,    x,   R16G16B16X16_FLOAT)
> +   SF( Y, 50,  x,  x,  x,  x,  x,  x,  x,    x,   A32X32_FLOAT)
> +   SF( Y, 50,  x,  x,  x,  x,  x,  x,  x,    x,   L32X32_FLOAT)
> +   SF( Y, 50,  x,  x,  x,  x,  x,  x,  x,    x,   I32X32_FLOAT)
> +   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x,    x,   R16G16B16A16_SSCALED)
> +   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x,    x,   R16G16B16A16_USCALED)
> +   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x,    x,   R32G32_SSCALED)
> +   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x,    x,   R32G32_USCALED)
> +   SF( x,  x,  x,  x,  x,  x,  x,  x,  x,    x,   R32G32_SFIXED)
> +   SF( x,  x,  x,  x,  x,  x,  x,  x,  x,    x,   R64_PASSTHRU)
> +   SF( Y,  Y,  x,  Y,  Y,  Y,  Y,  x, 60,    x,   B8G8R8A8_UNORM)
> +   SF( Y,  Y,  x,  x,  Y,  Y,  x,  x,  x,    x,   B8G8R8A8_UNORM_SRGB)
> +/* smpl filt shad CK  RT  AB  VB  SO  color ccs_e */
> +   SF( Y,  Y,  x,  x,  Y,  Y,  Y,  x, 60,    x,   R10G10B10A2_UNORM)
> +   SF( Y,  Y,  x,  x,  x,  x,  x,  x, 60,    x,   R10G10B10A2_UNORM_SRGB)
> +   SF( Y,  x,  x,  x,  Y,  x,  Y,  x,  x,    x,   R10G10B10A2_UINT)
> +   SF( Y,  Y,  x,  x,  x,  Y,  Y,  x,  x,    x,   R10G10B10_SNORM_A2_UNORM)
> +   SF( Y,  Y,  x,  x,  Y,  Y,  Y,  x, 60,    x,   R8G8B8A8_UNORM)
> +   SF( Y,  Y,  x,  x,  Y,  Y,  x,  x, 60,    x,   R8G8B8A8_UNORM_SRGB)
> +   SF( Y,  Y,  x,  x,  Y, 60,  Y,  x,  x,    x,   R8G8B8A8_SNORM)
> +   SF( Y,  x,  x,  x,  Y,  x,  Y,  x,  x,    x,   R8G8B8A8_SINT)
> +   SF( Y,  x,  x,  x,  Y,  x,  Y,  x,  x,    x,   R8G8B8A8_UINT)
> +   SF( Y,  Y,  x,  x,  Y, 45,  Y,  x,  x,    x,   R16G16_UNORM)
> +   SF( Y,  Y,  x,  x,  Y, 60,  Y,  x,  x,    x,   R16G16_SNORM)
> +   SF( Y,  x,  x,  x,  Y,  x,  Y,  x,  x,    x,   R16G16_SINT)
> +   SF( Y,  x,  x,  x,  Y,  x,  Y,  x,  x,    x,   R16G16_UINT)
> +   SF( Y,  Y,  x,  x,  Y,  Y,  Y,  x,  x,    x,   R16G16_FLOAT)
> +   SF( Y,  Y,  x,  x,  Y,  Y,  x,  x, 60,    x,   B10G10R10A2_UNORM)
> +   SF( Y,  Y,  x,  x,  Y,  Y,  x,  x, 60,    x,   B10G10R10A2_UNORM_SRGB)
> +   SF( Y,  Y,  x,  x,  Y,  Y,  Y,  x,  x,    x,   R11G11B10_FLOAT)
> +   SF( Y,  x,  x,  x,  Y,  x,  Y,  Y,  x,    x,   R32_SINT)
> +   SF( Y,  x,  x,  x,  Y,  x,  Y,  Y,  x,    x,   R32_UINT)
> +   SF( Y, 50,  Y,  x,  Y,  Y,  Y,  Y,  x,    x,   R32_FLOAT)
> +   SF( Y, 50,  Y,  x,  x,  x,  x,  x,  x,    x,   R24_UNORM_X8_TYPELESS)
> +   SF( Y,  x,  x,  x,  x,  x,  x,  x,  x,    x,   X24_TYPELESS_G8_UINT)
> +   SF( Y,  Y,  x,  x,  x,  x,  x,  x,  x,    x,   L16A16_UNORM)
> +   SF( Y, 50,  Y,  x,  x,  x,  x,  x,  x,    x,   I24X8_UNORM)
> +   SF( Y, 50,  Y,  x,  x,  x,  x,  x,  x,    x,   L24X8_UNORM)
> +   SF( Y, 50,  Y,  x,  x,  x,  x,  x,  x,    x,   A24X8_UNORM)
> +   SF( Y, 50,  Y,  x,  x,  x,  x,  x,  x,    x,   I32_FLOAT)
> +   SF( Y, 50,  Y,  x,  x,  x,  x,  x,  x,    x,   L32_FLOAT)
> +   SF( Y, 50,  Y,  x,  x,  x,  x,  x,  x,    x,   A32_FLOAT)
> +   SF( Y,  Y,  x,  Y,  x,  x,  x,  x, 60,    x,   B8G8R8X8_UNORM)
> +   SF( Y,  Y,  x,  x,  x,  x,  x,  x,  x,    x,   B8G8R8X8_UNORM_SRGB)
> +   SF( Y,  Y,  x,  x,  x,  x,  x,  x,  x,    x,   R8G8B8X8_UNORM)
> +   SF( Y,  Y,  x,  x,  x,  x,  x,  x,  x,    x,   R8G8B8X8_UNORM_SRGB)
> +   SF( Y,  Y,  x,  x,  x,  x,  x,  x,  x,    x,   R9G9B9E5_SHAREDEXP)
> +   SF( Y,  Y,  x,  x,  x,  x,  x,  x,  x,    x,   B10G10R10X2_UNORM)
> +   SF( Y,  Y,  x,  x,  x,  x,  x,  x,  x,    x,   L16A16_FLOAT)
> +   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x,    x,   R32_UNORM)
> +   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x,    x,   R32_SNORM)
> +/* smpl filt shad CK  RT  AB  VB  SO  color ccs_e */
> +   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x,    x,   R10G10B10X2_USCALED)
> +   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x,    x,   R8G8B8A8_SSCALED)
> +   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x,    x,   R8G8B8A8_USCALED)
> +   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x,    x,   R16G16_SSCALED)
> +   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x,    x,   R16G16_USCALED)
> +   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x,    x,   R32_SSCALED)
> +   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x,    x,   R32_USCALED)
> +   SF( Y,  Y,  x,  Y,  Y,  Y,  x,  x,  x,    x,   B5G6R5_UNORM)
> +   SF( Y,  Y,  x,  x,  Y,  Y,  x,  x,  x,    x,   B5G6R5_UNORM_SRGB)
> +   SF( Y,  Y,  x,  Y,  Y,  Y,  x,  x,  x,    x,   B5G5R5A1_UNORM)
> +   SF( Y,  Y,  x,  x,  Y,  Y,  x,  x,  x,    x,   B5G5R5A1_UNORM_SRGB)
> +   SF( Y,  Y,  x,  Y,  Y,  Y,  x,  x,  x,    x,   B4G4R4A4_UNORM)
> +   SF( Y,  Y,  x,  x,  Y,  Y,  x,  x,  x,    x,   B4G4R4A4_UNORM_SRGB)
> +   SF( Y,  Y,  x,  x,  Y,  Y,  Y,  x,  x,    x,   R8G8_UNORM)
> +   SF( Y,  Y,  x,  Y,  Y, 60,  Y,  x,  x,    x,   R8G8_SNORM)
> +   SF( Y,  x,  x,  x,  Y,  x,  Y,  x,  x,    x,   R8G8_SINT)
> +   SF( Y,  x,  x,  x,  Y,  x,  Y,  x,  x,    x,   R8G8_UINT)
> +   SF( Y,  Y,  Y,  x,  Y, 45,  Y,  x, 70,    x,   R16_UNORM)
> +   SF( Y,  Y,  x,  x,  Y, 60,  Y,  x,  x,    x,   R16_SNORM)
> +   SF( Y,  x,  x,  x,  Y,  x,  Y,  x,  x,    x,   R16_SINT)
> +   SF( Y,  x,  x,  x,  Y,  x,  Y,  x,  x,    x,   R16_UINT)
> +   SF( Y,  Y,  x,  x,  Y,  Y,  Y,  x,  x,    x,   R16_FLOAT)
> +   SF(50, 50,  x,  x,  x,  x,  x,  x,  x,    x,   A8P8_UNORM_PALETTE0)
> +   SF(50, 50,  x,  x,  x,  x,  x,  x,  x,    x,   A8P8_UNORM_PALETTE1)
> +   SF( Y,  Y,  Y,  x,  x,  x,  x,  x,  x,    x,   I16_UNORM)
> +   SF( Y,  Y,  Y,  x,  x,  x,  x,  x,  x,    x,   L16_UNORM)
> +   SF( Y,  Y,  Y,  x,  x,  x,  x,  x,  x,    x,   A16_UNORM)
> +   SF( Y,  Y,  x,  Y,  x,  x,  x,  x,  x,    x,   L8A8_UNORM)
> +   SF( Y,  Y,  Y,  x,  x,  x,  x,  x,  x,    x,   I16_FLOAT)
> +   SF( Y,  Y,  Y,  x,  x,  x,  x,  x,  x,    x,   L16_FLOAT)
> +   SF( Y,  Y,  Y,  x,  x,  x,  x,  x,  x,    x,   A16_FLOAT)
> +   SF(45, 45,  x,  x,  x,  x,  x,  x,  x,    x,   L8A8_UNORM_SRGB)
> +   SF( Y,  Y,  x,  Y,  x,  x,  x,  x,  x,    x,   R5G5_SNORM_B6_UNORM)
> +   SF( x,  x,  x,  x,  Y,  Y,  x,  x,  x,    x,   B5G5R5X1_UNORM)
> +   SF( x,  x,  x,  x,  Y,  Y,  x,  x,  x,    x,   B5G5R5X1_UNORM_SRGB)
> +   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x,    x,   R8G8_SSCALED)
> +   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x,    x,   R8G8_USCALED)
> +/* smpl filt shad CK  RT  AB  VB  SO  color ccs_e */
> +   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x,    x,   R16_SSCALED)
> +   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x,    x,   R16_USCALED)
> +   SF(50, 50,  x,  x,  x,  x,  x,  x,  x,    x,   P8A8_UNORM_PALETTE0)
> +   SF(50, 50,  x,  x,  x,  x,  x,  x,  x,    x,   P8A8_UNORM_PALETTE1)
> +   SF( x,  x,  x,  x,  x,  x,  x,  x,  x,    x,   A1B5G5R5_UNORM)
> +   SF( x,  x,  x,  x,  x,  x,  x,  x,  x,    x,   A4B4G4R4_UNORM)
> +   SF( x,  x,  x,  x,  x,  x,  x,  x,  x,    x,   L8A8_UINT)
> +   SF( x,  x,  x,  x,  x,  x,  x,  x,  x,    x,   L8A8_SINT)
> +   SF( Y,  Y,  x, 45,  Y,  Y,  Y,  x,  x,    x,   R8_UNORM)
> +   SF( Y,  Y,  x,  x,  Y, 60,  Y,  x,  x,    x,   R8_SNORM)
> +   SF( Y,  x,  x,  x,  Y,  x,  Y,  x,  x,    x,   R8_SINT)
> +   SF( Y,  x,  x,  x,  Y,  x,  Y,  x,  x,    x,   R8_UINT)
> +   SF( Y,  Y,  x,  Y,  Y,  Y,  x,  x,  x,    x,   A8_UNORM)
> +   SF( Y,  Y,  x,  x,  x,  x,  x,  x,  x,    x,   I8_UNORM)
> +   SF( Y,  Y,  x,  Y,  x,  x,  x,  x,  x,    x,   L8_UNORM)
> +   SF( Y,  Y,  x,  x,  x,  x,  x,  x,  x,    x,   P4A4_UNORM)
> +   SF( Y,  Y,  x,  x,  x,  x,  x,  x,  x,    x,   A4P4_UNORM)
> +   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x,    x,   R8_SSCALED)
> +   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x,    x,   R8_USCALED)
> +   SF(45, 45,  x,  x,  x,  x,  x,  x,  x,    x,   P8_UNORM_PALETTE0)
> +   SF(45, 45,  x,  x,  x,  x,  x,  x,  x,    x,   L8_UNORM_SRGB)
> +   SF(45, 45,  x,  x,  x,  x,  x,  x,  x,    x,   P8_UNORM_PALETTE1)
> +   SF(45, 45,  x,  x,  x,  x,  x,  x,  x,    x,   P4A4_UNORM_PALETTE1)
> +   SF(45, 45,  x,  x,  x,  x,  x,  x,  x,    x,   A4P4_UNORM_PALETTE1)
> +   SF( x,  x,  x,  x,  x,  x,  x,  x,  x,    x,   Y8_SNORM)
> +   SF( x,  x,  x,  x,  x,  x,  x,  x,  x,    x,   L8_UINT)
> +   SF( x,  x,  x,  x,  x,  x,  x,  x,  x,    x,   L8_SINT)
> +   SF( x,  x,  x,  x,  x,  x,  x,  x,  x,    x,   I8_UINT)
> +   SF( x,  x,  x,  x,  x,  x,  x,  x,  x,    x,   I8_SINT)
> +   SF(45, 45,  x,  x,  x,  x,  x,  x,  x,    x,   DXT1_RGB_SRGB)
> +   SF( Y,  Y,  x,  x,  x,  x,  x,  x,  x,    x,   R1_UINT)
> +   SF( Y,  Y,  x,  Y,  Y,  x,  x,  x, 60,    x,   YCRCB_NORMAL)
> +   SF( Y,  Y,  x,  Y,  Y,  x,  x,  x, 60,    x,   YCRCB_SWAPUVY)
> +   SF(45, 45,  x,  x,  x,  x,  x,  x,  x,    x,   P2_UNORM_PALETTE0)
> +   SF(45, 45,  x,  x,  x,  x,  x,  x,  x,    x,   P2_UNORM_PALETTE1)
> +   SF( Y,  Y,  x,  Y,  x,  x,  x,  x,  x,    x,   BC1_UNORM)
> +   SF( Y,  Y,  x,  Y,  x,  x,  x,  x,  x,    x,   BC2_UNORM)
> +   SF( Y,  Y,  x,  Y,  x,  x,  x,  x,  x,    x,   BC3_UNORM)
> +   SF( Y,  Y,  x,  x,  x,  x,  x,  x,  x,    x,   BC4_UNORM)
> +   SF( Y,  Y,  x,  x,  x,  x,  x,  x,  x,    x,   BC5_UNORM)
> +   SF( Y,  Y,  x,  x,  x,  x,  x,  x,  x,    x,   BC1_UNORM_SRGB)
> +   SF( Y,  Y,  x,  x,  x,  x,  x,  x,  x,    x,   BC2_UNORM_SRGB)
> +   SF( Y,  Y,  x,  x,  x,  x,  x,  x,  x,    x,   BC3_UNORM_SRGB)
> +   SF( Y,  x,  x,  x,  x,  x,  x,  x,  x,    x,   MONO8)
> +   SF( Y,  Y,  x,  x,  Y,  x,  x,  x, 60,    x,   YCRCB_SWAPUV)
> +   SF( Y,  Y,  x,  x,  Y,  x,  x,  x, 60,    x,   YCRCB_SWAPY)
> +   SF( Y,  Y,  x,  x,  x,  x,  x,  x,  x,    x,   DXT1_RGB)
> +/* smpl filt shad CK  RT  AB  VB  SO  color ccs_e */
> +   SF( Y,  Y,  x,  x,  x,  x,  x,  x,  x,    x,   FXT1)
> +   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x,    x,   R8G8B8_UNORM)
> +   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x,    x,   R8G8B8_SNORM)
> +   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x,    x,   R8G8B8_SSCALED)
> +   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x,    x,   R8G8B8_USCALED)
> +   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x,    x,   R64G64B64A64_FLOAT)
> +   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x,    x,   R64G64B64_FLOAT)
> +   SF( Y,  Y,  x,  x,  x,  x,  x,  x,  x,    x,   BC4_SNORM)
> +   SF( Y,  Y,  x,  x,  x,  x,  x,  x,  x,    x,   BC5_SNORM)
> +   SF(50, 50,  x,  x,  x,  x, 60,  x,  x,    x,   R16G16B16_FLOAT)
> +   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x,    x,   R16G16B16_UNORM)
> +   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x,    x,   R16G16B16_SNORM)
> +   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x,    x,   R16G16B16_SSCALED)
> +   SF( x,  x,  x,  x,  x,  x,  Y,  x,  x,    x,   R16G16B16_USCALED)
> +   SF(70, 70,  x,  x,  x,  x,  x,  x,  x,    x,   BC6H_SF16)
> +   SF(70, 70,  x,  x,  x,  x,  x,  x,  x,    x,   BC7_UNORM)
> +   SF(70, 70,  x,  x,  x,  x,  x,  x,  x,    x,   BC7_UNORM_SRGB)
> +   SF(70, 70,  x,  x,  x,  x,  x,  x,  x,    x,   BC6H_UF16)
> +   SF( x,  x,  x,  x,  x,  x,  x,  x,  x,    x,   PLANAR_420_8)
> +   SF( x,  x,  x,  x,  x,  x,  x,  x,  x,    x,   R8G8B8_UNORM_SRGB)
> +   SF( x,  x,  x,  x,  x,  x,  x,  x,  x,    x,   ETC1_RGB8)
> +   SF( x,  x,  x,  x,  x,  x,  x,  x,  x,    x,   ETC2_RGB8)
> +   SF( x,  x,  x,  x,  x,  x,  x,  x,  x,    x,   EAC_R11)
> +   SF( x,  x,  x,  x,  x,  x,  x,  x,  x,    x,   EAC_RG11)
> +   SF( x,  x,  x,  x,  x,  x,  x,  x,  x,    x,   EAC_SIGNED_R11)
> +   SF( x,  x,  x,  x,  x,  x,  x,  x,  x,    x,   EAC_SIGNED_RG11)
> +   SF( x,  x,  x,  x,  x,  x,  x,  x,  x,    x,   ETC2_SRGB8)
> +   SF( x,  x,  x,  x,  x,  x,  x,  x,  x,    x,   R16G16B16_UINT)
> +   SF( x,  x,  x,  x,  x,  x,  x,  x,  x,    x,   R16G16B16_SINT)
> +   SF( x,  x,  x,  x,  x,  x,  x,  x,  x,    x,   R32_SFIXED)
> +   SF( x,  x,  x,  x,  x,  x,  x,  x,  x,    x,   R10G10B10A2_SNORM)
> +   SF( x,  x,  x,  x,  x,  x,  x,  x,  x,    x,   R10G10B10A2_USCALED)
> +   SF( x,  x,  x,  x,  x,  x,  x,  x,  x,    x,   R10G10B10A2_SSCALED)
> +   SF( x,  x,  x,  x,  x,  x,  x,  x,  x,    x,   R10G10B10A2_SINT)
> +   SF( x,  x,  x,  x,  x,  x,  x,  x,  x,    x,   B10G10R10A2_SNORM)
> +   SF( x,  x,  x,  x,  x,  x,  x,  x,  x,    x,   B10G10R10A2_USCALED)
> +   SF( x,  x,  x,  x,  x,  x,  x,  x,  x,    x,   B10G10R10A2_SSCALED)
> +   SF( x,  x,  x,  x,  x,  x,  x,  x,  x,    x,   B10G10R10A2_UINT)
> +   SF( x,  x,  x,  x,  x,  x,  x,  x,  x,    x,   B10G10R10A2_SINT)
> +   SF( x,  x,  x,  x,  x,  x,  x,  x,  x,    x,   R64G64B64A64_PASSTHRU)
> +   SF( x,  x,  x,  x,  x,  x,  x,  x,  x,    x,   R64G64B64_PASSTHRU)
> +   SF( x,  x,  x,  x,  x,  x,  x,  x,  x,    x,   ETC2_RGB8_PTA)
> +   SF( x,  x,  x,  x,  x,  x,  x,  x,  x,    x,   ETC2_SRGB8_PTA)
> +   SF( x,  x,  x,  x,  x,  x,  x,  x,  x,    x,   ETC2_EAC_RGBA8)
> +   SF( x,  x,  x,  x,  x,  x,  x,  x,  x,    x,   ETC2_EAC_SRGB8_A8)
> +   SF( x,  x,  x,  x,  x,  x,  x,  x,  x,    x,   R8G8B8_UINT)
> +   SF( x,  x,  x,  x,  x,  x,  x,  x,  x,    x,   R8G8B8_SINT)
> +   SF(80, 80,  x,  x,  x,  x,  x,  x,  x,    x,   ASTC_LDR_2D_4x4_FLT16)
> +   SF(80, 80,  x,  x,  x,  x,  x,  x,  x,    x,   ASTC_LDR_2D_5x4_FLT16)
> +   SF(80, 80,  x,  x,  x,  x,  x,  x,  x,    x,   ASTC_LDR_2D_5x5_FLT16)
> +   SF(80, 80,  x,  x,  x,  x,  x,  x,  x,    x,   ASTC_LDR_2D_6x5_FLT16)
> +   SF(80, 80,  x,  x,  x,  x,  x,  x,  x,    x,   ASTC_LDR_2D_6x6_FLT16)
> +   SF(80, 80,  x,  x,  x,  x,  x,  x,  x,    x,   ASTC_LDR_2D_8x5_FLT16)
> +   SF(80, 80,  x,  x,  x,  x,  x,  x,  x,    x,   ASTC_LDR_2D_8x6_FLT16)
> +   SF(80, 80,  x,  x,  x,  x,  x,  x,  x,    x,   ASTC_LDR_2D_8x8_FLT16)
> +   SF(80, 80,  x,  x,  x,  x,  x,  x,  x,    x,   ASTC_LDR_2D_10x5_FLT16)
> +   SF(80, 80,  x,  x,  x,  x,  x,  x,  x,    x,   ASTC_LDR_2D_10x6_FLT16)
> +   SF(80, 80,  x,  x,  x,  x,  x,  x,  x,    x,   ASTC_LDR_2D_10x8_FLT16)
> +   SF(80, 80,  x,  x,  x,  x,  x,  x,  x,    x,   ASTC_LDR_2D_10x10_FLT16)
> +   SF(80, 80,  x,  x,  x,  x,  x,  x,  x,    x,   ASTC_LDR_2D_12x10_FLT16)
> +   SF(80, 80,  x,  x,  x,  x,  x,  x,  x,    x,   ASTC_LDR_2D_12x12_FLT16)
> +   SF(80, 80,  x,  x,  x,  x,  x,  x,  x,    x,   ASTC_LDR_2D_4x4_U8sRGB)
> +   SF(80, 80,  x,  x,  x,  x,  x,  x,  x,    x,   ASTC_LDR_2D_5x4_U8sRGB)
> +   SF(80, 80,  x,  x,  x,  x,  x,  x,  x,    x,   ASTC_LDR_2D_5x5_U8sRGB)
> +   SF(80, 80,  x,  x,  x,  x,  x,  x,  x,    x,   ASTC_LDR_2D_6x5_U8sRGB)
> +   SF(80, 80,  x,  x,  x,  x,  x,  x,  x,    x,   ASTC_LDR_2D_6x6_U8sRGB)
> +   SF(80, 80,  x,  x,  x,  x,  x,  x,  x,    x,   ASTC_LDR_2D_8x5_U8sRGB)
> +   SF(80, 80,  x,  x,  x,  x,  x,  x,  x,    x,   ASTC_LDR_2D_8x6_U8sRGB)
> +   SF(80, 80,  x,  x,  x,  x,  x,  x,  x,    x,   ASTC_LDR_2D_8x8_U8sRGB)
> +   SF(80, 80,  x,  x,  x,  x,  x,  x,  x,    x,   ASTC_LDR_2D_10x5_U8sRGB)
> +   SF(80, 80,  x,  x,  x,  x,  x,  x,  x,    x,   ASTC_LDR_2D_10x6_U8sRGB)
> +   SF(80, 80,  x,  x,  x,  x,  x,  x,  x,    x,   ASTC_LDR_2D_10x8_U8sRGB)
> +   SF(80, 80,  x,  x,  x,  x,  x,  x,  x,    x,   ASTC_LDR_2D_10x10_U8sRGB)
> +   SF(80, 80,  x,  x,  x,  x,  x,  x,  x,    x,   ASTC_LDR_2D_12x10_U8sRGB)
> +   SF(80, 80,  x,  x,  x,  x,  x,  x,  x,    x,   ASTC_LDR_2D_12x12_U8sRGB)
>  };
>  #undef x
>  #undef Y
> @@ -784,6 +787,26 @@ brw_render_target_supported(struct brw_context *brw,
>     return brw->format_supported_as_render_target[format];
>  }
>  
> +/*
> + * True if the underlying hardware format can support lossless color
> + * compression.
> + */
> +bool
> +brw_losslessly_compressible_format(struct brw_context *brw,
> +                                   uint32_t brw_format)
> +{
> +   const struct surface_format_info *sinfo;
> +   int gen = brw->gen * 10;
> +
> +   assert(brw->gen >= 9);
> +
> +   sinfo = &surface_formats[brw_format];
> +   if (gen >= sinfo->lossless_compression)
> +      return true;
> +
> +   return false;
> +}
> +
>  GLuint
>  translate_tex_format(struct brw_context *brw,
>                       mesa_format mesa_format,
> diff --git a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
> index 4c3f2c0..056cdb6 100644
> --- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
> +++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
> @@ -35,6 +35,7 @@
>  
>  #include "brw_blorp.h"
>  #include "brw_context.h"
> +#include "brw_state.h"
>  
>  #include "main/enums.h"
>  #include "main/fbobject.h"
> @@ -265,7 +266,11 @@ intel_miptree_supports_non_msrt_fast_clear(struct brw_context *brw,
>     if (!brw->format_supported_as_render_target[mt->format])
>        return false;
>  
> -   return true;
> +   if (brw->gen >= 9) {
> +      const uint32_t brw_format = brw_format_for_mesa_format(mt->format);
> +      return brw_losslessly_compressible_format(brw, brw_format);
> +   } else
> +      return true;
>  }
>  
>  
> -- 
> 2.6.2
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list