blob: 436468fd230a26906357c43c93b2089c7c7c35b3 [file]
/*
* Copyright 2026 Google LLC
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "include/core/SkBitmap.h"
#include "include/core/SkCanvas.h"
#include "include/core/SkColor.h"
#include "include/core/SkImageInfo.h"
#include "include/core/SkPoint.h"
#include "include/core/SkRect.h"
#include "include/core/SkRefCnt.h"
#include "include/core/SkSamplingOptions.h"
#include "include/core/SkSurface.h"
#include "include/gpu/graphite/Context.h"
#include "include/gpu/graphite/Image.h"
#include "include/gpu/graphite/Recorder.h"
#include "include/gpu/graphite/Recording.h"
#include "include/gpu/graphite/Surface.h"
#include "tests/Test.h"
using namespace skgpu::graphite;
DEF_GRAPHITE_TEST_FOR_ALL_CONTEXTS(crbug_513836996, reporter, context, CtsEnforcement::kNever) {
constexpr int kW = 200;
constexpr int kH = 100;
const SkImageInfo ii = SkImageInfo::Make(kW, kH, kRGBA_8888_SkColorType, kPremul_SkAlphaType);
std::unique_ptr<Recorder> recorder = context->makeRecorder();
sk_sp<SkSurface> surface = SkSurfaces::RenderTarget(recorder.get(), ii);
SkCanvas* canvas = surface->getCanvas();
canvas->clear(SK_ColorBLACK);
auto src_ii = SkImageInfo::Make(32, 32, kRGBA_8888_SkColorType, kPremul_SkAlphaType);
SkBitmap src_bm;
src_bm.allocPixels(src_ii);
src_bm.eraseColor(SK_ColorGREEN);
sk_sp<SkImage> rasterImage = SkImages::RasterFromBitmap(src_bm);
sk_sp<SkImage> green = SkImages::TextureFromImage(recorder.get(), rasterImage);
const SkPoint dstClips[8] = {
{10, 10}, {60, 10}, {60, 60}, {10, 60}, // LEFT
{110, 10}, {190, 10}, {190, 90}, {110, 90}, // RIGHT
};
SkCanvas::ImageSetEntry entries[2];
entries[0].fImage = green;
entries[0].fSrcRect = SkRect::MakeLTRB(-100, -100, -50, -50);
entries[0].fDstRect = SkRect::MakeWH(kW, kH);
entries[0].fMatrixIndex = -1;
entries[0].fAlpha = 1.f;
entries[0].fAAFlags = SkCanvas::kNone_QuadAAFlags;
entries[0].fHasClip = true;
entries[1].fImage = green;
entries[1].fSrcRect = SkRect::MakeWH(32, 32);
entries[1].fDstRect = SkRect::MakeWH(kW, kH);
entries[1].fMatrixIndex = -1;
entries[1].fAlpha = 1.f;
entries[1].fAAFlags = SkCanvas::kNone_QuadAAFlags;
entries[1].fHasClip = true;
canvas->experimental_DrawEdgeAAImageSet(
entries, 2, dstClips, nullptr, SkSamplingOptions(),
nullptr, SkCanvas::kFast_SrcRectConstraint);
std::unique_ptr<Recording> recording = recorder->snap();
context->insertRecording({recording.get()});
SkBitmap bm;
bm.allocPixels(ii);
REPORTER_ASSERT(reporter, surface->readPixels(bm, 0, 0), "Failed to read pixels");
SkColor left_px = bm.getColor(35, 35);
SkColor right_px = bm.getColor(150, 50);
REPORTER_ASSERT(reporter, left_px == SK_ColorBLACK,
"Left pixel should be BLACK, got 0x%08x", left_px);
REPORTER_ASSERT(reporter, right_px == SK_ColorGREEN,
"Right pixel should be GREEN, got 0x%08x", right_px);
}