algorithm - DirectX11 和 packetoffset

标签 algorithm rendering hlsl directx-10 directx-11

有谁知道如何在 DirectX10/11 中使用 bool 类型的“packetoffset”?我不确定这应该如何对齐

cbuffer SomeBuffer : register( b1 )
{
    float3 SomeFloat3: packoffset(c0);
    float SomeFloat: packoffset(c0.w);

    float3 SomeFloat32: packoffset(c1);
    float2 SomeFloat2; ??

    bool SomeBool1; ??
    bool SomeBool2; ??
    bool SomeBool3; ??
}

最佳答案

这实际上是两个问题:

  1. 如果您使用导致变量超出单个寄存器边界的 packoffset 会怎样?
  2. 如何将 packoffsetbool 值一起使用?

第一个问题的答案是:HLSL 编译器将对 packoffset 值进行一些验证。所以下面的代码不会编译,因为Var2 不能放入c0,编译器不会自动将它“包装”成c1:

cbuffer SomeBuffer : register( b1 )
{
    float3 Var1 : packoffset(c0);
    float2 Var2 : packoffset(c0.w); // will not compile
}

第二个问题的答案是:bool 值与 float 占用相同的空间,因此您可以像这样打包它们:

cbuffer SomeBuffer : register( b1 )
{
    bool SomeBool1 : packoffset(c0);
    bool SomeBool2 : packoffset(c0.y);
    float SomeFloat1 : packoffset(c0.z);
    bool SomeBool3 : packoffset(c0.w);
}

关于algorithm - DirectX11 和 packetoffset,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4710998/

相关文章:

java - 如何计算嵌套for循环的时间复杂度?

animation - 限制帧速率时对象移动不连贯

gpu - 在计算着色器中的 N 个线程后退出

c++ - 硬编码 HLSL 着色器

algorithm - 如何从算法中看到碰撞?

arrays - 整数数组的校验和?

python - 使用 WebKit(或 Gecko)查找呈现的 HTML 元素位置

opengl - Shader的功能参数表现

algorithm - 最低共同祖先

android - 位图和屏幕上的位深度问题(白色不是白色)