Win32 API 日本語リファレンス
ホームGraphics.Direct3D11 › D3D11_TRACE_STATS

D3D11_TRACE_STATS

構造体
サイズx64: 8616 バイト / x86: 8616 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
TraceDescD3D11_SHADER_TRACE_DESC40+0+0この構造体が統計情報を指定する対象のシェーダートレースオブジェクトを記述する D3D11_SHADER_TRACE_DESC 構造体です。
NumInvocationsInStampBYTE1+40+40トレースのスタンプ内の呼び出し回数です。この値は、頂点シェーダー、ハルシェーダー、ドメインシェーダー、ジオメトリシェーダー、コンピュートシェーダーでは常に 1 です。ピクセルシェーダーでは 4 です。
TargetStampIndexBYTE1+41+41対象となるスタンプのインデックスです。この値は、頂点シェーダー、ハルシェーダー、ドメインシェーダー、ジオメトリシェーダー、コンピュートシェーダーでは常に 0 です。ただしピクセルシェーダーの場合、この値はスタンプ内の 4 つのピクセルのうちどれがトレースの対象であるかを示します。スタンプ内の他のピクセルのトレースを調べることで、微分計算がどのように行われたかを判断できます。この判断は、複数のトレース間でレジスターを相互に対応付けることで行えます。
NumTraceStepsDWORD4+44+44トレースの総ステップ数です。この数はすべてのスタンプ呼び出しで同じです。
InputMaskBYTE32+48+48

各入力 v# レジスターのコンポーネントトレースマスクです。D3D11_TRACE_COMPONENT_MASK については、D3D11_TRACE_VALUE を参照してください。

頂点シェーダー、ジオメトリシェーダー、ピクセルシェーダー、ハルシェーダー、ドメインシェーダーの場合、有効な範囲は [0..31] です。コンピュートシェーダーの場合、このメンバーは該当しません。また、ジオメトリシェーダーの入力は 2 次元でインデックス指定されます。たとえば v[vertex][attribute] を考えます。この例では、[attribute] の範囲は [0..31] です。[vertex] 軸のサイズはすべての入力で同じであり、GSInputPrimitive メンバーによって決まります。

同様に、ハルシェーダーとドメインシェーダーの入力も 2 次元でインデックス指定されます。たとえば v[vertex][attribute] を考えます。この例では、[attribute] の範囲は [0..15] です。[vertex] 軸のサイズはすべての入力で同じです。

OutputMaskBYTE32+80+80

各出力 o# レジスターのコンポーネントトレースマスクです。D3D11_TRACE_COMPONENT_MASK については、D3D11_TRACE_VALUE を参照してください。

頂点シェーダーとジオメトリシェーダーの場合、有効な範囲は [0..31] です。ピクセルシェーダーの場合、有効な範囲は [0..7] です。コンピュートシェーダーの場合、このメンバーは該当しません。ハルシェーダーの出力制御点の場合、レジスターは 2 次元でインデックス指定されます。たとえば ocp[vertex][attribute] を考えます。この例では、[attribute] の範囲は [0..31] です。[vertex] 軸のサイズはすべての入力で同じです。

