163accaf4SChris Bieneman 263accaf4SChris Bieneman //===-- llvm/BinaryFormat/DXContainer.cpp - DXContainer Utils ----*- C++-*-===// 363accaf4SChris Bieneman // 463accaf4SChris Bieneman // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 563accaf4SChris Bieneman // See https://llvm.org/LICENSE.txt for license information. 663accaf4SChris Bieneman // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 763accaf4SChris Bieneman // 863accaf4SChris Bieneman //===----------------------------------------------------------------------===// 963accaf4SChris Bieneman // 1063accaf4SChris Bieneman // This file contains utility functions for working with DXContainers. 1163accaf4SChris Bieneman // 1263accaf4SChris Bieneman //===----------------------------------------------------------------------===// 1363accaf4SChris Bieneman 1463accaf4SChris Bieneman #include "llvm/BinaryFormat/DXContainer.h" 1563accaf4SChris Bieneman #include "llvm/ADT/StringSwitch.h" 160c3f51c0SChris Bieneman #include "llvm/Support/ScopedPrinter.h" 1763accaf4SChris Bieneman 1863accaf4SChris Bieneman using namespace llvm; 192556ba4aSChris Bieneman using namespace llvm::dxbc; 2063accaf4SChris Bieneman 2163accaf4SChris Bieneman dxbc::PartType dxbc::parsePartType(StringRef S) { 2263accaf4SChris Bieneman #define CONTAINER_PART(PartName) .Case(#PartName, PartType::PartName) 2363accaf4SChris Bieneman return StringSwitch<dxbc::PartType>(S) 2463accaf4SChris Bieneman #include "llvm/BinaryFormat/DXContainerConstants.def" 2563accaf4SChris Bieneman .Default(dxbc::PartType::Unknown); 2663accaf4SChris Bieneman } 272556ba4aSChris Bieneman 282556ba4aSChris Bieneman bool ShaderHash::isPopulated() { 292556ba4aSChris Bieneman static uint8_t Zeros[16] = {0}; 302556ba4aSChris Bieneman return Flags > 0 || 0 != memcmp(&Digest, &Zeros, 16); 312556ba4aSChris Bieneman } 320c3f51c0SChris Bieneman 339f87522bSChris B #define COMPONENT_PRECISION(Val, Enum) {#Enum, SigMinPrecision::Enum}, 349f87522bSChris B 359f87522bSChris B static const EnumEntry<SigMinPrecision> SigMinPrecisionNames[] = { 369f87522bSChris B #include "llvm/BinaryFormat/DXContainerConstants.def" 379f87522bSChris B }; 389f87522bSChris B 399f87522bSChris B ArrayRef<EnumEntry<SigMinPrecision>> dxbc::getSigMinPrecisions() { 409f87522bSChris B return ArrayRef(SigMinPrecisionNames); 419f87522bSChris B } 429f87522bSChris B 439f87522bSChris B #define D3D_SYSTEM_VALUE(Val, Enum) {#Enum, D3DSystemValue::Enum}, 449f87522bSChris B 459f87522bSChris B static const EnumEntry<D3DSystemValue> D3DSystemValueNames[] = { 469f87522bSChris B #include "llvm/BinaryFormat/DXContainerConstants.def" 479f87522bSChris B }; 489f87522bSChris B 499f87522bSChris B ArrayRef<EnumEntry<D3DSystemValue>> dxbc::getD3DSystemValues() { 509f87522bSChris B return ArrayRef(D3DSystemValueNames); 519f87522bSChris B } 529f87522bSChris B 539f87522bSChris B #define COMPONENT_TYPE(Val, Enum) {#Enum, SigComponentType::Enum}, 549f87522bSChris B 559f87522bSChris B static const EnumEntry<SigComponentType> SigComponentTypes[] = { 569f87522bSChris B #include "llvm/BinaryFormat/DXContainerConstants.def" 579f87522bSChris B }; 589f87522bSChris B 599f87522bSChris B ArrayRef<EnumEntry<SigComponentType>> dxbc::getSigComponentTypes() { 609f87522bSChris B return ArrayRef(SigComponentTypes); 619f87522bSChris B } 629f87522bSChris B 630c3f51c0SChris Bieneman #define SEMANTIC_KIND(Val, Enum) {#Enum, PSV::SemanticKind::Enum}, 640c3f51c0SChris Bieneman 650c3f51c0SChris Bieneman static const EnumEntry<PSV::SemanticKind> SemanticKindNames[] = { 660c3f51c0SChris Bieneman #include "llvm/BinaryFormat/DXContainerConstants.def" 670c3f51c0SChris Bieneman }; 680c3f51c0SChris Bieneman 690c3f51c0SChris Bieneman ArrayRef<EnumEntry<PSV::SemanticKind>> PSV::getSemanticKinds() { 700c3f51c0SChris Bieneman return ArrayRef(SemanticKindNames); 710c3f51c0SChris Bieneman } 720c3f51c0SChris Bieneman 730c3f51c0SChris Bieneman #define COMPONENT_TYPE(Val, Enum) {#Enum, PSV::ComponentType::Enum}, 740c3f51c0SChris Bieneman 750c3f51c0SChris Bieneman static const EnumEntry<PSV::ComponentType> ComponentTypeNames[] = { 760c3f51c0SChris Bieneman #include "llvm/BinaryFormat/DXContainerConstants.def" 770c3f51c0SChris Bieneman }; 780c3f51c0SChris Bieneman 790c3f51c0SChris Bieneman ArrayRef<EnumEntry<PSV::ComponentType>> PSV::getComponentTypes() { 800c3f51c0SChris Bieneman return ArrayRef(ComponentTypeNames); 810c3f51c0SChris Bieneman } 820c3f51c0SChris Bieneman 830c3f51c0SChris Bieneman #define INTERPOLATION_MODE(Val, Enum) {#Enum, PSV::InterpolationMode::Enum}, 840c3f51c0SChris Bieneman 850c3f51c0SChris Bieneman static const EnumEntry<PSV::InterpolationMode> InterpolationModeNames[] = { 860c3f51c0SChris Bieneman #include "llvm/BinaryFormat/DXContainerConstants.def" 870c3f51c0SChris Bieneman }; 880c3f51c0SChris Bieneman 890c3f51c0SChris Bieneman ArrayRef<EnumEntry<PSV::InterpolationMode>> PSV::getInterpolationModes() { 900c3f51c0SChris Bieneman return ArrayRef(InterpolationModeNames); 910c3f51c0SChris Bieneman } 92*fd0dbc7fSXiang Li 93*fd0dbc7fSXiang Li #define RESOURCE_TYPE(Val, Enum) {#Enum, PSV::ResourceType::Enum}, 94*fd0dbc7fSXiang Li 95*fd0dbc7fSXiang Li static const EnumEntry<PSV::ResourceType> ResourceTypeNames[] = { 96*fd0dbc7fSXiang Li #include "llvm/BinaryFormat/DXContainerConstants.def" 97*fd0dbc7fSXiang Li }; 98*fd0dbc7fSXiang Li 99*fd0dbc7fSXiang Li ArrayRef<EnumEntry<PSV::ResourceType>> PSV::getResourceTypes() { 100*fd0dbc7fSXiang Li return ArrayRef(ResourceTypeNames); 101*fd0dbc7fSXiang Li } 102*fd0dbc7fSXiang Li 103*fd0dbc7fSXiang Li #define RESOURCE_KIND(Val, Enum) {#Enum, PSV::ResourceKind::Enum}, 104*fd0dbc7fSXiang Li 105*fd0dbc7fSXiang Li static const EnumEntry<PSV::ResourceKind> ResourceKindNames[] = { 106*fd0dbc7fSXiang Li #include "llvm/BinaryFormat/DXContainerConstants.def" 107*fd0dbc7fSXiang Li }; 108*fd0dbc7fSXiang Li 109*fd0dbc7fSXiang Li ArrayRef<EnumEntry<PSV::ResourceKind>> PSV::getResourceKinds() { 110*fd0dbc7fSXiang Li return ArrayRef(ResourceKindNames); 111*fd0dbc7fSXiang Li } 112