dxil-reader 0.7.0

DXIL reader: decodes Direct3D Shader Model 6 programs (LLVM bitcode in a DXBC container) to modules, with resource, signature and RDAT reflection records
Documentation
// @generated by `cargo xtask dxil-ops` from DirectXShaderCompiler v1.9.2609; do not edit.
// input lib/DXIL/DxilOperations.cpp blake3 15ad2cb09ebea3acd65546bbea2e92b8fd3716b0c241c9178b06ff4ae8728a6e
// input include/dxc/DXIL/DxilInstructions.h blake3 91176ea6844ae34a3b463347ae6c9c217d70a6cbc04d248a7c24baa7c828336d
// input include/dxc/DXIL/DxilConstants.h blake3 3d58c74e51dbfee6845b4c97ee28c976deeff7b976885a5bfeb167cbf0414de4
// output blake3 415bed4a12bc4dabc0d9f44bbe37bd498ebdef124afe07e3a7343bc5d3bb6ee1
//! Each table lists, by operation index, the name and the operands (after the opcode) dxc's listing annotates a
//! call with.

/// The `CoreOps` table (table id 0x0, the opcode's upper 16 bits).
pub(crate) const CORE_OPS: [(&str, &str); 312] = [
    ("TempRegLoad", "(index)"),
    ("TempRegStore", "(index,value)"),
    ("MinPrecXRegLoad", "(regIndex,index,component)"),
    ("MinPrecXRegStore", "(regIndex,index,component,value)"),
    ("LoadInput", "(inputSigId,rowIndex,colIndex,gsVertexAxis)"),
    ("StoreOutput", "(outputSigId,rowIndex,colIndex,value)"),
    ("FAbs", "(value)"),
    ("Saturate", "(value)"),
    ("IsNaN", "(value)"),
    ("IsInf", "(value)"),
    ("IsFinite", "(value)"),
    ("IsNormal", "(value)"),
    ("Cos", "(value)"),
    ("Sin", "(value)"),
    ("Tan", "(value)"),
    ("Acos", "(value)"),
    ("Asin", "(value)"),
    ("Atan", "(value)"),
    ("Hcos", "(value)"),
    ("Hsin", "(value)"),
    ("Htan", "(value)"),
    ("Exp", "(value)"),
    ("Frc", "(value)"),
    ("Log", "(value)"),
    ("Sqrt", "(value)"),
    ("Rsqrt", "(value)"),
    ("Round_ne", "(value)"),
    ("Round_ni", "(value)"),
    ("Round_pi", "(value)"),
    ("Round_z", "(value)"),
    ("Bfrev", "(value)"),
    ("Countbits", "(value)"),
    ("FirstbitLo", "(value)"),
    ("FirstbitHi", "(value)"),
    ("FirstbitSHi", "(value)"),
    ("FMax", "(a,b)"),
    ("FMin", "(a,b)"),
    ("IMax", "(a,b)"),
    ("IMin", "(a,b)"),
    ("UMax", "(a,b)"),
    ("UMin", "(a,b)"),
    ("IMul", "(a,b)"),
    ("UMul", "(a,b)"),
    ("UDiv", "(a,b)"),
    ("UAddc", "(a,b)"),
    ("USubb", "(a,b)"),
    ("FMad", "(a,b,c)"),
    ("Fma", "(a,b,c)"),
    ("IMad", "(a,b,c)"),
    ("UMad", "(a,b,c)"),
    ("Msad", "(a,b,c)"),
    ("Ibfe", "(a,b,c)"),
    ("Ubfe", "(a,b,c)"),
    ("Bfi", "(width,offset,value,replacedValue)"),
    ("Dot2", "(ax,ay,bx,by)"),
    ("Dot3", "(ax,ay,az,bx,by,bz)"),
    ("Dot4", "(ax,ay,az,aw,bx,by,bz,bw)"),
    ("CreateHandle", "(resourceClass,rangeId,index,nonUniformIndex)"),
    ("CBufferLoad", "(handle,byteOffset,alignment)"),
    ("CBufferLoadLegacy", "(handle,regIndex)"),
    ("Sample", "(srv,sampler,coord0,coord1,coord2,coord3,offset0,offset1,offset2,clamp)"),
    ("SampleBias", "(srv,sampler,coord0,coord1,coord2,coord3,offset0,offset1,offset2,bias,clamp)"),
    ("SampleLevel", "(srv,sampler,coord0,coord1,coord2,coord3,offset0,offset1,offset2,LOD)"),
    ("SampleGrad", "(srv,sampler,coord0,coord1,coord2,coord3,offset0,offset1,offset2,ddx0,ddx1,ddx2,ddy0,ddy1,ddy2,clamp)"),
    ("SampleCmp", "(srv,sampler,coord0,coord1,coord2,coord3,offset0,offset1,offset2,compareValue,clamp)"),
    ("SampleCmpLevelZero", "(srv,sampler,coord0,coord1,coord2,coord3,offset0,offset1,offset2,compareValue)"),
    ("TextureLoad", "(srv,mipLevelOrSampleCount,coord0,coord1,coord2,offset0,offset1,offset2)"),
    ("TextureStore", "(srv,coord0,coord1,coord2,value0,value1,value2,value3,mask)"),
    ("BufferLoad", "(srv,index,wot)"),
    ("BufferStore", "(uav,coord0,coord1,value0,value1,value2,value3,mask)"),
    ("BufferUpdateCounter", "(uav,inc)"),
    ("CheckAccessFullyMapped", "(status)"),
    ("GetDimensions", "(handle,mipLevel)"),
    ("TextureGather", "(srv,sampler,coord0,coord1,coord2,coord3,offset0,offset1,channel)"),
    ("TextureGatherCmp", "(srv,sampler,coord0,coord1,coord2,coord3,offset0,offset1,channel,compareValue)"),
    ("Texture2DMSGetSamplePosition", "(srv,index)"),
    ("RenderTargetGetSamplePosition", "(index)"),
    ("RenderTargetGetSampleCount", "()"),
    ("AtomicBinOp", "(handle,atomicOp,offset0,offset1,offset2,newValue)"),
    ("AtomicCompareExchange", "(handle,offset0,offset1,offset2,compareValue,newValue)"),
    ("Barrier", "(barrierMode)"),
    ("CalculateLOD", "(handle,sampler,coord0,coord1,coord2,clamped)"),
    ("Discard", "(condition)"),
    ("DerivCoarseX", "(value)"),
    ("DerivCoarseY", "(value)"),
    ("DerivFineX", "(value)"),
    ("DerivFineY", "(value)"),
    ("EvalSnapped", "(inputSigId,inputRowIndex,inputColIndex,offsetX,offsetY)"),
    ("EvalSampleIndex", "(inputSigId,inputRowIndex,inputColIndex,sampleIndex)"),
    ("EvalCentroid", "(inputSigId,inputRowIndex,inputColIndex)"),
    ("SampleIndex", "()"),
    ("Coverage", "()"),
    ("InnerCoverage", "()"),
    ("ThreadId", "(component)"),
    ("GroupId", "(component)"),
    ("ThreadIdInGroup", "(component)"),
    ("FlattenedThreadIdInGroup", "()"),
    ("EmitStream", "(streamId)"),
    ("CutStream", "(streamId)"),
    ("EmitThenCutStream", "(streamId)"),
    ("GSInstanceID", "()"),
    ("MakeDouble", "(lo,hi)"),
    ("SplitDouble", "(value)"),
    ("LoadOutputControlPoint", "(inputSigId,row,col,index)"),
    ("LoadPatchConstant", "(inputSigId,row,col)"),
    ("DomainLocation", "(component)"),
    ("StorePatchConstant", "(outputSigID,row,col,value)"),
    ("OutputControlPointID", "()"),
    ("PrimitiveID", "()"),
    ("CycleCounterLegacy", "()"),
    ("WaveIsFirstLane", "()"),
    ("WaveGetLaneIndex", "()"),
    ("WaveGetLaneCount", "()"),
    ("WaveAnyTrue", "(cond)"),
    ("WaveAllTrue", "(cond)"),
    ("WaveActiveAllEqual", "(value)"),
    ("WaveActiveBallot", "(cond)"),
    ("WaveReadLaneAt", "(value,lane)"),
    ("WaveReadLaneFirst", "(value)"),
    ("WaveActiveOp", "(value,op,sop)"),
    ("WaveActiveBit", "(value,op)"),
    ("WavePrefixOp", "(value,op,sop)"),
    ("QuadReadLaneAt", "(value,quadLane)"),
    ("QuadOp", "(value,op)"),
    ("BitcastI16toF16", "(value)"),
    ("BitcastF16toI16", "(value)"),
    ("BitcastI32toF32", "(value)"),
    ("BitcastF32toI32", "(value)"),
    ("BitcastI64toF64", "(value)"),
    ("BitcastF64toI64", "(value)"),
    ("LegacyF32ToF16", "(value)"),
    ("LegacyF16ToF32", "(value)"),
    ("LegacyDoubleToFloat", "(value)"),
    ("LegacyDoubleToSInt32", "(value)"),
    ("LegacyDoubleToUInt32", "(value)"),
    ("WaveAllBitCount", "(value)"),
    ("WavePrefixBitCount", "(value)"),
    ("AttributeAtVertex", "(inputSigId,inputRowIndex,inputColIndex,VertexID)"),
    ("ViewID", "()"),
    ("RawBufferLoad", "(srv,index,elementOffset,mask,alignment)"),
    ("RawBufferStore", "(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)"),
    ("InstanceID", "()"),
    ("InstanceIndex", "()"),
    ("HitKind", "()"),
    ("RayFlags", "()"),
    ("DispatchRaysIndex", "(col)"),
    ("DispatchRaysDimensions", "(col)"),
    ("WorldRayOrigin", "(col)"),
    ("WorldRayDirection", "(col)"),
    ("ObjectRayOrigin", "(col)"),
    ("ObjectRayDirection", "(col)"),
    ("ObjectToWorld", "(row,col)"),
    ("WorldToObject", "(row,col)"),
    ("RayTMin", "()"),
    ("RayTCurrent", "()"),
    ("IgnoreHit", "()"),
    ("AcceptHitAndEndSearch", "()"),
    ("TraceRay", "(AccelerationStructure,RayFlags,InstanceInclusionMask,RayContributionToHitGroupIndex,MultiplierForGeometryContributionToShaderIndex,MissShaderIndex,Origin_X,Origin_Y,Origin_Z,TMin,Direction_X,Direction_Y,Direction_Z,TMax,payload)"),
    ("ReportHit", "(THit,HitKind,Attributes)"),
    ("CallShader", "(ShaderIndex,Parameter)"),
    ("CreateHandleForLib", "(Resource)"),
    ("PrimitiveIndex", "()"),
    ("Dot2AddHalf", "(acc,ax,ay,bx,by)"),
    ("Dot4AddI8Packed", "(acc,a,b)"),
    ("Dot4AddU8Packed", "(acc,a,b)"),
    ("WaveMatch", "(value)"),
    ("WaveMultiPrefixOp", "(value,mask0,mask1,mask2,mask3,op,sop)"),
    ("WaveMultiPrefixBitCount", "(value,mask0,mask1,mask2,mask3)"),
    ("SetMeshOutputCounts", "(numVertices,numPrimitives)"),
    ("EmitIndices", "(PrimitiveIndex,VertexIndex0,VertexIndex1,VertexIndex2)"),
    ("GetMeshPayload", "()"),
    ("StoreVertexOutput", "(outputSigId,rowIndex,colIndex,value,vertexIndex)"),
    ("StorePrimitiveOutput", "(outputSigId,rowIndex,colIndex,value,primitiveIndex)"),
    ("DispatchMesh", "(threadGroupCountX,threadGroupCountY,threadGroupCountZ,payload)"),
    ("WriteSamplerFeedback", "(feedbackTex,sampledTex,sampler,c0,c1,c2,c3,clamp)"),
    ("WriteSamplerFeedbackBias", "(feedbackTex,sampledTex,sampler,c0,c1,c2,c3,bias,clamp)"),
    ("WriteSamplerFeedbackLevel", "(feedbackTex,sampledTex,sampler,c0,c1,c2,c3,lod)"),
    ("WriteSamplerFeedbackGrad", "(feedbackTex,sampledTex,sampler,c0,c1,c2,c3,ddx0,ddx1,ddx2,ddy0,ddy1,ddy2,clamp)"),
    ("AllocateRayQuery", "(constRayFlags)"),
    ("RayQuery_TraceRayInline", "(rayQueryHandle,accelerationStructure,rayFlags,instanceInclusionMask,origin_X,origin_Y,origin_Z,tMin,direction_X,direction_Y,direction_Z,tMax)"),
    ("RayQuery_Proceed", "(rayQueryHandle)"),
    ("RayQuery_Abort", "(rayQueryHandle)"),
    ("RayQuery_CommitNonOpaqueTriangleHit", "(rayQueryHandle)"),
    ("RayQuery_CommitProceduralPrimitiveHit", "(rayQueryHandle,t)"),
    ("RayQuery_CommittedStatus", "(rayQueryHandle)"),
    ("RayQuery_CandidateType", "(rayQueryHandle)"),
    ("RayQuery_CandidateObjectToWorld3x4", "(rayQueryHandle,row,col)"),
    ("RayQuery_CandidateWorldToObject3x4", "(rayQueryHandle,row,col)"),
    ("RayQuery_CommittedObjectToWorld3x4", "(rayQueryHandle,row,col)"),
    ("RayQuery_CommittedWorldToObject3x4", "(rayQueryHandle,row,col)"),
    ("RayQuery_CandidateProceduralPrimitiveNonOpaque", "(rayQueryHandle)"),
    ("RayQuery_CandidateTriangleFrontFace", "(rayQueryHandle)"),
    ("RayQuery_CommittedTriangleFrontFace", "(rayQueryHandle)"),
    ("RayQuery_CandidateTriangleBarycentrics", "(rayQueryHandle,component)"),
    ("RayQuery_CommittedTriangleBarycentrics", "(rayQueryHandle,component)"),
    ("RayQuery_RayFlags", "(rayQueryHandle)"),
    ("RayQuery_WorldRayOrigin", "(rayQueryHandle,component)"),
    ("RayQuery_WorldRayDirection", "(rayQueryHandle,component)"),
    ("RayQuery_RayTMin", "(rayQueryHandle)"),
    ("RayQuery_CandidateTriangleRayT", "(rayQueryHandle)"),
    ("RayQuery_CommittedRayT", "(rayQueryHandle)"),
    ("RayQuery_CandidateInstanceIndex", "(rayQueryHandle)"),
    ("RayQuery_CandidateInstanceID", "(rayQueryHandle)"),
    ("RayQuery_CandidateGeometryIndex", "(rayQueryHandle)"),
    ("RayQuery_CandidatePrimitiveIndex", "(rayQueryHandle)"),
    ("RayQuery_CandidateObjectRayOrigin", "(rayQueryHandle,component)"),
    ("RayQuery_CandidateObjectRayDirection", "(rayQueryHandle,component)"),
    ("RayQuery_CommittedInstanceIndex", "(rayQueryHandle)"),
    ("RayQuery_CommittedInstanceID", "(rayQueryHandle)"),
    ("RayQuery_CommittedGeometryIndex", "(rayQueryHandle)"),
    ("RayQuery_CommittedPrimitiveIndex", "(rayQueryHandle)"),
    ("RayQuery_CommittedObjectRayOrigin", "(rayQueryHandle,component)"),
    ("RayQuery_CommittedObjectRayDirection", "(rayQueryHandle,component)"),
    ("GeometryIndex", "()"),
    ("RayQuery_CandidateInstanceContributionToHitGroupIndex", "(rayQueryHandle)"),
    ("RayQuery_CommittedInstanceContributionToHitGroupIndex", "(rayQueryHandle)"),
    ("AnnotateHandle", "(res,props)"),
    ("CreateHandleFromBinding", "(bind,index,nonUniformIndex)"),
    ("CreateHandleFromHeap", "(index,samplerHeap,nonUniformIndex)"),
    ("Unpack4x8", "(unpackMode,pk)"),
    ("Pack4x8", "(packMode,x,y,z,w)"),
    ("IsHelperLane", "()"),
    ("QuadVote", "(cond,op)"),
    ("TextureGatherRaw", "(srv,sampler,coord0,coord1,coord2,coord3,offset0,offset1)"),
    ("SampleCmpLevel", "(srv,sampler,coord0,coord1,coord2,coord3,offset0,offset1,offset2,compareValue,lod)"),
    ("TextureStoreSample", "(srv,coord0,coord1,coord2,value0,value1,value2,value3,mask,sampleIdx)"),
    ("Reserved0", "()"),
    ("Reserved1", "()"),
    ("Reserved2", "()"),
    ("Reserved3", "()"),
    ("Reserved4", "()"),
    ("Reserved5", "()"),
    ("Reserved6", "()"),
    ("Reserved7", "()"),
    ("Reserved8", "()"),
    ("Reserved9", "()"),
    ("Reserved10", "()"),
    ("Reserved11", "()"),
    ("AllocateNodeOutputRecords", "(output,numRecords,perThread)"),
    ("GetNodeRecordPtr", "(recordhandle,arrayIndex)"),
    ("IncrementOutputCount", "(output,count,perThread)"),
    ("OutputComplete", "(output)"),
    ("GetInputRecordCount", "(input)"),
    ("FinishedCrossGroupSharing", "(input)"),
    ("BarrierByMemoryType", "(MemoryTypeFlags,SemanticFlags)"),
    ("BarrierByMemoryHandle", "(object,SemanticFlags)"),
    ("BarrierByNodeRecordHandle", "(object,SemanticFlags)"),
    ("CreateNodeOutputHandle", "(MetadataIdx)"),
    ("IndexNodeHandle", "(NodeOutputHandle,ArrayIndex)"),
    ("AnnotateNodeHandle", "(node,props)"),
    ("CreateNodeInputRecordHandle", "(MetadataIdx)"),
    ("AnnotateNodeRecordHandle", "(noderecord,props)"),
    ("NodeOutputIsValid", "(output)"),
    ("GetRemainingRecursionLevels", "()"),
    ("SampleCmpGrad", "(srv,sampler,coord0,coord1,coord2,coord3,offset0,offset1,offset2,compareValue,ddx0,ddx1,ddx2,ddy0,ddy1,ddy2,clamp)"),
    ("SampleCmpBias", "(srv,sampler,coord0,coord1,coord2,coord3,offset0,offset1,offset2,compareValue,bias,clamp)"),
    ("StartVertexLocation", "()"),
    ("StartInstanceLocation", "()"),
    ("AllocateRayQuery2", "(constRayFlags,constRayQueryFlags)"),
    ("ReservedA0", "()"),
    ("ReservedA1", "()"),
    ("ReservedA2", "()"),
    ("HitObject_TraceRay", "(accelerationStructure,rayFlags,instanceInclusionMask,rayContributionToHitGroupIndex,multiplierForGeometryContributionToHitGroupIndex,missShaderIndex,Origin_X,Origin_Y,Origin_Z,TMin,Direction_X,Direction_Y,Direction_Z,TMax,payload)"),
    ("HitObject_FromRayQuery", "(rayQueryHandle)"),
    ("HitObject_FromRayQueryWithAttrs", "(rayQueryHandle,HitKind,CommittedAttribs)"),
    ("HitObject_MakeMiss", "(RayFlags,MissShaderIndex,Origin_X,Origin_Y,Origin_Z,TMin,Direction_X,Direction_Y,Direction_Z,TMax)"),
    ("HitObject_MakeNop", "()"),
    ("HitObject_Invoke", "(hitObject,payload)"),
    ("MaybeReorderThread", "(hitObject,coherenceHint,numCoherenceHintBitsFromLSB)"),
    ("HitObject_IsMiss", "(hitObject)"),
    ("HitObject_IsHit", "(hitObject)"),
    ("HitObject_IsNop", "(hitObject)"),
    ("HitObject_RayFlags", "(hitObject)"),
    ("HitObject_RayTMin", "(hitObject)"),
    ("HitObject_RayTCurrent", "(hitObject)"),
    ("HitObject_WorldRayOrigin", "(hitObject,component)"),
    ("HitObject_WorldRayDirection", "(hitObject,component)"),
    ("HitObject_ObjectRayOrigin", "(hitObject,component)"),
    ("HitObject_ObjectRayDirection", "(hitObject,component)"),
    ("HitObject_ObjectToWorld3x4", "(hitObject,row,col)"),
    ("HitObject_WorldToObject3x4", "(hitObject,row,col)"),
    ("HitObject_GeometryIndex", "(hitObject)"),
    ("HitObject_InstanceIndex", "(hitObject)"),
    ("HitObject_InstanceID", "(hitObject)"),
    ("HitObject_PrimitiveIndex", "(hitObject)"),
    ("HitObject_HitKind", "(hitObject)"),
    ("HitObject_ShaderTableIndex", "(hitObject)"),
    ("HitObject_SetShaderTableIndex", "(hitObject,shaderTableIndex)"),
    ("HitObject_LoadLocalRootTableConstant", "(hitObject,offset)"),
    ("HitObject_Attributes", "(hitObject,attributes)"),
    ("ReservedB28", "()"),
    ("ReservedB29", "()"),
    ("ReservedB30", "()"),
    ("ReservedC0", "()"),
    ("ReservedC1", "()"),
    ("ReservedC2", "()"),
    ("ReservedC3", "()"),
    ("ReservedC4", "()"),
    ("ReservedC5", "()"),
    ("ReservedC6", "()"),
    ("ReservedC7", "()"),
    ("ReservedC8", "()"),
    ("ReservedC9", "()"),
    ("RawBufferVectorLoad", "(buf,index,elementOffset,alignment)"),
    ("RawBufferVectorStore", "(uav,index,elementOffset,value0,alignment)"),
    ("ReservedD0", "()"),
    ("ReservedD1", "()"),
    ("ReservedD2", "()"),
    ("ReservedD3", "()"),
    ("VectorReduceAnd", "(a)"),
    ("VectorReduceOr", "(a)"),
    ("FDot", "(a,b)"),
];

