12 2011 档案
DX11_基于GPU_ComputeShader的3D精确拾取
摘要:这里使用ComputeShader做拾取,主要为了熟悉下ComputeShader,为自己后面一个项目做准备。拾取基本原理前面博客也讲了,都差不多,将射线从屏幕坐标系转换到物体局部坐标系,然后再判断三角形是否被射线射中。主要是代码的实施上不一样,这里我尝试并行地通过ComputeShader,由线程i来负责判断三角形i是否被选中。 HLSL的代码://=========================================//computeshaderbasetechnology//======================================#defineBLOCK. 阅读全文
posted @ 2011-12-21 18:28 Bester 阅读(488) 评论(0) 推荐(0)
串行的BitonicSort双调排序
摘要:最近由于需要在GPU上做排序,因为GPU的并行性,所以需要一个并行的排序算法。而BitonicSort双调排序是一个非常适合并行化的排序算法,其在《算法导论》的排序网络一章对其基本原理做了描述与证明。有兴趣大家可以看看。 作为个人的一个学习总结,这里只是对其性质做些简单介绍,以及它算法基本思想和几个重要的步骤。如果需要了解BitonicSort更加详细的理论证明,可以参考《算法导论》。 首先BitonicSort的算法复杂度为O(n(logn)^2),看到这里大家会问比快排O(nlogn)要慢啊,干嘛要用它?但是它的n在并行机(比如GPU)上可以并行化掉n,那么复杂度就变为O( (logn.. 阅读全文
posted @ 2011-12-20 22:04 Bester 阅读(1795) 评论(0) 推荐(0)
Directx11_使用Effect框架包装ComputeShader
摘要:很多人使用Effect框架基本针对渲染功能,典型如:technique11meshTech{passp0{SetVertexShader(CompileShader(vs_4_0,VS_DRAW()));SetGeometryShader(NULL);SetPixelShader(CompileShader(ps_4_0,PS_DRAW()));SetRasterizerState(rsSolid);SetDepthStencilState(EnableDepthWrite,0);}} 在Directx里面通过Apply,DrawIndexed等来调用。voidMesh::DrawMesh(. 阅读全文
posted @ 2011-12-12 15:19 Bester 阅读(285) 评论(0) 推荐(0)
基于GPU并行的矩阵转置优化
摘要:最近在做基于GPU的并行BitonicSort排序,中间用到了矩阵转置。觉得矩阵转置虽然简单,但一个好的矩阵转置优化却很好表达了GPU程序优化的几个基本要素。所以记录下。这里GPU接口还是用Directx11的DirectCompute,然后为了便于着重算法重点,这里我们只讨论HLSL的代码。 最简单的GPU矩阵转置大家应该可以想到了,就是把X和Y做一个对换。//MatrixTransposeCodeStructuredBufferinData;RWStructuredBufferoutData;[numthreads(TRANSPOSE_BLOCK_SIZE,TRANSPOSE_BLOCK. 阅读全文
posted @ 2011-12-12 10:57 Bester 阅读(563) 评论(0) 推荐(0)