目录
一、前言:
一直在做骨骼动画,其中 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 个 BufferFilledSize ,一共需要 8
Direct3D 12 Stream Output 使用的坑与解决

本文详细探讨了Direct3D 12中Stream Output(SO)的使用,特别关注了BufferFilledSize和T-Buffer的问题。在BufferFilledSize部分,介绍了其创建、使用和对GPU指示数据位置的重要性。在T-Buffer部分,分析了导致模型消失的原因,指出NumElements参数理解错误是关键。通过深入研究和调试,揭示了解决这些问题的关键所在。
最低0.47元/天 解锁文章
2130

被折叠的 条评论
为什么被折叠?



