Схема для упаковки и связывания переменной в графических системах

Иллюстрации

Показать все

Изобретение относится к способам для упаковки и связывания переменной в графических системах. Техническим результатом является расширение функциональных возможностей за счет уменьшения полосы частот трафика, экономии энергии и улучшении производительности. Беспроводное устройство выполняет процесс упаковки компилятором первого уровня и процесс упаковки аппаратным обеспечением второго уровня над переменными. Процесс упаковки компилятором упаковывает две или несколько переменных величин (переменных или атрибутов) программы построения теней, сумма компонентов которых равна М, в совместно используемый М-мерный (MD) векторный регистр. Упаковка аппаратным обеспечением последовательно упаковывает М компонентов переменных величин (переменных или атрибутов) программы построения теней и какие-либо остающиеся переменные величины в кэш вершин или другой носитель данных. 3 н. и 14 з.п. ф-лы, 21 ил., 7 табл.

Реферат

УРОВЕНЬ ТЕХНИКИ

I. Область техники

Данное описание относится, в общем, к области обработки графики и, более конкретно, к способам для упаковки и связывания переменной в графических системах.

II. Уровень техники

Общедоступный графический стандарт OpenGL или OpenGL ES имеет определенную функциональность, которая может быть сменена во время операций на вершинах и пикселах с использованием программ построения теней вершин и фрагментов. Программы построения теней вершин и фрагментов были разработаны для визуализации специальных эффектов, которые не были достигнуты стандартной функциональностью OpenGL.

Теперь со ссылкой на фиг. 1 показана общая блок-схема стандартных стадий конвейерной обработки в устройстве обработки графики (GPU) с программами построения теней. Имеется три основных стадии конвейера: программа построения теней вершин, обозначенная в блоке S10, ассемблер примитивов и растеризатор, обозначенные в блоке S12, и программа построения теней фрагментов, обозначенная в блоке S14. Дополнительный блок S16 обеспечен для операций на выборках.

Программа построения теней вершин (VS) S10 является программой или компьютерным программным продуктом, исполняемым для каждой вершины геометрического объекта. Входные данные VS S10 называются атрибутами, обозначенными в блоке А2. VS S10 также принимает в качестве входных данных постоянные (uniform) вершин VU2, которые могут включать в себя некоторое число постоянных вершин 0-95 (т.е. 96 постоянных вершин). Выходные данные из VS S10 и затем ассемблера примитивов и растеризатора S12 обычно называются переменными (varying), обозначенными в блоке V3, и обычно находятся в кэше вершин (хранящем выходные данные VS) или другом носителе данных (хранящем выходные данные растеризатора). Переменными V3 могут быть значения, ассоциированные с пикселами треугольников некоторого геометрического объекта. Этими значениями, ассоциированными с пикселами, являются результаты ассемблера примитивов и растеризатора S12, вычисленные на основе VS результатов, ассоциированных с вершинами треугольников некоторого геометрического объекта. Эти VS результаты, ассоциированные с этими вершинами, и переменные V3, ассоциированные с пикселами, имеют одни и те же имена или идентификаторы, типы и упорядочение. Переменные V3, ассоциированными с пикселами, являются входными данными для программы построения теней фрагментов (FS) S14. FS S14 также принимает в качестве входных данных постоянные фрагментов FU3, которые обычно включают в себя некоторое количество (например, 16) постоянных фрагментов.

Фиг. 2 показывает общую блок-схему стандартных стадий конвейерной обработки с программами построения теней. Для VS S10 внутри устройства обработки графики (GPU), обычно имеется восемь (8) регистров атрибутов RA2 для хранения атрибутов 0-7. Обычно имеется восемь выходных регистров RV3A переменной для хранения переменных 0-7. Регистры RV3А переменной сохраняют выходные данные VS, которые обычно являются кэшем вершин. Обычно имеется восемь выходных регистров RV3B переменной для хранения переменных 0-7. Регистры RV3B переменной сохраняют результаты растеризатора, соответствующие переменным, ассоциированным с пикселами. Регистры RA2 атрибутов и регистры RV3A переменной являются входными регистрами, индексированными атрибутами 0-7, и выходными регистрами RV3 переменной, индексированными переменными 0-7, соответственно. Эти идентификаторы регистров назначаются компилятором, который компилирует программу построения теней вершин и фрагментов с языка высокого уровня в машинный язык. Эти регистры, используемые в программе построения теней на языке высокого уровня, называются посредством имен вместо идентификаторов/индексов. Эти имена регистров видны только для разработчиков приложений. Приложения получают доступ к регистрам через имена регистров. Идентификаторы регистров видны только для VS S10 или FS S14 в аппаратном обеспечении (HW) GPU. Следовательно, компилятором будет создана таблица символов, такая как таблица входных символов VS, таблица выходных символов и таблица входных символов FS. Однако входные данные VS или таблица входных символов не имеют отношения к выходным данным или таблицей выходных символов в терминах содержания, идентификаторов или имен.

