23 #ifndef __CLRX_AMDBINARIES_H__ 24 #define __CLRX_AMDBINARIES_H__ 48 AMDBIN_INNER_INT_CREATE_ALL = 0xff,
75 UCHAR, CHAR, USHORT, SHORT, UINT, INT, ULONG, LONG, FLOAT, DOUBLE, POINTER, IMAGE,
76 IMAGE1D, IMAGE1D_ARRAY, IMAGE1D_BUFFER, IMAGE2D, IMAGE2D_ARRAY, IMAGE3D,
77 UCHAR2, UCHAR3, UCHAR4, UCHAR8, UCHAR16,
78 CHAR2, CHAR3, CHAR4, CHAR8, CHAR16,
79 USHORT2, USHORT3, USHORT4, USHORT8, USHORT16,
80 SHORT2, SHORT3, SHORT4, SHORT8, SHORT16,
81 UINT2, UINT3, UINT4, UINT8, UINT16,
82 INT2, INT3, INT4, INT8, INT16,
83 ULONG2, ULONG3, ULONG4, ULONG8, ULONG16,
84 LONG2, LONG3, LONG4, LONG8, LONG16,
85 FLOAT2, FLOAT3, FLOAT4, FLOAT8, FLOAT16,
86 DOUBLE2, DOUBLE3, DOUBLE4, DOUBLE8, DOUBLE16,
87 SAMPLER, STRUCTURE, COUNTER32, COUNTER64, PIPE, CMDQUEUE, CLKEVENT,
88 MAX_VALUE = COUNTER64,
89 MAX_VALUE_CL2 = CLKEVENT,
99 return argType>=KernelArgType::MIN_IMAGE && argType<=KernelArgType::MAX_IMAGE;
118 KARG_PTR_ACCESS_MASK = 3,
144 {
return ULEV(nameOffset); }
158 {
return (uint64_t(
ULEV(nameOffsetHi))<<32)+uint64_t(
ULEV(nameOffsetLo)); }
163 CALNOTE_ATI_PROGINFO = 1,
164 CALNOTE_ATI_INPUTS = 2,
165 CALNOTE_ATI_OUTPUTS = 3,
166 CALNOTE_ATI_CONDOUT = 4,
167 CALNOTE_ATI_FLOAT32CONSTS = 5,
168 CALNOTE_ATI_INT32CONSTS = 6,
169 CALNOTE_ATI_BOOL32CONSTS = 7,
170 CALNOTE_ATI_EARLYEXIT = 8,
171 CALNOTE_ATI_GLOBAL_BUFFERS = 9,
172 CALNOTE_ATI_CONSTANT_BUFFERS = 10,
173 CALNOTE_ATI_INPUT_SAMPLERS = 11,
174 CALNOTE_ATI_PERSISTENT_BUFFERS = 12,
175 CALNOTE_ATI_SCRATCH_BUFFERS = 13,
176 CALNOTE_ATI_SUB_CONSTANT_BUFFERS = 14,
177 CALNOTE_ATI_UAV_MAILBOX_SIZE = 15,
178 CALNOTE_ATI_UAV = 16,
179 CALNOTE_ATI_UAV_OP_MASK = 17,
180 CALNOTE_ATI_MAXTYPE = CALNOTE_ATI_UAV_OP_MASK
273 uint32_t encodingEntriesNum;
294 {
return kernelName; }
298 {
return encodingEntriesNum; }
302 {
return encodingEntries[index]; }
306 {
return encodingEntries[index]; }
310 {
return calNotesTable[encodingIndex].
size(); }
314 {
return *(calNotesTable[encodingIndex][index]).header; }
318 {
return *(calNotesTable[encodingIndex][index]).header; }
322 {
return calNotesTable[encodingIndex][index].
data; }
325 {
return calNotesTable[encodingIndex][index].
data; }
334 {
return calNotesTable[encodingIndex][index]; }
343 {
return calNotesTable[encodingIndex][index]; }
347 {
return calNotesTable[encodingIndex]; }
351 {
return calNotesTable[encodingIndex]; }
436 {
return kernelInfos.
size(); }
440 {
return kernelInfos.
data(); }
444 {
return kernelInfos[index]; }
447 const KernelInfo& getKernelInfo(
const char* name)
const;
451 {
return driverInfo; }
455 {
return compileOptions; }
494 template<
typename Types>
495 void initMainGPUBinary(
typename Types::ElfBinary& binary);
499 {
return innerBinaries.
size(); }
503 {
return innerBinaries[index]; }
507 {
return innerBinaries[index]; }
514 {
return metadatas[index].size; }
518 {
return metadatas[index].data; }
522 {
return metadatas[index].data; }
526 {
return globalDataSize; }
530 {
return globalData; }
533 {
return globalData; }
537 {
return kernelHeaders.
size(); }
541 {
return kernelHeaders[index]; }
548 {
return kernelHeaders[index]; }
552 {
return kernelHeaders[index].
size; }
556 {
return kernelHeaders[index].
data; }
560 {
return kernelHeaders[index].
data; }
660 void initKernelInfos(
Flags creationFlags);
685 {
return innerBinary; }
689 {
return innerBinary; }
693 {
return innerBinary; }
705 void initKernelInfos(
Flags creationFlags);
730 {
return innerBinary; }
734 {
return innerBinary; }
737 {
return innerBinary; }
751 size_t binaryCodeSize,
cxbyte* binaryCode,
AmdInnerX86Binary32 & getInnerBinary()
get inner binary
Definition: AmdBinaries.h:688
bool hasInfoStrings() const
returns true if binary has info strings
Definition: AmdBinaries.h:725
AmdMainType getType() const
get binary type
Definition: AmdBinaries.h:431
uint32_t uavId
uav id
Definition: AmdBinaries.h:226
CString driverInfo
driver info string
Definition: AmdBinaries.h:422
non copyable and non movable base structure (class)
Definition: Utilities.h:43
const AmdInnerX86Binary64 & getInnerBinary() const
get inner binary
Definition: AmdBinaries.h:736
Array< std::pair< CString, size_t > > KernelInfoMap
Kernel info map.
Definition: AmdBinaries.h:416
bool hasInnerBinary() const
return true if binary has inner binary
Definition: AmdBinaries.h:729
const CALEncodingEntry & getCALEncodingEntry(cxuint index) const
get CALEncodingDictionaryEntries
Definition: AmdBinaries.h:301
AMD main binary for X86-64 systems.
Definition: AmdBinaries.h:700
uint32_t Flags
type for declaring various flags
Definition: Utilities.h:97
KernelPtrSpace
kernel pointer type of argument
Definition: AmdBinaries.h:103
create map of symbols for inner binaries
Definition: AmdBinaries.h:58
const cxbyte * getGlobalData() const
get global data
Definition: AmdBinaries.h:529
bool hasKernelInfoMap() const
returns true if binary has kernel informations map
Definition: AmdBinaries.h:631
constant buffer
Definition: AmdBinaries.h:119
size_t getGlobalDataSize() const
get global data size
Definition: AmdBinaries.h:525
uint32_t sampler
sampler
Definition: AmdBinaries.h:250
uint32_t nameOffsetLo
low half of name offset
Definition: AmdBinaries.h:153
CALNote & getCALNote(cxuint encodingIndex, uint32_t index)
get CALNote
Definition: AmdBinaries.h:342
uint32_t size
size
Definition: AmdBinaries.h:236
bool hasInfoStrings() const
returns true if binary has info strings
Definition: AmdBinaries.h:680
read-write image (???)
Definition: AmdBinaries.h:117
CString kernelName
kernel name
Definition: AmdBinaries.h:259
uint32_t f1
field 1
Definition: AmdBinaries.h:227
class ElfBinaryTemplate< Elf64Types > ElfBinary64
type for 64-bit ELF binary
Definition: ElfBinaries.h:437
const AmdGPUKernelHeader & getKernelHeaderEntry(size_t index) const
get kernel header entry for specified index
Definition: AmdBinaries.h:540
const KernelInfo & getKernelInfo(size_t index) const
get kernel information with specified index
Definition: AmdBinaries.h:443
bool hasKernelInfo() const
returns true if binary has kernel informations
Definition: AmdBinaries.h:583
X86_64 kernel argument symbol.
Definition: AmdBinaries.h:135
const CALNote & getCALNote(cxuint encodingIndex, uint32_t index) const
get CALNote
Definition: AmdBinaries.h:333
kernel argument info structure
Definition: AmdBinaries.h:125
bool hasKernelHeaderMap() const
return true if binary has kernel header map
Definition: AmdBinaries.h:647
OpenCL 2.0 binary type (32-bit)
an array class
Definition: Containers.h:38
AMD main binary for X86 systems.
Definition: AmdBinaries.h:655
X86_64 kernel argument symbol.
Definition: AmdBinaries.h:148
AmdMainType
AMD main binary type.
Definition: AmdBinaries.h:401
CALEncodingEntry & getCALEncodingEntry(cxuint index)
get CALEncodingDictionaryEntries
Definition: AmdBinaries.h:305
OpenCL 2.0 binary type (64-bit)
const Array< CALNote > & getCALNotes(cxuint encodingIndex) const
get all CALNotes for encoding index
Definition: AmdBinaries.h:346
Array< std::pair< CString, size_t > > KernelHeaderMap
kernel header map type
Definition: AmdBinaries.h:480
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:206
uint32_t ptrType
pointer type
Definition: AmdBinaries.h:151
create CAL notes for AMD inner GPU binary
Definition: AmdBinaries.h:61
uint32_t address
address of value
Definition: AmdBinaries.h:219
bool hasKernelInfo() const
returns true if binary has kernel informations
Definition: AmdBinaries.h:717
Array< AmdKernelArg > argInfos
array of argument informations
Definition: AmdBinaries.h:260
bool hasInfoStrings() const
returns true if binary has info strings
Definition: AmdBinaries.h:595
uint32_t index
index
Definition: AmdBinaries.h:242
const char * getMetadata(size_t index) const
get metadata for specified inner binary
Definition: AmdBinaries.h:517
all AMD binaries creation flags
Definition: AmdBinaries.h:63
There are not copied (ULEV must be used)
Definition: AmdBinaries.h:247
size_t getInnerBinariesNum() const
get number of inner binaries
Definition: AmdBinaries.h:498
KernelArgType
kernel argument type
Definition: AmdBinaries.h:72
uint32_t value
value to set
Definition: AmdBinaries.h:220
bool hasKernelHeaders() const
return true if binary has kernel headers
Definition: AmdBinaries.h:599
bool hasKernelHeaders() const
return true if binary has kernel headers
Definition: AmdBinaries.h:643
uint32_t ptrAccess
pointer access flags
Definition: AmdBinaries.h:139
AMD inner X86 binary.
Definition: AmdBinaries.h:362
CString typeName
name of type of argument
Definition: AmdBinaries.h:130
char * getMetadata(size_t index)
get metadata for specified inner binary
Definition: AmdBinaries.h:521
const KernelInfo * getKernelInfos() const
get kernel informations array
Definition: AmdBinaries.h:439
buffer is restrict specifier
Definition: AmdBinaries.h:120
volatile buffer
Definition: AmdBinaries.h:121
unsigned char cxbyte
unsigned byte
Definition: Config.h:213
create kernel headers map
Definition: AmdBinaries.h:56
create map of inner binaries
Definition: AmdBinaries.h:53
binary for x86-64 systems
uint32_t machine
machine type
Definition: AmdBinaries.h:186
uint32_t getCALEncodingEntriesNum() const
get CALEncoding entries number
Definition: AmdBinaries.h:297
read only image
Definition: AmdBinaries.h:115
main namespace
Definition: AsmDefs.h:38
Array< CALNote > & getCALNotes(cxuint encodingIndex)
get all CALNotes for encoding index
Definition: AmdBinaries.h:350
create kernel informations
Definition: AmdBinaries.h:51
uint32_t flags
flags
Definition: AmdBinaries.h:190
size_t globalDataSize
global data size
Definition: AmdBinaries.h:487
const AmdInnerX86Binary32 & getInnerBinary() const
get inner binary
Definition: AmdBinaries.h:692
create map of sections for inner binaries
Definition: AmdBinaries.h:57
shift for convert inner binary flags into elf binary flags
Definition: AmdBinaries.h:64
AMD main binary for GPU for 64-bit mode.
Definition: AmdBinaries.h:611
size_t getNameOffset() const
get name offset
Definition: AmdBinaries.h:143
uint32_t nameOffset
name offset
Definition: AmdBinaries.h:140
create compile options and driver info
Definition: AmdBinaries.h:54
AMD inner binary for GPU binaries that represent a single kernel.
Definition: AmdBinaries.h:267
size_t getMetadataSize(size_t index) const
get metadata size for specified inner binary
Definition: AmdBinaries.h:513
uint32_t type
type of entry
Definition: AmdBinaries.h:187
uint32_t getCALNotesNum(cxuint encodingIndex) const
get CAL Notes number
Definition: AmdBinaries.h:309
CAL program info entry. There are not copied (ULEV must be used)
Definition: AmdBinaries.h:217
unsigned int cxuint
unsigned int
Definition: Config.h:221
CString compileOptions
compiler options string
Definition: AmdBinaries.h:423
AmdMainBinaryBase * createAmdBinaryFromCode(size_t binaryCodeSize, cxbyte *binaryCode, Flags creationFlags=AMDBIN_CREATE_ALL)
create AMD binary object from binary code
write only image
Definition: AmdBinaries.h:116
uint32_t input
input
Definition: AmdBinaries.h:249
bool hasInnerBinary() const
return true if binary has inner binary
Definition: AmdBinaries.h:684
size_t getNameOffset() const
compute name offset
Definition: AmdBinaries.h:157
There are not copied (ULEV must be used)
Definition: AmdBinaries.h:233
size_t getKernelHeadersNum() const
get kernel header number
Definition: AmdBinaries.h:536
CALNoteHeader * header
header of CAL note
Definition: AmdBinaries.h:205
uint32_t ptrAccess
pointer access flags
Definition: AmdBinaries.h:152
cxbyte * getGlobalData()
get global data
Definition: AmdBinaries.h:532
bool hasCALNotes() const
return true if binary has CAL notes infos
Definition: AmdBinaries.h:289
main AMD binary base class
Definition: AmdBinaries.h:412
inlines for accessing memory words in LittleEndian and unaligned
bool hasKernelInfoMap() const
returns true if binary has kernel informations map
Definition: AmdBinaries.h:587
uint32_t nameOffsetHi
high half of name offset
Definition: AmdBinaries.h:154
KernelHeaderMap kernelHeaderMap
kernel header map
Definition: AmdBinaries.h:486
GPUDeviceType
type of GPU device
Definition: GPUId.h:38
There are not copied (ULEV must be used)
Definition: AmdBinaries.h:224
Array< std::pair< CString, size_t > > InnerBinaryMap
inner binary map type
Definition: AmdBinaries.h:478
AmdMainType type
type of binaries
Definition: AmdBinaries.h:418
cxbyte ptrAccess
pointer access flags
Definition: AmdBinaries.h:129
uint32_t offset
offset in ELF
Definition: AmdBinaries.h:188
const cxbyte * getKernelHeader(size_t index) const
get kernel header for specified index
Definition: AmdBinaries.h:555
const CString & getDriverInfo() const
get driver info string
Definition: AmdBinaries.h:450
bool hasKernelInfo() const
returns true if binary has kernel informations
Definition: AmdBinaries.h:672
const AmdInnerGPUBinary32 & getInnerBinary(size_t index) const
get inner binary with specified index
Definition: AmdBinaries.h:506
const CString & getKernelName() const
get kernel name
Definition: AmdBinaries.h:293
uint32_t ptrType
pointer type
Definition: AmdBinaries.h:138
utilities for other libraries and programs
Definition: AmdBinaries.h:60
uint32_t size
size
Definition: AmdBinaries.h:189
bool hasKernelInfo() const
returns true if binary has kernel informations
Definition: AmdBinaries.h:627
KernelPtrSpace ptrSpace
pointer space for argument if argument is pointer or image
Definition: AmdBinaries.h:128
AMD main binary for GPU for 32-bit mode.
Definition: AmdBinaries.h:567
const CString & getCompileOptions() const
get compile options string
Definition: AmdBinaries.h:454
bool hasInnerBinaryMap() const
returns true if binary has inner binary map
Definition: AmdBinaries.h:591
CALNoteHeader & getCALNoteHeader(cxuint encodingIndex, uint32_t index)
get CAL Note header
Definition: AmdBinaries.h:317
Array< AmdGPUKernelHeader > kernelHeaders
kernel headers
Definition: AmdBinaries.h:485
AmdInnerX86Binary64 & getInnerBinary()
get inner binary
Definition: AmdBinaries.h:733
no special flags
Definition: AmdBinaries.h:114
const cxbyte * getCALNoteData(cxuint encodingIndex, uint32_t index) const
get CAL Note data
Definition: AmdBinaries.h:321
uint32_t argType
arg type
Definition: AmdBinaries.h:150
binary for GPU with 64-bit memory model
KernelArgType argType
argument type
Definition: AmdBinaries.h:127
GPU identification utilities.
KernelInfoMap kernelInfosMap
kernel informations map
Definition: AmdBinaries.h:420
AmdGPUKernelHeader & getKernelHeaderEntry(size_t index)
get kernel header entry for specified index
Definition: AmdBinaries.h:547
bool hasKernelHeaderMap() const
return true if binary has kernel header map
Definition: AmdBinaries.h:603
ATI CAL note. There are not copied (ULEV must be used)
Definition: AmdBinaries.h:203
size_t size() const
returns number of elements
Definition: Containers.h:169
const T * data() const
get data
Definition: Containers.h:242
creation flags for ELF binaries
Definition: ElfBinaries.h:73
CALEncodingEntry. There are not copied (ULEV must be used)
Definition: AmdBinaries.h:184
AMD inner binary for X86-64 binaries.
Definition: AmdBinaries.h:383
size_t getKernelHeaderSize(size_t index) const
get kernel header size for specified index
Definition: AmdBinaries.h:551
main AMD GPU binary base class
Definition: AmdBinaries.h:474
class ElfBinaryTemplate< Elf32Types > ElfBinary32
type for 32-bit ELF binary
Definition: ElfBinaries.h:435
uint32_t argType
arg type
Definition: AmdBinaries.h:137
kernel informations
Definition: AmdBinaries.h:257
const CALNoteHeader & getCALNoteHeader(cxuint encodingIndex, uint32_t index) const
get CAL Note header
Definition: AmdBinaries.h:313
bool isKernelArgImage(KernelArgType argType)
return true if argType is image
Definition: AmdBinaries.h:97
uint32_t f2
field 2
Definition: AmdBinaries.h:228
size_t getKernelInfosNum() const
get kernel informations number
Definition: AmdBinaries.h:435
uint32_t offset
offset
Definition: AmdBinaries.h:235
Array< AmdInnerGPUBinary32 > innerBinaries
inner binaries
Definition: AmdBinaries.h:482
bool hasInnerBinaryMap() const
returns true if binary has inner binary map
Definition: AmdBinaries.h:635
uint32_t size
size
Definition: AmdBinaries.h:243
uint32_t type
type
Definition: AmdBinaries.h:229
create kernel headers
Definition: AmdBinaries.h:55
InnerBinaryMap innerBinaryMap
inner binary map
Definition: AmdBinaries.h:483
create map of kernel informations
Definition: AmdBinaries.h:52
bool hasInfoStrings() const
returns true if binary has info strings
Definition: AmdBinaries.h:639
uint8_t ULEV(const uint8_t &t)
convert from/to little endian value from unaligned memory
only for internal usage
Definition: AmdBinaries.h:49
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:419
bool hasKernelInfoMap() const
returns true if binary has kernel informations map
Definition: AmdBinaries.h:676
cxbyte * getKernelHeader(size_t index)
get kernel header for specified index
Definition: AmdBinaries.h:559
There are not copied (ULEV must be used)
Definition: AmdBinaries.h:240
cxbyte * getCALNoteData(cxuint encodingIndex, uint32_t index)
get CAL Note data
Definition: AmdBinaries.h:324
bool hasKernelInfoMap() const
returns true if binary has kernel informations map
Definition: AmdBinaries.h:721
std::unique_ptr< AmdGPUKernelMetadata[]> metadatas
AMD metadatas.
Definition: AmdBinaries.h:484
AmdInnerGPUBinary32 & getInnerBinary(size_t index)
get inner binary with specified index
Definition: AmdBinaries.h:502
pointer to constant memory
CString argName
argument name
Definition: AmdBinaries.h:131
cxbyte * globalData
global data content
Definition: AmdBinaries.h:488