如何解决Vulkan 读取存储缓冲区返回零
在我的计算着色器中,我有一段非常简单的代码
#Syntax : numpy.random.choice(a,size=None,replace=True,p=None)
import numpy as np
array = np.array([['Toyota',8],['Merc',['BMW',['Porshe',['RR',8]])
# print("Printing 2D Array")
# print(array)
print("Choose 2 sample rows from 2D array")
randomRows = np.random.choice(2,size=2,replace=False)
for i in randomRows:
print(array[i,:])
但我得到的日志相当意外
Choose 2 sample rows from 2D array
['Toyota' '8']
['Merc' '8']
当我分配缓冲区时,我将它的大小指定为
layout(set = 0,binding = 3) buffer Velocity{
vec3 velocities[];
};
void main(){
uint gID = gl_GlobalInvocationID.x;
velocities[gID]=vec3(1,2,3);
vec3 velocity = velocities[gID];
debugPrintfEXT("%d (%v3f)",gID,velocity);
}
所以我确定该缓冲区中应该有足够的空间。 我还仔细检查了绑定号码是否正确。 这个缓冲区只被这个着色器使用 没有其他可能导致数据竞争的线程/着色器。 我启用了验证层,也没有发现任何问题。
这种奇怪行为的原因是什么?以前有人遇到过这样的问题吗?
编辑:
我尝试分配大于必要的缓冲区,这似乎有所帮助。我还是不明白为什么。 0 (1.000000,2.000000,3.000000)
1 (0.000000,0.000000,0.000000)
返回 buffer_create_info.size = sizeof(glm::vec3)*capacity; //here capacity==2
。当我设置 sizeof(glm::vec3)
时,它给了我 12
字节的缓冲区。它也应该处理 capacity==3
字节,但出于某种原因从这样的缓冲区读取返回零。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。