2016-04-09 51 views
0

Visual Studio 2015でDirectXシェーダとC++コードを処理していますので、コードを1つだけ作成したいので、マクロを使用して演奏を始めました。コード。Visual StudioのHLSLプリプロセッサ2015

Visual StudioのHLSLプリプロセッサは、C++プリプロセッサとは少し異なります。それは可変的なマクロをサポートしていません。一方、基本的な作業は同じです(documentation参照)。 すべての用語SimpleVertexDefinitions、STATIC_TRAITS_DECLARATION、CONTEXT_MEMORY、PARSER_MEMORY)はマクロある

STATIC_TRAITS_DECLARATION SimpleVertexDefinition(PARSER_MEMORY, CONTEXT_MEMORY) 

は、すべてが正常に動作します:

私の問題は、私は次のコードを使用する場合ということです。しかし、私はマクロ

#define DECLARE_VERTEX_SHADER_INPUT(type) STATIC_TRAITS_DECLARATION type##Definition(PARSER_MEMORY, CONTEXT_MEMORY) 

DECLARE_VERTEX_SHADER_INPUT(SimpleVertex) 

に従うことによってそれを定義しようとしたとき、私は

  • C++プリプロセッサマクロ連結が正常に動作します
  • それをコンパイルするためには問題ないところで

    Error X1516 not enough actual parameters for macro 'SimpleVertexDefinition' 
    Error X3000 unrecognized identifier 'SimpleVertexDefinition'  
    

    を得るに他のhlslコードで。

誰かが私は私のマクロはdocumentationに従って書かれていることを信じているので、間違っているものを私に説明できるならば、私は喜んでいるだろう...

答えて

0

問題はfxc.exeにプリプロセッサの間違った実装である可能性があり(エフェクトコンパイラツール)。

解決策は、まあそれはC++と

  • プリプロセスファイルに手動でのVisual Studioを設定するコンパイラcl.exe file /P [other option] /FipreprocessedFile
  • 、その後効果コンパイラツールfxc.exe preprocessedFile [options]

https://social.msdn.microsoft.com/Forums/en-US/b6ccd269-8ef4-4b80-b575-da58894a71ee/hlsl-preprocessor-in-visual-studio-2015?forum=vclanguage

+0

誰かがそれを確認できますか? – user4663214

0

でそれをコンパイルすることですMicrosoftのHLSL実装のバグではありません。実際、HLSLプロセッサは動作が異なります(これは残念です)。詳細については、下のリンクを参照してください。あなたはHLSLコンパイラに渡す前に前処理する(私はFCPPを使用し、それがOKを動作します)コードを前処理ライブラリを使用することができます回避策として

https://msdn.microsoft.com/en-us/library/windows/desktop/dd607345%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396

+0

これはバグです(MSDNで確認されています)。そして、このプリプロセッサは標準のC++プリプロセッサとは違って動作します。記述された例はHLSLプリプロセッサの仕様に合致していないので、失敗してもバグと見なすことができます... – user4663214

関連する問題