XNA Creators Club Online
Page 1 of 1 (7 items)
Sort Posts: Previous Next

fxコンパイル時の謎のエラーまたは警告

Last post 2/14/2010 3:36 PM by WilfremLuminous. 6 replies.
  • 11/17/2009 2:36 PM
    • (32)
    • premium membership
    • Posts 17

    fxコンパイル時の謎のエラーまたは警告

    こんばんは、お世話になっています。

    Windows上で作成していた自作プログラムをXbox360に持っていこうとしたのですが、fxファイルのコンパイル時に謎のエラーが出て止まってしまいました。

    エラー 1 コンテンツのビルド中に AccessViolationException がスローされました: 保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。
       場所 CompileEffectFromSourceForXBox(String effectSource, CompilerMacro[] preprocessorDefines, CompilerIncludeHandler includeHandler, CompilerOptions options)
       場所 Microsoft.Xna.Framework.Graphics.Effect.CompileEffectFromSource(String effectFileSource, CompilerMacro[] preprocessorDefines, CompilerIncludeHandler includeHandler, CompilerOptions options, TargetPlatform platform)
       場所 Microsoft.Xna.Framework.Content.Pipeline.Processors.EffectProcessor.Process(EffectContent input, ContentProcessorContext context)
       場所 Microsoft.Xna.Framework.Content.Pipeline.ContentProcessor`2.Microsoft.Xna.Framework.Content.Pipeline.IContentProcessor.Process(Object input, ContentProcessorContext context)
       場所 Microsoft.Xna.Framework.Content.Pipeline.BuildCoordinator.BuildAssetWorker(BuildItem item)
       場所 Microsoft.Xna.Framework.Content.Pipeline.BuildCoordinator.BuildAsset(BuildItem item)
       場所 Microsoft.Xna.Framework.Content.Pipeline.BuildCoordinator.RunTheBuild()
       場所 Microsoft.Xna.Framework.Content.Pipeline.Tasks.BuildContent.RemoteProxy.RunTheBuild(BuildCoordinatorSettings settings, TimestampCache timestampCache, ITaskItem[] sourceAssets, String[]& outputContent, String[]& rebuiltContent, String[]& intermediates, Dictionary`2& dependencyTimestamps, KeyValuePair`2[]& warnings) C:\Documents and Settings\yoh\My Documents\Visual Studio 2008\Projects\SepakVenuses\SepakVenuses\Content\DqToonShadingEffect.fx SepakVenusesXbox

    不思議なことに、いったんVisual C# Expressを閉じたりリビルドしたりなど何度も試していると、たまに以下の警告が出てとりあえずコンパイルが通ります。ただし、実機では動くかどうかはまだ試していません。
    >警告 1 C:\Documents and Settings\yoh\My Documents\Visual Studio 2008\Projects\SepakVenuses\SepakVenuses\Content\DqToonShadingEffect.fx のコンパイル中に警告が発生しました: Unable to create warning string C:\Documents and Settings\yoh\My Documents\Visual Studio 2008\Projects\SepakVenuses\SepakVenuses\Content\DqToonShadingEffect.fx SepakVenusesXbox
    何か分かりますでしょうか? 開発ツールは3.1で、各プロジェクトも3.1用にアップデートしたつもりです。
  • 11/20/2009 4:58 PM In reply to
    • (32)
    • premium membership
    • Posts 17

    Re: fxコンパイル時の謎のエラーまたは警告

    回答がいただけないのですが、補足いたしますと

     

    • DqToonShadingEffect.fxというファイルを“コンパイル中に”AccessViolationExceptionが発生(ランタイムが例外を発生しているのでなく、パイプラインが投げている)。
    • 当該のfxファイルは自作のカスタムインポータ&プロセッサを通しているのでなく、“XNA標準の”エフェクトインポータ&プロセッサに任せている。
    • "Unable to create warning string"というメッセージを直訳すると「警告文字列の作成ができない」となる。

    以上の点から、パイプラインの内部で警告メッセージを作成しようとして失敗している可能性が非常に大きいように思います。XNAフレームワークそのもの、もしくは日本語パッチの不具合ということはあり得ないでしょうか。

    あるいはバグレポートということで別のところに報告すべきなのでしょうか…。

     

  • 11/20/2009 9:40 PM In reply to

    Re: fxコンパイル時の謎のエラーまたは警告

    こちらで検証する必要があるので、Connectの方に問題が起きている状態のfxファイルを添付してもらえないでしょうか?
    https://connect.microsoft.com/feedback/CreateFeedback.aspx?SiteID=226

    また、XNA GS 3.0で修正された問題として、日本語でコメントなどを記述していると同様のエラーが発生するという問題がありました。
    これはXNAフレームワーク側の問題だったのですが、シェーダーコンパイラーの方のバグの可能性もあるので、このリンクで提示されている回避方法を試してみてください。

    どちらにしろ、バグであることには違いないので修正するためにも是非とも問題の出ているエフェクトファイルをアップしてもらえると、助かります。


  • 11/22/2009 5:05 AM In reply to
    • (32)
    • premium membership
    • Posts 17

    Re: fxコンパイル時の謎のエラーまたは警告

    お世話になります。
    以下へ報告&添付させていただきましたのでよろしくお願いします。

    https://connect.microsoft.com/feedback/ViewFeedback.aspx?FeedbackID=512732&SiteID=226#details

    ※恐縮ながら、一応開発中のファイルということでプライベートアクセスとさせていただきます。
  • 12/10/2009 6:19 AM In reply to
    • (32)
    • premium membership
    • Posts 17

    Re: fxコンパイル時の謎のエラーまたは警告

    指示通りConnectにファイルをアップロードしましたのち3週間経ったのですが何か分かりましたでしょうか。

    こちらでも上記でご紹介いただいたリンク先
    http://social.msdn.microsoft.com/Forums/ja-JP/xnagameja/thread/9b2380a9-ac59-4d7d-a9c9-7e80e671f2df
    にある日本語文字列除去プロセッサを試してみたのですが、全く同じ結果が出るようです(コメントに全角スペースでも使っているのかと思ったが、そういう問題でもなかった)。

    メッセージバグそのものを1件だけ改修するのは難しいのかも知れませんが、何とか「本来出るはずの」警告メッセージがどのようなものなのか、あるいはせめて何行目で発生しているのかだけでも知りたいのです。 あるいはそうした対処をしていただくことが出来ないのであれば、スケジュール等組み直す必要がありますのでせめてその旨だけでもご回答ください。

    よろしくお願いします。
  • 1/25/2010 12:43 PM In reply to
    • (32)
    • premium membership
    • Posts 17

    Re: fxコンパイル時の謎のエラーまたは警告

    Answer
    Reply Quote
    ようやく分かりました…。

    ピクセルシェーダ関数の入力構造体に未使用のものがあると、(恐らくそれを警告するため)警告メッセージを作成しようとして失敗し、XNA内部エラーが発生する。

    警告の内容自体はx86と360のハード差には全く無関係です。なのになぜかx86ではこの警告自体が発生せず、360の場合のみわざわざ警告しようとして、エラーとなっていた模様です。未確認ですが、メッセージ関連ということで案外、日本語版限定の不具合かも知れません。


    今回は警告メッセージが不具合の原因ということで警告そのものを発生させなくすることで回避できましたが、内容によっては個人デベロッパでは回避できないものもあると思います。僭越ながら、XNA内部の不具合については単に報告のしくみを用意するだけでなく、MS側でもう少しきちんと対応していただけると嬉しいです。
  • 2/14/2010 3:36 PM In reply to

    Re: fxコンパイル時の謎のエラーまたは警告

    突然ですが、同様の症状で根本原因が同じだが、細かい点が違うバグが出たので、このスレで報告させてもらいます。

    自分もyohさんと同じ症状が出ました。
    ただし、原因はyohさんと違い、シェーダ内で未初期化の変数をうっかり使用していたのが原因でした
    このエラーはWindows向けコンパイルではエラーや警告として表示されませんが、XBoxではエラーと見なされるようです。

    そして、そのエラーを表示するための内部処理内でメモリアクセス違反を起こしてエラーで落ちてました。(ここはyohさんと同じでした)

    どうやら、XBox上では中で動作しているエフェクトファイルのコンパイラが違うようで
    XBoxの方がコンパイラがシビア、かつ特定条件下で警告、エラー表示をしようとしてエラーを起こして落ちるようです。
    そのために、XBoxでコンパイルすると謎のエラーを出して落ちるように見えるっぽいです。

    このバグの回避方法ですが
    自分は以下のようにに修正すると、正しくエラーメッセージを吐きました。
    //-----------------------------------------------------------------------------
    // 描画手法の宣言
    //=============================================================================
    //修正前
    //int ShaderIndex = 0;

    //VertexShader VSArray[1] =
    //{
    // compile vs_3_0 VSBasicNmTxVc(),
    //};

    //PixelShader PSArray[1] =
    //{
    // compile ps_3_0 PSBasicTx(),
    //};


    //Technique MMDBasicEffect
    //{
    // Pass
    // {
    // VertexShader = (VSArray[ShaderIndex]);
    // PixelShader = (PSArray[ShaderIndex]);
    // }
    //}

    //修正後
    Technique MMDBasicEffect
    {
    Pass
    {
    VertexShader = (compile vs_3_0 VSBasicNmTxVc());
    PixelShader = (compile ps_3_0 PSBasicTx());
    }
    }

    なぜ、こうするとバグを回避できたのか原因は分かりませんが(配列に入れてるのがまずい?)
    とりあえず、同種のバグで困っている人及びMSスタッフの参考までに。

    それでは失礼します。

    追伸
    使用したのはVS2008Pro+XNA3.1です。

Page 1 of 1 (7 items) Previous Next