delphi10.2的directX11的着色器单元D3D11Shader.pas

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.

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孤独的学者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值