看着vulkan.hi看到这个:
#if defined(__LP64__) || defined(_WIN64) || defined(__x86_64__) || .....
#define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef struct object##_T *object;
#else
#define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef uint64_t object;
#endif
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么64位?对我来说,总是使用ifdef的第一个案例似乎更合理
我一直在研究LunarG样本中的drawubpasses样本(文件:API-Samples/drawnubpasses/drawnubpasses.cpp).
在此示例中,调用第一个vkCmdDraw()时的活动子传递没有颜色附件,只有深度/模板附件.使用的片段着色器确实有一个输出变量.
阅读规范并没有帮助我理解这种用法是否"安全",或者驱动程序如何处理它.
我对规范中使用的关于VkDescriptorSetLayoutBinding结构描述的描述符绑定的语言有点困惑。该绑定元素
是此条目的绑定号,对应着色器阶段中相同绑定号的资源。
如 14.5.3 所述
使用s的DescriptorSet修饰和b的Binding修饰标识的变量表示此变量与在pSetLayouts [ s ] 中指定的具有等于b的绑定相关联
VkDescriptorSetLayoutBindingVkPipelineLayoutCreateInfo
因此,如果我正确地得到了这一点,那么描述的描述符绑定VkDescriptorSetLayoutBinding必须为该集中的每个活动资源变量都有一个条目。每个描述符绑定引用哪个资源变量由绑定变量和每个变量的绑定修饰决定。
到现在为止还挺好。令人困惑的部分是调用vkUpdateDescriptorSets. 结构VkWriteDescriptorSet具有元素dstBindng,其中
是该集合中的描述符绑定。
我很困惑dstBindng的值是否必须与在变量资源中用作装饰的绑定号相同,还是应该用作VkDescriptorSetLayoutBinding数组内的索引。