1

我最近开始使用Nvidia Cg着色器,如果我在Nvidia GPUGTS250在我的情况下)上这样做,一切看起来和工作都很好。

我尝试启动相同的(我自己的测试应用程序),ATI HD4650但没有看到任何输出。在那之后,我开始尝试测试示例(提供Nvidia Cg 3.0)和 6/7 工作,但第一个(似乎是最简单的)没有。

这是着色器代码:

// This is C2E1v_green from "The Cg Tutorial" (Addison-Wesley, ISBN
// 0321194969) by Randima Fernando and Mark J. Kilgard.  See page 38.

struct C2E1v_Output {
  float4 position : POSITION;
  float3 color    : COLOR;
};

C2E1v_Output C2E1v_green(float2 position : POSITION)
{ 
  C2E1v_Output OUT;

  OUT.position = float4(position,0,1);
  OUT.color = float3(0,1,0);

  return OUT; 
}

我不知道为什么这个简单的着色器不起作用,而例如与以下 passthru-shader配对Nvidia Cg SDK的相同着色器确实起作用(来自 的示例 2 ):

// This is C2E2f_passthru from "The Cg Tutorial" (Addison-Wesley, ISBN
// 0321194969) by Randima Fernando and Mark J. Kilgard.  See page 53.

struct C2E2f_Output {
  float4 color : COLOR;
};

C2E2f_Output C2E2f_passthru(float4 color : COLOR)
{
  C2E2f_Output OUT;
  OUT.color = color;
  return OUT;
}

有人遇到过同样的麻烦吗?有任何想法吗?

谢谢你。


在此处更新:打开最大调试输出使问题变得明显:

vs_3_0 shader executed in hardware vertex processing mode can only be paired
with at least a ps_3_0 shader

该包中的第一个示例是唯一一个只有顶点着色器的示例,没有任何(甚至是简单的直通)像素着色器。我不知道为什么 Nvidia Cg 运行时会在这种情况下生成不兼容的着色器,但它显然只在有点旧的 GPU ( ATI HD4650) 上失败了。

无论如何,我很愚蠢,可以在不打开调试输出的情况下工作。

2 Alex Farber:我想你可以发布一个虚拟答案,这样我就可以奖励你,因为你帮助我意识到我忘了打开调试。谢谢你。

4

1 回答 1

1

在 DirectX 控制面板中设置 Debug DirectX 版本并查看跟踪输出以获取此故障的原因。

顺便说一句,我的像素着色器也遇到了同样的情况,并在 GameDev.net DirectX 论坛上获得了帮助。我记得最后我使用 SDK 转换工具将着色器转换为最低版本,并且它在没有像素着色器的情况下工作。根据 GPU 提供商的说法,此行为符合 DirectX 规范。

于 2010-09-20T09:29:06.270 回答