| Index: src/core/SkPaint.cpp | 
| diff --git a/src/core/SkPaint.cpp b/src/core/SkPaint.cpp | 
| index 88bde227044a76b702a7a6be0f010b48b0b33928..42144c102992e779fe0b7d883a1f43ab7c18aaaf 100644 | 
| --- a/src/core/SkPaint.cpp | 
| +++ b/src/core/SkPaint.cpp | 
| @@ -1607,19 +1607,33 @@ void SkScalerContext::MakeRec(const SkPaint& paint, | 
|  | 
| rec->fMaskFormat = SkToU8(computeMaskFormat(paint)); | 
|  | 
| -    SkDeviceProperties::Geometry geometry = deviceProperties | 
| -                                          ? deviceProperties->fGeometry | 
| -                                          : SkDeviceProperties::Geometry::MakeDefault(); | 
| if (SkMask::kLCD16_Format == rec->fMaskFormat || SkMask::kLCD32_Format == rec->fMaskFormat) { | 
| -        if (!geometry.isOrientationKnown() || !geometry.isLayoutKnown() || tooBigForLCD(*rec)) { | 
| -            // eeek, can't support LCD | 
| +        if (tooBigForLCD(*rec)) { | 
| rec->fMaskFormat = SkMask::kA8_Format; | 
| +            flags |= SkScalerContext::kGenA8FromLCD_Flag; | 
| } else { | 
| -            if (SkDeviceProperties::Geometry::kVertical_Orientation == geometry.getOrientation()) { | 
| -                flags |= SkScalerContext::kLCD_Vertical_Flag; | 
| -            } | 
| -            if (SkDeviceProperties::Geometry::kBGR_Layout == geometry.getLayout()) { | 
| -                flags |= SkScalerContext::kLCD_BGROrder_Flag; | 
| +            SkPixelGeometry geometry = deviceProperties | 
| +                                     ? deviceProperties->fPixelGeometry | 
| +                                     : SkSurfacePropsDefaultPixelGeometry(); | 
| +            switch (geometry) { | 
| +                case kUnknown_SkPixelGeometry: | 
| +                    // eeek, can't support LCD | 
| +                    rec->fMaskFormat = SkMask::kA8_Format; | 
| +                    flags |= SkScalerContext::kGenA8FromLCD_Flag; | 
| +                    break; | 
| +                case kRGB_H_SkPixelGeometry: | 
| +                    // our default, do nothing. | 
| +                    break; | 
| +                case kBGR_H_SkPixelGeometry: | 
| +                    flags |= SkScalerContext::kLCD_BGROrder_Flag; | 
| +                    break; | 
| +                case kRGB_V_SkPixelGeometry: | 
| +                    flags |= SkScalerContext::kLCD_Vertical_Flag; | 
| +                    break; | 
| +                case kBGR_V_SkPixelGeometry: | 
| +                    flags |= SkScalerContext::kLCD_Vertical_Flag; | 
| +                    flags |= SkScalerContext::kLCD_BGROrder_Flag; | 
| +                    break; | 
| } | 
| } | 
| } | 
| @@ -1650,13 +1664,13 @@ void SkScalerContext::MakeRec(const SkPaint& paint, | 
| rec->setDeviceGamma(SK_GAMMA_EXPONENT); | 
| rec->setPaintGamma(SK_GAMMA_EXPONENT); | 
| } else { | 
| -        rec->setDeviceGamma(deviceProperties->fGamma); | 
| +        rec->setDeviceGamma(deviceProperties->getGamma()); | 
|  | 
| //For now always set the paint gamma equal to the device gamma. | 
| //The math in SkMaskGamma can handle them being different, | 
| //but it requires superluminous masks when | 
| //Ex : deviceGamma(x) < paintGamma(x) and x is sufficiently large. | 
| -        rec->setPaintGamma(deviceProperties->fGamma); | 
| +        rec->setPaintGamma(deviceProperties->getGamma()); | 
| } | 
|  | 
| #ifdef SK_GAMMA_CONTRAST | 
|  |