Я недавно начал использовать Nvidia Cg
шейдеры, и все выглядит и работает нормально, если я делаю это на Nvidia GPU
(GTS250
в моем случае).
Я попытался запустить то же самое (мое собственное тестовое приложение) на 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-шейдером работает (пример 2 из Nvidia Cg SDK
):
// 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 Алекс Фарбер: Полагаю, вы можете опубликовать фиктивный ответ, чтобы я мог присудить вам награду, потому что вы помогли мне понять, что я забыл включить отладку. Спасибо.