Выходные данные VS или таблица выходных символов должны совпадать с входными данными или таблицей входных символов FS S14 в терминах содержания и имен, хотя входные данные или таблица входных символов FS S14 могут быть некоторым поднабором выходных данных или таблицы выходных символов VS S10.

VS S10 также принимает в качестве входных данных постоянные вершин VU2, хранимые в носителе данных, также как и текстуры, обозначенные как Т2, и временные переменные, обозначенные как TV2. Ассемблер примитивов и растеризатор S12 принимают переменные в выходные регистры RV3A переменной, индексированные переменными 0-7 и параметром gl_Position P. Ассемблер примитивов и растеризатор S12 выводят переменные в выходные регистры RV3B переменной, индексированные переменными 0-7 и параметром gl_Position P. FS S14 принимает в качестве входных данных постоянные фрагментов FU3, хранимые в носителе данных, также как и текстуры, обозначенные как Т3, и временные переменные, обозначенные как TV3. FS S14 принимает переменные в выходные регистры RV3B переменной, индексированные переменными 0-7 и параметром gl_Position, обозначенным как P. FS S14 также принимает дополнительные параметры gl_Frontfacing, обозначенный как FF, и gl_PointPosition, обозначенный как РР. FS S14 выводит gl_FragColor FC. Атрибуты и переменные также называются переменными программы построения теней.

СУЩНОСТЬ ИЗОБРЕТЕНИЯ

Здесь описаны способы для упаковки и связывания переменной в графических конвейерах. Упаковка переменных программы построения теней является выгодной в мобильном GPU, так что носитель или память используется более эффективно. Упаковка переменных программы построения теней может также уменьшить полосу частот трафика, сэкономить энергию и улучшить производительность.

В одной конфигурации, некоторое устройство имеет носитель данных, имеющий множество совместно используемых М-мерных (МD) регистров. Это устройство также включает в себя устройство обработки для реализации некоторого набора операций для упаковки в каждом совместно используемом MD регистре одной или нескольких переменных программы построения теней, сумма компонентов которых равна М.

В другой конфигурации, интегральная схема содержит носитель данных, имеющий множество совместно используемых М-мерных (MD) регистров. Эта интегральная схема также включает в себя устройство обработки для реализации множества операций для упаковки в каждом совместно используемом MD регистре одной или нескольких переменных программы построения теней, сумма компонентов которых равна М.

Еще одна конфигурация включает в себя компьютерный программный продукт. Этот компьютерный программный продукт включает в себя считываемый компьютером носитель, имеющий команды, чтобы заставить компьютер упаковывать одну или нескольких переменных из набора переменных программы построения теней, сумма компонентов которых равна М, в каждом совместно используемом М-мерном (MD) векторном регистре из множества совместно используемых MD векторных регистров.

Еще одна конфигурация включает в себя процессор, содержащий носитель данных, имеющий множество совместно используемых М-мерных (MD) регистров. Этот процессор также включает в себя интегральную схему для реализации набора операций для упаковки в каждом совместно используемом MD регистре одной или нескольких переменных программы построения теней, сумма компонентов которых равна М.

Дополнительные аспекты станут более ясными из подробного описания, особенно взятого вместе с прилагаемыми чертежами.

КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ

Аспекты и конфигурации данного описания станут более ясными из подробного описания, изложенного ниже, взятого в сопряжении с чертежами, в которых подобные ссылочные символы везде идентифицируют соответствующее.

Фиг. 1 показывает общую блок-схему стандартных стадий конвейерной обработки в устройстве обработки графики с программами построения теней.

Фиг. 2 показывает общую блок-схему стандартных стадий конвейерной обработки с программами построения теней.

Фиг. 3 показывает блок-схему беспроводного устройства.

Фиг. 4 показывает общую блок-схему устройства обработки графики (GPU) для программы построения теней вершин и операций упаковки.

Фиг. 5 показывает общую блок-схему устройства обработки графики (GPU) с операциями программы построения теней фрагментов и упаковки.

Фиг. 6 показывает общую блок-схему драйвера.

Фиг. 7 показывает общую блок-схему двухуровневого процесса упаковки переменных программы построения теней.

