diff options
Diffstat (limited to 'src/gallium/drivers/ilo/core/ilo_state_sbe.c')
-rw-r--r-- | src/gallium/drivers/ilo/core/ilo_state_sbe.c | 350 |
1 files changed, 0 insertions, 350 deletions
diff --git a/src/gallium/drivers/ilo/core/ilo_state_sbe.c b/src/gallium/drivers/ilo/core/ilo_state_sbe.c deleted file mode 100644 index 1b4ca0683c9..00000000000 --- a/src/gallium/drivers/ilo/core/ilo_state_sbe.c +++ /dev/null @@ -1,350 +0,0 @@ -/* - * Mesa 3-D graphics library - * - * Copyright (C) 2012-2015 LunarG, Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - * Authors: - * Chia-I Wu <olv@lunarg.com> - */ - -#include "ilo_debug.h" -#include "ilo_state_sbe.h" - -static bool -sbe_validate_gen8(const struct ilo_dev *dev, - const struct ilo_state_sbe_info *info) -{ - ILO_DEV_ASSERT(dev, 6, 8); - - assert(info->attr_count <= ILO_STATE_SBE_MAX_ATTR_COUNT); - - assert(info->vue_read_base + info->vue_read_count <= - info->cv_vue_attr_count); - - /* - * From the Sandy Bridge PRM, volume 2 part 1, page 248: - * - * "(Vertex URB Entry Read Length) - * Format: U5 - * Range [1,16] - * - * Specifies the amount of URB data read for each Vertex URB entry, in - * 256-bit register increments. - * - * Programming Notes - * It is UNDEFINED to set this field to 0 indicating no Vertex URB - * data to be read." - * - * "(Vertex URB Entry Read Offset) - * Format: U6 - * Range [0,63] - * - * Specifies the offset (in 256-bit units) at which Vertex URB data is - * to be read from the URB." - */ - assert(info->vue_read_base % 2 == 0 && info->vue_read_base <= 126); - assert(info->vue_read_count <= 32); - - /* - * From the Ivy Bridge PRM, volume 2 part 1, page 268: - * - * "This field (Point Sprite Texture Coordinate Enable) must be - * programmed to 0 when non-point primitives are rendered." - */ - if (ilo_dev_gen(dev) < ILO_GEN(7.5) && info->point_sprite_enables) - assert(info->cv_is_point); - - /* - * From the Sandy Bridge PRM, volume 2 part 1, page 246: - * - * "(Number of SF Output Attributes) 33-48: Specifies 17-32 attributes - * (# attributes = field value - 16). Swizzling performed on - * Attributes 16-31 (as required) only. Attributes 0-15 passed through - * unmodified. - * - * Note : - * - * Attribute n Component Override and Constant Source states apply to - * Attributes 16-31 (as required) instead of Attributes 0-15. E.g., - * this allows an Attribute 16-31 component to be overridden with the - * PrimitiveID value. - * - * Attribute n WrapShortest Enables still apply to Attributes 0-15. - * - * Attribute n Swizzle Select and Attribute n Source Attribute states - * are ignored and none of the swizzling functions available through - * these controls are performed." - * - * From the Sandy Bridge PRM, volume 2 part 1, page 247: - * - * "This bit (Attribute Swizzle Enable) controls the use of the - * Attribute n Swizzle Select and Attribute n Source Attribute fields - * only. If ENABLED, those fields are used as described below. If - * DISABLED, attributes are copied from their corresponding source - * attributes, for the purposes of Swizzle Select only. - * - * Note that the following fields are unaffected by this bit, and are - * therefore always used to control their respective fields: - * Attribute n Component Override X/Y/Z/W - * Attribute n Constant Source - * Attribute n WrapShortest Enables" - * - * From the Ivy Bridge PRM, volume 2 part 1, page 264: - * - * "When Attribute Swizzle Enable is ENABLED, this bit (Attribute - * Swizzle Control Mode) controls whether attributes 0-15 or 16-31 are - * subject to the following swizzle controls: - * - * - Attribute n Component Override X/Y/Z/W - * - Attribute n Constant Source - * - Attribute n Swizzle Select - * - Attribute n Source Attribute - * - Attribute n Wrap Shortest Enables" - * - * "SWIZ_16_31... Only valid when 16 or more attributes are output." - */ - assert(info->swizzle_count <= ILO_STATE_SBE_MAX_SWIZZLE_COUNT); - if (info->swizzle_16_31) { - assert(ilo_dev_gen(dev) >= ILO_GEN(7) && - info->swizzle_enable && - info->attr_count > 16); - } - - return true; -} - -static uint8_t -sbe_get_gen8_min_read_count(const struct ilo_dev *dev, - const struct ilo_state_sbe_info *info) -{ - uint8_t min_count = 0; - - ILO_DEV_ASSERT(dev, 6, 8); - - /* minimum read count for non-swizzled attributes */ - if (!info->swizzle_enable || info->swizzle_count < info->attr_count) { - if (info->swizzle_16_31 && info->swizzle_count + 16 == info->attr_count) - min_count = 16; - else - min_count = info->attr_count; - } - - if (info->swizzle_enable) { - uint8_t i; - - for (i = 0; i < info->swizzle_count; i++) { - const struct ilo_state_sbe_swizzle_info *swizzle = - &info->swizzles[i]; - bool inputattr_facing; - - switch (swizzle->attr_select) { - case GEN6_INPUTATTR_FACING: - case GEN6_INPUTATTR_FACING_W: - inputattr_facing = true; - break; - default: - inputattr_facing = false; - break; - } - - if (min_count < swizzle->attr + inputattr_facing + 1) - min_count = swizzle->attr + inputattr_facing + 1; - } - } - - return min_count; -} - -static uint8_t -sbe_get_gen8_read_length(const struct ilo_dev *dev, - const struct ilo_state_sbe_info *info) -{ - uint8_t read_len; - - ILO_DEV_ASSERT(dev, 6, 8); - - /* - * From the Sandy Bridge PRM, volume 2 part 1, page 248: - * - * "(Vertex URB Entry Read Length) - * This field should be set to the minimum length required to read the - * maximum source attribute. The maximum source attribute is indicated - * by the maximum value of the enabled Attribute # Source Attribute if - * Attribute Swizzle Enable is set, Number of Output Attributes -1 if - * enable is not set. - * read_length = ceiling((max_source_attr+1)/2) - * - * [errata] Corruption/Hang possible if length programmed larger than - * recommended" - */ - if (info->has_min_read_count) { - read_len = info->vue_read_count; - assert(read_len == sbe_get_gen8_min_read_count(dev, info)); - } else { - read_len = sbe_get_gen8_min_read_count(dev, info); - assert(read_len <= info->vue_read_count); - } - - /* - * In pairs. URB entries are aligned to 1024-bits or 512-bits. There is - * no need to worry about reading past entries. - */ - read_len = (read_len + 1) / 2; - if (!read_len) - read_len = 1; - - return read_len; -} - -static bool -sbe_set_gen8_3DSTATE_SBE(struct ilo_state_sbe *sbe, - const struct ilo_dev *dev, - const struct ilo_state_sbe_info *info) -{ - uint8_t vue_read_offset, vue_read_len; - uint8_t attr_count; - uint32_t dw1, dw2, dw3; - - ILO_DEV_ASSERT(dev, 6, 8); - - if (!sbe_validate_gen8(dev, info)) - return false; - - vue_read_offset = info->vue_read_base / 2; - vue_read_len = sbe_get_gen8_read_length(dev, info); - - attr_count = info->attr_count; - if (ilo_dev_gen(dev) == ILO_GEN(6) && info->swizzle_16_31) - attr_count += 16; - - dw1 = attr_count << GEN7_SBE_DW1_ATTR_COUNT__SHIFT | - vue_read_len << GEN7_SBE_DW1_URB_READ_LEN__SHIFT; - - if (ilo_dev_gen(dev) >= ILO_GEN(8)) { - dw1 |= GEN8_SBE_DW1_FORCE_URB_READ_LEN | - GEN8_SBE_DW1_FORCE_URB_READ_OFFSET | - vue_read_offset << GEN8_SBE_DW1_URB_READ_OFFSET__SHIFT; - } else { - dw1 |= vue_read_offset << GEN7_SBE_DW1_URB_READ_OFFSET__SHIFT; - } - - if (ilo_dev_gen(dev) >= ILO_GEN(7) && info->swizzle_16_31) - dw1 |= GEN7_SBE_DW1_ATTR_SWIZZLE_16_31; - - if (info->swizzle_enable) - dw1 |= GEN7_SBE_DW1_ATTR_SWIZZLE_ENABLE; - - dw1 |= (info->point_sprite_origin_lower_left) ? - GEN7_SBE_DW1_POINT_SPRITE_TEXCOORD_LOWERLEFT : - GEN7_SBE_DW1_POINT_SPRITE_TEXCOORD_UPPERLEFT; - - dw2 = info->point_sprite_enables; - dw3 = info->const_interp_enables; - - STATIC_ASSERT(ARRAY_SIZE(sbe->sbe) >= 3); - sbe->sbe[0] = dw1; - sbe->sbe[1] = dw2; - sbe->sbe[2] = dw3; - - return true; -} - -static bool -sbe_set_gen8_3DSTATE_SBE_SWIZ(struct ilo_state_sbe *sbe, - const struct ilo_dev *dev, - const struct ilo_state_sbe_info *info) -{ - uint16_t swiz[ILO_STATE_SBE_MAX_SWIZZLE_COUNT]; - uint8_t i; - - ILO_DEV_ASSERT(dev, 6, 8); - - for (i = 0; i < info->swizzle_count; i++) { - const struct ilo_state_sbe_swizzle_info *swizzle = &info->swizzles[i]; - - /* U5 */ - assert(swizzle->attr < 32); - swiz[i] = swizzle->attr_select << GEN8_SBE_SWIZ_SWIZZLE_SELECT__SHIFT | - swizzle->attr << GEN8_SBE_SWIZ_SRC_ATTR__SHIFT; - - if (swizzle->force_zeros) { - swiz[i] |= GEN8_SBE_SWIZ_CONST_OVERRIDE_W | - GEN8_SBE_SWIZ_CONST_OVERRIDE_Z | - GEN8_SBE_SWIZ_CONST_OVERRIDE_Y | - GEN8_SBE_SWIZ_CONST_OVERRIDE_X | - GEN8_SBE_SWIZ_CONST_0000; - } - } - - for (; i < ARRAY_SIZE(swiz); i++) { - swiz[i] = GEN6_INPUTATTR_NORMAL << GEN8_SBE_SWIZ_SWIZZLE_SELECT__SHIFT | - i << GEN8_SBE_SWIZ_SRC_ATTR__SHIFT; - } - - STATIC_ASSERT(sizeof(sbe->swiz) == sizeof(swiz)); - memcpy(sbe->swiz, swiz, sizeof(swiz)); - - return true; -} - -bool -ilo_state_sbe_init(struct ilo_state_sbe *sbe, - const struct ilo_dev *dev, - const struct ilo_state_sbe_info *info) -{ - assert(ilo_is_zeroed(sbe, sizeof(*sbe))); - return ilo_state_sbe_set_info(sbe, dev, info); -} - -bool -ilo_state_sbe_init_for_rectlist(struct ilo_state_sbe *sbe, - const struct ilo_dev *dev, - uint8_t read_base, - uint8_t read_count) -{ - struct ilo_state_sbe_info info; - - memset(&info, 0, sizeof(info)); - info.attr_count = read_count; - info.cv_vue_attr_count = read_base + read_count; - info.vue_read_base = read_base; - info.vue_read_count = read_count; - info.has_min_read_count = true; - - return ilo_state_sbe_set_info(sbe, dev, &info); -} - -bool -ilo_state_sbe_set_info(struct ilo_state_sbe *sbe, - const struct ilo_dev *dev, - const struct ilo_state_sbe_info *info) -{ - bool ret = true; - - ILO_DEV_ASSERT(dev, 6, 8); - - ret &= sbe_set_gen8_3DSTATE_SBE(sbe, dev, info); - ret &= sbe_set_gen8_3DSTATE_SBE_SWIZ(sbe, dev, info); - - assert(ret); - - return true; -} |