| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- ///////////////////////////////////////////////////////////////////////////////
- // //
- // 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/DXIL/DxilConstants.h"
- namespace llvm {
- class Function;
- class Constant;
- }
- namespace hlsl {
- struct DxilFunctionProps {
- DxilFunctionProps() {
- memset(this, 0, sizeof(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;
- // Ray Tracing shaders
- struct {
- union {
- unsigned payloadSizeInBytes;
- unsigned paramSizeInBytes;
- };
- unsigned attributeSizeInBytes;
- } Ray;
- // Mesh shader.
- struct {
- unsigned numThreads[3];
- unsigned maxVertexCount;
- unsigned maxPrimitiveCount;
- DXIL::MeshOutputTopology outputTopology;
- unsigned payloadSizeInBytes;
- } MS;
- // Amplification shader.
- struct {
- unsigned numThreads[3];
- unsigned payloadSizeInBytes;
- } AS;
- } ShaderProps;
- DXIL::ShaderKind shaderKind;
- // TODO: Should we have an unmangled name here for ray tracing shaders?
- 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 {
- return (shaderKind >= DXIL::ShaderKind::Pixel && shaderKind <= DXIL::ShaderKind::Domain) ||
- shaderKind == DXIL::ShaderKind::Mesh || shaderKind == DXIL::ShaderKind::Amplification;
- }
- bool IsRayGeneration() const { return shaderKind == DXIL::ShaderKind::RayGeneration; }
- bool IsIntersection() const { return shaderKind == DXIL::ShaderKind::Intersection; }
- bool IsAnyHit() const { return shaderKind == DXIL::ShaderKind::AnyHit; }
- bool IsClosestHit() const { return shaderKind == DXIL::ShaderKind::ClosestHit; }
- bool IsMiss() const { return shaderKind == DXIL::ShaderKind::Miss; }
- bool IsCallable() const { return shaderKind == DXIL::ShaderKind::Callable; }
- bool IsRay() const {
- return (shaderKind >= DXIL::ShaderKind::RayGeneration && shaderKind <= DXIL::ShaderKind::Callable);
- }
- bool IsMS() const { return shaderKind == DXIL::ShaderKind::Mesh; }
- bool IsAS() const { return shaderKind == DXIL::ShaderKind::Amplification; }
- };
- } // namespace hlsl
|