LLVM 19.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
12#include "llvm/ADT/ArrayRef.h"
14#include "llvm/ADT/StringRef.h"
18
19#include <array>
20#include <numeric>
21#include <stdint.h>
22
23namespace llvm {
24
25class raw_ostream;
26
27namespace mcdxbc {
28
32 uint8_t StartRow;
33 uint8_t Cols;
34 uint8_t StartCol;
39 uint8_t DynamicMask;
40 uint8_t Stream;
41};
42
43// This data structure is a helper for reading and writing PSV RuntimeInfo data.
44// It is implemented in the BinaryFormat library so that it can be used by both
45// the MC layer and Object tools.
46// This structure is used to represent the extracted data in an inspectable and
47// modifiable format, and can be used to serialize the data back into valid PSV
48// RuntimeInfo.
50 PSVRuntimeInfo() : DXConStrTabBuilder(StringTableBuilder::DXContainer) {}
51 bool IsFinalized = false;
57
58 // TODO: Make this interface user-friendly.
59 // The interface here is bad, and we'll want to change this in the future. We
60 // probably will want to build out these mask vectors as vectors of bools and
61 // have this utility object convert them to the bit masks. I don't want to
62 // over-engineer this API now since we don't know what the data coming in to
63 // feed it will look like, so I kept it extremely simple for the immediate use
64 // case.
65 std::array<SmallVector<uint32_t>, 4> OutputVectorMasks;
67 std::array<SmallVector<uint32_t>, 4> InputOutputMap;
71
72 // Serialize PSVInfo into the provided raw_ostream. The version field
73 // specifies the data version to encode, the default value specifies encoding
74 // the highest supported version.
75 void write(raw_ostream &OS,
76 uint32_t Version = std::numeric_limits<uint32_t>::max()) const;
77
79
80private:
81 SmallVector<uint32_t, 64> IndexBuffer;
83 StringTableBuilder DXConStrTabBuilder;
84};
85
86class Signature {
87 struct Parameter {
88 uint32_t Stream;
89 StringRef Name;
91 dxbc::D3DSystemValue SystemValue;
94 uint8_t Mask;
95 uint8_t ExclusiveMask;
96 dxbc::SigMinPrecision MinPrecision;
97 };
98
100
101public:
103 dxbc::D3DSystemValue SystemValue,
105 uint8_t Mask, uint8_t ExclusiveMask,
106 dxbc::SigMinPrecision MinPrecision) {
107 Params.push_back(Parameter{Stream, Name, Index, SystemValue, CompType,
108 Register, Mask, ExclusiveMask, MinPrecision});
109 }
110
111 void write(raw_ostream &OS);
112};
113
114} // namespace mcdxbc
115} // namespace llvm
116
117#endif // LLVM_MC_DXCONTAINERPSVINFO_H
arc branch finalize
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:426
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
Definition: SmallVector.h:1209
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:50
Utility for building string tables with deduplicated suffixes.
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
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
dxbc::PSV::v3::RuntimeInfo BaseData
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
std::array< SmallVector< uint32_t >, 4 > OutputVectorMasks
std::array< SmallVector< uint32_t >, 4 > InputOutputMap
dxbc::PSV::InterpolationMode Mode