2014-03-03 8 views
2

glDrawElements를 호출하면 지연된 셰이더 컴파일이 발생하는 알려진 iOS 문제가 발생한 것 같습니다. 이 경우 대부분의 오버 헤드를 유발하는 하위 기능을 찾기 위해 도구를 사용했습니다.CompileIntermediate는 반환 할 때 (동일한 쉐이더/대소 문자) 0.2 ~ 3 초 이상 소요됩니다. 왜? (iOS 7의 IMGSGX543GLDriver)

드로잉하는 동안 컴파일이 발생하지 않는다는 사실에 만족하지 않지만, 실제로 나를 괴롭히는 것은 0.2 초에서 5.0 초 사이의 셰이더 컴파일 시간을 보았습니다. 메모리 할당 도구와 장비에서 실행, 나는 실제로 40.0 초 지연을 가지고

일반적인 스택은 다음과 같습니다 (!) '2930.0'는 등 ... 시간이 그 함수에 소요되는

18 OpenGLES 2939.0 glDrawElements 
17 GLEngine 2939.0 glDrawElements_ACC_ES2Exec 
16 GLEngine 2939.0 gleDoDrawDispatchCoreES2 
15 IMGSGX543GLDriver 2939.0 gldUpdateDispatch 
14 IMGSGX543GLDriver 2938.0 gpusLoadCurrentPipelinePrograms 
13 IMGSGX543GLDriver 2915.0 glrUpdateCtxSysFragmentProgram 
12 IMGSGX543GLDriver 2761.0 sgxUpdateCtxSysProgram 
11 IMGSGX543GLDriver 2760.0 ppimgCompileShader 
10 IMGSGX543GLDriver 2759.0 PVRUniFlexCompileToHw 
9 IMGSGX543GLDriver 2658.0 CompileIntermediate 

밀리 초 단위.

'범인'은 부피가 큰 조각 쉐이더 (350 줄) 인 것처럼 보입니다. 좋아요, 그렇지만 오류나 경고없이 컴파일됩니다. 미안 해요. 셰이더 코드 나 링크를 게시 할 수 없지만, 다른 사람들이 유사한 오류가 발생할 수 있다고 생각합니다. 셰이더 크기가 문제가있는 경우 문제를 확대한다고 생각합니다.

누구도이 문제에 앞서 만났습니까? 도울 수 있니?

iPad2 및 iPod touch를 실행하는 iOS7에서 발생하는 문제입니다. 한 빌드에서 다음 빌드로 문제가 장치 중 하나에서 발생하거나 둘 다 또는 둘 모두에서 발생할 수 있습니다. 나는 앱 실행이 계속해서 변경되는지 여부를 명확하게 판단 할 수 없지만 지금까지는 빌드별로 표시되는 것으로 보입니다.

몇 가지 추가 정보 : - 두 번째 (또는 시간이 지남에 따라) 앱에서 쉐이더가로드되지 않았습니다. - 쉐이더는 앱 시작 직후에로드되지만이 앱이로드 한 첫 번째 쉐이더는 아닙니다. -이 실제로 알려진 문제입니다

답변

1

도움이되지 않는 동안 (예를 들어 0.5 ~ 1.0 초)이 쉐이더를로드 연기와 apple documentation는 말한다 :

는 비용이 많이 드는 작업이 비교되는 셰이더 프로그램 만들기 다른 OpenGL ES 상태 변경. 앱이 초기화 될 때 프로그램을 컴파일, 링크 및 검증합니다. 모든 쉐이더를 작성한 후에는 glUseProgram을 호출하여 효과적으로 쉐이더를 전환 할 수 있습니다.

불행히도 나는 당신이 당신의 쉐이더를 더 빨리 컴파일 할 수 있다고 생각하지 않는다.

+0

나는 귀하의 의견에 감사 드리며 일종의 답변이라고 생각합니다.하지만 실제로 궁금한 점은 빌드간에 관찰되는 커다란 불일치입니다. 나는 이것이 냄새가 있고, 더 설명이 필요하다고 말한다. 따라서 질문 제목을 명확하게 조정했습니다. 이전에 컴파일하는 것에 관해서는 셰이더가 응용 프로그램의 홈 화면을 표시하는 데 필요한만큼 좋은 "로드 중"메시지를 표시합니다. –