NumTempsWORD2+112+112一時レジスター、すなわち宣言されている 4x32 ビットの r# レジスターの数です。
MaxIndexableTempIndexWORD2+114+114宣言されているすべてのインデックス可能一時レジスター x#[] の最大インデックス #+1 です。まばらに宣言されている場合 (たとえば x3[12] と x200[30] のみの場合)、この値は 201 (200+1) になります。
IndexableTempSizeWORD8192+116+116各インデックス可能一時レジスター x#[numTemps] の一時レジスター数です。MaxIndexableTempIndex メンバーの値までしか一時レジスターを持てません。
ImmediateConstantBufferSizeWORD2+8308+8308イミディエイト定数バッファー内にある 4x32 ビット値の数です (存在する場合)。
PixelPositionDWORD32+8312+8312トレース対象ピクセルの位置をエンコードした値。
PixelCoverageMaskULONGLONG32+8344+8344
メモ このメンバーはピクセルシェーダー専用です ([stampIndex])。
各スタンプでどの MSAA サンプルがカバーされているかを示すマスクです。このカバレッジは、ピクセルに対して alpha-to-coverage、深度、ステンシルの各処理が実行される前の状態を表します。MSAA でない場合は、最下位ビット (LSB) を調べてください。隣接ピクセルの微分をサポートするためだけに実行されるピクセルでは、このマスクが 0 になることがあります。
PixelDiscardedMaskULONGLONG32+8376+8376
メモ このメンバーはピクセルシェーダー専用です ([stampIndex])。
破棄されたサンプルを示すマスクです。ピクセルシェーダーがピクセル単位の頻度で実行される場合、"discard" はすべてのサンプルをオフにします。 すべてのサンプルがオフの場合、以降の 4 つのマスクメンバーも 0 になります。
PixelCoverageMaskAfterShaderULONGLONG32+8408+8408
メモ このメンバーはピクセルシェーダー専用です ([stampIndex])。
カバーされている MSAA サンプルを示すマスクです。MSAA でない場合は LSB を調べてください。
PixelCoverageMaskAfterA2CSampleMaskULONGLONG32+8440+8440
メモ このメンバーはピクセルシェーダー専用です ([stampIndex])。
alpha-to-coverage+sampleMask の後、深度とステンシルの前の時点でカバーされている MSAA サンプルを示すマスクです。MSAA でない場合は LSB を調べてください。
PixelCoverageMaskAfterA2CSampleMaskDepthULONGLONG32+8472+8472
メモ このメンバーはピクセルシェーダー専用です ([stampIndex])。
alpha-to-coverage+sampleMask+depth の後、ステンシルの前の時点でカバーされている MSAA サンプルを示すマスクです。MSAA でない場合は LSB を調べてください。
PixelCoverageMaskAfterA2CSampleMaskDepthStencilULONGLONG32+8504+8504
メモ このメンバーはピクセルシェーダー専用です ([stampIndex])。
alpha-to-coverage+sampleMask+depth+stencil の後にカバーされている MSAA サンプルを示すマスクです。MSAA でない場合は LSB を調べてください。
PSOutputsDepthBOOL4+8536+8536このトレースが oDepth レジスターを出力するピクセルシェーダーのものであるかどうかを指定する値です。TRUE はピクセルシェーダーが oDepth レジスターを出力することを示します。それ以外の場合は FALSE です。
PSOutputsMaskBOOL4+8540+8540このトレースが oMask レジスターを出力するピクセルシェーダーのものであるかどうかを指定する値です。TRUE はピクセルシェーダーが oMask レジスターを出力することを示します。それ以外の場合は FALSE です。
GSInputPrimitiveD3D11_TRACE_GS_INPUT_PRIMITIVE4+8544+8544ジオメトリシェーダーの入力プリミティブの種類を識別する D3D11_TRACE_GS_INPUT_PRIMITIVE 型の値です。つまりこの値は、{point, line, triangle, line_adj, triangle_adj} のいずれか、あるいはそれぞれに対応する頂点数 1、2、3、4、6 を識別します。たとえば line の場合、入力 v[][#] は実際には v[2][#] になります。頂点シェーダーとピクセルシェーダーの場合は、このメンバーに D3D11_TRACE_GS_INPUT_PRIMITIVE_UNDEFINED を設定します。
GSInputsPrimitiveIDBOOL4+8548+8548このトレースが PrimitiveID レジスターを入力とするジオメトリシェーダーのものであるかどうかを指定する値です。TRUE はジオメトリシェーダーが PrimitiveID レジスターを入力とすることを示します。それ以外の場合は FALSE です。
HSOutputPatchConstantMaskBYTE32+8552+8552
メモ このメンバーはハルシェーダー専用です。
ハルシェーダー出力のコンポーネントトレースマスクです。D3D11_TRACE_COMPONENT_MASK については、D3D11_TRACE_VALUE を参照してください。

D3D11_TRACE_INPUT_PRIMITIVE_ID_REGISTER の値は、ID3D11ShaderTrace::GetInitialRegisterContents メソッドを呼び出すことで取得できます。

DSInputPatchConstantMaskBYTE32+8584+8584
メモ このメンバーはドメインシェーダー専用です。
ドメインシェーダー入力のコンポーネントトレースマスクです。D3D11_TRACE_COMPONENT_MASK については、D3D11_TRACE_VALUE を参照してください。

次の値は、ID3D11ShaderTrace::GetInitialRegisterContents メソッドを呼び出すことで取得できます。

公式ドキュメント

トレースに関する統計情報を指定します。

解説(Remarks)

この API には、Windows 8 用の Windows ソフトウェア開発キット (SDK) が必要です。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#include <windows.h>

// D3D11_SHADER_TRACE_DESC  (x64 40 / x86 40 バイト)
typedef struct D3D11_SHADER_TRACE_DESC {
    D3D11_SHADER_TYPE Type;
    DWORD Flags;
    _Anonymous_e__Union Anonymous;
} D3D11_SHADER_TRACE_DESC;

// D3D11_TRACE_STATS  (x64 8616 / x86 8616 バイト)
typedef struct D3D11_TRACE_STATS {
    D3D11_SHADER_TRACE_DESC TraceDesc;
    BYTE NumInvocationsInStamp;
    BYTE TargetStampIndex;
    DWORD NumTraceSteps;
    BYTE InputMask[32];
    BYTE OutputMask[32];
    WORD NumTemps;
    WORD MaxIndexableTempIndex;
    WORD IndexableTempSize[4096];
    WORD ImmediateConstantBufferSize;
    DWORD PixelPosition[8];
    ULONGLONG PixelCoverageMask[4];
    ULONGLONG PixelDiscardedMask[4];
    ULONGLONG PixelCoverageMaskAfterShader[4];
    ULONGLONG PixelCoverageMaskAfterA2CSampleMask[4];
    ULONGLONG PixelCoverageMaskAfterA2CSampleMaskDepth[4];
    ULONGLONG PixelCoverageMaskAfterA2CSampleMaskDepthStencil[4];
    BOOL PSOutputsDepth;
    BOOL PSOutputsMask;
    D3D11_TRACE_GS_INPUT_PRIMITIVE GSInputPrimitive;
    BOOL GSInputsPrimitiveID;
    BYTE HSOutputPatchConstantMask[32];
    BYTE DSInputPatchConstantMask[32];
} D3D11_TRACE_STATS;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct D3D11_SHADER_TRACE_DESC
{
    public int Type;
    public uint Flags;
    public _Anonymous_e__Union Anonymous;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct D3D11_TRACE_STATS
{
    public D3D11_SHADER_TRACE_DESC TraceDesc;
    public byte NumInvocationsInStamp;
    public byte TargetStampIndex;
    public uint NumTraceSteps;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] public byte[] InputMask;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] public byte[] OutputMask;
    public ushort NumTemps;
    public ushort MaxIndexableTempIndex;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4096)] public ushort[] IndexableTempSize;
    public ushort ImmediateConstantBufferSize;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] public uint[] PixelPosition;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public ulong[] PixelCoverageMask;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public ulong[] PixelDiscardedMask;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public ulong[] PixelCoverageMaskAfterShader;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public ulong[] PixelCoverageMaskAfterA2CSampleMask;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public ulong[] PixelCoverageMaskAfterA2CSampleMaskDepth;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public ulong[] PixelCoverageMaskAfterA2CSampleMaskDepthStencil;
    [MarshalAs(UnmanagedType.Bool)] public bool PSOutputsDepth;
    [MarshalAs(UnmanagedType.Bool)] public bool PSOutputsMask;
    public int GSInputPrimitive;
    [MarshalAs(UnmanagedType.Bool)] public bool GSInputsPrimitiveID;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] public byte[] HSOutputPatchConstantMask;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] public byte[] DSInputPatchConstantMask;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure D3D11_SHADER_TRACE_DESC
    Public Type As Integer
    Public Flags As UInteger
    Public Anonymous As _Anonymous_e__Union
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure D3D11_TRACE_STATS
    Public TraceDesc As D3D11_SHADER_TRACE_DESC
    Public NumInvocationsInStamp As Byte
    Public TargetStampIndex As Byte
    Public NumTraceSteps As UInteger
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=32)> Public InputMask() As Byte
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=32)> Public OutputMask() As Byte
    Public NumTemps As UShort
    Public MaxIndexableTempIndex As UShort
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=4096)> Public IndexableTempSize() As UShort
    Public ImmediateConstantBufferSize As UShort
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=8)> Public PixelPosition() As UInteger
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=4)> Public PixelCoverageMask() As ULong
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=4)> Public PixelDiscardedMask() As ULong
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=4)> Public PixelCoverageMaskAfterShader() As ULong
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=4)> Public PixelCoverageMaskAfterA2CSampleMask() As ULong
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=4)> Public PixelCoverageMaskAfterA2CSampleMaskDepth() As ULong
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=4)> Public PixelCoverageMaskAfterA2CSampleMaskDepthStencil() As ULong
    <MarshalAs(UnmanagedType.Bool)> Public PSOutputsDepth As Boolean
    <MarshalAs(UnmanagedType.Bool)> Public PSOutputsMask As Boolean
    Public GSInputPrimitive As Integer
    <MarshalAs(UnmanagedType.Bool)> Public GSInputsPrimitiveID As Boolean
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=32)> Public HSOutputPatchConstantMask() As Byte
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=32)> Public DSInputPatchConstantMask() As Byte
End Structure
import ctypes
from ctypes import wintypes

