上周末把GPU Gems 2里的GPU FFT在KlayGE里实现了一下,经过优化和调整,昨晚已经进入KlayGE的开发版本中。完整的FFT Lens Effects也会很快集成进去。
这里用到的是那篇文章中提到的方法1,因为经过测试,方法2在现代GPU上速度不如方法1。我做的改进是把原来的3张查找表合并成1张,并都用16F而不是32F的格式保存输入输出数据。在GTX580上,512x512的数据量,PS版本的FFT花费0.94ms左右,能达到CPU FFTW的75倍速度。但即便如此,对于lens effect那样的应用来说还是有点慢。所以接下去考虑用Compute Shader来实现FFT,pass数会减少到1/3。PS每次处理2个数,512x512需要log(512) + log(512) = 18个pass;CS每次可以处理8个数,所以只要6个pass ...
2年前,D3D11显卡刚出来没多久的时候,我曾经做过一个《NV GTX480对ATI HD5870:另一个视角》,用DX SDK的D3D11例子来对当时巅峰的显卡进行各个单项的性能评测。时过境迁,现在NV GTX680已经上市,硬指标对比如下表所示。
GTX 680
GTX 580
制程(nm)
28
40
晶体管数量(Million)
3540
3000
Die大小(mm^2)
294
520
显存(MB)
2048
1536
SM数量
8
16
核心配比
1536:128:32
512:64:48
核心频率(MHz)
1006-1058
772
shader频率(MHz)
N/A
1544
显存频率(MHz)
6008
4008
像素填充率(GP/s)
32.2
37.06
纹理填充率(GT/s)
128.8
49.41
...
NVIDIA新发布了R285.62的WHQL驱动,从古老的GeForce 6到最新的500系列桌面和笔记本GPU,以及ION GPU都支持。这款驱动有针对Battlefield 3、Rage和Batman: Arkham City优化。
另外,R285.62支持OpenGL 4.2和OpenCL 1.1。3D Vision控制器的驱动也包含在里面了。
下载链接如下:
桌面显卡的R285.62 Win7 / Vista版
R285.62 Vista / Win7 64-bit
R285.62 Vista / Win7 32-bit
笔记本显卡的R285.62 Win7 / Vista版
Verde (notebook) R285.62 Vista / Win7 64-bit
Verde (notebook) R285.62 Vista / Win7 32-bit
桌面显卡的R285.58 WinXP版
R285.58 XP 64-bit
R285.58 XP 32-bit
上文介绍了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要求同时兼 ...
OpenGL 4.2发布当天,NVIDIA就发布了支持OpenGL 4.2的驱动。现在AMD也发布了支持4.2的新驱动Catalyst 11.8 Preview。
Windows版下载
Linux版下载
详细信息请看这里。
仅以此文献给那些自以为了解D3D11的专家
D3D11正式发布已经有两年多了。在这短短的时间里,各GPU厂商 都相继推出了支持D3D11的显卡,许多游戏引擎也迅速推出了对D3D11的支持。但在国内,D3D11的接受度几乎为零。国内很多“大”游戏公司的“技 术人员”对于D3D11完全出于一知半解的状态,却又在不懂装懂地指手画脚。
关于D3D11,有些事情你确实必须了解。
Feature Level
从KlayGE 3.11.0发布以来,几乎每个月都会听见有人问我,“为什么要去掉D3D9和D3D10插件,仅保留D3D11和OpenGL?”。(最近这个频率显著 提高,基本到了每周1-2次的程度)。在他们的观点里,D3D11就得在D3D11的硬件上跑,而现在D3D11硬件尚未普及,这么做会影响到 KlayGE ...
上周末实现了打算在KlayGE 4.0中使用的render to texture array功能。于是自然而然想到在ShadowCubeMap这个例子中使用,用来在1个pass内直接生成cubemap。结果,不比不知道,一比吓一跳。在不同GPU上FPS如下:
NV 9800GT
NV 480GTX
AMD 5870
6 pass Cubemap
158.63
312.82
241.10
Dual Paraboloid
5.77
375.32
211.91
1 pass Cubemap
66.08
288.77
228.44
1 pass Cubemap with instance
105.37
281.34
224.10
1 pass Cubemap with instance GS
NA
287.80
211.01
9800GT所在机器的CPU比后两套系统差得多,没法横向比较,只能纵向比较。后两套系统只有GPU不同,可以横向和纵向比较 ...
即将召开的High-Performance Graphics 2011上有篇文章叫作High-Performance Software Rasterization on GPUs,作者是NVIDIA Research的Samuli Laine和Tero Karras(没错,Efficient Sparse Voxel Octrees也是他们)。他们在GPU上用CUDA构造出了一个软件光栅化组件,光栅化算法类似于Larrabee(以及开源软件渲染器SALVIA):先把primitive分到多个bin中,然后subdivide成像素级别的大小。不过它把subd阶段分为Coarse和Fine两个阶段,用不同的线程粒度完成。Larrabee里面也有这么分的,不过是连着做完,不是两个独立的阶段。
对光栅化算法感兴趣的同学不妨看看此文。
作者主页
PDF下载
Direct3D 11 class hardware through the Direct3D 11 API supports two new texture compression formats: BC6H and BC7. These new Block Compressed formats provide excellent compression for High-Dynamic Range (HDR) images and higher-fidelity traditional content. The D3DX11 library includes a software implementation of the encoder, but the new BC formats are extremely asymmetric meaning the encoding algorithm has a very large search space to determine the optimal compression for each 4x4 block. This makes a great candidate for a GPGPU DirectCompute implementation of the compression algorithm. The ...