如果我使用顶点着色器对对象执行所有操作,则常量缓冲区可以为空吗?

问题描述 投票:0回答:1

程序周期为

Update();
UpdatePipeline();

Update()中,每个对象的常量缓冲区在转换后已将此对象世界矩阵复制到GPU上传堆中。在UpdatePipeline()中,将调用已安装的着色器。因为我们使用CPU进行所有矩阵转换,所以顶点着色器仅返回位置,对不对?如果是,那么性能会提高吗?

现在,我想使用GPU进行所有转换,即通过顶点着色器。这意味着在Update()中,我应该以空常量缓冲区作为源来调用memcpy()

directx hlsl vertex-shader
1个回答
0
投票
  1. 常量缓冲区只是将数据从CPU移至GPU的缓冲区。是否使用一个,或使用多少,以及它们的用途取决于您。
  2. 恒定缓冲区最常见,最简单的用例是将转换矩阵移至GPU。该矩阵的确由CPU计算,并且顶点着色器使用该矩阵将顶点缓冲区中的位置从局部空间转换为屏幕空间。这样,CPU即可移动对象,而无需更新(通常非常大)顶点缓冲区。
  3. 是否提高性能取决于您的硬件,代码,以及-最重要的是-您将性能与之进行比较。由于我不知道您当前的代码,也不知道您打算进行的确切更改,因此我什至无法猜测它是否会增加。
  4. 而且,即使我不知道您的代码,仅以您表达问题的方式,我都会假设您绝对不希望对CPU上的任何操作使用常量缓冲区作为source
© www.soinside.com 2019 - 2024. All rights reserved.