class D3D11_SHADER_TRACE_DESC(ctypes.Structure):
    _fields_ = [
        ("Type", ctypes.c_int),
        ("Flags", wintypes.DWORD),
        ("Anonymous", _Anonymous_e__Union),
    ]

class D3D11_TRACE_STATS(ctypes.Structure):
    _fields_ = [
        ("TraceDesc", D3D11_SHADER_TRACE_DESC),
        ("NumInvocationsInStamp", ctypes.c_ubyte),
        ("TargetStampIndex", ctypes.c_ubyte),
        ("NumTraceSteps", wintypes.DWORD),
        ("InputMask", ctypes.c_ubyte * 32),
        ("OutputMask", ctypes.c_ubyte * 32),
        ("NumTemps", ctypes.c_ushort),
        ("MaxIndexableTempIndex", ctypes.c_ushort),
        ("IndexableTempSize", ctypes.c_ushort * 4096),
        ("ImmediateConstantBufferSize", ctypes.c_ushort),
        ("PixelPosition", wintypes.DWORD * 8),
        ("PixelCoverageMask", ctypes.c_ulonglong * 4),
        ("PixelDiscardedMask", ctypes.c_ulonglong * 4),
        ("PixelCoverageMaskAfterShader", ctypes.c_ulonglong * 4),
        ("PixelCoverageMaskAfterA2CSampleMask", ctypes.c_ulonglong * 4),
        ("PixelCoverageMaskAfterA2CSampleMaskDepth", ctypes.c_ulonglong * 4),
        ("PixelCoverageMaskAfterA2CSampleMaskDepthStencil", ctypes.c_ulonglong * 4),
        ("PSOutputsDepth", wintypes.BOOL),
        ("PSOutputsMask", wintypes.BOOL),
        ("GSInputPrimitive", ctypes.c_int),
        ("GSInputsPrimitiveID", wintypes.BOOL),
        ("HSOutputPatchConstantMask", ctypes.c_ubyte * 32),
        ("DSInputPatchConstantMask", ctypes.c_ubyte * 32),
    ]
