[Mesa-dev] [PATCH 34/34] i965: Handle compression modifier

Ben Widawsky ben at bwidawsk.net
Tue Feb 28 03:45:59 UTC 2017


On 17-01-31 13:40:01, Jason Ekstrand wrote:
>On Mon, Jan 23, 2017 at 10:21 PM, Ben Widawsky <ben at bwidawsk.net> wrote:
>
>> FINISHME: Use the kernel's final choice for the fb modifier
>>
>> bwidawsk at norris2:~/intel-gfx/kmscube (modifiers $)
>> ~/scripts/measure_bandwidth.sh ./kmscube none
>> Read bandwidth: 603.91 MiB/s
>> Write bandwidth: 615.28 MiB/s
>> bwidawsk at norris2:~/intel-gfx/kmscube (modifiers $)
>> ~/scripts/measure_bandwidth.sh ./kmscube ytile
>> Read bandwidth: 571.13 MiB/s
>> Write bandwidth: 555.51 MiB/s
>> bwidawsk at norris2:~/intel-gfx/kmscube (modifiers $)
>> ~/scripts/measure_bandwidth.sh ./kmscube ccs
>> Read bandwidth: 259.34 MiB/s
>> Write bandwidth: 337.83 MiB/s
>>
>> v2: Move all references to the new fourcc code(s) to this patch.
>>
>> Signed-off-by: Ben Widawsky <ben at bwidawsk.net>
>> Acked-by: Daniel Stone <daniels at collabora.com>
>> ---
>>  src/mesa/drivers/dri/i965/intel_screen.c | 18 ++++++++++++++++++
>>  1 file changed, 18 insertions(+)
>>
>> diff --git a/src/mesa/drivers/dri/i965/intel_screen.c
>> b/src/mesa/drivers/dri/i965/intel_screen.c
>> index 12b3b071e4..9914eff6e0 100644
>> --- a/src/mesa/drivers/dri/i965/intel_screen.c
>> +++ b/src/mesa/drivers/dri/i965/intel_screen.c
>> @@ -560,11 +560,15 @@ select_best_modifier(struct gen_device_info *devinfo,
>>                       const uint64_t *modifiers,
>>                       const unsigned count)
>>  {
>> +#define YTILE_CCS_Yf (1 << 4)
>>
>
>Why not YfTILE_CCS?  Y_TILE_*_Yf makes very little sense.  I mean, it
>sort-of does with the weird way the docs like to say things, but Y and Yf
>are different tiling formats.
>
>

Yeah, I'll change that.

>> +#define YTILE_CCS (1 << 3)
>>  #define YTILE  (1 << 2)
>>  #define XTILE  (1 << 1)
>>  #define LINEAR (1 << 0)
>>
>>     const uint64_t prio_modifiers[] = {
>> +      /* I915_FORMAT_MOD_Yf_TILED_CCS */ fourcc_mod_code(INTEL, 5),
>> +      /* I915_FORMAT_MOD_Y_TILED_CCS */ fourcc_mod_code(INTEL, 4),
>>        I915_FORMAT_MOD_Y_TILED,
>>        I915_FORMAT_MOD_X_TILED,
>>        DRM_FORMAT_MOD_LINEAR };
>> @@ -586,6 +590,12 @@ select_best_modifier(struct gen_device_info *devinfo,
>>
>>           modifier_bitmask |= YTILE;
>>           break;
>> +      case /* I915_FORMAT_MOD_Y_TILED_CCS */ fourcc_mod_code(INTEL, 4):
>> +         modifier_bitmask |= YTILE_CCS;
>> +         break;
>> +      case /* I915_FORMAT_MOD_Yf_TILED_CCS */ fourcc_mod_code(INTEL, 5):
>> +         modifier_bitmask |= YTILE_CCS_Yf;
>> +         break;
>>        }
>>     }
>>
>> @@ -597,6 +607,8 @@ select_best_modifier(struct gen_device_info *devinfo,
>>  #undef LINEAR
>>  #undef XTILE
>>  #undef YTILE
>> +#undef YTILE_CCS
>> +#undef YTILE_CCS_Yf
>>  }
>>
>>  static int
>> @@ -610,6 +622,10 @@ create_image_with_modifier(struct intel_screen
>> *screen,
>>     unsigned ccs_height = 0;
>>
>>     switch (modifier) {
>> +   case /* I915_FORMAT_MOD_Yf_TILED_CCS */ fourcc_mod_code(INTEL, 5):
>> +   case /* I915_FORMAT_MOD_Y_TILED_CCS */ fourcc_mod_code(INTEL, 4):
>> +      ccs_height = ALIGN(DIV_ROUND_UP(height, 16), 32);
>> +      /* fallthrough */
>>     case I915_FORMAT_MOD_Y_TILED:
>>        requested_tiling = tiling = I915_TILING_Y;
>>        tiled_height = ALIGN(height, 32);
>> @@ -761,6 +777,8 @@ intel_create_image_with_modifiers(__DRIscreen
>> *dri_screen,
>>     /* This compacts the actual modifiers to the ones we know how to
>> handle */
>>     for (int i = 0; i < count; i++) {
>>        switch (modifiers[i]) {
>> +      case /* I915_FORMAT_MOD_Yf_TILED_CCS */ fourcc_mod_code(INTEL, 5):
>> +      case /* I915_FORMAT_MOD_Y_TILED_CCS */ fourcc_mod_code(INTEL, 4):
>>        case I915_FORMAT_MOD_Y_TILED:
>>        case I915_FORMAT_MOD_X_TILED:
>>        case DRM_FORMAT_MOD_LINEAR:
>> --
>> 2.11.0
>>
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>>


More information about the mesa-dev mailing list