>> +void ati_finish_host_data(ATIVGAState *s)
>> +{
>> + while (ati_flush_host_data(s)) {
>> + continue;
>> + }
>
> Is this while loop still needed? It looks like it will fill the rest of
> the blit rect with the last accumulator value instead of just finishing
> the blit in the middle. Is that what the real chip does? Otherwise this
> could just flush once and deactivate host data, couldn't it?
>
This is how the real chip behaves, but it flushes the entire 256-bit
accumulator wrapping around until the blit is complete. Even though
the chip does behave this way the output will be different here because
we've limited it to 128 bits. That makes this feel like sort of a
half-measure toward reproducing the behavior. So I think you're right
and we should just flush and deactivate host_data.
It may also be worth adding a LOG_GUEST_ERROR here if the blit is ended
early so that it's a bit more visible if it happens in real-world usage.