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 memset((void *)&BaseData, 0, sizeof(dxbc::PSV::v3::RuntimeInfo));
52 }
53 bool IsFinalized = false;
59
60 // TODO: Make this interface user-friendly.
61 // The interface here is bad, and we'll want to change this in the future. We
62 // probably will want to build out these mask vectors as vectors of bools and
63 // have this utility object convert them to the bit masks. I don't want to
64 // over-engineer this API now since we don't know what the data coming in to
65 // feed it will look like, so I kept it extremely simple for the immediate use
66 // case.
67 std::array<SmallVector<uint32_t>, 4> OutputVectorMasks;
69 std::array<SmallVector<uint32_t>, 4> InputOutputMap;
73
74 // Serialize PSVInfo into the provided raw_ostream. The version field
75 // specifies the data version to encode, the default value specifies encoding
76 // the highest supported version.
77 void write(raw_ostream &OS,
78 uint32_t Version = std::numeric_limits<uint32_t>::max()) const;
79
81
82private:
83 SmallVector<uint32_t, 64> IndexBuffer;
85 StringTableBuilder DXConStrTabBuilder;
86};
87
88class Signature {
89 struct Parameter {
90 uint32_t Stream;
91 StringRef Name;
93 dxbc::D3DSystemValue SystemValue;
96 uint8_t Mask;
97 uint8_t ExclusiveMask;
98 dxbc::SigMinPrecision MinPrecision;
99 };
100
102
103public:
105 dxbc::D3DSystemValue SystemValue,
107 uint8_t Mask, uint8_t ExclusiveMask,
108 dxbc::SigMinPrecision MinPrecision) {
109 Params.push_back(Parameter{Stream, Name, Index, SystemValue, CompType,
110 Register, Mask, ExclusiveMask, MinPrecision});
111 }
112
113 void write(raw_ostream &OS);
114};
115
116} // namespace mcdxbc
117} // namespace llvm
118
119#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