sl@0: // Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // sl@0: sl@0: #include sl@0: #include "sgdriverimpl.h" sl@0: sl@0: sl@0: TInt SgMinDataStride(TInt aWidth, TUidPixelFormat aPixelFormat) sl@0: { sl@0: switch (aPixelFormat) sl@0: { sl@0: case EUidPixelFormatXRGB_8888: sl@0: case EUidPixelFormatBGRX_8888: sl@0: case EUidPixelFormatXBGR_8888: sl@0: case EUidPixelFormatBGRA_8888: sl@0: case EUidPixelFormatARGB_8888: sl@0: case EUidPixelFormatABGR_8888: sl@0: case EUidPixelFormatARGB_8888_PRE: sl@0: case EUidPixelFormatABGR_8888_PRE: sl@0: case EUidPixelFormatBGRA_8888_PRE: sl@0: case EUidPixelFormatARGB_2101010: sl@0: case EUidPixelFormatABGR_2101010: sl@0: return aWidth * 4; sl@0: case EUidPixelFormatBGR_888: sl@0: case EUidPixelFormatRGB_888: sl@0: return aWidth * 3; sl@0: case EUidPixelFormatRGB_565: sl@0: case EUidPixelFormatBGR_565: sl@0: case EUidPixelFormatARGB_1555: sl@0: case EUidPixelFormatXRGB_1555: sl@0: case EUidPixelFormatARGB_4444: sl@0: case EUidPixelFormatARGB_8332: sl@0: case EUidPixelFormatBGRX_5551: sl@0: case EUidPixelFormatBGRA_5551: sl@0: case EUidPixelFormatBGRA_4444: sl@0: case EUidPixelFormatBGRX_4444: sl@0: case EUidPixelFormatAP_88: sl@0: case EUidPixelFormatXRGB_4444: sl@0: case EUidPixelFormatXBGR_4444: sl@0: return aWidth * 2; sl@0: case EUidPixelFormatRGB_332: sl@0: case EUidPixelFormatA_8: sl@0: case EUidPixelFormatBGR_332: sl@0: case EUidPixelFormatP_8: sl@0: return aWidth; sl@0: case EUidPixelFormatP_4: sl@0: return (aWidth + 1) / 2; sl@0: case EUidPixelFormatP_2: sl@0: return (aWidth + 3) / 4; sl@0: case EUidPixelFormatP_1: sl@0: return (aWidth + 7) / 8; sl@0: default: sl@0: return KErrNotSupported; sl@0: } sl@0: } sl@0: sl@0: sl@0: const TUint32 KSgSupportedConstantSources = ESgUsageDirectGdiSource sl@0: | ESgUsageOpenGlesTexture2D | ESgUsageOpenVgImage | ESgUsageOpenGles2Texture2D | ESgUsageWindowGcSource; sl@0: const TUint32 KSgSupportedCpuSources = ESgUsageDirectGdiSource | ESgUsageCompositionSource sl@0: | ESgUsageOpenGlesTexture2D | ESgUsageOpenVgImage | ESgUsageOpenGles2Texture2D | ESgUsageWindowGcSource; sl@0: const TUint32 KSgSupportedOffScreenSources = ESgUsageDirectGdiSource | ESgUsageCompositionSource | ESgUsageScreenSource sl@0: | ESgUsageOpenGlesTexture2D | ESgUsageOpenVgImage | ESgUsageOpenGles2Texture2D | ESgUsageWindowGcSource; sl@0: sl@0: const TUidPixelFormat KSgSupportedOpaqueTargetFormat = EUidPixelFormatXRGB_8888; sl@0: const TUidPixelFormat KSgSupportedAlphaTargetFormat = EUidPixelFormatARGB_8888_PRE; sl@0: sl@0: #ifdef SYMBIAN_GRAPHICS_USE_NUMA sl@0: const TSgCpuAccess KSgSupportedOffScreenCpuAccess = ESgCpuAccessNone; sl@0: #else sl@0: const TSgCpuAccess KSgSupportedOffScreenCpuAccess = ESgCpuAccessReadWrite; sl@0: #endif sl@0: sl@0: const TSgPixelFormatTableEntry KSgAnyScreenPixelFormatTableEntries[] = sl@0: { sl@0: // Support for constant images sl@0: {EUidPixelFormatRGB_565, KSgSupportedConstantSources, ESgCpuAccessNone, KSgScreenIdAny}, sl@0: {EUidPixelFormatXRGB_8888, KSgSupportedConstantSources, ESgCpuAccessNone, KSgScreenIdAny}, sl@0: {EUidPixelFormatARGB_8888, KSgSupportedConstantSources, ESgCpuAccessNone, KSgScreenIdAny}, sl@0: {EUidPixelFormatARGB_8888_PRE, KSgSupportedConstantSources, ESgCpuAccessNone, KSgScreenIdAny}, sl@0: }; sl@0: sl@0: const TSgPixelFormatTableEntry KSgPerScreenPixelFormatTableEntries[] = sl@0: { sl@0: // Support for CPU rendering sl@0: {EUidPixelFormatRGB_565, KSgSupportedCpuSources, ESgCpuAccessReadWrite, KSgScreenIdMain}, sl@0: {EUidPixelFormatXRGB_8888, KSgSupportedCpuSources, ESgCpuAccessReadWrite, KSgScreenIdMain}, sl@0: {EUidPixelFormatARGB_8888, KSgSupportedCpuSources, ESgCpuAccessReadWrite, KSgScreenIdMain}, sl@0: {EUidPixelFormatARGB_8888_PRE, KSgSupportedCpuSources, ESgCpuAccessReadWrite, KSgScreenIdMain}, sl@0: sl@0: // Support for off-screen rendering sl@0: {KSgSupportedOpaqueTargetFormat, KSgSupportedOffScreenSources|ESgUsageDirectGdiTarget|ESgUsageOpenGlesTarget|ESgUsageOpenGles2Target|ESgUsageOpenVgTarget, KSgSupportedOffScreenCpuAccess, KSgScreenIdMain}, sl@0: {KSgSupportedAlphaTargetFormat, KSgSupportedOffScreenSources|ESgUsageDirectGdiTarget|ESgUsageOpenGlesTarget|ESgUsageOpenGles2Target|ESgUsageOpenVgTarget, KSgSupportedOffScreenCpuAccess, KSgScreenIdMain}, sl@0: {EUidPixelFormatRGB_565, KSgSupportedOffScreenSources|ESgUsageDirectGdiTarget|ESgUsageOpenGlesTarget|ESgUsageOpenGles2Target|ESgUsageOpenVgTarget, KSgSupportedOffScreenCpuAccess, KSgScreenIdMain}, sl@0: sl@0: {KSgSupportedOpaqueTargetFormat, KSgSupportedOffScreenSources|ESgUsageCompositionTarget, KSgSupportedOffScreenCpuAccess, KSgScreenIdMain}, sl@0: {KSgSupportedAlphaTargetFormat, KSgSupportedOffScreenSources|ESgUsageCompositionTarget, KSgSupportedOffScreenCpuAccess, KSgScreenIdMain}, sl@0: {EUidPixelFormatRGB_565, KSgSupportedOffScreenSources|ESgUsageCompositionTarget, KSgSupportedOffScreenCpuAccess, KSgScreenIdMain}, sl@0: sl@0: {KSgSupportedOpaqueTargetFormat, KSgSupportedOffScreenSources|ESgUsageEglCopyBuffersTarget, KSgSupportedOffScreenCpuAccess, KSgScreenIdMain}, sl@0: {KSgSupportedAlphaTargetFormat, KSgSupportedOffScreenSources|ESgUsageEglCopyBuffersTarget, KSgSupportedOffScreenCpuAccess, KSgScreenIdMain}, sl@0: {EUidPixelFormatRGB_565, KSgSupportedOffScreenSources|ESgUsageEglCopyBuffersTarget, KSgSupportedOffScreenCpuAccess, KSgScreenIdMain}, sl@0: }; sl@0: sl@0: sl@0: TInt XSgDriverImpl::ConstructPixelFormatTable() sl@0: { sl@0: TInt numberOfScreens; sl@0: TInt err = HAL::Get(HAL::EDisplayNumberOfScreens, numberOfScreens); sl@0: if (err != KErrNone) sl@0: { sl@0: return err; sl@0: } sl@0: for (TInt i = 0; i < sizeof(KSgAnyScreenPixelFormatTableEntries) / sizeof(TSgPixelFormatTableEntry); ++i) sl@0: { sl@0: RHeap* prevHeap = User::SwitchHeap(iHeap); sl@0: err = iPixelFormatTable.Append(KSgAnyScreenPixelFormatTableEntries[i]); sl@0: User::SwitchHeap(prevHeap); sl@0: if (err != KErrNone) sl@0: { sl@0: return err; sl@0: } sl@0: } sl@0: for (TInt screenId = 0; screenId < numberOfScreens; ++screenId) sl@0: { sl@0: for (TInt i = 0; i < sizeof(KSgPerScreenPixelFormatTableEntries) / sizeof(TSgPixelFormatTableEntry); ++i) sl@0: { sl@0: TSgPixelFormatTableEntry entry = KSgPerScreenPixelFormatTableEntries[i]; sl@0: entry.iScreenId = screenId; sl@0: RHeap* prevHeap = User::SwitchHeap(iHeap); sl@0: err = iPixelFormatTable.Append(entry); sl@0: User::SwitchHeap(prevHeap); sl@0: if (err != KErrNone) sl@0: { sl@0: return err; sl@0: } sl@0: } sl@0: } sl@0: return KErrNone; sl@0: }