Фиг. 8А и 8В показывают программу построения теней вершин перед тем и после того, как обходные атрибуты удалены.

Фиг. 9А и 9В показывают другую программу построения теней вершин перед тем и после того, как обходные атрибуты удалены.

Фиг. 10А и 10В показывают еще одну программу построения теней вершин перед тем и после того, как обходные атрибуты удалены.

Фиг. 11А и 11В показывают еще одну программу построения теней вершин перед тем и после того, как обходные атрибуты удалены.

Фиг. 12А и 12В показывают еще одну программу построения теней вершин перед тем и после того, как обходные атрибуты удалены.

Фиг. 13А-13С показывают общую блок-схему процесса упаковки переменных программы построения теней, скомбинированного с обходом атрибутов.

Фиг. 14 показывает общую блок-схему процесса связывания.

Изображения на чертежах упрощены в иллюстративных целях и не показаны в масштабе. Для облегчения понимания, идентичные ссылочные позиции были использованы, где это возможно, для обозначения идентичных элементов, что справедливо для фигур, за исключением того, что могут быть добавлены суффиксы, когда это уместно, для дифференциации таких элементов.

Прилагаемые чертежи иллюстрируют примерные конфигурации изобретения и, как таковые, не должны рассматриваться как ограничивающие объем изобретения, который может вмещать и другие равно эффективные конфигурации. Предполагается, что особенности или стадии одной конфигурации могут быть выгодно включены в другие конфигурации без дополнительного описания.

В различных конфигурациях ниже, блоки блок-схем выполняются в изображенном порядке, или же эти блоки или их части могут выполняться одновременно, параллельно или в другом порядке.

ПОДРОБНОЕ ОПИСАНИЕ

Слово «примерный» используется здесь в значении «служащий в качестве примера, или иллюстрации». Любая конфигурация или конструкция, описанная здесь как «примерная», не должна с необходимостью толковаться как предпочтительная или преимущественная перед другими конфигурациями или конструкциями.

Способы, описанные здесь, могут использоваться для беспроводной связи, вычисления, персональной электроники и т.д. Примерное использование этих способов для беспроводной связи описано ниже.

Фиг. 3 показывает блок-схему конфигурации беспроводного устройства 10 для использования в системе беспроводной связи. Этим беспроводным устройством может быть сотовый телефон или фотоаппарат, терминал, телефон-трубка, электронный секретарь (PDA) или некоторое другое устройство. Системой беспроводной связи может быть система множественного доступа с кодовым разделением (каналов) (CDMA), глобальная система мобильной связи (GSM) или некоторая другая система.

Беспроводное устройство 10 способно обеспечить двунаправленную связь через тракт приема и тракт передачи. В тракте приема сигналы, переданные базовыми станциями, принимают антенной 12 и обеспечивают для приемника (RCVR) 14. Приемник 14 обрабатывает с заданными условиями и оцифровывает принятый сигнал и обеспечивает выборки для цифрового блока 20 для дальнейшей обработки. В тракте передачи передатчик (TMTR) 16 принимает данные, подлежащие передаче от цифрового блока 20, обрабатывает с заданными условиями эти данные и генерирует модулированный сигнал, который передают через антенну 12 к базовым станциям.

Цифровой блок 20 включает в себя различные блоки обработки, блоки интерфейса и блоки памяти, такие как, например, модемный процессор 22, видеопроцессор 24, контроллер/процессор 26, процессор 28 дисплея, ARM/DSP 32, блок обработки графики (GPU) 34, внутреннюю память 36 и интерфейс внешней шины (EBI) 38. Модемный процессор 22 выполняет обработку для передачи и приема данных (например, кодирование, модуляцию, демодуляцию и декодирование). Видеопроцессор 24 выполняет обработку на видеоконтенте (например, неподвижных изображений, движущиеся видео и движущиеся тексты) для видеоприложений, таких как видеокамера, воспроизведение видео и организация видеоконференций. Контроллер/процессор 26 может направлять работу различных процессоров и блоков интерфейса в пределах цифрового блока 20. Процессор 28 дисплея выполняет обработку для облегчения показа видео, графики и текстов на дисплее 30. ARM/DSP 32 может выполнять различные типы обработки для беспроводного устройства 10. Блок 34 обработки графики выполняет обработку графики графического конвейера.

Способы, описанные здесь, могут использоваться для любого из процессоров в цифровом блоке 20, например блока 34 обработки графики. Внутренняя память 36 сохраняет данные и/или команды для различных блоков в пределах цифрового блока 20. EBI 38 облегчает перенос данных между цифровым блоком 20 (например, внутренней памятью 36) и основной памятью 40 по шине или линии передачи данных DL.

