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

D3DPSHADERCAPS2_0

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

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

フィールド

フィールドサイズx64x86説明
CapsDWORD4+0+0ピクセルシェーダ2.0の機能を示すケイパビリティフラグ群。
DynamicFlowControlDepthINT4+4+4動的フロー制御のネスト可能な深さ。
NumTempsINT4+8+8利用可能な一時レジスタ数。
StaticFlowControlDepthINT4+12+12静的フロー制御のネスト可能な深さ。
NumInstructionSlotsINT4+16+16利用可能な命令スロット数。

各言語での定義

#include <windows.h>

// D3DPSHADERCAPS2_0  (x64 20 / x86 20 バイト)
typedef struct D3DPSHADERCAPS2_0 {
    DWORD Caps;
    INT DynamicFlowControlDepth;
    INT NumTemps;
    INT StaticFlowControlDepth;
    INT NumInstructionSlots;
} D3DPSHADERCAPS2_0;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct D3DPSHADERCAPS2_0
{
    public uint Caps;
    public int DynamicFlowControlDepth;
    public int NumTemps;
    public int StaticFlowControlDepth;
    public int NumInstructionSlots;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure D3DPSHADERCAPS2_0
    Public Caps As UInteger
    Public DynamicFlowControlDepth As Integer
    Public NumTemps As Integer
    Public StaticFlowControlDepth As Integer
    Public NumInstructionSlots As Integer
End Structure
import ctypes
from ctypes import wintypes

class D3DPSHADERCAPS2_0(ctypes.Structure):
    _fields_ = [
        ("Caps", wintypes.DWORD),
        ("DynamicFlowControlDepth", ctypes.c_int),
        ("NumTemps", ctypes.c_int),
        ("StaticFlowControlDepth", ctypes.c_int),
        ("NumInstructionSlots", ctypes.c_int),
    ]
#[repr(C)]
pub struct D3DPSHADERCAPS2_0 {
    pub Caps: u32,
    pub DynamicFlowControlDepth: i32,
    pub NumTemps: i32,
    pub StaticFlowControlDepth: i32,
    pub NumInstructionSlots: i32,
}
import "golang.org/x/sys/windows"

type D3DPSHADERCAPS2_0 struct {
	Caps uint32
	DynamicFlowControlDepth int32
	NumTemps int32
	StaticFlowControlDepth int32
	NumInstructionSlots int32
}
type
  D3DPSHADERCAPS2_0 = record
    Caps: DWORD;
    DynamicFlowControlDepth: Integer;
    NumTemps: Integer;
    StaticFlowControlDepth: Integer;
    NumInstructionSlots: Integer;
  end;
const D3DPSHADERCAPS2_0 = extern struct {
    Caps: u32,
    DynamicFlowControlDepth: i32,
    NumTemps: i32,
    StaticFlowControlDepth: i32,
    NumInstructionSlots: i32,
};
type
  D3DPSHADERCAPS2_0 {.bycopy.} = object
    Caps: uint32
    DynamicFlowControlDepth: int32
    NumTemps: int32
    StaticFlowControlDepth: int32
    NumInstructionSlots: int32
struct D3DPSHADERCAPS2_0
{
    uint Caps;
    int DynamicFlowControlDepth;
    int NumTemps;
    int StaticFlowControlDepth;
    int NumInstructionSlots;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; D3DPSHADERCAPS2_0 サイズ: 20 バイト(x64)
dim st, 5    ; 4byte整数×5(構造体サイズ 20 / 4 切り上げ)
; Caps : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; DynamicFlowControlDepth : INT (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; NumTemps : INT (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; StaticFlowControlDepth : INT (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; NumInstructionSlots : INT (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global D3DPSHADERCAPS2_0
    #field int Caps
    #field int DynamicFlowControlDepth
    #field int NumTemps
    #field int StaticFlowControlDepth
    #field int NumInstructionSlots
#endstruct

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