是否有任何 DirectX 11 (HLSL 5.0) 等效于 DirectX 9 纹理 "string function" 语法?

Is there any DirectX 11 (HLSL 5.0) equivalent to the DirectX 9 texture "string function" syntax?

我目前正在使用 GPU Gems 2 一书中的源代码,并且我正在尝试将 Improved Perlin Noise implementation (Chapter 26) 转换为与 DirectX 11 一起使用。虽然相对轻松,但他们使用的优化有由于他们使用纹理来帮助查找,所以有点烦人。原始代码使用现在看似已失效的方法来声明我不知道如何转换为现代 DirectX 的纹理。

我所指的纹理声明类型的示例是: (来自 inoise.fxh 文件)

texture permTexture
<
    string texturetype = "2D";
    string format = "l8";
    string function = "GeneratePermTexture";
    int width = 256, height = 1;
>;

纹理类型、格式、宽度和高度我了解如何在着色器外部进行配置,但 string function = "GeneratePermTexture" 部分让我很困惑。

它引用的函数:(在同一个文件中)

float4 GeneratePermTexture(float p : POSITION) : COLOR
{
    return permutation[p*256] / 255.0;
}

文件的这一部分上方有一条评论(其中包含更多用于各自纹理的函数)说 // Functions to generate textures using CPU runtime

有什么简单的方法可以用 Dx11 做到这一点吗?我目前的一系列调查建议我应该使用 CreateTexture 函数的 D3D11_SUBRESOURCE_DATA *pInitialData 部分。

纹理声明中<>之间的东西称为annotations. Although the Effect system in D3DX9 has several "standard annotations", 'function' doesn't appear to be one of them. The standard annotations were mainly used by external tools to aid in authoring shaders, for example in RenderMonkey

这些值在 DirectX 的上下文中没有提供实际的额外功能,但可能用作 meta-data,C++ 代码将使用它来生成纹理。可以使用 GetAnnotation, or GetAnnotationByName 函数查询注释值(在 C++ 中)。如果您将这些移植到 DirectX 11,您可以简单地将这些值硬编码到您的 C++ 代码中,或者从数据文件中加载它们。