目录
一、前言:
一直在做骨骼动画,其中 Skinning 的部分使用 D3D12 的 Stream Output,经过一段“苦难”的探索终于成功了,其中遇到了一些坑,这些坑看似很小很不起眼,但是各个致命,没搞明白就无法运行或出错,在此和大家分享一下。
注:以下 Stream Output 简称为 SO。
二、坑1: BufferFilledSize
关于什么是 BufferFilledSize 请具体参看 MSDN 上相关的文档说明。简单的描述一下就是这是用来告诉 GPU 当前 SO 到哪里。
1.BufferFilledSize 的创建
(1) BufferFilledSize 的大小要求是 8 个字节(unsigned long long) 。
(2) 它可以创建在任何 Heap 是 Default 的 Buffer 中,Upload/Readback Heap 是不可以的。也就是说它既可以创建在 Output 的 Buffer 中也可以专门为它单开一个 Buffer。
(3) 一个 Mesh 中需要经过 SO 操作的每一个流都需要一个 BufferFilledSize 。比如说如果有 Position/Normal/Binormal/Tanget 这 4 个流需要 SO ,那么就需要准备 4