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

D3D10_STATE_BLOCK_MASK

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

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

フィールド

フィールドサイズx64x86説明
VSBYTE1+0+0頂点シェーダーの状態を保存するかどうかを示すブール値です。
VSSamplersBYTE2+1+1頂点シェーダーのサンプラーの配列です。この配列はマルチバイトのビットマスクであり、各ビットが 1 つのサンプラースロットを表します。
VSShaderResourcesBYTE16+3+3頂点シェーダーのリソースの配列です。この配列はマルチバイトのビットマスクであり、各ビットが 1 つのリソーススロットを表します。
VSConstantBuffersBYTE2+19+19頂点シェーダーの定数バッファーの配列です。この配列はマルチバイトのビットマスクであり、各ビットが 1 つの定数バッファースロットを表します。
GSBYTE1+21+21ジオメトリシェーダーの状態を保存するかどうかを示すブール値です。
GSSamplersBYTE2+22+22ジオメトリシェーダーのサンプラーの配列です。この配列はマルチバイトのビットマスクであり、各ビットが 1 つのサンプラースロットを表します。
GSShaderResourcesBYTE16+24+24ジオメトリシェーダーのリソースの配列です。この配列はマルチバイトのビットマスクであり、各ビットが 1 つのリソーススロットを表します。
GSConstantBuffersBYTE2+40+40ジオメトリシェーダーの定数バッファーの配列です。この配列はマルチバイトのビットマスクであり、各ビットが 1 つのバッファースロットを表します。
PSBYTE1+42+42ピクセルシェーダーの状態を保存するかどうかを示すブール値です。
PSSamplersBYTE2+43+43ピクセルシェーダーのサンプラーの配列です。この配列はマルチバイトのビットマスクであり、各ビットが 1 つのサンプラースロットを表します。
PSShaderResourcesBYTE16+45+45ピクセルシェーダーのリソースの配列です。この配列はマルチバイトのビットマスクであり、各ビットが 1 つのリソーススロットを表します。
PSConstantBuffersBYTE2+61+61ピクセルシェーダーの定数バッファーの配列です。この配列はマルチバイトのビットマスクであり、各ビットが 1 つの定数バッファースロットを表します。
IAVertexBuffersBYTE2+63+63頂点バッファーの配列です。この配列はマルチバイトのビットマスクであり、各ビットが 1 つのリソーススロットを表します。
IAIndexBufferBYTE1+65+65インデックスバッファーの状態を保存するかどうかを示すブール値です。
IAInputLayoutBYTE1+66+66入力レイアウトの状態を保存するかどうかを示すブール値です。
IAPrimitiveTopologyBYTE1+67+67プリミティブトポロジーの状態を保存するかどうかを示すブール値です。
OMRenderTargetsBYTE1+68+68レンダーターゲットの状態を保存するかどうかを示すブール値です。
OMDepthStencilStateBYTE1+69+69深度ステンシル状態を保存するかどうかを示すブール値です。
OMBlendStateBYTE1+70+70ブレンド状態を保存するかどうかを示すブール値です。
RSViewportsBYTE1+71+71ビューポートの状態を保存するかどうかを示すブール値です。
RSScissorRectsBYTE1+72+72シザー矩形の状態を保存するかどうかを示すブール値です。
RSRasterizerStateBYTE1+73+73ラスタライザー状態を保存するかどうかを示すブール値です。
SOBuffersBYTE1+74+74ストリーム出力バッファーの状態を保存するかどうかを示すブール値です。
PredicationBYTE1+75+75プレディケーション状態を保存するかどうかを示すブール値です。

公式ドキュメント

デバイスの状態を示します。

解説(Remarks)

ステートブロックマスクは、パスまたはテクニックが変更するデバイスの状態を示します。D3D10StateBlockMaskEnableCapture 関数を使用すると、D3D10_STATE_BLOCK_MASK の配列メンバーに対してビットマスクの範囲を簡単に設定できます。

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

各言語での定義

#include <windows.h>