Цифровой блок 20 может быть реализован с одним или несколькими DSP (цифровыми сигнальными процессорами), микропроцессорами, RISC (процессор с сокращенным набором команд) и т.д. Цифровой блок 20 может быть также изготовлен на одной или нескольких интегральных схемах прикладной ориентации (ASIC) или некотором другом типе интегральных схем (IC).

Способы, описанные здесь, могут быть реализованы в различных блоках аппаратного обеспечения. Например, эти способы могут быть реализованы в ASIC, DSP, RISC, ARM, устройствах обработки цифровых сигналов (DSPD), программируемых логических устройствах (PLD), программируемых пользователем вентильных матрицах (FPGA), процессорах, контроллерах, микроконтроллерах, микропроцессорах и других электронных блоках.

GPU 34 может быть также совместимым с общедоступным графическим стандартом, таким как OpenGL 2.0, OpenGL ES2.0 или D3d9.0.

Фиг. 4 показывает общую блок-схему графического устройства обработки (GPU) 34 для программы построения теней вершин и операций упаковки. GPU 34 включает в себя потоковый декодер 50, который выдает множество атрибутов в VS входной регистровый файл 56. Эти атрибуты принимаются программой построения теней вершин (VS) 60. Выходные данные VS 60 включают в себя переменные, которые хранят в VS выходном регистровом файле 57. Как можно понять, «регистровый» файл является компонентом аппаратного обеспечения, такого как носитель данных для хранения информации. В этом примере «VS входной регистровый файл» сохраняет входной файл, подлежащий посылке к VS 60. Для простоты, в большинстве случаев, при ссылке на VS входной регистровый файл 56 ссылаются на «входной файл» для VS 60 и/или аппаратное обеспечение для сохранения «входного файла». Подобным же образом, для простоты, в большинстве случаев, при ссылке на VS выходной регистровый файл 57, ссылаются на «выходной файл» из VS 60 и/или аппаратное обеспечение для сохранения «выходного файла». Как будет более подробно описано позже, эти переменные интеллектуально упаковываются компилятором 62 (фиг. 6) для упаковки переменной первого уровня. Переменные в VS выходном регистровом файле 57 посылаются к буферу 58 упаковки непрерывно сериями или в цепной последовательности, который упаковывает переменные в упаковке переменной второго уровня. Когда буфер 58 упаковки заполняется, упакованные переменные затем сохраняют в кэше 54 вершин.

Как будет видно из описания ниже, и VS выходной регистровый файл 57, и VS входной регистровый файл 56 включает в себя множество совместно используемых М-мерных (MD) регистров. Каждый из буферов 58 и 52 упаковки включает в себя по меньшей мере один совместно используемый М-мерный (MD) регистр.

В конфигурации фиг. 4 потоковый декодер 50 генерирует два потока, обходной поток и необходной поток. Необходной поток посылается в VS входной регистровый файл 56 и предпочтительно также упаковывается способом, показанным в Таблице 1. Обходные атрибуты упаковываются в буфере 52 упаковки. Обходные атрибуты будут подробно описаны в связи с фиг. 8А, 8В, 9А, 9В, 10А, 10В, 11А, 11В, 12А и 12В.

Фиг. 5 показывает общую блок-схему устройства обработки графики (GPU) с программой построения теней фрагментов и операциями связывания. Упакованные переменные хранят в кэше 54 вершин. Ассемблер примитивов и растеризатор 90 принимает в качестве входных данных переменные в кэше 54 вершин. Ассемблер примитивов и растеризатор 90 выдают упакованные переменные в буфер 92 переменной. Блок 88 связывания имеет набор команд 82 связывания, которые используются модулем 84 перераспределения и загрузки переменной. Компоновщик 80 на фиг. 6 генерирует таблицу 86 связывания, которая загружается в память для команд 82 связывания на фиг. 5 драйвером 61. Пример таблицы 86 связывания показан в Таблицах 4 и 6, изложенных ниже, который связывает упакованные переменные в таблице выходных символов VS (Таблица 2) с таблицей входных символов FS (Таблица 3). Таблица входных символов FS может иметь меньше символов, чем таблица выходных символов VS. После того как процесс связывания выполнен блоком 88 связывания, переменные из модуля 84 перераспределения и загрузки переменной посылаются в FS входной регистровый файл 79 для использования программой 70 построения теней фрагментов (FS).

