Swift 在金属着色语言中何时使用设备以及何时使用常量地址空间限定符?
我知道在索引缓冲区时使用设备地址空间,而在函数的多次调用将访问缓冲区的同一部分时使用常量地址空间。但我还是不太清楚。谢谢大家! 基于此 设备地址空间 设备地址空间名称指的是缓冲区内存对象 从设备内存池中分配的可读和 可写的。缓冲区内存对象可以声明为指针或 对标量、向量或用户定义结构的引用。在应用程序中, Metal API调用为缓冲区对象分配内存,该对象 确定缓冲区内存的实际大小。例如: 因为您总是从设备地址分配纹理对象 空间中,纹理类型不需要“设备地址”属性 恒定地址空间 常量地址空间名称指的是缓冲区内存对象 从设备内存池分配,但为只读。变量 程序作用域必须在常量地址空间中声明,并且 在声明语句期间初始化。初始值设定项 表达式必须是核心常量表达式。程序中的变量 作用域与程序具有相同的生存期,并且它们的值保持不变 在调用中的任何计算或图形函数之间 节目Swift 在金属着色语言中何时使用设备以及何时使用常量地址空间限定符?,swift,3d,metal,Swift,3d,Metal,我知道在索引缓冲区时使用设备地址空间,而在函数的多次调用将访问缓冲区的同一部分时使用常量地址空间。但我还是不太清楚。谢谢大家! 基于此 设备地址空间 设备地址空间名称指的是缓冲区内存对象 从设备内存池中分配的可读和 可写的。缓冲区内存对象可以声明为指针或 对标量、向量或用户定义结构的引用。在应用程序中, Metal API调用为缓冲区对象分配内存,该对象 确定缓冲区内存的实际大小。例如: 因为您总是从设备地址分配纹理对象 空间中,纹理类型不需要“设备地址”属性 恒定地址空间 常量地址空间名称指的
constant float samples[]={1.0f、2.0f、3.0f、4.0f}代码>
允许使用指向常量地址空间的指针或引用作为
函数的参数。写入常量中声明的变量
地址空间是一个编译时错误。声明这样一个变量
没有初始化也是编译时错误。决定
地址空间(设备或常量)传递给
图形或内核函数使用时,请查看缓冲区是如何访问的
在图形或内核函数中。常量地址空间为
针对执行图形或内核的多个实例进行了优化
函数访问缓冲区中的相同位置。一些例子
此访问模式正在访问的灯光或材质属性
照明/着色、用于蒙皮的矩阵阵列的矩阵、过滤器
从用于卷积的过滤器权重数组访问权重。如果
图形或内核函数的多个执行实例是
使用索引(如顶点ID、片段)访问缓冲区
坐标或网格中的线程位置,缓冲区必须
在设备地址空间中分配
非常感谢你,这是一个惊人的解释!
// An array of a float vector with four components.
device float4 *color;
struct Foo {
float a[3];
int b[2];
}
// An array of Foo elements.
device Foo *my_info;