blob: 7404dac0081f8013773673d43f8928c3bceb1b25 [file] [log] [blame]
/*
* 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 "src/gpu/dawn/GrDawnUtil.h"
size_t GrDawnBytesPerPixel(dawn::TextureFormat format) {
switch (format) {
case dawn::TextureFormat::RGBA8Unorm:
case dawn::TextureFormat::BGRA8Unorm:
return 4;
case dawn::TextureFormat::R8Unorm:
return 1;
case dawn::TextureFormat::Depth24PlusStencil8:
return 4;
default:
SkASSERT(false);
return 4;
}
}
bool GrDawnFormatIsRenderable(dawn::TextureFormat format) {
// For now, all the formats above are renderable. If a non-renderable format is added
// (see dawn/src/dawn_native/Format.cpp), an exception should be added here.
return true;
}
bool GrPixelConfigToDawnFormat(GrPixelConfig config, dawn::TextureFormat* format) {
switch (config) {
case kRGBA_8888_GrPixelConfig:
case kRGBA_4444_GrPixelConfig:
case kRGB_565_GrPixelConfig:
case kGray_8_GrPixelConfig:
*format = dawn::TextureFormat::RGBA8Unorm;
return true;
case kBGRA_8888_GrPixelConfig:
*format = dawn::TextureFormat::BGRA8Unorm;
return true;
case kAlpha_8_GrPixelConfig:
case kAlpha_8_as_Red_GrPixelConfig:
*format = dawn::TextureFormat::R8Unorm;
return true;
default:
return false;
}
}
size_t GrDawnRoundRowBytes(size_t rowBytes) {
// Dawn requires that rowBytes be a multiple of 256. (This is actually imposed by D3D12.)
return (rowBytes + 0xFF) & ~0xFF;
}
#if GR_TEST_UTILS
const char* GrDawnFormatToStr(dawn::TextureFormat format) {
switch (format) {
case dawn::TextureFormat::RGBA8Unorm:
return "RGBA8Unorm";
case dawn::TextureFormat::BGRA8Unorm:
return "BGRA8Unorm";
case dawn::TextureFormat::R8Unorm:
return "R8Unorm";
case dawn::TextureFormat::Depth24PlusStencil8:
return "Depth24PlusStencil8";
default:
SkASSERT(false);
return "Unknown";
}
}
#endif