blob: e552f27291d9aa94debbfa2a2cc0b274d80a271f [file] [log] [blame]
/*
* Copyright 2023 Google LLC
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "tests/Test.h"
#include "include/gpu/graphite/BackendTexture.h"
#include "include/gpu/graphite/Context.h"
#include "include/gpu/graphite/Recorder.h"
#include "include/gpu/graphite/dawn/DawnTypes.h"
#include "webgpu/webgpu_cpp.h" // NO_G3_REWRITE
using namespace skgpu::graphite;
namespace {
const SkISize kSize = {16, 16};
}
DEF_GRAPHITE_TEST_FOR_DAWN_CONTEXT(DawnBackendTextureSimpleCreationTest,
reporter,
context,
testContext) {
auto recorder = context->makeRecorder();
DawnTextureInfo textureInfo;
textureInfo.fSampleCount = 1;
textureInfo.fMipmapped = skgpu::Mipmapped::kNo;
textureInfo.fFormat = wgpu::TextureFormat::RGBA8Unorm;
textureInfo.fUsage = wgpu::TextureUsage::TextureBinding;
auto beTexture = recorder->createBackendTexture(kSize, textureInfo);
REPORTER_ASSERT(reporter, beTexture.isValid());
recorder->deleteBackendTexture(beTexture);
// It should also pass if we set the usage to be a render target
textureInfo.fUsage |= wgpu::TextureUsage::RenderAttachment;
beTexture = recorder->createBackendTexture(kSize, textureInfo);
REPORTER_ASSERT(reporter, beTexture.isValid());
recorder->deleteBackendTexture(beTexture);
}
// Test that copying BackendTexture variables works.
DEF_GRAPHITE_TEST_FOR_DAWN_CONTEXT(DawnBackendTextureCopyVariableTest,
reporter,
context,
testContext) {
auto recorder = context->makeRecorder();
DawnTextureInfo textureInfo;
textureInfo.fSampleCount = 1;
textureInfo.fMipmapped = skgpu::Mipmapped::kNo;
textureInfo.fFormat = wgpu::TextureFormat::RGBA8Unorm;
textureInfo.fUsage = wgpu::TextureUsage::TextureBinding;
BackendTexture beTexture = recorder->createBackendTexture(kSize, textureInfo);
REPORTER_ASSERT(reporter, beTexture.isValid());
BackendTexture beTexture2;
REPORTER_ASSERT(reporter, beTexture2 != beTexture);
REPORTER_ASSERT(reporter, beTexture2.getDawnTexturePtr() == nullptr);
REPORTER_ASSERT(reporter, beTexture2.getDawnTextureViewPtr() == nullptr);
beTexture2 = beTexture;
REPORTER_ASSERT(reporter, beTexture2 == beTexture);
REPORTER_ASSERT(reporter, beTexture2.getDawnTexturePtr() != nullptr);
REPORTER_ASSERT(reporter, beTexture2.getDawnTexturePtr() == beTexture.getDawnTexturePtr());
recorder->deleteBackendTexture(beTexture);
}