2011-12-08 6 views
1

셰이더는 if(x>a && x<b)을 허용하지만 내 이해는 논리적 테스트가 느립니다. 그것은 더 많은 코드를 보이지만 CPU의 ASM의 시대에서, 같은 트릭이하고 때로는 가치가 있었다셰이더 프로그래밍 - 두 값 사이에서 테스트하는 경우

mid = (a+b)*.5; 
half = (b-a)*.5; 
if(abs(x - mid) < half){...} 

: 라인을 따라 최적화이 가치입니다.

half 만약

mid가 CPU에 한 번 계산하고 우리는 대체, 쉐이더 매개 변수로 전달 될 수 if(x>a && x<b)로 : if(abs(x - mid) < half)는 -로 귀찮게이 가치 입니까?

내 테스트에서 halfmid을 사전 계산 된 셰이더 매개 변수로 끌어 올리는 약간의 개선이 있었지만 테스트 할 GPU는 하나 뿐이므로 "일반"답변과 케이스가있는 경우 극적으로 더 좋거나 나 빠를 것입니다.

답변

0

셰이더 매개 변수의 미리 계산 된 부분은 컴파일러가 표현이 일정하다는 것을 알아 내기에 종종 똑똑하기 때문에 (특히 directx에서는) 부적절 할 수 있습니다.

질문은 abs가 구현되는 방법입니다. 타겟 GPU는 무엇입니까? 모바일, 중반, 상한?

관련 문제