/*
 * Copyright 2019 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#include "gm.h"

#include "Resources.h"

DEF_SIMPLE_GM(skbug_8664, canvas, 830, 550) {
    const struct {
        SkScalar    fSx, fSy, fTx, fTy;
    } xforms[] = {
        { 1, 1, 0, 0 },
        { 0.5f, 0.5f, 530, 0 },
        { 0.25f, 0.25f, 530, 275 },
        { 0.125f, 0.125f, 530, 420 },
    };

    SkPaint imagePaint;
    // Must be at least medium to require mipmaps when we downscale the image
    imagePaint.setFilterQuality(kMedium_SkFilterQuality);
    sk_sp<SkImage> image(GetResourceAsImage("images/mandrill_512.png"));

    SkPaint overlayPaint;
    overlayPaint.setColor(0x80FFFFFF);

    // Make the overlay visible even when the downscaled images fail to render
    canvas->clear(0xFF888888);

    canvas->translate(20, 20);
    for (const auto& xform : xforms) {
        canvas->save();
        canvas->translate(xform.fTx, xform.fTy);
        canvas->scale(xform.fSx, xform.fSy);

        // Draw an image, possibly down sampled, which forces us to generate mipmaps inline
        // on the second iteration.
        canvas->drawImage(image, 0, 0, &imagePaint);

        // Draw an overlay that requires the scissor test for its clipping, so that the mipmap
        // generation + scissor interference bug is highlighted in Adreno 330 devices.
        SkRect inner = SkRect::MakeLTRB(32.f, 32.f, 480.f, 480.f);
        SkRect outer = inner.makeOutset(16.f, 16.f);

        // Clip to smaller rectangle
        canvas->save();
        canvas->clipRect(inner);
        // Then apply a rotation and draw a larger rectangle to ensure the clip cannot be dropped
        canvas->rotate(20.f);
        canvas->drawRect(outer, overlayPaint);
        canvas->restore();

        canvas->restore();
    }
}
