У каждой переменной есть область видимости (scope), которая обычно задается фигурными скобками {}. Объявленная внутри них переменная не может использоваться вне своей зоны видимости. Поэтому можно вынести объявление lit за пределы конструкции if-else:
float lit;
if ( whatFace < -1 ) {
lit = dot( -input.normal, -lightDirection );
} else {
lit = dot( input.normal, -lightDirection );
}
return diffuse * entityColor * lit * lightColor;
Вообще синтаксис и семантика HLSL (да и GLSL) во многом схожи с языком С. Поэтому если у тебя есть время - почитай книжки всякие про него. В отличие от С++, С не так трудно начинать изучать.