1 module aurora.directx.d3d12.d3d12shader; 2 3 public import aurora.directx.com; 4 public import aurora.directx.d3d.d3dcommon; 5 6 public: 7 8 /// 9 /// Constants 10 /// 11 12 alias D3D_RESOURCE_RETURN_TYPE D3D12_RESOURCE_RETURN_TYPE; 13 alias D3D_CBUFFER_TYPE D3D12_CBUFFER_TYPE; 14 alias D3D_TESSELLATOR_DOMAIN D3D12_TESSELLATOR_DOMAIN; 15 alias D3D_TESSELLATOR_PARTITIONING D3D12_TESSELLATOR_PARTITIONING; 16 alias D3D_TESSELLATOR_OUTPUT_PRIMITIVE D3D12_TESSELLATOR_OUTPUT_PRIMITIVE; 17 18 enum uint D3D_SHADER_REQUIRES_DOUBLES = 0x00000001; 19 enum uint D3D_SHADER_REQUIRES_EARLY_DEPTH_STENCIL = 0x00000002; 20 enum uint D3D_SHADER_REQUIRES_UAVS_AT_EVERY_STAGE = 0x00000004; 21 enum uint D3D_SHADER_REQUIRES_64_UAVS = 0x00000008; 22 enum uint D3D_SHADER_REQUIRES_MINIMUM_PRECISION = 0x00000010; 23 enum uint D3D_SHADER_REQUIRES_11_1_DOUBLE_EXTENSIONS = 0x00000020; 24 enum uint D3D_SHADER_REQUIRES_11_1_SHADER_EXTENSIONS = 0x00000040; 25 enum uint D3D_SHADER_REQUIRES_LEVEL_9_COMPARISON_FILTERING = 0x00000080; 26 enum uint D3D_SHADER_REQUIRES_TILED_RESOURCES = 0x00000100; 27 enum uint D3D_SHADER_REQUIRES_STENCIL_REF = 0x00000200; 28 enum uint D3D_SHADER_REQUIRES_INNER_COVERAGE = 0x00000400; 29 enum uint D3D_SHADER_REQUIRES_TYPED_UAV_LOAD_ADDITIONAL_FORMATS = 0x00000800; 30 enum uint D3D_SHADER_REQUIRES_ROVS = 0x00001000; 31 enum uint D3D_SHADER_REQUIRES_VIEWPORT_AND_RT_ARRAY_INDEX_FROM_ANY_SHADER_FEEDING_RASTERIZER = 0x00002000; 32 33 /// 34 /// Functions 35 /// 36 37 /// 38 /// Enumerations 39 /// 40 41 enum D3D12_SHADER_VERSION_TYPE 42 { 43 PIXEL_SHADER = 0, 44 VERTEX_SHADER = 1, 45 GEOMETRY_SHADER = 2, 46 HULL_SHADER = 3, 47 DOMAIN_SHADER = 4, 48 COMPUTE_SHADER = 5, 49 RESERVED0 = 0xFFF0, 50 } 51 52 /// 53 /// Structures 54 /// 55 56 struct D3D12_SIGNATURE_PARAMETER_DESC 57 { 58 const char *SemanticName; 59 uint SemanticIndex; 60 uint Register; 61 D3D_NAME SystemValueType; 62 D3D_REGISTER_COMPONENT_TYPE ComponentType; 63 ubyte Mask; 64 ubyte ReadWriteMask; 65 uint Stream; 66 D3D_MIN_PRECISION MinPrecision; 67 } 68 69 struct D3D12_SHADER_BUFFER_DESC 70 { 71 const char *SemanticName; 72 D3D_CBUFFER_TYPE Type; 73 uint Variables; 74 uint Size; 75 uint uFlags; 76 } 77 78 struct D3D12_SHADER_VARIABLE_DESC 79 { 80 const char *SemanticName; 81 uint StartOffset; 82 uint Size; 83 uint uFlags; 84 void *DefaultValue; 85 uint StartTexture; 86 uint TextureSize; 87 uint StartSampler; 88 uint SamplerSize; 89 } 90 91 struct D3D12_SHADER_TYPE_DESC 92 { 93 D3D_SHADER_VARIABLE_CLASS Class; 94 D3D_SHADER_VARIABLE_TYPE Type; 95 uint Rows; 96 uint Columns; 97 uint Elements; 98 uint Members; 99 uint Offset; 100 const char *SemanticName; 101 } 102 103 struct D3D12_SHADER_DESC 104 { 105 uint Version; 106 const char *Creator; 107 uint Flags; 108 uint ConstantBuffers; 109 uint BoundResources; 110 uint InputParameters; 111 uint OutputParameters; 112 uint InstructionCount; 113 uint TempRegisterCount; 114 uint TempArrayCount; 115 uint DefCount; 116 uint DclCount; 117 uint TextureNormalInstructions; 118 uint TextureLoadInstructions; 119 uint TextureCompInstructions; 120 uint TextureBiasInstructions; 121 uint TextureGradientInstructions; 122 uint FloatInstructionCount; 123 uint IntInstructionCount; 124 uint UintInstructionCount; 125 uint StaticFlowControlCount; 126 uint DynamicFlowControlCount; 127 uint MacroInstructionCount; 128 uint ArrayInstructionCount; 129 uint CutInstructionCount; 130 uint EmitInstructionCount; 131 D3D_PRIMITIVE_TOPOLOGY GSOutputTopology; 132 uint GSMaxOutputVertexCount; 133 D3D_PRIMITIVE InputPrimitive; 134 uint PatchConstantParameters; 135 uint cGSInstanceCount; 136 uint cControlPoints; 137 D3D_TESSELLATOR_OUTPUT_PRIMITIVE HSOutputPrimitive; 138 D3D_TESSELLATOR_PARTITIONING HSPartitioning; 139 D3D_TESSELLATOR_DOMAIN TessellatorDomain; 140 uint cBarrierInstructions; 141 uint cInterlockedInstructions; 142 uint cTextureStoreInstructions; 143 } 144 145 struct D3D12_SHADER_INPUT_BIND_DESC 146 { 147 const char *Name; 148 D3D_SHADER_INPUT_TYPE Type; 149 uint BindPoint; 150 uint BindCount; 151 uint uFlags; 152 D3D_RESOURCE_RETURN_TYPE ReturnType; 153 D3D_SRV_DIMENSION Dimension; 154 uint NumSamples; 155 uint Space; 156 uint uID; 157 } 158 159 struct D3D12_LIBRARY_DESC 160 { 161 const char *Creator; 162 uint Flags; 163 uint FunctionCount; 164 } 165 166 struct D3D12_FUNCTION_DESC 167 { 168 uint Version; 169 const char *Creator; 170 uint Flags; 171 uint ConstantBuffers; 172 uint BoundResources; 173 uint InstructionCount; 174 uint TempRegisterCount; 175 uint TempArrayCount; 176 uint DefCount; 177 uint DclCount; 178 uint TextureNormalInstructions; 179 uint TextureLoadInstructions; 180 uint TextureCompInstructions; 181 uint TextureBiasInstructions; 182 uint TextureGradientInstructions; 183 uint FloatInstructionCount; 184 uint IntInstructionCount; 185 uint UintInstructionCount; 186 uint StaticFlowControlCount; 187 uint DynamicFlowControlCount; 188 uint MacroInstructionCount; 189 uint ArrayInstructionCount; 190 uint MovInstructionCount; 191 uint MovcInstructionCount; 192 uint ConversionInstructionCount; 193 uint BitwiseInstructionCount; 194 D3D_FEATURE_LEVEL MinFeatureLevel; 195 ulong RequiredFeatureFlags; 196 const char *Name; 197 int FunctionParameterCount; 198 bool HasReturn; 199 bool Has10Level9VertexShader; 200 bool Has10Level9PixelShader; 201 } 202 203 struct D3D12_PARAMETER_DESC 204 { 205 const char *Name; 206 const char *SemanticName; 207 D3D_SHADER_VARIABLE_TYPE Type; 208 D3D_SHADER_VARIABLE_CLASS Class; 209 uint Rows; 210 uint Columns; 211 D3D_INTERPOLATION_MODE InterpolationMode; 212 D3D_PARAMETER_FLAGS Flags; 213 uint FirstInRegister; 214 uint FirstInComponent; 215 uint FirstOutRegister; 216 uint FirstOutComponent; 217 } 218 219 /// 220 /// Interfaces 221 /// 222 223 mixin(uuid!(ID3D12ShaderReflectionType, "E913C351-783D-48CA-A1D1-4F306284AD56")); 224 public interface ID3D12ShaderReflectionType : IUnknown 225 { 226 extern(Windows): 227 ID3D12ShaderReflectionType GetBaseClass(); 228 HRESULT GetDesc(D3D12_SHADER_TYPE_DESC *pDesc); 229 ID3D12ShaderReflectionType GetInterfaceByIndex(uint uIndex); 230 ID3D12ShaderReflectionType GetMemberTypeByIndex(uint Index); 231 ID3D12ShaderReflectionType GetMemberTypeByName(const char *Name); 232 const char* GetMemberTypeName(uint Index); 233 uint GetNumInterfaces(); 234 ID3D12ShaderReflectionType GetSubType(); 235 HRESULT ImplementsInterface(ID3D12ShaderReflectionType pBase); 236 HRESULT IsEqual(ID3D12ShaderReflectionType pType); 237 HRESULT IsOfType(ID3D12ShaderReflectionType pType); 238 } 239 240 mixin(uuid!(ID3D12ShaderReflectionVariable, "8337A8A6-A216-444A-B2F4-314733A73AEA")); 241 public interface ID3D12ShaderReflectionVariable : IUnknown 242 { 243 extern(Windows): 244 ID3D12ShaderReflectionConstantBuffer GetBuffer(); 245 HRESULT GetDesc(D3D12_SHADER_VARIABLE_DESC *pDesc); 246 uint GetInterfaceSlot(uint uArrayIndex); 247 ID3D12ShaderReflectionType GetType(); 248 } 249 250 mixin(uuid!(ID3D12ShaderReflectionConstantBuffer, "C59598B4-48B3-4869-B9B1-B1618B14A8B7")); 251 public interface ID3D12ShaderReflectionConstantBuffer : IUnknown 252 { 253 extern(Windows): 254 HRESULT GetDesc(D3D12_SHADER_BUFFER_DESC *pDesc); 255 ID3D12ShaderReflectionVariable GetVariableByIndex(uint Index); 256 ID3D12ShaderReflectionVariable GetVariableByName(const char *Name); 257 } 258 259 mixin(uuid!(ID3D12ShaderReflection, "5A58797D-A72C-478D-8BA2-EFC6B0EFE88E")); 260 public interface ID3D12ShaderReflection : IUnknown 261 { 262 extern(Windows): 263 uint GetBitwiseInstructionCount(); 264 ID3D12ShaderReflectionConstantBuffer GetConstantBufferByIndex(uint Index); 265 ID3D12ShaderReflectionConstantBuffer GetConstantBufferByName(const char *Name); 266 uint GetConversionInstructionCount(); 267 HRESULT GetDesc(D3D12_SHADER_DESC *pDesc); 268 D3D_PRIMITIVE GetGSInputPrimitive(); 269 HRESULT GetMinFeatureLevel(D3D_FEATURE_LEVEL *pLevel); 270 uint GetMovcInstructionCount(); 271 uint GetMovInstructionCount(); 272 uint GetNumInterfaceSlots(); 273 HRESULT GetOutputParameterDesc(uint ParameterIndex, D3D12_SIGNATURE_PARAMETER_DESC *pDesc); 274 HRESULT GetPatchConstantParameterDesc(uint ParameterIndex, D3D12_SIGNATURE_PARAMETER_DESC *pDesc); 275 ulong GetRequiresFlags(); 276 HRESULT GetResourceBindingDesc(uint ResourceIndex, D3D12_SHADER_INPUT_BIND_DESC *pDesc); 277 HRESULT GetResourceBindingDescByName(const char *Name, D3D12_SHADER_INPUT_BIND_DESC *pDesc); 278 uint GetThreadGroupSize(uint *pSizeX, uint *pSizeY, uint *pSizeZ); 279 ID3D12ShaderReflectionVariable GetVariableByName(const char *Name); 280 bool IsSampleFrequencyShader(); 281 } 282 283 mixin(uuid!(ID3D12LibraryReflection, "8E349D19-54DB-4A56-9DC9-119D87BDB804")); 284 public interface ID3D12LibraryReflection : IUnknown 285 { 286 extern(Windows): 287 HRESULT GetDesc(D3D12_LIBRARY_DESC *pDesc); 288 ID3D12FunctionReflection GetFunctionByIndex(int FunctionIndex); 289 } 290 291 mixin(uuid!(ID3D12FunctionReflection, "1108795C-2772-4BA9-B2A8-D464DC7E2799")); 292 public interface ID3D12FunctionReflection : IUnknown 293 { 294 extern(Windows): 295 ID3D12ShaderReflectionConstantBuffer GetConstantBufferByIndex(uint BufferIndex); 296 ID3D12ShaderReflectionConstantBuffer GetConstantBufferByName(const char *Name); 297 HRESULT GetDesc(D3D12_FUNCTION_DESC *pDesc); 298 ID3D12FunctionParameterReflection GetFunctionParameter(int ParameterIndex); 299 HRESULT GetResourceBindingDesc(uint ResourceIndex, D3D12_SHADER_INPUT_BIND_DESC *pDesc); 300 HRESULT GetResourceBindingDescByName(const char *Name, D3D12_SHADER_INPUT_BIND_DESC *pDesc); 301 ID3D12ShaderReflectionVariable GetVariableByName(const char *Name); 302 } 303 304 mixin(uuid!(ID3D12FunctionParameterReflection, "EC25F42D-7006-4F2B-B33E-02CC3375733F")); 305 public interface ID3D12FunctionParameterReflection : IUnknown 306 { 307 extern(Windows): 308 HRESULT GetDesc(D3D12_PARAMETER_DESC *pDesc); 309 }