📄 direct3d9.pas
字号:
// Comparison is part of instruction opcode token:
D3DSHADER_COMPARISON_SHIFT = D3DSP_OPCODESPECIFICCONTROL_SHIFT;
D3DSHADER_COMPARISON_MASK = ($7 shl D3DSHADER_COMPARISON_SHIFT);
//---------------------------------------------------------------------
// Predication flags on instruction token
D3DSHADER_INSTRUCTION_PREDICATED = ($1 shl 28);
//---------------------------------------------------------------------
// DCL Info Token Controls
const
// For dcl info tokens requiring a semantic (usage + index)
D3DSP_DCL_USAGE_SHIFT = 0;
D3DSP_DCL_USAGE_MASK = $0000000F;
D3DSP_DCL_USAGEINDEX_SHIFT = 16;
D3DSP_DCL_USAGEINDEX_MASK = $000F0000;
const
// DCL pixel shader sampler info token.
D3DSP_TEXTURETYPE_SHIFT = 27;
D3DSP_TEXTURETYPE_MASK = $78000000;
type
TD3DSamplerTextureType = {$IFNDEF NOENUMS}({$ELSE}LongWord;{$ENDIF}
{$IFDEF NOENUMS}const{$ENDIF}
D3DSTT_UNKNOWN = 0 shl D3DSP_TEXTURETYPE_SHIFT{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // uninitialized value
D3DSTT_2D = 2 shl D3DSP_TEXTURETYPE_SHIFT{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // dcl_2d s# (for declaring a 2-D texture)
D3DSTT_CUBE = 3 shl D3DSP_TEXTURETYPE_SHIFT{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // dcl_cube s# (for declaring a cube texture)
D3DSTT_VOLUME = 4 shl D3DSP_TEXTURETYPE_SHIFT{$IFNDEF NOENUMS}){$ENDIF}; // dcl_volume s# (for declaring a volume texture)
type
TD3DSampler_Texture_Type = TD3DSamplerTextureType;
//
// Parameter Token Bit Definitions
//
const
D3DSP_REGNUM_MASK = $000007FF;
// destination parameter write mask
D3DSP_WRITEMASK_0 = $00010000; // Component 0 (X;Red)
D3DSP_WRITEMASK_1 = $00020000; // Component 1 (Y;Green)
D3DSP_WRITEMASK_2 = $00040000; // Component 2 (Z;Blue)
D3DSP_WRITEMASK_3 = $00080000; // Component 3 (W;Alpha)
D3DSP_WRITEMASK_ALL = $000F0000; // All Components
// destination parameter modifiers
D3DSP_DSTMOD_SHIFT = 20;
D3DSP_DSTMOD_MASK = $00F00000;
// Bit masks for destination parameter modifiers
D3DSPDM_NONE = (0 shl D3DSP_DSTMOD_SHIFT); // nop
D3DSPDM_SATURATE = (1 shl D3DSP_DSTMOD_SHIFT); // clamp to 0. to 1. range
D3DSPDM_PARTIALPRECISION = (2 shl D3DSP_DSTMOD_SHIFT); // Partial precision hint
D3DSPDM_MSAMPCENTROID = (4 shl D3DSP_DSTMOD_SHIFT); // Relevant to multisampling only:
// When the pixel center is not covered, sample
// attribute or compute gradients/LOD
// using multisample "centroid" location.
// "Centroid" is some location within the covered
// region of the pixel.
// destination parameter
D3DSP_DSTSHIFT_SHIFT = 24;
D3DSP_DSTSHIFT_MASK = $0F000000;
// destination/source parameter register type
D3DSP_REGTYPE_SHIFT = 28;
D3DSP_REGTYPE_SHIFT2 = 8;
D3DSP_REGTYPE_MASK = $70000000;
D3DSP_REGTYPE_MASK2 = $00001800;
type
TD3DShaderParamRegisterType = {$IFNDEF NOENUMS}({$ELSE}LongWord;{$ENDIF}
{$IFDEF NOENUMS}const{$ENDIF}
D3DSPR_TEMP = 00{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // Temporary Register File
D3DSPR_INPUT = 01{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // Input Register File
D3DSPR_CONST = 02{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // Constant Register File
D3DSPR_ADDR = 03{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // Address Register (VS)
D3DSPR_TEXTURE = 03{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // Texture Register File (PS)
D3DSPR_RASTOUT = 04{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // Rasterizer Register File
D3DSPR_ATTROUT = 05{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // Attribute Output Register File
D3DSPR_TEXCRDOUT = 06{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // Texture Coordinate Output Register File
D3DSPR_OUTPUT = 06{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // Output register file for VS3.0+
D3DSPR_CONSTINT = 07{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // Constant Integer Vector Register File
D3DSPR_COLOROUT = 08{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // Color Output Register File
D3DSPR_DEPTHOUT = 09{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // Depth Output Register File
D3DSPR_SAMPLER = 10{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // Sampler State Register File
D3DSPR_CONST2 = 11{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // Constant Register File 2048 - 4095
D3DSPR_CONST3 = 12{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // Constant Register File 4096 - 6143
D3DSPR_CONST4 = 13{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // Constant Register File 6144 - 8191
D3DSPR_CONSTBOOL = 14{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // Constant Boolean register file
D3DSPR_LOOP = 15{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // Loop counter register file
D3DSPR_TEMPFLOAT16 = 16{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // 16-bit float temp register file
D3DSPR_MISCTYPE = 17{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // Miscellaneous (single) registers.
D3DSPR_LABEL = 18{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // Label
D3DSPR_PREDICATE = 19{$IFNDEF NOENUMS}){$ENDIF}; // Predicate register
type
TD3DShader_Param_Register_Type = TD3DShaderParamRegisterType;
// The miscellaneous register file (D3DSPR_MISCTYPES)
// contains register types for which there is only ever one
// register (i.e. the register # is not needed).
// Rather than use up additional register types for such
// registers, they are defined
// as particular offsets into the misc. register file:
{$MINENUMSIZE 1}
type
TD3DShaderMisctypeOffsets = {$IFNDEF NOENUMS}({$ELSE}Byte;{$ENDIF}
{$IFDEF NOENUMS}const{$ENDIF}
D3DSMO_POSITION = 0{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // Input position x,y,z,rhw (PS)
D3DSMO_FACE = 1{$IFNDEF NOENUMS}){$ENDIF}; // Floating point primitive area (PS)
{$MINENUMSIZE 4}
type
TD3DShader_Misctype_Offsets = TD3DShaderMisctypeOffsets;
// Register offsets in the Rasterizer Register File
type
TD3DVSRastOutOffsets = {$IFNDEF NOENUMS}({$ELSE}LongWord;{$ENDIF}
{$IFDEF NOENUMS}const{$ENDIF}
D3DSRO_POSITION = 0{$IFNDEF NOENUMS},{$ELSE};{$ENDIF}
D3DSRO_FOG = 1{$IFNDEF NOENUMS},{$ELSE};{$ENDIF}
D3DSRO_POINT_SIZE = 2{$IFNDEF NOENUMS}){$ENDIF};
type
TD3DVS_RastOut_Offsets = TD3DVSRastOutOffsets;
// Source operand addressing modes
const
D3DSHADER_ADDRESSMODE_SHIFT = 13;
D3DSHADER_ADDRESSMODE_MASK = 1 shl D3DSHADER_ADDRESSMODE_SHIFT;
type
TD3DSHADERAddressModeType = {$IFNDEF NOENUMS}({$ELSE}LongWord;{$ENDIF}
{$IFDEF NOENUMS}const{$ENDIF}
D3DSHADER_ADDRMODE_ABSOLUTE = 0 shl D3DSHADER_ADDRESSMODE_SHIFT{$IFNDEF NOENUMS},{$ELSE};{$ENDIF}
D3DSHADER_ADDRMODE_RELATIVE = 1 shl D3DSHADER_ADDRESSMODE_SHIFT{$IFNDEF NOENUMS}){$ENDIF}; // Relative to register A0
type
TD3DSHADER_AddressMode_Type = TD3DSHADERAddressModeType;
const
// Source operand swizzle definitions
//
D3DVS_SWIZZLE_SHIFT = 16;
D3DVS_SWIZZLE_MASK = $00FF0000;
// The following bits define where to take component X from:
D3DVS_X_X = 0 shl D3DVS_SWIZZLE_SHIFT;
D3DVS_X_Y = 1 shl D3DVS_SWIZZLE_SHIFT;
D3DVS_X_Z = 2 shl D3DVS_SWIZZLE_SHIFT;
D3DVS_X_W = 3 shl D3DVS_SWIZZLE_SHIFT;
// The following bits define where to take component Y from:
D3DVS_Y_X = 0 shl (D3DVS_SWIZZLE_SHIFT + 2);
D3DVS_Y_Y = 1 shl (D3DVS_SWIZZLE_SHIFT + 2);
D3DVS_Y_Z = 2 shl (D3DVS_SWIZZLE_SHIFT + 2);
D3DVS_Y_W = 3 shl (D3DVS_SWIZZLE_SHIFT + 2);
// The following bits define where to take component Z from:
D3DVS_Z_X = 0 shl (D3DVS_SWIZZLE_SHIFT + 4);
D3DVS_Z_Y = 1 shl (D3DVS_SWIZZLE_SHIFT + 4);
D3DVS_Z_Z = 2 shl (D3DVS_SWIZZLE_SHIFT + 4);
D3DVS_Z_W = 3 shl (D3DVS_SWIZZLE_SHIFT + 4);
// The following bits define where to take component W from:
D3DVS_W_X = 0 shl (D3DVS_SWIZZLE_SHIFT + 6);
D3DVS_W_Y = 1 shl (D3DVS_SWIZZLE_SHIFT + 6);
D3DVS_W_Z = 2 shl (D3DVS_SWIZZLE_SHIFT + 6);
D3DVS_W_W = 3 shl (D3DVS_SWIZZLE_SHIFT + 6);
// Value when there is no swizzle (X is taken from X; Y is taken from Y;
// Z is taken from Z; W is taken from W
//
D3DVS_NOSWIZZLE = D3DVS_X_X or D3DVS_Y_Y or D3DVS_Z_Z or D3DVS_W_W;
// source parameter swizzle
D3DSP_SWIZZLE_SHIFT = 16;
D3DSP_SWIZZLE_MASK = $00FF0000;
D3DSP_NOSWIZZLE = (0 shl (D3DSP_SWIZZLE_SHIFT + 0)) or
(1 shl (D3DSP_SWIZZLE_SHIFT + 2)) or
(2 shl (D3DSP_SWIZZLE_SHIFT + 4)) or
(3 shl (D3DSP_SWIZZLE_SHIFT + 6));
// pixel-shader swizzle ops
D3DSP_REPLICATERED = (0 shl (D3DSP_SWIZZLE_SHIFT + 0)) or
(0 shl (D3DSP_SWIZZLE_SHIFT + 2)) or
(0 shl (D3DSP_SWIZZLE_SHIFT + 4)) or
(0 shl (D3DSP_SWIZZLE_SHIFT + 6));
D3DSP_REPLICATEGREEN = (1 shl (D3DSP_SWIZZLE_SHIFT + 0)) or
(1 shl (D3DSP_SWIZZLE_SHIFT + 2)) or
(1 shl (D3DSP_SWIZZLE_SHIFT + 4)) or
(1 shl (D3DSP_SWIZZLE_SHIFT + 6));
D3DSP_REPLICATEBLUE = (2 shl (D3DSP_SWIZZLE_SHIFT + 0)) or
(2 shl (D3DSP_SWIZZLE_SHIFT + 2)) or
(2 shl (D3DSP_SWIZZLE_SHIFT + 4)) or
(2 shl (D3DSP_SWIZZLE_SHIFT + 6));
D3DSP_REPLICATEALPHA = (3 shl (D3DSP_SWIZZLE_SHIFT + 0)) or
(3 shl (D3DSP_SWIZZLE_SHIFT + 2)) or
(3 shl (D3DSP_SWIZZLE_SHIFT + 4)) or
(3 shl (D3DSP_SWIZZLE_SHIFT + 6));
// source parameter modifiers
D3DSP_SRCMOD_SHIFT = 24;
D3DSP_SRCMOD_MASK = $0F000000;
type TD3DShaderParamSRCModType = {$IFNDEF NOENUMS}({$ELSE}LongWord;{$ENDIF}
{$IFDEF NOENUMS}const{$ENDIF}
D3DSPSM_NONE = 0 shl D3DSP_SRCMOD_SHIFT{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // nop
D3DSPSM_NEG = 1 shl D3DSP_SRCMOD_SHIFT{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // negate
D3DSPSM_BIAS = 2 shl D3DSP_SRCMOD_SHIFT{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // bias
D3DSPSM_BIASNEG = 3 shl D3DSP_SRCMOD_SHIFT{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // bias and negate
D3DSPSM_SIGN = 4 shl D3DSP_SRCMOD_SHIFT{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // sign
D3DSPSM_SIGNNEG = 5 shl D3DSP_SRCMOD_SHIFT{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // sign and negate
D3DSPSM_COMP = 6 shl D3DSP_SRCMOD_SHIFT{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // complement
D3DSPSM_X2 = 7 shl D3DSP_SRCMOD_SHIFT{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // *2
D3DSPSM_X2NEG = 8 shl D3DSP_SRCMOD_SHIFT{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // *2 and negate
D3DSPSM_DZ = 9 shl D3DSP_SRCMOD_SHIFT{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // divide through by z component
D3DSPSM_DW = 10 shl D3DSP_SRCMOD_SHIFT{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // divide through by w component
D3DSPSM_ABS = 11 shl D3DSP_SRCMOD_SHIFT{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // abs()
D3DSPSM_ABSNEG = 12 shl D3DSP_SRCMOD_SHIFT{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // -abs()
D3DSPSM_NOT = 13 shl D3DSP_SRCMOD_SHIFT{$IFNDEF NOENUMS}){$ENDIF}; // for predicate register: "!p0"
type
TD3DShader_Param_SRCMod_Type = TD3DShaderParamSRCModType;
// pixel sha
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -