2017-05-15 1 views
0

2 개의 다른 장치에서 별도의 스레드로 사용되는 공유 DX11 텍스처가 있습니다.DX11 공유 텍스처 업데이트

Thread1 (장치 (1)에서 동작은) 프레임마다 호출되고 공유 텍스처

Thread2를 (1 디바이스상에서 동작) 업데이트 : 다른 텍스처 복사하여 공유 텍스처를 소비한다. 빈도는 스레드 1보다 훨씬 적습니다.

MSDN에 따르면 "한 장치에서 공유 텍스처가 업데이트되는 경우 ID3D11DeviceContext :: Flush가 해당 장치에서 호출되어야합니다."

그러나 모든 프레임에서 thread1을 플러시 (flush)하는 것은 매우 비싸고 성능이 크게 떨어집니다. 장치 컨텍스트가 스레드로부터 안전하지 않기 때문에 스레드 1에서 장치 1을 플러시 할 수 없습니다.

스레드 2가 그것을 소비해야 할 때 효율적으로 공유 텍스처 업데이트를 할 수 있습니까?

도움 주셔서 감사합니다. MSDN은 공유 텍스처를 다룰 때 그다지 도움이되지 않습니다. 는 두 개의 스레드 (또는 간) 당신이 IDXGIKeyedMutex를 사용할 수 사이의 공유 리소스에 대한 액세스를 동기화하기 위해 텍스트

답변

0

을 강조했다. 여기에 자세히 설명되어 있습니다. https://msdn.microsoft.com/en-us/library/windows/desktop/ee913554(v=vs.85).aspx#dxgi_1.1_synchronized_shared_surfaces

두 개의 DX10 장치 사이의 리소스 공유 만 표시하지만 샘플 코드도 확인할 수 있습니다. DX11 장치에서도 마찬가지입니다. 중요한 부분은 QueryInterface에 먼저 IDXGIResource에 대한 공유 텍스처를 사용한 다음 IDXGIKeyedMutex에 대해 공유 텍스처를 배치하는 것입니다. 그런 다음 AcquireSync 및 ReleaseSync 함수를 사용하여 동기화에 뮤텍스를 사용합니다.

+0

안타깝게도 keyed 뮤텍스가 작동하지 않습니다. 우선 스레드를 먼저 실행해야하는 정의 된 순서가 없기 때문입니다. 두 스레드 모두 임의의 간격으로 호출 할 수 있으므로이 시나리오에서는 키순 mutex가 적합하지 않습니다. – Sid