CLRX  1
An unofficial OpenCL extensions designed for Radeon GPUs
AmdBinaries.h
Go to the documentation of this file.
1 /*
2  * CLRadeonExtender - Unofficial OpenCL Radeon Extensions Library
3  * Copyright (C) 2014-2016 Mateusz Szpakowski
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2.1 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18  */
23 #ifndef __CLRX_AMDBINARIES_H__
24 #define __CLRX_AMDBINARIES_H__
25 
26 #include <CLRX/Config.h>
27 #include <cstddef>
28 #include <cstdint>
29 #include <string>
30 #include <utility>
31 #include <memory>
32 #include <CLRX/amdbin/Elf.h>
34 #include <CLRX/utils/MemAccess.h>
35 #include <CLRX/utils/Containers.h>
36 #include <CLRX/utils/Utilities.h>
37 
39 namespace CLRX
40 {
41 
42 enum : Flags {
43  AMDBIN_INNER_INT_CREATE_ALL = 0xff,
45 
54 
57 
60 };
61 
62 enum : cxuint {
63  ELF_M_X86 = 0x7d4
64 };
65 
67 enum class KernelArgType : cxbyte
68 {
69  VOID = 0,
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,
85  MIN_IMAGE = IMAGE,
86  MAX_IMAGE = IMAGE3D
87 };
88 
90 inline bool isKernelArgImage(KernelArgType argType);
91 
92 inline bool isKernelArgImage(KernelArgType argType)
93 {
94  return argType>=KernelArgType::MIN_IMAGE && argType<=KernelArgType::MAX_IMAGE;
95 }
96 
98 enum class KernelPtrSpace : cxbyte
99 {
100  NONE = 0,
101  LOCAL,
102  CONSTANT,
103  GLOBAL,
104  MAX_VALUE = GLOBAL
105 };
106 
107 enum : cxbyte
108 {
113  KARG_PTR_ACCESS_MASK = 3,
117 };
118 
121 {
124  cxbyte ptrAccess;
127 };
128 
131 {
132  uint32_t argType;
133  uint32_t ptrType;
134  uint32_t ptrAccess;
135  uint32_t nameOffset;
136 
138  size_t getNameOffset() const
139  { return ULEV(nameOffset); }
140 };
141 
144 {
145  uint32_t argType;
146  uint32_t ptrType;
147  uint32_t ptrAccess;
148  uint32_t nameOffsetLo;
149  uint32_t nameOffsetHi;
150 
152  size_t getNameOffset() const
153  { return (uint64_t(ULEV(nameOffsetHi))<<32)+uint64_t(ULEV(nameOffsetLo)); }
154 };
155 
156 enum : uint32_t
157 { /* this cal note types comes from MultiSim-4.2 sources */
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
176 };
177 
180 {
181  uint32_t machine;
182  uint32_t type;
183  uint32_t offset;
184  uint32_t size;
185  uint32_t flags;
186 };
187 
190 {
191  uint32_t nameSize;
192  uint32_t descSize;
193  uint32_t type;
194  char name[8];
195 };
196 
198 struct CALNote
199 {
201  cxbyte* data;
202 };
203 
206 {
208  const cxbyte* data;
209 };
210 
213 {
214  uint32_t address;
215  uint32_t value;
216 };
217 
220 {
221  uint32_t uavId;
222  uint32_t f1;
223  uint32_t f2;
224  uint32_t type;
225 };
226 
229 {
230  uint32_t offset;
231  uint32_t size;
232 };
233 
236 {
237  uint32_t index;
238  uint32_t size;
239 };
240 
243 {
244  uint32_t input;
245  uint32_t sampler;
246 };
247 
249 
253 {
256 };
257 
259 
263 {
264 private:
267  CString kernelName;
268  uint32_t encodingEntriesNum;
269  CALEncodingEntry* encodingEntries;
270  Array<Array<CALNote> > calNotesTable;
271 public:
272  AmdInnerGPUBinary32() = default;
279  AmdInnerGPUBinary32(const CString& kernelName, size_t binaryCodeSize,
280  cxbyte* binaryCode, Flags creationFlags = ELF_CREATE_ALL);
281  ~AmdInnerGPUBinary32() = default;
282 
284  bool hasCALNotes() const
285  { return (creationFlags & AMDBIN_CREATE_CALNOTES) != 0; }
286 
288  const CString& getKernelName() const
289  { return kernelName; }
290 
292  uint32_t getCALEncodingEntriesNum() const
293  { return encodingEntriesNum; }
294 
296  const CALEncodingEntry& getCALEncodingEntry(cxuint index) const
297  { return encodingEntries[index]; }
298 
301  { return encodingEntries[index]; }
302 
304  uint32_t getCALNotesNum(cxuint encodingIndex) const
305  { return calNotesTable[encodingIndex].size(); }
306 
308  const CALNoteHeader& getCALNoteHeader(cxuint encodingIndex, uint32_t index) const
309  { return *(calNotesTable[encodingIndex][index]).header; }
310 
312  CALNoteHeader& getCALNoteHeader(cxuint encodingIndex, uint32_t index)
313  { return *(calNotesTable[encodingIndex][index]).header; }
314 
316  const cxbyte* getCALNoteData(cxuint encodingIndex, uint32_t index) const
317  { return calNotesTable[encodingIndex][index].data; }
319  cxbyte* getCALNoteData(cxuint encodingIndex, uint32_t index)
320  { return calNotesTable[encodingIndex][index].data; }
321 
323 
328  const CALNote& getCALNote(cxuint encodingIndex, uint32_t index) const
329  { return calNotesTable[encodingIndex][index]; }
330 
332 
337  CALNote& getCALNote(cxuint encodingIndex, uint32_t index)
338  { return calNotesTable[encodingIndex][index]; }
339 
341  const Array<CALNote>& getCALNotes(cxuint encodingIndex) const
342  { return calNotesTable[encodingIndex]; }
343 
345  Array<CALNote>& getCALNotes(cxuint encodingIndex)
346  { return calNotesTable[encodingIndex]; }
347 };
348 
351 {
352 public:
353  AmdInnerX86Binary32() = default;
359  AmdInnerX86Binary32(size_t binaryCodeSize, cxbyte* binaryCode,
360  Flags creationFlags = ELF_CREATE_ALL);
361  ~AmdInnerX86Binary32() = default;
362 
364  void getKernelInfos(Array<KernelInfo>& kernelInfos) const;
365 };
366 
368 
372 {
373 public:
374  AmdInnerX86Binary64() = default;
380  AmdInnerX86Binary64(size_t binaryCodeSize, cxbyte* binaryCode,
381  Flags creationFlags = ELF_CREATE_ALL);
382  ~AmdInnerX86Binary64() = default;
383 
385  void getKernelInfos(Array<KernelInfo>& kernelInfos) const;
386 };
387 
389 enum class AmdMainType
390 {
391  GPU_BINARY,
392  GPU_64_BINARY,
393  X86_BINARY,
394  X86_64_BINARY,
395  GPU_CL2_BINARY // OpenCL 2.0 binary type (64-bit)
396 };
397 
400 {
401 public:
404 protected:
407  KernelInfoMap kernelInfosMap;
408 
411 
413  explicit AmdMainBinaryBase(AmdMainType type);
414 public:
415  virtual ~AmdMainBinaryBase();
416 
419  { return type; }
420 
422  size_t getKernelInfosNum() const
423  { return kernelInfos.size(); }
424 
426  const KernelInfo* getKernelInfos() const
427  { return kernelInfos.data(); }
428 
430  const KernelInfo& getKernelInfo(size_t index) const
431  { return kernelInfos[index]; }
432 
434  const KernelInfo& getKernelInfo(const char* name) const;
435 
437  const CString& getDriverInfo() const
438  { return driverInfo; }
439 
441  const CString& getCompileOptions() const
442  { return compileOptions; }
443 };
444 
447 {
448  size_t size;
449  char* data;
450 };
451 
454 {
456  size_t size;
457  cxbyte* data;
458 };
459 
462 {
463 public:
468 protected:
470  InnerBinaryMap innerBinaryMap;
471  std::unique_ptr<AmdGPUKernelMetadata[]> metadatas;
473  KernelHeaderMap kernelHeaderMap;
474  size_t globalDataSize;
475  cxbyte* globalData;
476 
478  explicit AmdMainGPUBinaryBase(AmdMainType type);
479 
481  template<typename Types>
482  void initMainGPUBinary(typename Types::ElfBinary& binary);
483 public:
485  size_t getInnerBinariesNum() const
486  { return innerBinaries.size(); }
487 
490  { return innerBinaries[index]; }
491 
493  const AmdInnerGPUBinary32& getInnerBinary(size_t index) const
494  { return innerBinaries[index]; }
495 
497  const AmdInnerGPUBinary32& getInnerBinary(const char* name) const;
498 
500  size_t getMetadataSize(size_t index) const
501  { return metadatas[index].size; }
502 
504  const char* getMetadata(size_t index) const
505  { return metadatas[index].data; }
506 
508  char* getMetadata(size_t index)
509  { return metadatas[index].data; }
510 
512  size_t getGlobalDataSize() const
513  { return globalDataSize; }
514 
516  const cxbyte* getGlobalData() const
517  { return globalData; }
519  cxbyte* getGlobalData()
520  { return globalData; }
521 
523  size_t getKernelHeadersNum() const
524  { return kernelHeaders.size(); }
525 
527  const AmdGPUKernelHeader& getKernelHeaderEntry(size_t index) const
528  { return kernelHeaders[index]; }
529 
531  const AmdGPUKernelHeader& getKernelHeaderEntry(const char* name) const;
532 
535  { return kernelHeaders[index]; }
536 
538  size_t getKernelHeaderSize(size_t index) const
539  { return kernelHeaders[index].size; }
540 
542  const cxbyte* getKernelHeader(size_t index) const
543  { return kernelHeaders[index].data; }
544 
546  cxbyte* getKernelHeader(size_t index)
547  { return kernelHeaders[index].data; }
548 };
549 
551 
555 {
556 public:
562  AmdMainGPUBinary32(size_t binaryCodeSize, cxbyte* binaryCode,
563  Flags creationFlags = AMDBIN_CREATE_ALL);
564  ~AmdMainGPUBinary32() = default;
565 
567  bool hasKernelInfo() const
568  { return (creationFlags & AMDBIN_CREATE_KERNELINFO) != 0; }
569 
571  bool hasKernelInfoMap() const
572  { return (creationFlags & AMDBIN_CREATE_KERNELINFOMAP) != 0; }
573 
575  bool hasInnerBinaryMap() const
576  { return (creationFlags & AMDBIN_CREATE_INNERBINMAP) != 0; }
577 
579  bool hasInfoStrings() const
580  { return (creationFlags & AMDBIN_CREATE_INFOSTRINGS) != 0; }
581 
583  bool hasKernelHeaders() const
584  { return (creationFlags & AMDBIN_CREATE_KERNELHEADERS) != 0; }
585 
587  bool hasKernelHeaderMap() const
588  { return (creationFlags & AMDBIN_CREATE_KERNELHEADERMAP) != 0; }
589 };
590 
592 
596 {
597 public:
603  AmdMainGPUBinary64(size_t binaryCodeSize, cxbyte* binaryCode,
604  Flags creationFlags = AMDBIN_CREATE_ALL);
605  ~AmdMainGPUBinary64() = default;
606 
608  bool hasKernelInfo() const
609  { return (creationFlags & AMDBIN_CREATE_KERNELINFO) != 0; }
610 
612  bool hasKernelInfoMap() const
613  { return (creationFlags & AMDBIN_CREATE_KERNELINFOMAP) != 0; }
614 
616  bool hasInnerBinaryMap() const
617  { return (creationFlags & AMDBIN_CREATE_INNERBINMAP) != 0; }
618 
620  bool hasInfoStrings() const
621  { return (creationFlags & AMDBIN_CREATE_INFOSTRINGS) != 0; }
622 
624  bool hasKernelHeaders() const
625  { return (creationFlags & AMDBIN_CREATE_KERNELHEADERS) != 0; }
626 
628  bool hasKernelHeaderMap() const
629  { return (creationFlags & AMDBIN_CREATE_KERNELHEADERMAP) != 0; }
630 };
631 
633 
637 {
638 private:
639  AmdInnerX86Binary32 innerBinary;
640 
641  void initKernelInfos(Flags creationFlags);
642 public:
648  AmdMainX86Binary32(size_t binaryCodeSize, cxbyte* binaryCode,
649  Flags creationFlags = AMDBIN_CREATE_ALL);
650  ~AmdMainX86Binary32() = default;
651 
653  bool hasKernelInfo() const
654  { return (creationFlags & AMDBIN_CREATE_KERNELINFO) != 0; }
655 
657  bool hasKernelInfoMap() const
658  { return (creationFlags & AMDBIN_CREATE_KERNELINFOMAP) != 0; }
659 
661  bool hasInfoStrings() const
662  { return (creationFlags & AMDBIN_CREATE_INFOSTRINGS) != 0; }
663 
665  bool hasInnerBinary() const
666  { return innerBinary; }
667 
670  { return innerBinary; }
671 
674  { return innerBinary; }
675 };
676 
678 
682 {
683 private:
684  AmdInnerX86Binary64 innerBinary;
685 
686  void initKernelInfos(Flags creationFlags);
687 public:
693  AmdMainX86Binary64(size_t binaryCodeSize, cxbyte* binaryCode,
694  Flags creationFlags = AMDBIN_CREATE_ALL);
695  ~AmdMainX86Binary64() = default;
696 
698  bool hasKernelInfo() const
699  { return (creationFlags & AMDBIN_CREATE_KERNELINFO) != 0; }
700 
702  bool hasKernelInfoMap() const
703  { return (creationFlags & AMDBIN_CREATE_KERNELINFOMAP) != 0; }
704 
706  bool hasInfoStrings() const
707  { return (creationFlags & AMDBIN_CREATE_INFOSTRINGS) != 0; }
708 
710  bool hasInnerBinary() const
711  { return innerBinary; }
712 
715  { return innerBinary; }
718  { return innerBinary; }
719 };
720 
722 extern bool isAmdBinary(size_t binaryCodeSize, const cxbyte* binaryCode);
723 
725 
732  size_t binaryCodeSize, cxbyte* binaryCode,
733  Flags creationFlags = AMDBIN_CREATE_ALL);
734 
735 };
736 
737 #endif
AmdInnerX86Binary32 & getInnerBinary()
get inner binary
Definition: AmdBinaries.h:669
ATI CAL Note header. There are not copied (ULEV must be used)
Definition: AmdBinaries.h:189
bool hasInfoStrings() const
returns true if binary has info strings
Definition: AmdBinaries.h:706
AmdMainType getType() const
get binary type
Definition: AmdBinaries.h:418
uint32_t descSize
description size
Definition: AmdBinaries.h:192
pointer to local memory
uint32_t uavId
uav id
Definition: AmdBinaries.h:221
CString driverInfo
driver info string
Definition: AmdBinaries.h:409
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
read-write image (???)
Definition: AmdBinaries.h:112
AMD GPU header for kernel.
Definition: AmdBinaries.h:453
pointer to global memory
const cxbyte * getGlobalData() const
get global data
Definition: AmdBinaries.h:516
none operation
bool hasKernelInfoMap() const
returns true if binary has kernel informations map
Definition: AmdBinaries.h:612
binary for x86 systems
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:432
const AmdGPUKernelHeader & getKernelHeaderEntry(size_t index) const
get kernel header entry for specified index
Definition: AmdBinaries.h:527
const KernelInfo & getKernelInfo(size_t index) const
get kernel information with specified index
Definition: AmdBinaries.h:430
volatile buffer
Definition: AmdBinaries.h:116
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
ATI CAL note input.
Definition: AmdBinaries.h:205
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
create kernel headers map
Definition: AmdBinaries.h:51
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
size_t size
size
Definition: AmdBinaries.h:448
all AMD binaries creation flags
Definition: AmdBinaries.h:58
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
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
char * data
data (unterminated string)
Definition: AmdBinaries.h:449
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
create map of symbols for inner binaries
Definition: AmdBinaries.h:53
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
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
create CAL notes for AMD inner GPU binary
Definition: AmdBinaries.h:56
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
binary for x86-64 systems
uint32_t machine
machine type
Definition: AmdBinaries.h:181
size_t size
size
Definition: AmdBinaries.h:456
uint32_t getCALEncodingEntriesNum() const
get CALEncoding entries number
Definition: AmdBinaries.h:292
main namespace
Definition: AsmFormats.h:41
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
const cxbyte * data
data of CAL note
Definition: AmdBinaries.h:208
CString kernelName
kernel name
Definition: AmdBinaries.h:455
Definition: AmdBinaries.h:55
buffer is restrict specifier
Definition: AmdBinaries.h:115
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
creation flags for ELF binaries
Definition: ElfBinaries.h:73
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
uint32_t type
type
Definition: AmdBinaries.h:193
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
constant buffer
Definition: AmdBinaries.h:114
cxbyte * getGlobalData()
get global data
Definition: AmdBinaries.h:519
write only image
Definition: AmdBinaries.h:111
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
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
create map of sections for inner binaries
Definition: AmdBinaries.h:52
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
create compile options and driver info
Definition: AmdBinaries.h:49
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
CALNoteHeader header
header of CAL note
Definition: AmdBinaries.h:207
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
size_t size() const
returns number of elements
Definition: Containers.h:169
create kernel informations
Definition: AmdBinaries.h:46
const T * data() const
get data
Definition: Containers.h:242
only for internal usage
Definition: AmdBinaries.h:44
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
cxbyte * data
data
Definition: AmdBinaries.h:457
main AMD GPU binary base class
Definition: AmdBinaries.h:461
class ElfBinaryTemplate< Elf32Types > ElfBinary32
type for 32-bit ELF binary
Definition: ElfBinaries.h:430
uint32_t argType
arg type
Definition: AmdBinaries.h:132
kernel informations
Definition: AmdBinaries.h:252
const CALNoteHeader & getCALNoteHeader(cxuint encodingIndex, uint32_t index) const
get CAL Note header
Definition: AmdBinaries.h:308
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
create map of kernel informations
Definition: AmdBinaries.h:47
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
uint32_t nameSize
name size (must be 8)
Definition: AmdBinaries.h:191
create kernel headers
Definition: AmdBinaries.h:50
uint32_t type
type
Definition: AmdBinaries.h:224
shift for convert inner binary flags into elf binary flags
Definition: AmdBinaries.h:59
create map of inner binaries
Definition: AmdBinaries.h:48
InnerBinaryMap innerBinaryMap
inner binary map
Definition: AmdBinaries.h:470
read only image
Definition: AmdBinaries.h:110
AMD GPU metadata for kernel.
Definition: AmdBinaries.h:446
bool hasInfoStrings() const
returns true if binary has info strings
Definition: AmdBinaries.h:620
Elf binaries handling.
uint8_t ULEV(const uint8_t &t)
convert from/to little endian value from unaligned memory
simple C-string container
Definition: CString.h:38
no special flags
Definition: AmdBinaries.h:109
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
AmdInnerGPUBinary32 & getInnerBinary(size_t index)
get inner binary with specified index
Definition: AmdBinaries.h:489
pointer to constant memory
CString argName
argument name
Definition: AmdBinaries.h:126
cxbyte * globalData
global data content
Definition: AmdBinaries.h:475