#[repr(C)]
pub struct D3D11_SHADER_TRACE_DESC {
    pub Type: i32,
    pub Flags: u32,
    pub Anonymous: _Anonymous_e__Union,
}

#[repr(C)]
pub struct D3D11_TRACE_STATS {
    pub TraceDesc: D3D11_SHADER_TRACE_DESC,
    pub NumInvocationsInStamp: u8,
    pub TargetStampIndex: u8,
    pub NumTraceSteps: u32,
    pub InputMask: [u8; 32],
    pub OutputMask: [u8; 32],
    pub NumTemps: u16,
    pub MaxIndexableTempIndex: u16,
    pub IndexableTempSize: [u16; 4096],
    pub ImmediateConstantBufferSize: u16,
    pub PixelPosition: [u32; 8],
    pub PixelCoverageMask: [u64; 4],
    pub PixelDiscardedMask: [u64; 4],
    pub PixelCoverageMaskAfterShader: [u64; 4],
    pub PixelCoverageMaskAfterA2CSampleMask: [u64; 4],
    pub PixelCoverageMaskAfterA2CSampleMaskDepth: [u64; 4],
    pub PixelCoverageMaskAfterA2CSampleMaskDepthStencil: [u64; 4],
    pub PSOutputsDepth: i32,
    pub PSOutputsMask: i32,
    pub GSInputPrimitive: i32,
    pub GSInputsPrimitiveID: i32,
    pub HSOutputPatchConstantMask: [u8; 32],
    pub DSInputPatchConstantMask: [u8; 32],
}
import "golang.org/x/sys/windows"

