23 #ifndef __CLRX_GALLIUMBINARIES_H__
24 #define __CLRX_GALLIUMBINARIES_H__
26 #include <CLRX/Config.h>
33 #include <CLRX/amdbin/Elf.h>
145 template<
typename ElfBinary>
210 {
return reinterpret_cast<const char*
>(binaryCode +
disasmOffset); }
230 {
return reinterpret_cast<const char*
>(binaryCode +
disasmOffset); }
239 size_t binaryCodeSize;
242 uint32_t sectionsNum;
243 std::unique_ptr<GalliumKernel[]> kernels;
244 std::unique_ptr<GalliumSection[]> sections;
247 std::unique_ptr<GalliumElfBinaryBase> elfBinary;
256 {
return creationFlags; }
260 {
return binaryCodeSize; }
263 operator bool()
const
264 {
return binaryCode!=
nullptr; }
268 {
return binaryCode==
nullptr; }
272 {
return binaryCode; }
276 {
return binaryCode; }
279 {
return elf64BitBinary; }
299 {
return sectionsNum; }
303 {
return sections[index].size; }
307 {
return binaryCode + sections[index].offset; }
311 {
return binaryCode + sections[index].offset; }
315 {
return sections[index]; }
319 {
return kernelsNum;; }
326 {
return kernels[index]; }
334 GALLIUMSECTID_GPUCONFIG = ELFSECTID_OTHER_BUILTIN,
335 GALLIUMSECTID_NOTEGNUSTACK,
336 GALLIUMSECTID_MAX = GALLIUMSECTID_NOTEGNUSTACK
410 void generateInternal(std::ostream* osPtr, std::vector<char>* vPtr,
428 const cxbyte* code,
size_t globalDataSize,
const cxbyte* globalData,
429 const std::vector<GalliumKernelInput>& kernels);
432 const cxbyte* code,
size_t globalDataSize,
const cxbyte* globalData,
433 std::vector<GalliumKernelInput>&& kernels);
447 void generate(std::ostream& os)
const;
450 void generate(std::vector<char>& vector)
const;
uint32_t pgmRSRC2
pgmRSRC2 register value
Definition: GalliumBinaries.h:359
bool privilegedMode
prvileged mode
Definition: GalliumBinaries.h:367
GalliumElfBinary64 & getElfBinary64()
returns Gallium inner ELF 64-bit binary
Definition: GalliumBinaries.h:290
Flags getCreationFlags()
get creation flags
Definition: GalliumBinaries.h:255
kernel config
Definition: GalliumBinaries.h:353
creation flags for ELF binaries
Definition: ElfBinaries.h:59
non copyable and non movable base structure (class)
Definition: Utilities.h:43
uint32_t Flags
type for declaring various flags
Definition: Utilities.h:97
create prinfomap for inner binaries
Definition: GalliumBinaries.h:50
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:306
create map of kernels for inner binaries
Definition: GalliumBinaries.h:47
GalliumElfBinary64()
empty constructor
GalliumProgInfoEntry * getProgramInfo(const char *name)
returns program info entries for specified kernel name
Definition: GalliumBinaries.h:169
size_t localSize
used local size (not local defined in kernel arguments)
Definition: GalliumBinaries.h:369
Array< std::pair< const char *, size_t > > ProgInfoEntryIndexMap
program info entry index map
Definition: GalliumBinaries.h:136
create map of sections for inner binaries
Definition: GalliumBinaries.h:46
GalliumElfBinary32()
empty constructor
uint32_t address
address
Definition: GalliumBinaries.h:87
Gallium binarie's Section.
Definition: GalliumBinaries.h:123
cxbyte priority
priority
Definition: GalliumBinaries.h:363
uint32_t value
value
Definition: GalliumBinaries.h:88
Definition: GalliumBinaries.h:49
GalliumProgInfoEntry * progInfoEntries
program info entries
Definition: GalliumBinaries.h:139
class ElfBinaryTemplate< Elf64Types > ElfBinary64
type for 64-bit ELF binary
Definition: ElfBinaries.h:382
uint32_t targetSize
target size
Definition: GalliumBinaries.h:98
void generate(Array< cxbyte > &array) const
generates binary to array of bytes
ProgInfoEntryIndexMap progInfoEntryMap
program info map
Definition: GalliumBinaries.h:140
GalliumSectionType type
type of section
Definition: GalliumBinaries.h:126
kernel argument (Gallium binaries)
Definition: GalliumBinaries.h:92
uint32_t getProgramInfoEntryIndex(const char *name) const
returns index for programinfo entries index for specified kernel name
GalliumArgType type
type of argument
Definition: GalliumBinaries.h:94
all Gallium binaries flags
Definition: GalliumBinaries.h:54
bool debugMode
debug mode
Definition: GalliumBinaries.h:366
const GalliumKernel & getKernel(const char *name) const
get kernel with speciified name
Definition: GalliumBinaries.h:329
Definition: GalliumBinaries.h:235
const GalliumElfBinary64 & getElfBinary64() const
returns Gallium inner ELF 64-bit binary
Definition: GalliumBinaries.h:294
virtual ~GalliumElfBinary32()
destructor
cxbyte * getBinaryCode()
returns binary code data
Definition: GalliumBinaries.h:275
an array class
Definition: Containers.h:38
shift for convert inner binary flags into elf binary flags
Definition: GalliumBinaries.h:55
const GalliumProgInfoEntry * getProgramInfo(const char *name) const
returns program info entries for specified kernel name
Definition: GalliumBinaries.h:164
uint32_t getKernelsNum() const
returns kernels number
Definition: GalliumBinaries.h:318
size_t getSize() const
get size of binaries
Definition: GalliumBinaries.h:259
cxuint usedVGPRsNum
number of used VGPRs
Definition: GalliumBinaries.h:356
void loadFromElf(ElfBinary &elfBinary)
routine to load binary fro internal ELF
uint32_t getSectionsNum() const
get sections number
Definition: GalliumBinaries.h:298
size_t disasmOffset
disassembly offset
Definition: GalliumBinaries.h:142
size_t disasmSize
disassembly size
Definition: GalliumBinaries.h:141
cxbyte userDataNum
number of user data
Definition: GalliumBinaries.h:360
const GalliumInput * getInput() const
get input
Definition: GalliumBinaries.h:437
uint32_t size
size of argument
Definition: GalliumBinaries.h:97
~GalliumBinary()=default
destructor
bool ieeeMode
IEEE mode.
Definition: GalliumBinaries.h:361
cxuint usedSGPRsNum
number of used SGPRs
Definition: GalliumBinaries.h:357
uint32_t offset
offset in binary
Definition: GalliumBinaries.h:127
Array< GalliumArgInfo > argInfos
arguments
Definition: GalliumBinaries.h:108
kernel program info entry for Gallium binaries
Definition: GalliumBinaries.h:85
cxbyte floatMode
float mode
Definition: GalliumBinaries.h:362
const GalliumElfBinary32 & getElfBinary32() const
returns Gallium inner ELF 32-bit binary
Definition: GalliumBinaries.h:286
uint32_t sectionId
section id
Definition: GalliumBinaries.h:125
gallium code binary generator
Definition: GalliumBinaries.h:404
virtual ~GalliumElfBinaryBase()
destructor
GalliumElfBinaryBase()
empty constructor
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:267
bool hasProgInfoMap() const
return true if binary has program info map
Definition: GalliumBinaries.h:225
section for text (binary code)
const char * getDisassembly() const
return disassembly content (without null-character)
Definition: GalliumBinaries.h:209
uint32_t getProgramInfoEntriesNum(uint32_t index) const
returns number of program info entries for program info
GPUDeviceType
type of GPU device
Definition: GPUId.h:38
cxbyte exceptions
enabled exceptions
Definition: GalliumBinaries.h:364
32-bit Gallium ELF binary
Definition: GalliumBinaries.h:194
const GalliumKernel & getKernel(uint32_t index) const
get kernel by index
Definition: GalliumBinaries.h:325
GalliumSectionType
Gallium format section type.
Definition: GalliumBinaries.h:112
bool dx10Clamp
DX10 CLAMP mode.
Definition: GalliumBinaries.h:368
64-bit Gallium ELF binary
Definition: GalliumBinaries.h:214
utilities for other libraries and programs
uint32_t size
size of section
Definition: GalliumBinaries.h:128
uint32_t scratchBufferSize
size of scratch buffer
Definition: GalliumBinaries.h:370
uint32_t getProgramInfosNum() const
returns program infos number
Definition: GalliumBinaries.h:154
CString kernelName
kernel's name
Definition: GalliumBinaries.h:105
bool is64BitElfBinary() const
return true if inner binary is 64-bit
Definition: GalliumBinaries.h:278
const char * getDisassembly() const
return disassembly content (without null-character)
Definition: GalliumBinaries.h:229
uint32_t progInfosNum
program info entries number
Definition: GalliumBinaries.h:138
const GalliumSection & getSection(uint32_t index) const
get section with specified index
Definition: GalliumBinaries.h:314
bool tgSize
enable TG_SIZE_EN bit
Definition: GalliumBinaries.h:365
uint32_t pgmRSRC1
pgmRSRC1 register value
Definition: GalliumBinaries.h:358
GPU identification utilities.
virtual ~GalliumElfBinary64()
destructor
uint32_t getSectionSize(uint32_t index) const
get size of section with specified index
Definition: GalliumBinaries.h:302
create elf proginfomap
Definition: GalliumBinaries.h:52
class ElfBinaryTemplate< Elf32Types > ElfBinary32
type for 32-bit ELF binary
Definition: ElfBinaries.h:380
GalliumBinary(size_t binaryCodeSize, cxbyte *binaryCode, Flags creationFlags)
constructor
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
GalliumArgSemantic
Gallium semantic field type.
Definition: GalliumBinaries.h:74
uint32_t getKernelIndex(const char *name) const
returns kernel index
bool hasProgInfoMap() const
return true if binary has program info map
Definition: GalliumBinaries.h:205
uint32_t offset
offset in ElfBinary
Definition: GalliumBinaries.h:107
size_t getDisassemblySize() const
returns size of disassembly
Definition: GalliumBinaries.h:183
void setInput(const GalliumInput *input)
set input
cxbyte * getSectionContent(uint32_t index)
get content for section with specified index
Definition: GalliumBinaries.h:310
cxuint dimMask
mask of dimension (bits: 0 - X, 1 - Y, 2 - Z)
Definition: GalliumBinaries.h:355
GalliumElfBinary32 & getElfBinary32()
returns Gallium inner ELF 32-bit binary
Definition: GalliumBinaries.h:282
bool hasDisassembly() const
returns true if disassembly available
Definition: GalliumBinaries.h:179
const cxbyte * getBinaryCode() const
returns binary code data
Definition: GalliumBinaries.h:271
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:132
pointer to constant memory