返回「计算机、信息技术与工程」

【CG】GPU, 驱动与Graphics API

更多
Markdown 结构化数据
本文目录 14 个章节

【CG】GPU, 驱动与Graphics API

创建时间:2020/11/26 14:56

  • 【CG】GPU, 驱动与Graphics API
    • Graphics API与显卡驱动
      • API种类
        • OpenGL
        • DirectX
        • Metal
      • OpenGL与显卡驱动
        • 显卡驱动
        • 帮助理解:Windows Display Driver Model Architecture
    • Unity对图形API的选择
    • 硬件厂商
      • CPUs: Intel and AMD
      • Graphics: Intel, AMD and Nvidia
    • GPU历史
    • Ref

Graphics API与显卡驱动

API种类

OpenGL

OpenGL(Open Graphics Library,开放式图形库)。一般它被认为是一个API(Application Programming Interface, 应用程序编程接口),包含了一系列可以操作图形、图像的函数。然而,OpenGL本身并不是一个API,它仅仅是一个由Khronos组织制定并维护的规范(Specification)。如果没有图形编程接口,我们要访问GPU,就需要直接和各种寄存器、显存打交道,所以OpenGL就是在这些硬件的接触上实现了一层抽象。

DirectX

DirectX(DX,Direct eXtension):是由微软公司创建的一系列专为多媒体以及游戏开发的应用程序接口。旗下包含Direct3D、Direct2D、DirectCompute等等多个不同用途的子部分,因为这一系列API皆以Direct字样开头,所以DirectX(只要把X字母替换为任何一个特定API的名字)就成为这一巨大的API系列的统称。

DirectX主要基于C++编程语言实现,遵循COM架构。

Metal

Metal is the standard graphics API for Apple devices. Unity supports Metal on iOS, tvOS and macOS (Standalone and Editor).

OpenGL与显卡驱动

OpenGL所提供的只是接口,我们所调用的也只是接口;具体的实现由显卡生产商实现,也就是他们所提供的显卡驱动;我们使用OpenGL可以调用API(这个api仅仅是函数名,仅仅是接口而已)去绘制一个三角形,但是硬件如何知道这个函数是用来绘制三角形的,这一部分就是由显卡驱动来完成,显卡驱动里会提供这个接口的具体实现,也就是说如果没有安装显卡驱动或者显卡驱动里并没有提供绘制三角形的实现,那么OpenGL里的api是毫无意义的;

显卡驱动

驱动程序 :驱动程序是一个软件组件,可让操作系统和设备彼此通信。

开发者通过图像编程接口发出渲染命令,这些渲染命令也就是DrawCall,只有显卡驱动知道如何和GPU通信;正是因为显卡驱动的存在,显卡驱动会将接收到的渲染命令翻译成GPU能够理解的语言,也负责将纹理等数据转换成GPU所支持的格式,之后GPU才能懂OpenGL和DirectX,显卡驱动就像是一个中介,介于图形编程接口(OpenGL和DirectX)和GPU之间。

帮助理解:Windows Display Driver Model Architecture

Alt text

Unity对图形API的选择

Unity supports DirectX, Metal, OpenGL, and Vulkan graphics APIs, depending on the availability of the API on a particular platform.

  • Auto Graphics API - the Player build includes a set of built-in graphics APIs and uses the appropriate one at run time to produce a best case scenario.

  • When Auto Graphics API for a platform is not checked, the Editor uses the first API in the list. If the default API isn’t supported by the specific platform, Unity uses the next API in the Auto Graphics API list.

OpenGL Core - OpenGL Core is a back-end capable of supporting the latest OpenGL features on Windows, MacOS X and Linux. This scales from OpenGL 3.2 to OpenGL 4.5, depending on the OpenGL driver support.

Mac OS X 10.8 (OpenGL 3.2), MacOSX 10.9 (OpenGL 3.2 to 4.1) Windows with NVIDIA since 2006 (GeForce 8), AMD since 2006 (Radeon HD 2000), Intel since 2012 (HD 4000 / IvyBridge) (OpenGL 3.2 to OpenGL 4.5) Linux (OpenGL 3.2 to OpenGL 4.5)

硬件厂商

CPUs: Intel and AMD

Alt text

Graphics: Intel, AMD and Nvidia

Alt text

GPU历史

著名的游戏引擎虚幻引擎(Unreal Engine)Epic Games的Unreal window用PC游戏是在1998年公布的。当时因为还是软件渲染时代,坐标转换矩阵计算是在CPU中进行的。

1999年NVIDIA发布了Geforce 256显卡,因为硬件是T&L(transform & lighting),矩阵计算和Multiply accumulate operation这些固定功能是由硬件来实现的,从这个时候开始,3D PC游戏的坐标转换将在GPU中实现。

单机游戏机中,在2000年发布的索尼Playstation2中CPU Emotion Engine的向量运算单位已经实现了几何处理,2001年发售的任天堂GameCube在GPU Flipper上实现了硬件T&L。

2000年微软发布了window用图形API DirectX 8。

DirectX 8不是固定功能,而是搭载了用户可以自定义编写的软件管线的硬件Shader,前提得是Programmable shader架构的GPU。

Shader分为两种,处理几何的Vertex Shader和处理Pixel的Pixel Shader,各自内部分别实现了个别硬件Block。

在OpenGL/OpenGL-ES中,把在DirectX中叫做Pixel shader的词汇称之为Fragment shader。

2001年发布了支持DiectX 8的操作系统windows XP和Nvidia GPU Geforce 3。

同年,发售的微软单机游戏机 ‘XBOX’搭载了支持自定义的Geforce 3,并支持Programmable shader。

渲染就是为了表现出3D立体感,给物件赋予由Shading这种模型现象而产生的阴影和灯光效果。

灯光、阴影处理等影响渲染结果的处理有很多,所以Shading这个词汇作为现代用语,指的是使用GPU来渲染的一般表现。

把在GPU硬件Shader中运行的程序叫做Shader Program,有时候干脆就叫做Shader。

在这之后,在2005年发售的微软XBOX 360中采用的ATI GPU Xenos,采用了Unified shader,这是一个很大的突破。

Unified shader作为同一硬件,在Shader process 中,同时处理vertex shader和Pixel shader两边,会根据各自处理阶段和每个游戏特性的不同会更换适合各个处理负荷的资源分配,在Shader process 方面能保持road平衡。

这边Unified shader process是以stream processing unit来实现的,具有5要素的VLIW(Very Long Instruction Word,超长命令) ISA。

5要素就是为了Vector4和Matrix4x4运算的 XYZW的4unit,超越函数和为了形态变换处理的T unit合在一起叫做VLIW5。

在支持Unified shader以后,作为大规模并行计算机(Massively parallel computer)的概念也渐渐明确下来,分支预测也逐渐加强,GPGPU处理为了不一直停留于图形处理,逐渐开始使用GPU。

Ref

https://www.which.co.uk/reviews/laptops/article/intel-amd-or-nvidia-how-to-make-sense-of-cpu-and-graphics-brands-aLclK5K6NOxU https://docs.microsoft.com/en-us/windows-hardware/drivers/display/windows-vista-and-later-display-driver-model-architecture https://blog.csdn.net/qq_36383623/article/details/99174252