// D3D10_STATE_BLOCK_MASK  (x64 76 / x86 76 バイト)
typedef struct D3D10_STATE_BLOCK_MASK {
    BYTE VS;
    BYTE VSSamplers[2];
    BYTE VSShaderResources[16];
    BYTE VSConstantBuffers[2];
    BYTE GS;
    BYTE GSSamplers[2];
    BYTE GSShaderResources[16];
    BYTE GSConstantBuffers[2];
    BYTE PS;
    BYTE PSSamplers[2];
    BYTE PSShaderResources[16];
    BYTE PSConstantBuffers[2];
    BYTE IAVertexBuffers[2];
    BYTE IAIndexBuffer;
    BYTE IAInputLayout;
    BYTE IAPrimitiveTopology;
    BYTE OMRenderTargets;
    BYTE OMDepthStencilState;
    BYTE OMBlendState;
    BYTE RSViewports;
    BYTE RSScissorRects;
    BYTE RSRasterizerState;
    BYTE SOBuffers;
    BYTE Predication;
} D3D10_STATE_BLOCK_MASK;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct D3D10_STATE_BLOCK_MASK
{
    public byte VS;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] VSSamplers;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] public byte[] VSShaderResources;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] VSConstantBuffers;
    public byte GS;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] GSSamplers;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] public byte[] GSShaderResources;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] GSConstantBuffers;
    public byte PS;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] PSSamplers;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] public byte[] PSShaderResources;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] PSConstantBuffers;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] IAVertexBuffers;
    public byte IAIndexBuffer;
    public byte IAInputLayout;
    public byte IAPrimitiveTopology;
    public byte OMRenderTargets;
    public byte OMDepthStencilState;
    public byte OMBlendState;
    public byte RSViewports;
    public byte RSScissorRects;
    public byte RSRasterizerState;
    public byte SOBuffers;
    public byte Predication;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure D3D10_STATE_BLOCK_MASK
    Public VS As Byte
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=2)> Public VSSamplers() As Byte
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=16)> Public VSShaderResources() As Byte
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=2)> Public VSConstantBuffers() As Byte
    Public GS As Byte
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=2)> Public GSSamplers() As Byte
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=16)> Public GSShaderResources() As Byte
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=2)> Public GSConstantBuffers() As Byte
    Public PS As Byte
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=2)> Public PSSamplers() As Byte
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=16)> Public PSShaderResources() As Byte
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=2)> Public PSConstantBuffers() As Byte
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=2)> Public IAVertexBuffers() As Byte
    Public IAIndexBuffer As Byte
    Public IAInputLayout As Byte
    Public IAPrimitiveTopology As Byte
    Public OMRenderTargets As Byte
    Public OMDepthStencilState As Byte
    Public OMBlendState As Byte
    Public RSViewports As Byte
    Public RSScissorRects As Byte
    Public RSRasterizerState As Byte
    Public SOBuffers As Byte
    Public Predication As Byte
End Structure
import ctypes
from ctypes import wintypes

class D3D10_STATE_BLOCK_MASK(ctypes.Structure):
    _fields_ = [
        ("VS", ctypes.c_ubyte),
        ("VSSamplers", ctypes.c_ubyte * 2),
        ("VSShaderResources", ctypes.c_ubyte * 16),
        ("VSConstantBuffers", ctypes.c_ubyte * 2),
        ("GS", ctypes.c_ubyte),
        ("GSSamplers", ctypes.c_ubyte * 2),
        ("GSShaderResources", ctypes.c_ubyte * 16),
        ("GSConstantBuffers", ctypes.c_ubyte * 2),
        ("PS", ctypes.c_ubyte),
        ("PSSamplers", ctypes.c_ubyte * 2),
        ("PSShaderResources", ctypes.c_ubyte * 16),
        ("PSConstantBuffers", ctypes.c_ubyte * 2),
        ("IAVertexBuffers", ctypes.c_ubyte * 2),
        ("IAIndexBuffer", ctypes.c_ubyte),
        ("IAInputLayout", ctypes.c_ubyte),
        ("IAPrimitiveTopology", ctypes.c_ubyte),
        ("OMRenderTargets", ctypes.c_ubyte),
        ("OMDepthStencilState", ctypes.c_ubyte),
        ("OMBlendState", ctypes.c_ubyte),
        ("RSViewports", ctypes.c_ubyte),
        ("RSScissorRects", ctypes.c_ubyte),
        ("RSRasterizerState", ctypes.c_ubyte),
        ("SOBuffers", ctypes.c_ubyte),
        ("Predication", ctypes.c_ubyte),
    ]
#[repr(C)]
pub struct D3D10_STATE_BLOCK_MASK {
    pub VS: u8,
    pub VSSamplers: [u8; 2],
    pub VSShaderResources: [u8; 16],
    pub VSConstantBuffers: [u8; 2],
    pub GS: u8,
    pub GSSamplers: [u8; 2],
    pub GSShaderResources: [u8; 16],
    pub GSConstantBuffers: [u8; 2],
    pub PS: u8,
    pub PSSamplers: [u8; 2],
    pub PSShaderResources: [u8; 16],
    pub PSConstantBuffers: [u8; 2],
    pub IAVertexBuffers: [u8; 2],
    pub IAIndexBuffer: u8,
    pub IAInputLayout: u8,
    pub IAPrimitiveTopology: u8,
    pub OMRenderTargets: u8,
    pub OMDepthStencilState: u8,
    pub OMBlendState: u8,
    pub RSViewports: u8,
    pub RSScissorRects: u8,
    pub RSRasterizerState: u8,
    pub SOBuffers: u8,
    pub Predication: u8,
}
import "golang.org/x/sys/windows"

