void D3D12ResourceManager::SerialiseResourceStates(vector<D3D12_RESOURCE_BARRIER> &barriers, map<ResourceId, SubresourceStateVector> &states) { SERIALISE_ELEMENT(uint32_t, NumMems, (uint32_t)states.size()); auto srcit = states.begin(); for(uint32_t i = 0; i < NumMems; i++) { SERIALISE_ELEMENT(ResourceId, id, srcit->first); SERIALISE_ELEMENT(uint32_t, NumStates, (uint32_t)srcit->second.size()); ResourceId liveid; if(m_State < WRITING && HasLiveResource(id)) liveid = GetLiveID(id); for(uint32_t m = 0; m < NumStates; m++) { SERIALISE_ELEMENT(D3D12_RESOURCE_STATES, state, srcit->second[m]); if(m_State < WRITING && liveid != ResourceId() && srcit != states.end()) { D3D12_RESOURCE_BARRIER b; b.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; b.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; b.Transition.pResource = (ID3D12Resource *)GetCurrentResource(liveid); b.Transition.Subresource = m; b.Transition.StateBefore = states[liveid][m]; b.Transition.StateAfter = state; barriers.push_back(b); } } if(m_State >= WRITING) srcit++; } // erase any do-nothing barriers for(auto it = barriers.begin(); it != barriers.end();) { if(it->Transition.StateBefore == it->Transition.StateAfter) it = barriers.erase(it); else ++it; } ApplyBarriers(barriers, states); }
HTMLResource* FindReplace::GetNextContainingHTMLResource( Searchable::Direction direction ) { Resource* current_resource = GetCurrentResource(); HTMLResource *starting_html_resource = qobject_cast< HTMLResource *> ( current_resource ); if ( !starting_html_resource || ( GetLookWhere() == FindReplace::LookWhere_SelectedHTMLFiles && !IsCurrentFileInHTMLSelection() ) ) { QList<Resource *> resources = GetHTMLFiles(); if ( resources.isEmpty() ) { return NULL; } if ( direction == Searchable::Direction_Up ) { starting_html_resource = qobject_cast< HTMLResource *>( resources.first() ); } else { starting_html_resource = qobject_cast< HTMLResource *>( resources.last() ); } } HTMLResource *next_html_resource = starting_html_resource; bool passed_starting_html_resource = false; while ( !passed_starting_html_resource || ( next_html_resource != starting_html_resource ) ) { next_html_resource = GetNextHTMLResource( next_html_resource, direction ); if ( next_html_resource == starting_html_resource ) { passed_starting_html_resource = true ; } if ( next_html_resource ) { if ( ResourceContainsCurrentRegex( next_html_resource ) ) { return next_html_resource; } // else continue } else return NULL; } return NULL; }
bool FindReplace::IsCurrentFileInHTMLSelection() { bool found = false; QList <Resource *> resources = GetHTMLFiles(); Resource *current_resource = GetCurrentResource(); HTMLResource *current_html_resource = qobject_cast< HTMLResource *>( current_resource ); if ( current_html_resource ) { foreach ( Resource *resource, resources ) { if ( resource->Filename() == current_html_resource->Filename() ) { found = true; break; } } } return found; }