Winapi.D3D11Shader.pas這個單元用于DirectCompute 異構計算,是把裡面的英文注釋翻譯了一下。
{*******************************************************}
{ }
{ Delphi Runtime Library }
{ }
{ Files: D3D11Shader.h }
{ Copyright (C) Microsoft Corporation. }
{ All Rights Reserved. }
{ }
{ Translator: Embarcadero Technologies, Inc. }
{ Copyright(c) 1995-2017 Embarcadero Technologies, Inc. }
{ All rights reserved }
{ }
{*******************************************************}
unit Winapi.D3D11Shader;
{$ALIGN ON}
{$MINENUMSIZE 4}
{$WEAKPACKAGEUNIT}
interface
//
//
// 檔案: D3D11Shader.h
// 内容: D3D11 着色器類型和API
//
//
uses
Winapi.D3DCommon,
Winapi.Windows;
type
D3D11_SHADER_VERSION_TYPE = (
D3D11_SHVER_PIXEL_SHADER = 0,
{$EXTERNALSYM D3D11_SHVER_PIXEL_SHADER}
D3D11_SHVER_VERTEX_SHADER = 1,
{$EXTERNALSYM D3D11_SHVER_VERTEX_SHADER}
D3D11_SHVER_GEOMETRY_SHADER = 2,
{$EXTERNALSYM D3D11_SHVER_GEOMETRY_SHADER}
// D3D11 Shaders
D3D11_SHVER_HULL_SHADER = 3,
{$EXTERNALSYM D3D11_SHVER_HULL_SHADER}
D3D11_SHVER_DOMAIN_SHADER = 4,
{$EXTERNALSYM D3D11_SHVER_DOMAIN_SHADER}
D3D11_SHVER_COMPUTE_SHADER = 5);
{$EXTERNALSYM D3D11_SHVER_COMPUTE_SHADER}
{$EXTERNALSYM D3D11_SHADER_VERSION_TYPE}
TD3D11ShaderVersionType = D3D11_SHADER_VERSION_TYPE;
{$EXTERNALSYM D3D11_SHADER_VERSION_TYPE}
// Parameter flags. 參數标志。
type
D3D_RESOURCE_RETURN_TYPE = record end;
{$EXTERNALSYM D3D_RESOURCE_RETURN_TYPE}
D3D11_CBUFFER_TYPE = record end;
{$EXTERNALSYM D3D11_CBUFFER_TYPE}
_D3D11_SIGNATURE_PARAMETER_DESC = record
SemanticName: LPCSTR; // 語義的名稱
SemanticIndex: UINT; // 語義索引
_Register: UINT; // 成員變量數
SystemValueType: D3D_NAME; // 一個預定義的系統值,或D3D_NAME_UNDEFINED(如果不适用)
ComponentType: D3D_REGISTER_COMPONENT_TYPE; // 标量類型(如uint、float等)
Mask: BYTE; // 掩碼用于訓示使用寄存器的哪些元件
// (D3D10_COMPONENT_MASK值的組合)
ReadWriteMask: BYTE; // 掩碼用于訓示給定元件是從不寫入(如果這是輸出信号),
// 還是始終讀取(如果這是輸入信号)。
// (D3D10_COMPONENT_MASK值的組合)
//
Stream: UINT; // 流索引
MinPrecision: D3D_MIN_PRECISION; // 最小期望插值精度
end;
{$EXTERNALSYM _D3D11_SIGNATURE_PARAMETER_DESC}
D3D11_SIGNATURE_PARAMETER_DESC = _D3D11_SIGNATURE_PARAMETER_DESC;
{$EXTERNALSYM D3D11_SIGNATURE_PARAMETER_DESC}
TD3D11SignatureParameterDesc = D3D11_SIGNATURE_PARAMETER_DESC;
_D3D11_SHADER_BUFFER_DESC = record
Name: LPCSTR; // 常量緩沖區的名稱
_Type: D3D_CBUFFER_TYPE; // 訓示緩沖區内容的類型
Variables: UINT; // 成員變量數
Size: UINT; // CB大小(位元組)
uFlags: UINT; // 緩沖區描述标志
end;
{$EXTERNALSYM _D3D11_SHADER_BUFFER_DESC}
D3D11_SHADER_BUFFER_DESC = _D3D11_SHADER_BUFFER_DESC;
{$EXTERNALSYM D3D11_SHADER_BUFFER_DESC}
PD3D11ShaderBufferDesc = ^D3D11_SHADER_BUFFER_DESC;
TD3D11ShaderBufferDesc = D3D11_SHADER_BUFFER_DESC;
_D3D11_SHADER_VARIABLE_DESC = record
Name: LPCSTR; // 變量名
StartOffset: UINT; // 固定緩沖區的後備存儲器中的偏移量
Size: UINT; // 變量的大小(以位元組為機關)
uFlags: UINT; // 變量的标志
DefaultValue: LPVOID; // 原始指針預設值
StartTexture: UINT; // 第一個紋理索引 (或者-1,如果沒有使用紋理)
TextureSize: UINT; // 可能使用的紋理槽數。
StartSampler: UINT; // 第一個采樣器索引 (或者-1,如果沒有使用紋理)
SamplerSize: UINT; // 可能使用的采樣器槽數。
end;
{$EXTERNALSYM _D3D11_SHADER_VARIABLE_DESC}
D3D11_SHADER_VARIABLE_DESC = _D3D11_SHADER_VARIABLE_DESC;
{$EXTERNALSYM D3D11_SHADER_VARIABLE_DESC}
TD3D11ShaderVariableDesc = D3D11_SHADER_VARIABLE_DESC;
_D3D11_SHADER_TYPE_DESC = record
_Class: D3D_SHADER_VARIABLE_CLASS; // 變量類(例如對象、矩陣等)
_Type: D3D_SHADER_VARIABLE_TYPE; // 變量類型(如浮點、取樣器等)
Rows: UINT; // 行數(對矩陣;其他為1;如果不适用,為0) (for matrices, 1 for other numeric, 0 if not applicable)
Columns: UINT; // 列數 (對向量和矩陣;其他為1;如果不适用,為0)
Elements: UINT; // 元素數 (如果不是數組則為0)
Members: UINT; // 成員數 (如果不是一個結構則為0)
Offset: UINT; // 從結構開始處的的偏移量(如果不是結構成員則為0)
Name: LPCSTR; // 類型名,可以為NULL
end;
{$EXTERNALSYM _D3D11_SHADER_TYPE_DESC}
D3D11_SHADER_TYPE_DESC = _D3D11_SHADER_TYPE_DESC;
{$EXTERNALSYM D3D11_SHADER_TYPE_DESC}
PD3D11ShaderTypeDesc = ^D3D11_SHADER_TYPE_DESC;
TD3D11ShaderTypeDesc = D3D11_SHADER_TYPE_DESC;
D3D11_TESSELLATOR_DOMAIN = record end;
D3D11_TESSELLATOR_PARTITIONING = record end;
D3D11_TESSELLATOR_OUTPUT_PRIMITIVE = record end;
_D3D11_SHADER_DESC = record
Version: UINT; // 着色器版本
Creator: LPCSTR; // 創造者的字元串
Flags: UINT; // 着色器編譯/解析标志
ConstantBuffers: UINT; // 常量緩沖器數量
BoundResources: UINT; // 綁定資源數量
InputParameters: UINT; // 輸入信号中的參數數量
OutputParameters: UINT; // 輸出信号中的參數數量
InstructionCount: UINT; // 發出指令數量
TempRegisterCount: UINT; // 使用的臨時寄存器的數量
TempArrayCount: UINT; // 使用的臨時數組的數量
DefCount: UINT; // 常量定義的數量
DclCount: UINT; // 聲明數量(輸入+輸出)
TextureNormalInstructions: UINT; // 非分類紋理指令的數量
TextureLoadInstructions: UINT; // Number of texture load instructions
TextureCompInstructions: UINT; // 紋理加載指令的數量
TextureBiasInstructions: UINT; // 紋理偏置指令的數量
TextureGradientInstructions: UINT; // 紋理漸變指令的數量
FloatInstructionCount: UINT; // 使用的浮點算術指令數量
IntInstructionCount: UINT; // 使用的有符号整數算術指令的數目
UintInstructionCount: UINT; // 使用的無符号整數算術指令數
StaticFlowControlCount: UINT; // 使用的靜态流控制指令的數量
DynamicFlowControlCount: UINT; //使用的動态流控制指令的數量
MacroInstructionCount: UINT; // 使用的宏指令的數量
ArrayInstructionCount: UINT; // 使用的數組指令數
CutInstructionCount: UINT; // 使用的剪切(CUT)指令的數量
EmitInstructionCount: UINT; // 發出指令的數量
GSOutputTopology: D3D_PRIMITIVE_TOPOLOGY; // Geometry shader output topology幾何着色器輸出拓撲
GSMaxOutputVertexCount: UINT; // 幾何着色器最大的輸出頂點計數
InputPrimitive: D3D_PRIMITIVE; // GS/HS input primitive GS / HS輸入圖元
PatchConstantParameters: UINT; // 更新檔常數信号中的參數數量
cGSInstanceCount: UINT; // 幾何着色器執行個體的數量
cControlPoints: UINT; //HS->DS階段中控制點數量
HSOutputPrimitive: D3D_TESSELLATOR_OUTPUT_PRIMITIVE; // Primitive output by the tessellator 由鑲嵌器輸出的圖元
HSPartitioning: D3D_TESSELLATOR_PARTITIONING; // 鑲嵌器的劃分模式
TessellatorDomain: D3D_TESSELLATOR_DOMAIN; // 鑲嵌器域 (四、三、等值線)
// 指令數
cBarrierInstructions: UINT; // Number of barrier instructions in a compute shader 計算着色器中的障礙指令數
cInterlockedInstructions: UINT; // Number of interlocked instructions 互鎖指令的數量
cTextureStoreInstructions: UINT; // 紋理寫入數
end;
{$EXTERNALSYM _D3D11_SHADER_DESC}
D3D11_SHADER_DESC = _D3D11_SHADER_DESC;
{$EXTERNALSYM D3D11_SHADER_DESC}
TD3D11ShaderDesc = D3D11_SHADER_DESC;
_D3D11_SHADER_INPUT_BIND_DESC = record
Name: LPCSTR; // 資源名稱
_Type: D3D_SHADER_INPUT_TYPE; // 資源類型 (例如紋理、cbuffer等。)
BindPoint: UINT; // 綁定點開始
BindCount: UINT; // 連續綁定點的數量(用于數組)
uFlags: UINT; // 輸入綁定的标志
ReturnType: D3D_RESOURCE_RETURN_TYPE; // 傳回類型(若紋理)
Dimension: D3D_SRV_DIMENSION; // 次元(如果紋理)
NumSamples: UINT; // 樣本數量(如果不是MS紋理,則為0)
end;
{$EXTERNALSYM _D3D11_SHADER_INPUT_BIND_DESC}
D3D11_SHADER_INPUT_BIND_DESC = _D3D11_SHADER_INPUT_BIND_DESC;
{$EXTERNALSYM D3D11_SHADER_INPUT_BIND_DESC}
TD3D11ShaderInputBindDesc = D3D11_SHADER_INPUT_BIND_DESC;
const
D3D_SHADER_REQUIRES_DOUBLES = $00000001;
{$EXTERNALSYM D3D_SHADER_REQUIRES_DOUBLES}
D3D_SHADER_REQUIRES_EARLY_DEPTH_STENCIL = $00000002;
{$EXTERNALSYM D3D_SHADER_REQUIRES_EARLY_DEPTH_STENCIL}
D3D_SHADER_REQUIRES_UAVS_AT_EVERY_STAGE = $00000004;
{$EXTERNALSYM D3D_SHADER_REQUIRES_UAVS_AT_EVERY_STAGE}
D3D_SHADER_REQUIRES_64_UAVS = $00000008;
{$EXTERNALSYM D3D_SHADER_REQUIRES_64_UAVS}
D3D_SHADER_REQUIRES_MINIMUM_PRECISION = $00000010;
{$EXTERNALSYM D3D_SHADER_REQUIRES_MINIMUM_PRECISION}
D3D_SHADER_REQUIRES_11_1_DOUBLE_EXTENSIONS = $00000020;
{$EXTERNALSYM D3D_SHADER_REQUIRES_11_1_DOUBLE_EXTENSIONS}
D3D_SHADER_REQUIRES_11_1_SHADER_EXTENSIONS = $00000040;
{$EXTERNALSYM D3D_SHADER_REQUIRES_11_1_SHADER_EXTENSIONS}
D3D_SHADER_REQUIRES_LEVEL_9_COMPARISON_FILTERING = $00000080;
{$EXTERNALSYM D3D_SHADER_REQUIRES_LEVEL_9_COMPARISON_FILTERING}
D3D_SHADER_REQUIRES_TILED_RESOURCES = $00000100;
{$EXTERNALSYM D3D_SHADER_REQUIRES_TILED_RESOURCES}
type
_D3D11_LIBRARY_DESC = record
Creator: LPCSTR; // 庫創始人的名字。
Flags: UINT; // 編譯标志.
FunctionCount: UINT;// 從庫導出的函數的數量。
end;
{$EXTERNALSYM _D3D11_LIBRARY_DESC}
D3D11_LIBRARY_DESC = _D3D11_LIBRARY_DESC;
{$EXTERNALSYM D3D11_LIBRARY_DESC}
TD3D11LibraryDesc = D3D11_LIBRARY_DESC;
PD3D11LibraryDesc = ^TD3D11LibraryDesc;
_D3D11_FUNCTION_DESC = record
Version: UINT; // 着色器版本
Creator: LPCSTR; // 建立者的字元串
Flags: UINT; // 着色器編譯/解析标志
ConstantBuffers: UINT; // 常量緩沖器數量
BoundResources: UINT; // 綁定資源數量
InstructionCount: UINT; // 發出指令數量
TempRegisterCount: UINT; // 使用的臨時寄存器的數量
TempArrayCount: UINT; // 使用的臨時數組的數量
DefCount: UINT; // 常量定義數量
DclCount: UINT; // 聲明數量(輸入+輸出)
TextureNormalInstructions: UINT; // 非分類紋理指令的數量
TextureLoadInstructions: UINT; // 紋理加載指令的數量
TextureCompInstructions: UINT; // 紋理比較指令的數目
TextureBiasInstructions: UINT; // Number of texture bias instructions 紋理偏置指令的數量
TextureGradientInstructions: UINT; // 紋理漸變指令的數量
FloatInstructionCount: UINT; // 使用的浮點算術指令數
IntInstructionCount: UINT; // 使用的有符号整數算術指令的數目
UintInstructionCount: UINT; // 使用的無符号整數算術指令數
StaticFlowControlCount: UINT; // 使用的靜态流控制指令的數量
DynamicFlowControlCount: UINT; // 使用的動态流控制指令的數量
MacroInstructionCount: UINT; // 使用的宏指令的數量
ArrayInstructionCount: UINT; // 使用的數組指令數
MovInstructionCount: UINT; // 使用了mov指令數量
MovcInstructionCount: UINT; // 使用的movc指令的數量
ConversionInstructionCount: UINT; // 使用的類型轉換指令的數量
BitwiseInstructionCount: UINT; // 使用的按位運算指令的數量
MinFeatureLevel: D3D_FEATURE_LEVEL; // Min target of the function byte code 函數位元組碼的最小目标
RequiredFeatureFlags: UINT64; // 所需的特性标志
Name: LPCSTR; // 函數名
FunctionParameterCount: Integer; // 函數信号中的邏輯參數數(不包括傳回值)
HasReturn: BOOL; // 為TRUE——表明函數傳回一個值;為false——表明它是一個子例程。
Has10Level9VertexShader: BOOL; // 為TRUE—— 有一個 10L9 VS(頂點着色器) blob
Has10Level9PixelShader: BOOL; // 為TRUE—— 有一個 10L9 PS(像素着色器) blob
end;
{$EXTERNALSYM _D3D11_FUNCTION_DESC}
D3D11_FUNCTION_DESC = _D3D11_FUNCTION_DESC;
{$EXTERNALSYM D3D11_FUNCTION_DESC}
TD3D11FunctionDesc = D3D11_FUNCTION_DESC;
PD3D11FunctionDesc = ^TD3D11FunctionDesc;
_D3D11_PARAMETER_DESC = record
Name: LPCSTR; // 參數名稱。
SemanticName: LPCSTR; // 參數語義名稱(+索引)。
_Type: D3D_SHADER_VARIABLE_TYPE; // 元素類型。
_Class: D3D_SHADER_VARIABLE_CLASS; // 标量/向量/矩陣。
Rows: UINT; // Rows是矩陣參數。
Columns: UINT; // 矩陣中的分量或列。
InterpolationMode: D3D_INTERPOLATION_MODE; // 插值模式。
Flags: D3D_PARAMETER_FLAGS; // 參數修改器。
FirstInRegister: UINT; // 這個參數的第一個輸入寄存器。
FirstInComponent: UINT; // 這個參數的第一個輸入寄存器元件。
FirstOutRegister: UINT; // 這個參數的第一個輸出寄存器。
FirstOutComponent: UINT; // 這個參數的第一個輸出寄存器元件。
end;
{$EXTERNALSYM _D3D11_PARAMETER_DESC}
D3D11_PARAMETER_DESC = _D3D11_PARAMETER_DESC;
{$EXTERNALSYM D3D11_PARAMETER_DESC}
TD3D11ParameterDesc = D3D11_PARAMETER_DESC;
PD3D11ParameterDesc = ^TD3D11ParameterDesc;
//
// Interfaces
//
type
ID3D11ShaderReflectionType = interface;
PD3D11SHADERREFLECTIONTYPE = ^ID3D11ShaderReflectionType;
LPD3D11SHADERREFLECTIONTYPE = ^ID3D11ShaderReflectionType;
{$EXTERNALSYM LPD3D11SHADERREFLECTIONTYPE}
ID3D11ShaderReflectionVariable = interface;
PID3D11ShaderReflectionVariable = ^ID3D11ShaderReflectionVariable;
LPD3D11SHADERREFLECTIONVARIABLE = ^ID3D11ShaderReflectionVariable;
{$EXTERNALSYM LPD3D11SHADERREFLECTIONVARIABLE}
ID3D11ShaderReflectionConstantBuffer = interface;
PID3D11ShaderReflectionConstantBuffer = ^ID3D11ShaderReflectionConstantBuffer;
LPD3D11SHADERREFLECTIONCONSTANTBUFFER = ^ID3D11ShaderReflectionConstantBuffer;
{$EXTERNALSYM LPD3D11SHADERREFLECTIONCONSTANTBUFFER}
ID3D11ShaderReflection = interface;
PIDD3D11SHADERREFLECTION = ^ID3D11ShaderReflection;
LPD3D11SHADERREFLECTION = ^ID3D11ShaderReflection;
{$EXTERNALSYM LPD3D11SHADERREFLECTION}
ID3D11FunctionReflection = interface;
LPD3D11FUNCTIONREFLECTION = ^ID3D11FunctionReflection;
PID3D11FUNCTIONREFLECTION = ^ID3D11FunctionReflection;
{$EXTERNALSYM LPD3D11FUNCTIONREFLECTION}
ID3D11FunctionParameterReflection = interface;
LPD3D11FUNCTIONPARAMETERREFLECTION = ^ID3D11FunctionParameterReflection;
PID3D11FUNCTIONPARAMETERREFLECTION = ^ID3D11FunctionParameterReflection;
{$EXTERNALSYM LPD3D11FUNCTIONPARAMETERREFLECTION}
PID3D11ShaderReflectionType = ^ID3D11ShaderReflectionType;
{$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3D11ShaderReflectionType);'}
{$EXTERNALSYM ID3D11ShaderReflectionType}
ID3D11ShaderReflectionType = interface
['{6E6FFA6A-9BAE-4613-A51E-91652D508C21}']
function GetDesc((*_Out_*) out pDesc: D3D11_SHADER_TYPE_DESC): HRESULT; stdcall;
function GetMemberTypeByIndex((*_In_*) Index: UINT): ID3D11ShaderReflectionType; stdcall;
function GetMemberTypeByName((*_In_*) Name: LPCSTR): ID3D11ShaderReflectionType; stdcall;
function GetMemberTypeName((*_In_*) Index: UINT): LPCSTR; stdcall;
function IsEqual((*_In_*) pType: ID3D11ShaderReflectionType): HRESULT; stdcall;
function GetSubType: ID3D11ShaderReflectionType; stdcall;
function GetBaseClass: ID3D11ShaderReflectionType; stdcall;
function GetNumInterfaces: UINT; stdcall;
function GetInterfaceByIndex((*_In_*) uIndex: UINT): ID3D11ShaderReflectionType; stdcall;
function IsOfType((*_In_*) pType: ID3D11ShaderReflectionType): HRESULT; stdcall;
function ImplementsInterface((*_In_*) pBase: ID3D11ShaderReflectionType): HRESULT; stdcall;
end;
{$EXTERNALSYM IID_ID3D11ShaderReflectionType}
IID_ID3D11ShaderReflectionType = ID3D11ShaderReflectionType;
{$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3D11ShaderReflectionVariable);'}
ID3D11ShaderReflectionVariable = interface
['{51F23923-F3E5-4BD1-91CB-606177D8DB4C}']
function GetDesc((*_Out_*) out pDesc: D3D11_SHADER_VARIABLE_DESC): HRESULT; stdcall;
function GetType: ID3D11ShaderReflectionType; stdcall;
function GetBuffer: ID3D11ShaderReflectionConstantBuffer; stdcall;
function GetInterfaceSlot((*_In_*) uArrayIndex: UINT): UINT; stdcall;
end;
{$EXTERNALSYM ID3D11ShaderReflectionVariable}
IID_ID3D11ShaderReflectionVariable = ID3D11ShaderReflectionVariable;
{$EXTERNALSYM IID_ID3D11ShaderReflectionVariable}
TID3D11ShaderReflectionVariable = ID3D11ShaderReflectionVariable;
{$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3D11ShaderReflectionConstantBuffer);'}
ID3D11ShaderReflectionConstantBuffer = interface
['{EB62D63D-93DD-4318-8AE8-C6F83AD371B8}']
function GetDesc(out pDesc: D3D11_SHADER_BUFFER_DESC): HRESULT; stdcall;
function GetVariableByIndex((*_In_*) Index: UINT): ID3D11ShaderReflectionVariable; stdcall;
function GetVariableByName((*_In_*) Name: LPCSTR): ID3D11ShaderReflectionVariable; stdcall;
end;
{$EXTERNALSYM ID3D11ShaderReflectionConstantBuffer}
IID_ID3D11ShaderReflectionConstantBuffer = ID3D11ShaderReflectionConstantBuffer;
{$EXTERNALSYM IID_ID3D11ShaderReflectionConstantBuffer}
TID3D11ShaderReflectionConstantBuffer = ID3D11ShaderReflectionConstantBuffer;
// 如果反射API發生變化,ID3D11ShaderReflection IID可能會從SDK版本更改為SDK版本。
// 這可以防止來自舊二進制工作的新API使用新代碼
// 使用新頭檔案重新編譯将獲得新的ID。
//
{$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3D11ShaderReflection);'}
ID3D11ShaderReflection = interface(IUnknown)
['{0A233719-3960-4578-9D7C-203B8B1D9CC1}']
function GetDesc((*_Out_*) out pDesc: D3D11_SHADER_DESC): HRESULT; stdcall;
function GetConstantBufferByIndex((*_In_*) Index: UINT): ID3D11ShaderReflectionConstantBuffer; stdcall;
function GetConstantBufferByName((*_In_*) Name: LPCSTR): ID3D11ShaderReflectionConstantBuffer; stdcall;
function GetResourceBindingDesc((*_In_*) ResourceIndex: UINT;
(*_Out_*) out pDesc: D3D11_SHADER_INPUT_BIND_DESC): HRESULT; stdcall;
function GetInputParameterDesc((*_In_*) ParameterIndex: UINT;
(*_Out_*) out pDesc: D3D11_SIGNATURE_PARAMETER_DESC): HRESULT; stdcall;
function GetOutputParameterDesc((*_In_*) ParameterIndex: UINT;
(*_Out_*) out pDesc: D3D11_SIGNATURE_PARAMETER_DESC): HRESULT; stdcall;
function GetPatchConstantParameterDesc((*_In_*) ParameterIndex: UINT;
(*_Out_*) out pDesc: D3D11_SIGNATURE_PARAMETER_DESC): HRESULT; stdcall;
function GetVariableByName((*_In_*) Name: LPCSTR): ID3D11ShaderReflectionVariable; stdcall;
function GetResourceBindingDescByName((*_In_*) Name: LPCSTR;
(*_Out_*) out pDesc: D3D11_SHADER_INPUT_BIND_DESC): HRESULT; stdcall;
function GetMovInstructionCount: UINT; stdcall;
function GetMovcInstructionCount: UINT; stdcall;
function GetConversionInstructionCount: UINT; stdcall;
function GetBitwiseInstructionCount: UINT; stdcall;
function GetGSInputPrimitive: D3D_PRIMITIVE; stdcall;
function IsSampleFrequencyShader: BOOL; stdcall;
function GetNumInterfaceSlots: UINT; stdcall;
function GetMinFeatureLevel((*_Out_*) {enum} out pLevel: D3D_FEATURE_LEVEL): HRESULT; stdcall;
function GetThreadGroupSize(
(*_Out_opt_*) pSizeX: PUINT;
(*_Out_opt_*) pSizeY: PUINT;
(*_Out_opt_*) pSizeZ: PUINT): UINT; stdcall;
function GetRequiresFlags: UINT64; stdcall;
end;
{$EXTERNALSYM ID3D11ShaderReflection}
IID_ID3D11ShaderReflection = ID3D11ShaderReflection;
{$EXTERNALSYM IID_ID3D11ShaderReflection}
TID3D11ShaderReflection = ID3D11ShaderReflection;
ID3D11LibraryReflection = interface(IUnknown)
['{54384F1B-5B3E-4BB7-AE01-60BA3097CBB6}']
function GetDesc((*Out_*) out pDesc: D3D11_LIBRARY_DESC): HRESULT; stdcall;
function GetFunctionByIndex((*_In_*) FunctionIndex: Integer): ID3D11FunctionReflection; stdcall;
end;
{$EXTERNALSYM ID3D11LibraryReflection}
IID_ID3D11LibraryReflection = ID3D11LibraryReflection;
{$EXTERNALSYM IID_ID3D11LibraryReflection}
ID3D11FunctionReflection = interface(IUnknown)
['{207BCECB-D683-4A06-A8A3-9B149B9F73A4}']
function GetDesc((*Out_*) out pDesc: D3D11_FUNCTION_DESC): HRESULT; stdcall;
function GetConstantBufferByIndex((*In_*) BufferIndex: UINT): ID3D11ShaderReflectionConstantBuffer; stdcall;
function GetConstantBufferByName((*In_*) Name: LPCSTR): ID3D11ShaderReflectionConstantBuffer; stdcall;
function GetResourceBindingDesc((*In_*) ResourceIndex: UINT;
(*_Out_*) out pDesc: D3D11_SHADER_INPUT_BIND_DESC): HRESULT; stdcall;
function GetVariableByName((*_In_*) Name: LPCSTR): ID3D11ShaderReflectionVariable; stdcall;
function GetResourceBindingDescByName((*In_*) Name: LPCSTR;
(*_Out_*) out pDesc: D3D11_SHADER_INPUT_BIND_DESC): HRESULT; stdcall;
// 使用D3D_RETURN_PARAMETER_INDEX擷取傳回值的描述。
function GetFunctionParameter((*_In_*) ParameterIndex: Integer): ID3D11FunctionParameterReflection; stdcall;
end;
{$EXTERNALSYM IID_ID3D11FunctionReflection}
IID_ID3D11FunctionReflection = ID3D11FunctionReflection;
{$EXTERNALSYM ID3D11FunctionReflection}
ID3D11FunctionParameterReflection = interface
['{42757488-334F-47FE-982E-1A65D08CC462}']
function GetDesc((*_Out_*) out pDesc: D3D11_PARAMETER_DESC): HRESULT; stdcall;
end;
{$EXTERNALSYM IID_ID3D11FunctionParameterReflection}
IID_ID3D11FunctionParameterReflection = ID3D11FunctionParameterReflection;
{$EXTERNALSYM ID3D11FunctionParameterReflection}
ID3D11ModuleInstance = interface;
ID3D11Module = interface(IUnknown)
['{CAC701EE-80FC-4122-8242-10B39C8CEC34}']
// 為資源重新綁定建立一個子產品執行個體。
function CreateInstance((*_In_opt_*) pNamespace: LPCSTR;
(*_COM_Outptr_*) out ppModuleInstance: ID3D11ModuleInstance): HRESULT; stdcall;
end;
{$EXTERNALSYM IID_ID3D11Module}
IID_ID3D11Module = ID3D11Module;
{$EXTERNALSYM ID3D11Module}
ID3D11ModuleInstance = interface(IUnknown)
['{469E07F7-045A-48D5-AA12-68A478CDF75D}']
//
// 資源綁定API。
//
function BindConstantBuffer((*THIS_ _In_*) uSrcSlot: UINT; (*_In_*) uDstSlot: UINT; (*_In_*) cbDstOffset: UINT): HRESULT; stdcall;
function BindConstantBufferByName((*THIS_ _In_*) pName: LPCSTR; (*_In_*) uDstSlot: UINT; (*_In_*) cbDstOffset: UINT ): HRESULT; stdcall;
function BindResource((*THIS_ _In_*) uSrcSlot: UINT; (*_In_*) uDstSlot: UINT; (*_In_*) uCount: UINT): HRESULT; stdcall;
function BindResourceByName((*THIS_ _In_*) pName: LPCSTR; (*_In_*) uDstSlot: UINT; (*_In_*) uCount: UINT): HRESULT; stdcall;
function BindSampler((*THIS_ _In_*) uSrcSlot: UINT; (*_In_*) uDstSlot: UINT; (*_In_*) uCount: UINT): HRESULT; stdcall;
function BindSamplerByName((*THIS_ _In_*) pName: LPCSTR; (*_In_*) uDstSlot: UINT; (*_In_*) uCount: UINT): HRESULT; stdcall;
function BindUnorderedAccessView((*THIS_ _In_*) uSrcSlot: UINT; (*_In_*) uDstSlot: UINT; (*_In_*) uCount: UINT): HRESULT; stdcall;
function BindUnorderedAccessViewByName((*THIS_ _In_*) pName: LPCSTR; (*_In_*) uDstSlot: UINT; (*_In_*) uCount: UINT): HRESULT; stdcall;
function BindResourceAsUnorderedAccessView((*THIS_ _In_*) uSrcSrvSlot: UINT; (*_In_*) uDstUavSlot: UINT; (*_In_*) uCount: UINT): HRESULT; stdcall;
function BindResourceAsUnorderedAccessViewByName((*THIS_ _In_*) pSrvName: LPCSTR; (*_In_*) uDstUavSlot: UINT; (*_In_*) uCount: UINT): HRESULT; stdcall;
end;
{$EXTERNALSYM IID_ID3D11ModuleInstance}
IID_ID3D11ModuleInstance = ID3D11ModuleInstance;
{$EXTERNALSYM ID3D11ModuleInstance}
ID3D11Linker = interface(IUnknown)
['{59A6CD0E-E10D-4C1F-88C0-63ABA1DAF30E}']
// 連結着色器并生成一個适合D3D運作時的着色器blob。
function Link((*_In_*) pEntry: ID3D11ModuleInstance;
(*_In_*) pEntryName: LPCSTR;
(*_In_*) pTargetName: LPCSTR;
(*_In_*) uFlags: UINT;
(*_COM_Outptr_*) out ppShaderBlob: ID3DBlob;
(*_Always_(_Outptr_opt_result_maybenull_)*)
out ppErrorBuffer: ID3DBlob): HRESULT; stdcall;
// 添加要用于連結的庫子產品的執行個體。
function UseLibrary((*_In_*) pLibraryMI: ID3D11ModuleInstance): HRESULT; stdcall;
// 添加一個剪輯平面,其平面系數取自一個cbuffer條目,用于10L9着色器。
function AddClipPlaneFromCBuffer((*_In_*) uCBufferSlot: UINT; (*_In_*) uCBufferEntry: UINT): HRESULT; stdcall;
end;
{$EXTERNALSYM IID_ID3D11Linker}
IID_ID3D11Linker = ID3D11Linker;
{$EXTERNALSYM ID3D11Linker}
ID3D11LinkingNode = interface(IUnknown)
['{D80DD70C-8D2F-4751-94A1-03C79B3556DB}']
end;
{$EXTERNALSYM IID_ID3D11LinkingNode}
IID_ID3D11LinkingNode = ID3D11LinkingNode;
{$EXTERNALSYM ID3D11LinkingNode}
ID3D11FunctionLinkingGraph = interface(IUnknown)
['{54133220-1CE8-43D3-8236-9855C5CEECFF}']
// 從FLG描述中建立一個着色器子產品輸出。
function CreateModuleInstance((*_COM_Outptr_*) out ppModuleInstance: ID3D11ModuleInstance;
(*_Always_(_Outptr_opt_result_maybenull_)*) out ppErrorBuffer: ID3DBlob): HRESULT; stdcall;
function SetInputSignature((*__in_ecount(cInputParameters)*) const pInputParameters: PD3D11ParameterDesc;
(*_In_*) cInputParameters: UINT;
(*_COM_Outptr_*) out ppInputNode: ID3D11LinkingNode): HRESULT; stdcall;
function SetOutputSignature((*__in_ecount(cOutputParameters)*) const pOutputParameters: PD3D11ParameterDesc;
(*_In_*) cOutputParameters: UINT;
(*_COM_Outptr_*) out ppOutputNode: ID3D11LinkingNode): HRESULT; stdcall;
function CallFunction((*_In_ opt_*) pModuleInstanceNamespace: LPCSTR;
(*_In_*) pModuleWithFunctionPrototype: ID3D11Module;
(*_In_*) pFunctionName: LPCSTR;
(*_COM_Outptr_*) out ppCallNode: ID3D11LinkingNode): HRESULT; stdcall;
function PassValue((*_In_*) pSrcNode: ID3D11LinkingNode;
(*_In_*) SrcParameterIndex: integer;
(*_In_*) pDstNode: ID3D11LinkingNode;
(*_In_*) DstParameterIndex: integer): HRESULT; stdcall;
function PassValueWithSwizzle((*_In_*) pSrcNode: ID3D11LinkingNode;
(*_In_*) SrcParameterIndex: integer;
(*_In_*) pSrcSwizzle: LPCSTR;
(*_In_*) pDstNode: ID3D11LinkingNode;
(*_In_*) DstParameterIndex: integer;
(*_In_*) pDstSwizzle: LPCSTR ): HRESULT; stdcall;
function GetLastError((*_Always_(_Outptr_opt_result_maybenull_)*) out ppErrorBuffer: ID3DBlob): HRESULT; stdcall;
function GenerateHlsl((*_In_*) uFlags: UINT;// uFlags為未來使用預留。
(*_COM_Outptr_*) out ppBuffer: ID3DBlob): HRESULT; stdcall;
end;
//
// APIs //
//
// Macro defininitons
function D3D11_SHVER_GET_TYPE(_Version: UInt): UINT;
{$EXTERNALSYM D3D11_SHVER_GET_TYPE}
function D3D11_SHVER_GET_MAJOR(_Version: UInt): UINT;
{$EXTERNALSYM D3D11_SHVER_GET_MAJOR}
function D3D11_SHVER_GET_MINOR(_Version: UInt): UINT;
{$EXTERNALSYM D3D11_SHVER_GET_MINOR}
implementation
function D3D11_SHVER_GET_TYPE(_Version: UInt): UINT;
begin
result := (((_Version) shr 16) and $FFFF)
end;
function D3D11_SHVER_GET_MAJOR(_Version: UInt): UINT;
begin
result := (((_Version) shr 4) and $F)
end;
function D3D11_SHVER_GET_MINOR(_Version: UInt): UINT;
begin
result := (((_Version) shr 0) and $F);
end;
end.