| /////////////////////////////////////////////////////////////////////////////// |
| // // |
| // DxilFunctionProps.h // |
| // Copyright (C) Microsoft Corporation. All rights reserved. // |
| // This file is distributed under the University of Illinois Open Source // |
| // License. See LICENSE.TXT for details. // |
| // // |
| // Function properties for a dxil shader function. // |
| // // |
| /////////////////////////////////////////////////////////////////////////////// |
| |
| #pragma once |
| |
| #include "dxc/HLSL/DxilConstants.h" |
| |
| namespace llvm { |
| class Function; |
| class Constant; |
| } |
| |
| namespace hlsl { |
| struct DxilFunctionProps { |
| union { |
| // Compute shader. |
| struct { |
| unsigned numThreads[3]; |
| } CS; |
| // Geometry shader. |
| struct { |
| DXIL::InputPrimitive inputPrimitive; |
| unsigned maxVertexCount; |
| unsigned instanceCount; |
| DXIL::PrimitiveTopology |
| streamPrimitiveTopologies[DXIL::kNumOutputStreams]; |
| } GS; |
| // Hull shader. |
| struct { |
| llvm::Function *patchConstantFunc; |
| DXIL::TessellatorDomain domain; |
| DXIL::TessellatorPartitioning partition; |
| DXIL::TessellatorOutputPrimitive outputPrimitive; |
| unsigned inputControlPoints; |
| unsigned outputControlPoints; |
| float maxTessFactor; |
| } HS; |
| // Domain shader. |
| struct { |
| DXIL::TessellatorDomain domain; |
| unsigned inputControlPoints; |
| } DS; |
| // Vertex shader. |
| struct { |
| llvm::Constant *clipPlanes[DXIL::kNumClipPlanes]; |
| } VS; |
| // Pixel shader. |
| struct { |
| bool EarlyDepthStencil; |
| } PS; |
| } ShaderProps; |
| DXIL::ShaderKind shaderKind; |
| bool IsPS() const { return shaderKind == DXIL::ShaderKind::Pixel; } |
| bool IsVS() const { return shaderKind == DXIL::ShaderKind::Vertex; } |
| bool IsGS() const { return shaderKind == DXIL::ShaderKind::Geometry; } |
| bool IsHS() const { return shaderKind == DXIL::ShaderKind::Hull; } |
| bool IsDS() const { return shaderKind == DXIL::ShaderKind::Domain; } |
| bool IsCS() const { return shaderKind == DXIL::ShaderKind::Compute; } |
| bool IsGraphics() const { |
| switch (shaderKind) { |
| case DXIL::ShaderKind::Compute: |
| case DXIL::ShaderKind::Library: |
| case DXIL::ShaderKind::Invalid: |
| return false; |
| default: |
| return true; |
| } |
| } |
| }; |
| |
| } // namespace hlsl |