@@ -25,7 +25,8 @@ enum class DeviceBinaryFormat : uint8_t {
2525 OclLibrary,
2626 OclCompiledObject,
2727 Patchtokens,
28- Archive
28+ Archive,
29+ Zebin
2930};
3031
3132enum class DecodeError : uint8_t {
@@ -54,6 +55,7 @@ inline const char *asString(DecodeError err) {
5455
5556struct TargetDevice {
5657 GFXCORE_FAMILY coreFamily = IGFX_UNKNOWN_CORE;
58+ PRODUCT_FAMILY productFamily = IGFX_UNKNOWN;
5759 uint32_t stepping = 0U ;
5860 uint32_t maxPointerSizeInBytes = 4U ;
5961};
@@ -76,6 +78,8 @@ template <>
7678bool isDeviceBinaryFormat<DeviceBinaryFormat::Patchtokens>(const ArrayRef<const uint8_t >);
7779template <>
7880bool isDeviceBinaryFormat<DeviceBinaryFormat::Archive>(const ArrayRef<const uint8_t >);
81+ template <>
82+ bool isDeviceBinaryFormat<DeviceBinaryFormat::Zebin>(const ArrayRef<const uint8_t >);
7983
8084inline bool isAnyDeviceBinaryFormat (const ArrayRef<const uint8_t > binary) {
8185 if (isDeviceBinaryFormat<DeviceBinaryFormat::OclElf>(binary)) {
@@ -87,6 +91,9 @@ inline bool isAnyDeviceBinaryFormat(const ArrayRef<const uint8_t> binary) {
8791 if (isDeviceBinaryFormat<DeviceBinaryFormat::Archive>(binary)) {
8892 return true ;
8993 }
94+ if (isDeviceBinaryFormat<DeviceBinaryFormat::Zebin>(binary)) {
95+ return true ;
96+ }
9097 return false ;
9198}
9299
@@ -100,6 +107,8 @@ template <>
100107SingleDeviceBinary unpackSingleDeviceBinary<DeviceBinaryFormat::Patchtokens>(const ArrayRef<const uint8_t >, const ConstStringRef, const TargetDevice &, std::string &, std::string &);
101108template <>
102109SingleDeviceBinary unpackSingleDeviceBinary<DeviceBinaryFormat::Archive>(const ArrayRef<const uint8_t >, const ConstStringRef, const TargetDevice &, std::string &, std::string &);
110+ template <>
111+ SingleDeviceBinary unpackSingleDeviceBinary<DeviceBinaryFormat::Zebin>(const ArrayRef<const uint8_t >, const ConstStringRef, const TargetDevice &, std::string &, std::string &);
103112
104113inline SingleDeviceBinary unpackSingleDeviceBinary (const ArrayRef<const uint8_t > archive, const ConstStringRef requestedProductAbbreviation, const TargetDevice &requestedTargetDevice,
105114 std::string &outErrReason, std::string &outWarning) {
@@ -111,6 +120,8 @@ inline SingleDeviceBinary unpackSingleDeviceBinary(const ArrayRef<const uint8_t>
111120 return unpackSingleDeviceBinary<DeviceBinaryFormat::Patchtokens>(archive, requestedProductAbbreviation, requestedTargetDevice, outErrReason, outWarning);
112121 } else if (isDeviceBinaryFormat<DeviceBinaryFormat::Archive>(archive)) {
113122 return unpackSingleDeviceBinary<DeviceBinaryFormat::Archive>(archive, requestedProductAbbreviation, requestedTargetDevice, outErrReason, outWarning);
123+ } else if (isDeviceBinaryFormat<DeviceBinaryFormat::Zebin>(archive)) {
124+ return unpackSingleDeviceBinary<DeviceBinaryFormat::Zebin>(archive, requestedProductAbbreviation, requestedTargetDevice, outErrReason, outWarning);
114125 } else {
115126 outErrReason = " Unknown format" ;
116127 }
@@ -132,11 +143,14 @@ inline bool isAnyPackedDeviceBinaryFormat(const ArrayRef<const uint8_t> binary)
132143 if (isDeviceBinaryFormat<DeviceBinaryFormat::Archive>(binary)) {
133144 return true ;
134145 }
146+ if (isDeviceBinaryFormat<DeviceBinaryFormat::Zebin>(binary)) {
147+ return true ;
148+ }
135149 return false ;
136150}
137151
138152inline bool isAnySingleDeviceBinaryFormat (const ArrayRef<const uint8_t > binary) {
139- return (false == isAnyPackedDeviceBinaryFormat (binary)) && isAnyDeviceBinaryFormat (binary);
153+ return (( false == isAnyPackedDeviceBinaryFormat (binary)) && isAnyDeviceBinaryFormat (binary)) || isDeviceBinaryFormat<DeviceBinaryFormat::Zebin> (binary);
140154}
141155
142156template <DeviceBinaryFormat Format>
@@ -148,6 +162,8 @@ template <>
148162DecodeError decodeSingleDeviceBinary<DeviceBinaryFormat::Patchtokens>(ProgramInfo &, const SingleDeviceBinary &, std::string &, std::string &);
149163template <>
150164DecodeError decodeSingleDeviceBinary<DeviceBinaryFormat::Archive>(ProgramInfo &, const SingleDeviceBinary &, std::string &, std::string &);
165+ template <>
166+ DecodeError decodeSingleDeviceBinary<DeviceBinaryFormat::Zebin>(ProgramInfo &, const SingleDeviceBinary &, std::string &, std::string &);
151167
152168inline std::pair<DecodeError, DeviceBinaryFormat> decodeSingleDeviceBinary (ProgramInfo &dst, const SingleDeviceBinary &src, std::string &outErrReason, std::string &outWarning) {
153169 std::pair<DecodeError, DeviceBinaryFormat> ret;
@@ -162,6 +178,9 @@ inline std::pair<DecodeError, DeviceBinaryFormat> decodeSingleDeviceBinary(Progr
162178 } else if (isDeviceBinaryFormat<DeviceBinaryFormat::Archive>(src.deviceBinary )) {
163179 ret.second = DeviceBinaryFormat::Archive;
164180 ret.first = decodeSingleDeviceBinary<DeviceBinaryFormat::Archive>(dst, src, outErrReason, outWarning);
181+ } else if (isDeviceBinaryFormat<DeviceBinaryFormat::Zebin>(src.deviceBinary )) {
182+ ret.second = DeviceBinaryFormat::Zebin;
183+ ret.first = decodeSingleDeviceBinary<DeviceBinaryFormat::Zebin>(dst, src, outErrReason, outWarning);
165184 } else {
166185 outErrReason = " Unknown format" ;
167186 }
0 commit comments