Example #1
0
static void
layout_init_tiling(struct intel_layout *layout,
                   struct intel_layout_params *params)
{
   const VkImageCreateInfo *info = params->info;
   unsigned preferred_tilings;

   layout->valid_tilings = layout_get_valid_tilings(layout, params);

   preferred_tilings = layout->valid_tilings;

   /* no fencing nor BLT support */
   if (preferred_tilings & ~LAYOUT_TILING_W)
      preferred_tilings &= ~LAYOUT_TILING_W;

   if (info->usage & (VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
                      VK_IMAGE_USAGE_SAMPLED_BIT)) {
      /*
       * heuristically set a minimum width/height for enabling tiling
       */
      if (layout->width0 < 64 && (preferred_tilings & ~LAYOUT_TILING_X))
         preferred_tilings &= ~LAYOUT_TILING_X;

      if ((layout->width0 < 32 || layout->height0 < 16) &&
          (layout->width0 < 16 || layout->height0 < 32) &&
          (preferred_tilings & ~LAYOUT_TILING_Y))
         preferred_tilings &= ~LAYOUT_TILING_Y;
   } else {
      /* force linear if we are not sure where the texture is bound to */
      if (preferred_tilings & LAYOUT_TILING_NONE)
         preferred_tilings &= LAYOUT_TILING_NONE;
   }

   /* prefer tiled over linear */
   if (preferred_tilings & LAYOUT_TILING_Y)
      layout->tiling = GEN6_TILING_Y;
   else if (preferred_tilings & LAYOUT_TILING_X)
      layout->tiling = GEN6_TILING_X;
   else if (preferred_tilings & LAYOUT_TILING_W)
      layout->tiling = GEN8_TILING_W;
   else
      layout->tiling = GEN6_TILING_NONE;
}
Example #2
0
static void
layout_init_tiling(struct ilo_layout *layout,
                   struct ilo_layout_params *params)
{
   const struct pipe_resource *templ = params->templ;
   unsigned valid_tilings = layout_get_valid_tilings(layout, params);

   /* no hardware support for W-tile */
   if (valid_tilings & LAYOUT_TILING_W)
      valid_tilings = (valid_tilings & ~LAYOUT_TILING_W) | LAYOUT_TILING_NONE;

   layout->valid_tilings = valid_tilings;

   if (templ->bind & (PIPE_BIND_RENDER_TARGET | PIPE_BIND_SAMPLER_VIEW)) {
      /*
       * heuristically set a minimum width/height for enabling tiling
       */
      if (layout->width0 < 64 && (valid_tilings & ~LAYOUT_TILING_X))
         valid_tilings &= ~LAYOUT_TILING_X;

      if ((layout->width0 < 32 || layout->height0 < 16) &&
          (layout->width0 < 16 || layout->height0 < 32) &&
          (valid_tilings & ~LAYOUT_TILING_Y))
         valid_tilings &= ~LAYOUT_TILING_Y;
   } else {
      /* force linear if we are not sure where the texture is bound to */
      if (valid_tilings & LAYOUT_TILING_NONE)
         valid_tilings &= LAYOUT_TILING_NONE;
   }

   /* prefer tiled over linear */
   if (valid_tilings & LAYOUT_TILING_Y)
      layout->tiling = INTEL_TILING_Y;
   else if (valid_tilings & LAYOUT_TILING_X)
      layout->tiling = INTEL_TILING_X;
   else
      layout->tiling = INTEL_TILING_NONE;
}