type D3D11_SHADER_TRACE_DESC struct {
	Type int32
	Flags uint32
	Anonymous _Anonymous_e__Union
}

type D3D11_TRACE_STATS struct {
	TraceDesc D3D11_SHADER_TRACE_DESC
	NumInvocationsInStamp byte
	TargetStampIndex byte
	NumTraceSteps uint32
	InputMask [32]byte
	OutputMask [32]byte
	NumTemps uint16
	MaxIndexableTempIndex uint16
	IndexableTempSize [4096]uint16
	ImmediateConstantBufferSize uint16
	PixelPosition [8]uint32
	PixelCoverageMask [4]uint64
	PixelDiscardedMask [4]uint64
	PixelCoverageMaskAfterShader [4]uint64
	PixelCoverageMaskAfterA2CSampleMask [4]uint64
	PixelCoverageMaskAfterA2CSampleMaskDepth [4]uint64
	PixelCoverageMaskAfterA2CSampleMaskDepthStencil [4]uint64
	PSOutputsDepth int32
	PSOutputsMask int32
	GSInputPrimitive int32
	GSInputsPrimitiveID int32
	HSOutputPatchConstantMask [32]byte
	DSInputPatchConstantMask [32]byte
}
type
  D3D11_SHADER_TRACE_DESC = record
    Type: Integer;
    Flags: DWORD;
    Anonymous: _Anonymous_e__Union;
  end;

  D3D11_TRACE_STATS = record
    TraceDesc: D3D11_SHADER_TRACE_DESC;
    NumInvocationsInStamp: Byte;
    TargetStampIndex: Byte;
    NumTraceSteps: DWORD;
    InputMask: array[0..31] of Byte;
    OutputMask: array[0..31] of Byte;
    NumTemps: Word;
    MaxIndexableTempIndex: Word;
    IndexableTempSize: array[0..4095] of Word;
    ImmediateConstantBufferSize: Word;
    PixelPosition: array[0..7] of DWORD;
    PixelCoverageMask: array[0..3] of UInt64;
    PixelDiscardedMask: array[0..3] of UInt64;
    PixelCoverageMaskAfterShader: array[0..3] of UInt64;
    PixelCoverageMaskAfterA2CSampleMask: array[0..3] of UInt64;
    PixelCoverageMaskAfterA2CSampleMaskDepth: array[0..3] of UInt64;
    PixelCoverageMaskAfterA2CSampleMaskDepthStencil: array[0..3] of UInt64;
    PSOutputsDepth: BOOL;
    PSOutputsMask: BOOL;
    GSInputPrimitive: Integer;
    GSInputsPrimitiveID: BOOL;
    HSOutputPatchConstantMask: array[0..31] of Byte;
    DSInputPatchConstantMask: array[0..31] of Byte;
  end;
const D3D11_SHADER_TRACE_DESC = extern struct {
    Type: i32,
    Flags: u32,
    Anonymous: _Anonymous_e__Union,
};

