//===-- llvm/BinaryFormat/DXContainer.cpp - DXContainer Utils ----*- C++-*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file contains utility functions for working with DXContainers. // //===----------------------------------------------------------------------===// #include "llvm/BinaryFormat/DXContainer.h" #include "llvm/ADT/StringSwitch.h" #include "llvm/Support/ScopedPrinter.h" using namespace llvm; using namespace llvm::dxbc; dxbc::PartType dxbc::parsePartType(StringRef S) { #define CONTAINER_PART(PartName) .Case(#PartName, PartType::PartName) return StringSwitch(S) #include "llvm/BinaryFormat/DXContainerConstants.def" .Default(dxbc::PartType::Unknown); } bool ShaderHash::isPopulated() { static uint8_t Zeros[16] = {0}; return Flags > 0 || 0 != memcmp(&Digest, &Zeros, 16); } #define COMPONENT_PRECISION(Val, Enum) {#Enum, SigMinPrecision::Enum}, static const EnumEntry SigMinPrecisionNames[] = { #include "llvm/BinaryFormat/DXContainerConstants.def" }; ArrayRef> dxbc::getSigMinPrecisions() { return ArrayRef(SigMinPrecisionNames); } #define D3D_SYSTEM_VALUE(Val, Enum) {#Enum, D3DSystemValue::Enum}, static const EnumEntry D3DSystemValueNames[] = { #include "llvm/BinaryFormat/DXContainerConstants.def" }; ArrayRef> dxbc::getD3DSystemValues() { return ArrayRef(D3DSystemValueNames); } #define COMPONENT_TYPE(Val, Enum) {#Enum, SigComponentType::Enum}, static const EnumEntry SigComponentTypes[] = { #include "llvm/BinaryFormat/DXContainerConstants.def" }; ArrayRef> dxbc::getSigComponentTypes() { return ArrayRef(SigComponentTypes); } static const EnumEntry RootFlagNames[] = { #define ROOT_SIGNATURE_FLAG(Val, Enum) {#Enum, RootFlags::Enum}, #include "llvm/BinaryFormat/DXContainerConstants.def" }; ArrayRef> dxbc::getRootFlags() { return ArrayRef(RootFlagNames); } static const EnumEntry RootDescriptorFlagNames[] = { #define ROOT_DESCRIPTOR_FLAG(Val, Enum, Flag) \ {#Enum, RootDescriptorFlags::Enum}, #include "llvm/BinaryFormat/DXContainerConstants.def" }; ArrayRef> dxbc::getRootDescriptorFlags() { return ArrayRef(RootDescriptorFlagNames); } static const EnumEntry DescriptorRangeFlagNames[] = { #define DESCRIPTOR_RANGE_FLAG(Val, Enum, Flag) \ {#Enum, DescriptorRangeFlags::Enum}, #include "llvm/BinaryFormat/DXContainerConstants.def" }; ArrayRef> dxbc::getDescriptorRangeFlags() { return ArrayRef(DescriptorRangeFlagNames); } #define SHADER_VISIBILITY(Val, Enum) {#Enum, ShaderVisibility::Enum}, static const EnumEntry ShaderVisibilityValues[] = { #include "llvm/BinaryFormat/DXContainerConstants.def" }; ArrayRef> dxbc::getShaderVisibility() { return ArrayRef(ShaderVisibilityValues); } #define FILTER(Val, Enum) {#Enum, SamplerFilter::Enum}, static const EnumEntry SamplerFilterNames[] = { #include "llvm/BinaryFormat/DXContainerConstants.def" }; ArrayRef> dxbc::getSamplerFilters() { return ArrayRef(SamplerFilterNames); } #define TEXTURE_ADDRESS_MODE(Val, Enum) {#Enum, TextureAddressMode::Enum}, static const EnumEntry TextureAddressModeNames[] = { #include "llvm/BinaryFormat/DXContainerConstants.def" }; ArrayRef> dxbc::getTextureAddressModes() { return ArrayRef(TextureAddressModeNames); } #define COMPARISON_FUNC(Val, Enum) {#Enum, ComparisonFunc::Enum}, static const EnumEntry ComparisonFuncNames[] = { #include "llvm/BinaryFormat/DXContainerConstants.def" }; ArrayRef> dxbc::getComparisonFuncs() { return ArrayRef(ComparisonFuncNames); } #define STATIC_BORDER_COLOR(Val, Enum) {#Enum, StaticBorderColor::Enum}, static const EnumEntry StaticBorderColorValues[] = { #include "llvm/BinaryFormat/DXContainerConstants.def" }; ArrayRef> dxbc::getStaticBorderColors() { return ArrayRef(StaticBorderColorValues); } #define ROOT_PARAMETER(Val, Enum) {#Enum, RootParameterType::Enum}, static const EnumEntry RootParameterTypes[] = { #include "llvm/BinaryFormat/DXContainerConstants.def" }; ArrayRef> dxbc::getRootParameterTypes() { return ArrayRef(RootParameterTypes); } #define SEMANTIC_KIND(Val, Enum) {#Enum, PSV::SemanticKind::Enum}, static const EnumEntry SemanticKindNames[] = { #include "llvm/BinaryFormat/DXContainerConstants.def" }; ArrayRef> PSV::getSemanticKinds() { return ArrayRef(SemanticKindNames); } #define COMPONENT_TYPE(Val, Enum) {#Enum, PSV::ComponentType::Enum}, static const EnumEntry ComponentTypeNames[] = { #include "llvm/BinaryFormat/DXContainerConstants.def" }; ArrayRef> PSV::getComponentTypes() { return ArrayRef(ComponentTypeNames); } #define INTERPOLATION_MODE(Val, Enum) {#Enum, PSV::InterpolationMode::Enum}, static const EnumEntry InterpolationModeNames[] = { #include "llvm/BinaryFormat/DXContainerConstants.def" }; ArrayRef> PSV::getInterpolationModes() { return ArrayRef(InterpolationModeNames); } #define RESOURCE_TYPE(Val, Enum) {#Enum, PSV::ResourceType::Enum}, static const EnumEntry ResourceTypeNames[] = { #include "llvm/BinaryFormat/DXContainerConstants.def" }; ArrayRef> PSV::getResourceTypes() { return ArrayRef(ResourceTypeNames); } #define RESOURCE_KIND(Val, Enum) {#Enum, PSV::ResourceKind::Enum}, static const EnumEntry ResourceKindNames[] = { #include "llvm/BinaryFormat/DXContainerConstants.def" }; ArrayRef> PSV::getResourceKinds() { return ArrayRef(ResourceKindNames); }