MCPcopy Create free account
hub / github.com/baldurk/renderdoc / UnrollConstant

Function UnrollConstant

qrenderdoc/Windows/BufferViewer.cpp:2329–2381  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2327}
2328
2329static void UnrollConstant(rdcstr prefix, uint32_t baseOffset, const ShaderConstant &constant,
2330 rdcarray<ShaderConstant> &columns,
2331 rdcarray<BufferElementProperties> &props)
2332{
2333 bool isArray = constant.type.elements > 1;
2334
2335 rdcstr baseName = constant.name;
2336
2337 if(!prefix.isEmpty())
2338 baseName = prefix + "." + baseName;
2339
2340 if(constant.type.baseType == VarType::Enum || constant.type.members.isEmpty())
2341 {
2342 BufferElementProperties prop;
2343 prop.format = GetInterpretedResourceFormat(constant);
2344
2345 ShaderConstant c = constant;
2346 c.byteOffset += baseOffset;
2347
2348 if(isArray)
2349 {
2350 for(uint32_t a = 0; a < constant.type.elements; a++)
2351 {
2352 c.name = QFormatStr("%1[%2]").arg(baseName).arg(a);
2353 columns.push_back(c);
2354 props.push_back(prop);
2355 c.byteOffset += constant.type.arrayByteStride;
2356 }
2357 }
2358 else
2359 {
2360 c.name = baseName;
2361 columns.push_back(c);
2362 props.push_back(prop);
2363 }
2364
2365 return;
2366 }
2367
2368 // struct, expand by members
2369 uint32_t arraySize = qMax(1U, constant.type.elements);
2370 if(arraySize == ~0U)
2371 arraySize = 1U;
2372 for(uint32_t a = 0; a < arraySize; a++)
2373 {
2374 for(const ShaderConstant &child : constant.type.members)
2375 {
2376 UnrollConstant(isArray ? QFormatStr("%1[%2]").arg(baseName).arg(a) : QString(baseName),
2377 baseOffset + constant.byteOffset + a * constant.type.arrayByteStride, child,
2378 columns, props);
2379 }
2380 }
2381}
2382
2383static void UnrollConstant(const ShaderConstant &constant, rdcarray<ShaderConstant> &columns,
2384 rdcarray<BufferElementProperties> &props)

Callers 1

OnEventChangedMethod · 0.70

Calls 5

QStringFunction · 0.50
isEmptyMethod · 0.45
argMethod · 0.45
push_backMethod · 0.45

Tested by

no test coverage detected