D3D11_TRACE_STATS
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| TraceDesc | D3D11_SHADER_TRACE_DESC | 40 | +0 | +0 | この構造体が統計情報を指定する対象のシェーダートレースオブジェクトを記述する D3D11_SHADER_TRACE_DESC 構造体です。 |
| NumInvocationsInStamp | BYTE | 1 | +40 | +40 | トレースのスタンプ内の呼び出し回数です。この値は、頂点シェーダー、ハルシェーダー、ドメインシェーダー、ジオメトリシェーダー、コンピュートシェーダーでは常に 1 です。ピクセルシェーダーでは 4 です。 |
| TargetStampIndex | BYTE | 1 | +41 | +41 | 対象となるスタンプのインデックスです。この値は、頂点シェーダー、ハルシェーダー、ドメインシェーダー、ジオメトリシェーダー、コンピュートシェーダーでは常に 0 です。ただしピクセルシェーダーの場合、この値はスタンプ内の 4 つのピクセルのうちどれがトレースの対象であるかを示します。スタンプ内の他のピクセルのトレースを調べることで、微分計算がどのように行われたかを判断できます。この判断は、複数のトレース間でレジスターを相互に対応付けることで行えます。 |
| NumTraceSteps | DWORD | 4 | +44 | +44 | トレースの総ステップ数です。この数はすべてのスタンプ呼び出しで同じです。 |
| InputMask | BYTE | 32 | +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] 軸のサイズはすべての入力で同じです。 |
| OutputMask | BYTE | 32 | +80 | +80 | 各出力 o# レジスターのコンポーネントトレースマスクです。D3D11_TRACE_COMPONENT_MASK については、D3D11_TRACE_VALUE を参照してください。 頂点シェーダーとジオメトリシェーダーの場合、有効な範囲は [0..31] です。ピクセルシェーダーの場合、有効な範囲は [0..7] です。コンピュートシェーダーの場合、このメンバーは該当しません。ハルシェーダーの出力制御点の場合、レジスターは 2 次元でインデックス指定されます。たとえば ocp[vertex][attribute] を考えます。この例では、[attribute] の範囲は [0..31] です。[vertex] 軸のサイズはすべての入力で同じです。 |
| NumTemps | WORD | 2 | +112 | +112 | 一時レジスター、すなわち宣言されている 4x32 ビットの r# レジスターの数です。 |
| MaxIndexableTempIndex | WORD | 2 | +114 | +114 | 宣言されているすべてのインデックス可能一時レジスター x#[] の最大インデックス #+1 です。まばらに宣言されている場合 (たとえば x3[12] と x200[30] のみの場合)、この値は 201 (200+1) になります。 |
| IndexableTempSize | WORD | 8192 | +116 | +116 | 各インデックス可能一時レジスター x#[numTemps] の一時レジスター数です。MaxIndexableTempIndex メンバーの値までしか一時レジスターを持てません。 |
| ImmediateConstantBufferSize | WORD | 2 | +8308 | +8308 | イミディエイト定数バッファー内にある 4x32 ビット値の数です (存在する場合)。 |
| PixelPosition | DWORD | 32 | +8312 | +8312 | トレース対象ピクセルの位置をエンコードした値。 |
| PixelCoverageMask | ULONGLONG | 32 | +8344 | +8344 | メモ このメンバーはピクセルシェーダー専用です ([stampIndex])。
|
| PixelDiscardedMask | ULONGLONG | 32 | +8376 | +8376 | メモ このメンバーはピクセルシェーダー専用です ([stampIndex])。
|
| PixelCoverageMaskAfterShader | ULONGLONG | 32 | +8408 | +8408 | メモ このメンバーはピクセルシェーダー専用です ([stampIndex])。
|
| PixelCoverageMaskAfterA2CSampleMask | ULONGLONG | 32 | +8440 | +8440 | メモ このメンバーはピクセルシェーダー専用です ([stampIndex])。
|
| PixelCoverageMaskAfterA2CSampleMaskDepth | ULONGLONG | 32 | +8472 | +8472 | メモ このメンバーはピクセルシェーダー専用です ([stampIndex])。
|
| PixelCoverageMaskAfterA2CSampleMaskDepthStencil | ULONGLONG | 32 | +8504 | +8504 | メモ このメンバーはピクセルシェーダー専用です ([stampIndex])。
|
| PSOutputsDepth | BOOL | 4 | +8536 | +8536 | このトレースが oDepth レジスターを出力するピクセルシェーダーのものであるかどうかを指定する値です。TRUE はピクセルシェーダーが oDepth レジスターを出力することを示します。それ以外の場合は FALSE です。 |
| PSOutputsMask | BOOL | 4 | +8540 | +8540 | このトレースが oMask レジスターを出力するピクセルシェーダーのものであるかどうかを指定する値です。TRUE はピクセルシェーダーが oMask レジスターを出力することを示します。それ以外の場合は FALSE です。 |
| GSInputPrimitive | D3D11_TRACE_GS_INPUT_PRIMITIVE | 4 | +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 を設定します。 |
| GSInputsPrimitiveID | BOOL | 4 | +8548 | +8548 | このトレースが PrimitiveID レジスターを入力とするジオメトリシェーダーのものであるかどうかを指定する値です。TRUE はジオメトリシェーダーが PrimitiveID レジスターを入力とすることを示します。それ以外の場合は FALSE です。 |
| HSOutputPatchConstantMask | BYTE | 32 | +8552 | +8552 | メモ このメンバーはハルシェーダー専用です。
D3D11_TRACE_INPUT_PRIMITIVE_ID_REGISTER の値は、ID3D11ShaderTrace::GetInitialRegisterContents メソッドを呼び出すことで取得できます。 |
| DSInputPatchConstantMask | BYTE | 32 | +8584 | +8584 | メモ このメンバーはドメインシェーダー専用です。
次の値は、ID3D11ShaderTrace::GetInitialRegisterContents メソッドを呼び出すことで取得できます。 |
公式ドキュメント
トレースに関する統計情報を指定します。
解説(Remarks)
この API には、Windows 8 用の Windows ソフトウェア開発キット (SDK) が必要です。
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 Structureimport 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