首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >vulkan:主CommandBuffer中对vkCmdBindPipeline的多个调用

vulkan:主CommandBuffer中对vkCmdBindPipeline的多个调用
EN

Stack Overflow用户
提问于 2021-11-12 11:46:55
回答 1查看 94关注 0票数 0

我正在练习vulkan API,昨天我几乎浪费了一整天的时间来实现二级缓冲区,以便在不同的对象上使用不同的片段着色器。大问题是在调用vkCmdDrawIndexed()时出现错误“分段错误”。就目前而言,这对我来说是一个马特黑盒,我没有找到一种方法来调查问题的根源。尽管vulkan API有用于调试的验证层,但如果没有这些验证层,事情就会变得很复杂。我怀疑这个错误存在于创建第二个CommandBuffers的代码中。

由于我不知道而忽略了这些问题,我意外地发现代码在只有主命令缓冲区和多次调用vkCmdBindPipeline()的情况下是一样的:

代码语言:javascript
运行
复制
vkBeginCommandBuffer(primaryCommandBuffer...);
vkCmdBeginRenderPass(...);

vkCmdBindPipeline(...pipeline_things_a);
vkCmdBindDescriptorSets(...);
vkCmdBindVertexBuffers(...);
vkCmdBindIndexBuffer(...);
vkCmdSetViewport(...);
vkCmdSetScissor(...);
draw_things_a(...) {... vkCmdDrawIndexed(...) ...}

vkCmdBindPipeline(...pipeline_things_b);
vkCmdBindDescriptorSets(...);
vkCmdBindVertexBuffers(...);
vkCmdBindIndexBuffer(...);
vkCmdSetViewport(...);
vkCmdSetScissor(...);
draw_things_b(...) {... vkCmdDrawIndexed(...) ...}

vkCmdEndRenderPass(primaryCommandBuffer);
vkEndCommandBuffer(primaryCommandBuffer);

我在常规的学习路径之外,所以我的问题在大多数情况下可能是一个明显的错误,但我会问:

在主命令缓冲区中多次调用vkCmdBindPipeline()是错误的吗?

EN

回答 1

Stack Overflow用户

发布于 2021-11-12 17:46:59

不,这不是一个错误。你可以任意调用,比如在一个命令缓冲区中绑定管道。通常,您可以在单个命令缓冲区中任意调用以vkCmd开头的所有命令。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69942444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档