23 #ifndef __CLRX_AMDBINARIES_H__
24 #define __CLRX_AMDBINARIES_H__
26 #include <CLRX/Config.h>
32 #include <CLRX/amdbin/Elf.h>
43 AMDBIN_INNER_INT_CREATE_ALL = 0xff,
70 UCHAR, CHAR, USHORT, SHORT, UINT, INT, ULONG, LONG, FLOAT, DOUBLE, POINTER, IMAGE,
71 IMAGE1D, IMAGE1D_ARRAY, IMAGE1D_BUFFER, IMAGE2D, IMAGE2D_ARRAY, IMAGE3D,
72 UCHAR2, UCHAR3, UCHAR4, UCHAR8, UCHAR16,
73 CHAR2, CHAR3, CHAR4, CHAR8, CHAR16,
74 USHORT2, USHORT3, USHORT4, USHORT8, USHORT16,
75 SHORT2, SHORT3, SHORT4, SHORT8, SHORT16,
76 UINT2, UINT3, UINT4, UINT8, UINT16,
77 INT2, INT3, INT4, INT8, INT16,
78 ULONG2, ULONG3, ULONG4, ULONG8, ULONG16,
79 LONG2, LONG3, LONG4, LONG8, LONG16,
80 FLOAT2, FLOAT3, FLOAT4, FLOAT8, FLOAT16,
81 DOUBLE2, DOUBLE3, DOUBLE4, DOUBLE8, DOUBLE16,
82 SAMPLER, STRUCTURE, COUNTER32, COUNTER64, PIPE, CMDQUEUE, CLKEVENT,
83 MAX_VALUE = COUNTER64,
84 MAX_VALUE_CL2 = CLKEVENT,
94 return argType>=KernelArgType::MIN_IMAGE && argType<=KernelArgType::MAX_IMAGE;
113 KARG_PTR_ACCESS_MASK = 3,
158 CALNOTE_ATI_PROGINFO = 1,
159 CALNOTE_ATI_INPUTS = 2,
160 CALNOTE_ATI_OUTPUTS = 3,
161 CALNOTE_ATI_CONDOUT = 4,
162 CALNOTE_ATI_FLOAT32CONSTS = 5,
163 CALNOTE_ATI_INT32CONSTS = 6,
164 CALNOTE_ATI_BOOL32CONSTS = 7,
165 CALNOTE_ATI_EARLYEXIT = 8,
166 CALNOTE_ATI_GLOBAL_BUFFERS = 9,
167 CALNOTE_ATI_CONSTANT_BUFFERS = 10,
168 CALNOTE_ATI_INPUT_SAMPLERS = 11,
169 CALNOTE_ATI_PERSISTENT_BUFFERS = 12,
170 CALNOTE_ATI_SCRATCH_BUFFERS = 13,
171 CALNOTE_ATI_SUB_CONSTANT_BUFFERS = 14,
172 CALNOTE_ATI_UAV_MAILBOX_SIZE = 15,
173 CALNOTE_ATI_UAV = 16,
174 CALNOTE_ATI_UAV_OP_MASK = 17,
175 CALNOTE_ATI_MAXTYPE = CALNOTE_ATI_UAV_OP_MASK
268 uint32_t encodingEntriesNum;
289 {
return kernelName; }
293 {
return encodingEntriesNum; }
297 {
return encodingEntries[index]; }
301 {
return encodingEntries[index]; }
305 {
return calNotesTable[encodingIndex].size(); }
309 {
return *(calNotesTable[encodingIndex][index]).header; }
313 {
return *(calNotesTable[encodingIndex][index]).header; }
317 {
return calNotesTable[encodingIndex][index].data; }
320 {
return calNotesTable[encodingIndex][index].data; }
329 {
return calNotesTable[encodingIndex][index]; }
338 {
return calNotesTable[encodingIndex][index]; }
342 {
return calNotesTable[encodingIndex]; }
346 {
return calNotesTable[encodingIndex]; }
481 template<
typename Types>
641 void initKernelInfos(
Flags creationFlags);
666 {
return innerBinary; }
670 {
return innerBinary; }
674 {
return innerBinary; }
686 void initKernelInfos(
Flags creationFlags);
711 {
return innerBinary; }
715 {
return innerBinary; }
718 {
return innerBinary; }
722 extern bool isAmdBinary(
size_t binaryCodeSize,
const cxbyte* binaryCode);
732 size_t binaryCodeSize, cxbyte* binaryCode,
AmdInnerX86Binary32 & getInnerBinary()
get inner binary
Definition: AmdBinaries.h:669
bool hasInfoStrings() const
returns true if binary has info strings
Definition: AmdBinaries.h:706
AmdMainType getType() const
get binary type
Definition: AmdBinaries.h:418
buffer is restrict specifier
Definition: AmdBinaries.h:115
constant buffer
Definition: AmdBinaries.h:114
write only image
Definition: AmdBinaries.h:111
create map of symbols for inner binaries
Definition: AmdBinaries.h:53
create kernel informations
Definition: AmdBinaries.h:46
uint32_t uavId
uav id
Definition: AmdBinaries.h:221
CString driverInfo
driver info string
Definition: AmdBinaries.h:409
creation flags for ELF binaries
Definition: ElfBinaries.h:59
non copyable and non movable base structure (class)
Definition: Utilities.h:43
const AmdInnerX86Binary64 & getInnerBinary() const
get inner binary
Definition: AmdBinaries.h:717
Array< std::pair< CString, size_t > > KernelInfoMap
Kernel info map.
Definition: AmdBinaries.h:403
bool hasInnerBinary() const
return true if binary has inner binary
Definition: AmdBinaries.h:710
const CALEncodingEntry & getCALEncodingEntry(cxuint index) const
get CALEncodingDictionaryEntries
Definition: AmdBinaries.h:296
AMD main binary for X86-64 systems.
Definition: AmdBinaries.h:681
uint32_t Flags
type for declaring various flags
Definition: Utilities.h:97
KernelPtrSpace
kernel pointer type of argument
Definition: AmdBinaries.h:98
const cxbyte * getGlobalData() const
get global data
Definition: AmdBinaries.h:516
bool hasKernelInfoMap() const
returns true if binary has kernel informations map
Definition: AmdBinaries.h:612
void getKernelInfos(Array< KernelInfo > &kernelInfos) const
generate kernel info from this binary and save to KernelInfo array
create CAL notes for AMD inner GPU binary
Definition: AmdBinaries.h:56
size_t getGlobalDataSize() const
get global data size
Definition: AmdBinaries.h:512
uint32_t sampler
sampler
Definition: AmdBinaries.h:245
uint32_t nameOffsetLo
low half of name offset
Definition: AmdBinaries.h:148
CALNote & getCALNote(cxuint encodingIndex, uint32_t index)
get CALNote
Definition: AmdBinaries.h:337
uint32_t size
size
Definition: AmdBinaries.h:231
bool hasInfoStrings() const
returns true if binary has info strings
Definition: AmdBinaries.h:661
CString kernelName
kernel name
Definition: AmdBinaries.h:254
uint32_t f1
field 1
Definition: AmdBinaries.h:222
class ElfBinaryTemplate< Elf64Types > ElfBinary64
type for 64-bit ELF binary
Definition: ElfBinaries.h:382
void getKernelInfos(Array< KernelInfo > &kernelInfos) const
generate kernel info from this binary and save to KernelInfo array
only for internal usage
Definition: AmdBinaries.h:44
const AmdGPUKernelHeader & getKernelHeaderEntry(size_t index) const
get kernel header entry for specified index
Definition: AmdBinaries.h:527
all AMD binaries creation flags
Definition: AmdBinaries.h:58
const KernelInfo & getKernelInfo(size_t index) const
get kernel information with specified index
Definition: AmdBinaries.h:430
bool hasKernelInfo() const
returns true if binary has kernel informations
Definition: AmdBinaries.h:567
X86_64 kernel argument symbol.
Definition: AmdBinaries.h:130
const CALNote & getCALNote(cxuint encodingIndex, uint32_t index) const
get CALNote
Definition: AmdBinaries.h:328
kernel argument info structure
Definition: AmdBinaries.h:120
bool hasKernelHeaderMap() const
return true if binary has kernel header map
Definition: AmdBinaries.h:628
an array class
Definition: Containers.h:38
AMD main binary for X86 systems.
Definition: AmdBinaries.h:636
X86_64 kernel argument symbol.
Definition: AmdBinaries.h:143
AmdMainType
AMD main binary type.
Definition: AmdBinaries.h:389
CALEncodingEntry & getCALEncodingEntry(cxuint index)
get CALEncodingDictionaryEntries
Definition: AmdBinaries.h:300
AmdMainGPUBinary64(size_t binaryCodeSize, cxbyte *binaryCode, Flags creationFlags=AMDBIN_CREATE_ALL)
const Array< CALNote > & getCALNotes(cxuint encodingIndex) const
get all CALNotes for encoding index
Definition: AmdBinaries.h:341
Array< std::pair< CString, size_t > > KernelHeaderMap
kernel header map type
Definition: AmdBinaries.h:467
bool isAmdBinary(size_t binaryCodeSize, const cxbyte *binaryCode)
check whether binary code is Amd Catalyst binary
cxbyte * data
data of CAL note
Definition: AmdBinaries.h:201
void initMainGPUBinary(typename Types::ElfBinary &binary)
initialize main gpu binary (internal use only)
uint32_t ptrType
pointer type
Definition: AmdBinaries.h:146
uint32_t address
address of value
Definition: AmdBinaries.h:214
bool hasKernelInfo() const
returns true if binary has kernel informations
Definition: AmdBinaries.h:698
Array< AmdKernelArg > argInfos
array of argument informations
Definition: AmdBinaries.h:255
bool hasInfoStrings() const
returns true if binary has info strings
Definition: AmdBinaries.h:579
uint32_t index
index
Definition: AmdBinaries.h:237
const char * getMetadata(size_t index) const
get metadata for specified inner binary
Definition: AmdBinaries.h:504
no special flags
Definition: AmdBinaries.h:109
There are not copied (ULEV must be used)
Definition: AmdBinaries.h:242
size_t getInnerBinariesNum() const
get number of inner binaries
Definition: AmdBinaries.h:485
shift for convert inner binary flags into elf binary flags
Definition: AmdBinaries.h:59
KernelArgType
kernel argument type
Definition: AmdBinaries.h:67
uint32_t value
value to set
Definition: AmdBinaries.h:215
bool hasKernelHeaders() const
return true if binary has kernel headers
Definition: AmdBinaries.h:583
bool hasKernelHeaders() const
return true if binary has kernel headers
Definition: AmdBinaries.h:624
uint32_t ptrAccess
pointer access flags
Definition: AmdBinaries.h:134
AMD inner X86 binary.
Definition: AmdBinaries.h:350
CString typeName
name of type of argument
Definition: AmdBinaries.h:125
char * getMetadata(size_t index)
get metadata for specified inner binary
Definition: AmdBinaries.h:508
const KernelInfo * getKernelInfos() const
get kernel informations array
Definition: AmdBinaries.h:426
create map of sections for inner binaries
Definition: AmdBinaries.h:52
create map of inner binaries
Definition: AmdBinaries.h:48
binary for x86-64 systems
uint32_t machine
machine type
Definition: AmdBinaries.h:181
uint32_t getCALEncodingEntriesNum() const
get CALEncoding entries number
Definition: AmdBinaries.h:292
Array< CALNote > & getCALNotes(cxuint encodingIndex)
get all CALNotes for encoding index
Definition: AmdBinaries.h:345
uint32_t flags
flags
Definition: AmdBinaries.h:185
size_t globalDataSize
global data size
Definition: AmdBinaries.h:474
const AmdInnerX86Binary32 & getInnerBinary() const
get inner binary
Definition: AmdBinaries.h:673
AMD main binary for GPU for 64-bit mode.
Definition: AmdBinaries.h:595
size_t getNameOffset() const
get name offset
Definition: AmdBinaries.h:138
uint32_t nameOffset
name offset
Definition: AmdBinaries.h:135
AMD inner binary for GPU binaries that represent a single kernel.
Definition: AmdBinaries.h:262
size_t getMetadataSize(size_t index) const
get metadata size for specified inner binary
Definition: AmdBinaries.h:500
uint32_t type
type of entry
Definition: AmdBinaries.h:182
uint32_t getCALNotesNum(cxuint encodingIndex) const
get CAL Notes number
Definition: AmdBinaries.h:304
CAL program info entry. There are not copied (ULEV must be used)
Definition: AmdBinaries.h:212
create map of kernel informations
Definition: AmdBinaries.h:47
CString compileOptions
compiler options string
Definition: AmdBinaries.h:410
AmdMainBinaryBase * createAmdBinaryFromCode(size_t binaryCodeSize, cxbyte *binaryCode, Flags creationFlags=AMDBIN_CREATE_ALL)
create AMD binary object from binary code
AmdMainX86Binary64(size_t binaryCodeSize, cxbyte *binaryCode, Flags creationFlags=AMDBIN_CREATE_ALL)
create compile options and driver info
Definition: AmdBinaries.h:49
uint32_t input
input
Definition: AmdBinaries.h:244
bool hasInnerBinary() const
return true if binary has inner binary
Definition: AmdBinaries.h:665
size_t getNameOffset() const
compute name offset
Definition: AmdBinaries.h:152
There are not copied (ULEV must be used)
Definition: AmdBinaries.h:228
size_t getKernelHeadersNum() const
get kernel header number
Definition: AmdBinaries.h:523
CALNoteHeader * header
header of CAL note
Definition: AmdBinaries.h:200
uint32_t ptrAccess
pointer access flags
Definition: AmdBinaries.h:147
AmdMainGPUBinaryBase(AmdMainType type)
constructor
cxbyte * getGlobalData()
get global data
Definition: AmdBinaries.h:519
create kernel headers map
Definition: AmdBinaries.h:51
bool hasCALNotes() const
return true if binary has CAL notes infos
Definition: AmdBinaries.h:284
main AMD binary base class
Definition: AmdBinaries.h:399
inlines for accessing memory words in LittleEndian and unaligned
AmdMainGPUBinary32(size_t binaryCodeSize, cxbyte *binaryCode, Flags creationFlags=AMDBIN_CREATE_ALL)
bool hasKernelInfoMap() const
returns true if binary has kernel informations map
Definition: AmdBinaries.h:571
uint32_t nameOffsetHi
high half of name offset
Definition: AmdBinaries.h:149
KernelHeaderMap kernelHeaderMap
kernel header map
Definition: AmdBinaries.h:473
There are not copied (ULEV must be used)
Definition: AmdBinaries.h:219
Array< std::pair< CString, size_t > > InnerBinaryMap
inner binary map type
Definition: AmdBinaries.h:465
AmdMainType type
type of binaries
Definition: AmdBinaries.h:405
cxbyte ptrAccess
pointer access flags
Definition: AmdBinaries.h:124
uint32_t offset
offset in ELF
Definition: AmdBinaries.h:183
const cxbyte * getKernelHeader(size_t index) const
get kernel header for specified index
Definition: AmdBinaries.h:542
const CString & getDriverInfo() const
get driver info string
Definition: AmdBinaries.h:437
bool hasKernelInfo() const
returns true if binary has kernel informations
Definition: AmdBinaries.h:653
const AmdInnerGPUBinary32 & getInnerBinary(size_t index) const
get inner binary with specified index
Definition: AmdBinaries.h:493
const CString & getKernelName() const
get kernel name
Definition: AmdBinaries.h:288
uint32_t ptrType
pointer type
Definition: AmdBinaries.h:133
utilities for other libraries and programs
uint32_t size
size
Definition: AmdBinaries.h:184
bool hasKernelInfo() const
returns true if binary has kernel informations
Definition: AmdBinaries.h:608
KernelPtrSpace ptrSpace
pointer space for argument if argument is pointer or image
Definition: AmdBinaries.h:123
AMD main binary for GPU for 32-bit mode.
Definition: AmdBinaries.h:554
const CString & getCompileOptions() const
get compile options string
Definition: AmdBinaries.h:441
bool hasInnerBinaryMap() const
returns true if binary has inner binary map
Definition: AmdBinaries.h:575
CALNoteHeader & getCALNoteHeader(cxuint encodingIndex, uint32_t index)
get CAL Note header
Definition: AmdBinaries.h:312
Array< AmdGPUKernelHeader > kernelHeaders
kernel headers
Definition: AmdBinaries.h:472
AmdInnerX86Binary64 & getInnerBinary()
get inner binary
Definition: AmdBinaries.h:714
const cxbyte * getCALNoteData(cxuint encodingIndex, uint32_t index) const
get CAL Note data
Definition: AmdBinaries.h:316
uint32_t argType
arg type
Definition: AmdBinaries.h:145
binary for GPU with 64-bit memory model
KernelArgType argType
argument type
Definition: AmdBinaries.h:122
KernelInfoMap kernelInfosMap
kernel informations map
Definition: AmdBinaries.h:407
AmdGPUKernelHeader & getKernelHeaderEntry(size_t index)
get kernel header entry for specified index
Definition: AmdBinaries.h:534
bool hasKernelHeaderMap() const
return true if binary has kernel header map
Definition: AmdBinaries.h:587
ATI CAL note. There are not copied (ULEV must be used)
Definition: AmdBinaries.h:198
volatile buffer
Definition: AmdBinaries.h:116
CALEncodingEntry. There are not copied (ULEV must be used)
Definition: AmdBinaries.h:179
AMD inner binary for X86-64 binaries.
Definition: AmdBinaries.h:371
size_t getKernelHeaderSize(size_t index) const
get kernel header size for specified index
Definition: AmdBinaries.h:538
main AMD GPU binary base class
Definition: AmdBinaries.h:461
class ElfBinaryTemplate< Elf32Types > ElfBinary32
type for 32-bit ELF binary
Definition: ElfBinaries.h:380
uint32_t argType
arg type
Definition: AmdBinaries.h:132
AmdMainBinaryBase(AmdMainType type)
constructor
kernel informations
Definition: AmdBinaries.h:252
const CALNoteHeader & getCALNoteHeader(cxuint encodingIndex, uint32_t index) const
get CAL Note header
Definition: AmdBinaries.h:308
Definition: AmdBinaries.h:55
bool isKernelArgImage(KernelArgType argType)
return true if argType is image
Definition: AmdBinaries.h:92
uint32_t f2
field 2
Definition: AmdBinaries.h:223
size_t getKernelInfosNum() const
get kernel informations number
Definition: AmdBinaries.h:422
uint32_t offset
offset
Definition: AmdBinaries.h:230
Array< AmdInnerGPUBinary32 > innerBinaries
inner binaries
Definition: AmdBinaries.h:469
bool hasInnerBinaryMap() const
returns true if binary has inner binary map
Definition: AmdBinaries.h:616
uint32_t size
size
Definition: AmdBinaries.h:238
AmdMainX86Binary32(size_t binaryCodeSize, cxbyte *binaryCode, Flags creationFlags=AMDBIN_CREATE_ALL)
uint32_t type
type
Definition: AmdBinaries.h:224
read only image
Definition: AmdBinaries.h:110
InnerBinaryMap innerBinaryMap
inner binary map
Definition: AmdBinaries.h:470
bool hasInfoStrings() const
returns true if binary has info strings
Definition: AmdBinaries.h:620
uint8_t ULEV(const uint8_t &t)
convert from/to little endian value from unaligned memory
simple C-string container
Definition: CString.h:38
containers and other utils for other libraries and programs
Array< KernelInfo > kernelInfos
kernel informations
Definition: AmdBinaries.h:406
bool hasKernelInfoMap() const
returns true if binary has kernel informations map
Definition: AmdBinaries.h:657
cxbyte * getKernelHeader(size_t index)
get kernel header for specified index
Definition: AmdBinaries.h:546
There are not copied (ULEV must be used)
Definition: AmdBinaries.h:235
cxbyte * getCALNoteData(cxuint encodingIndex, uint32_t index)
get CAL Note data
Definition: AmdBinaries.h:319
bool hasKernelInfoMap() const
returns true if binary has kernel informations map
Definition: AmdBinaries.h:702
std::unique_ptr< AmdGPUKernelMetadata[]> metadatas
AMD metadatas.
Definition: AmdBinaries.h:471
read-write image (???)
Definition: AmdBinaries.h:112
AmdInnerGPUBinary32 & getInnerBinary(size_t index)
get inner binary with specified index
Definition: AmdBinaries.h:489
pointer to constant memory
create kernel headers
Definition: AmdBinaries.h:50
CString argName
argument name
Definition: AmdBinaries.h:126
cxbyte * globalData
global data content
Definition: AmdBinaries.h:475