셰이더를 컴파일 된 형태 또는 일반 텍스트로 배포해야합니까?


13

GLSL로 작성된 셰이더를 사용하는 응용 프로그램이 있다면 실제 세계와 데스크탑 및 모바일 배포에 가장 적합한 전략은 무엇입니까?

나는 이것을 바이너리 형태로 또는 일반 직렬 텍스트로 배포하려고합니다. 이에 대한 좋은 제안이 필요합니다.

답변:


15

이진 셰이더를 사용하는 주된 이유는 텍스트 셰이더를 컴파일하는 것이 대상 장치에 대한 작업 부하가 너무 큰 경우입니다. 이진 GLSL 셰이더는 표준화 된 형식이 없으므로 지원하려는 GPU / 드라이버마다 서로 다른 형식이 필요합니다. 셰이더를 소스 형식으로 배포 한 다음 처음 실행시 이진 형식으로 캐시 한 다음 거기서로드하는 것이 좋습니다. 그런 다음 다시 바이너리를 사용하여 정당화하기 위해 성능 병목 현상이 있는지 먼저 테스트합니다.

고려해야 할 사항 중 하나는 오프라인 텍스트 셰이더 옵티 마이저로 , 크 래피 모바일 셰이더 컴파일러에 큰 영향을 줄 수 있습니다.


쉐이더 컴파일이 병목 현상이있는 장치를 찾을 수 있다면 실제로 놀랐습니다. 큰 셰이더에서도 코드의 양은 컴파일 측면에서 사소한 양의 코드입니다.
edA-qa mort-ora-y

1
Tapio가 제안한 것처럼 큰 엔진은 일반적으로 오프라인에서 쉐이더를 컴파일하거나 첫 번째 실행에서 캐시합니다. 셰이더 당 사소한 양의 코드가있을 수 있지만 많은 코드를 가질 수 있습니다.
Laurent Couvidou

Nvidia에서 임의의 ATI 비디오 카드와 다른 임의의 비디오 카드를 구입하고 쉐이더를 컴파일하고 컴파일 된 버전 만 배포해야합니까? 대상 비디오 카드의 브랜드가 무엇인지 런타임에 어떻게 확인할 수 있습니까? 그것에 대해 믿을만한 것이 있습니까?
user827992

1
@ user827992 공급 업체가 동일하더라도 이진 형식은 GPU / 드라이버 세대에 따라 다를 수 있습니다. Qualcomm 및 PowerVR과 같은 모든 모바일 GPU는 물론 인텔 GPU도 많이 있습니다. 다시 한 번 : 컴파일 된 셰이더를 배포하지 말고 사용자 장치에서 처음 실행할 때 캐시하십시오. GPU 감지와 관련하여 glGetString () 형식의 GL_VENDOR, GL_VERSION 및 GL_RENDERER 문자열을 구문 분석 할 수 있지만 형식은 공급 업체마다 다릅니다.
Tapio
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.