LLVM 18.0.0git
DXContainerPSVInfo.h
Go to the documentation of this file.
1//===- llvm/MC/DXContainerPSVInfo.h - DXContainer PSVInfo -*- C++ -------*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef LLVM_MC_DXCONTAINERPSVINFO_H
10#define LLVM_MC_DXCONTAINERPSVINFO_H
11
13#include "llvm/ADT/StringRef.h"
16
17#include <array>
18#include <numeric>
19#include <stdint.h>
20
21namespace llvm {
22
23class raw_ostream;
24
25namespace mcdxbc {
26
30 uint8_t StartRow;
31 uint8_t Cols;
32 uint8_t StartCol;
37 uint8_t DynamicMask;
38 uint8_t Stream;
39};
40
41// This data structure is a helper for reading and writing PSV RuntimeInfo data.
42// It is implemented in the BinaryFormat library so that it can be used by both
43// the MC layer and Object tools.
44// This structure is used to represent the extracted data in an inspectable and
45// modifiable format, and can be used to serialize the data back into valid PSV
46// RuntimeInfo.
48 bool IsFinalized = false;
54
55 // TODO: Make this interface user-friendly.
56 // The interface here is bad, and we'll want to change this in the future. We
57 // probably will want to build out these mask vectors as vectors of bools and
58 // have this utility object convert them to the bit masks. I don't want to
59 // over-engineer this API now since we don't know what the data coming in to
60 // feed it will look like, so I kept it extremely simple for the immediate use
61 // case.
62 std::array<SmallVector<uint32_t>, 4> OutputVectorMasks;
64 std::array<SmallVector<uint32_t>, 4> InputOutputMap;
67
68 // Serialize PSVInfo into the provided raw_ostream. The version field
69 // specifies the data version to encode, the default value specifies encoding
70 // the highest supported version.
71 void write(raw_ostream &OS,
72 uint32_t Version = std::numeric_limits<uint32_t>::max()) const;
73
75 IsFinalized = true;
76 BaseData.SigInputElements = static_cast<uint32_t>(InputElements.size());
79 static_cast<uint32_t>(PatchOrPrimElements.size());
81 return;
83 BaseData.swapBytes(Stage);
84 for (auto &Res : Resources)
85 Res.swapBytes();
86 }
87};
88
89class Signature {
90 struct Parameter {
91 uint32_t Stream;
92 StringRef Name;
94 dxbc::D3DSystemValue SystemValue;
97 uint8_t Mask;
98 uint8_t ExclusiveMask;
99 dxbc::SigMinPrecision MinPrecision;
100 };
101
103
104public:
106 dxbc::D3DSystemValue SystemValue,
108 uint8_t Mask, uint8_t ExclusiveMask,
109 dxbc::SigMinPrecision MinPrecision) {
110 Params.push_back(Parameter{Stream, Name, Index, SystemValue, CompType,
111 Register, Mask, ExclusiveMask, MinPrecision});
112 }
113
114 void write(raw_ostream &OS);
115};
116
117} // namespace mcdxbc
118} // namespace llvm
119
120#endif // LLVM_MC_DXCONTAINERPSVINFO_H
std::string Name
raw_pwrite_stream & OS
This file defines the SmallVector class.
Wrapper class representing virtual and physical registers.
Definition: Register.h:19
void push_back(const T &Elt)
Definition: SmallVector.h:416
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
Definition: SmallVector.h:1200
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:50
void addParam(uint32_t Stream, StringRef Name, uint32_t Index, dxbc::D3DSystemValue SystemValue, dxbc::SigComponentType CompType, uint32_t Register, uint8_t Mask, uint8_t ExclusiveMask, dxbc::SigMinPrecision MinPrecision)
void write(raw_ostream &OS)
This class implements an extremely fast bulk output stream that can only output to a stream.
Definition: raw_ostream.h:52
constexpr bool IsBigEndianHost
Definition: SwapByteOrder.h:26
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
SmallVector< uint32_t > PatchOrPrimMasks
SmallVector< uint32_t > PatchOutputMap
SmallVector< dxbc::PSV::v2::ResourceBindInfo > Resources
SmallVector< PSVSignatureElement > InputElements
SmallVector< uint32_t > InputPatchMap
SmallVector< PSVSignatureElement > OutputElements
SmallVector< PSVSignatureElement > PatchOrPrimElements
void write(raw_ostream &OS, uint32_t Version=std::numeric_limits< uint32_t >::max()) const
dxbc::PSV::v2::RuntimeInfo BaseData
void finalize(Triple::EnvironmentType Stage)
std::array< SmallVector< uint32_t >, 4 > OutputVectorMasks
std::array< SmallVector< uint32_t >, 4 > InputOutputMap
dxbc::PSV::InterpolationMode Mode