const D3D11_TRACE_STATS = extern struct {
    TraceDesc: D3D11_SHADER_TRACE_DESC,
    NumInvocationsInStamp: u8,
    TargetStampIndex: u8,
    NumTraceSteps: u32,
    InputMask: [32]u8,
    OutputMask: [32]u8,
    NumTemps: u16,
    MaxIndexableTempIndex: u16,
    IndexableTempSize: [4096]u16,
    ImmediateConstantBufferSize: u16,
    PixelPosition: [8]u32,
    PixelCoverageMask: [4]u64,
    PixelDiscardedMask: [4]u64,
    PixelCoverageMaskAfterShader: [4]u64,
    PixelCoverageMaskAfterA2CSampleMask: [4]u64,
    PixelCoverageMaskAfterA2CSampleMaskDepth: [4]u64,
    PixelCoverageMaskAfterA2CSampleMaskDepthStencil: [4]u64,
    PSOutputsDepth: i32,
    PSOutputsMask: i32,
    GSInputPrimitive: i32,
    GSInputsPrimitiveID: i32,
    HSOutputPatchConstantMask: [32]u8,
    DSInputPatchConstantMask: [32]u8,
};
type
  D3D11_SHADER_TRACE_DESC {.bycopy.} = object
    Type: int32
    Flags: uint32
    Anonymous: _Anonymous_e__Union

  D3D11_TRACE_STATS {.bycopy.} = object
    TraceDesc: D3D11_SHADER_TRACE_DESC
    NumInvocationsInStamp: uint8
    TargetStampIndex: uint8
    NumTraceSteps: uint32
    InputMask: array[32, uint8]
    OutputMask: array[32, uint8]
    NumTemps: uint16
    MaxIndexableTempIndex: uint16
    IndexableTempSize: array[4096, uint16]
    ImmediateConstantBufferSize: uint16
    PixelPosition: array[8, uint32]
    PixelCoverageMask: array[4, uint64]
    PixelDiscardedMask: array[4, uint64]
    PixelCoverageMaskAfterShader: array[4, uint64]
    PixelCoverageMaskAfterA2CSampleMask: array[4, uint64]
    PixelCoverageMaskAfterA2CSampleMaskDepth: array[4, uint64]
    PixelCoverageMaskAfterA2CSampleMaskDepthStencil: array[4, uint64]
    PSOutputsDepth: int32
    PSOutputsMask: int32
    GSInputPrimitive: int32
    GSInputsPrimitiveID: int32
    HSOutputPatchConstantMask: array[32, uint8]
    DSInputPatchConstantMask: array[32, uint8]
struct D3D11_SHADER_TRACE_DESC
{
    int Type;
    uint Flags;
    _Anonymous_e__Union Anonymous;
}

