23 #ifndef __CLRX_GALLIUMBINARIES_H__ 24 #define __CLRX_GALLIUMBINARIES_H__ 81 MAX_VALUE = IMAGE_FORMAT
119 TEXT_INTERMEDIATE_170 = 0,
126 MAX_VALUE = DATA_PRIVATE_170
153 template<
typename ElfBinary>
154 void loadFromElf(ElfBinary& elfBinary,
size_t kernelsNum);
163 {
return progInfosNum; }
166 uint32_t getProgramInfoEntriesNum(uint32_t index)
const;
169 uint32_t getProgramInfoEntryIndex(
const char* name)
const;
173 {
return progInfoEntries + getProgramInfoEntryIndex(name); }
177 {
return progInfoEntries + getProgramInfoEntryIndex(name); }
186 {
return disasmOffset != 0; }
190 {
return disasmSize; }
220 {
return reinterpret_cast<const char*
>(binaryCode + disasmOffset); }
241 {
return reinterpret_cast<const char*
>(binaryCode + disasmOffset); }
250 size_t binaryCodeSize;
253 uint32_t sectionsNum;
254 std::unique_ptr<GalliumKernel[]> kernels;
255 std::unique_ptr<GalliumSection[]> sections;
258 std::unique_ptr<GalliumElfBinaryBase> elfBinary;
269 {
return creationFlags; }
273 {
return binaryCodeSize; }
276 operator bool()
const 277 {
return binaryCode!=
nullptr; }
281 {
return binaryCode==
nullptr; }
285 {
return binaryCode; }
289 {
return binaryCode; }
292 {
return elf64BitBinary; }
312 {
return sectionsNum; }
316 {
return sections[index].size; }
320 {
return binaryCode + sections[index].offset; }
324 {
return binaryCode + sections[index].offset; }
328 {
return sections[index]; }
332 {
return kernelsNum;; }
335 uint32_t getKernelIndex(
const char* name)
const;
339 {
return kernels[index]; }
343 {
return kernels[getKernelIndex(name)]; }
350 GALLIUMSECTID_GPUCONFIG = ELFSECTID_OTHER_BUILTIN,
351 GALLIUMSECTID_NOTEGNUSTACK,
352 GALLIUMSECTID_MAX = GALLIUMSECTID_NOTEGNUSTACK
411 void addEmptyKernel(
const char* kernelName,
cxuint llvmVersion);
421 void generateInternal(std::ostream* osPtr, std::vector<char>* vPtr,
439 const cxbyte* code,
size_t globalDataSize,
const cxbyte* globalData,
440 const std::vector<GalliumKernelInput>& kernels);
443 const cxbyte* code,
size_t globalDataSize,
const cxbyte* globalData,
444 std::vector<GalliumKernelInput>&& kernels);
458 void generate(std::ostream& os)
const;
461 void generate(std::vector<char>& vector)
const;
uint32_t pgmRSRC2
pgmRSRC2 register value
Definition: GalliumBinaries.h:366
bool privilegedMode
prvileged mode
Definition: GalliumBinaries.h:374
GalliumElfBinary64 & getElfBinary64()
returns Gallium inner ELF 64-bit binary
Definition: GalliumBinaries.h:303
Flags getCreationFlags()
get creation flags
Definition: GalliumBinaries.h:268
create prinfomap for inner binaries
Definition: GalliumBinaries.h:50
kernel config
Definition: GalliumBinaries.h:360
non copyable and non movable base structure (class)
Definition: Utilities.h:43
uint32_t Flags
type for declaring various flags
Definition: Utilities.h:97
uint32_t sectionId
section id
Definition: GalliumBinaries.h:106
const cxbyte * getSectionContent(uint32_t index) const
get content for section with specified index
Definition: GalliumBinaries.h:319
GalliumProgInfoEntry * getProgramInfo(const char *name)
returns program info entries for specified kernel name
Definition: GalliumBinaries.h:176
size_t localSize
used local size (not local defined in kernel arguments)
Definition: GalliumBinaries.h:376
Array< std::pair< const char *, size_t > > ProgInfoEntryIndexMap
program info entry index map
Definition: GalliumBinaries.h:143
uint32_t address
address
Definition: GalliumBinaries.h:87
all Gallium binaries flags
Definition: GalliumBinaries.h:54
Gallium binarie's Section.
Definition: GalliumBinaries.h:130
cxbyte priority
priority
Definition: GalliumBinaries.h:370
uint32_t value
value
Definition: GalliumBinaries.h:88
create map of sections for inner binaries
Definition: GalliumBinaries.h:46
GalliumProgInfoEntry * progInfoEntries
program info entries
Definition: GalliumBinaries.h:146
class ElfBinaryTemplate< Elf64Types > ElfBinary64
type for 64-bit ELF binary
Definition: ElfBinaries.h:461
uint32_t targetSize
target size
Definition: GalliumBinaries.h:98
ProgInfoEntryIndexMap progInfoEntryMap
program info map
Definition: GalliumBinaries.h:147
GalliumSectionType type
type of section
Definition: GalliumBinaries.h:133
kernel argument (Gallium binaries)
Definition: GalliumBinaries.h:92
GalliumArgType type
type of argument
Definition: GalliumBinaries.h:94
bool debugMode
debug mode
Definition: GalliumBinaries.h:373
const GalliumKernel & getKernel(const char *name) const
get kernel with speciified name
Definition: GalliumBinaries.h:342
Definition: GalliumBinaries.h:246
const GalliumElfBinary64 & getElfBinary64() const
returns Gallium inner ELF 64-bit binary
Definition: GalliumBinaries.h:307
cxbyte * getBinaryCode()
returns binary code data
Definition: GalliumBinaries.h:288
an array class
Definition: Containers.h:38
uint32_t detectMesaDriverVersion()
detect driver version in the system
const GalliumProgInfoEntry * getProgramInfo(const char *name) const
returns program info entries for specified kernel name
Definition: GalliumBinaries.h:172
uint32_t getKernelsNum() const
returns kernels number
Definition: GalliumBinaries.h:331
size_t getSize() const
get size of binaries
Definition: GalliumBinaries.h:272
cxuint usedVGPRsNum
number of used VGPRs
Definition: GalliumBinaries.h:363
create map of kernels for inner binaries
Definition: GalliumBinaries.h:47
uint32_t getSectionsNum() const
get sections number
Definition: GalliumBinaries.h:311
size_t disasmOffset
disassembly offset
Definition: GalliumBinaries.h:149
size_t disasmSize
disassembly size
Definition: GalliumBinaries.h:148
shift for convert inner binary flags into elf binary flags
Definition: GalliumBinaries.h:55
cxbyte userDataNum
number of user data
Definition: GalliumBinaries.h:367
const GalliumInput * getInput() const
get input
Definition: GalliumBinaries.h:448
uint32_t size
size of argument
Definition: GalliumBinaries.h:97
bool ieeeMode
IEEE mode.
Definition: GalliumBinaries.h:368
cxuint usedSGPRsNum
number of used SGPRs
Definition: GalliumBinaries.h:364
uint32_t offset
offset in binary
Definition: GalliumBinaries.h:134
Array< GalliumArgInfo > argInfos
arguments
Definition: GalliumBinaries.h:108
unsigned char cxbyte
unsigned byte
Definition: Config.h:215
kernel program info entry for Gallium binaries
Definition: GalliumBinaries.h:85
main namespace
Definition: AsmDefs.h:38
cxbyte floatMode
float mode
Definition: GalliumBinaries.h:369
const GalliumElfBinary32 & getElfBinary32() const
returns Gallium inner ELF 32-bit binary
Definition: GalliumBinaries.h:299
unsigned int cxuint
unsigned int
Definition: Config.h:223
uint32_t sectionId
section id
Definition: GalliumBinaries.h:132
gallium code binary generator
Definition: GalliumBinaries.h:415
cxuint spilledVGPRs
number of spilled vector registers
Definition: GalliumBinaries.h:378
bool isMesa170() const
returns true if binary for >=Mesa3D 17.0
Definition: GalliumBinaries.h:345
uint32_t targetAlign
target alignment
Definition: GalliumBinaries.h:99
inlines for accessing memory words in LittleEndian and unaligned
bool operator!() const
returns true if object is uninitialized
Definition: GalliumBinaries.h:280
bool hasProgInfoMap() const
return true if binary has program info map
Definition: GalliumBinaries.h:236
section for text (binary code)
const char * getDisassembly() const
return disassembly content (without null-character)
Definition: GalliumBinaries.h:219
create elf proginfomap
Definition: GalliumBinaries.h:52
GPUDeviceType
type of GPU device
Definition: GPUId.h:51
uint32_t detectLLVMCompilerVersion()
detect LLVM compiler version in the system
cxbyte exceptions
enabled exceptions
Definition: GalliumBinaries.h:371
32-bit Gallium ELF binary
Definition: GalliumBinaries.h:203
const GalliumKernel & getKernel(uint32_t index) const
get kernel by index
Definition: GalliumBinaries.h:338
GalliumSectionType
Gallium format section type.
Definition: GalliumBinaries.h:112
bool dx10Clamp
DX10 CLAMP mode.
Definition: GalliumBinaries.h:375
64-bit Gallium ELF binary
Definition: GalliumBinaries.h:224
utilities for other libraries and programs
uint32_t size
size of section
Definition: GalliumBinaries.h:135
uint32_t scratchBufferSize
size of scratch buffer
Definition: GalliumBinaries.h:377
uint32_t getProgramInfosNum() const
returns program infos number
Definition: GalliumBinaries.h:162
CString kernelName
kernel's name
Definition: GalliumBinaries.h:105
bool is64BitElfBinary() const
return true if inner binary is 64-bit
Definition: GalliumBinaries.h:291
const char * getDisassembly() const
return disassembly content (without null-character)
Definition: GalliumBinaries.h:240
uint32_t progInfosNum
program info entries number
Definition: GalliumBinaries.h:145
const GalliumSection & getSection(uint32_t index) const
get section with specified index
Definition: GalliumBinaries.h:327
bool tgSize
enable TG_SIZE_EN bit
Definition: GalliumBinaries.h:372
uint32_t pgmRSRC1
pgmRSRC1 register value
Definition: GalliumBinaries.h:365
GPU identification utilities.
uint32_t getSectionSize(uint32_t index) const
get size of section with specified index
Definition: GalliumBinaries.h:315
creation flags for ELF binaries
Definition: ElfBinaries.h:73
class ElfBinaryTemplate< Elf32Types > ElfBinary32
type for 32-bit ELF binary
Definition: ElfBinaries.h:459
GalliumArgSemantic semantic
semantic of array
Definition: GalliumBinaries.h:96
kernel info structure (Gallium binaries)
Definition: GalliumBinaries.h:103
GalliumArgType
GalliumCompute Kernel Arg type.
Definition: GalliumBinaries.h:59
bool isLLVM390() const
returns true binary for if >=LLVM 3.9
Definition: GalliumBinaries.h:192
GalliumArgSemantic
Gallium semantic field type.
Definition: GalliumBinaries.h:74
bool llvm390
true if >= LLVM 3.9
Definition: GalliumBinaries.h:150
bool hasProgInfoMap() const
return true if binary has program info map
Definition: GalliumBinaries.h:215
uint32_t offset
offset in ElfBinary
Definition: GalliumBinaries.h:107
size_t getDisassemblySize() const
returns size of disassembly
Definition: GalliumBinaries.h:189
cxbyte * getSectionContent(uint32_t index)
get content for section with specified index
Definition: GalliumBinaries.h:323
cxuint dimMask
mask of dimension (bits: 0 - X, 1 - Y, 2 - Z)
Definition: GalliumBinaries.h:362
GalliumElfBinary32 & getElfBinary32()
returns Gallium inner ELF 32-bit binary
Definition: GalliumBinaries.h:295
bool hasDisassembly() const
returns true if disassembly available
Definition: GalliumBinaries.h:185
const cxbyte * getBinaryCode() const
returns binary code data
Definition: GalliumBinaries.h:284
Definition: GalliumBinaries.h:49
bool signExtended
is signed extended
Definition: GalliumBinaries.h:95
simple C-string container
Definition: CString.h:38
containers and other utils for other libraries and programs
Gallium elf binary base (for 32-bit and 64-bit)
Definition: GalliumBinaries.h:139
cxuint spilledSGPRs
number of spilled scalar registers
Definition: GalliumBinaries.h:379
pointer to constant memory