【问题标题】:Do DirectX Compute Shaders support 2D arrays in shared memory?DirectX 计算着色器是否支持共享内存中的二维数组?
【发布时间】:2013-04-16 20:18:55
【问题描述】:

我想在 DirectX 计算着色器中使用 groupshared 内存来减少全局内存带宽并希望提高性能。我的输入数据是 Texture2D,我可以像这样使用 2D 索引来访问它:

Input[threadID.xy]

我想要一个共享内存的二维数组来缓存输入数据的一部分,所以我尝试了显而易见的方法:

groupshared float SharedInput[32, 32];

它不会编译。错误消息显示syntax error: unexpected token ','

有没有办法拥有一个二维共享内存数组?如果不是,那么处理存储在 1D 共享内存数组中的 2D 数据的好技术是什么?

【问题讨论】:

  • 你试过[][]吗?甚至 DX9c HLSL 也支持它,所以有一些想象力,计算着色器也应该这样做。
  • 我没有尝试过[][]。这将创建一个数组数组,这与二维数组不同。索引不如二维索引好,但比线性索引好。我想知道与一个线性阵列相比是否有任何性能差异?

标签: directx compute-shader directcompute


【解决方案1】:

groupshared 数组无法使用多维索引进行索引。您可以获得的最接近的是一个数组数组,其中每个维度都独立索引。

groupshared float SharedInput[32][32];

它不如多维索引好,但至少你不必手动计算线性索引。

【讨论】:

    猜你喜欢
    • 2017-05-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多