Фиг. 6 показывает общую блок-схему драйвера. Драйвер 61 включает в себя компилятор 62 и компоновщик 80. Компилятор 62 генерирует таблицу 64 входных символов VS и таблицу 66 выходных символов VS. Примерная таблица входных символов VS показана ниже в Таблице 1. Примерная таблица выходных символов VS показана ниже в Таблице 2. Компилятор 62 может назначить одному и тому же символу идентификатор в таблице 66 выходных символов, отличный от идентификатора в таблице 74 входных символов FS, так как компилятор 62 может компилировать программу 60 построения теней вершин и программу 70 построения теней фрагментов независимо. Таким образом, имеется компоновщик 80 для того, чтобы драйвер 61 осуществлял отображение между идентификаторами регистров в таблице 66 выходных символов VS и идентификаторами регистров в таблице 74 входных символов FS посредством поиска одного и того же символа в обеих таблицах. Компоновщик 80 осуществляет связь с GPU 34 для загрузки некоторой переменной (соответствующего некоторому местоположению в кэше 54 вершин или буфере 92 переменной) в соответствующий входной регистр во входном регистровом файле 79 программы 70 построения теней фрагментов для одного и того же символа переменной.

Драйвер 61 является драйвером программного обеспечения, имеющим набор команд. Компилятор 62 и компоновщик 80 являются частями драйвера 61 программного обеспечения, запущенного на CPU 32 или контроллере/процессоре 26, тогда как GPU 34 является специальным сопроцессором, инструктируемым драйвером 61.

Таблица входных символов VS, показанная в Таблице 1, включает в себя следующие позиции: имя атрибута, тип, первоначально назначенный идентификатор входного регистра атрибута, первоначальная маска, вновь назначенный идентификатор входного регистра атрибута и новая маска. Таблица выходных символов VS, показанная в Таблице 2, включает в себя следующие позиции: имя переменной, тип, первоначально назначенный идентификатор выходного регистра переменной, первоначальная маска, вновь назначенный идентификатор выходного регистра переменной и новая маска. Маска в таблицах представляет собой достоверные компоненты для векторов атрибутов или векторов переменной, соответствующие памяти регистра стандартного MD (М=4) вектора, расположенной в аппаратном обеспечении (HW) GPU 34. Как первоначально назначенные идентификаторы и маска, так и вновь назначенные идентификаторы и маска помещены вместе в таблицах ниже просто для иллюстрации. Фактически, первоначально назначенные идентификаторы и маска могут быть временным результатом и станут вновь назначенными идентификаторами и маской посредством использования одной и той же ячейки памяти во время операций.

Компилятор 62 генерирует таблицу 74 входных символов FS и выходные данные 76 FS, обозначенные как gl_FragColor FC (фиг. 2). Таблица 74 входных символов FS, показанная в Таблице 3, включает в себя следующие позиции: имя переменной, тип, первоначально назначенный идентификатор входного регистра переменной, первоначальная маска, вновь назначенный идентификатор входного регистра переменной и новая маска.

В Таблицах 1 и 2 ниже последние два столбца заново обновляются согласно процессу упаковки, описанному позже.

Таблица 1Таблица входных символов VS
Имя атрибута Тип Первоначально назначенный идентификатор входного регистра атрибута Первона-чальная маска Вновь назначенный идентификатор входного регистра атрибута Новая Маска
Позиция0 Плавающий вектор4 0 1111 0 1111
Позиция1 Плавающий вектор3 1 0111 1 0111
Вес Плавающий 5 0001 2 1000
Нормаль Короткий плавающий вектор3 2 0111 2 0111
TexCoord0 Плавающий вектор2 3 0011 3 0011
TexCoord1 Плавающий вектор2 4 0011 3 1100
Таблица 2Таблица выходных символов VS
Имя изменения Тип Первоначально назначенный идентификатор выходного регистра переменной Первона-чальная маска Вновь назначенный идентификатор выходного регистра переменной Новая Маска
Позиция Плавающий вектор4 1 1111 1 1111
Цвет0 Плавающий Вектор4 2 1111 2 1111
Цвет1 Плавающий Вектор3 3 0111 3 0111
TexCoord0 Плавающий вектор2 0 0011 0 0011
TexCoord1 Плавающий вектор2 5 0011 0 1100
TexCoord2 Плавающий Вектор3 4 0111 4 0111
Таблица 3Таблица входных символов FS
Имя изменения Тип Первоначально назначенный идентификатор входного регистра переменной Первона-чальная маска Вновь назначенный идентификатор входного регистра переменной Новая Маска
Цвет0 Плавающий Вектор4 0 1111 2 1111
Цвет1 Плавающий Вектор3 1 0111 0 0111
TexCoord0 Плавающий вектор2 3 0011 1 0011
TexCoord1 Плавающий вектор2 2 0011 1 1100
Таблица 4Таблица связывания для выходов VS и входов FS
Имя изменения Первона-чально назначенный идентификатор выходно-го регистра перемен-ной VS Первона-чально назначен-ный идентификатор входного регистра переменной FS Перво-началь-ная маска Вновь назна-ченный иденти-фикатор выход-ного регистра перемен-ной VS Вновь назначенный идентификатор входного регистра переменной FS Новая маска
Позиция 1 1
Цвет0 2 2 1111 2 2 1111
Цвет1 3 3 0111 3 0 0111
TexCoord0 0 1 0011 0 1 0011
TexCoord1 5 1 1100 0 1 1100
TexCoord2 4 4

