/* * Copyright 2019 Google LLC * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef GrUtil_DEFINED #define GrUtil_DEFINED #include "include/core/SkScalar.h" #include "include/core/SkTypes.h" #include "include/gpu/ganesh/GrTypes.h" #include "include/private/gpu/ganesh/GrTypesPriv.h" #include "src/core/SkSLTypeShared.h" #include class GrStyle; class SkMatrix; enum GrIntelGpuFamily { kUnknown_IntelGpuFamily, // 6th gen kSandyBridge_IntelGpuFamily, // 7th gen kIvyBridge_IntelGpuFamily, kValleyView_IntelGpuFamily, // aka BayTrail kHaswell_IntelGpuFamily, // 8th gen kCherryView_IntelGpuFamily, // aka Braswell kBroadwell_IntelGpuFamily, // 9th gen kApolloLake_IntelGpuFamily, kSkyLake_IntelGpuFamily, kGeminiLake_IntelGpuFamily, kKabyLake_IntelGpuFamily, kCoffeeLake_IntelGpuFamily, // 11th gen kIceLake_IntelGpuFamily, }; GrIntelGpuFamily GrGetIntelGpuFamily(uint32_t deviceID); // Helper for determining if we can treat a thin stroke as a hairline w/ coverage. // If we can, we draw lots faster (raster device does this same test). bool GrIsStrokeHairlineOrEquivalent(const GrStyle&, const SkMatrix&, SkScalar* outCoverage); static inline SkSLType SkSLCombinedSamplerTypeForTextureType(GrTextureType type) { switch (type) { case GrTextureType::k2D: return SkSLType::kTexture2DSampler; case GrTextureType::kRectangle: return SkSLType::kTexture2DRectSampler; case GrTextureType::kExternal: return SkSLType::kTextureExternalSampler; default: SK_ABORT("Unexpected texture type"); } } static constexpr const char* GrBackendApiToStr(GrBackendApi api) { switch (api) { case GrBackendApi::kOpenGL: return "OpenGL"; case GrBackendApi::kVulkan: return "Vulkan"; case GrBackendApi::kMetal: return "Metal"; case GrBackendApi::kDirect3D: return "Direct3D"; case GrBackendApi::kMock: return "Mock"; case GrBackendApi::kUnsupported: return "Unsupported"; } SkUNREACHABLE; } static constexpr const char* GrColorTypeToStr(GrColorType ct) { switch (ct) { case GrColorType::kUnknown: return "kUnknown"; case GrColorType::kAlpha_8: return "kAlpha_8"; case GrColorType::kBGR_565: return "kBGR_565"; case GrColorType::kRGB_565: return "kRGB_565"; case GrColorType::kABGR_4444: return "kABGR_4444"; case GrColorType::kRGBA_8888: return "kRGBA_8888"; case GrColorType::kRGBA_8888_SRGB: return "kRGBA_8888_SRGB"; case GrColorType::kRGB_888x: return "kRGB_888x"; case GrColorType::kRG_88: return "kRG_88"; case GrColorType::kBGRA_8888: return "kBGRA_8888"; case GrColorType::kRGBA_1010102: return "kRGBA_1010102"; case GrColorType::kBGRA_1010102: return "kBGRA_1010102"; case GrColorType::kRGB_101010x: return "kRGB_101010x"; case GrColorType::kRGBA_10x6: return "kBGRA_10x6"; case GrColorType::kGray_8: return "kGray_8"; case GrColorType::kGrayAlpha_88: return "kGrayAlpha_88"; case GrColorType::kAlpha_F16: return "kAlpha_F16"; case GrColorType::kRGBA_F16: return "kRGBA_F16"; case GrColorType::kRGBA_F16_Clamped: return "kRGBA_F16_Clamped"; case GrColorType::kRGB_F16F16F16x: return "kRGB_F16F16F16x"; case GrColorType::kRGBA_F32: return "kRGBA_F32"; case GrColorType::kAlpha_8xxx: return "kAlpha_8xxx"; case GrColorType::kAlpha_F32xxx: return "kAlpha_F32xxx"; case GrColorType::kGray_8xxx: return "kGray_8xxx"; case GrColorType::kR_8xxx: return "kR_8xxx"; case GrColorType::kAlpha_16: return "kAlpha_16"; case GrColorType::kRG_1616: return "kRG_1616"; case GrColorType::kRGBA_16161616: return "kRGBA_16161616"; case GrColorType::kRG_F16: return "kRG_F16"; case GrColorType::kRGB_888: return "kRGB_888"; case GrColorType::kR_8: return "kR_8"; case GrColorType::kR_16: return "kR_16"; case GrColorType::kR_F16: return "kR_F16"; case GrColorType::kGray_F16: return "kGray_F16"; case GrColorType::kARGB_4444: return "kARGB_4444"; case GrColorType::kBGRA_4444: return "kBGRA_4444"; } SkUNREACHABLE; } static constexpr const char* GrSurfaceOriginToStr(GrSurfaceOrigin origin) { switch (origin) { case kTopLeft_GrSurfaceOrigin: return "kTopLeft"; case kBottomLeft_GrSurfaceOrigin: return "kBottomLeft"; } SkUNREACHABLE; } #endif