@@ -2283,7 +2283,14 @@ struct ResourceHandle
2283
2283
{
2284
2284
rdcstr name;
2285
2285
ResourceClass resourceClass;
2286
- uint32_t resourceIndex;
2286
+ uint32_t resourceIndex = 0 ;
2287
+ union
2288
+ {
2289
+ const DXIL::EntryPointInterface::UAV *uav;
2290
+ const DXIL::EntryPointInterface::SRV *srv;
2291
+ const DXIL::EntryPointInterface::CBuffer *cbuffer;
2292
+ const DXIL::EntryPointInterface::Sampler *sampler;
2293
+ };
2287
2294
};
2288
2295
2289
2296
void Program::MakeRDDisassemblyString (const DXBC::Reflection *reflection)
@@ -2676,19 +2683,39 @@ void Program::MakeRDDisassemblyString(const DXBC::Reflection *reflection)
2676
2683
{
2677
2684
if (hasResIndex)
2678
2685
{
2686
+ ResourceHandle resHandle;
2687
+ bool validRes = true ;
2679
2688
switch (resClass)
2680
2689
{
2681
- case ResourceClass::SRV: resName = entryPoint.srvs [resIndex].name ; break ;
2682
- case ResourceClass::UAV: resName = entryPoint.uavs [resIndex].name ; break ;
2690
+ case ResourceClass::SRV:
2691
+ resName = entryPoint.srvs [resIndex].name ;
2692
+ resHandle.srv = &entryPoint.srvs [resIndex];
2693
+ break ;
2694
+ case ResourceClass::UAV:
2695
+ resName = entryPoint.uavs [resIndex].name ;
2696
+ resHandle.uav = &entryPoint.uavs [resIndex];
2697
+ break ;
2683
2698
case ResourceClass::CBuffer:
2684
2699
resName = entryPoint.cbuffers [resIndex].name ;
2700
+ resHandle.cbuffer = &entryPoint.cbuffers [resIndex];
2685
2701
break ;
2686
2702
case ResourceClass::Sampler:
2687
2703
resName = entryPoint.samplers [resIndex].name ;
2704
+ resHandle.sampler = &entryPoint.samplers [resIndex];
2705
+ break ;
2706
+ default :
2707
+ validRes = false ;
2708
+ resName = " INVALID RESOURCE CLASS" ;
2688
2709
break ;
2689
- default : resName = " INVALID RESOURCE CLASS" ; break ;
2690
2710
};
2691
- resHandles[handleStr] = {resName, resClass, resIndex};
2711
+
2712
+ if (validRes)
2713
+ {
2714
+ resHandle.name = resName;
2715
+ resHandle.resourceClass = resClass;
2716
+ resHandle.resourceIndex = resIndex;
2717
+ resHandles[handleStr] = resHandle;
2718
+ }
2692
2719
uint32_t index;
2693
2720
if (getival<uint32_t >(inst.args [3 ], index))
2694
2721
{
@@ -2879,6 +2906,78 @@ void Program::MakeRDDisassemblyString(const DXBC::Reflection *reflection)
2879
2906
showDxFuncName = true ;
2880
2907
}
2881
2908
}
2909
+ else if (showDxFuncName && funcCallName.beginsWith (" dx.op.textureLoad" ))
2910
+ {
2911
+ // srv,mipLevelOrSampleCount,coord0,coord1,coord2,offset0,offset1,offset2
2912
+ showDxFuncName = false ;
2913
+ uint32_t dxopCode;
2914
+ RDCASSERT (getival<uint32_t >(inst.args [0 ], dxopCode));
2915
+ RDCASSERTEQUAL (dxopCode, 66 );
2916
+ rdcstr handleStr = ArgToString (inst.args [1 ], false );
2917
+ if (resHandles.count (handleStr) > 0 )
2918
+ {
2919
+ lineStr += resHandles[handleStr].name ;
2920
+ lineStr += " .Load(" ;
2921
+ bool needComma = false ;
2922
+ const EntryPointInterface::SRV *texture = resHandles[handleStr].srv ;
2923
+ for (uint32_t a = 3 ; a < 6 ; ++a)
2924
+ {
2925
+ if (!isUndef (inst.args [a]))
2926
+ {
2927
+ if (needComma)
2928
+ lineStr += " , " ;
2929
+ lineStr += ArgToString (inst.args [a], false );
2930
+ needComma = true ;
2931
+ }
2932
+ }
2933
+ bool needText = true ;
2934
+ if (!isUndef (inst.args [2 ]))
2935
+ {
2936
+ rdcstr prefix;
2937
+ bool showArg = true ;
2938
+ if (needText)
2939
+ {
2940
+ if (texture && texture->sampleCount > 1 )
2941
+ {
2942
+ prefix = " SampleIndex = " ;
2943
+ }
2944
+ else
2945
+ {
2946
+ prefix = " MipSlice = " ;
2947
+ uint32_t mipSlice;
2948
+ if (getival<uint32_t >(inst.args [2 ], mipSlice))
2949
+ showArg = mipSlice > 0 ;
2950
+ }
2951
+ }
2952
+ if (showArg)
2953
+ {
2954
+ needText = false ;
2955
+ lineStr += " , " ;
2956
+ lineStr += prefix;
2957
+ lineStr += ArgToString (inst.args [2 ], false );
2958
+ }
2959
+ }
2960
+ needText = true ;
2961
+ for (uint32_t a = 6 ; a < 9 ; ++a)
2962
+ {
2963
+ if (!isUndef (inst.args [a]))
2964
+ {
2965
+ lineStr += " , " ;
2966
+ if (needText)
2967
+ {
2968
+ lineStr += " Offset = " ;
2969
+ needText = false ;
2970
+ }
2971
+ lineStr += ArgToString (inst.args [a], false );
2972
+ }
2973
+ }
2974
+ lineStr += " )" ;
2975
+ }
2976
+ else
2977
+ {
2978
+ showDxFuncName = true ;
2979
+ }
2980
+ }
2882
2981
else if (funcCallName.beginsWith (" llvm.dbg." ))
2883
2982
{
2884
2983
}
0 commit comments