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)); }
164 CALNOTE_ATI_PROGINFO = 1,
165 CALNOTE_ATI_INPUTS = 2,
166 CALNOTE_ATI_OUTPUTS = 3,
167 CALNOTE_ATI_CONDOUT = 4,
168 CALNOTE_ATI_FLOAT32CONSTS = 5,
169 CALNOTE_ATI_INT32CONSTS = 6,
170 CALNOTE_ATI_BOOL32CONSTS = 7,
171 CALNOTE_ATI_EARLYEXIT = 8,
172 CALNOTE_ATI_GLOBAL_BUFFERS = 9,
173 CALNOTE_ATI_CONSTANT_BUFFERS = 10,
174 CALNOTE_ATI_INPUT_SAMPLERS = 11,
175 CALNOTE_ATI_PERSISTENT_BUFFERS = 12,
176 CALNOTE_ATI_SCRATCH_BUFFERS = 13,
177 CALNOTE_ATI_SUB_CONSTANT_BUFFERS = 14,
178 CALNOTE_ATI_UAV_MAILBOX_SIZE = 15,
179 CALNOTE_ATI_UAV = 16,
180 CALNOTE_ATI_UAV_OP_MASK = 17,
181 CALNOTE_ATI_MAXTYPE = CALNOTE_ATI_UAV_OP_MASK
274 uint32_t encodingEntriesNum;
295 {
return kernelName; }
299 {
return encodingEntriesNum; }
303 {
return encodingEntries[index]; }
307 {
return encodingEntries[index]; }
311 {
return calNotesTable[encodingIndex].
size(); }
315 {
return *(calNotesTable[encodingIndex][index]).header; }
319 {
return *(calNotesTable[encodingIndex][index]).header; }
323 {
return calNotesTable[encodingIndex][index].
data; }
326 {
return calNotesTable[encodingIndex][index].
data; }
335 {
return calNotesTable[encodingIndex][index]; }
344 {
return calNotesTable[encodingIndex][index]; }
348 {
return calNotesTable[encodingIndex]; }
352 {
return calNotesTable[encodingIndex]; }
437 {
return kernelInfos.
size(); }
441 {
return kernelInfos.
data(); }
445 {
return kernelInfos[index]; }
448 const KernelInfo& getKernelInfo(
const char* name)
const;
452 {
return driverInfo; }
456 {
return compileOptions; }
495 template<
typename Types>
496 void initMainGPUBinary(
typename Types::ElfBinary& binary);
500 {
return innerBinaries.
size(); }
504 {
return innerBinaries[index]; }
508 {
return innerBinaries[index]; }
515 {
return metadatas[index].size; }
519 {
return metadatas[index].data; }
523 {
return metadatas[index].data; }
527 {
return globalDataSize; }
531 {
return globalData; }
534 {
return globalData; }
538 {
return kernelHeaders.
size(); }
542 {
return kernelHeaders[index]; }
549 {
return kernelHeaders[index]; }
553 {
return kernelHeaders[index].
size; }
557 {
return kernelHeaders[index].
data; }
561 {
return kernelHeaders[index].
data; }
661 void initKernelInfos(
Flags creationFlags);
686 {
return innerBinary; }
690 {
return innerBinary; }
694 {
return innerBinary; }
706 void initKernelInfos(
Flags creationFlags);
731 {
return innerBinary; }
735 {
return innerBinary; }
738 {
return innerBinary; }
752 size_t binaryCodeSize,
cxbyte* binaryCode,
AmdInnerX86Binary32 & getInnerBinary()
get inner binary
Definition: AmdBinaries.h:689
bool hasInfoStrings() const
returns true if binary has info strings
Definition: AmdBinaries.h:726
AmdMainType getType() const
get binary type
Definition: AmdBinaries.h:432
uint32_t uavId
uav id
Definition: AmdBinaries.h:227
CString driverInfo
driver info string
Definition: AmdBinaries.h:423
non copyable and non movable base structure (class)
Definition: Utilities.h:46
const AmdInnerX86Binary64 & getInnerBinary() const
get inner binary
Definition: AmdBinaries.h:737
Array< std::pair< CString, size_t > > KernelInfoMap
Kernel info map.
Definition: AmdBinaries.h:417
bool hasInnerBinary() const
return true if binary has inner binary
Definition: AmdBinaries.h:730
const CALEncodingEntry & getCALEncodingEntry(cxuint index) const
get CALEncodingDictionaryEntries
Definition: AmdBinaries.h:302
AMD main binary for X86-64 systems.
Definition: AmdBinaries.h:701
uint32_t Flags
type for declaring various flags
Definition: Utilities.h:100
KernelPtrSpace
kernel pointer type of argument
Definition: AmdBinaries.h:103
const cxbyte * getGlobalData() const
get global data
Definition: AmdBinaries.h:530
bool hasKernelInfoMap() const
returns true if binary has kernel informations map
Definition: AmdBinaries.h:632
read-write image (???)
Definition: AmdBinaries.h:117
size_t getGlobalDataSize() const
get global data size
Definition: AmdBinaries.h:526
uint32_t sampler
sampler
Definition: AmdBinaries.h:251
uint32_t nameOffsetLo
low half of name offset
Definition: AmdBinaries.h:153
CALNote & getCALNote(cxuint encodingIndex, uint32_t index)
get CALNote
Definition: AmdBinaries.h:343
uint32_t size
size
Definition: AmdBinaries.h:237
bool hasInfoStrings() const
returns true if binary has info strings
Definition: AmdBinaries.h:681
create compile options and driver info
Definition: AmdBinaries.h:54
CString kernelName
kernel name
Definition: AmdBinaries.h:260
volatile buffer
Definition: AmdBinaries.h:121
uint32_t f1
field 1
Definition: AmdBinaries.h:228
class ElfBinaryTemplate< Elf64Types > ElfBinary64
type for 64-bit ELF binary
Definition: ElfBinaries.h:483
creation flags for ELF binaries
Definition: ElfBinaries.h:73
shift for convert inner binary flags into elf binary flags
Definition: AmdBinaries.h:64
const AmdGPUKernelHeader & getKernelHeaderEntry(size_t index) const
get kernel header entry for specified index
Definition: AmdBinaries.h:541
const KernelInfo & getKernelInfo(size_t index) const
get kernel information with specified index
Definition: AmdBinaries.h:444
bool hasKernelInfo() const
returns true if binary has kernel informations
Definition: AmdBinaries.h:584
X86_64 kernel argument symbol.
Definition: AmdBinaries.h:135
const CALNote & getCALNote(cxuint encodingIndex, uint32_t index) const
get CALNote
Definition: AmdBinaries.h:334
kernel argument info structure
Definition: AmdBinaries.h:125
bool hasKernelHeaderMap() const
return true if binary has kernel header map
Definition: AmdBinaries.h:648
OpenCL 2.0 binary type (32-bit)
an array class
Definition: Containers.h:41
AMD main binary for X86 systems.
Definition: AmdBinaries.h:656
X86_64 kernel argument symbol.
Definition: AmdBinaries.h:148
create kernel headers map
Definition: AmdBinaries.h:56
AmdMainType
AMD main binary type.
Definition: AmdBinaries.h:402
CALEncodingEntry & getCALEncodingEntry(cxuint index)
get CALEncodingDictionaryEntries
Definition: AmdBinaries.h:306
OpenCL 2.0 binary type (64-bit)
const Array< CALNote > & getCALNotes(cxuint encodingIndex) const
get all CALNotes for encoding index
Definition: AmdBinaries.h:347
Array< std::pair< CString, size_t > > KernelHeaderMap
kernel header map type
Definition: AmdBinaries.h:481
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:207
create kernel headers
Definition: AmdBinaries.h:55
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:220
bool hasKernelInfo() const
returns true if binary has kernel informations
Definition: AmdBinaries.h:718
Array< AmdKernelArg > argInfos
array of argument informations
Definition: AmdBinaries.h:261
bool hasInfoStrings() const
returns true if binary has info strings
Definition: AmdBinaries.h:596
uint32_t index
index
Definition: AmdBinaries.h:243
const char * getMetadata(size_t index) const
get metadata for specified inner binary
Definition: AmdBinaries.h:518
There are not copied (ULEV must be used)
Definition: AmdBinaries.h:248
size_t getInnerBinariesNum() const
get number of inner binaries
Definition: AmdBinaries.h:499
KernelArgType
kernel argument type
Definition: AmdBinaries.h:72
uint32_t value
value to set
Definition: AmdBinaries.h:221
bool hasKernelHeaders() const
return true if binary has kernel headers
Definition: AmdBinaries.h:600
bool hasKernelHeaders() const
return true if binary has kernel headers
Definition: AmdBinaries.h:644
uint32_t ptrAccess
pointer access flags
Definition: AmdBinaries.h:139
AMD inner X86 binary.
Definition: AmdBinaries.h:363
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:522
const KernelInfo * getKernelInfos() const
get kernel informations array
Definition: AmdBinaries.h:440
no special flags
Definition: AmdBinaries.h:114
Definition: AmdBinaries.h:60
unsigned char cxbyte
unsigned byte
Definition: Config.h:229
binary for x86-64 systems
uint32_t machine
machine type
Definition: AmdBinaries.h:187
uint32_t getCALEncodingEntriesNum() const
get CALEncoding entries number
Definition: AmdBinaries.h:298
main namespace
Definition: AsmDefs.h:38
Array< CALNote > & getCALNotes(cxuint encodingIndex)
get all CALNotes for encoding index
Definition: AmdBinaries.h:351
uint32_t flags
flags
Definition: AmdBinaries.h:191
size_t globalDataSize
global data size
Definition: AmdBinaries.h:488
const AmdInnerX86Binary32 & getInnerBinary() const
get inner binary
Definition: AmdBinaries.h:693
AMD main binary for GPU for 64-bit mode.
Definition: AmdBinaries.h:612
size_t getNameOffset() const
get name offset
Definition: AmdBinaries.h:143
uint32_t nameOffset
name offset
Definition: AmdBinaries.h:140
AMD inner binary for GPU binaries that represent a single kernel.
Definition: AmdBinaries.h:268
size_t getMetadataSize(size_t index) const
get metadata size for specified inner binary
Definition: AmdBinaries.h:514
uint32_t type
type of entry
Definition: AmdBinaries.h:188
uint32_t getCALNotesNum(cxuint encodingIndex) const
get CAL Notes number
Definition: AmdBinaries.h:310
CAL program info entry. There are not copied (ULEV must be used)
Definition: AmdBinaries.h:218
unsigned int cxuint
unsigned int
Definition: Config.h:237
CString compileOptions
compiler options string
Definition: AmdBinaries.h:424
AmdMainBinaryBase * createAmdBinaryFromCode(size_t binaryCodeSize, cxbyte *binaryCode, Flags creationFlags=AMDBIN_CREATE_ALL)
create AMD binary object from binary code
uint32_t input
input
Definition: AmdBinaries.h:250
bool hasInnerBinary() const
return true if binary has inner binary
Definition: AmdBinaries.h:685
size_t getNameOffset() const
compute name offset
Definition: AmdBinaries.h:157
constant buffer
Definition: AmdBinaries.h:119
There are not copied (ULEV must be used)
Definition: AmdBinaries.h:234
size_t getKernelHeadersNum() const
get kernel header number
Definition: AmdBinaries.h:537
CALNoteHeader * header
header of CAL note
Definition: AmdBinaries.h:206
uint32_t ptrAccess
pointer access flags
Definition: AmdBinaries.h:152
cxbyte * getGlobalData()
get global data
Definition: AmdBinaries.h:533
bool hasCALNotes() const
return true if binary has CAL notes infos
Definition: AmdBinaries.h:290
main AMD binary base class
Definition: AmdBinaries.h:413
inlines for accessing memory words in LittleEndian and unaligned
bool hasKernelInfoMap() const
returns true if binary has kernel informations map
Definition: AmdBinaries.h:588
create map of sections for inner binaries
Definition: AmdBinaries.h:57
uint32_t nameOffsetHi
high half of name offset
Definition: AmdBinaries.h:154
KernelHeaderMap kernelHeaderMap
kernel header map
Definition: AmdBinaries.h:487
only for internal usage
Definition: AmdBinaries.h:49
GPUDeviceType
type of GPU device
Definition: GPUId.h:51
There are not copied (ULEV must be used)
Definition: AmdBinaries.h:225
Array< std::pair< CString, size_t > > InnerBinaryMap
inner binary map type
Definition: AmdBinaries.h:479
AmdMainType type
type of binaries
Definition: AmdBinaries.h:419
cxbyte ptrAccess
pointer access flags
Definition: AmdBinaries.h:129
uint32_t offset
offset in ELF
Definition: AmdBinaries.h:189
buffer is restrict specifier
Definition: AmdBinaries.h:120
const cxbyte * getKernelHeader(size_t index) const
get kernel header for specified index
Definition: AmdBinaries.h:556
const CString & getDriverInfo() const
get driver info string
Definition: AmdBinaries.h:451
bool hasKernelInfo() const
returns true if binary has kernel informations
Definition: AmdBinaries.h:673
const AmdInnerGPUBinary32 & getInnerBinary(size_t index) const
get inner binary with specified index
Definition: AmdBinaries.h:507
const CString & getKernelName() const
get kernel name
Definition: AmdBinaries.h:294
uint32_t ptrType
pointer type
Definition: AmdBinaries.h:138
utilities for other libraries and programs
uint32_t size
size
Definition: AmdBinaries.h:190
bool hasKernelInfo() const
returns true if binary has kernel informations
Definition: AmdBinaries.h:628
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:568
const CString & getCompileOptions() const
get compile options string
Definition: AmdBinaries.h:455
bool hasInnerBinaryMap() const
returns true if binary has inner binary map
Definition: AmdBinaries.h:592
CALNoteHeader & getCALNoteHeader(cxuint encodingIndex, uint32_t index)
get CAL Note header
Definition: AmdBinaries.h:318
Array< AmdGPUKernelHeader > kernelHeaders
kernel headers
Definition: AmdBinaries.h:486
AmdInnerX86Binary64 & getInnerBinary()
get inner binary
Definition: AmdBinaries.h:734
create map of symbols for inner binaries
Definition: AmdBinaries.h:58
const cxbyte * getCALNoteData(cxuint encodingIndex, uint32_t index) const
get CAL Note data
Definition: AmdBinaries.h:322
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:421
AmdGPUKernelHeader & getKernelHeaderEntry(size_t index)
get kernel header entry for specified index
Definition: AmdBinaries.h:548
bool hasKernelHeaderMap() const
return true if binary has kernel header map
Definition: AmdBinaries.h:604
all AMD binaries creation flags
Definition: AmdBinaries.h:63
ATI CAL note. There are not copied (ULEV must be used)
Definition: AmdBinaries.h:204
size_t size() const
returns number of elements
Definition: Containers.h:172
read only image
Definition: AmdBinaries.h:115
const T * data() const
get data
Definition: Containers.h:246
CALEncodingEntry. There are not copied (ULEV must be used)
Definition: AmdBinaries.h:185
AMD inner binary for X86-64 binaries.
Definition: AmdBinaries.h:384
create kernel informations
Definition: AmdBinaries.h:51
size_t getKernelHeaderSize(size_t index) const
get kernel header size for specified index
Definition: AmdBinaries.h:552
main AMD GPU binary base class
Definition: AmdBinaries.h:475
class ElfBinaryTemplate< Elf32Types > ElfBinary32
type for 32-bit ELF binary
Definition: ElfBinaries.h:481
uint32_t argType
arg type
Definition: AmdBinaries.h:137
kernel informations
Definition: AmdBinaries.h:258
const CALNoteHeader & getCALNoteHeader(cxuint encodingIndex, uint32_t index) const
get CAL Note header
Definition: AmdBinaries.h:314
bool isKernelArgImage(KernelArgType argType)
return true if argType is image
Definition: AmdBinaries.h:97
uint32_t f2
field 2
Definition: AmdBinaries.h:229
size_t getKernelInfosNum() const
get kernel informations number
Definition: AmdBinaries.h:436
uint32_t offset
offset
Definition: AmdBinaries.h:236
Array< AmdInnerGPUBinary32 > innerBinaries
inner binaries
Definition: AmdBinaries.h:483
bool hasInnerBinaryMap() const
returns true if binary has inner binary map
Definition: AmdBinaries.h:636
uint32_t size
size
Definition: AmdBinaries.h:244
create map of kernel informations
Definition: AmdBinaries.h:52
uint32_t type
type
Definition: AmdBinaries.h:230
InnerBinaryMap innerBinaryMap
inner binary map
Definition: AmdBinaries.h:484
bool hasInfoStrings() const
returns true if binary has info strings
Definition: AmdBinaries.h:640
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:420
bool hasKernelInfoMap() const
returns true if binary has kernel informations map
Definition: AmdBinaries.h:677
cxbyte * getKernelHeader(size_t index)
get kernel header for specified index
Definition: AmdBinaries.h:560
There are not copied (ULEV must be used)
Definition: AmdBinaries.h:241
write only image
Definition: AmdBinaries.h:116
cxbyte * getCALNoteData(cxuint encodingIndex, uint32_t index)
get CAL Note data
Definition: AmdBinaries.h:325
bool hasKernelInfoMap() const
returns true if binary has kernel informations map
Definition: AmdBinaries.h:722
std::unique_ptr< AmdGPUKernelMetadata[]> metadatas
AMD metadatas.
Definition: AmdBinaries.h:485
create map of inner binaries
Definition: AmdBinaries.h:53
AmdInnerGPUBinary32 & getInnerBinary(size_t index)
get inner binary with specified index
Definition: AmdBinaries.h:503
pointer to constant memory
CString argName
argument name
Definition: AmdBinaries.h:131
cxbyte * globalData
global data content
Definition: AmdBinaries.h:489