Инструкция или инструкция Слоты ?
Инструкция pow
занимает три 3 слота, тогда как инструкция mul
занимает только 1.
(Ссылка: инструкцияустанавливает для: vs_2_0 , ps_2_0 , vs_3_0 , ps_3_0 )
Когда вы пишете шейдер, вы обычно хотитевести отсчет слотов команд, потому что у вас ограниченное количество слотов команд, как определено моделью шейдера.Это также разумный способ приблизить вычислительную сложность вашего шейдера (то есть, насколько быстро он будет работать).
Степень 1, очевидно, не является опцией.Степень 2 требует одну mul
инструкцию.Полномочия 3 и 4 могут быть сделаны с двумя mul
инструкциями.Поля 5, 6 и 8 могут быть выполнены с помощью трех mul
инструкций.
(я думаю, математика этой оптимизации объясняется ссылкой , которую опубликовал Джим Льюис.)
Вероятная причина, по которой компилятор выбирает три mul
инструкции вместо одной pow
инструкции (обе используют одинаковое количество интервалов команд), заключается в том, что для инструкции pow
с постоянным показателем также потребуется распределениепостоянного регистра для хранения этого показателя.Очевидно, что использование трех слотов инструкций и отсутствие константных регистров лучше, чем использование трех слотов инструкций и одного регистра констант.
(Почему вы получаете на 10 больше инструкций? Я не уверен, это будетзависит от вашего кода шейдера. Компилятор HLSL делает много странных и замечательных вещей во имя оптимизации.)
Если вы используете компилятор шейдера (fxc
) в DirectX SDK с параметрами /Cc /Fc output.html
,это даст вам хорошее чтение сборки, которое вы можете изучить, включая количество используемых слотов инструкций.