mirror of
https://github.com/Inori/GPCS4.git
synced 2025-04-02 10:31:52 -04:00
600 lines
No EOL
20 KiB
Python
600 lines
No EOL
20 KiB
Python
import sys
|
|
import struct
|
|
|
|
OPCODE_TABLE = \
|
|
{
|
|
0: 'OpNop',
|
|
1: 'OpUndef',
|
|
2: 'OpSourceContinued',
|
|
3: 'OpSource',
|
|
4: 'OpSourceExtension',
|
|
5: 'OpName',
|
|
6: 'OpMemberName',
|
|
7: 'OpString',
|
|
8: 'OpLine',
|
|
10: 'OpExtension',
|
|
11: 'OpExtInstImport',
|
|
12: 'OpExtInst',
|
|
14: 'OpMemoryModel',
|
|
15: 'OpEntryPoint',
|
|
16: 'OpExecutionMode',
|
|
17: 'OpCapability',
|
|
19: 'OpTypeVoid',
|
|
20: 'OpTypeBool',
|
|
21: 'OpTypeInt',
|
|
22: 'OpTypeFloat',
|
|
23: 'OpTypeVector',
|
|
24: 'OpTypeMatrix',
|
|
25: 'OpTypeImage',
|
|
26: 'OpTypeSampler',
|
|
27: 'OpTypeSampledImage',
|
|
28: 'OpTypeArray',
|
|
29: 'OpTypeRuntimeArray',
|
|
30: 'OpTypeStruct',
|
|
31: 'OpTypeOpaque',
|
|
32: 'OpTypePointer',
|
|
33: 'OpTypeFunction',
|
|
34: 'OpTypeEvent',
|
|
35: 'OpTypeDeviceEvent',
|
|
36: 'OpTypeReserveId',
|
|
37: 'OpTypeQueue',
|
|
38: 'OpTypePipe',
|
|
39: 'OpTypeForwardPointer',
|
|
41: 'OpConstantTrue',
|
|
42: 'OpConstantFalse',
|
|
43: 'OpConstant',
|
|
44: 'OpConstantComposite',
|
|
45: 'OpConstantSampler',
|
|
46: 'OpConstantNull',
|
|
48: 'OpSpecConstantTrue',
|
|
49: 'OpSpecConstantFalse',
|
|
50: 'OpSpecConstant',
|
|
51: 'OpSpecConstantComposite',
|
|
52: 'OpSpecConstantOp',
|
|
54: 'OpFunction',
|
|
55: 'OpFunctionParameter',
|
|
56: 'OpFunctionEnd',
|
|
57: 'OpFunctionCall',
|
|
59: 'OpVariable',
|
|
60: 'OpImageTexelPointer',
|
|
61: 'OpLoad',
|
|
62: 'OpStore',
|
|
63: 'OpCopyMemory',
|
|
64: 'OpCopyMemorySized',
|
|
65: 'OpAccessChain',
|
|
66: 'OpInBoundsAccessChain',
|
|
67: 'OpPtrAccessChain',
|
|
68: 'OpArrayLength',
|
|
69: 'OpGenericPtrMemSemantics',
|
|
70: 'OpInBoundsPtrAccessChain',
|
|
71: 'OpDecorate',
|
|
72: 'OpMemberDecorate',
|
|
73: 'OpDecorationGroup',
|
|
74: 'OpGroupDecorate',
|
|
75: 'OpGroupMemberDecorate',
|
|
77: 'OpVectorExtractDynamic',
|
|
78: 'OpVectorInsertDynamic',
|
|
79: 'OpVectorShuffle',
|
|
80: 'OpCompositeConstruct',
|
|
81: 'OpCompositeExtract',
|
|
82: 'OpCompositeInsert',
|
|
83: 'OpCopyObject',
|
|
84: 'OpTranspose',
|
|
86: 'OpSampledImage',
|
|
87: 'OpImageSampleImplicitLod',
|
|
88: 'OpImageSampleExplicitLod',
|
|
89: 'OpImageSampleDrefImplicitLod',
|
|
90: 'OpImageSampleDrefExplicitLod',
|
|
91: 'OpImageSampleProjImplicitLod',
|
|
92: 'OpImageSampleProjExplicitLod',
|
|
93: 'OpImageSampleProjDrefImplicitLod',
|
|
94: 'OpImageSampleProjDrefExplicitLod',
|
|
95: 'OpImageFetch',
|
|
96: 'OpImageGather',
|
|
97: 'OpImageDrefGather',
|
|
98: 'OpImageRead',
|
|
99: 'OpImageWrite',
|
|
100: 'OpImage',
|
|
101: 'OpImageQueryFormat',
|
|
102: 'OpImageQueryOrder',
|
|
103: 'OpImageQuerySizeLod',
|
|
104: 'OpImageQuerySize',
|
|
105: 'OpImageQueryLod',
|
|
106: 'OpImageQueryLevels',
|
|
107: 'OpImageQuerySamples',
|
|
109: 'OpConvertFToU',
|
|
110: 'OpConvertFToS',
|
|
111: 'OpConvertSToF',
|
|
112: 'OpConvertUToF',
|
|
113: 'OpUConvert',
|
|
114: 'OpSConvert',
|
|
115: 'OpFConvert',
|
|
116: 'OpQuantizeToF16',
|
|
117: 'OpConvertPtrToU',
|
|
118: 'OpSatConvertSToU',
|
|
119: 'OpSatConvertUToS',
|
|
120: 'OpConvertUToPtr',
|
|
121: 'OpPtrCastToGeneric',
|
|
122: 'OpGenericCastToPtr',
|
|
123: 'OpGenericCastToPtrExplicit',
|
|
124: 'OpBitcast',
|
|
126: 'OpSNegate',
|
|
127: 'OpFNegate',
|
|
128: 'OpIAdd',
|
|
129: 'OpFAdd',
|
|
130: 'OpISub',
|
|
131: 'OpFSub',
|
|
132: 'OpIMul',
|
|
133: 'OpFMul',
|
|
134: 'OpUDiv',
|
|
135: 'OpSDiv',
|
|
136: 'OpFDiv',
|
|
137: 'OpUMod',
|
|
138: 'OpSRem',
|
|
139: 'OpSMod',
|
|
140: 'OpFRem',
|
|
141: 'OpFMod',
|
|
142: 'OpVectorTimesScalar',
|
|
143: 'OpMatrixTimesScalar',
|
|
144: 'OpVectorTimesMatrix',
|
|
145: 'OpMatrixTimesVector',
|
|
146: 'OpMatrixTimesMatrix',
|
|
147: 'OpOuterProduct',
|
|
148: 'OpDot',
|
|
149: 'OpIAddCarry',
|
|
150: 'OpISubBorrow',
|
|
151: 'OpUMulExtended',
|
|
152: 'OpSMulExtended',
|
|
154: 'OpAny',
|
|
155: 'OpAll',
|
|
156: 'OpIsNan',
|
|
157: 'OpIsInf',
|
|
158: 'OpIsFinite',
|
|
159: 'OpIsNormal',
|
|
160: 'OpSignBitSet',
|
|
161: 'OpLessOrGreater',
|
|
162: 'OpOrdered',
|
|
163: 'OpUnordered',
|
|
164: 'OpLogicalEqual',
|
|
165: 'OpLogicalNotEqual',
|
|
166: 'OpLogicalOr',
|
|
167: 'OpLogicalAnd',
|
|
168: 'OpLogicalNot',
|
|
169: 'OpSelect',
|
|
170: 'OpIEqual',
|
|
171: 'OpINotEqual',
|
|
172: 'OpUGreaterThan',
|
|
173: 'OpSGreaterThan',
|
|
174: 'OpUGreaterThanEqual',
|
|
175: 'OpSGreaterThanEqual',
|
|
176: 'OpULessThan',
|
|
177: 'OpSLessThan',
|
|
178: 'OpULessThanEqual',
|
|
179: 'OpSLessThanEqual',
|
|
180: 'OpFOrdEqual',
|
|
181: 'OpFUnordEqual',
|
|
182: 'OpFOrdNotEqual',
|
|
183: 'OpFUnordNotEqual',
|
|
184: 'OpFOrdLessThan',
|
|
185: 'OpFUnordLessThan',
|
|
186: 'OpFOrdGreaterThan',
|
|
187: 'OpFUnordGreaterThan',
|
|
188: 'OpFOrdLessThanEqual',
|
|
189: 'OpFUnordLessThanEqual',
|
|
190: 'OpFOrdGreaterThanEqual',
|
|
191: 'OpFUnordGreaterThanEqual',
|
|
194: 'OpShiftRightLogical',
|
|
195: 'OpShiftRightArithmetic',
|
|
196: 'OpShiftLeftLogical',
|
|
197: 'OpBitwiseOr',
|
|
198: 'OpBitwiseXor',
|
|
199: 'OpBitwiseAnd',
|
|
200: 'OpNot',
|
|
201: 'OpBitFieldInsert',
|
|
202: 'OpBitFieldSExtract',
|
|
203: 'OpBitFieldUExtract',
|
|
204: 'OpBitReverse',
|
|
205: 'OpBitCount',
|
|
207: 'OpDPdx',
|
|
208: 'OpDPdy',
|
|
209: 'OpFwidth',
|
|
210: 'OpDPdxFine',
|
|
211: 'OpDPdyFine',
|
|
212: 'OpFwidthFine',
|
|
213: 'OpDPdxCoarse',
|
|
214: 'OpDPdyCoarse',
|
|
215: 'OpFwidthCoarse',
|
|
218: 'OpEmitVertex',
|
|
219: 'OpEndPrimitive',
|
|
220: 'OpEmitStreamVertex',
|
|
221: 'OpEndStreamPrimitive',
|
|
224: 'OpControlBarrier',
|
|
225: 'OpMemoryBarrier',
|
|
227: 'OpAtomicLoad',
|
|
228: 'OpAtomicStore',
|
|
229: 'OpAtomicExchange',
|
|
230: 'OpAtomicCompareExchange',
|
|
231: 'OpAtomicCompareExchangeWeak',
|
|
232: 'OpAtomicIIncrement',
|
|
233: 'OpAtomicIDecrement',
|
|
234: 'OpAtomicIAdd',
|
|
235: 'OpAtomicISub',
|
|
236: 'OpAtomicSMin',
|
|
237: 'OpAtomicUMin',
|
|
238: 'OpAtomicSMax',
|
|
239: 'OpAtomicUMax',
|
|
240: 'OpAtomicAnd',
|
|
241: 'OpAtomicOr',
|
|
242: 'OpAtomicXor',
|
|
245: 'OpPhi',
|
|
246: 'OpLoopMerge',
|
|
247: 'OpSelectionMerge',
|
|
248: 'OpLabel',
|
|
249: 'OpBranch',
|
|
250: 'OpBranchConditional',
|
|
251: 'OpSwitch',
|
|
252: 'OpKill',
|
|
253: 'OpReturn',
|
|
254: 'OpReturnValue',
|
|
255: 'OpUnreachable',
|
|
256: 'OpLifetimeStart',
|
|
257: 'OpLifetimeStop',
|
|
259: 'OpGroupAsyncCopy',
|
|
260: 'OpGroupWaitEvents',
|
|
261: 'OpGroupAll',
|
|
262: 'OpGroupAny',
|
|
263: 'OpGroupBroadcast',
|
|
264: 'OpGroupIAdd',
|
|
265: 'OpGroupFAdd',
|
|
266: 'OpGroupFMin',
|
|
267: 'OpGroupUMin',
|
|
268: 'OpGroupSMin',
|
|
269: 'OpGroupFMax',
|
|
270: 'OpGroupUMax',
|
|
271: 'OpGroupSMax',
|
|
274: 'OpReadPipe',
|
|
275: 'OpWritePipe',
|
|
276: 'OpReservedReadPipe',
|
|
277: 'OpReservedWritePipe',
|
|
278: 'OpReserveReadPipePackets',
|
|
279: 'OpReserveWritePipePackets',
|
|
280: 'OpCommitReadPipe',
|
|
281: 'OpCommitWritePipe',
|
|
282: 'OpIsValidReserveId',
|
|
283: 'OpGetNumPipePackets',
|
|
284: 'OpGetMaxPipePackets',
|
|
285: 'OpGroupReserveReadPipePackets',
|
|
286: 'OpGroupReserveWritePipePackets',
|
|
287: 'OpGroupCommitReadPipe',
|
|
288: 'OpGroupCommitWritePipe',
|
|
291: 'OpEnqueueMarker',
|
|
292: 'OpEnqueueKernel',
|
|
293: 'OpGetKernelNDrangeSubGroupCount',
|
|
294: 'OpGetKernelNDrangeMaxSubGroupSize',
|
|
295: 'OpGetKernelWorkGroupSize',
|
|
296: 'OpGetKernelPreferredWorkGroupSizeMultiple',
|
|
297: 'OpRetainEvent',
|
|
298: 'OpReleaseEvent',
|
|
299: 'OpCreateUserEvent',
|
|
300: 'OpIsValidEvent',
|
|
301: 'OpSetUserEventStatus',
|
|
302: 'OpCaptureEventProfilingInfo',
|
|
303: 'OpGetDefaultQueue',
|
|
304: 'OpBuildNDRange',
|
|
305: 'OpImageSparseSampleImplicitLod',
|
|
306: 'OpImageSparseSampleExplicitLod',
|
|
307: 'OpImageSparseSampleDrefImplicitLod',
|
|
308: 'OpImageSparseSampleDrefExplicitLod',
|
|
309: 'OpImageSparseSampleProjImplicitLod',
|
|
310: 'OpImageSparseSampleProjExplicitLod',
|
|
311: 'OpImageSparseSampleProjDrefImplicitLod',
|
|
312: 'OpImageSparseSampleProjDrefExplicitLod',
|
|
313: 'OpImageSparseFetch',
|
|
314: 'OpImageSparseGather',
|
|
315: 'OpImageSparseDrefGather',
|
|
316: 'OpImageSparseTexelsResident',
|
|
317: 'OpNoLine',
|
|
318: 'OpAtomicFlagTestAndSet',
|
|
319: 'OpAtomicFlagClear',
|
|
320: 'OpImageSparseRead',
|
|
321: 'OpSizeOf',
|
|
322: 'OpTypePipeStorage',
|
|
323: 'OpConstantPipeStorage',
|
|
324: 'OpCreatePipeFromPipeStorage',
|
|
325: 'OpGetKernelLocalSizeForSubgroupCount',
|
|
326: 'OpGetKernelMaxNumSubgroups',
|
|
327: 'OpTypeNamedBarrier',
|
|
328: 'OpNamedBarrierInitialize',
|
|
329: 'OpMemoryNamedBarrier',
|
|
330: 'OpModuleProcessed',
|
|
331: 'OpExecutionModeId',
|
|
332: 'OpDecorateId',
|
|
333: 'OpGroupNonUniformElect',
|
|
334: 'OpGroupNonUniformAll',
|
|
335: 'OpGroupNonUniformAny',
|
|
336: 'OpGroupNonUniformAllEqual',
|
|
337: 'OpGroupNonUniformBroadcast',
|
|
338: 'OpGroupNonUniformBroadcastFirst',
|
|
339: 'OpGroupNonUniformBallot',
|
|
340: 'OpGroupNonUniformInverseBallot',
|
|
341: 'OpGroupNonUniformBallotBitExtract',
|
|
342: 'OpGroupNonUniformBallotBitCount',
|
|
343: 'OpGroupNonUniformBallotFindLSB',
|
|
344: 'OpGroupNonUniformBallotFindMSB',
|
|
345: 'OpGroupNonUniformShuffle',
|
|
346: 'OpGroupNonUniformShuffleXor',
|
|
347: 'OpGroupNonUniformShuffleUp',
|
|
348: 'OpGroupNonUniformShuffleDown',
|
|
349: 'OpGroupNonUniformIAdd',
|
|
350: 'OpGroupNonUniformFAdd',
|
|
351: 'OpGroupNonUniformIMul',
|
|
352: 'OpGroupNonUniformFMul',
|
|
353: 'OpGroupNonUniformSMin',
|
|
354: 'OpGroupNonUniformUMin',
|
|
355: 'OpGroupNonUniformFMin',
|
|
356: 'OpGroupNonUniformSMax',
|
|
357: 'OpGroupNonUniformUMax',
|
|
358: 'OpGroupNonUniformFMax',
|
|
359: 'OpGroupNonUniformBitwiseAnd',
|
|
360: 'OpGroupNonUniformBitwiseOr',
|
|
361: 'OpGroupNonUniformBitwiseXor',
|
|
362: 'OpGroupNonUniformLogicalAnd',
|
|
363: 'OpGroupNonUniformLogicalOr',
|
|
364: 'OpGroupNonUniformLogicalXor',
|
|
365: 'OpGroupNonUniformQuadBroadcast',
|
|
366: 'OpGroupNonUniformQuadSwap',
|
|
400: 'OpCopyLogical',
|
|
401: 'OpPtrEqual',
|
|
402: 'OpPtrNotEqual',
|
|
403: 'OpPtrDiff',
|
|
4421: 'OpSubgroupBallotKHR',
|
|
4422: 'OpSubgroupFirstInvocationKHR',
|
|
4428: 'OpSubgroupAllKHR',
|
|
4429: 'OpSubgroupAnyKHR',
|
|
4430: 'OpSubgroupAllEqualKHR',
|
|
4432: 'OpSubgroupReadInvocationKHR',
|
|
5000: 'OpGroupIAddNonUniformAMD',
|
|
5001: 'OpGroupFAddNonUniformAMD',
|
|
5002: 'OpGroupFMinNonUniformAMD',
|
|
5003: 'OpGroupUMinNonUniformAMD',
|
|
5004: 'OpGroupSMinNonUniformAMD',
|
|
5005: 'OpGroupFMaxNonUniformAMD',
|
|
5006: 'OpGroupUMaxNonUniformAMD',
|
|
5007: 'OpGroupSMaxNonUniformAMD',
|
|
5011: 'OpFragmentMaskFetchAMD',
|
|
5012: 'OpFragmentFetchAMD',
|
|
5283: 'OpImageSampleFootprintNV',
|
|
5296: 'OpGroupNonUniformPartitionNV',
|
|
5299: 'OpWritePackedPrimitiveIndices4x8NV',
|
|
5334: 'OpReportIntersectionNV',
|
|
5335: 'OpIgnoreIntersectionNV',
|
|
5336: 'OpTerminateRayNV',
|
|
5337: 'OpTraceNV',
|
|
5341: 'OpTypeAccelerationStructureNV',
|
|
5344: 'OpExecuteCallableNV',
|
|
5358: 'OpTypeCooperativeMatrixNV',
|
|
5359: 'OpCooperativeMatrixLoadNV',
|
|
5360: 'OpCooperativeMatrixStoreNV',
|
|
5361: 'OpCooperativeMatrixMulAddNV',
|
|
5362: 'OpCooperativeMatrixLengthNV',
|
|
5364: 'OpBeginInvocationInterlockEXT',
|
|
5365: 'OpEndInvocationInterlockEXT',
|
|
5380: 'OpDemoteToHelperInvocationEXT',
|
|
5381: 'OpIsHelperInvocationEXT',
|
|
5571: 'OpSubgroupShuffleINTEL',
|
|
5572: 'OpSubgroupShuffleDownINTEL',
|
|
5573: 'OpSubgroupShuffleUpINTEL',
|
|
5574: 'OpSubgroupShuffleXorINTEL',
|
|
5575: 'OpSubgroupBlockReadINTEL',
|
|
5576: 'OpSubgroupBlockWriteINTEL',
|
|
5577: 'OpSubgroupImageBlockReadINTEL',
|
|
5578: 'OpSubgroupImageBlockWriteINTEL',
|
|
5580: 'OpSubgroupImageMediaBlockReadINTEL',
|
|
5581: 'OpSubgroupImageMediaBlockWriteINTEL',
|
|
5585: 'OpUCountLeadingZerosINTEL',
|
|
5586: 'OpUCountTrailingZerosINTEL',
|
|
5587: 'OpAbsISubINTEL',
|
|
5588: 'OpAbsUSubINTEL',
|
|
5589: 'OpIAddSatINTEL',
|
|
5590: 'OpUAddSatINTEL',
|
|
5591: 'OpIAverageINTEL',
|
|
5592: 'OpUAverageINTEL',
|
|
5593: 'OpIAverageRoundedINTEL',
|
|
5594: 'OpUAverageRoundedINTEL',
|
|
5595: 'OpISubSatINTEL',
|
|
5596: 'OpUSubSatINTEL',
|
|
5597: 'OpIMul32x16INTEL',
|
|
5598: 'OpUMul32x16INTEL',
|
|
5632: 'OpDecorateString',
|
|
5632: 'OpDecorateStringGOOGLE',
|
|
5633: 'OpMemberDecorateString',
|
|
5633: 'OpMemberDecorateStringGOOGLE',
|
|
5699: 'OpVmeImageINTEL',
|
|
5700: 'OpTypeVmeImageINTEL',
|
|
5701: 'OpTypeAvcImePayloadINTEL',
|
|
5702: 'OpTypeAvcRefPayloadINTEL',
|
|
5703: 'OpTypeAvcSicPayloadINTEL',
|
|
5704: 'OpTypeAvcMcePayloadINTEL',
|
|
5705: 'OpTypeAvcMceResultINTEL',
|
|
5706: 'OpTypeAvcImeResultINTEL',
|
|
5707: 'OpTypeAvcImeResultSingleReferenceStreamoutINTEL',
|
|
5708: 'OpTypeAvcImeResultDualReferenceStreamoutINTEL',
|
|
5709: 'OpTypeAvcImeSingleReferenceStreaminINTEL',
|
|
5710: 'OpTypeAvcImeDualReferenceStreaminINTEL',
|
|
5711: 'OpTypeAvcRefResultINTEL',
|
|
5712: 'OpTypeAvcSicResultINTEL',
|
|
5713: 'OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL',
|
|
5714: 'OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL',
|
|
5715: 'OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL',
|
|
5716: 'OpSubgroupAvcMceSetInterShapePenaltyINTEL',
|
|
5717: 'OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL',
|
|
5718: 'OpSubgroupAvcMceSetInterDirectionPenaltyINTEL',
|
|
5719: 'OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL',
|
|
5720: 'OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL',
|
|
5721: 'OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL',
|
|
5722: 'OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL',
|
|
5723: 'OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL',
|
|
5724: 'OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL',
|
|
5725: 'OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL',
|
|
5726: 'OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL',
|
|
5727: 'OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL',
|
|
5728: 'OpSubgroupAvcMceSetAcOnlyHaarINTEL',
|
|
5729: 'OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL',
|
|
5730: 'OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL',
|
|
5731: 'OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL',
|
|
5732: 'OpSubgroupAvcMceConvertToImePayloadINTEL',
|
|
5733: 'OpSubgroupAvcMceConvertToImeResultINTEL',
|
|
5734: 'OpSubgroupAvcMceConvertToRefPayloadINTEL',
|
|
5735: 'OpSubgroupAvcMceConvertToRefResultINTEL',
|
|
5736: 'OpSubgroupAvcMceConvertToSicPayloadINTEL',
|
|
5737: 'OpSubgroupAvcMceConvertToSicResultINTEL',
|
|
5738: 'OpSubgroupAvcMceGetMotionVectorsINTEL',
|
|
5739: 'OpSubgroupAvcMceGetInterDistortionsINTEL',
|
|
5740: 'OpSubgroupAvcMceGetBestInterDistortionsINTEL',
|
|
5741: 'OpSubgroupAvcMceGetInterMajorShapeINTEL',
|
|
5742: 'OpSubgroupAvcMceGetInterMinorShapeINTEL',
|
|
5743: 'OpSubgroupAvcMceGetInterDirectionsINTEL',
|
|
5744: 'OpSubgroupAvcMceGetInterMotionVectorCountINTEL',
|
|
5745: 'OpSubgroupAvcMceGetInterReferenceIdsINTEL',
|
|
5746: 'OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL',
|
|
5747: 'OpSubgroupAvcImeInitializeINTEL',
|
|
5748: 'OpSubgroupAvcImeSetSingleReferenceINTEL',
|
|
5749: 'OpSubgroupAvcImeSetDualReferenceINTEL',
|
|
5750: 'OpSubgroupAvcImeRefWindowSizeINTEL',
|
|
5751: 'OpSubgroupAvcImeAdjustRefOffsetINTEL',
|
|
5752: 'OpSubgroupAvcImeConvertToMcePayloadINTEL',
|
|
5753: 'OpSubgroupAvcImeSetMaxMotionVectorCountINTEL',
|
|
5754: 'OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL',
|
|
5755: 'OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL',
|
|
5756: 'OpSubgroupAvcImeSetWeightedSadINTEL',
|
|
5757: 'OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL',
|
|
5758: 'OpSubgroupAvcImeEvaluateWithDualReferenceINTEL',
|
|
5759: 'OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL',
|
|
5760: 'OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL',
|
|
5761: 'OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL',
|
|
5762: 'OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL',
|
|
5763: 'OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL',
|
|
5764: 'OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL',
|
|
5765: 'OpSubgroupAvcImeConvertToMceResultINTEL',
|
|
5766: 'OpSubgroupAvcImeGetSingleReferenceStreaminINTEL',
|
|
5767: 'OpSubgroupAvcImeGetDualReferenceStreaminINTEL',
|
|
5768: 'OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL',
|
|
5769: 'OpSubgroupAvcImeStripDualReferenceStreamoutINTEL',
|
|
5770: 'OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL',
|
|
5771: 'OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL',
|
|
5772: 'OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL',
|
|
5773: 'OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL',
|
|
5774: 'OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL',
|
|
5775: 'OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL',
|
|
5776: 'OpSubgroupAvcImeGetBorderReachedINTEL',
|
|
5777: 'OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL',
|
|
5778: 'OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL',
|
|
5779: 'OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL',
|
|
5780: 'OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL',
|
|
5781: 'OpSubgroupAvcFmeInitializeINTEL',
|
|
5782: 'OpSubgroupAvcBmeInitializeINTEL',
|
|
5783: 'OpSubgroupAvcRefConvertToMcePayloadINTEL',
|
|
5784: 'OpSubgroupAvcRefSetBidirectionalMixDisableINTEL',
|
|
5785: 'OpSubgroupAvcRefSetBilinearFilterEnableINTEL',
|
|
5786: 'OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL',
|
|
5787: 'OpSubgroupAvcRefEvaluateWithDualReferenceINTEL',
|
|
5788: 'OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL',
|
|
5789: 'OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL',
|
|
5790: 'OpSubgroupAvcRefConvertToMceResultINTEL',
|
|
5791: 'OpSubgroupAvcSicInitializeINTEL',
|
|
5792: 'OpSubgroupAvcSicConfigureSkcINTEL',
|
|
5793: 'OpSubgroupAvcSicConfigureIpeLumaINTEL',
|
|
5794: 'OpSubgroupAvcSicConfigureIpeLumaChromaINTEL',
|
|
5795: 'OpSubgroupAvcSicGetMotionVectorMaskINTEL',
|
|
5796: 'OpSubgroupAvcSicConvertToMcePayloadINTEL',
|
|
5797: 'OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL',
|
|
5798: 'OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL',
|
|
5799: 'OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL',
|
|
5800: 'OpSubgroupAvcSicSetBilinearFilterEnableINTEL',
|
|
5801: 'OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL',
|
|
5802: 'OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL',
|
|
5803: 'OpSubgroupAvcSicEvaluateIpeINTEL',
|
|
5804: 'OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL',
|
|
5805: 'OpSubgroupAvcSicEvaluateWithDualReferenceINTEL',
|
|
5806: 'OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL',
|
|
5807: 'OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL',
|
|
5808: 'OpSubgroupAvcSicConvertToMceResultINTEL',
|
|
5809: 'OpSubgroupAvcSicGetIpeLumaShapeINTEL',
|
|
5810: 'OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL',
|
|
5811: 'OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL',
|
|
5812: 'OpSubgroupAvcSicGetPackedIpeLumaModesINTEL',
|
|
5813: 'OpSubgroupAvcSicGetIpeChromaModeINTEL',
|
|
5814: 'OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL',
|
|
5815: 'OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL',
|
|
5816: 'OpSubgroupAvcSicGetInterRawSadsINTEL'
|
|
}
|
|
|
|
def byte2int(byte):
|
|
long_tuple=struct.unpack('L',byte)
|
|
long = long_tuple[0]
|
|
return long
|
|
|
|
def ProcessHeader(src):
|
|
word = byte2int(src.read(4))
|
|
print('Magic: 0x{:08X}'.format(word))
|
|
word = byte2int(src.read(4))
|
|
print('Version: 0x{:08X}'.format(word))
|
|
word = byte2int(src.read(4))
|
|
print('Generator: 0x{:08X}'.format(word))
|
|
word = byte2int(src.read(4))
|
|
print('Bound: 0x{:08X}'.format(word))
|
|
word = byte2int(src.read(4))
|
|
print('Schema: 0x{:08X}'.format(word))
|
|
|
|
def ProcessInstructions(src):
|
|
|
|
inst_count = 0
|
|
while True:
|
|
offset = src.tell()
|
|
|
|
word = src.read(4)
|
|
if not word:
|
|
break
|
|
word = byte2int(word)
|
|
|
|
word_count = (word & 0xFFFF0000) >> 16
|
|
opcode = word & 0x0000FFFF
|
|
|
|
|
|
print('offset: 0x{:08X}'.format(offset))
|
|
print('opname: {}'.format(OPCODE_TABLE[opcode]))
|
|
print('opcode: 0x{:08X}'.format(opcode))
|
|
print('length: 0x{:08X}'.format(word_count))
|
|
|
|
inst_count += 1
|
|
skip_offset = 0
|
|
if word_count >= 4:
|
|
src.seek(4, 1)
|
|
word = src.read(4)
|
|
if not word:
|
|
break
|
|
|
|
result_id = byte2int(word) # this may not be true for some opcodes, just for reference
|
|
print('result id: {}'.format(result_id))
|
|
|
|
skip_offset = (word_count - 3) * 4
|
|
else:
|
|
skip_offset = (word_count - 1) * 4
|
|
|
|
src.seek(skip_offset, 1) # skip operands
|
|
|
|
print('\n====\n')
|
|
|
|
print('Instruction count: {}'.format(inst_count))
|
|
|
|
|
|
|
|
|
|
def Main():
|
|
spv_file = open(sys.argv[1], 'rb')
|
|
ProcessHeader(spv_file)
|
|
print('===================================')
|
|
ProcessInstructions(spv_file)
|
|
|
|
if __name__ == '__main__':
|
|
Main() |