mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-07-29 02:41:08 +00:00
Add explicit handling for all remaining unimplemented opcodes
* Some will have to be supported because they're not optional, some more are planned but are currently behind unsupported capabilities, and some are extensions that will probably never be implemented.
This commit is contained in:
@@ -2420,6 +2420,356 @@ void ThreadState::StepNext(ShaderDebugState *state, const rdcarray<ThreadState>
|
||||
break;
|
||||
}
|
||||
|
||||
// TODO image lod query (from implicit lod)
|
||||
case Op::ImageQueryLod:
|
||||
{
|
||||
RDCERR("Image lod query not yet implemented.");
|
||||
|
||||
ShaderVariable var("", 0U, 0U, 0U, 0U);
|
||||
var.columns = 1;
|
||||
|
||||
SetDst(opdata.result, var);
|
||||
break;
|
||||
}
|
||||
|
||||
// TODO image load/store
|
||||
case Op::ImageRead:
|
||||
case Op::ImageWrite:
|
||||
{
|
||||
RDCERR("Image load/store not yet implemented.");
|
||||
|
||||
ShaderVariable var("", 0U, 0U, 0U, 0U);
|
||||
var.columns = 1;
|
||||
|
||||
SetDst(opdata.result, var);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
// TODO atomics
|
||||
case Op::ImageTexelPointer:
|
||||
case Op::AtomicLoad:
|
||||
case Op::AtomicStore:
|
||||
case Op::AtomicExchange:
|
||||
case Op::AtomicCompareExchange:
|
||||
case Op::AtomicIIncrement:
|
||||
case Op::AtomicIDecrement:
|
||||
case Op::AtomicIAdd:
|
||||
case Op::AtomicISub:
|
||||
case Op::AtomicSMin:
|
||||
case Op::AtomicUMin:
|
||||
case Op::AtomicSMax:
|
||||
case Op::AtomicUMax:
|
||||
case Op::AtomicAnd:
|
||||
case Op::AtomicOr:
|
||||
case Op::AtomicXor:
|
||||
{
|
||||
RDCERR("Atomic opcodes not yet implemented.");
|
||||
|
||||
ShaderVariable var("", 0U, 0U, 0U, 0U);
|
||||
var.columns = 1;
|
||||
|
||||
SetDst(opdata.result, var);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
// TODO sparse sampling
|
||||
case Op::ImageSparseSampleImplicitLod:
|
||||
case Op::ImageSparseSampleExplicitLod:
|
||||
case Op::ImageSparseSampleDrefImplicitLod:
|
||||
case Op::ImageSparseSampleDrefExplicitLod:
|
||||
case Op::ImageSparseSampleProjImplicitLod:
|
||||
case Op::ImageSparseSampleProjExplicitLod:
|
||||
case Op::ImageSparseSampleProjDrefImplicitLod:
|
||||
case Op::ImageSparseSampleProjDrefExplicitLod:
|
||||
case Op::ImageSparseFetch:
|
||||
case Op::ImageSparseGather:
|
||||
case Op::ImageSparseDrefGather:
|
||||
case Op::ImageSparseTexelsResident:
|
||||
case Op::ImageSparseRead:
|
||||
{
|
||||
RDCERR("Sparse opcodes not supported. SPIR-V should have been rejected by capability!");
|
||||
|
||||
ShaderVariable var("", 0U, 0U, 0U, 0U);
|
||||
var.columns = 1;
|
||||
|
||||
SetDst(opdata.result, var);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
// TODO group ops
|
||||
case Op::GroupAll:
|
||||
case Op::GroupAny:
|
||||
case Op::GroupBroadcast:
|
||||
case Op::GroupIAdd:
|
||||
case Op::GroupFAdd:
|
||||
case Op::GroupFMin:
|
||||
case Op::GroupUMin:
|
||||
case Op::GroupSMin:
|
||||
case Op::GroupFMax:
|
||||
case Op::GroupUMax:
|
||||
case Op::GroupSMax:
|
||||
case Op::GroupNonUniformElect:
|
||||
case Op::GroupNonUniformAll:
|
||||
case Op::GroupNonUniformAny:
|
||||
case Op::GroupNonUniformAllEqual:
|
||||
case Op::GroupNonUniformBroadcast:
|
||||
case Op::GroupNonUniformBroadcastFirst:
|
||||
case Op::GroupNonUniformBallot:
|
||||
case Op::GroupNonUniformInverseBallot:
|
||||
case Op::GroupNonUniformBallotBitExtract:
|
||||
case Op::GroupNonUniformBallotBitCount:
|
||||
case Op::GroupNonUniformBallotFindLSB:
|
||||
case Op::GroupNonUniformBallotFindMSB:
|
||||
case Op::GroupNonUniformShuffle:
|
||||
case Op::GroupNonUniformShuffleXor:
|
||||
case Op::GroupNonUniformShuffleUp:
|
||||
case Op::GroupNonUniformShuffleDown:
|
||||
case Op::GroupNonUniformIAdd:
|
||||
case Op::GroupNonUniformFAdd:
|
||||
case Op::GroupNonUniformIMul:
|
||||
case Op::GroupNonUniformFMul:
|
||||
case Op::GroupNonUniformSMin:
|
||||
case Op::GroupNonUniformUMin:
|
||||
case Op::GroupNonUniformFMin:
|
||||
case Op::GroupNonUniformSMax:
|
||||
case Op::GroupNonUniformUMax:
|
||||
case Op::GroupNonUniformFMax:
|
||||
case Op::GroupNonUniformBitwiseAnd:
|
||||
case Op::GroupNonUniformBitwiseOr:
|
||||
case Op::GroupNonUniformBitwiseXor:
|
||||
case Op::GroupNonUniformLogicalAnd:
|
||||
case Op::GroupNonUniformLogicalOr:
|
||||
case Op::GroupNonUniformLogicalXor:
|
||||
case Op::GroupNonUniformQuadBroadcast:
|
||||
case Op::GroupNonUniformQuadSwap:
|
||||
|
||||
case Op::SubgroupBallotKHR:
|
||||
case Op::SubgroupFirstInvocationKHR:
|
||||
case Op::SubgroupAllKHR:
|
||||
case Op::SubgroupAnyKHR:
|
||||
case Op::SubgroupAllEqualKHR:
|
||||
case Op::SubgroupReadInvocationKHR:
|
||||
{
|
||||
RDCERR("Group opcodes not supported. SPIR-V should have been rejected by capability!");
|
||||
|
||||
ShaderVariable var("", 0U, 0U, 0U, 0U);
|
||||
var.columns = 1;
|
||||
|
||||
SetDst(opdata.result, var);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
// TODO physical storage pointers
|
||||
case Op::ConvertPtrToU:
|
||||
case Op::ConvertUToPtr:
|
||||
case Op::PtrAccessChain:
|
||||
case Op::InBoundsPtrAccessChain:
|
||||
case Op::PtrDiff:
|
||||
{
|
||||
RDCERR(
|
||||
"Physical storage pointers not supported. SPIR-V should have been rejected by "
|
||||
"capability!");
|
||||
|
||||
ShaderVariable var("", 0U, 0U, 0U, 0U);
|
||||
var.columns = 1;
|
||||
|
||||
SetDst(opdata.result, var);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case Op::EmitVertex:
|
||||
case Op::EndPrimitive:
|
||||
case Op::EmitStreamVertex:
|
||||
case Op::EndStreamPrimitive:
|
||||
{
|
||||
// nothing to do for these, even if debugging geometry shaders?
|
||||
break;
|
||||
}
|
||||
|
||||
case Op::GroupIAddNonUniformAMD:
|
||||
case Op::GroupFAddNonUniformAMD:
|
||||
case Op::GroupFMinNonUniformAMD:
|
||||
case Op::GroupUMinNonUniformAMD:
|
||||
case Op::GroupSMinNonUniformAMD:
|
||||
case Op::GroupFMaxNonUniformAMD:
|
||||
case Op::GroupUMaxNonUniformAMD:
|
||||
case Op::GroupSMaxNonUniformAMD:
|
||||
case Op::FragmentMaskFetchAMD:
|
||||
case Op::FragmentFetchAMD:
|
||||
case Op::ImageSampleFootprintNV:
|
||||
case Op::GroupNonUniformPartitionNV:
|
||||
case Op::WritePackedPrimitiveIndices4x8NV:
|
||||
case Op::ReportIntersectionNV:
|
||||
case Op::IgnoreIntersectionNV:
|
||||
case Op::TerminateRayNV:
|
||||
case Op::TraceNV:
|
||||
case Op::TypeAccelerationStructureNV:
|
||||
case Op::ExecuteCallableNV:
|
||||
case Op::TypeCooperativeMatrixNV:
|
||||
case Op::CooperativeMatrixLoadNV:
|
||||
case Op::CooperativeMatrixStoreNV:
|
||||
case Op::CooperativeMatrixMulAddNV:
|
||||
case Op::CooperativeMatrixLengthNV:
|
||||
case Op::BeginInvocationInterlockEXT:
|
||||
case Op::EndInvocationInterlockEXT:
|
||||
case Op::SubgroupShuffleINTEL:
|
||||
case Op::SubgroupShuffleDownINTEL:
|
||||
case Op::SubgroupShuffleUpINTEL:
|
||||
case Op::SubgroupShuffleXorINTEL:
|
||||
case Op::SubgroupBlockReadINTEL:
|
||||
case Op::SubgroupBlockWriteINTEL:
|
||||
case Op::SubgroupImageBlockReadINTEL:
|
||||
case Op::SubgroupImageBlockWriteINTEL:
|
||||
case Op::SubgroupImageMediaBlockReadINTEL:
|
||||
case Op::SubgroupImageMediaBlockWriteINTEL:
|
||||
case Op::UCountLeadingZerosINTEL:
|
||||
case Op::UCountTrailingZerosINTEL:
|
||||
case Op::AbsISubINTEL:
|
||||
case Op::AbsUSubINTEL:
|
||||
case Op::IAddSatINTEL:
|
||||
case Op::UAddSatINTEL:
|
||||
case Op::IAverageINTEL:
|
||||
case Op::UAverageINTEL:
|
||||
case Op::IAverageRoundedINTEL:
|
||||
case Op::UAverageRoundedINTEL:
|
||||
case Op::ISubSatINTEL:
|
||||
case Op::USubSatINTEL:
|
||||
case Op::IMul32x16INTEL:
|
||||
case Op::UMul32x16INTEL:
|
||||
case Op::VmeImageINTEL:
|
||||
case Op::TypeVmeImageINTEL:
|
||||
case Op::TypeAvcImePayloadINTEL:
|
||||
case Op::TypeAvcRefPayloadINTEL:
|
||||
case Op::TypeAvcSicPayloadINTEL:
|
||||
case Op::TypeAvcMcePayloadINTEL:
|
||||
case Op::TypeAvcMceResultINTEL:
|
||||
case Op::TypeAvcImeResultINTEL:
|
||||
case Op::TypeAvcImeResultSingleReferenceStreamoutINTEL:
|
||||
case Op::TypeAvcImeResultDualReferenceStreamoutINTEL:
|
||||
case Op::TypeAvcImeSingleReferenceStreaminINTEL:
|
||||
case Op::TypeAvcImeDualReferenceStreaminINTEL:
|
||||
case Op::TypeAvcRefResultINTEL:
|
||||
case Op::TypeAvcSicResultINTEL:
|
||||
case Op::SubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL:
|
||||
case Op::SubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL:
|
||||
case Op::SubgroupAvcMceGetDefaultInterShapePenaltyINTEL:
|
||||
case Op::SubgroupAvcMceSetInterShapePenaltyINTEL:
|
||||
case Op::SubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL:
|
||||
case Op::SubgroupAvcMceSetInterDirectionPenaltyINTEL:
|
||||
case Op::SubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL:
|
||||
case Op::SubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL:
|
||||
case Op::SubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL:
|
||||
case Op::SubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL:
|
||||
case Op::SubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL:
|
||||
case Op::SubgroupAvcMceSetMotionVectorCostFunctionINTEL:
|
||||
case Op::SubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL:
|
||||
case Op::SubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL:
|
||||
case Op::SubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL:
|
||||
case Op::SubgroupAvcMceSetAcOnlyHaarINTEL:
|
||||
case Op::SubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL:
|
||||
case Op::SubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL:
|
||||
case Op::SubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL:
|
||||
case Op::SubgroupAvcMceConvertToImePayloadINTEL:
|
||||
case Op::SubgroupAvcMceConvertToImeResultINTEL:
|
||||
case Op::SubgroupAvcMceConvertToRefPayloadINTEL:
|
||||
case Op::SubgroupAvcMceConvertToRefResultINTEL:
|
||||
case Op::SubgroupAvcMceConvertToSicPayloadINTEL:
|
||||
case Op::SubgroupAvcMceConvertToSicResultINTEL:
|
||||
case Op::SubgroupAvcMceGetMotionVectorsINTEL:
|
||||
case Op::SubgroupAvcMceGetInterDistortionsINTEL:
|
||||
case Op::SubgroupAvcMceGetBestInterDistortionsINTEL:
|
||||
case Op::SubgroupAvcMceGetInterMajorShapeINTEL:
|
||||
case Op::SubgroupAvcMceGetInterMinorShapeINTEL:
|
||||
case Op::SubgroupAvcMceGetInterDirectionsINTEL:
|
||||
case Op::SubgroupAvcMceGetInterMotionVectorCountINTEL:
|
||||
case Op::SubgroupAvcMceGetInterReferenceIdsINTEL:
|
||||
case Op::SubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL:
|
||||
case Op::SubgroupAvcImeInitializeINTEL:
|
||||
case Op::SubgroupAvcImeSetSingleReferenceINTEL:
|
||||
case Op::SubgroupAvcImeSetDualReferenceINTEL:
|
||||
case Op::SubgroupAvcImeRefWindowSizeINTEL:
|
||||
case Op::SubgroupAvcImeAdjustRefOffsetINTEL:
|
||||
case Op::SubgroupAvcImeConvertToMcePayloadINTEL:
|
||||
case Op::SubgroupAvcImeSetMaxMotionVectorCountINTEL:
|
||||
case Op::SubgroupAvcImeSetUnidirectionalMixDisableINTEL:
|
||||
case Op::SubgroupAvcImeSetEarlySearchTerminationThresholdINTEL:
|
||||
case Op::SubgroupAvcImeSetWeightedSadINTEL:
|
||||
case Op::SubgroupAvcImeEvaluateWithSingleReferenceINTEL:
|
||||
case Op::SubgroupAvcImeEvaluateWithDualReferenceINTEL:
|
||||
case Op::SubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL:
|
||||
case Op::SubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL:
|
||||
case Op::SubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL:
|
||||
case Op::SubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL:
|
||||
case Op::SubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL:
|
||||
case Op::SubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL:
|
||||
case Op::SubgroupAvcImeConvertToMceResultINTEL:
|
||||
case Op::SubgroupAvcImeGetSingleReferenceStreaminINTEL:
|
||||
case Op::SubgroupAvcImeGetDualReferenceStreaminINTEL:
|
||||
case Op::SubgroupAvcImeStripSingleReferenceStreamoutINTEL:
|
||||
case Op::SubgroupAvcImeStripDualReferenceStreamoutINTEL:
|
||||
case Op::SubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL:
|
||||
case Op::SubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL:
|
||||
case Op::SubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL:
|
||||
case Op::SubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL:
|
||||
case Op::SubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL:
|
||||
case Op::SubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL:
|
||||
case Op::SubgroupAvcImeGetBorderReachedINTEL:
|
||||
case Op::SubgroupAvcImeGetTruncatedSearchIndicationINTEL:
|
||||
case Op::SubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL:
|
||||
case Op::SubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL:
|
||||
case Op::SubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL:
|
||||
case Op::SubgroupAvcFmeInitializeINTEL:
|
||||
case Op::SubgroupAvcBmeInitializeINTEL:
|
||||
case Op::SubgroupAvcRefConvertToMcePayloadINTEL:
|
||||
case Op::SubgroupAvcRefSetBidirectionalMixDisableINTEL:
|
||||
case Op::SubgroupAvcRefSetBilinearFilterEnableINTEL:
|
||||
case Op::SubgroupAvcRefEvaluateWithSingleReferenceINTEL:
|
||||
case Op::SubgroupAvcRefEvaluateWithDualReferenceINTEL:
|
||||
case Op::SubgroupAvcRefEvaluateWithMultiReferenceINTEL:
|
||||
case Op::SubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL:
|
||||
case Op::SubgroupAvcRefConvertToMceResultINTEL:
|
||||
case Op::SubgroupAvcSicInitializeINTEL:
|
||||
case Op::SubgroupAvcSicConfigureSkcINTEL:
|
||||
case Op::SubgroupAvcSicConfigureIpeLumaINTEL:
|
||||
case Op::SubgroupAvcSicConfigureIpeLumaChromaINTEL:
|
||||
case Op::SubgroupAvcSicGetMotionVectorMaskINTEL:
|
||||
case Op::SubgroupAvcSicConvertToMcePayloadINTEL:
|
||||
case Op::SubgroupAvcSicSetIntraLumaShapePenaltyINTEL:
|
||||
case Op::SubgroupAvcSicSetIntraLumaModeCostFunctionINTEL:
|
||||
case Op::SubgroupAvcSicSetIntraChromaModeCostFunctionINTEL:
|
||||
case Op::SubgroupAvcSicSetBilinearFilterEnableINTEL:
|
||||
case Op::SubgroupAvcSicSetSkcForwardTransformEnableINTEL:
|
||||
case Op::SubgroupAvcSicSetBlockBasedRawSkipSadINTEL:
|
||||
case Op::SubgroupAvcSicEvaluateIpeINTEL:
|
||||
case Op::SubgroupAvcSicEvaluateWithSingleReferenceINTEL:
|
||||
case Op::SubgroupAvcSicEvaluateWithDualReferenceINTEL:
|
||||
case Op::SubgroupAvcSicEvaluateWithMultiReferenceINTEL:
|
||||
case Op::SubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL:
|
||||
case Op::SubgroupAvcSicConvertToMceResultINTEL:
|
||||
case Op::SubgroupAvcSicGetIpeLumaShapeINTEL:
|
||||
case Op::SubgroupAvcSicGetBestIpeLumaDistortionINTEL:
|
||||
case Op::SubgroupAvcSicGetBestIpeChromaDistortionINTEL:
|
||||
case Op::SubgroupAvcSicGetPackedIpeLumaModesINTEL:
|
||||
case Op::SubgroupAvcSicGetIpeChromaModeINTEL:
|
||||
case Op::SubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL:
|
||||
case Op::SubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL:
|
||||
case Op::SubgroupAvcSicGetInterRawSadsINTEL:
|
||||
{
|
||||
RDCERR("Unsupported extension opcode used %s", ToStr(opdata.op).c_str());
|
||||
|
||||
ShaderVariable var("", 0U, 0U, 0U, 0U);
|
||||
var.columns = 1;
|
||||
|
||||
SetDst(opdata.result, var);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case Op::SourceContinued:
|
||||
case Op::Source:
|
||||
case Op::SourceExtension:
|
||||
@@ -2558,8 +2908,7 @@ void ThreadState::StepNext(ShaderDebugState *state, const rdcarray<ThreadState>
|
||||
break;
|
||||
}
|
||||
|
||||
case Op::Max:
|
||||
default: RDCWARN("Unhandled SPIR-V operation %s", ToStr(opdata.op).c_str()); break;
|
||||
case Op::Max: RDCWARN("Unhandled SPIR-V operation %s", ToStr(opdata.op).c_str()); break;
|
||||
}
|
||||
|
||||
// skip over any degenerate branches
|
||||
|
||||
Reference in New Issue
Block a user