답변:
Nvidia는 최신 GL에서 명령 버퍼를 생성하기위한 확장 기능을 가지고 있습니다.
유사한 기능이 부족한 이유는 렌더링 방법과 관련된 상태가 많고 표시 목록이 많은 다른 상태의 영향을 받기 때문입니다. 예를 들어 블렌드 상태를 변경하려면 일부 하드웨어에서 조각 셰이더를 패치해야합니다.
NVidia는 모든 상태 를 캡처 하고 디스패치 후 상태로 재설정하여 문제를 해결했습니다 .
1) 디자인의 동기는 무엇입니까?
기본 목표는 사전 검증 된 명령 버퍼를 재사용 할 수 있도록하는 것입니다. 다른 API와 제안서에서는 다양한 명령 목록 또는 상태 객체를 사용하여이 문제를 해결했지만 반복되는 문제는 파이프 라인의 여러 단계 사이의 상호 작용이 이러한 사전 검증 및 재사용을 방해한다는 것입니다. 이러한 상호 작용은 종종 하드웨어에 따라 다르며 (공급 업체마다 또는 세대마다 다름) 사전 검증 체계가 제안되었을 때 상상하지 못한 새로운 기능에 의해 새로운 상호 작용이 도입됩니다.
우리는 (거의) 파이프 라인의 전체 상태를 포함하는 모 놀리 식 상태 객체를 가짐으로써이를 해결하려고 시도합니다. 이는 필요한 모든 교차 검증을 수행하기 위해 모든 구현에 충분한 정보를 제공해야합니다. 우리는 새로운 API 풋 프린트를 최소화하는 방식으로이를 생성하려고합니다. 모든 상태 (향후에 추가 된 것을 포함)를 원하기 때문에 컨텍스트의 현재 상태에서 캡처합니다.
[...]
23) 디스패치 호출 후 상태가 남아있는 상태, 즉 토큰에 의해 수정 된 상태는 무엇입니까?
해결 : 상태가 재설정됩니다.
(위의 링크 된 텍스트에서)
그러나 진정한 후속 작업은 DX12 및 vulkan의 명령 버퍼 기능입니다. 또한 명령 버퍼를 만들고 채울 때 사용할 모든 렌더링 상태를 단일 객체로 캡처합니다. NVidia 확장은 NVidia가 Vulkan 디자인에 참여한 결과 그 아키텍처를 기반으로합니다.