type D3D10_STATE_BLOCK_MASK struct {
	VS byte
	VSSamplers [2]byte
	VSShaderResources [16]byte
	VSConstantBuffers [2]byte
	GS byte
	GSSamplers [2]byte
	GSShaderResources [16]byte
	GSConstantBuffers [2]byte
	PS byte
	PSSamplers [2]byte
	PSShaderResources [16]byte
	PSConstantBuffers [2]byte
	IAVertexBuffers [2]byte
	IAIndexBuffer byte
	IAInputLayout byte
	IAPrimitiveTopology byte
	OMRenderTargets byte
	OMDepthStencilState byte
	OMBlendState byte
	RSViewports byte
	RSScissorRects byte
	RSRasterizerState byte
	SOBuffers byte
	Predication byte
}
type
  D3D10_STATE_BLOCK_MASK = record
    VS: Byte;
    VSSamplers: array[0..1] of Byte;
    VSShaderResources: array[0..15] of Byte;
    VSConstantBuffers: array[0..1] of Byte;
    GS: Byte;
    GSSamplers: array[0..1] of Byte;
    GSShaderResources: array[0..15] of Byte;
    GSConstantBuffers: array[0..1] of Byte;
    PS: Byte;
    PSSamplers: array[0..1] of Byte;
    PSShaderResources: array[0..15] of Byte;
    PSConstantBuffers: array[0..1] of Byte;
    IAVertexBuffers: array[0..1] of Byte;
    IAIndexBuffer: Byte;
    IAInputLayout: Byte;
    IAPrimitiveTopology: Byte;
    OMRenderTargets: Byte;
    OMDepthStencilState: Byte;
    OMBlendState: Byte;
    RSViewports: Byte;
    RSScissorRects: Byte;
    RSRasterizerState: Byte;
    SOBuffers: Byte;
    Predication: Byte;
  end;
const D3D10_STATE_BLOCK_MASK = extern struct {
    VS: u8,
    VSSamplers: [2]u8,
    VSShaderResources: [16]u8,
    VSConstantBuffers: [2]u8,
    GS: u8,
    GSSamplers: [2]u8,
    GSShaderResources: [16]u8,
    GSConstantBuffers: [2]u8,
    PS: u8,
    PSSamplers: [2]u8,
    PSShaderResources: [16]u8,
    PSConstantBuffers: [2]u8,
    IAVertexBuffers: [2]u8,
    IAIndexBuffer: u8,
    IAInputLayout: u8,
    IAPrimitiveTopology: u8,
    OMRenderTargets: u8,
    OMDepthStencilState: u8,
    OMBlendState: u8,
    RSViewports: u8,
    RSScissorRects: u8,
    RSRasterizerState: u8,
    SOBuffers: u8,
    Predication: u8,
};
type
  D3D10_STATE_BLOCK_MASK {.bycopy.} = object
    VS: uint8
    VSSamplers: array[2, uint8]
    VSShaderResources: array[16, uint8]
    VSConstantBuffers: array[2, uint8]
    GS: uint8
    GSSamplers: array[2, uint8]
    GSShaderResources: array[16, uint8]
    GSConstantBuffers: array[2, uint8]
    PS: uint8
    PSSamplers: array[2, uint8]
    PSShaderResources: array[16, uint8]
    PSConstantBuffers: array[2, uint8]
    IAVertexBuffers: array[2, uint8]
    IAIndexBuffer: uint8
    IAInputLayout: uint8
    IAPrimitiveTopology: uint8
    OMRenderTargets: uint8
    OMDepthStencilState: uint8
    OMBlendState: uint8
    RSViewports: uint8
    RSScissorRects: uint8
    RSRasterizerState: uint8
    SOBuffers: uint8
    Predication: uint8
