1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2020 Google LLC 3cb93a386Sopenharmony_ci * 4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be 5cb93a386Sopenharmony_ci * found in the LICENSE file. 6cb93a386Sopenharmony_ci */ 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci#include "src/gpu/GrUtil.h" 9cb93a386Sopenharmony_ci 10cb93a386Sopenharmony_ci#include "src/core/SkDrawProcs.h" 11cb93a386Sopenharmony_ci#include "src/gpu/GrStyle.h" 12cb93a386Sopenharmony_ci 13cb93a386Sopenharmony_ciGrIntelGpuFamily GrGetIntelGpuFamily(uint32_t deviceID) { 14cb93a386Sopenharmony_ci // https://en.wikipedia.org/wiki/List_of_Intel_graphics_processing_units 15cb93a386Sopenharmony_ci uint32_t maskedID = deviceID & 0xFF00; 16cb93a386Sopenharmony_ci switch (maskedID) { 17cb93a386Sopenharmony_ci case 0x0100: 18cb93a386Sopenharmony_ci switch (deviceID & 0xFFF0) { 19cb93a386Sopenharmony_ci case 0x0100: 20cb93a386Sopenharmony_ci case 0x0110: 21cb93a386Sopenharmony_ci case 0x0120: 22cb93a386Sopenharmony_ci return kSandyBridge_IntelGpuFamily; 23cb93a386Sopenharmony_ci case 0x0150: 24cb93a386Sopenharmony_ci if (deviceID == 0x0155 || deviceID == 0x0157) { 25cb93a386Sopenharmony_ci return kValleyView_IntelGpuFamily; 26cb93a386Sopenharmony_ci } 27cb93a386Sopenharmony_ci if (deviceID == 0x0152 || deviceID == 0x015A) { 28cb93a386Sopenharmony_ci return kIvyBridge_IntelGpuFamily; 29cb93a386Sopenharmony_ci } 30cb93a386Sopenharmony_ci break; 31cb93a386Sopenharmony_ci case 0x0160: 32cb93a386Sopenharmony_ci return kIvyBridge_IntelGpuFamily; 33cb93a386Sopenharmony_ci default: 34cb93a386Sopenharmony_ci break; 35cb93a386Sopenharmony_ci } 36cb93a386Sopenharmony_ci break; 37cb93a386Sopenharmony_ci case 0x0F00: 38cb93a386Sopenharmony_ci return kValleyView_IntelGpuFamily; 39cb93a386Sopenharmony_ci case 0x0400: 40cb93a386Sopenharmony_ci case 0x0A00: 41cb93a386Sopenharmony_ci case 0x0D00: 42cb93a386Sopenharmony_ci return kHaswell_IntelGpuFamily; 43cb93a386Sopenharmony_ci case 0x2200: 44cb93a386Sopenharmony_ci return kCherryView_IntelGpuFamily; 45cb93a386Sopenharmony_ci case 0x1600: 46cb93a386Sopenharmony_ci return kBroadwell_IntelGpuFamily; 47cb93a386Sopenharmony_ci case 0x5A00: 48cb93a386Sopenharmony_ci return kApolloLake_IntelGpuFamily; 49cb93a386Sopenharmony_ci case 0x1900: 50cb93a386Sopenharmony_ci return kSkyLake_IntelGpuFamily; 51cb93a386Sopenharmony_ci case 0x3100: 52cb93a386Sopenharmony_ci return kGeminiLake_IntelGpuFamily; 53cb93a386Sopenharmony_ci case 0x5900: 54cb93a386Sopenharmony_ci return kKabyLake_IntelGpuFamily; 55cb93a386Sopenharmony_ci case 0x3E00: 56cb93a386Sopenharmony_ci return kCoffeeLake_IntelGpuFamily; 57cb93a386Sopenharmony_ci case 0x8A00: 58cb93a386Sopenharmony_ci return kIceLake_IntelGpuFamily; 59cb93a386Sopenharmony_ci default: 60cb93a386Sopenharmony_ci break; 61cb93a386Sopenharmony_ci } 62cb93a386Sopenharmony_ci return kUnknown_IntelGpuFamily; 63cb93a386Sopenharmony_ci} 64cb93a386Sopenharmony_ci 65cb93a386Sopenharmony_cibool GrIsStrokeHairlineOrEquivalent(const GrStyle& style, 66cb93a386Sopenharmony_ci const SkMatrix& matrix, 67cb93a386Sopenharmony_ci SkScalar* outCoverage) { 68cb93a386Sopenharmony_ci if (style.pathEffect()) { 69cb93a386Sopenharmony_ci return false; 70cb93a386Sopenharmony_ci } 71cb93a386Sopenharmony_ci const SkStrokeRec& stroke = style.strokeRec(); 72cb93a386Sopenharmony_ci if (stroke.isHairlineStyle()) { 73cb93a386Sopenharmony_ci if (outCoverage) { 74cb93a386Sopenharmony_ci *outCoverage = SK_Scalar1; 75cb93a386Sopenharmony_ci } 76cb93a386Sopenharmony_ci return true; 77cb93a386Sopenharmony_ci } 78cb93a386Sopenharmony_ci return stroke.getStyle() == SkStrokeRec::kStroke_Style && 79cb93a386Sopenharmony_ci SkDrawTreatAAStrokeAsHairline(stroke.getWidth(), matrix, outCoverage); 80cb93a386Sopenharmony_ci} 81