optimization - El compilador HLSL optimiza el extraño?
compiler-construction compilation (1)
No soy un experto en compiladores HLSL y cómo trabajan con sucursales, pero he leído diferentes opiniones sobre este tema. Entonces para ser concretos: en C / C ++ tendría mucho sentido implementar algo como:
if (factor == 0)
{
// Simple calculation in special case of factor=0
}
else if (factor == 1)
{
// Simple calculation in special case of factor=1
}
else
{
// Much more complex calculation in general case of arbitrary factor
}
en situaciones donde la mayoría del factor de tiempo es 0 o 1. ¿Es lo mismo para HLSL? He leído varias veces que los compiladores HLSL funcionan de manera diferente y, por ejemplo, en el código máquina resultante, todas las ramas se computan de todos modos. En este caso, la construcción anterior no tendría sentido y solo podría ser reemplazada por el caso else.
Como se indica en la documentación , puede indicarle al compilador si se deben ejecutar ambos casos (etiqueta [flatten]
) o solo una cara (etiqueta [branch]
). Si está utilizando funciones de gradiente como tex2D
no puede usar la rama, excepto que las reemplace con algo como tex2Dlod
.