저는 최신 Vulkan/Mantle/Direct3D12 API에 대해 말하고 있습니다. 스크립팅 된 배치에 명령을 묶는 것은 1990 년대 이래 이점으로 생각해야 할 매우 간단한 해결책입니다. 왜 그것을 구현하거나 오르는 데 오랜 시간이 걸렸습니까?GPU 용으로 저장된 명령에 CPU 명령을 번들로 제공하는 최신 API 솔루션을 제안하는 데 20 년 이상이 걸린 이유는 무엇입니까?
답변
주된 이유는 20 년 앞서 미래를 예측하는 데 어려움이 있으며 그 당시의 그래픽 하드웨어가 기존 API와 잘 일치했기 때문입니다.
첫 번째 버전의 OpenGL은 기본적으로 IrisGL의 정리 된 버전입니다. 그리고 IrisGL은 기본적으로 SGI의 첫 번째 래스터 그래픽 프로세서가 금속 수준에서 어떻게 구현되었는지 1 : 1로 표현했습니다. glColor…
, glNormal…
등을 호출하면 문자 그대로 하드웨어 래스터 엔진에 특정 레지스터가 설정되었습니다. glVertex
은 그 레지스터 값을 커밋합니다.
OpenGL API의 디자인은 그래픽 래스터 라이저 이 어떻게 그 당시에에서 작동했는지 표현했습니다. 그러나 GPU 기술은 그 이후로 많이 발전했습니다. 그리고 2005 년쯤에 GPU 아키텍처가 API 설계를 전혀 닮지 않은 지점에 이르렀습니다. 이는 드라이버 복잡성의 인플레이션이 설정 된 이후의 날짜이기도합니다.
최근 출시 된 API (D3D12, Vulkan, Mantle, Metal)은 GPU 기술의 상태와 이러한 API가 설계 및 출시 된 시점의 일치 프로그래밍을 반영합니다. GPU 디자인의 향후 발전으로 새로운 프로그래밍 모델과 이후의 API가 만들어 질 가능성이 있습니다.
관성 때문에 현재 육화로 인해 10 년이 걸렸습니다. OpenGL 3.0은 재 설계 작업의 기반이되기도했지만 실패했습니다. –
'드로우 번들'에 대한 수많은 솔루션이 있지만, 많은 장치 (예 : DirectX 11 명령 목록)에서 소프트웨어로 에뮬레이트되는 기본적인 문제가 있습니다. 이는 일반적으로 직접 최적화 된 드로잉보다 느립니다. DirectX 2.0과 Direct3D 3.0 (1995 년경)에는 "버퍼 실행"기능이있어 대부분의 사람들이 어색한 것으로 알았고 즉시 DirectX 5.0 이상에서 DrawPrimitive를 사용하여 전환했습니다. 다양한 솔루션이 특정 공급 업체 또는 DXX와 같은 사용자 지정 API (예 : Xbox의 변형 된 DirectX)를 사용하지만 DX12 이전의 대부분의 하드웨어에서는 일반적으로 사용되지 않았습니다. –
GPU 디자인이 지난 20 년 동안 수렴 해 왔음을 언급 할 가치가 있습니다.1990 년대로 거슬러 올라가면, 시장에는 정말 이상한 디자인이 많이 있었고, 그 당시의 엔지니어링 트레이드 오프로 최적화 된 드로잉을하는 방법과는 완전히 다른 개념이있었습니다. 요즘 NVIDIA, AMD 및 Intel은 GPU 아키텍처가 완전히 다르지만 사용하는 기본 개념은 모두 매우 유사하며 DX11/DX12의 추상화 내에서 잘 맞습니다. –
복잡한 문제에 대한 많은 해결책이 발견되면 매우 분명하고 간단합니다. 그렇다고해서 쉽게 해결할 수있는 것은 아닙니다. – domsson
제한 사항이 있는지 궁금합니다. 말하자면, 저장 방법이 없습니다. 우리가 API에서 수행하는 대부분의 작업이 CPU 공간을 GPU 공간으로 오프로드하는 것이기 때문에 특히 천재가 아니기 때문에 생길 수있는 것처럼 보입니다. –
1999 년 타일 기반 렌더링을 수행하는 GP-1의 기가 픽셀 엔진이 있었으며 일괄 처리에 유용 할 대역폭을 절약하고있었습니다. –