gpt4 book ai didi

directx-11 - 当不在 dx9 兼容模式下时,DX9 风格的特性被禁用了吗?

转载 作者:行者123 更新时间:2023-12-04 13:39:28 27 4
gpt4 key购买 nike

我目前正在为基本的高斯模糊编写一个 HLSL 着色器。着色器代码很简单,但我一直收到错误:

DX9 style intristics are disabled when not in dx9 compatibility mode. (LN#: 19)

这告诉我代码中的第 19 行是问题所在,我相信这是由于该特定行中的 tex2DSampler 造成的。

#include "Common.hlsl"

Texture2D Texture0 : register(t0);
SamplerState Sampler : register(s0);

float4 PSMain(PixelShaderInput pixel) : SV_Target {
float2 uv = pixel.TextureUV; // This is TEXCOORD0.
float4 result = 0.0f;

float offsets[21] = { ... };
float weights[21] = { ... };

// Blur horizontally.
for (int x = 0; x < 21; x++)
result += tex2D(Sampler, float2(uv.x + offsets[x], uv.y)) * weights[x];

return result;
}

有关代码的注释和我的问题,请参见下文。


注意事项

由于我的代码位于没有连接的计算机上,因此我必须将我的代码手动输入到 StackOverflow 中。因此:

  • 这里出现的任何拼写或大小写错误在代码中都不存在。
  • offsetsweights 中没有值是有意为之。
    • 这是因为每个值有 21 个值,我不想全部输入。
    • offsets 是从 -1010 的每个整数。
    • weights 的范围从 0.010.25 并回到 0.01
  • 由于前面提到的缺席,此处的行数较少。
    • 这里错误的行号是15
    • 列范围是13 - 59,封装了tex2DSampler

我的问题

  • 我是否在 tex2D 调用中为 Sampler 使用了错误的数据类型?
  • 是否在 DirectX 11 中弃用了 tex2D
  • 我应该改用什么?
  • 我在这里做错了什么,因为这是我唯一的错误。

最佳答案

经过广泛搜索后,我发现 ps_4_0 及更高版本不再支持 tex2D。好吧,4_0 将在旧模式下工作,但它在 5_0 下不起作用,这正是我正在使用的。

Shader Model : Supported

Shader Model 4 : yes (pixel shader only), but you must use the legacy compile option when compiling.
Shader Model 3 (DirectX HLSL) : yes (pixel shader only)
Shader Model 2 (DirectX HLSL) : yes (pixel shader only)
Shader Model 1 (DirectX HLSL) : yes (pixel shader only)

这已被 Texture2D 取代; documentation可用。以下是上述文档中的示例:

// Object Declarations
Texture2D g_MeshTexture;
SamplerState MeshTextureSampler
{
Filter = MIN_MAG_MIP_LINEAR;
AddressU = Wrap;
AddressV = Wrap;
};

struct VS_OUTPUT
{
float4 Position : SV_POSITION;
float4 Diffuse : COLOR0;
float2 TextureUV : TEXCOORD0;
};

VS_OUTPUT In;

// Shader body calling the intrinsic function
Output.RGBColor = g_MeshTexture.Sample(MeshTextureSampler, In.TextureUV) * In.Diffuse;

要替换我的代码中的 tex2D 调用:

result += Texture0.Sample(Sampler, float2(uv.x + offsets[x], uv.y)) * weights[x];

另请注意,本文中的代码用于高斯模糊的水平传递。

关于directx-11 - 当不在 dx9 兼容模式下时,DX9 风格的特性被禁用了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53283724/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com