This allows wl_surface.buffer_scale to use a negative value to indicate a denominator for the scalar instead. That is, while buffer_scale=2 still means that the buffer space is twice the size of the surface space, buffer_scale=-2 indicates a factor of 1/2, so the buffer is half the size of the surface.
When responding to wl_output.scale > 1, a client could intentionally let the compositor upscale the buffer by leaving buffer_scale=1. With wl_surface.scale_factor, it is no longer possible to specify a buffer smaller than the final output. This restores that functionality and expands it considerably. For example, even a single pixel may be multiplied by any integer factor and positioned exactly in the final output.
Signed-off-by: Joseph Burt firstname.lastname@example.org