23 #ifndef __CLRX_AMDBINARIES_H__ 24 #define __CLRX_AMDBINARIES_H__ 26 #include <CLRX/Config.h> 32 #include <CLRX/amdbin/Elf.h> 44 AMDBIN_INNER_INT_CREATE_ALL = 0xff,
71 UCHAR, CHAR, USHORT, SHORT, UINT, INT, ULONG, LONG, FLOAT, DOUBLE, POINTER, IMAGE,
72 IMAGE1D, IMAGE1D_ARRAY, IMAGE1D_BUFFER, IMAGE2D, IMAGE2D_ARRAY, IMAGE3D,
73 UCHAR2, UCHAR3, UCHAR4, UCHAR8, UCHAR16,
74 CHAR2, CHAR3, CHAR4, CHAR8, CHAR16,
75 USHORT2, USHORT3, USHORT4, USHORT8, USHORT16,
76 SHORT2, SHORT3, SHORT4, SHORT8, SHORT16,
77 UINT2, UINT3, UINT4, UINT8, UINT16,
78 INT2, INT3, INT4, INT8, INT16,
79 ULONG2, ULONG3, ULONG4, ULONG8, ULONG16,
80 LONG2, LONG3, LONG4, LONG8, LONG16,
81 FLOAT2, FLOAT3, FLOAT4, FLOAT8, FLOAT16,
82 DOUBLE2, DOUBLE3, DOUBLE4, DOUBLE8, DOUBLE16,
83 SAMPLER, STRUCTURE, COUNTER32, COUNTER64, PIPE, CMDQUEUE, CLKEVENT,
84 MAX_VALUE = COUNTER64,
85 MAX_VALUE_CL2 = CLKEVENT,
95 return argType>=KernelArgType::MIN_IMAGE && argType<=KernelArgType::MAX_IMAGE;
114 KARG_PTR_ACCESS_MASK = 3,
140 {
return ULEV(nameOffset); }
154 {
return (uint64_t(
ULEV(nameOffsetHi))<<32)+uint64_t(
ULEV(nameOffsetLo)); }
159 CALNOTE_ATI_PROGINFO = 1,
160 CALNOTE_ATI_INPUTS = 2,
161 CALNOTE_ATI_OUTPUTS = 3,
162 CALNOTE_ATI_CONDOUT = 4,
163 CALNOTE_ATI_FLOAT32CONSTS = 5,
164 CALNOTE_ATI_INT32CONSTS = 6,
165 CALNOTE_ATI_BOOL32CONSTS = 7,
166 CALNOTE_ATI_EARLYEXIT = 8,
167 CALNOTE_ATI_GLOBAL_BUFFERS = 9,
168 CALNOTE_ATI_CONSTANT_BUFFERS = 10,
169 CALNOTE_ATI_INPUT_SAMPLERS = 11,
170 CALNOTE_ATI_PERSISTENT_BUFFERS = 12,
171 CALNOTE_ATI_SCRATCH_BUFFERS = 13,
172 CALNOTE_ATI_SUB_CONSTANT_BUFFERS = 14,
173 CALNOTE_ATI_UAV_MAILBOX_SIZE = 15,
174 CALNOTE_ATI_UAV = 16,
175 CALNOTE_ATI_UAV_OP_MASK = 17,
176 CALNOTE_ATI_MAXTYPE = CALNOTE_ATI_UAV_OP_MASK
269 uint32_t encodingEntriesNum;
290 {
return kernelName; }
294 {
return encodingEntriesNum; }
298 {
return encodingEntries[index]; }
302 {
return encodingEntries[index]; }
306 {
return calNotesTable[encodingIndex].
size(); }
310 {
return *(calNotesTable[encodingIndex][index]).header; }
314 {
return *(calNotesTable[encodingIndex][index]).header; }
318 {
return calNotesTable[encodingIndex][index].
data; }
321 {
return calNotesTable[encodingIndex][index].
data; }
330 {
return calNotesTable[encodingIndex][index]; }
339 {
return calNotesTable[encodingIndex][index]; }
343 {
return calNotesTable[encodingIndex]; }
347 {
return calNotesTable[encodingIndex]; }
354 cxuint findCALEncodingEntryIndex(
GPUDeviceType deviceType)
const;
432 {
return kernelInfos.
size(); }
436 {
return kernelInfos.
data(); }
440 {
return kernelInfos[index]; }
443 const KernelInfo& getKernelInfo(
const char* name)
const;
447 {
return driverInfo; }
451 {
return compileOptions; }
490 template<
typename Types>
491 void initMainGPUBinary(
typename Types::ElfBinary& binary);
495 {
return innerBinaries.
size(); }
499 {
return innerBinaries[index]; }
503 {
return innerBinaries[index]; }
510 {
return metadatas[index].size; }
514 {
return metadatas[index].data; }
518 {
return metadatas[index].data; }
522 {
return globalDataSize; }
526 {
return globalData; }
529 {
return globalData; }
533 {
return kernelHeaders.
size(); }
537 {
return kernelHeaders[index]; }
544 {
return kernelHeaders[index]; }
548 {
return kernelHeaders[index].
size; }
552 {
return kernelHeaders[index].
data; }
556 {
return kernelHeaders[index].
data; }
656 void initKernelInfos(
Flags creationFlags);
681 {
return innerBinary; }
685 {
return innerBinary; }
689 {
return innerBinary; }
701 void initKernelInfos(
Flags creationFlags);
726 {
return innerBinary; }
730 {
return innerBinary; }
733 {
return innerBinary; }
737 extern bool isAmdBinary(
size_t binaryCodeSize,
const cxbyte* binaryCode);
747 size_t binaryCodeSize, cxbyte* binaryCode,
AmdInnerX86Binary32 & getInnerBinary()
get inner binary
Definition: AmdBinaries.h:684
bool hasInfoStrings() const
returns true if binary has info strings
Definition: AmdBinaries.h:721
AmdMainType getType() const
get binary type
Definition: AmdBinaries.h:427
uint32_t uavId
uav id
Definition: AmdBinaries.h:222
CString driverInfo
driver info string
Definition: AmdBinaries.h:418
non copyable and non movable base structure (class)
Definition: Utilities.h:43
const AmdInnerX86Binary64 & getInnerBinary() const
get inner binary
Definition: AmdBinaries.h:732
Array< std::pair< CString, size_t > > KernelInfoMap
Kernel info map.
Definition: AmdBinaries.h:412
bool hasInnerBinary() const
return true if binary has inner binary
Definition: AmdBinaries.h:725
const CALEncodingEntry & getCALEncodingEntry(cxuint index) const
get CALEncodingDictionaryEntries
Definition: AmdBinaries.h:297
AMD main binary for X86-64 systems.
Definition: AmdBinaries.h:696
uint32_t Flags
type for declaring various flags
Definition: Utilities.h:97
KernelPtrSpace
kernel pointer type of argument
Definition: AmdBinaries.h:99
create map of symbols for inner binaries
Definition: AmdBinaries.h:54
const cxbyte * getGlobalData() const
get global data
Definition: AmdBinaries.h:525
bool hasKernelInfoMap() const
returns true if binary has kernel informations map
Definition: AmdBinaries.h:627
constant buffer
Definition: AmdBinaries.h:115
size_t getGlobalDataSize() const
get global data size
Definition: AmdBinaries.h:521
uint32_t sampler
sampler
Definition: AmdBinaries.h:246
uint32_t nameOffsetLo
low half of name offset
Definition: AmdBinaries.h:149
CALNote & getCALNote(cxuint encodingIndex, uint32_t index)
get CALNote
Definition: AmdBinaries.h:338
uint32_t size
size
Definition: AmdBinaries.h:232
bool hasInfoStrings() const
returns true if binary has info strings
Definition: AmdBinaries.h:676
read-write image (???)
Definition: AmdBinaries.h:113
CString kernelName
kernel name
Definition: AmdBinaries.h:255
uint32_t f1
field 1
Definition: AmdBinaries.h:223
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:536
const KernelInfo & getKernelInfo(size_t index) const
get kernel information with specified index
Definition: AmdBinaries.h:439
bool hasKernelInfo() const
returns true if binary has kernel informations
Definition: AmdBinaries.h:579
X86_64 kernel argument symbol.
Definition: AmdBinaries.h:131
const CALNote & getCALNote(cxuint encodingIndex, uint32_t index) const
get CALNote
Definition: AmdBinaries.h:329
kernel argument info structure
Definition: AmdBinaries.h:121
bool hasKernelHeaderMap() const
return true if binary has kernel header map
Definition: AmdBinaries.h:643
OpenCL 2.0 binary type (32-bit)
an array class
Definition: Containers.h:38
AMD main binary for X86 systems.
Definition: AmdBinaries.h:651
X86_64 kernel argument symbol.
Definition: AmdBinaries.h:144
AmdMainType
AMD main binary type.
Definition: AmdBinaries.h:397
CALEncodingEntry & getCALEncodingEntry(cxuint index)
get CALEncodingDictionaryEntries
Definition: AmdBinaries.h:301
OpenCL 2.0 binary type (64-bit)
const Array< CALNote > & getCALNotes(cxuint encodingIndex) const
get all CALNotes for encoding index
Definition: AmdBinaries.h:342
Array< std::pair< CString, size_t > > KernelHeaderMap
kernel header map type
Definition: AmdBinaries.h:476
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:202
uint32_t ptrType
pointer type
Definition: AmdBinaries.h:147
create CAL notes for AMD inner GPU binary
Definition: AmdBinaries.h:57
uint32_t address
address of value
Definition: AmdBinaries.h:215
bool hasKernelInfo() const
returns true if binary has kernel informations
Definition: AmdBinaries.h:713
Array< AmdKernelArg > argInfos
array of argument informations
Definition: AmdBinaries.h:256
bool hasInfoStrings() const
returns true if binary has info strings
Definition: AmdBinaries.h:591
uint32_t index
index
Definition: AmdBinaries.h:238
const char * getMetadata(size_t index) const
get metadata for specified inner binary
Definition: AmdBinaries.h:513
all AMD binaries creation flags
Definition: AmdBinaries.h:59
There are not copied (ULEV must be used)
Definition: AmdBinaries.h:243
size_t getInnerBinariesNum() const
get number of inner binaries
Definition: AmdBinaries.h:494
KernelArgType
kernel argument type
Definition: AmdBinaries.h:68
uint32_t value
value to set
Definition: AmdBinaries.h:216
bool hasKernelHeaders() const
return true if binary has kernel headers
Definition: AmdBinaries.h:595
bool hasKernelHeaders() const
return true if binary has kernel headers
Definition: AmdBinaries.h:639
uint32_t ptrAccess
pointer access flags
Definition: AmdBinaries.h:135
AMD inner X86 binary.
Definition: AmdBinaries.h:358
CString typeName
name of type of argument
Definition: AmdBinaries.h:126
char * getMetadata(size_t index)
get metadata for specified inner binary
Definition: AmdBinaries.h:517
const KernelInfo * getKernelInfos() const
get kernel informations array
Definition: AmdBinaries.h:435
buffer is restrict specifier
Definition: AmdBinaries.h:116
volatile buffer
Definition: AmdBinaries.h:117
create kernel headers map
Definition: AmdBinaries.h:52
create map of inner binaries
Definition: AmdBinaries.h:49
binary for x86-64 systems
uint32_t machine
machine type
Definition: AmdBinaries.h:182
uint32_t getCALEncodingEntriesNum() const
get CALEncoding entries number
Definition: AmdBinaries.h:293
read only image
Definition: AmdBinaries.h:111
main namespace
Definition: AsmDefs.h:38
Array< CALNote > & getCALNotes(cxuint encodingIndex)
get all CALNotes for encoding index
Definition: AmdBinaries.h:346
create kernel informations
Definition: AmdBinaries.h:47
uint32_t flags
flags
Definition: AmdBinaries.h:186
size_t globalDataSize
global data size
Definition: AmdBinaries.h:483
const AmdInnerX86Binary32 & getInnerBinary() const
get inner binary
Definition: AmdBinaries.h:688
create map of sections for inner binaries
Definition: AmdBinaries.h:53
shift for convert inner binary flags into elf binary flags
Definition: AmdBinaries.h:60
AMD main binary for GPU for 64-bit mode.
Definition: AmdBinaries.h:607
size_t getNameOffset() const
get name offset
Definition: AmdBinaries.h:139
uint32_t nameOffset
name offset
Definition: AmdBinaries.h:136
create compile options and driver info
Definition: AmdBinaries.h:50
AMD inner binary for GPU binaries that represent a single kernel.
Definition: AmdBinaries.h:263
size_t getMetadataSize(size_t index) const
get metadata size for specified inner binary
Definition: AmdBinaries.h:509
uint32_t type
type of entry
Definition: AmdBinaries.h:183
uint32_t getCALNotesNum(cxuint encodingIndex) const
get CAL Notes number
Definition: AmdBinaries.h:305
CAL program info entry. There are not copied (ULEV must be used)
Definition: AmdBinaries.h:213
CString compileOptions
compiler options string
Definition: AmdBinaries.h:419
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:112
uint32_t input
input
Definition: AmdBinaries.h:245
bool hasInnerBinary() const
return true if binary has inner binary
Definition: AmdBinaries.h:680
size_t getNameOffset() const
compute name offset
Definition: AmdBinaries.h:153
There are not copied (ULEV must be used)
Definition: AmdBinaries.h:229
size_t getKernelHeadersNum() const
get kernel header number
Definition: AmdBinaries.h:532
CALNoteHeader * header
header of CAL note
Definition: AmdBinaries.h:201
uint32_t ptrAccess
pointer access flags
Definition: AmdBinaries.h:148
cxbyte * getGlobalData()
get global data
Definition: AmdBinaries.h:528
bool hasCALNotes() const
return true if binary has CAL notes infos
Definition: AmdBinaries.h:285
main AMD binary base class
Definition: AmdBinaries.h:408
inlines for accessing memory words in LittleEndian and unaligned
bool hasKernelInfoMap() const
returns true if binary has kernel informations map
Definition: AmdBinaries.h:583
uint32_t nameOffsetHi
high half of name offset
Definition: AmdBinaries.h:150
KernelHeaderMap kernelHeaderMap
kernel header map
Definition: AmdBinaries.h:482
GPUDeviceType
type of GPU device
Definition: GPUId.h:38
There are not copied (ULEV must be used)
Definition: AmdBinaries.h:220
Array< std::pair< CString, size_t > > InnerBinaryMap
inner binary map type
Definition: AmdBinaries.h:474
AmdMainType type
type of binaries
Definition: AmdBinaries.h:414
cxbyte ptrAccess
pointer access flags
Definition: AmdBinaries.h:125
uint32_t offset
offset in ELF
Definition: AmdBinaries.h:184
const cxbyte * getKernelHeader(size_t index) const
get kernel header for specified index
Definition: AmdBinaries.h:551
const CString & getDriverInfo() const
get driver info string
Definition: AmdBinaries.h:446
bool hasKernelInfo() const
returns true if binary has kernel informations
Definition: AmdBinaries.h:668
const AmdInnerGPUBinary32 & getInnerBinary(size_t index) const
get inner binary with specified index
Definition: AmdBinaries.h:502
const CString & getKernelName() const
get kernel name
Definition: AmdBinaries.h:289
uint32_t ptrType
pointer type
Definition: AmdBinaries.h:134
utilities for other libraries and programs
Definition: AmdBinaries.h:56
uint32_t size
size
Definition: AmdBinaries.h:185
bool hasKernelInfo() const
returns true if binary has kernel informations
Definition: AmdBinaries.h:623
KernelPtrSpace ptrSpace
pointer space for argument if argument is pointer or image
Definition: AmdBinaries.h:124
AMD main binary for GPU for 32-bit mode.
Definition: AmdBinaries.h:563
const CString & getCompileOptions() const
get compile options string
Definition: AmdBinaries.h:450
bool hasInnerBinaryMap() const
returns true if binary has inner binary map
Definition: AmdBinaries.h:587
CALNoteHeader & getCALNoteHeader(cxuint encodingIndex, uint32_t index)
get CAL Note header
Definition: AmdBinaries.h:313
Array< AmdGPUKernelHeader > kernelHeaders
kernel headers
Definition: AmdBinaries.h:481
AmdInnerX86Binary64 & getInnerBinary()
get inner binary
Definition: AmdBinaries.h:729
no special flags
Definition: AmdBinaries.h:110
const cxbyte * getCALNoteData(cxuint encodingIndex, uint32_t index) const
get CAL Note data
Definition: AmdBinaries.h:317
uint32_t argType
arg type
Definition: AmdBinaries.h:146
binary for GPU with 64-bit memory model
KernelArgType argType
argument type
Definition: AmdBinaries.h:123
GPU identification utilities.
KernelInfoMap kernelInfosMap
kernel informations map
Definition: AmdBinaries.h:416
AmdGPUKernelHeader & getKernelHeaderEntry(size_t index)
get kernel header entry for specified index
Definition: AmdBinaries.h:543
bool hasKernelHeaderMap() const
return true if binary has kernel header map
Definition: AmdBinaries.h:599
ATI CAL note. There are not copied (ULEV must be used)
Definition: AmdBinaries.h:199
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:180
AMD inner binary for X86-64 binaries.
Definition: AmdBinaries.h:379
size_t getKernelHeaderSize(size_t index) const
get kernel header size for specified index
Definition: AmdBinaries.h:547
main AMD GPU binary base class
Definition: AmdBinaries.h:470
class ElfBinaryTemplate< Elf32Types > ElfBinary32
type for 32-bit ELF binary
Definition: ElfBinaries.h:435
uint32_t argType
arg type
Definition: AmdBinaries.h:133
kernel informations
Definition: AmdBinaries.h:253
const CALNoteHeader & getCALNoteHeader(cxuint encodingIndex, uint32_t index) const
get CAL Note header
Definition: AmdBinaries.h:309
bool isKernelArgImage(KernelArgType argType)
return true if argType is image
Definition: AmdBinaries.h:93
uint32_t f2
field 2
Definition: AmdBinaries.h:224
size_t getKernelInfosNum() const
get kernel informations number
Definition: AmdBinaries.h:431
uint32_t offset
offset
Definition: AmdBinaries.h:231
Array< AmdInnerGPUBinary32 > innerBinaries
inner binaries
Definition: AmdBinaries.h:478
bool hasInnerBinaryMap() const
returns true if binary has inner binary map
Definition: AmdBinaries.h:631
uint32_t size
size
Definition: AmdBinaries.h:239
uint32_t type
type
Definition: AmdBinaries.h:225
create kernel headers
Definition: AmdBinaries.h:51
InnerBinaryMap innerBinaryMap
inner binary map
Definition: AmdBinaries.h:479
create map of kernel informations
Definition: AmdBinaries.h:48
bool hasInfoStrings() const
returns true if binary has info strings
Definition: AmdBinaries.h:635
uint8_t ULEV(const uint8_t &t)
convert from/to little endian value from unaligned memory
only for internal usage
Definition: AmdBinaries.h:45
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:415
bool hasKernelInfoMap() const
returns true if binary has kernel informations map
Definition: AmdBinaries.h:672
cxbyte * getKernelHeader(size_t index)
get kernel header for specified index
Definition: AmdBinaries.h:555
There are not copied (ULEV must be used)
Definition: AmdBinaries.h:236
cxbyte * getCALNoteData(cxuint encodingIndex, uint32_t index)
get CAL Note data
Definition: AmdBinaries.h:320
bool hasKernelInfoMap() const
returns true if binary has kernel informations map
Definition: AmdBinaries.h:717
std::unique_ptr< AmdGPUKernelMetadata[]> metadatas
AMD metadatas.
Definition: AmdBinaries.h:480
AmdInnerGPUBinary32 & getInnerBinary(size_t index)
get inner binary with specified index
Definition: AmdBinaries.h:498
pointer to constant memory
CString argName
argument name
Definition: AmdBinaries.h:127
cxbyte * globalData
global data content
Definition: AmdBinaries.h:484