나는 이것을 논평에서 질문으로 썼다. 그러나 나는 그 자신의 질문에 답할 가치가 있다고 생각한다.OpenGL ES 2.0을 사용하는 iPhone/iPad의 콘쥬 게이트 그라디언트
iPhone/iPad에서 접합 그라디언트 솔버를 만들고 싶습니다. 실시간 옵티컬 흐름/실시간 시뮬레이션/실시간 유한 요소와 같은 GPGPU 프로그래밍에 대한 새로운 가능성을 열어 놓았습니다.
GpuGems의 잘 쓰여진 장에서는 부동 소수점 텍스처를 사용하여 어떻게 수행 할 수 있는지 설명합니다.
내가 만난 첫번째 문제는 부동 소수점 렌더링 - 투 - 텍스처를 만들 수 없다는 것입니다. 아마도 필자의 텍스처 설정에 맞는 매개 변수가 없을 것입니다. 예를 들어,이 코드는 첫 번째 줄에서는 성공했지만 두 번째 줄에서는 GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 오류로 실패합니다.
glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, 256, 256, 0, GL_LUMINANCE, GL_HALF_FLOAT_OES, 0);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textureHandle, 0);
그래서 제 질문은 iPhone/iPad에서 어떻게 렌더 - 부동 소수점 텍스처를 할 수 있습니까?
다른 방법으로이 문제를 해결할 수 있습니까? 난 장담한 대안은 frag 쉐이더에서 부동 소수점 텍스처를 사용한 다음 R의 첫 8 비트와 두 번째 8 비트를 간단히 쉐이더 셰이더에서 정규 gl_FragColor로 렌더링하는 것입니다. gl_FragColor의 G입니다. 그런 다음 glReadPixels을 사용하여 FB에서이 값을 다시 읽어서 반 부동으로 다시 해석하고 해당 데이터를 새 텍스처로 전송하고 프로세스를 반복 할 수 있습니다. 명백한 문제는 GPU에서 CPU로 되돌아가는 매우 낭비적인 왕복이 필요하다는 것입니다. 그런 다음 다시 GPU로 돌아가서 어떤 속도 개선도하지 않을 것이라고 확신합니다.
누구에게 아이디어가 있습니까?
VDSP 기능을 봐 솔버, 나는 생각한다. 반값의 정밀도가 실제적인 문제 (단 정밀도가 이미 너무 적을 수도 있음)에 충분하다고는 생각하지 않는다. 저는 여러분이 정말로 좋은 선행 조건을 필요로하고 Jacobi-preconditioner를 능가하는 모든 것이 GPU에서 행렬 벡터 제품 (CPU 모드를 이기고 싶다면 적어도)보다 훨씬 까다 롭습니다. 특히 조각 쉐이더를 사용할 때 CUDA/OpenCL보다 더 제한적입니다. –
다행히도 우리는 Jacobi-preconditioner를 사용할 것입니다. 나는 여기에 설명 된 방법을 시도하고 사용할 것이다 : http://msdn.microsoft.com/en-us/library/ee416413(v=vs.85).aspx. 그것은 플로트를 에뮬레이션하는 가장 좋은 방법 인 것처럼 보입니다. Encode와 Decode를하는 것에 대한 벌칙은 무거울 것이지만 여전히 가치가있을 것입니다. 그리고 마침내 그렇게하지 않으면 네온 프리미티브를 사용하여 보장 된 배율을 8 배로 보장합니다. 하지만 대부분의 사람들은 NEON에서 얻습니다. – twerdster
이 RGBE 공유 지수 형식을 의미하는 경우 더욱 그렇습니다. 당신은 단지 약 9 비트의 정확도를 가지고 있습니다, 그리고 지수가 모두 동일 할 때만, 이것은 확실하게 그렇지 않을 것입니다. 색상에 영향을 줄 수있는 매우 정밀도가 떨어지는 정밀 형식을 사용하면 실제 Jacobi 선행 조건 도구를 사용할 때 실제 선형 방정식 시스템을 풀려고 할 때 문제가 발생합니다. –