struct D3D10_STATE_BLOCK_MASK
{
    ubyte VS;
    ubyte[2] VSSamplers;
    ubyte[16] VSShaderResources;
    ubyte[2] VSConstantBuffers;
    ubyte GS;
    ubyte[2] GSSamplers;
    ubyte[16] GSShaderResources;
    ubyte[2] GSConstantBuffers;
    ubyte PS;
    ubyte[2] PSSamplers;
    ubyte[16] PSShaderResources;
    ubyte[2] PSConstantBuffers;
    ubyte[2] IAVertexBuffers;
    ubyte IAIndexBuffer;
    ubyte IAInputLayout;
    ubyte IAPrimitiveTopology;
    ubyte OMRenderTargets;
    ubyte OMDepthStencilState;
    ubyte OMBlendState;
    ubyte RSViewports;
    ubyte RSScissorRects;
    ubyte RSRasterizerState;
    ubyte SOBuffers;
    ubyte Predication;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; D3D10_STATE_BLOCK_MASK サイズ: 76 バイト(x64)
dim st, 19    ; 4byte整数×19(構造体サイズ 76 / 4 切り上げ)
; VS : BYTE (+0, 1byte)  poke st,0,値  /  値 = peek(st,0)
; VSSamplers : BYTE (+1, 2byte)  varptr(st)+1 を基点に操作(2byte:入れ子/配列)
; VSShaderResources : BYTE (+3, 16byte)  varptr(st)+3 を基点に操作(16byte:入れ子/配列)
; VSConstantBuffers : BYTE (+19, 2byte)  varptr(st)+19 を基点に操作(2byte:入れ子/配列)
; GS : BYTE (+21, 1byte)  poke st,21,値  /  値 = peek(st,21)
; GSSamplers : BYTE (+22, 2byte)  varptr(st)+22 を基点に操作(2byte:入れ子/配列)
; GSShaderResources : BYTE (+24, 16byte)  varptr(st)+24 を基点に操作(16byte:入れ子/配列)
; GSConstantBuffers : BYTE (+40, 2byte)  varptr(st)+40 を基点に操作(2byte:入れ子/配列)
; PS : BYTE (+42, 1byte)  poke st,42,値  /  値 = peek(st,42)
; PSSamplers : BYTE (+43, 2byte)  varptr(st)+43 を基点に操作(2byte:入れ子/配列)
; PSShaderResources : BYTE (+45, 16byte)  varptr(st)+45 を基点に操作(16byte:入れ子/配列)
; PSConstantBuffers : BYTE (+61, 2byte)  varptr(st)+61 を基点に操作(2byte:入れ子/配列)
; IAVertexBuffers : BYTE (+63, 2byte)  varptr(st)+63 を基点に操作(2byte:入れ子/配列)
; IAIndexBuffer : BYTE (+65, 1byte)  poke st,65,値  /  値 = peek(st,65)
; IAInputLayout : BYTE (+66, 1byte)  poke st,66,値  /  値 = peek(st,66)
; IAPrimitiveTopology : BYTE (+67, 1byte)  poke st,67,値  /  値 = peek(st,67)
; OMRenderTargets : BYTE (+68, 1byte)  poke st,68,値  /  値 = peek(st,68)
; OMDepthStencilState : BYTE (+69, 1byte)  poke st,69,値  /  値 = peek(st,69)
; OMBlendState : BYTE (+70, 1byte)  poke st,70,値  /  値 = peek(st,70)
; RSViewports : BYTE (+71, 1byte)  poke st,71,値  /  値 = peek(st,71)
; RSScissorRects : BYTE (+72, 1byte)  poke st,72,値  /  値 = peek(st,72)
; RSRasterizerState : BYTE (+73, 1byte)  poke st,73,値  /  値 = peek(st,73)
; SOBuffers : BYTE (+74, 1byte)  poke st,74,値  /  値 = peek(st,74)
; Predication : BYTE (+75, 1byte)  poke st,75,値  /  値 = peek(st,75)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global D3D10_STATE_BLOCK_MASK
    #field byte VS
    #field byte VSSamplers 2
    #field byte VSShaderResources 16
    #field byte VSConstantBuffers 2
    #field byte GS
    #field byte GSSamplers 2
    #field byte GSShaderResources 16
    #field byte GSConstantBuffers 2
    #field byte PS
    #field byte PSSamplers 2
    #field byte PSShaderResources 16
    #field byte PSConstantBuffers 2
    #field byte IAVertexBuffers 2
    #field byte IAIndexBuffer
    #field byte IAInputLayout
    #field byte IAPrimitiveTopology
    #field byte OMRenderTargets
    #field byte OMDepthStencilState
    #field byte OMBlendState
    #field byte RSViewports
    #field byte RSScissorRects
    #field byte RSRasterizerState
    #field byte SOBuffers
    #field byte Predication
#endstruct

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