D3D11 - KlayGE游戏引擎 Skip to content

Archive

Tag: D3D11
据我上一次写D3D11 feature一晃已经4年了。相信这么多年来大部分开发者不再像当年那样无知了。现在Win10和D3D12已经发布,图形驱动模型也有不少发展。现在在Win10里的图形栈经过了较大规模的重构。虽然在上层很难察觉,但底层已经很不一样。 老的兼容方式 当年D3D9刚出来的时候,大部分显卡和驱动还是D3D8的。当时的兼容方式是,让D3D9的runtime跑在D3D8的驱动上。D3D9和D3D10之间出现了个短暂的断层,互相不兼容。不久之后D3D10.1又可以通过feature level的方式在老显卡上跑。这个东西叫做10level9,意思是10的runtime在9的硬件上。后来出了11,也一直是用这样的方式。 总的来说,老的兼容方式就是,硬件厂商提供一个或多个驱动,runti ...
Windows 8 developer preview不但向开发者提供了Win8和VS2011的预览,还在其中隐藏了之前没有宣布过的Direct3D 11.1。现在,D3D11.1的初期文档也出现在MSDN中,让我们来看看D3D11.1提供了哪些新特性。 已经添加入D3D11.1的新功能有: Shader tracing。在API层面提供更多调试shader的能力。 Direct3D device sharing。让D3D 10的API和D3D 11的API可以共享同一个渲染设备。 Check support of new Direct3D 11.1 features and formats。更新了ID3D11Device::CheckFeatureSupport和ID3D11Device::CheckFormatSupport,以支持D3D 11.1和DXGI 1.2提供的新格式。 Create larger constant buffers than a shader can access。可以建立超 ...
上文介绍了D3D11的两个重要特性compute shader和multi-threaded,本篇专注于两个不能在D3D10硬件上使用的、纯D3D11的新特性tessellation和BC6H/BC7纹理压缩。 Tessellation 很 多人会说D3D11增加了tessellation shader这个stage,但真相是增加了hull shader、tessellator和domain shader三个stage。Hull shader的输入是patch的控制点(三角形、四边形这样的图元,最多有32个控制点),计算出tessellation等级、确定 tessellation的方法等。它的输出被送给固定单元的tessellation进行细分。Domain shader的输入是细分后的bary centric坐标、来自hull shader的控制点,它负责计算插值后的顶点坐标。 Tessellation早就存在于一些GPU。 D3D9 ...
上文介绍了feature level和option features这两个最容易被误解的D3D11特性,本篇主要探讨一下另外两个重要特性,compute shader和multi-threaded。他们同样可以在D3D10级别硬件上使用,但存在很多细节需要注意。 Compute Shader compute shader(也叫DirectCompute)是D3D11新增的主要功能之一。在D3D11的GPU上,compute shader是完整的5.0版本,而在D3D10.x的GPU上,compute shader有个简化的4.x版。两者的具体差别请见Compute Shaders on Downlevel Hardware。 CS 4.x的一个很重要缺点是不支持RWTexture,所以shader无法写入texture,只能写入buffer。(这是NV造成的。AMD的硬件很 早就可以做到写入RWTexture,但因为CS 4.x要求同时兼 ...
仅以此文献给那些自以为了解D3D11的专家 D3D11正式发布已经有两年多了。在这短短的时间里,各GPU厂商 都相继推出了支持D3D11的显卡,许多游戏引擎也迅速推出了对D3D11的支持。但在国内,D3D11的接受度几乎为零。国内很多“大”游戏公司的“技 术人员”对于D3D11完全出于一知半解的状态,却又在不懂装懂地指手画脚。 关于D3D11,有些事情你确实必须了解。 Feature Level 从KlayGE 3.11.0发布以来,几乎每个月都会听见有人问我,“为什么要去掉D3D9和D3D10插件,仅保留D3D11和OpenGL?”。(最近这个频率显著 提高,基本到了每周1-2次的程度)。在他们的观点里,D3D11就得在D3D11的硬件上跑,而现在D3D11硬件尚未普及,这么做会影响到 KlayGE ...