Skip to content

[Proposal] Direct2D 側は画素シェーダーが持たない同期の組み込みを断らず、FXC の誤りが転送だけになる #255

Closed

Description

@routersys

Summary / 概要

計算側には、画素シェーダー向けの組み込み(Clip や微分など)を計算シェーダーの本文で呼ぶと CMPW0112 で断つ解析器があります。Direct2D 側にはその対がありません。計算シェーダー向けの同期の組み込みを画素シェーダーの本文で呼ぶと、生成器は診断を出さずに書き出し、FXC の X3664: ps_5_0 does not support thread synchronization operations が CMPWD2D0034 としてシェーダー型の位置へ転送されるだけになります。文は組み込みの名前を含みますが、位置は呼び出しではなくシェーダー型です。

Measured / 測ったこと

main(c050699d)で、Hlsl.GroupMemoryBarrierWithGroupSync() を Execute に置いた画素シェーダーを Direct2D の生成器に通すと、報告は CMPWD2D0034 の1件で、位置はシェーダー型でした。共有の Hlsl 型が持つ同期の組み込み6つを FXC(Windows SDK 10.0.26100.0)の ps_5_0 で1つずつ建てると、DeviceMemoryBarrier だけが通り、残る5つは X3664 で落ちます。

組み込み ps_4_0_level_9_1 と ps_4_0_level_9_3 ps_4_0、ps_4_1、ps_5_0
AllMemoryBarrier X3664 X3664
AllMemoryBarrierWithGroupSync X3664 X3664
DeviceMemoryBarrier X3664 通る
DeviceMemoryBarrierWithGroupSync X3664 X3664
GroupMemoryBarrier X3664 X3664
GroupMemoryBarrierWithGroupSync X3664 X3664

level 9 の2つのプロファイルは後から測りました。DeviceMemoryBarrier だけがプロファイルで変わります。

Proposal / 提案

どのプロファイルでも落ちる5つを断つ診断を Direct2D 側に1つ足します。DeviceMemoryBarrier は ps_4_0 以上で FXC が受け付け、書き換え器はプロファイルを知らないので断たず、level 9 では FXC の転送に任せます。同期のほかに計算側だけの組み込みが Hlsl 型に無いかは数えていません。

置く層は共有の書き換え器の Direct2D 側の分岐にします。計算側が out 引数の組み込みへ渡す行列を自分の記号の下で断っているのと同じ形です。最初は計算側の CMPW0112 と同じ解析器を考えましたが、解析器はコンパイル単位の全ての呼び出しを見るので、計算と Direct2D の両方を参照するプロジェクトでは計算シェーダーの同期の組み込みまで断ってしまいます。書き換え器は Direct2D の生成器が書き出す本文しか通りません。生成器の試験が「書き換え器は通しシェーダーコンパイラだけが断る入力」として同期の組み込みを使っていた分は、Hlsl.Abort()(連結を有効にした既定の選択肢で FXC がライブラリの側で X4602 として断る)へ移します。

Activity

  1. added
    enhancementNew feature or request / 新機能または要望
    analyzer or generatorAnalyzer or generator / アナライザーまたはジェネレーター
    on Sep 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    analyzer or generatorAnalyzer or generator / アナライザーまたはジェネレーターenhancementNew feature or request / 新機能または要望

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions