Я хочу иметь isequals (a, b) сравнения с использованием графической арифметики на 2 целых числах (я не могу использовать логический оператор if as мне нужна линейная логика), чтобы:Запись функции «Сравнить - Равно» в HLSL/CG, т. Е. Isequals (a, b)
возврата 1, если а = Ь
возврата 0, если а = Ь
Например, я могу написать:
1-saturate(distance(a,b)); // to return 1 if a = b.
и
1-step(abs(a-b));
есть ли более быстрый способ сделать это в cg maths?
Не могли бы вы объяснить, почему вы не можете просто проверить 'a == b'? Пожалуйста, поторопитесь, моя голова вот-вот взорвется. – thokra
, потому что я делаю селектор для 640 возможных комбинаций математических функций, ... используя if (a == b) в шейдерной модели 3, он будет разворачивать компиляцию 640 комбинаций примерно в 64000 математических инструкций. если построить линейный селектор, который делит все остальные возможности на ноль, возможно, он более эффективен на sm3. и я должен ждать неделю, чтобы иметь графическую карту dx11. –
т. Е. 10 x 10 x 10 выборок, используя if, составляет 1000 комбинаций, а использование умножения на ноль - это 1 длинная математическая функция, где 27 из 30 частей этой функции не выбраны и делятся на ноль. –