利用vtf技术处理cpu大批量数据传入gpu的方法

文档序号:6627019阅读:530来源:国知局
利用vtf技术处理cpu大批量数据传入gpu的方法
【专利摘要】本发明公开了一种利用VTF技术处理CPU大批量数据传入GPU的方法,包括CPU创建纹理,并把数据写入纹理;GPU从CPU中读取上述写入数据后的纹理,并进行点采样得到纹理中写入数据。把大批量的数据保存到纹理中,然后再将纹理传给GPU,从而让大量的数据进入GPU运算,使顶点着色程序内可以对这些数据进行访问,解决了大量数据不能读取的问题。
【专利说明】利用VTF技术处理CPU大批量数据传入GPU的方法

【技术领域】
[0001] 本发明涉及计算机图像处理领域,具体地,涉及一种利用VTF技术处理CPU大批量 数据传入GPU的方法。

【背景技术】
[0002] 随着计算机技术的发展,越来越多的数据规模已经达到TB甚至PB量级,这就需要 计算机具有强大的浮点数据计算能力。目前受游戏市场、高清视频、电子产品和军事仿真模 拟需求的影响,为了实现逼真的图形图像效果,GPU支持越来越复杂的运算。面临着图形和 数据计算越来越复杂的问题,对计算机处理数据的速度提出了严峻的挑战。
[0003] 目前一张普通的纹理图片有RGB通道组成(RGB纹理),而每个RGB数值范围是 ((Γ255),用十六进制表示(OxO(TOxFF),每个通道占用一个字节,一个字节8个bit位,因 此一种颜色包含RGB占有24位,那么可以表达出2S63种颜色,计算机处理功能主要有 CPU(中央处理单元)和GPU (图形处理单元)完成,在这些处理中,CPU负责的是逻辑性较 强的事物计算,GPU则负责计算密度高的图像渲染,在GPU渲染流水线中,分为不同的阶段, 应用程序阶段、几何阶段、光栅化阶段,因为GPU的shader可编程特性,shader通常称为着 色程序,着色程序分为两类:顶点着色程序(vertex shader)和像素着色(pixel shader) 程序。在对图片进行处理时,需要将数据从CPU传入GPU中。而当大量的数据甚至更多数 据从CPU传入GPU顶点着色程序中时,会出现不能读取这些大量数据的问题。


【发明内容】

[0004] 本发明的目的在于,针对上述问题,提出一种利用VTF技术处理CPU大批量数据传 入GPU的方法,以解决大量数据不能读取的问题。
[0005] 为实现上述目的,本发明采用的技术方案是: 一种利用VTF技术处理CPU大批量数据传入GPU的方法,包括CPU创建纹理,并把数据 写入纹理的步骤; GPU从CPU中读取上述写入数据后的纹理,并进行点采样得到纹理中写入数据的步骤。
[0006] 优选的,CPU创建纹理,并把数据写入纹理具体为: 设置纹理文件类型为纹理图像; 创建动态纹理,然后往纹理写入浮点数据。
[0007] 优选的,上述动态纹理为二维纹理。
[0008] 优选的,上述点采样具体为: 为使GPU访问关联对应的纹理,计算机对应的硬件为创建的纹理设置的序号进行一一 映射的的步骤; 对GPU的采样模式设置为Clamp采样模式的步骤; 将上述排序后的纹理传入采样函数得到大批量数据的步骤。
[0009] 本发明的技术方案具有以下有益效果: 本发明的技术方案,把大批量的数据保存到纹理中,然后再将纹理传给GPU,从而让大 量的数据进入GPU运算,使顶点着色程序内可以对这些数据进行访问,解决了大量数据不 能读取的问题。
[0010] 下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。

【专利附图】

【附图说明】
[0011] 图1为本发明实施例所述的利用VTF技术处理CPU大批量数据传入GPU的方法流 程图。

【具体实施方式】
[0012] 以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实 施例仅用于说明和解释本发明,并不用于限定本发明。
[0013] 如图1所示,一种利用VTF技术处理CPU大批量数据传入GPU的方法,包括CPU创 建纹理,并把数据写入纹理的步骤; GPU从CPU中读取上述写入数据后的纹理,并进行点采样得到纹理中写入数据的步骤。
[0014] 优选的,CPU创建纹理,并把数据写入纹理具体为: 设置纹理文件类型为纹理图像; 创建动态纹理,然后往纹理写入浮点数据。动态纹理为二维纹理。
[0015] 在游戏中需要加载大量的纹理图片以供界面的需要,而纹理即图片加载到内存后 供CPU和GPU操作的贴图的对象。根据存储数据的不同,可以定义不同的纹理来存储不同 用途的数据,但是在现有的DirectX 9. 0版本中最多只能支持4张纹理存储。
[0016] 在实际应用中,分别创建四张纹理图片用于数据存储,分别为: D3DVERTEXTEXTURESAMPLER0,D3DVERTEXTEXTURESAMPLER1, D3DVERTEXTEXTURESAMPLER2,D3DVERTEXTEXTURESAMPLER3 为了使GPU中能够访问创建的纹理,需要把纹理设置为GPU可识别的纹理类型:如下: IDirect3DDevice::SetTexture(D3DVERTEXTEXTURESAMPLER0, IDirect3DTexture*)// 为D3DVERTEXTEXTURESAMPLER0设置纹理(贴图)文件类型为纹理图像 一般是创建动态纹理实现Lock纹理然后往纹理写入浮点数据然后Unlock最后把 纹理传给GPU ; Texture->Lock(); ForQnt i=0; i<w; i++) ForQnt j=0; j<h; j++) Pixel [i] [j] =pdata; ///把数据写入到二维纹理里 Texture->Unlock(); 如果还有其他的纹理,同上的设置即可,然后把需要的数据写入创建的纹理。
[0017] 优选的,上述点采样具体为: 为使GPU访问关联对应的纹理,计算机对应的硬件为创建的纹理设置的序号进行一一 映射的步骤; 对GPU的采样模式设置为Clamp采样模式的步骤; 将上述排序后的纹理传入采样函数得到大批量数据的步骤。
[0018] 利用顶点纹理获取(Vertex Texture Fetch ),简称VTF,是Shader模块的一个 特性,在GPU管线中顶点shader中检索纹理,由于GPU高速并行处理和浮点运算能力,传入 Shader只有具体的数值,数据类型为int (整数形数据),float (浮点数据),bool (布尔值) 或matrix (矩阵)等,其中最大的matrix4有16个量,此时把这这个数据传入顶点shader 是非常庞大,然后利用VTF这一特性,把这些数据保存在纹理中,而不再是像素的值,通过 这种媒介,让大量的数据进入GPU运算,使顶点shader内可以对这些数据进行访问。
[0019] 为了使上步骤中的纹理能够在GPU中能够访问关联对应的纹理,计算机对应的硬 件会为创建的纹理设置的序号进行一一映射,设置如下: D3DVERTEXTEXTURESAMPLER0 关联序号 s0 D3DVERTEXTEXTURESAMPLER1 关联序号 si D3DVERTEXTEXTURESAMPLER2 关联序号 s2 D3DVERTEXTEXTURESAMPLER3 关联序号 s3 然后对关联的纹理进行采样,采样有很多种,通常用到的有点采样,线性采样等等。所 谓采样就是对纹理坐标进行采样,传给采样函数返回像素的过程。
[0020] -般来说,纹理图像为方形,且纹理的高和宽分别为H,W,(H,W大小为2η,η为整 数),将纹理映射到一个多边形或者曲面上并变换到屏幕坐标时,纹理的单个纹理像素很少 对应于屏幕的图像上的像素,根据所用的变换和纹理映射,屏幕上单个像素可以对应于一 个纹理像素的一小部分(即放大)或一大批纹理像素(即缩小)。纹理图像的中每个像素的 坐标U,V都在[0, 1]范围,例如纹理图像为512*512大小,要获得48*48位置的像素 U,V坐 标,即:[48/512,48/512]。
[0021] 线性采样的方法:即取该像素周围的4个像素求平均值到该像素的U,V值。
[0022] 本发明技术方案采用点采样的方法对周围像素进行采样,能够得到该点像素的真 实U,V,具体的采用的Clamp采样模式。具体为: IDirect3DDevice::SetSamplerState(D3DVERTEXTEXTURESAMPLER0, D3DSAMP_ ADDRESSU, D3DTADDRESS_CLAMP);设置纹理 U 坐标为 Clamp 采样, IDirect3DDevice::SetSamplerState (D3DVERTEXTEXTURESAMPLER0, D3DSAMP_ ADDRESSV, D3DTADDRESS_CLAMP);设置纹理 V 坐标为 Clamp 采样, IDirect3DDevice::SetSamplerState(D3DVERTEXTEXTURESAMPLER0,D3DSAMP_ MINFILTER, D3DTEXF_P0INT); 其中D3DTEXF_P0INT设置为点采样,D3DSAMP_MINFILTER指定缩小滤波的方法, IDirect3DDevice::SetSamplerState(D3DVERTEXTEXTURESAMPLER0,D3DSAMP_ MAGFILTER, D3DTEXF_P0INT); 其中D3DTEXF_P0INT设置为点采样,D3DSAMP_MAGFILTER指定放大滤波的方法。
[0023] 在GPU顶点Shader处理中通过上述关联的纹理图像传入采样函数tex2Dlod(g_ texture,uv)得到大批量数据,每个数据再经过像素 shader后,然后对这些数据光栅化处 理,然后通过着色程序对最终颜色值进行计算输出到帧缓冲中并显示到屏幕上。
[0024] 综上所述,本发明技术方案解决了从CPU的大批量数据传入GPU着色程序无法读 取的问题,具有使用范围广,实现方法简单等优点。现在越来越广泛的应用到各种领域,在 游戏骨骼动画技术中,在游戏角色动画中,是通过骨骼的矩阵来驱动动画,然后骨骼数量越 多,矩阵变换相对来说就越多,这些数据是非常庞大的,而把这些数据保存到浮点纹理中, 然后再传给GPU进行处理,就可以得出角色通过矩阵变换得到的新位置,有效的解决了大 量数据不能处理的问题。
[0025] 在模拟水动画效果时,水是很多个网格构成的模型,水又属于液态物体,在不断的 发生着变化改变其形状,数据比较多,那么在CPU中分别为水顶点的位置偏移和法线创建 纹理图像,在程序中为每个顶点设定偏移量,那么N个顶点就有N个偏移数值,其法线也在 不断改变;每个顶点的像素偏移值不同就会产生水动画。在处理大量实体的过程中,每个实 体的位置、朝向不同,也同样需要大量的数据,此时把这些数据写入纹理中,然后再传入GPU 处理,完成对大量数据的访问。
[0026] 此项技术也可以用于军事仿真、卫星探测、生物科学等各个领域,此处不再赘述。
[0027] 最后应说明的是:以上所述仅为本发明的优选实施例而已,并不用于限制本发明, 尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可 以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。 凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的 保护范围之内。
【权利要求】
1. 一种利用VTF技术处理CPU大批量数据传入GPU的方法,其特征在于,包括CPU创建 纹理,并把数据写入纹理的步骤; GPU从CPU中读取上述写入数据后的纹理,并进行点采样得到纹理中写入数据的步骤。
2. 根据权利要求1所述的利用VTF技术处理CPU大批量数据传入GPU的方法,其特征 在于,CPU创建纹理,并把数据写入纹理具体为: 设置纹理文件类型为纹理图像; 创建动态纹理,然后往纹理写入浮点数据。
3. 根据权利要求2所述的利用VTF技术处理CPU大批量数据传入GPU的方法,其特征 在于,上述动态纹理为二维纹理。
4. 根据权利要求2或3所述的利用VTF技术处理CPU大批量数据传入GPU的方法,其 特征在于,上述点采样具体为: 为使GPU访问关联对应的纹理,计算机对应的硬件为创建的纹理设置的序号进行一一 映射的步骤; 对GPU的采样模式设置为Clamp采样模式的步骤; 将上述排序后的纹理传入采样函数得到大批量数据的步骤。
【文档编号】G06T15/04GK104240285SQ201410470451
【公开日】2014年12月24日 申请日期:2014年9月16日 优先权日:2014年9月16日
【发明者】张翼 申请人:无锡梵天信息技术股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1