Токен инструкции
Маркер инструкции сообщает драйверу о выполнении определенной операции и состоит из следующих битов:
Биты
[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.