ホーム › Graphics.Direct3D10 › D3D10_SHADER_DEBUG_INST_INFO
D3D10_SHADER_DEBUG_INST_INFO
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| Id | DWORD | 4 | +0 | +0 | 命令を一意に識別するID。 |
| Opcode | DWORD | 4 | +4 | +4 | 命令のオペコード。 |
| uOutputs | DWORD | 4 | +8 | +8 | この命令の出力数。 |
| pOutputs | D3D10_SHADER_DEBUG_OUTPUTREG_INFO | 360 | +12 | +12 | 出力レジスタ情報(2要素)。 |
| TokenId | DWORD | 4 | +372 | +372 | 対応するソーストークンのID。 |
| NestingLevel | DWORD | 4 | +376 | +376 | 命令のネスト(入れ子)レベル。 |
| Scopes | DWORD | 4 | +380 | +380 | この命令で有効なスコープの数。 |
| ScopeInfo | DWORD | 4 | +384 | +384 | スコープ情報へのインデックス。 |
| AccessedVars | DWORD | 4 | +388 | +388 | アクセスされた変数の数。 |
| AccessedVarsInfo | DWORD | 4 | +392 | +392 | アクセスされた変数情報へのインデックス。 |
各言語での定義
#include <windows.h>
// D3D10_SHADER_DEBUG_OUTPUTVAR (x64 36 / x86 36 バイト)
typedef struct D3D10_SHADER_DEBUG_OUTPUTVAR {
DWORD Var;
DWORD uValueMin;
DWORD uValueMax;
INT iValueMin;
INT iValueMax;
FLOAT fValueMin;
FLOAT fValueMax;
BOOL bNaNPossible;
BOOL bInfPossible;
} D3D10_SHADER_DEBUG_OUTPUTVAR;
// D3D10_SHADER_DEBUG_OUTPUTREG_INFO (x64 180 / x86 180 バイト)
typedef struct D3D10_SHADER_DEBUG_OUTPUTREG_INFO {
D3D10_SHADER_DEBUG_REGTYPE OutputRegisterSet;
DWORD OutputReg;
DWORD TempArrayReg;
DWORD OutputComponents[4];
D3D10_SHADER_DEBUG_OUTPUTVAR OutputVars[4];
DWORD IndexReg;
DWORD IndexComp;
} D3D10_SHADER_DEBUG_OUTPUTREG_INFO;
// D3D10_SHADER_DEBUG_INST_INFO (x64 396 / x86 396 バイト)
typedef struct D3D10_SHADER_DEBUG_INST_INFO {
DWORD Id;
DWORD Opcode;
DWORD uOutputs;
D3D10_SHADER_DEBUG_OUTPUTREG_INFO pOutputs[2];
DWORD TokenId;
DWORD NestingLevel;
DWORD Scopes;
DWORD ScopeInfo;
DWORD AccessedVars;
DWORD AccessedVarsInfo;
} D3D10_SHADER_DEBUG_INST_INFO;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct D3D10_SHADER_DEBUG_OUTPUTVAR
{
public uint Var;
public uint uValueMin;
public uint uValueMax;
public int iValueMin;
public int iValueMax;
public float fValueMin;
public float fValueMax;
[MarshalAs(UnmanagedType.Bool)] public bool bNaNPossible;
[MarshalAs(UnmanagedType.Bool)] public bool bInfPossible;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct D3D10_SHADER_DEBUG_OUTPUTREG_INFO
{
public int OutputRegisterSet;
public uint OutputReg;
public uint TempArrayReg;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public uint[] OutputComponents;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public D3D10_SHADER_DEBUG_OUTPUTVAR[] OutputVars;
public uint IndexReg;
public uint IndexComp;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct D3D10_SHADER_DEBUG_INST_INFO
{
public uint Id;
public uint Opcode;
public uint uOutputs;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public D3D10_SHADER_DEBUG_OUTPUTREG_INFO[] pOutputs;
public uint TokenId;
public uint NestingLevel;
public uint Scopes;
public uint ScopeInfo;
public uint AccessedVars;
public uint AccessedVarsInfo;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure D3D10_SHADER_DEBUG_OUTPUTVAR
Public Var As UInteger
Public uValueMin As UInteger
Public uValueMax As UInteger
Public iValueMin As Integer
Public iValueMax As Integer
Public fValueMin As Single
Public fValueMax As Single
<MarshalAs(UnmanagedType.Bool)> Public bNaNPossible As Boolean
<MarshalAs(UnmanagedType.Bool)> Public bInfPossible As Boolean
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure D3D10_SHADER_DEBUG_OUTPUTREG_INFO
Public OutputRegisterSet As Integer
Public OutputReg As UInteger
Public TempArrayReg As UInteger
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=4)> Public OutputComponents() As UInteger
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=4)> Public OutputVars() As D3D10_SHADER_DEBUG_OUTPUTVAR
Public IndexReg As UInteger
Public IndexComp As UInteger
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure D3D10_SHADER_DEBUG_INST_INFO
Public Id As UInteger
Public Opcode As UInteger
Public uOutputs As UInteger
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=2)> Public pOutputs() As D3D10_SHADER_DEBUG_OUTPUTREG_INFO
Public TokenId As UInteger
Public NestingLevel As UInteger
Public Scopes As UInteger
Public ScopeInfo As UInteger
Public AccessedVars As UInteger
Public AccessedVarsInfo As UInteger
End Structureimport ctypes
from ctypes import wintypes
class D3D10_SHADER_DEBUG_OUTPUTVAR(ctypes.Structure):
_fields_ = [
("Var", wintypes.DWORD),
("uValueMin", wintypes.DWORD),
("uValueMax", wintypes.DWORD),
("iValueMin", ctypes.c_int),
("iValueMax", ctypes.c_int),
("fValueMin", ctypes.c_float),
("fValueMax", ctypes.c_float),
("bNaNPossible", wintypes.BOOL),
("bInfPossible", wintypes.BOOL),
]
class D3D10_SHADER_DEBUG_OUTPUTREG_INFO(ctypes.Structure):
_fields_ = [
("OutputRegisterSet", ctypes.c_int),
("OutputReg", wintypes.DWORD),
("TempArrayReg", wintypes.DWORD),
("OutputComponents", wintypes.DWORD * 4),
("OutputVars", D3D10_SHADER_DEBUG_OUTPUTVAR * 4),
("IndexReg", wintypes.DWORD),
("IndexComp", wintypes.DWORD),
]
class D3D10_SHADER_DEBUG_INST_INFO(ctypes.Structure):
_fields_ = [
("Id", wintypes.DWORD),
("Opcode", wintypes.DWORD),
("uOutputs", wintypes.DWORD),
("pOutputs", D3D10_SHADER_DEBUG_OUTPUTREG_INFO * 2),
("TokenId", wintypes.DWORD),
("NestingLevel", wintypes.DWORD),
("Scopes", wintypes.DWORD),
("ScopeInfo", wintypes.DWORD),
("AccessedVars", wintypes.DWORD),
("AccessedVarsInfo", wintypes.DWORD),
]#[repr(C)]
pub struct D3D10_SHADER_DEBUG_OUTPUTVAR {
pub Var: u32,
pub uValueMin: u32,
pub uValueMax: u32,
pub iValueMin: i32,
pub iValueMax: i32,
pub fValueMin: f32,
pub fValueMax: f32,
pub bNaNPossible: i32,
pub bInfPossible: i32,
}
#[repr(C)]
pub struct D3D10_SHADER_DEBUG_OUTPUTREG_INFO {
pub OutputRegisterSet: i32,
pub OutputReg: u32,
pub TempArrayReg: u32,
pub OutputComponents: [u32; 4],
pub OutputVars: [D3D10_SHADER_DEBUG_OUTPUTVAR; 4],
pub IndexReg: u32,
pub IndexComp: u32,
}
#[repr(C)]
pub struct D3D10_SHADER_DEBUG_INST_INFO {
pub Id: u32,
pub Opcode: u32,
pub uOutputs: u32,
pub pOutputs: [D3D10_SHADER_DEBUG_OUTPUTREG_INFO; 2],
pub TokenId: u32,
pub NestingLevel: u32,
pub Scopes: u32,
pub ScopeInfo: u32,
pub AccessedVars: u32,
pub AccessedVarsInfo: u32,
}import "golang.org/x/sys/windows"
type D3D10_SHADER_DEBUG_OUTPUTVAR struct {
Var uint32
uValueMin uint32
uValueMax uint32
iValueMin int32
iValueMax int32
fValueMin float32
fValueMax float32
bNaNPossible int32
bInfPossible int32
}
type D3D10_SHADER_DEBUG_OUTPUTREG_INFO struct {
OutputRegisterSet int32
OutputReg uint32
TempArrayReg uint32
OutputComponents [4]uint32
OutputVars [4]D3D10_SHADER_DEBUG_OUTPUTVAR
IndexReg uint32
IndexComp uint32
}
type D3D10_SHADER_DEBUG_INST_INFO struct {
Id uint32
Opcode uint32
uOutputs uint32
pOutputs [2]D3D10_SHADER_DEBUG_OUTPUTREG_INFO
TokenId uint32
NestingLevel uint32
Scopes uint32
ScopeInfo uint32
AccessedVars uint32
AccessedVarsInfo uint32
}type
D3D10_SHADER_DEBUG_OUTPUTVAR = record
Var: DWORD;
uValueMin: DWORD;
uValueMax: DWORD;
iValueMin: Integer;
iValueMax: Integer;
fValueMin: Single;
fValueMax: Single;
bNaNPossible: BOOL;
bInfPossible: BOOL;
end;
D3D10_SHADER_DEBUG_OUTPUTREG_INFO = record
OutputRegisterSet: Integer;
OutputReg: DWORD;
TempArrayReg: DWORD;
OutputComponents: array[0..3] of DWORD;
OutputVars: array[0..3] of D3D10_SHADER_DEBUG_OUTPUTVAR;
IndexReg: DWORD;
IndexComp: DWORD;
end;
D3D10_SHADER_DEBUG_INST_INFO = record
Id: DWORD;
Opcode: DWORD;
uOutputs: DWORD;
pOutputs: array[0..1] of D3D10_SHADER_DEBUG_OUTPUTREG_INFO;
TokenId: DWORD;
NestingLevel: DWORD;
Scopes: DWORD;
ScopeInfo: DWORD;
AccessedVars: DWORD;
AccessedVarsInfo: DWORD;
end;const D3D10_SHADER_DEBUG_OUTPUTVAR = extern struct {
Var: u32,
uValueMin: u32,
uValueMax: u32,
iValueMin: i32,
iValueMax: i32,
fValueMin: f32,
fValueMax: f32,
bNaNPossible: i32,
bInfPossible: i32,
};
const D3D10_SHADER_DEBUG_OUTPUTREG_INFO = extern struct {
OutputRegisterSet: i32,
OutputReg: u32,
TempArrayReg: u32,
OutputComponents: [4]u32,
OutputVars: [4]D3D10_SHADER_DEBUG_OUTPUTVAR,
IndexReg: u32,
IndexComp: u32,
};
const D3D10_SHADER_DEBUG_INST_INFO = extern struct {
Id: u32,
Opcode: u32,
uOutputs: u32,
pOutputs: [2]D3D10_SHADER_DEBUG_OUTPUTREG_INFO,
TokenId: u32,
NestingLevel: u32,
Scopes: u32,
ScopeInfo: u32,
AccessedVars: u32,
AccessedVarsInfo: u32,
};type
D3D10_SHADER_DEBUG_OUTPUTVAR {.bycopy.} = object
Var: uint32
uValueMin: uint32
uValueMax: uint32
iValueMin: int32
iValueMax: int32
fValueMin: float32
fValueMax: float32
bNaNPossible: int32
bInfPossible: int32
D3D10_SHADER_DEBUG_OUTPUTREG_INFO {.bycopy.} = object
OutputRegisterSet: int32
OutputReg: uint32
TempArrayReg: uint32
OutputComponents: array[4, uint32]
OutputVars: array[4, D3D10_SHADER_DEBUG_OUTPUTVAR]
IndexReg: uint32
IndexComp: uint32
D3D10_SHADER_DEBUG_INST_INFO {.bycopy.} = object
Id: uint32
Opcode: uint32
uOutputs: uint32
pOutputs: array[2, D3D10_SHADER_DEBUG_OUTPUTREG_INFO]
TokenId: uint32
NestingLevel: uint32
Scopes: uint32
ScopeInfo: uint32
AccessedVars: uint32
AccessedVarsInfo: uint32struct D3D10_SHADER_DEBUG_OUTPUTVAR
{
uint Var;
uint uValueMin;
uint uValueMax;
int iValueMin;
int iValueMax;
float fValueMin;
float fValueMax;
int bNaNPossible;
int bInfPossible;
}
struct D3D10_SHADER_DEBUG_OUTPUTREG_INFO
{
int OutputRegisterSet;
uint OutputReg;
uint TempArrayReg;
uint[4] OutputComponents;
D3D10_SHADER_DEBUG_OUTPUTVAR[4] OutputVars;
uint IndexReg;
uint IndexComp;
}
struct D3D10_SHADER_DEBUG_INST_INFO
{
uint Id;
uint Opcode;
uint uOutputs;
D3D10_SHADER_DEBUG_OUTPUTREG_INFO[2] pOutputs;
uint TokenId;
uint NestingLevel;
uint Scopes;
uint ScopeInfo;
uint AccessedVars;
uint AccessedVarsInfo;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; D3D10_SHADER_DEBUG_INST_INFO サイズ: 396 バイト(x64)
dim st, 99 ; 4byte整数×99(構造体サイズ 396 / 4 切り上げ)
; Id : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; Opcode : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; uOutputs : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; pOutputs : D3D10_SHADER_DEBUG_OUTPUTREG_INFO (+12, 360byte) varptr(st)+12 を基点に操作(360byte:入れ子/配列)
; TokenId : DWORD (+372, 4byte) st.93 = 値 / 値 = st.93 (lpoke/lpeek も可)
; NestingLevel : DWORD (+376, 4byte) st.94 = 値 / 値 = st.94 (lpoke/lpeek も可)
; Scopes : DWORD (+380, 4byte) st.95 = 値 / 値 = st.95 (lpoke/lpeek も可)
; ScopeInfo : DWORD (+384, 4byte) st.96 = 値 / 値 = st.96 (lpoke/lpeek も可)
; AccessedVars : DWORD (+388, 4byte) st.97 = 値 / 値 = st.97 (lpoke/lpeek も可)
; AccessedVarsInfo : DWORD (+392, 4byte) st.98 = 値 / 値 = st.98 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global D3D10_SHADER_DEBUG_OUTPUTVAR
#field int Var
#field int uValueMin
#field int uValueMax
#field int iValueMin
#field int iValueMax
#field float fValueMin
#field float fValueMax
#field bool bNaNPossible
#field bool bInfPossible
#endstruct
#defstruct global D3D10_SHADER_DEBUG_OUTPUTREG_INFO
#field int OutputRegisterSet
#field int OutputReg
#field int TempArrayReg
#field int OutputComponents 4
#field D3D10_SHADER_DEBUG_OUTPUTVAR OutputVars 4
#field int IndexReg
#field int IndexComp
#endstruct
#defstruct global D3D10_SHADER_DEBUG_INST_INFO
#field int Id
#field int Opcode
#field int uOutputs
#field D3D10_SHADER_DEBUG_OUTPUTREG_INFO pOutputs 2
#field int TokenId
#field int NestingLevel
#field int Scopes
#field int ScopeInfo
#field int AccessedVars
#field int AccessedVarsInfo
#endstruct
stdim st, D3D10_SHADER_DEBUG_INST_INFO ; NSTRUCT 変数を確保
st->Id = 100
mes "Id=" + st->Id