Переменные могут быть плавающими (с плавающей точкой), двумерными (2D) векторами, трехмерными (3D) векторами, четырехмерными (4D) векторами, массивом и 2D/3D/4D матрицей и т.д. Спецификация языка построения теней OpenGL ES требует по меньшей мере 32 компонента переменной, подлежащих поддержке в мобильном GPU 34. Каждая переменная имеет различный размер и обычно занимает свое собственное пространство регистра/буфера. В кэше 54 вершин регистр обычно является 4D вектором. Кроме того, регистры, соответствующие VS входному регистровому файлу 56, и регистры, соответствующие VS выходному регистровому файлу 57, обычно являются 4D вектором. Упаковка переменной помещает различные переменные плотно вместе в непрерывном пространстве для каждой вершины или пиксела. Например, упаковка переменной, описанная здесь, помещает два 2D вектора в 4D векторный регистр. В другом примере, упаковка переменной поставит 3D вектор и плавающий (1D) в 4D векторный регистр. Без плотной их упаковки они могут храниться неплотно.

Вышеприведенное описание относится к переменным. Однако, кроме переменных, могут также быть упакованы атрибуты.

Фиг. 7 показывает общую блок-схему двухуровневого процесса 100 упаковки переменных программы построения теней. Процесс 100 начинается в блоке 102, где происходит интеллектуальная упаковка, инструктируемая компилятором 62. В блоке 102 две или более переменных программы построения теней, сумма компонентов которых равна М, назначаются совместно используемому М-мерному (MD) векторному регистру. Для иллюстрации, VS выходной регистровый файл 57 показан со столбцами и строками. Каждая строка имеет четыре (4) блока, обозначенных как X, Y, Z и W. За блоком 102 следует блок 104, где происходит упаковка переменных аппаратного обеспечения в буфер 58 упаковки, который упаковывает переменные программы построения теней в VS выходной регистровый файл 57 последовательно в ряд в блок NxM носителя данных кэша 54 вершин. Переменными программы построения теней фиг. 7 являются переменные.

Как будет видно из описания ниже, обходные атрибуты упаковываются в буфере 52 упаковки подобно процессу блока 104, описанному в связи с фиг. 13А. Необходные атрибуты могут упаковываться с использованием процесса, описанного выше в связи с блоком 102. Таким образом, стадии процесса 100 упаковки могут использоваться для атрибутов. Следовательно, переменные программы построения теней включают в себя переменные или атрибуты.

Первый уровень: упаковка уровня компилятора

Следующее описание интеллектуальной упаковки в блоке 102, которая инструктируется компилятором 62, будет описана в связи с вышеприведенными Таблицами 1 и 2. Интеллектуальная упаковка применяется к переменным программы построения теней (как к переменным, так и к атрибутам). Таблица 1 иллюстрирует упаковку атрибутов, а Таблица 2 иллюстрирует упаковку переменной. Компилятор 62 выполняет упаковку необходных атрибутов или переменной посредством повторного назначения того же самого или общего MD (М-мерного) векторного регистра, имеющего ассоциированный с ним идентификатор регистра, двум или более переменным, сумма компонентов которых равна М (М=4) и обновляет маску, соответственно. MD векторный регистр для атрибутов соответствует памяти для VS входного регистрового файла 56 на фиг. 4. MD векторный регистр для переменных соответствует памяти для VS выходного регистрового файла 57 на фиг. 4. В примерной конфигурации М=4, таким образом, эти векторы обозначены как X, Y, Z и W. Тем не менее, могут использоваться другие конфигурации с большей или меньшей размерностью.

