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; }
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; }