-/**
- * This function encapsulates some complicated logic for determining
- * how to convert a tile of image data from linear layout to tiled
- * layout, or vice versa.
- * \param cur_layout the current tile layout
- * \param target_layout the desired tile layout
- * \param usage how the tile will be accessed (R/W vs. read-only, etc)
- * \param new_layout_return returns the new layout mode
- * \param convert_return returns TRUE if image conversion is needed
- */
-static void
-layout_logic(enum lp_texture_layout cur_layout,
- enum lp_texture_layout target_layout,
- enum lp_texture_usage usage,
- enum lp_texture_layout *new_layout_return,
- boolean *convert)
-{
- enum lp_texture_layout other_layout, new_layout;
-
- *convert = FALSE;
-
- new_layout = 99; /* debug check */
-
- if (target_layout == LP_TEX_LAYOUT_LINEAR) {
- other_layout = LP_TEX_LAYOUT_TILED;
- }
- else {
- assert(target_layout == LP_TEX_LAYOUT_TILED);
- other_layout = LP_TEX_LAYOUT_LINEAR;
- }
-
- new_layout = target_layout; /* may get changed below */
-
- if (cur_layout == LP_TEX_LAYOUT_BOTH) {
- if (usage == LP_TEX_USAGE_READ) {
- new_layout = LP_TEX_LAYOUT_BOTH;
- }
- }
- else if (cur_layout == other_layout) {
- if (usage != LP_TEX_USAGE_WRITE_ALL) {
- /* need to convert tiled data to linear or vice versa */
- *convert = TRUE;
-
- if (usage == LP_TEX_USAGE_READ)
- new_layout = LP_TEX_LAYOUT_BOTH;
- }
- }
- else {
- assert(cur_layout == LP_TEX_LAYOUT_NONE ||
- cur_layout == target_layout);
- }
-
- assert(new_layout == LP_TEX_LAYOUT_BOTH ||
- new_layout == target_layout);
-
- *new_layout_return = new_layout;
-}
-
-