68491


fxc.exeコンパイラです。dxLibに使うバイナリシェーダーをコンパイルしたいのですがエラーの解決法がわからず困っています。このエラーはどうすればいいのでしょうか？ピクセルシェーダーと頂点シェーダー二つに分けています。

(43,14-34): error X4541: vertex shader must minimally write all four
components of POSITION  
日本語google翻訳 頂点シェーダーは、POSITIONの4つのコンポーネントすべてを最小限に書き込む必要があります。

このエラーはどうすればいいのでしょうか？ピクセルシェーダーコードです。下の提示コード

[code]

    //頂点シェーダー.hlsl
    struct VS_Input
    {
        // 座標( VERTEX3DSHADER構造体の pos の値 )
        float3 Position        : POSITION0 ;
    
        // 補助座標( VERTEX3DSHADER構造体の spos の値 )
        float4 SubPosition     : POSITION1 ;
    
        // 法線( VERTEX3DSHADER構造体の norm の値 )
        float3 Normal          : NORMAL0 ;
    
        // 接線( VERTEX3DSHADER構造体の tan の値 )
        float3 Tangent         : TANGENT ;
    
        // 従法線( VERTEX3DSHADER構造体の binorm の値 )
        float3 Binormal        : BINORMAL0 ;
    
        // ディフューズカラー( VERTEX3DSHADER構造体の dif の値 )
        float4 DiffuseColor    : COLOR0 ;
    
        // スペキュラカラー( VERTEX3DSHADER構造体の spc の値 )
        float4 SpecularColor   : COLOR1 ;
    
        // テクスチャ座標０( VERTEX3DSHADER構造体の u, v の値 )
        float2 TextureCoord0   : TEXCOORD0 ;
    
        // テクスチャ座標１( VERTEX3DSHADER構造体の su, sv の値 )
        float2 TextureCoord1   : TEXCOORD1 ;
    } ;
    
    
    // 頂点シェーダーの出力
    struct VS_OUTPUT
    {
        float4 dif         : COLOR0 ;       // ディフューズカラー
        float2 texCoords0  : TEXCOORD0 ;    // テクスチャ座標
        float4 pos         : SV_POSITION ;  // 座標( プロジェクション空間 )
    } ;
    
    // 基本パラメータ
    struct DX_D3D11_VS_CONST_BUFFER_BASE
    {
        float4      AntiViewportMatrix[ 4 ] ;               // アンチビューポート行列
        float4      ProjectionMatrix[ 4 ] ;                 // ビュー　→　プロジェクション行列
        float4      ViewMatrix[ 3 ] ;                       // ワールド　→　ビュー行列
        float4      LocalWorldMatrix[ 3 ] ;                 // ローカル　→　ワールド行列
    
        float4      ToonOutLineSize ;                       // トゥーンの輪郭線の大きさ
        float       DiffuseSource ;                         // ディフューズカラー( 0.0f:マテリアル  1.0f:頂点 )
        float       SpecularSource ;                        // スペキュラカラー(   0.0f:マテリアル  1.0f:頂点 )
        float       MulSpecularColor ;                      // スペキュラカラー値に乗算する値( スペキュラ無効処理で使用 )
        float       Padding ;
    } ;
    
    // その他の行列
    struct DX_D3D11_VS_CONST_BUFFER_OTHERMATRIX
    {
        float4      ShadowMapLightViewProjectionMatrix[ 3 ][ 4 ] ;          // シャドウマップ用のライトビュー行列とライト射影行列を乗算したもの
        float4      TextureMatrix[ 3 ][ 2 ] ;                               // テクスチャ座標操作用行列
    } ;
    
    // 基本パラメータ
    cbuffer cbD3D11_CONST_BUFFER_VS_BASE            : register( b1 )
    {
        DX_D3D11_VS_CONST_BUFFER_BASE               g_Base ;
    } ;
    
    // その他の行列
    cbuffer cbD3D11_CONST_BUFFER_VS_OTHERMATRIX     : register( b2 )
    {
        DX_D3D11_VS_CONST_BUFFER_OTHERMATRIX        g_OtherMatrix ;
    } ;
    
    
    
    // main関数
    VS_OUTPUT main( VS_INPUT VSInput )
    {
        VS_OUTPUT VSOutput ;
        float4 lLocalPosition ;
        float4 lWorldPosition ;
        float4 lViewPosition ;
    
    
        // 頂点座標変換 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++( 開始 )
    
        // ローカル座標のセット
        lLocalPosition.xyz = VSInput.pos ;
        lLocalPosition.w = 1.0f ;
    
        // 座標計算( ローカル→ビュー→プロジェクション )
        lWorldPosition.x = dot( lLocalPosition, g_Base.LocalWorldMatrix[ 0 ] ) ;
        lWorldPosition.y = dot( lLocalPosition, g_Base.LocalWorldMatrix[ 1 ] ) ;
        lWorldPosition.z = dot( lLocalPosition, g_Base.LocalWorldMatrix[ 2 ] ) ;
        lWorldPosition.w = 1.0f ;
    
        lViewPosition.x = dot( lWorldPosition, g_Base.ViewMatrix[ 0 ] ) ;
        lViewPosition.y = dot( lWorldPosition, g_Base.ViewMatrix[ 1 ] ) ;
        lViewPosition.z = dot( lWorldPosition, g_Base.ViewMatrix[ 2 ] ) ;
        lViewPosition.w = 1.0f ;
    
        VSOutput.pos.x = dot( lViewPosition, g_Base.ProjectionMatrix[ 0 ] ) ;
        VSOutput.pos.y = dot( lViewPosition, g_Base.ProjectionMatrix[ 1 ] ) ;
        VSOutput.pos.z = dot( lViewPosition, g_Base.ProjectionMatrix[ 2 ] ) ;
        VSOutput.pos.w = dot( lViewPosition, g_Base.ProjectionMatrix[ 3 ] ) ;
    
        // 頂点座標変換 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++( 終了 )
    
    
    
        // 出力パラメータセット ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++( 開始 )
    
        VSOutput.texCoords0 = VSInput.texCoords0 ;
        VSOutput.dif = VSInput.DiffuseColor ;
    
        // 出力パラメータセット ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++( 終了 )
    
    
        // 出力パラメータを返す
        return VSOutput ;
    }
    
    
    
    
    
    
       // ピクセルシェーダーの入力 .hlsl
          struct VS_INPUT
         {
        // 座標( VERTEX3DSHADER構造体の pos の値 )
        float3 Position        : POSITION0 ;
    
        // 補助座標( VERTEX3DSHADER構造体の spos の値 )
        float4 SubPosition     : POSITION1 ;
    
        // 法線( VERTEX3DSHADER構造体の norm の値 )
        float3 Normal          : NORMAL0 ;
    
        // 接線( VERTEX3DSHADER構造体の tan の値 )
        float3 Tangent         : TANGENT ;
    
        // 従法線( VERTEX3DSHADER構造体の binorm の値 )
        float3 Binormal        : BINORMAL0 ;
    
        // ディフューズカラー( VERTEX3DSHADER構造体の dif の値 )
        float4 DiffuseColor    : COLOR0 ;
    
        // スペキュラカラー( VERTEX3DSHADER構造体の spc の値 )
        float4 SpecularColor   : COLOR1 ;
    
        // テクスチャ座標０( VERTEX3DSHADER構造体の u, v の値 )
        float2 TextureCoord0   : TEXCOORD0 ;
    
        // テクスチャ座標１( VERTEX3DSHADER構造体の su, sv の値 )
        float2 TextureCoord1   : TEXCOORD1 ;
    } ;
    
    
    
    // ピクセルシェーダーの出力
    struct PS_OUTPUT
    {
        float4 color0           : COLOR0;   // 色
        float3 pos : POSITION;
    } ;
    
    
    // main関数
    PS_OUTPUT main( VS_INPUT PSInput ) 
    {
        PS_OUTPUT PSOutput;
    
    
        PSOutput.color0 = PSInput.DiffuseColor;
        PSOutput.pos = PSInput.Position;
    
    
        // 出力パラメータを返す
        return PSOutput ;
    }
    
