void HelperFuncTable::Init() { if (nEntry == 0) { ULONG length = Get1DArrayLength ("hlpFuncTable"); if (length == 0) { return; } DWORD_PTR hlpAddr = GetAddressOf(offset_class_Global_Variables, offset_member_Global_Variables::hlpFuncTable); if (hlpAddr == 0) { return; } size_t entrySize = VMHELPDEF::size(); size_t bufferSize = length*entrySize; size_t *buffer = new size_t[bufferSize/sizeof(size_t)]; if (buffer == NULL) { return; } ToDestroyCxxArray<size_t> des(&buffer); if (g_ExtData->ReadVirtual(hlpAddr,buffer,bufferSize,NULL) != S_OK) { return; } EEFLAVOR flavor = GetEEFlavor (); ULONG modIndex; g_ExtSymbols->GetModuleByOffset(moduleInfo[flavor].baseAddr,0,&modIndex,NULL); DEBUG_MODULE_PARAMETERS Params; g_ExtSymbols->GetModuleParameters(1,NULL,modIndex,&Params); size_t index = VMHELPDEF::GetFieldOffset (offset_member_VMHELPDEF::pfnHelper)/sizeof(size_t); size_t *pt = buffer + entrySize/sizeof(size_t); // skip the first one size_t count = 0; size_t i; for (i = 1; i < length; i ++) { if (pt[index] < Params.Base || pt[index] > Params.Base + Params.Size) { count ++; } pt += entrySize/sizeof(size_t); } nEntry = count; table = new HelperFuncEntry[count]; count = 0; pt = buffer + entrySize/sizeof(size_t); for (i = 1; i < length; i ++) { if (pt[index] < Params.Base || pt[index] > Params.Base + Params.Size) { table[count].addr = hlpAddr + i*entrySize + index*sizeof(size_t); table[count].begin = pt[index]; NameForEnumValue ("CorInfoHelpFunc", i, &table[count].name); count ++; } pt += entrySize/sizeof(size_t); } } SetupAddr(); }
void ComputeShaderSkinning::Dispatch(const Mat bone[BONE_MAX], ID3D11ShaderResourceView* srvPos, ID3D11ShaderResourceView* srvSkin, ID3D11UnorderedAccessView* unorderedAccessView, int nVert) { auto buf = bufferMan.Get(constantBufferId); afWriteBuffer(buf, bone, sizeof(BoneBuffer)); ID3D11ShaderResourceView* srvList[] = {srvPos, srvSkin}; deviceMan11.GetContext()->CSSetShader(computeShader, nullptr, 0); deviceMan11.GetContext()->CSSetConstantBuffers(0, 1, buf.GetAddressOf()); deviceMan11.GetContext()->CSSetShaderResources(0, 2, srvList); deviceMan11.GetContext()->CSSetUnorderedAccessViews(0, 1, &unorderedAccessView, nullptr); deviceMan11.GetContext()->Dispatch(nVert, 1, 1); ID3D11UnorderedAccessView* nullView = nullptr; deviceMan11.GetContext()->CSSetUnorderedAccessViews(0, 1, &nullView, nullptr); ID3D11ShaderResourceView* nullTex[] = {nullptr, nullptr}; deviceMan11.GetContext()->CSSetShaderResources(0, 2, nullTex); }