2014-12-12 5 views
2

3 채널에 대한 쉐이더 코드가 있습니다. 기본적으로 내가 사용GLSL : 1 채널의 쉐이더 코드는 여전히 3 개의 채널에 대해 1 회의 처리 시간을 사용합니까?

내가 할 것

.rgb

질감 (inputTexture0, VUV) 일부 추가 및 요소 현명한 곱셈, 같은 :

VEC3 + VEC3

점 (VEC3, VEC3)

셰이더 코드를 1 채널로 다시 프로그래밍하지 않으려는 경우, 이론적으로 1 채널 전용 셰이더 코드와 비교하여 낭비되는 처리 시간을 이론적으로 알고 싶습니다.

+1

"추가 및 요소 현명한 곱셈"에 대해 모르겠지만'texture() .r' 및'texture() .gb'는 정확히 동일한 비용을가집니다. – Dan

+0

3 채널의 경우 출력은 color = vec4()입니다. 어느 쪽이든 수정하지 않아도됩니까? 셰이더 컴파일러는 자동으로 1 개의 채널을 출력합니다. – user1914692

답변

2

이것은 하드웨어에 따라 크게 다릅니다. 전통적으로 많은 GPU는 스칼라 연산 (즉, 하나의 구성 요소) 만 필요한 경우에도 벡터에 대해 항상 연산을 수행합니다. 똑똑한 컴파일러 최적화가 여러 스칼라 연산을 하나의 벡터 연산으로 묶을 수도 있습니다. 하지만 근본적으로 이러한 유형의 아키텍처에서는 하나의 구성 요소 만 사용하면 작업 수가 줄어들지 않습니다.

일부는 GPU가 전통적인 그래픽 (컴퓨팅)보다 훨씬 많이 사용되기 때문에 스칼라 작업을보다 효율적으로 처리 할 수있는 아키텍처가 점차 보편화되고 있습니다.

실제로 하나의 구성 요소 만 필요한 경우 값을 vec3으로 설정하면 동일한 처리 시간과 처리 시간의 3 배가 될 수 있습니다. 다양한 GPU를 측정하면 이러한 극단적 인 상황에 가까운 결과를 얻을 수있는 가능성이 있습니다.