struct D3D11_TRACE_STATS
{
    D3D11_SHADER_TRACE_DESC TraceDesc;
    ubyte NumInvocationsInStamp;
    ubyte TargetStampIndex;
    uint NumTraceSteps;
    ubyte[32] InputMask;
    ubyte[32] OutputMask;
    ushort NumTemps;
    ushort MaxIndexableTempIndex;
    ushort[4096] IndexableTempSize;
    ushort ImmediateConstantBufferSize;
    uint[8] PixelPosition;
    ulong[4] PixelCoverageMask;
    ulong[4] PixelDiscardedMask;
    ulong[4] PixelCoverageMaskAfterShader;
    ulong[4] PixelCoverageMaskAfterA2CSampleMask;
    ulong[4] PixelCoverageMaskAfterA2CSampleMaskDepth;
    ulong[4] PixelCoverageMaskAfterA2CSampleMaskDepthStencil;
    int PSOutputsDepth;
    int PSOutputsMask;
    int GSInputPrimitive;
    int GSInputsPrimitiveID;
    ubyte[32] HSOutputPatchConstantMask;
    ubyte[32] DSInputPatchConstantMask;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; D3D11_TRACE_STATS サイズ: 8616 バイト(x64)
dim st, 2154    ; 4byte整数×2154(構造体サイズ 8616 / 4 切り上げ)
; TraceDesc : D3D11_SHADER_TRACE_DESC (+0, 40byte)  varptr(st)+0 を基点に操作(40byte:入れ子/配列)
; NumInvocationsInStamp : BYTE (+40, 1byte)  poke st,40,値  /  値 = peek(st,40)
; TargetStampIndex : BYTE (+41, 1byte)  poke st,41,値  /  値 = peek(st,41)
; NumTraceSteps : DWORD (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; InputMask : BYTE (+48, 32byte)  varptr(st)+48 を基点に操作(32byte:入れ子/配列)
; OutputMask : BYTE (+80, 32byte)  varptr(st)+80 を基点に操作(32byte:入れ子/配列)
; NumTemps : WORD (+112, 2byte)  wpoke st,112,値  /  値 = wpeek(st,112)
; MaxIndexableTempIndex : WORD (+114, 2byte)  wpoke st,114,値  /  値 = wpeek(st,114)
; IndexableTempSize : WORD (+116, 8192byte)  varptr(st)+116 を基点に操作(8192byte:入れ子/配列)
; ImmediateConstantBufferSize : WORD (+8308, 2byte)  wpoke st,8308,値  /  値 = wpeek(st,8308)
; PixelPosition : DWORD (+8312, 32byte)  varptr(st)+8312 を基点に操作(32byte:入れ子/配列)
; PixelCoverageMask : ULONGLONG (+8344, 32byte)  varptr(st)+8344 を基点に操作(32byte:入れ子/配列)
; PixelDiscardedMask : ULONGLONG (+8376, 32byte)  varptr(st)+8376 を基点に操作(32byte:入れ子/配列)
; PixelCoverageMaskAfterShader : ULONGLONG (+8408, 32byte)  varptr(st)+8408 を基点に操作(32byte:入れ子/配列)
; PixelCoverageMaskAfterA2CSampleMask : ULONGLONG (+8440, 32byte)  varptr(st)+8440 を基点に操作(32byte:入れ子/配列)
; PixelCoverageMaskAfterA2CSampleMaskDepth : ULONGLONG (+8472, 32byte)  varptr(st)+8472 を基点に操作(32byte:入れ子/配列)
; PixelCoverageMaskAfterA2CSampleMaskDepthStencil : ULONGLONG (+8504, 32byte)  varptr(st)+8504 を基点に操作(32byte:入れ子/配列)
; PSOutputsDepth : BOOL (+8536, 4byte)  st.2134 = 値  /  値 = st.2134   (lpoke/lpeek も可)
; PSOutputsMask : BOOL (+8540, 4byte)  st.2135 = 値  /  値 = st.2135   (lpoke/lpeek も可)
; GSInputPrimitive : D3D11_TRACE_GS_INPUT_PRIMITIVE (+8544, 4byte)  st.2136 = 値  /  値 = st.2136   (lpoke/lpeek も可)
; GSInputsPrimitiveID : BOOL (+8548, 4byte)  st.2137 = 値  /  値 = st.2137   (lpoke/lpeek も可)
; HSOutputPatchConstantMask : BYTE (+8552, 32byte)  varptr(st)+8552 を基点に操作(32byte:入れ子/配列)
; DSInputPatchConstantMask : BYTE (+8584, 32byte)  varptr(st)+8584 を基点に操作(32byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global D3D11_SHADER_TRACE_DESC
    #field int Type
    #field int Flags
    #field byte Anonymous 32
#endstruct

#defstruct global D3D11_TRACE_STATS
    #field D3D11_SHADER_TRACE_DESC TraceDesc
    #field byte NumInvocationsInStamp
    #field byte TargetStampIndex
    #field int NumTraceSteps
    #field byte InputMask 32
    #field byte OutputMask 32
    #field short NumTemps
    #field short MaxIndexableTempIndex
    #field short IndexableTempSize 4096
    #field short ImmediateConstantBufferSize
    #field int PixelPosition 8
    #field int64 PixelCoverageMask 4
    #field int64 PixelDiscardedMask 4
    #field int64 PixelCoverageMaskAfterShader 4
    #field int64 PixelCoverageMaskAfterA2CSampleMask 4
    #field int64 PixelCoverageMaskAfterA2CSampleMaskDepth 4
    #field int64 PixelCoverageMaskAfterA2CSampleMaskDepthStencil 4
    #field bool PSOutputsDepth
    #field bool PSOutputsMask
    #field int GSInputPrimitive
    #field bool GSInputsPrimitiveID
    #field byte HSOutputPatchConstantMask 32
    #field byte DSInputPatchConstantMask 32
#endstruct

stdim st, D3D11_TRACE_STATS        ; NSTRUCT 変数を確保
st->NumInvocationsInStamp = 100
mes "NumInvocationsInStamp=" + st->NumInvocationsInStamp