Маска имеет М-битовые местоположения. Таким образом, маска, ассоциированная с каждым переназначенным и/или скомбинированными атрибутами или переменными (переменными программы построения теней) для конкретного MD векторного регистра, используется для обозначения или различения, какая часть совместно используемого MD векторного регистра назначена каждому отдельному атрибуту или переменной (из комбинации) для более позднего повторного обращения и использования.

Например, с конкретной ссылкой на Таблицу 1 выше, texcoord0 и texcoord1 были первоначально назначены различные входные регистры атрибутов, обозначенные номерами идентификаторов 3 и 4 соответственно, в столбце «Первоначально назначенный идентификатор входного регистра атрибута». Кроме того, первоначальными масками для texcoord0 и texcoord1 являются 0011 и 0011 соответственно. Компилятор 62 определяет, что как texcoord0, так и texcoord1 являются 2D векторами, и сумма этих векторов равна 4D (М=4) векторам. Следовательно, компилятор 62 инструктирует упаковку texcoord0 и texcoord1 в один и тот же регистр атрибутов, обозначенный номером идентификатора 3 в столбце «Вновь назначенный идентификатор входного регистра атрибута». Во время упаковки texcoord0 могут быть назначены местоположения наименьших значащих битов 0011 маски, и texcoord1 могут быть назначены местоположения наименьших значащих битов 0011 маски, обозначенной в столбце «Новая маска» в Таблице 1. Маска 0011 обозначает, какая часть MD векторного регистра 3 данных, соответствующих texcoord0, может быть найдена. Подобным же образом, маска 1100 обозначает, какая часть MD векторного регистра 3 данных, соответствующих texcoord1, может быть найдена. Эта номенклатура позволяет двум или более атрибутам разделять общий регистр неперекрывающимся образом. Как можно понять, число бит в маске будет изменяться в зависимости от размерности.

С конкретной ссылкой на переменные texcoord0 и texcoord1 таблицы 66 выходных символов VS, они упаковываются в один и тот же регистр переменной, имеющий номер идентификатора 0, обозначенный в столбце «Вновь назначенный идентификатор выходного регистра переменной», как наилучшим образом видно в Таблице 2. Новой маской для texcoord0 является 0011, которая является той же самой, что и старая маска. Однако новой маской для texcoord1 является 1100, которая отличается от старой маски. Таким образом, маска имеет М битов, причем каждый бит представляет некоторое местоположение в совместно используемом MD векторном регистре.

В другом примере, атрибуты «Вес» и «Нормаль» таблицы 64 входных символов VS упаковываются в один и тот же регистр атрибутов, имеющий номер идентификатора 2, обозначенный в «Вновь назначенный идентификатор входного атрибута» Таблицы 1. После того как компилятор 62 инструктирует повторное назначение идентификаторов регистров и новых масок, аппаратное обеспечение (HW) GPU 34 автоматически загрузит соответствующие переменные программы построения теней (атрибуты или переменные) в назначенные регистры согласно таблицеподобным командам (с обновленными масками), которые завершают упаковку первого уровня, инструктируемую компилятором 62.

Некоторый массив или матрица может быть логически разбита на 2D/3D/4D вектор или единственное число с плавающей точкой, затем может выполняться упаковка, инструктируемая компилятором 62. Массив может быть представлен группой плавающих чисел (чисел с плавающей точкой), 2D векторов, 3D векторов или 4D векторов. Например, массив из 10 плавающих чисел может быть разбит на два 4D вектора плюс один 2D вектор, или 10 индивидуальных плавающих чисел. Матрица 2х2 может быть разбита на два 2D вектора, матрица 3х3 - на три 3D вектора и матрица 4х4 - на четыре 4D вектора соответственно. Следовательно, компилятор 62 может инструктировать упаковку для следующих случаев: 2D вектор + 2D вектор; 3D вектор + плавающее число; 2D вектор + плавающее число [+ плавающее число]; и плавающее число + плавающее число [+ плавающее число [+ плавающее число]]. Эти примеры даны для 4D векторного регистра. Другие комбинации рассматриваются на основе числа размерностей. Использование входного регистрового файла и выходного регистрового файла может быть минимизировано посредством упаковки первого уровня.

После упаковки, инструктируемой компилятором 62, все переменные программы построения теней (переменные) могут все еще не быть размещены в 4D (MD) векторы, например могут присутствовать некоторые 3D векторы, некоторые 4D векторы и т.д. В примерной конфигурации выполняется некоторый механизм для плотной HW упаковки переменных в памяти переменной или кэше 54 вершин для упаковки переменной второго уровня.

Второй уровень: HW упаковка