[/code]

[![画像の説明をここに入力](https://i.stack.imgur.com/Z2wOH.png)](https://i.stack.imgur.com/Z2wOH.png)


CC BY-SA 4.0
2020-05-12T04:53:44.540
66527
2020-07-11T08:21:11.970
question
directx
シェーダーがコンパイル出来ない　構文エラーの解決法が知りたい


質問する際は fxc.exe に渡しているコンパイルオプションを完全に提示してください。  
シェーダーのコンパイルに使用しているシェーダープロファイル（シェーダーモデル）は何ですか？

ピクセルシェーダーをコンパイルする際は `ps_?_?` を指定しますが、  
おそらく間違って頂点シェーダーのプロファイル `vs_?_?` を指定しているのではないかと思います。

  * [Syntax - Win32 apps | Microsoft Docs](https://docs.microsoft.com/en-us/windows/win32/direct3dtools/dx-graphics-tools-fxc-syntax)

fxc.exe はシェーダーモデル5.1までサポートしていますが、使用可能なプロファイルはDirect3D APIのバージョン (9.0, 9.0c,
10.x, 11.x, 12) および実行環境のグラフィックスハードウェアやデバイスドライバーの対応度によって異なります。

  * [Shader Models vs Shader Profiles - Win32 apps | Microsoft Docs](https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl-models)


CC BY-SA 4.0
2020-07-11T08:21:11.970
68491
2020-07-11T08:21:11.970
15413
66527
answer