CLRX  1
An unofficial OpenCL extensions designed for Radeon GPUs
GalliumBinaries.h
Go to the documentation of this file.
1 /*
2  * CLRadeonExtender - Unofficial OpenCL Radeon Extensions Library
3  * Copyright (C) 2014-2018 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_GALLIUMBINARIES_H__
24 #define __CLRX_GALLIUMBINARIES_H__
25 
26 #include <CLRX/Config.h>
27 #include <cstdint>
28 #include <string>
29 #include <vector>
30 #include <ostream>
31 #include <utility>
32 #include <memory>
33 #include <CLRX/amdbin/Commons.h>
34 #include <CLRX/amdbin/Elf.h>
36 #include <CLRX/utils/MemAccess.h>
37 #include <CLRX/utils/Utilities.h>
38 #include <CLRX/utils/GPUId.h>
39 #include <CLRX/utils/Containers.h>
40 #include <CLRX/utils/InputOutput.h>
41 
43 namespace CLRX
44 {
45 
46 enum : Flags {
49 
52 
54 
57 };
58 
61 {
62  SCALAR = 0,
63  CONSTANT,
64  GLOBAL,
65  LOCAL,
70  SAMPLER,
71  MAX_VALUE = SAMPLER
72 };
73 
76 {
77  GENERAL = 0,
79  GRID_OFFSET,
80  IMAGE_SIZE,
81  IMAGE_FORMAT,
82  MAX_VALUE = IMAGE_FORMAT
83 };
84 
87 {
88  uint32_t address;
89  uint32_t value;
90 };
91 
94 {
96  bool signExtended;
98  uint32_t size;
99  uint32_t targetSize;
100  uint32_t targetAlign;
101 };
102 
105 {
107  uint32_t sectionId;
108  uint32_t offset;
110 };
111 
114 {
115  TEXT = 0,
116  DATA_CONSTANT,
117  DATA_GLOBAL,
118  DATA_LOCAL,
119  DATA_PRIVATE,
120  TEXT_INTERMEDIATE_170 = 0,
121  TEXT_LIBRARY_170,
122  TEXT_EXECUTABLE_170,
123  DATA_CONSTANT_170,
124  DATA_GLOBAL_170,
125  DATA_LOCAL_170,
126  DATA_PRIVATE_170,
127  MAX_VALUE = DATA_PRIVATE_170
128 };
129 
132 {
133  uint32_t sectionId;
135  uint32_t offset;
136  uint32_t size;
137 };
138 
139 // scratch buffer relocation entry
141 {
142  size_t offset;
144 };
145 
148 {
149 public:
152 protected:
153  uint32_t progInfosNum;
155  ProgInfoEntryIndexMap progInfoEntryMap;
156  size_t disasmSize;
157  size_t disasmOffset;
158  bool llvm390;
159  Array<GalliumScratchReloc> scratchRelocs;
160 
162  template<typename ElfBinary>
163  void loadFromElf(ElfBinary& elfBinary, size_t kernelsNum);
164 public:
168  virtual ~GalliumElfBinaryBase();
169 
171  uint32_t getProgramInfosNum() const
172  { return progInfosNum; }
173 
175  uint32_t getProgramInfoEntriesNum(uint32_t index) const;
176 
178  uint32_t getProgramInfoEntryIndex(const char* name) const;
179 
181  const GalliumProgInfoEntry* getProgramInfo(const char* name) const
182  { return progInfoEntries + getProgramInfoEntryIndex(name); }
183 
186  { return progInfoEntries + getProgramInfoEntryIndex(name); }
187 
189  const GalliumProgInfoEntry* getProgramInfo(uint32_t index) const;
191  GalliumProgInfoEntry* getProgramInfo(uint32_t index);
192 
194  bool hasDisassembly() const
195  { return disasmOffset != 0; }
196 
198  size_t getDisassemblySize() const
199  { return disasmSize; }
201  bool isLLVM390() const
202  { return llvm390; }
203 
205  size_t getScratchRelocsNum() const
206  { return scratchRelocs.size(); }
207 
209  const GalliumScratchReloc& getScratchReloc(size_t i) const
210  { return scratchRelocs[i]; }
211 
214  { return scratchRelocs; }
215 };
216 
217 /* INFO: in this file is used ULEV function for conversion
218  * from LittleEndian and unaligned access to other memory access policy and endianness
219  * Please use this function whenever you want to get or set word in ELF binary,
220  * because ELF binaries can be unaligned in memory (as inner binaries).
221  */
223 
225 {
226 private:
227  size_t textRelsNum;
228  size_t textRelEntrySize;
229  cxbyte* textRel;
230 public:
234  GalliumElfBinary32(size_t binaryCodeSize, cxbyte* binaryCode, Flags creationFlags,
235  size_t kernelsNum);
237  virtual ~GalliumElfBinary32();
238 
240  bool hasProgInfoMap() const
241  { return (creationFlags & GALLIUM_ELF_CREATE_PROGINFOMAP) != 0; }
242 
244  const char* getDisassembly() const
245  { return reinterpret_cast<const char*>(binaryCode + disasmOffset); }
246 
248  size_t getTextRelEntriesNum() const
249  { return textRelsNum; }
251  const Elf32_Rel& getTextRelEntry(size_t index) const
252  { return *reinterpret_cast<const Elf32_Rel*>(textRel + textRelEntrySize*index); }
254  Elf32_Rel& getTextRelEntry(size_t index)
255  { return *reinterpret_cast<Elf32_Rel*>(textRel + textRelEntrySize*index); }
256 };
257 
260 {
261 private:
262  size_t textRelsNum;
263  size_t textRelEntrySize;
264  cxbyte* textRel;
265 public:
269  GalliumElfBinary64(size_t binaryCodeSize, cxbyte* binaryCode, Flags creationFlags,
270  size_t kernelsNum);
272  virtual ~GalliumElfBinary64();
273 
275  bool hasProgInfoMap() const
276  { return (creationFlags & GALLIUM_ELF_CREATE_PROGINFOMAP) != 0; }
277 
279  const char* getDisassembly() const
280  { return reinterpret_cast<const char*>(binaryCode + disasmOffset); }
282  size_t getTextRelEntriesNum() const
283  { return textRelsNum; }
285  const Elf64_Rel& getTextRelEntry(size_t index) const
286  { return *reinterpret_cast<const Elf64_Rel*>(textRel + textRelEntrySize*index); }
288  Elf64_Rel& getTextRelEntry(size_t index)
289  { return *reinterpret_cast<Elf64_Rel*>(textRel + textRelEntrySize*index); }
290 };
291 
295 {
296 private:
297  Flags creationFlags;
298  size_t binaryCodeSize;
299  cxbyte* binaryCode;
300  uint32_t kernelsNum;
301  uint32_t sectionsNum;
302  std::unique_ptr<GalliumKernel[]> kernels;
303  std::unique_ptr<GalliumSection[]> sections;
304 
305  bool elf64BitBinary;
306  std::unique_ptr<GalliumElfBinaryBase> elfBinary;
307  bool mesa170;
308 
309 public:
311  GalliumBinary(size_t binaryCodeSize, cxbyte* binaryCode, Flags creationFlags);
313  ~GalliumBinary() = default;
314 
317  { return creationFlags; }
318 
320  size_t getSize() const
321  { return binaryCodeSize; }
322 
324  operator bool() const
325  { return binaryCode!=nullptr; }
326 
328  bool operator!() const
329  { return binaryCode==nullptr; }
330 
332  const cxbyte* getBinaryCode() const
333  { return binaryCode; }
334 
337  { return binaryCode; }
339  bool is64BitElfBinary() const
340  { return elf64BitBinary; }
341 
344  { return *static_cast<GalliumElfBinary32*>(elfBinary.get()); }
345 
348  { return *static_cast<const GalliumElfBinary32*>(elfBinary.get()); }
349 
352  { return *static_cast<GalliumElfBinary64*>(elfBinary.get()); }
353 
356  { return *static_cast<const GalliumElfBinary64*>(elfBinary.get()); }
357 
359  uint32_t getSectionsNum() const
360  { return sectionsNum; }
361 
363  uint32_t getSectionSize(uint32_t index) const
364  { return sections[index].size; }
365 
367  const cxbyte* getSectionContent(uint32_t index) const
368  { return binaryCode + sections[index].offset; }
369 
371  cxbyte* getSectionContent(uint32_t index)
372  { return binaryCode + sections[index].offset; }
373 
375  const GalliumSection& getSection(uint32_t index) const
376  { return sections[index]; }
377 
379  uint32_t getKernelsNum() const
380  { return kernelsNum;; }
381 
383  uint32_t getKernelIndex(const char* name) const;
384 
386  const GalliumKernel& getKernel(uint32_t index) const
387  { return kernels[index]; }
388 
390  const GalliumKernel& getKernel(const char* name) const
391  { return kernels[getKernelIndex(name)]; }
393  bool isMesa170() const
394  { return mesa170; };
395 };
396 
397 enum: cxuint {
398  GALLIUMSECTID_GPUCONFIG = ELFSECTID_OTHER_BUILTIN,
399  GALLIUMSECTID_NOTEGNUSTACK,
400  GALLIUMSECTID_RELTEXT,
401  GALLIUMSECTID_MAX = GALLIUMSECTID_RELTEXT
402 };
403 
404 /*
405  * Gallium Binary generator
406  */
407 
410 {
414  uint32_t pgmRSRC1;
415  uint32_t pgmRSRC2;
417  bool ieeeMode;
421  bool tgSize;
422  bool debugMode;
424  bool dx10Clamp;
425  size_t localSize;
426  uint32_t scratchBufferSize;
429 };
430 
433 {
435  GalliumProgInfoEntry progInfo[5];
436  bool useConfig;
438  uint32_t offset;
439  std::vector<GalliumArgInfo> argInfos;
440 };
441 
444 {
445  bool is64BitElf;
446  bool isLLVM390;
447  bool isMesa170;
449  size_t globalDataSize;
451  std::vector<GalliumKernelInput> kernels;
452  size_t codeSize;
453  const cxbyte* code;
454  size_t commentSize;
455  const char* comment;
456  std::vector<BinSection> extraSections;
457  std::vector<BinSymbol> extraSymbols;
458  std::vector<GalliumScratchReloc> scratchRelocs;
459 
461  void addEmptyKernel(const char* kernelName, cxuint llvmVersion);
462 };
463 
466 {
467 private:
468  bool manageable;
469  const GalliumInput* input;
470 
471  void generateInternal(std::ostream* osPtr, std::vector<char>* vPtr,
472  Array<cxbyte>* aPtr) const;
473 public:
476  explicit GalliumBinGenerator(const GalliumInput* galliumInput);
477 
479 
488  GalliumBinGenerator(bool _64bitMode, GPUDeviceType deviceType, size_t codeSize,
489  const cxbyte* code, size_t globalDataSize, const cxbyte* globalData,
490  const std::vector<GalliumKernelInput>& kernels);
492  GalliumBinGenerator(bool _64bitMode, GPUDeviceType deviceType, size_t codeSize,
493  const cxbyte* code, size_t globalDataSize, const cxbyte* globalData,
494  std::vector<GalliumKernelInput>&& kernels);
496 
498  const GalliumInput* getInput() const
499  { return input; }
500 
502  void setInput(const GalliumInput* input);
503 
505  void generate(Array<cxbyte>& array) const;
506 
508  void generate(std::ostream& os) const;
509 
511  void generate(std::vector<char>& vector) const;
512 };
513 
515 extern uint32_t detectMesaDriverVersion();
517 extern uint32_t detectLLVMCompilerVersion();
518 
519 };
520 
521 #endif
uint32_t pgmRSRC2
pgmRSRC2 register value
Definition: GalliumBinaries.h:415
bool privilegedMode
prvileged mode
Definition: GalliumBinaries.h:423
GalliumElfBinary64 & getElfBinary64()
returns Gallium inner ELF 64-bit binary
Definition: GalliumBinaries.h:351
Flags getCreationFlags()
get creation flags
Definition: GalliumBinaries.h:316
pointer to local memory
bool is64BitElf
is 64-bit elf binary
Definition: GalliumBinaries.h:445
kernel config
Definition: GalliumBinaries.h:409
non copyable and non movable base structure (class)
Definition: Utilities.h:46
uint32_t Flags
type for declaring various flags
Definition: Utilities.h:100
pointer to global memory
uint32_t sectionId
section id
Definition: GalliumBinaries.h:107
size_t offset
offset
Definition: GalliumBinaries.h:142
const cxbyte * getSectionContent(uint32_t index) const
get content for section with specified index
Definition: GalliumBinaries.h:367
RelocType type
relocation type
Definition: GalliumBinaries.h:143
GalliumProgInfoEntry * getProgramInfo(const char *name)
returns program info entries for specified kernel name
Definition: GalliumBinaries.h:185
size_t localSize
used local size (not local defined in kernel arguments)
Definition: GalliumBinaries.h:425
Array< std::pair< const char *, size_t > > ProgInfoEntryIndexMap
program info entry index map
Definition: GalliumBinaries.h:151
uint32_t address
address
Definition: GalliumBinaries.h:88
bool isMesa170
true if binary for >= Mesa3D 17.0
Definition: GalliumBinaries.h:447
Gallium binarie&#39;s Section.
Definition: GalliumBinaries.h:131
cxbyte priority
priority
Definition: GalliumBinaries.h:419
uint32_t value
value
Definition: GalliumBinaries.h:89
GalliumProgInfoEntry * progInfoEntries
program info entries
Definition: GalliumBinaries.h:154
class ElfBinaryTemplate< Elf64Types > ElfBinary64
type for 64-bit ELF binary
Definition: ElfBinaries.h:483
uint32_t targetSize
target size
Definition: GalliumBinaries.h:99
Gallium input.
Definition: GalliumBinaries.h:443
ProgInfoEntryIndexMap progInfoEntryMap
program info map
Definition: GalliumBinaries.h:155
Definition: GalliumBinaries.h:50
GalliumSectionType type
type of section
Definition: GalliumBinaries.h:134
kernel argument (Gallium binaries)
Definition: GalliumBinaries.h:93
common definitions for binaries
GalliumArgType type
type of argument
Definition: GalliumBinaries.h:95
bool debugMode
debug mode
Definition: GalliumBinaries.h:422
const GalliumKernel & getKernel(const char *name) const
get kernel with speciified name
Definition: GalliumBinaries.h:390
Definition: GalliumBinaries.h:294
const GalliumElfBinary64 & getElfBinary64() const
returns Gallium inner ELF 64-bit binary
Definition: GalliumBinaries.h:355
cxbyte * getBinaryCode()
returns binary code data
Definition: GalliumBinaries.h:336
an array class
Definition: Containers.h:41
uint32_t detectMesaDriverVersion()
detect driver version in the system
const GalliumProgInfoEntry * getProgramInfo(const char *name) const
returns program info entries for specified kernel name
Definition: GalliumBinaries.h:181
uint32_t getKernelsNum() const
returns kernels number
Definition: GalliumBinaries.h:379
size_t getSize() const
get size of binaries
Definition: GalliumBinaries.h:320
std::vector< GalliumKernelInput > kernels
input kernel list
Definition: GalliumBinaries.h:451
cxuint usedVGPRsNum
number of used VGPRs
Definition: GalliumBinaries.h:412
Configuration header.
CString kernelName
kernel&#39;s name
Definition: GalliumBinaries.h:434
size_t getTextRelEntriesNum() const
get text rel entries number
Definition: GalliumBinaries.h:248
cxuint RelocType
relocation type
Definition: Commons.h:33
uint32_t getSectionsNum() const
get sections number
Definition: GalliumBinaries.h:359
size_t commentSize
comment size (can be null)
Definition: GalliumBinaries.h:454
size_t disasmOffset
disassembly offset
Definition: GalliumBinaries.h:157
create map of sections for inner binaries
Definition: GalliumBinaries.h:47
size_t disasmSize
disassembly size
Definition: GalliumBinaries.h:156
GPUDeviceType deviceType
GPU device type.
Definition: GalliumBinaries.h:448
Definition: Elf.h:436
cxbyte userDataNum
number of user data
Definition: GalliumBinaries.h:416
const Elf32_Rel & getTextRelEntry(size_t index) const
get text rel entry
Definition: GalliumBinaries.h:251
const GalliumInput * getInput() const
get input
Definition: GalliumBinaries.h:498
uint32_t size
size of argument
Definition: GalliumBinaries.h:98
bool ieeeMode
IEEE mode.
Definition: GalliumBinaries.h:417
creation flags for ELF binaries
Definition: ElfBinaries.h:73
cxuint usedSGPRsNum
number of used SGPRs
Definition: GalliumBinaries.h:413
input output utilities
uint32_t offset
offset in binary
Definition: GalliumBinaries.h:135
size_t globalDataSize
global constant data size
Definition: GalliumBinaries.h:449
Array< GalliumArgInfo > argInfos
arguments
Definition: GalliumBinaries.h:109
size_t codeSize
code size
Definition: GalliumBinaries.h:452
unsigned char cxbyte
unsigned byte
Definition: Config.h:229
Elf64_Rel & getTextRelEntry(size_t index)
get text rel entry
Definition: GalliumBinaries.h:288
kernel program info entry for Gallium binaries
Definition: GalliumBinaries.h:86
main namespace
Definition: AsmDefs.h:38
std::vector< BinSymbol > extraSymbols
extra symbols
Definition: GalliumBinaries.h:457
shift for convert inner binary flags into elf binary flags
Definition: GalliumBinaries.h:56
const cxbyte * globalData
global constant data
Definition: GalliumBinaries.h:450
cxbyte floatMode
float mode
Definition: GalliumBinaries.h:418
const GalliumElfBinary32 & getElfBinary32() const
returns Gallium inner ELF 32-bit binary
Definition: GalliumBinaries.h:347
unsigned int cxuint
unsigned int
Definition: Config.h:237
bool useConfig
true if configuration has been used to generate binary
Definition: GalliumBinaries.h:436
create map of kernels for inner binaries
Definition: GalliumBinaries.h:48
uint32_t sectionId
section id
Definition: GalliumBinaries.h:133
gallium code binary generator
Definition: GalliumBinaries.h:465
cxuint spilledVGPRs
number of spilled vector registers
Definition: GalliumBinaries.h:427
bool isLLVM390
true if binary for >= LLVM 3.9
Definition: GalliumBinaries.h:446
bool isMesa170() const
returns true if binary for >=Mesa3D 17.0
Definition: GalliumBinaries.h:393
uint32_t targetAlign
target alignment
Definition: GalliumBinaries.h:100
kernel info structure (Gallium binaries)
Definition: GalliumBinaries.h:432
inlines for accessing memory words in LittleEndian and unaligned
bool operator!() const
returns true if object is uninitialized
Definition: GalliumBinaries.h:328
bool hasProgInfoMap() const
return true if binary has program info map
Definition: GalliumBinaries.h:275
create elf proginfomap
Definition: GalliumBinaries.h:53
section for text (binary code)
const char * getDisassembly() const
return disassembly content (without null-character)
Definition: GalliumBinaries.h:244
const GalliumScratchReloc & getScratchReloc(size_t i) const
return scratch buffer relocation by index
Definition: GalliumBinaries.h:209
GPUDeviceType
type of GPU device
Definition: GPUId.h:51
uint32_t detectLLVMCompilerVersion()
detect LLVM compiler version in the system
cxbyte exceptions
enabled exceptions
Definition: GalliumBinaries.h:420
std::vector< GalliumArgInfo > argInfos
arguments
Definition: GalliumBinaries.h:439
32-bit Gallium ELF binary
Definition: GalliumBinaries.h:224
const GalliumKernel & getKernel(uint32_t index) const
get kernel by index
Definition: GalliumBinaries.h:386
GalliumSectionType
Gallium format section type.
Definition: GalliumBinaries.h:113
bool dx10Clamp
DX10 CLAMP mode.
Definition: GalliumBinaries.h:424
const cxbyte * code
code
Definition: GalliumBinaries.h:453
64-bit Gallium ELF binary
Definition: GalliumBinaries.h:259
utilities for other libraries and programs
uint32_t size
size of section
Definition: GalliumBinaries.h:136
size_t getScratchRelocsNum() const
return scratch buffer relocations number
Definition: GalliumBinaries.h:205
uint32_t scratchBufferSize
size of scratch buffer
Definition: GalliumBinaries.h:426
uint32_t getProgramInfosNum() const
returns program infos number
Definition: GalliumBinaries.h:171
CString kernelName
kernel&#39;s name
Definition: GalliumBinaries.h:106
bool is64BitElfBinary() const
return true if inner binary is 64-bit
Definition: GalliumBinaries.h:339
const char * getDisassembly() const
return disassembly content (without null-character)
Definition: GalliumBinaries.h:279
all Gallium binaries flags
Definition: GalliumBinaries.h:55
uint32_t progInfosNum
program info entries number
Definition: GalliumBinaries.h:153
const GalliumSection & getSection(uint32_t index) const
get section with specified index
Definition: GalliumBinaries.h:375
bool tgSize
enable TG_SIZE_EN bit
Definition: GalliumBinaries.h:421
size_t getTextRelEntriesNum() const
get text rel entries number
Definition: GalliumBinaries.h:282
uint32_t pgmRSRC1
pgmRSRC1 register value
Definition: GalliumBinaries.h:414
GPU identification utilities.
Definition: GalliumBinaries.h:140
uint32_t getSectionSize(uint32_t index) const
get size of section with specified index
Definition: GalliumBinaries.h:363
size_t size() const
returns number of elements
Definition: Containers.h:172
const Array< GalliumScratchReloc > & getScratchRelocs() const
return all scratch buffer relocations
Definition: GalliumBinaries.h:213
Definition: Elf.h:447
std::vector< GalliumScratchReloc > scratchRelocs
scratchbuffer relocations
Definition: GalliumBinaries.h:458
class ElfBinaryTemplate< Elf32Types > ElfBinary32
type for 32-bit ELF binary
Definition: ElfBinaries.h:481
GalliumArgSemantic semantic
semantic of array
Definition: GalliumBinaries.h:97
kernel info structure (Gallium binaries)
Definition: GalliumBinaries.h:104
Elf32_Rel & getTextRelEntry(size_t index)
get text rel entry
Definition: GalliumBinaries.h:254
GalliumArgType
GalliumCompute Kernel Arg type.
Definition: GalliumBinaries.h:60
bool isLLVM390() const
returns true binary for if >=LLVM 3.9
Definition: GalliumBinaries.h:201
GalliumArgSemantic
Gallium semantic field type.
Definition: GalliumBinaries.h:75
const char * comment
comment
Definition: GalliumBinaries.h:455
bool llvm390
true if >= LLVM 3.9
Definition: GalliumBinaries.h:158
bool hasProgInfoMap() const
return true if binary has program info map
Definition: GalliumBinaries.h:240
uint32_t offset
offset in ElfBinary
Definition: GalliumBinaries.h:108
size_t getDisassemblySize() const
returns size of disassembly
Definition: GalliumBinaries.h:198
const Elf64_Rel & getTextRelEntry(size_t index) const
get text rel entry
Definition: GalliumBinaries.h:285
std::vector< BinSection > extraSections
extra sections
Definition: GalliumBinaries.h:456
cxbyte * getSectionContent(uint32_t index)
get content for section with specified index
Definition: GalliumBinaries.h:371
cxuint dimMask
mask of dimension (bits: 0 - X, 1 - Y, 2 - Z)
Definition: GalliumBinaries.h:411
GalliumElfBinary32 & getElfBinary32()
returns Gallium inner ELF 32-bit binary
Definition: GalliumBinaries.h:343
GalliumKernelConfig config
kernel&#39;s configuration
Definition: GalliumBinaries.h:437
bool hasDisassembly() const
returns true if disassembly available
Definition: GalliumBinaries.h:194
const cxbyte * getBinaryCode() const
returns binary code data
Definition: GalliumBinaries.h:332
Elf binaries handling.
bool signExtended
is signed extended
Definition: GalliumBinaries.h:96
simple C-string container
Definition: CString.h:38
Elf.h definitions.
create prinfomap for inner binaries
Definition: GalliumBinaries.h:51
containers and other utils for other libraries and programs
Gallium elf binary base (for 32-bit and 64-bit)
Definition: GalliumBinaries.h:147
cxuint spilledSGPRs
number of spilled scalar registers
Definition: GalliumBinaries.h:428
uint32_t offset
offset of kernel code
Definition: GalliumBinaries.h:438
pointer to constant memory