В памяти переменной или кэше 54 вершин все переменные для вершины или пиксела хранят в блоке NхM буфера. N является числом переменных; М=4 означает 4D векторы. Блок памяти может трактоваться как некоторое число (NxM) непрерывных (последовательных) компонентов. Для 32 битов/компонентов и М=4 эти компоненты могут быть пронумерованы 0-((Nx4)-1). Например, N=8, 8х4 блок носителя данных может трактоваться как 32 непрерывных (последовательных) компонентов, пронумерованных 0-31.

На фиг. 4 буфер 58 упаковки представлен как 2хМ (М=4) массив слотов. Стрелки указывают направление заполнения этих слотов в буфере 58 упаковки. Верхний ряд буфера 58 упаковки обозначен как временный буфер 58А, тогда как второй ряд обозначен как рабочий буфер 58В. Таблица 5 иллюстрирует результаты HW упаковки.

Таблица 5. Упаковка при переносе из VS выходного регистрового файла в память переменной или кэш вершин

Упаковка второго уровня может быть осуществлена в HW посредством первого заполнения последовательно в ряд временного буфера 58А (первого ряда буфера 58 упаковки). После того как временный буфер 58А окажется полным, содержимое временного буфера 58А может быть перенесено для хранения в кэш 54 вершин. В этой конфигурации буфер 58 упаковки включает в себя первый ряд из М слотов, обозначенный как временный буфер 58А, и второй ряд из М слотов, обозначенный как рабочий буфер.

С использованием примера, изложенного в Таблице 5, HW упаковка начинается со считывания переменной V0, имеющего три компонента, обозначенных как V0.x, V0.y и V0.z, из VS выходного регистрового файла 57 и последовательного заполнения слотов X, Y, Z и W временного буфера 58А (верхнего ряда) переменными V0.x, V0.y и V0.z. Как можно видеть, слот W временного буфера является свободной. Переменные V0.x, V0.y и V0.z еще не посылаются в кэш 54 вершин, пока временный буфер 58А не будет заполнен.

HW упаковка продолжается посредством считывания переменной V1, имеющего четыре компонента, обозначенных как V1.x, V1.y, V1.z и V1.w, из VS выходного регистрового файла 57 и заполнения остающегося слота (слотов) во временном буфере 58А. В этом случае слот W временного буфера 58А (верхнего ряда) заполняется переменной V1.x. Оставшиеся компоненты переменной V1.y, V1.z и V1.w заполняются последовательно в слоты X, Y и Z второго ряда или рабочего буфера 58В. Когда временный буфер 58А полностью заполнен, содержимое временного буфера 58А может быть записано в (первый) ряд кэша 54 вершин для опустошения временного буфера 58А.

Если временный буфер 58А пуст, то содержимое оставшихся компонентов переменной V1.y, V1.z и V1.w, заполненные последовательно в слоты X, Y и Z рабочего буфера 58В, переносятся во временный буфер 58А. Опять же, временный буфер 58А не является пустым. Таким образом, HW упаковка продолжается посредством считывания переменной V2, имеющего два компонента, обозначенных как V2.x и V2.y, из VS выходного регистрового файла 57 и заполнения остающегося слота (слотов) во временном буфере 58А. В этом случае слот W временного буфера 58А (верхнего ряда) заполняется переменной V2.x. Остающийся компонент V2.y переменной заполняется в слот X второго ряда или рабочего буфера 58В. Когда временный буфер 58А полностью заполнен, содержимое временного буфера 58А может быть записано во (второй) ряд кэша 54 вершин для опустошения временного буфера 58А.

Этот процесс продолжается для переменных в VS выходном регистровом файле 57. В этом примере, так как последняя переменная заполняет только слоты X, Y и Z временного буфера 58А, это содержимое записывается в память переменной или кэш 54 вершин с маской=xyz или (111).

Временный буфер 58А и рабочий буфер 58В из буферов 58 упаковки готовы к работе. Когда временный буфер 58А является заполненным и готовым к выписыванию в память переменной или кэш 54 вершин, другой буфер (рабочий буфер 58В) может быть одновременно заполнен. В каждый момент времени может использоваться как шина считывания, так и шина записи для четырех (М) компонентов. Если данные одного считывания или записи меньше чем 4 компонента, то маска считывания или записи используется для указания того, какие компоненты являются достоверными для считывания или записи.

После завершения HW упаковки второго уровня, идентификатор регистра, соответствующий «Вновь назначенному идентификатору выходного регистра переменной VS» в Талице 4, соответствующий упакованным переменным в таблице выходных символов VS (Таблица 2), будет изменен для соот