代码之家  ›  专栏  ›  技术社区  ›  Maik Klein

SPIR-V中的动态数组与std430的对齐规则是什么?

  •  1
  • Maik Klein  · 技术社区  · 6 年前

    说明书上说

    [140]数组的基对齐等于其元素类型的基对齐,四舍五入为16的倍数。 ….[430]除了不需要四舍五入到16的倍数的阵列和结构基座对齐。

    我假设静态数组的大小很小 size_of(elem_type) * length 但是动态数组呢?

    逻辑模式中没有指针,这是否意味着动态数组的大小为0?

    我不知道应该将哪个偏移应用于以下结构

    struct Data {
        float i1;
        float[] arr;
        float i2;
    }
    

    或采用SPIR-V符号

    %Data = OpTypeStruct %float %_runtimearr_float %float
    

    可以这样做吗,或者在这里应用相同的glsl规则,只允许在缓冲区块中有一个动态数组,而它必须是最后一个?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Nicol Bolas    6 年前

    Vulkan在附录A中定义了SPIR-V的执行环境;因此,它可以对超出SPIR-V规范的着色器中允许的内容施加限制。在附录中,它说:

    OpTypeRuntimeArray 只能用于 OpTypeStruct 那是在 StorageBuffer 存储类装饰为 Block 或者是在 Uniform 存储类装饰为 BufferBlock .