/// The `ExperimentalOps` table (table id 0x8000, the opcode's upper 16 bits).
pub(crate) const EXPERIMENTAL_OPS: [(&str, &str); 35] = [
    ("ExperimentalNop", "()"),
    ("GetGroupWaveIndex", "()"),
    ("GetGroupWaveCount", "()"),
    ("ClusterID", "()"),
    ("RayQuery_CandidateClusterID", "(rayQueryHandle)"),
    ("RayQuery_CommittedClusterID", "(rayQueryHandle)"),
    ("HitObject_ClusterID", "(hitObject)"),
    ("TriangleObjectPosition", "()"),
    ("RayQuery_CandidateTriangleObjectPosition", "(rayQueryHandle)"),
    ("RayQuery_CommittedTriangleObjectPosition", "(rayQueryHandle)"),
    ("HitObject_TriangleObjectPosition", "(hitObject)"),
    ("LinAlgMatrixMultiplyAccumulate", "(matrixA,matrixB,matrixC)"),
    ("LinAlgFillMatrix", "(value)"),
    ("LinAlgCopyConvertMatrix", "(srcMatrix,transpose)"),
    ("LinAlgMatrixLoadFromDescriptor", "(handle,offset,stride,layout,align)"),
    ("LinAlgMatrixLoadFromMemory", "(memory,offset,stride,layout)"),
    ("LinAlgMatrixLength", "(matrix)"),
    ("LinAlgMatrixGetCoordinate", "(matrix,threadLocalIndex)"),
    ("LinAlgMatrixGetElement", "(matrix,threadLocalIndex)"),
    ("LinAlgMatrixSetElement", "(matrix,threadLocalIndex,value)"),
    ("LinAlgMatrixStoreToDescriptor", "(matrix,handle,offset,stride,layout,align)"),
    ("LinAlgMatrixStoreToMemory", "(matrix,memory,offset,stride,layout)"),
    ("LinAlgMatrixQueryAccumulatorLayout", "()"),
    ("LinAlgMatrixMultiply", "(matrixA,matrixB)"),
    ("LinAlgMatrixAccumulate", "(matrixLHS,matrixRHS)"),
    ("LinAlgMatVecMul", "(matrix,isOutputSigned,inputVector,interpretation)"),
    ("LinAlgMatVecMulAdd", "(matrix,isOutputSigned,inputVector,inputInterpretation,biasVector)"),
    ("LinAlgMatrixAccumulateToDescriptor", "(matrix,handle,offset,stride,layout,align)"),
    ("LinAlgMatrixAccumulateToMemory", "(matrix,memory,offset,stride,layout)"),
    ("LinAlgMatrixOuterProduct", "(vectorA,vectorB)"),
    ("LinAlgConvert", "(inputVector,inputInterpretation,outputInterpretation)"),
    ("LinAlgVectorAccumulateToDescriptor", "(handle,offset,align,vector)"),
    ("ReservedE0", "()"),
    ("DebugBreak", "()"),
    ("IsDebuggingEnabled", "()"),
];

/// The name and operands of an encoded opcode (the table id in its upper 16 bits, the index in the lower), where
/// dxc's tables have it.
pub(crate) fn operation(opcode: u32) -> Option<(&'static str, &'static str)> {
    let index = usize::try_from(opcode & 0xFFFF).ok()?;
    match opcode >> 16 {
        0x0 => CORE_OPS.get(index).copied(),
        0x8000 => EXPERIMENTAL_OPS.get(index).copied(),
        _ => None,
    }
}