| 1355 | } |
| 1356 | |
| 1357 | void IterateUniforms(Program* program, bool prepend_instance_name, IterateUniformsCallback callback, void* user_data) |
| 1358 | { |
| 1359 | ProgramResourceBindingIterator it(program); |
| 1360 | |
| 1361 | dmArray<char> canonical_name_buffer; |
| 1362 | |
| 1363 | const ProgramResourceBinding* next; |
| 1364 | while((next = it.Next())) |
| 1365 | { |
| 1366 | if (next->m_Res->m_BindingFamily == BINDING_FAMILY_TEXTURE || |
| 1367 | next->m_Res->m_BindingFamily == BINDING_FAMILY_STORAGE_BUFFER) |
| 1368 | { |
| 1369 | CreateUniformLeafMembersCallbackParams params = {}; |
| 1370 | params.m_CanonicalName = next->m_Res->m_Name; |
| 1371 | params.m_Resource = next; |
| 1372 | |
| 1373 | callback(params, user_data); |
| 1374 | } |
| 1375 | else if (next->m_Res->m_BindingFamily == BINDING_FAMILY_UNIFORM_BUFFER) |
| 1376 | { |
| 1377 | uint32_t canonical_name_buffer_offset = 0; |
| 1378 | |
| 1379 | if (prepend_instance_name && next->m_Res->m_InstanceName && next->m_Res->m_InstanceName[0] != 0) |
| 1380 | { |
| 1381 | canonical_name_buffer_offset = strlen(next->m_Res->m_InstanceName); |
| 1382 | |
| 1383 | if (canonical_name_buffer.Empty()) |
| 1384 | { |
| 1385 | canonical_name_buffer.OffsetCapacity(dmMath::Max((uint32_t) 128, canonical_name_buffer_offset)); |
| 1386 | canonical_name_buffer.SetSize(canonical_name_buffer.Capacity()); |
| 1387 | } |
| 1388 | memcpy(canonical_name_buffer.Begin(), next->m_Res->m_InstanceName, canonical_name_buffer_offset); |
| 1389 | } |
| 1390 | else |
| 1391 | { |
| 1392 | if (canonical_name_buffer.Empty()) |
| 1393 | { |
| 1394 | canonical_name_buffer.OffsetCapacity(128); |
| 1395 | canonical_name_buffer.SetSize(canonical_name_buffer.Capacity()); |
| 1396 | } |
| 1397 | } |
| 1398 | |
| 1399 | const dmArray<ShaderResourceTypeInfo>& type_infos = *next->m_TypeInfos; |
| 1400 | VisitUniformLeafNodes(callback, user_data, next, type_infos, next->m_Res->m_Type, next->m_Res->m_Name, next->m_Res->m_InstanceName, &canonical_name_buffer, canonical_name_buffer_offset); |
| 1401 | } |
| 1402 | } |
| 1403 | } |
| 1404 | |
| 1405 | void IterateProgramResourceBindings(HProgram prog, ShaderResourceBindingFamily family, IterateProgramResourceBindingsCallback callback, void* user_data) |
| 1406 | { |
no test coverage detected