Поделиться через


Токен инструкции

Маркер инструкции сообщает драйверу о выполнении определенной операции и состоит из следующих битов:

Биты

[15:00] Биты от 0 до 15 указывают на код операции. D3DSIO_* — пример кода операции, где * представляет инструкцию. Например, в следующем фрагменте кода показана инструкция ADD:

// D3DSIO_ADD d, s1, s2

[23:16] Биты от 16 до 23 указывают на конкретные элементы управления, связанные с кодом операции.

[27:24] Для версий шейдеров пикселей и вершин, предшествующих 2_0, биты с 24 по 27 зарезервированы и имеют значение 0x0.

Для пикселей и вершинных шейдеров версии 2_0 и более поздних биты от 24 до 27 указывают размер в DWORD инструкции, за исключением самого маркера инструкции (т. е. количество маркеров, составляющих инструкцию, за исключением маркера инструкции).

[28] Для версий шейдера пикселей и вершин, предшествующих 2_0, бит 28 зарезервирован и имеет значение 0x0.

Для пикселей и вершинных шейдеров версии 2_0 и более поздних бит 28 указывает, является ли инструкция предикатом (то есть содержит дополнительный исходный маркер предиката в конце кода шейдера). Если для этого бита задано значение 0x1, инструкция определяется.

[29] Зарезервировано. Это значение равно 0x0.

[30] Для версий пиксельных шейдеров, предшествующих 2_0, бит 30 является битом совместной выдачи. Если задано значение 1, выполните эту инструкцию с помощью предыдущих инструкций; в противном случае выполните отдельно.

Для пиксельного шейдера версии 2_0 и более поздних версий и всех версий вершинного шейдера бит 30 зарезервирован и имеет значение 0x0.

[31] Бит 31 равен нулю (0x0).

Комментарии

Дополнительные сведения об операциях, которые можно указать в битах от 0 до 15 маркеров инструкций, см. в справочнике по пиксельным шейдерам и справочнике по вершинным шейдерам в последней документации по пакету SDK DirectX.

После того как среда выполнения DirectX3D получит код шейдера от приложения, среда выполнения проверяет код перед передачей кода в драйвер. Как правило, среда выполнения добавляет к инструкциям ассемблеру префикс "D3DSIO_" для создания кода операции. Например, следующие инструкции ассемблеров соответствуют операциям в режиме ядра:

Инструкция ассемблер Работа в режиме ядра

добавление

D3DSIO_ADD

Mov

D3DSIO_MOV

sub

D3DSIO_SUB

Tex

D3DSIO_TEX

texcoord

D3DSIO_TEXCOORD

Обратите внимание, что во всех версиях вершинных шейдеров инструкция дополнительного ассемблерного ассемблер реализуется как D3DSIO_ADD операция с модификатором источника (биты 27:24) второго источника, установленного для отрицания (0x1).

Инструкции tex и texcoord применяются к пиксельным шейдерам версий от 1_0 до 1_3; С каждой инструкцией связан один параметр назначения .

Инструкции texld и texcrd являются новыми для пиксельного шейдера версии 1_4 и более поздних версий; С каждой инструкцией связаны как целевые, так и исходные параметры .

Среда выполнения преобразует инструкции ассемблеров tex и texld в D3DSIO_TEX режиме ядра. Среда выполнения преобразует инструкции ассемблеров texcoord и texcrd в D3DSIO_TEXCOORD операции в режиме ядра. Драйверы сначала проверяют версию кода шейдера пикселей, а затем обрабатывают соответствующие инструкции. Например, если драйвер проверяет, получил ли он код пиксельного шейдера версии 1_4 с помощью операции D3DSIO_TEX, драйвер определяет, что параметры назначения и источника соответствуют маркеру инструкции.

Требования

Доступно в Windows Vista и более поздних версиях операционных систем Windows.