|
1 // Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). |
|
2 // All rights reserved. |
|
3 // This component and the accompanying materials are made available |
|
4 // under the terms of "Eclipse Public License v1.0" |
|
5 // which accompanies this distribution, and is available |
|
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
7 // |
|
8 // Initial Contributors: |
|
9 // Nokia Corporation - initial contribution. |
|
10 // |
|
11 // Contributors: |
|
12 // |
|
13 // Description: |
|
14 // |
|
15 |
|
16 /** |
|
17 @file |
|
18 @test |
|
19 */ |
|
20 |
|
21 #include "egltest_surfacescaling.h" |
|
22 |
|
23 #include <test/tefunit.h> // for ASSERT macros |
|
24 #include <test/egltestcommonutils.h> |
|
25 #include "egltestcommoninisettings.h" |
|
26 |
|
27 //We are restricted by the screen comparison utility that requires images to be EColor16MU |
|
28 const TDisplayMode KTestSourceDisplayMode = EColor16MU; |
|
29 |
|
30 CEglTest_SurfaceScalingBase::~CEglTest_SurfaceScalingBase() |
|
31 { |
|
32 CleanAll(); |
|
33 delete iImageComparison; |
|
34 delete iScreenDevice; |
|
35 CloseWindow(); |
|
36 CloseWsSession(); |
|
37 } |
|
38 |
|
39 TVerdict CEglTest_SurfaceScalingBase::doTestStepPreambleL() |
|
40 { |
|
41 TVerdict verdict = CEglTestStep::doTestStepPreambleL(); |
|
42 |
|
43 INFO_PRINTF1(_L("doTestStepPreambleL() - Initialise surface scaling test settings...")); |
|
44 if(!CheckForExtensionL(KEGL_NOK_surface_scaling)) |
|
45 { |
|
46 ERR_PRINTF1(_L("KEGL_NOK_surface_scaling not supported!")); |
|
47 User::Leave(KErrNotSupported); |
|
48 } |
|
49 //retrieve the pointers to the EGL surface scaling extension functions |
|
50 iPfnEglQuerySurfaceScalingCapabilityNOK = reinterpret_cast <TFPtrEglQuerySurfaceScalingCapabilityNok> (eglGetProcAddress("eglQuerySurfaceScalingCapabilityNOK")); |
|
51 iPfnEglSetSurfaceScalingNOK = reinterpret_cast <TFPtrEglSetSurfaceScalingNok> (eglGetProcAddress("eglSetSurfaceScalingNOK")); |
|
52 if(!iPfnEglQuerySurfaceScalingCapabilityNOK) |
|
53 { |
|
54 ERR_PRINTF1(_L(" Cannot retrieve address of the \"eglQuerySurfaceScalingCapabilityNOK\" function")); |
|
55 User::Leave(KErrNotSupported); |
|
56 } |
|
57 if(!iPfnEglSetSurfaceScalingNOK) |
|
58 { |
|
59 ERR_PRINTF1(_L(" Cannot retrieve address of the \"eglSetSurfaceScalingNOK\" function")); |
|
60 User::Leave(KErrNotSupported); |
|
61 } |
|
62 |
|
63 //retrieve surface scaling ini settings |
|
64 CIniData* iniData = CIniData::NewL(KConfigFileName); |
|
65 CleanupStack::PushL(iniData); |
|
66 |
|
67 _LIT(KSectionSurfaceScaling, "SurfaceScaling"); |
|
68 _LIT(KKeyAllScalable, "AllScalable"); |
|
69 |
|
70 TPtrC scalable; |
|
71 if(!iniData->FindVar(KSectionSurfaceScaling,KKeyAllScalable,scalable)) |
|
72 { |
|
73 ERR_PRINTF3(_L(" Cannot retrieve section:%S key:%S"), &KSectionSurfaceScaling, &KKeyAllScalable); |
|
74 User::Leave(KErrNotSupported); |
|
75 } |
|
76 iAllScalable = (scalable.FindF( _L("true"))==KErrNotFound)? EFalse : ETrue; |
|
77 INFO_PRINTF1(_L(" ************************************************************************")); |
|
78 INFO_PRINTF1(_L(" **** The test will be run in following configuration: ")); |
|
79 INFO_PRINTF2(_L(" **** All window surfaces scalable: %S"), &scalable); |
|
80 INFO_PRINTF1(_L(" ************************************************************************")); |
|
81 CleanupStack::PopAndDestroy(iniData); |
|
82 |
|
83 //Initiate a window server session and create a window group |
|
84 OpenWsSessionL(KDefaultWindowGroupId); |
|
85 |
|
86 //Create a Screen Device |
|
87 const TInt screen0 = 0; |
|
88 iScreenDevice = new(ELeave) CWsScreenDevice(iWsSession); |
|
89 User::LeaveIfError(iScreenDevice->Construct(screen0)); |
|
90 |
|
91 // get full screen size |
|
92 TPixelsAndRotation sizeAndRotation; |
|
93 iScreenDevice->GetDefaultScreenSizeAndRotation(sizeAndRotation); |
|
94 iScreenSize = sizeAndRotation.iPixelSize; |
|
95 |
|
96 //Create the image comparison tool from the screen device as required by most tests |
|
97 iImageComparison = CTGraphicsScreenComparison::NewL(*iScreenDevice); |
|
98 |
|
99 return verdict; |
|
100 } |
|
101 |
|
102 TVerdict CEglTest_SurfaceScalingBase::doTestStepPostambleL() |
|
103 { |
|
104 INFO_PRINTF1(_L("doTestStepPostambleL() - Cleaning up")); |
|
105 |
|
106 // cleanup egltest framework stuff |
|
107 CleanAll(); |
|
108 |
|
109 // cleanup member variables |
|
110 delete iImageComparison; |
|
111 iImageComparison = NULL; |
|
112 delete iScreenDevice; |
|
113 iScreenDevice = NULL; |
|
114 |
|
115 // close window and wserver session |
|
116 CloseWindow(); |
|
117 CloseWsSession(); |
|
118 |
|
119 return CEglTestStep::doTestStepPostambleL(); |
|
120 } |
|
121 |
|
122 void CEglTest_SurfaceScalingBase::CreateAndActivateWindowL(const TSize& aWindowSize) |
|
123 { |
|
124 ConstructWindowL(iWindow, aWindowSize); |
|
125 } |
|
126 |
|
127 void CEglTest_SurfaceScalingBase::CloseWindow() |
|
128 { |
|
129 iWindow.Close(); |
|
130 } |
|
131 |
|
132 //check if border color matches with expected values |
|
133 void CEglTest_SurfaceScalingBase::CheckBorderColorL(EGLint aExpectedRedChannelColor, EGLint aExpectedBlueChannelColor, EGLint aExpectedGreenChannelColor) |
|
134 { |
|
135 EGLint value = 0xffff; //set color channel to some arbitrary number |
|
136 ASSERT_EGL_TRUE(eglQuerySurface(iDisplay, iEglSess->Surface(), EGL_BORDER_COLOR_RED_NOK, &value)); |
|
137 ASSERT_EQUALS(value, aExpectedRedChannelColor); |
|
138 |
|
139 value = 0xffff; //set color channel to some arbitrary number |
|
140 ASSERT_EGL_TRUE(eglQuerySurface(iDisplay, iEglSess->Surface(), EGL_BORDER_COLOR_GREEN_NOK, &value)); |
|
141 ASSERT_EQUALS(value, aExpectedGreenChannelColor); |
|
142 |
|
143 value = 0xffff; //set color channel to some arbitrary number |
|
144 ASSERT_EGL_TRUE(eglQuerySurface(iDisplay, iEglSess->Surface(), EGL_BORDER_COLOR_BLUE_NOK, &value)); |
|
145 ASSERT_EQUALS(value, aExpectedBlueChannelColor); |
|
146 } |
|
147 |
|
148 //check if scaling attributes match with expected values |
|
149 void CEglTest_SurfaceScalingBase::CheckScalingAttributesL(EGLint aExpectedSurfaceWidth, EGLint aExpectedSurfaceHeight, EGLint aExpectedExtentWidth, EGLint aExpectedExtentHeight, EGLint aExpectedOffsetX, EGLint aExpectedOffsetY) |
|
150 { |
|
151 EGLint value = 0xffff; //set initial value to some arbitrary number |
|
152 ASSERT_EGL_TRUE(eglQuerySurface(iDisplay, iEglSess->Surface(), EGL_WIDTH, &value)); |
|
153 ASSERT_EQUALS(value, aExpectedSurfaceWidth); |
|
154 |
|
155 value = 0xffff; //set initial value to some arbitrary number |
|
156 ASSERT_EGL_TRUE(eglQuerySurface(iDisplay, iEglSess->Surface(), EGL_HEIGHT, &value)); |
|
157 ASSERT_EQUALS(value, aExpectedSurfaceHeight); |
|
158 |
|
159 value = 0xffff; //set initial value to some arbitrary number |
|
160 ASSERT_EGL_TRUE(eglQuerySurface(iDisplay, iEglSess->Surface(), EGL_TARGET_EXTENT_WIDTH_NOK, &value)); |
|
161 ASSERT_EQUALS(value, aExpectedExtentWidth); |
|
162 |
|
163 value = 0xffff; //set initial value to some arbitrary number |
|
164 ASSERT_EGL_TRUE(eglQuerySurface(iDisplay, iEglSess->Surface(), EGL_TARGET_EXTENT_HEIGHT_NOK, &value)); |
|
165 ASSERT_EQUALS(value, aExpectedExtentHeight); |
|
166 |
|
167 value = 0xffff; //set initial value to some arbitrary number |
|
168 ASSERT_EGL_TRUE(eglQuerySurface(iDisplay, iEglSess->Surface(), EGL_TARGET_EXTENT_OFFSET_X_NOK, &value)); |
|
169 ASSERT_EQUALS(value, aExpectedOffsetX); |
|
170 |
|
171 value = 0xffff; //set initial value to some arbitrary number |
|
172 ASSERT_EGL_TRUE(eglQuerySurface(iDisplay, iEglSess->Surface(), EGL_TARGET_EXTENT_OFFSET_Y_NOK, &value)); |
|
173 ASSERT_EQUALS(value, aExpectedOffsetY); |
|
174 } |
|
175 |
|
176 /* |
|
177 Simple create bitmap function to initialise a rectangular bitmap in four simple colours plus borders |
|
178 --------------------------- |
|
179 ¦ borderTop ¦ |
|
180 ¦ ----------------- ¦ |
|
181 ¦ b. ¦ ¦ ¦ b. ¦ |
|
182 ¦ ¦ 1 ¦ 2 ¦ ¦ |
|
183 ¦ L ¦ ¦ ¦ R ¦ |
|
184 ¦ e ¦--------¦--------¦ i ¦ |
|
185 ¦ f ¦ ¦ ¦ g ¦ |
|
186 ¦ t ¦ 3 ¦ 4 ¦ h ¦ |
|
187 ¦ ¦ ¦ ¦ t ¦ |
|
188 ¦ ----------------- ¦ |
|
189 ¦ borderBottom ¦ |
|
190 --------------------------- |
|
191 */ |
|
192 CFbsBitmap* CEglTest_SurfaceScalingBase::CreateBitmapLC(const TSize& aSize, TInt aBorderTop, TInt aBorderBottom, TInt aBorderLeft, TInt aBorderRight, const TRgb& aBorderColor) |
|
193 { |
|
194 // create the bitmap to the requested size (DisplayMode set to default value) |
|
195 CFbsBitmap* bitmap = new(ELeave) CFbsBitmap(); |
|
196 CleanupStack::PushL(bitmap); |
|
197 User::LeaveIfError(bitmap->Create(aSize,KTestSourceDisplayMode)); |
|
198 TEST(bitmap->SizeInPixels().iHeight == aSize.iHeight); |
|
199 TEST(bitmap->SizeInPixels().iWidth == aSize.iWidth); |
|
200 |
|
201 //Create a device and context for the purpose of generating the bitmap which will be the |
|
202 //master reference used in the test |
|
203 CFbsBitmapDevice* bitmapDevice = CFbsBitmapDevice::NewL(bitmap); |
|
204 CleanupStack::PushL(bitmapDevice); |
|
205 CFbsBitGc* bitmapGc = CFbsBitGc::NewL(); |
|
206 CleanupStack::PushL(bitmapGc); |
|
207 bitmapGc->SetDrawMode(CGraphicsContext::EDrawModePEN); |
|
208 bitmapGc->Activate(bitmapDevice); |
|
209 |
|
210 // First off, set the whole bitmap to the border colour |
|
211 bitmapGc->SetBrushColor(aBorderColor); |
|
212 bitmapGc->SetPenColor(aBorderColor); |
|
213 bitmapGc->SetBrushStyle(CGraphicsContext::ESolidBrush); |
|
214 bitmapGc->DrawRect(aSize); |
|
215 |
|
216 // Set each individual quadrant to a different arbitrary colour |
|
217 const TInt height = aSize.iHeight; |
|
218 const TInt width = aSize.iWidth; |
|
219 const TInt quadrantHeight = (height - aBorderTop - aBorderBottom) / 2; |
|
220 const TInt quadrantWidth = (width - aBorderLeft - aBorderRight) / 2; |
|
221 |
|
222 // quadrant 1 - Colour KRgbMagenta |
|
223 TRect rect = TRect(TPoint(aBorderLeft, aBorderTop), TSize(quadrantWidth, quadrantHeight)); |
|
224 bitmapGc->SetBrushColor(KRgbMagenta); |
|
225 bitmapGc->SetPenColor(KRgbMagenta); |
|
226 bitmapGc->DrawRect(rect); |
|
227 |
|
228 // quadrant 2 - Colour KRgbCyan |
|
229 rect = TRect(TPoint(aBorderLeft+quadrantWidth, aBorderTop), TSize(quadrantWidth, quadrantHeight)); |
|
230 bitmapGc->SetBrushColor(KRgbCyan); |
|
231 bitmapGc->SetPenColor(KRgbCyan); |
|
232 bitmapGc->DrawRect(rect); |
|
233 |
|
234 // quadrant 3 - Colour KRgbYellow |
|
235 rect = TRect(TPoint(aBorderLeft, aBorderTop+quadrantHeight), TSize(quadrantWidth, quadrantHeight)); |
|
236 bitmapGc->SetBrushColor(KRgbYellow); |
|
237 bitmapGc->SetPenColor(KRgbYellow); |
|
238 bitmapGc->DrawRect(rect); |
|
239 |
|
240 // quadrant 4 - Colour KRgbDarkGreen |
|
241 rect = TRect(TPoint(aBorderLeft+quadrantWidth, aBorderTop+quadrantHeight), TSize(quadrantWidth, quadrantHeight)); |
|
242 bitmapGc->SetBrushColor(KRgbDarkGreen); |
|
243 bitmapGc->SetPenColor(KRgbDarkGreen); |
|
244 bitmapGc->DrawRect(rect); |
|
245 |
|
246 //clean-up |
|
247 CleanupStack::PopAndDestroy(2, bitmapDevice); |
|
248 return bitmap; |
|
249 } |
|
250 |
|
251 void CEglTest_SurfaceScalingBase::WritePixelsToSurfaceL(const CFbsBitmap& aBitmap) |
|
252 { |
|
253 // Mind the fact that CFbsBitmap and VGImages use different coordinates origin |
|
254 const TSize bitmapSize = aBitmap.SizeInPixels(); |
|
255 TUint8* address = reinterpret_cast<TUint8*>(aBitmap.DataAddress()); |
|
256 const TInt stride = aBitmap.DataStride(); |
|
257 address += (bitmapSize.iHeight - 1) * stride; |
|
258 |
|
259 // copy pixel data to the drawing surface |
|
260 vgWritePixels(address, -stride, KDefaultSurfaceFormat,0,0, bitmapSize.iWidth, bitmapSize.iHeight); |
|
261 ASSERT_TRUE(vgGetError()==VG_NO_ERROR); |
|
262 |
|
263 // force all outstanding requests on the current context to complete |
|
264 vgFinish(); |
|
265 iWsSession.Finish(); |
|
266 } |
|
267 |
|
268 /** |
|
269 @SYMTestCaseID GRAPHICS-EGL-0651 |
|
270 |
|
271 @SYMTestPriority 1 |
|
272 |
|
273 @SYMPREQ 2676 |
|
274 |
|
275 @SYMREQ 417-56592 |
|
276 |
|
277 @SYMTestCaseDesc |
|
278 Choose a suitable extent to test that specified border colours are correct. |
|
279 |
|
280 @SYMTestActions |
|
281 For a number of different situations, do the following: |
|
282 1. Create a window of known size |
|
283 2. Create a fixed size surface, filled in with a predefined bitmap |
|
284 3. Draw the surface onto the window for a set extent and border colour |
|
285 4. Compare window content and border against a reference bitmap containing expected values. |
|
286 |
|
287 @SYMTestExpectedResults |
|
288 The window content matches the independently created reference bitmap in each situation |
|
289 */ |
|
290 TVerdict CEglTest_SurfaceScaling_Positive::doTestStepL() |
|
291 { |
|
292 SetTestStepID(_L("GRAPHICS-EGL-0651")); |
|
293 SetTestStepName(_L("GRAPHICS-EGL-0651")); |
|
294 INFO_PRINTF1(_L("CEglTest_SurfaceScaling_Positive::doTestStepL started....")); |
|
295 |
|
296 // Create display object |
|
297 GetDisplayL(); |
|
298 CreateEglSessionL(); // initialise EGL Session so we can make use of its helper objects |
|
299 iEglSess->InitializeL(); |
|
300 |
|
301 // NOTE: Borders depend on what you set as extent, offset, window and surface |
|
302 // Care should be taken when choosing size values, better to use even numbers |
|
303 // (CreateBitmap splits rectangle in four, so we don't want a pixel mismatch there) |
|
304 for (TInt index=1; index<=17; index++) |
|
305 { |
|
306 // Set some default values which are used in most cases |
|
307 iWindowWidth = iWindowHeight = 200; |
|
308 iBorderColor = TRgb(0,0,0); |
|
309 iBorderTop = iBorderBottom = iBorderLeft = iBorderRight = 0; |
|
310 |
|
311 switch(index) |
|
312 { |
|
313 case 1: |
|
314 // surface scaled to same window size with no border |
|
315 iSurfaceWidth = 100; iSurfaceHeight = 50; |
|
316 iExtentWidth = 200; iExtentHeight = 200; |
|
317 iOffsetX = 0; iOffsetY = 0; |
|
318 break; |
|
319 case 2: |
|
320 // surface scaled to half the window size with border top |
|
321 iSurfaceWidth = 100; iSurfaceHeight = 50; |
|
322 iExtentWidth = 200; iExtentHeight = 100; |
|
323 iOffsetX = 0; iOffsetY = 100; |
|
324 iBorderColor = TRgb(0,0,0); // arbitrary border colour |
|
325 iBorderTop = 100; |
|
326 break; |
|
327 case 3: |
|
328 // surface scaled to half the window size with border bottom |
|
329 iSurfaceWidth = 100; iSurfaceHeight = 50; |
|
330 iExtentWidth = 200; iExtentHeight = 100; |
|
331 iOffsetX = 0; iOffsetY = 0; |
|
332 iBorderColor = TRgb(128,0,255); // arbitrary border colour |
|
333 iBorderBottom = 100; |
|
334 break; |
|
335 case 4: |
|
336 // surface scaled to half the window size with border top and bottom |
|
337 iSurfaceWidth = 100; iSurfaceHeight = 50; |
|
338 iExtentWidth = 200; iExtentHeight = 100; |
|
339 iOffsetX = 0; iOffsetY = 50; |
|
340 iBorderColor = TRgb(128,0,0); // arbitrary border colour |
|
341 iBorderTop = 50; iBorderBottom = 50; |
|
342 break; |
|
343 case 5: |
|
344 // surface scaled to half the window size with border left |
|
345 iSurfaceWidth = 100; iSurfaceHeight = 50; |
|
346 iExtentWidth = 100; iExtentHeight = 200; |
|
347 iOffsetX = 100; iOffsetY = 0; |
|
348 iBorderColor = TRgb(96,96,96); // arbitrary border colour |
|
349 iBorderLeft = 100; |
|
350 break; |
|
351 case 6: |
|
352 // surface scaled to half the window size with border right |
|
353 iSurfaceWidth = 100; iSurfaceHeight = 50; |
|
354 iExtentWidth = 100; iExtentHeight = 200; |
|
355 iOffsetX = 0; iOffsetY = 0; |
|
356 iBorderColor = TRgb(192,192,192); // arbitrary border colour |
|
357 iBorderRight = 100; |
|
358 break; |
|
359 case 7: |
|
360 // surface scaled to half the window size with border left and right |
|
361 iSurfaceWidth = 100; iSurfaceHeight = 50; |
|
362 iExtentWidth = 100; iExtentHeight = 200; |
|
363 iOffsetX = 50; iOffsetY = 0; |
|
364 iBorderColor = TRgb(0,0,0); // arbitrary border colour |
|
365 iBorderLeft = 50; iBorderRight = 50; |
|
366 break; |
|
367 case 8: |
|
368 // surface scaled in different proportions in width and height, with borders |
|
369 iSurfaceWidth = 100; iSurfaceHeight = 50; |
|
370 iExtentWidth = 190; iExtentHeight = 10; |
|
371 iOffsetX = 5; iOffsetY = 95; |
|
372 iBorderColor = TRgb(240,240,240); // arbitrary border colour |
|
373 iBorderTop = 95; iBorderBottom = 95; iBorderLeft = 5; iBorderRight = 5; |
|
374 break; |
|
375 case 9: |
|
376 // surface scaled to double the window height size, surface cropped with no borders |
|
377 iSurfaceWidth = 100; iSurfaceHeight = 50; |
|
378 iExtentWidth = 400; iExtentHeight = 200; |
|
379 iOffsetX = 0; iOffsetY = 0; |
|
380 break; |
|
381 case 10: |
|
382 // surface scaled to double the window width and height size, surface cropped with no borders |
|
383 iSurfaceWidth = 100; iSurfaceHeight = 50; |
|
384 iExtentWidth = 400; iExtentHeight = 400; |
|
385 iOffsetX = 0; iOffsetY = 0; |
|
386 break; |
|
387 case 11: |
|
388 // surface scaled to double the window width and height size, surface cropped with borders top and left |
|
389 iSurfaceWidth = 100; iSurfaceHeight = 50; |
|
390 iExtentWidth = 400; iExtentHeight = 400; |
|
391 iOffsetX = 100; iOffsetY = 100; |
|
392 iBorderColor = TRgb(255,128,255); // arbitrary border colour |
|
393 iBorderTop = 100; iBorderLeft = 100; |
|
394 break; |
|
395 case 12: |
|
396 // QnHD to full screen size |
|
397 iWindowWidth = iScreenSize.iWidth; iWindowHeight = iScreenSize.iHeight; |
|
398 iSurfaceWidth = 320; iSurfaceHeight = 180; |
|
399 iExtentWidth = iWindowWidth; iExtentHeight = iWindowHeight; |
|
400 iOffsetX = 0; iOffsetY = 0; |
|
401 break; |
|
402 case 13: |
|
403 // QVGA to full screen size |
|
404 iWindowWidth = iScreenSize.iWidth; iWindowHeight = iScreenSize.iHeight; |
|
405 iSurfaceWidth = 320; iSurfaceHeight = 240; |
|
406 iExtentWidth = iWindowWidth; iExtentHeight = iWindowHeight; |
|
407 iOffsetX = 0; iOffsetY = 0; |
|
408 break; |
|
409 case 14: |
|
410 // HVGA to full screen size |
|
411 iWindowWidth = iScreenSize.iWidth; iWindowHeight = iScreenSize.iHeight; |
|
412 iSurfaceWidth = 480; iSurfaceHeight = 320; |
|
413 iExtentWidth = iWindowWidth; iExtentHeight = iWindowHeight; |
|
414 iOffsetX = 0; iOffsetY = 0; |
|
415 break; |
|
416 case 15: |
|
417 // 480x270 to full screen size |
|
418 iWindowWidth = iScreenSize.iWidth; iWindowHeight = iScreenSize.iHeight; |
|
419 iSurfaceWidth = 480; iSurfaceHeight = 270; |
|
420 iExtentWidth = iWindowWidth; iExtentHeight = iWindowHeight; |
|
421 iOffsetX = 0; iOffsetY = 0; |
|
422 break; |
|
423 case 16: |
|
424 // VGA to full screen size |
|
425 iWindowWidth = iScreenSize.iWidth; iWindowHeight = iScreenSize.iHeight; |
|
426 iSurfaceWidth = 640; iSurfaceHeight = 480; |
|
427 iExtentWidth = iWindowWidth; iExtentHeight = iWindowHeight; |
|
428 iOffsetX = 0; iOffsetY = 0; |
|
429 break; |
|
430 case 17: |
|
431 // WVGA to full screen size |
|
432 iWindowWidth = iScreenSize.iWidth; iWindowHeight = iScreenSize.iHeight; |
|
433 iSurfaceWidth = 768; iSurfaceHeight = 480; |
|
434 iExtentWidth = iWindowWidth; iExtentHeight = iWindowHeight; |
|
435 iOffsetX = 0; iOffsetY = 0; |
|
436 break; |
|
437 default: |
|
438 ERR_PRINTF2(_L("Inconsistency in test code, case does not exist: %d."), index); |
|
439 User::Leave(KErrNotSupported); |
|
440 break; |
|
441 } |
|
442 |
|
443 // perform the testing |
|
444 doTestPartialStepL(); |
|
445 } |
|
446 |
|
447 // clean-up |
|
448 CleanAll(); |
|
449 |
|
450 INFO_PRINTF1(_L("....CEglTest_SurfaceScaling_Positive::doTestStepL completed!")); |
|
451 RecordTestResultL(); |
|
452 CloseTMSGraphicsStep(); |
|
453 return TestStepResult(); |
|
454 } |
|
455 |
|
456 TVerdict CEglTest_SurfaceScaling_Positive::doTestPartialStepL() |
|
457 { |
|
458 INFO_PRINTF5(_L("doTestPartialStepL started with (%d,%d) fixed surface scaled to (%d,%d) extent...."), iSurfaceWidth, iSurfaceHeight, iExtentWidth, iExtentHeight); |
|
459 |
|
460 // Establish the connection to the window server and create |
|
461 // a WindowGroup and a Window object |
|
462 CreateAndActivateWindowL(TSize(iWindowWidth, iWindowHeight)); |
|
463 |
|
464 // Choose EGL config |
|
465 EGLConfig matchingConfigs[1]; |
|
466 EGLint numConfigs = 0; |
|
467 |
|
468 ASSERT_EGL_TRUE(eglChooseConfig(iDisplay, KScalingConfigAttribs[EWindowAttribsColor16MU_Scaling], matchingConfigs, 1, &numConfigs)); |
|
469 TESTL(numConfigs == 1); // Abort the test if the EGL config is not supported |
|
470 |
|
471 EGLint attrib_list[] = { |
|
472 EGL_FIXED_WIDTH_NOK, iSurfaceWidth, |
|
473 EGL_FIXED_HEIGHT_NOK, iSurfaceHeight, |
|
474 EGL_TARGET_EXTENT_OFFSET_X_NOK, iOffsetX, |
|
475 EGL_TARGET_EXTENT_OFFSET_Y_NOK, iOffsetY, |
|
476 EGL_TARGET_EXTENT_WIDTH_NOK, iExtentWidth, |
|
477 EGL_TARGET_EXTENT_HEIGHT_NOK, iExtentHeight, |
|
478 EGL_BORDER_COLOR_RED_NOK, iBorderColor.Red(), |
|
479 EGL_BORDER_COLOR_GREEN_NOK, iBorderColor.Green(), |
|
480 EGL_BORDER_COLOR_BLUE_NOK, iBorderColor.Blue(), |
|
481 EGL_NONE}; |
|
482 |
|
483 // Create the window surface and the egl context and make them current |
|
484 iEglSess->CreateWindowSurfaceAndMakeCurrentL(matchingConfigs[0], iWindow, EFalse, EGL_OPENVG_API, 1, attrib_list); |
|
485 |
|
486 // Create the test bitmap that will be used in the scaled surface |
|
487 // NOTE: This bitmap generally does not have borders, |
|
488 CFbsBitmap* testBitmap = CreateBitmapLC(TSize(iSurfaceWidth, iSurfaceHeight),0,0,0,0,TRgb(0,0,0)); |
|
489 |
|
490 // Copy test bitmap to drawing surface |
|
491 WritePixelsToSurfaceL(*testBitmap); |
|
492 |
|
493 //call eglSwapBuffers |
|
494 ASSERT_EGL_TRUE(eglSwapBuffers(iDisplay, iEglSess->Surface())); |
|
495 //Wait for the draw operation to complete |
|
496 eglWaitClient(); |
|
497 |
|
498 // Create the reference bitmap that should be expected after the scaling |
|
499 // NOTE: This bitmap may have borders |
|
500 // Size could exceed that of the window, so check both extent and window |
|
501 const TInt refWidth = iExtentWidth>iWindowWidth ? iExtentWidth : iWindowWidth; |
|
502 const TInt refHeight = iExtentHeight>iWindowHeight ? iExtentHeight : iWindowHeight; |
|
503 CFbsBitmap* refBitmap = CreateBitmapLC(TSize(refWidth, refHeight), iBorderTop, iBorderBottom, iBorderLeft, iBorderRight, iBorderColor); |
|
504 |
|
505 // compare window contents with expected bitmap |
|
506 TInt comparison = iImageComparison->CompareScreenImageL(TSize(iWindowWidth, iWindowHeight), TPoint(0,0), TPoint(0,0), *refBitmap, TestStepName()); |
|
507 TEST(comparison==KErrNone); |
|
508 INFO_PRINTF3(_L("CompareScreenImageL returns %d (expected is %d)"), comparison, KErrNone); |
|
509 |
|
510 /// Cleanup |
|
511 CleanupStack::PopAndDestroy(2, testBitmap); // refBitmap, testBitmap |
|
512 iEglSess->CleanupSurfaceAndContextL(); |
|
513 CloseWindow(); |
|
514 |
|
515 INFO_PRINTF1(_L("....doTestPartialStepL completed!")); |
|
516 return TestStepResult(); |
|
517 } |
|
518 |
|
519 /** |
|
520 @SYMTestCaseID GRAPHICS-EGL-0661 |
|
521 |
|
522 @SYMTestPriority 1 |
|
523 |
|
524 @SYMPREQ 2676 |
|
525 |
|
526 @SYMREQ 417-56592 |
|
527 |
|
528 @SYMTestCaseDesc |
|
529 Resize native window to verify target extent remains fixed. |
|
530 |
|
531 @SYMTestActions |
|
532 1. Create a window of known size |
|
533 2. Create a fixed size surface, filled in with a predefined bitmap |
|
534 3. Draw the surface onto the window for a set extent and border colour |
|
535 4. Repeat step 3 but increasing native window size by (1,1) pixels. |
|
536 5. Compare window content and border against a reference bitmap containing expected values. |
|
537 |
|
538 @SYMTestExpectedResults |
|
539 The window content matches the independently created reference bitmap in each situation |
|
540 */ |
|
541 TVerdict CEglTest_SurfaceScaling_WindowResize::doTestStepL() |
|
542 { |
|
543 SetTestStepID(_L("GRAPHICS-EGL-0661")); |
|
544 SetTestStepName(_L("GRAPHICS-EGL-0661")); |
|
545 INFO_PRINTF1(_L("CEglTest_SurfaceScaling_WindowResize::doTestStepL started....")); |
|
546 |
|
547 // set the initial value of a square window |
|
548 const TInt KWindowSize = 100; |
|
549 |
|
550 // surface with size and extent that matches the window size and no offset |
|
551 iWindowWidth = iWindowHeight = KWindowSize; |
|
552 iSurfaceWidth = iSurfaceHeight = KWindowSize; |
|
553 iExtentWidth = iExtentHeight = KWindowSize; |
|
554 iOffsetX = 0; iOffsetY = 0; |
|
555 iBorderColor = TRgb(0x99,0xcc,0xff); // set some arbitrary colour |
|
556 iBorderTop = 0; iBorderBottom = 0; iBorderLeft = 0; iBorderRight = 0; |
|
557 |
|
558 // Establish the connection to the window server and create |
|
559 // a WindowGroup and a Window object |
|
560 CreateAndActivateWindowL(TSize(iWindowWidth, iWindowHeight)); |
|
561 |
|
562 // Create display object |
|
563 GetDisplayL(); |
|
564 CreateEglSessionL(); // initialise EGL Session so we can make use of its helper objects |
|
565 iEglSess->InitializeL(); |
|
566 |
|
567 // Choose EGL config |
|
568 EGLConfig matchingConfigs[1]; |
|
569 EGLint numConfigs = 0; |
|
570 |
|
571 ASSERT_EGL_TRUE(eglChooseConfig(iDisplay, KScalingConfigAttribs[EWindowAttribsColor16MU_Scaling], matchingConfigs, 1, &numConfigs)); |
|
572 TESTL(numConfigs == 1); // Abort the test if the EGL config is not supported |
|
573 |
|
574 EGLint attrib_list[] = { |
|
575 EGL_FIXED_WIDTH_NOK, iSurfaceWidth, |
|
576 EGL_FIXED_HEIGHT_NOK, iSurfaceHeight, |
|
577 EGL_TARGET_EXTENT_OFFSET_X_NOK, iOffsetX, |
|
578 EGL_TARGET_EXTENT_OFFSET_Y_NOK, iOffsetY, |
|
579 EGL_TARGET_EXTENT_WIDTH_NOK, iExtentWidth, |
|
580 EGL_TARGET_EXTENT_HEIGHT_NOK, iExtentHeight, |
|
581 EGL_BORDER_COLOR_RED_NOK, iBorderColor.Red(), |
|
582 EGL_BORDER_COLOR_GREEN_NOK, iBorderColor.Green(), |
|
583 EGL_BORDER_COLOR_BLUE_NOK, iBorderColor.Blue(), |
|
584 EGL_NONE}; |
|
585 |
|
586 // Create the window surface and the egl context and make them current |
|
587 iEglSess->CreateWindowSurfaceAndMakeCurrentL(matchingConfigs[0], iWindow, EFalse, EGL_OPENVG_API, 1, attrib_list); |
|
588 |
|
589 // Create the test bitmap that will be used in the scaled surface |
|
590 // NOTE: This bitmap generally does not have borders, |
|
591 CFbsBitmap* testBitmap = CreateBitmapLC(TSize(iSurfaceWidth, iSurfaceHeight),0,0,0,0,TRgb(0,0,0)); |
|
592 |
|
593 // Copy test bitmap to drawing surface |
|
594 WritePixelsToSurfaceL(*testBitmap); |
|
595 |
|
596 // Start doing iterations by increasing native window size. |
|
597 INFO_PRINTF1(_L("Start increasing native window size by (1,1)...")); |
|
598 iWindowWidth=1; |
|
599 iWindowHeight=1; |
|
600 while(iWindowWidth<=(KWindowSize*2) && iWindowHeight<=(KWindowSize*2)) |
|
601 { |
|
602 // Note that borders will appear while window size is bigger than extent |
|
603 // - iSurfaceWidth/iSurfaceHeight - unmodified |
|
604 // - iExtentWidth/iExtentHeight - unmodified |
|
605 // - iOffsetX/iOffsetY - unmodified |
|
606 // Set up expected values for the border |
|
607 iBorderTop = 0; iBorderLeft = 0; |
|
608 iBorderBottom = iExtentHeight<iWindowHeight ? iWindowHeight-iExtentHeight : 0; |
|
609 iBorderRight = iExtentWidth<iWindowWidth ? iWindowWidth-iExtentWidth : 0; |
|
610 |
|
611 // resize window to new given size |
|
612 iWindow.Invalidate(); |
|
613 iWindow.BeginRedraw(); |
|
614 iWindow.SetSize(TSize(iWindowWidth, iWindowHeight)); |
|
615 iWindow.EndRedraw(); |
|
616 |
|
617 // re-populate buffers with the unmodified fixed size surface content |
|
618 WritePixelsToSurfaceL(*testBitmap); |
|
619 |
|
620 // perform the testing |
|
621 doTestPartialStepL(); |
|
622 ++iWindowWidth; |
|
623 ++iWindowHeight; |
|
624 } |
|
625 |
|
626 /// Cleanup |
|
627 CleanupStack::PopAndDestroy(testBitmap); |
|
628 iEglSess->CleanupSurfaceAndContextL(); |
|
629 CleanAll(); |
|
630 CloseWindow(); |
|
631 |
|
632 INFO_PRINTF1(_L("....CEglTest_SurfaceScaling_WindowResize::doTestStepL completed!")); |
|
633 RecordTestResultL(); |
|
634 CloseTMSGraphicsStep(); |
|
635 return TestStepResult(); |
|
636 } |
|
637 |
|
638 TVerdict CEglTest_SurfaceScaling_WindowResize::doTestPartialStepL() |
|
639 { |
|
640 INFO_PRINTF3(_L("doTestPartialStepL started for native window size of (%d, %d)...."), iWindowWidth, iWindowHeight); |
|
641 |
|
642 // resize may be effective only after swapbuffers |
|
643 ASSERT_EGL_TRUE(eglSwapBuffers(iDisplay, iEglSess->Surface())); |
|
644 ASSERT_EGL_TRUE(eglWaitClient()); |
|
645 |
|
646 //check all expected values |
|
647 CheckScalingAttributesL(iSurfaceWidth, iSurfaceHeight, iExtentWidth, iExtentHeight, iOffsetX, iOffsetY); |
|
648 CheckBorderColorL(iBorderColor.Red(), iBorderColor.Blue(), iBorderColor.Green()); |
|
649 |
|
650 // Create the reference bitmap that should be expected after the window resize |
|
651 // NOTE: This bitmap may have borders |
|
652 // Size could exceed that of the window, so check both extent and window |
|
653 const TInt refWidth = iExtentWidth>iWindowWidth ? iExtentWidth : iWindowWidth; |
|
654 const TInt refHeight = iExtentHeight>iWindowHeight ? iExtentHeight : iWindowHeight; |
|
655 CFbsBitmap* refBitmap = CreateBitmapLC(TSize(refWidth, refHeight), iBorderTop, iBorderBottom, iBorderLeft, iBorderRight, iBorderColor); |
|
656 |
|
657 // compare window contents with expected bitmap |
|
658 TInt comparison = iImageComparison->CompareScreenImageL(TSize(iWindowWidth, iWindowHeight), TPoint(0,0), TPoint(0,0), *refBitmap, TestStepName()); |
|
659 TEST(comparison==KErrNone); |
|
660 INFO_PRINTF3(_L("CompareScreenImageL returns %d (expected is %d)"), comparison, KErrNone); |
|
661 |
|
662 /// Cleanup |
|
663 CleanupStack::PopAndDestroy(refBitmap); |
|
664 |
|
665 return TestStepResult(); |
|
666 } |
|
667 |
|
668 /** |
|
669 @SYMTestCaseID GRAPHICS-EGL-0668 |
|
670 |
|
671 @SYMTestPriority 1 |
|
672 |
|
673 @SYMPREQ 2676 |
|
674 |
|
675 @SYMREQ 417-56592 |
|
676 |
|
677 @SYMTestCaseDesc |
|
678 Create a fixed size surface and vary the extent position for a range of values. |
|
679 |
|
680 @SYMTestActions |
|
681 1. Create a window of known size |
|
682 2. Create a fixed size surface, filled in with a predefined bitmap |
|
683 3. Draw the surface onto the window for a set extent and border colour |
|
684 4. Repeat step 3 but increasing target extent offset by (1,1) pixels. |
|
685 5. Compare window content and border against a reference bitmap containing expected values. |
|
686 |
|
687 @SYMTestExpectedResults |
|
688 The window content matches the independently created reference bitmap in each situation |
|
689 */ |
|
690 TVerdict CEglTest_SurfaceScaling_ExtentPositionChange::doTestStepL() |
|
691 { |
|
692 SetTestStepID(_L("GRAPHICS-EGL-0668")); |
|
693 SetTestStepName(_L("GRAPHICS-EGL-0668")); |
|
694 INFO_PRINTF1(_L("CEglTest_SurfaceScaling_ExtentPositionChange::doTestStepL started....")); |
|
695 |
|
696 // surface with size and extent that matches the window size and no offset |
|
697 iWindowWidth = iWindowHeight = 100; |
|
698 iSurfaceWidth = iExtentWidth = iWindowWidth; |
|
699 iSurfaceHeight = iExtentHeight = iWindowHeight; |
|
700 iOffsetX = 0; iOffsetY = 0; |
|
701 iBorderColor = TRgb(0x11,0x22,0x33); // set some arbitrary colour |
|
702 iBorderTop = 0; iBorderBottom = 0; iBorderLeft = 0; iBorderRight = 0; |
|
703 |
|
704 // Establish the connection to the window server and create |
|
705 // a WindowGroup and a Window object |
|
706 CreateAndActivateWindowL(TSize(iWindowWidth, iWindowHeight)); |
|
707 |
|
708 // Create display object |
|
709 GetDisplayL(); |
|
710 CreateEglSessionL(); // initialise EGL Session so we can make use of its helper objects |
|
711 iEglSess->InitializeL(); |
|
712 |
|
713 // Choose EGL config |
|
714 EGLConfig matchingConfigs[1]; |
|
715 EGLint numConfigs = 0; |
|
716 |
|
717 ASSERT_EGL_TRUE(eglChooseConfig(iDisplay, KScalingConfigAttribs[EWindowAttribsColor16MU_Scaling], matchingConfigs, 1, &numConfigs)); |
|
718 TESTL(numConfigs == 1); // Abort the test if the EGL config is not supported |
|
719 |
|
720 EGLint attrib_list[] = { |
|
721 EGL_FIXED_WIDTH_NOK, iSurfaceWidth, |
|
722 EGL_FIXED_HEIGHT_NOK, iSurfaceHeight, |
|
723 EGL_TARGET_EXTENT_OFFSET_X_NOK, iOffsetX, |
|
724 EGL_TARGET_EXTENT_OFFSET_Y_NOK, iOffsetY, |
|
725 EGL_TARGET_EXTENT_WIDTH_NOK, iExtentWidth, |
|
726 EGL_TARGET_EXTENT_HEIGHT_NOK, iExtentHeight, |
|
727 EGL_BORDER_COLOR_RED_NOK, iBorderColor.Red(), |
|
728 EGL_BORDER_COLOR_GREEN_NOK, iBorderColor.Green(), |
|
729 EGL_BORDER_COLOR_BLUE_NOK, iBorderColor.Blue(), |
|
730 EGL_NONE}; |
|
731 |
|
732 // Create the window surface and the egl context and make them current |
|
733 iEglSess->CreateWindowSurfaceAndMakeCurrentL(matchingConfigs[0], iWindow, EFalse, EGL_OPENVG_API, 1, attrib_list); |
|
734 |
|
735 // Create the test bitmap that will be used in the scaled surface |
|
736 // NOTE: This bitmap generally does not have borders, |
|
737 CFbsBitmap* testBitmap = CreateBitmapLC(TSize(iSurfaceWidth, iSurfaceHeight),0,0,0,0,TRgb(0,0,0)); |
|
738 |
|
739 // Copy test bitmap to drawing surface |
|
740 WritePixelsToSurfaceL(*testBitmap); |
|
741 |
|
742 // This test is a bit different. Since the extent remains the same, and we only change |
|
743 // the offset, we create an oversized reference bitmap and compare the screen with a |
|
744 // region contained within the reference bitmap |
|
745 // Size is three times the extent so that it has extent size borders all around |
|
746 const TInt refWidth = 3*iExtentWidth; |
|
747 const TInt refHeight = 3*iExtentHeight; |
|
748 iBorderTop=iBorderBottom=iBorderLeft=iBorderRight=iExtentWidth; |
|
749 CFbsBitmap* refBitmap = CreateBitmapLC(TSize(refWidth, refHeight), iBorderTop, iBorderBottom, iBorderLeft, iBorderRight, iBorderColor); |
|
750 |
|
751 // Start doing iterations by increasing target extent offset |
|
752 INFO_PRINTF1(_L("Start increasing target extent offset size by (1,1)...")); |
|
753 for (iOffsetX=-iExtentWidth,iOffsetY=-iExtentHeight; iOffsetX<=iExtentWidth&&iOffsetY<=iExtentHeight; ++iOffsetX,++iOffsetY) |
|
754 { |
|
755 // Note that borders will appear other than when offset is (0,0) |
|
756 // - iSurfaceWidth/iSurfaceHeight - unmodified |
|
757 // - iExtentWidth/iExtentHeight - unmodified |
|
758 |
|
759 // set new offset values |
|
760 ASSERT_EGL_TRUE(iPfnEglSetSurfaceScalingNOK(iDisplay, iEglSess->Surface(), iOffsetX, iOffsetY, iExtentWidth, iExtentHeight)); |
|
761 |
|
762 // re-populate buffers with the unmodified fixed size surface content |
|
763 WritePixelsToSurfaceL(*testBitmap); |
|
764 |
|
765 // perform the testing |
|
766 doTestPartialStepL(*refBitmap); |
|
767 } |
|
768 |
|
769 /// Cleanup |
|
770 CleanupStack::PopAndDestroy(2, testBitmap); //testBitmap, refBitmap |
|
771 iEglSess->CleanupSurfaceAndContextL(); |
|
772 CleanAll(); |
|
773 CloseWindow(); |
|
774 |
|
775 INFO_PRINTF1(_L("....CEglTest_SurfaceScaling_ExtentPositionChange::doTestStepL completed!")); |
|
776 RecordTestResultL(); |
|
777 CloseTMSGraphicsStep(); |
|
778 return TestStepResult(); |
|
779 } |
|
780 |
|
781 TVerdict CEglTest_SurfaceScaling_ExtentPositionChange::doTestPartialStepL(const CFbsBitmap& aRefBitmap) |
|
782 { |
|
783 INFO_PRINTF3(_L("doTestPartialStepL started for offset of (%d, %d)...."), iOffsetX, iOffsetY); |
|
784 |
|
785 // offset change may be effective only after swapbuffers |
|
786 ASSERT_EGL_TRUE(eglSwapBuffers(iDisplay, iEglSess->Surface())); |
|
787 ASSERT_EGL_TRUE(eglWaitClient()); |
|
788 // Finish() to ensure all native window operations related to the surface complete before image comparision. |
|
789 iWsSession.Finish(); |
|
790 |
|
791 //check all expected values |
|
792 CheckScalingAttributesL(iSurfaceWidth, iSurfaceHeight, iExtentWidth, iExtentHeight, iOffsetX, iOffsetY); |
|
793 CheckBorderColorL(iBorderColor.Red(), iBorderColor.Blue(), iBorderColor.Green()); |
|
794 |
|
795 // Prepare the offset of the reference bitmap to know what sub-region should be compared |
|
796 const TInt refWidth = 3*iExtentWidth; |
|
797 const TInt refHeight = 3*iExtentHeight; |
|
798 TPoint bitmapOffset(refWidth-iExtentWidth-iRefBitmapOffset, refHeight-iExtentHeight-iRefBitmapOffset); |
|
799 iRefBitmapOffset++; // increase offset for next iteration |
|
800 |
|
801 // Comparision takes into account specific region within the reference bitmap |
|
802 TInt comparison = iImageComparison->CompareScreenImageL(TSize(iWindowWidth, iWindowHeight), TPoint(0,0), bitmapOffset, aRefBitmap, TestStepName()); |
|
803 TEST(comparison==KErrNone); |
|
804 INFO_PRINTF3(_L("CompareScreenImageL returns %d (expected is %d)"), comparison, KErrNone); |
|
805 |
|
806 return TestStepResult(); |
|
807 } |
|
808 |
|
809 /** |
|
810 @SYMTestCaseID GRAPHICS-EGL-0669 |
|
811 |
|
812 @SYMTestPriority 1 |
|
813 |
|
814 @SYMPREQ 2676 |
|
815 |
|
816 @SYMREQ 417-56592 |
|
817 |
|
818 @SYMTestCaseDesc |
|
819 Create a fixed size surface and vary the extent size for a range of values |
|
820 |
|
821 @SYMTestActions |
|
822 1. Create a window of known size |
|
823 2. Create a fixed size surface, filled in with a predefined bitmap |
|
824 3. Draw the surface onto the window for a set extent and border colour |
|
825 4. Repeat step 3 but increasing target extent size by (2,2) pixels. |
|
826 5. Compare window content and border against a reference bitmap containing expected values. |
|
827 |
|
828 @SYMTestExpectedResults |
|
829 The window content matches the independently created reference bitmap in each situation |
|
830 */ |
|
831 TVerdict CEglTest_SurfaceScaling_ExtentSizeChange::doTestStepL() |
|
832 { |
|
833 SetTestStepID(_L("GRAPHICS-EGL-0669")); |
|
834 SetTestStepName(_L("GRAPHICS-EGL-0669")); |
|
835 INFO_PRINTF1(_L("CEglTest_SurfaceScaling_ExtentSizeChange::doTestStepL started....")); |
|
836 |
|
837 // set the initial value of a square window |
|
838 const TInt KWindowSize = 100; |
|
839 |
|
840 // surface with size and extent that matches the window size and no offset |
|
841 iWindowWidth = iWindowHeight = KWindowSize; |
|
842 iSurfaceWidth = iSurfaceHeight = KWindowSize; |
|
843 iExtentWidth = iExtentHeight = KWindowSize; |
|
844 iOffsetX = 0; iOffsetY = 0; |
|
845 iBorderColor = TRgb(0x80,0x40,0xF0); // set some arbitrary colour |
|
846 iBorderTop = 0; iBorderBottom = 0; iBorderLeft = 0; iBorderRight = 0; |
|
847 |
|
848 // Establish the connection to the window server and create |
|
849 // a WindowGroup and a Window object |
|
850 CreateAndActivateWindowL(TSize(iWindowWidth, iWindowHeight)); |
|
851 |
|
852 // Create display object |
|
853 GetDisplayL(); |
|
854 CreateEglSessionL(); // initialise EGL Session so we can make use of its helper objects |
|
855 iEglSess->InitializeL(); |
|
856 |
|
857 // Choose EGL config |
|
858 EGLConfig matchingConfigs[1]; |
|
859 EGLint numConfigs = 0; |
|
860 |
|
861 ASSERT_EGL_TRUE(eglChooseConfig(iDisplay, KScalingConfigAttribs[EWindowAttribsColor16MU_Scaling], matchingConfigs, 1, &numConfigs)); |
|
862 TESTL(numConfigs == 1); // Abort the test if the EGL config is not supported |
|
863 |
|
864 EGLint attrib_list[] = { |
|
865 EGL_FIXED_WIDTH_NOK, iSurfaceWidth, |
|
866 EGL_FIXED_HEIGHT_NOK, iSurfaceHeight, |
|
867 EGL_TARGET_EXTENT_OFFSET_X_NOK, iOffsetX, |
|
868 EGL_TARGET_EXTENT_OFFSET_Y_NOK, iOffsetY, |
|
869 EGL_TARGET_EXTENT_WIDTH_NOK, iExtentWidth, |
|
870 EGL_TARGET_EXTENT_HEIGHT_NOK, iExtentHeight, |
|
871 EGL_BORDER_COLOR_RED_NOK, iBorderColor.Red(), |
|
872 EGL_BORDER_COLOR_GREEN_NOK, iBorderColor.Green(), |
|
873 EGL_BORDER_COLOR_BLUE_NOK, iBorderColor.Blue(), |
|
874 EGL_NONE}; |
|
875 |
|
876 // Create the window surface and the egl context and make them current |
|
877 iEglSess->CreateWindowSurfaceAndMakeCurrentL(matchingConfigs[0], iWindow, EFalse, EGL_OPENVG_API, 1, attrib_list); |
|
878 |
|
879 // Create the test bitmap that will be used in the scaled surface |
|
880 // NOTE: This bitmap generally does not have borders, |
|
881 CFbsBitmap* testBitmap = CreateBitmapLC(TSize(iSurfaceWidth, iSurfaceHeight),0,0,0,0,TRgb(0,0,0)); |
|
882 |
|
883 // Copy test bitmap to drawing surface |
|
884 WritePixelsToSurfaceL(*testBitmap); |
|
885 |
|
886 // Start doing iterations by increasing target extent size |
|
887 // We do increments of (2,2) because the reference bitmap is simetrically split into 4 areas, so size |
|
888 // of this reference bitmap should be an even number of pixels |
|
889 INFO_PRINTF1(_L("Start increasing target extent size by (2,2)...")); |
|
890 iExtentWidth=2; |
|
891 iExtentHeight=2; |
|
892 while(iExtentWidth <= (KWindowSize*2) && iExtentHeight <= (KWindowSize*2)) |
|
893 { |
|
894 // Note that borders will appear while extent is smaller than window |
|
895 // - iSurfaceWidth/iSurfaceHeight - unmodified |
|
896 // - iOffsetX/iOffsetY - unmodified |
|
897 // Set up expected values for the border |
|
898 iBorderTop = 0; iBorderLeft = 0; |
|
899 iBorderBottom = iExtentHeight<iWindowHeight ? iWindowHeight-iExtentHeight : 0; |
|
900 iBorderRight = iExtentWidth<iWindowWidth ? iWindowWidth-iExtentWidth : 0; |
|
901 |
|
902 // set new target extent values |
|
903 ASSERT_EGL_TRUE(iPfnEglSetSurfaceScalingNOK(iDisplay, iEglSess->Surface(), iOffsetX, iOffsetY, iExtentWidth, iExtentHeight)); |
|
904 |
|
905 // re-populate buffers with the unmodified fixed size surface content |
|
906 WritePixelsToSurfaceL(*testBitmap); |
|
907 |
|
908 // perform the testing |
|
909 doTestPartialStepL(); |
|
910 iExtentWidth+=2; |
|
911 iExtentHeight+=2; |
|
912 } |
|
913 |
|
914 /// Cleanup |
|
915 CleanupStack::PopAndDestroy(testBitmap); |
|
916 iEglSess->CleanupSurfaceAndContextL(); |
|
917 CleanAll(); |
|
918 CloseWindow(); |
|
919 |
|
920 INFO_PRINTF1(_L("....CEglTest_SurfaceScaling_ExtentSizeChange::doTestStepL completed!")); |
|
921 RecordTestResultL(); |
|
922 CloseTMSGraphicsStep(); |
|
923 return TestStepResult(); |
|
924 } |
|
925 |
|
926 TVerdict CEglTest_SurfaceScaling_ExtentSizeChange::doTestPartialStepL() |
|
927 { |
|
928 INFO_PRINTF3(_L("doTestPartialStepL started for extent size of (%d, %d)...."), iExtentWidth, iExtentHeight); |
|
929 |
|
930 // extent change may be effective only after swapbuffers |
|
931 ASSERT_EGL_TRUE(eglSwapBuffers(iDisplay, iEglSess->Surface())); |
|
932 ASSERT_EGL_TRUE(eglWaitClient()); |
|
933 // Finish() to ensure all native window operations related to the surface complete before image comparision. |
|
934 iWsSession.Finish(); |
|
935 |
|
936 //check all expected values |
|
937 CheckScalingAttributesL(iSurfaceWidth, iSurfaceHeight, iExtentWidth, iExtentHeight, iOffsetX, iOffsetY); |
|
938 CheckBorderColorL(iBorderColor.Red(), iBorderColor.Blue(), iBorderColor.Green()); |
|
939 |
|
940 // Create the reference bitmap that should be expected after the window resize |
|
941 // NOTE: This bitmap may have borders |
|
942 // Size could exceed that of the window, so check both extent and window |
|
943 const TInt refWidth = iExtentWidth>iWindowWidth ? iExtentWidth : iWindowWidth; |
|
944 const TInt refHeight = iExtentHeight>iWindowHeight ? iExtentHeight : iWindowHeight; |
|
945 CFbsBitmap* refBitmap = CreateBitmapLC(TSize(refWidth, refHeight), iBorderTop, iBorderBottom, iBorderLeft, iBorderRight, iBorderColor); |
|
946 |
|
947 // compare window contents with expected bitmap |
|
948 TInt comparison = iImageComparison->CompareScreenImageL(TSize(iWindowWidth, iWindowHeight), TPoint(0,0), TPoint(0,0), *refBitmap, TestStepName()); |
|
949 TEST(comparison==KErrNone); |
|
950 INFO_PRINTF3(_L("CompareScreenImageL returns %d (expected is %d)"), comparison, KErrNone); |
|
951 |
|
952 /// Cleanup |
|
953 CleanupStack::PopAndDestroy(refBitmap); |
|
954 |
|
955 return TestStepResult(); |
|
956 } |
|
957 |
|
958 /** |
|
959 @SYMTestCaseID GRAPHICS-EGL-0670 |
|
960 |
|
961 @SYMTestPriority 1 |
|
962 |
|
963 @SYMPREQ 2676 |
|
964 |
|
965 @SYMREQ 417-56592 |
|
966 |
|
967 @SYMTestCaseDesc |
|
968 Check that updating surface scaling attributes is visible only after calling eglSwapBuffers |
|
969 |
|
970 @SYMTestActions |
|
971 1. Create a window of known size |
|
972 2. Create a fixed size surface, filled in with a predefined bitmap |
|
973 3. Draw the surface onto the window for a set extent and border colour |
|
974 4. Repeat step 3 but increasing target extent size and changing border colours |
|
975 5. Compare window content and border against a reference bitmap containing expected values |
|
976 5a. Before calling eglSwapBuffers |
|
977 5b. After callnig eglSwapBuffers |
|
978 |
|
979 @SYMTestExpectedResults |
|
980 5a. The window content matches the independently created reference with old values |
|
981 5b. The window content matches the independently created reference with new values |
|
982 */ |
|
983 TVerdict CEglTest_SurfaceScaling_SwapBuffers::doTestStepL() |
|
984 { |
|
985 SetTestStepID(_L("GRAPHICS-EGL-0670")); |
|
986 SetTestStepName(_L("GRAPHICS-EGL-0670")); |
|
987 INFO_PRINTF1(_L("CEglTest_SurfaceScaling_SwapBuffers::doTestStepL started....")); |
|
988 |
|
989 // set the initial value of a square window |
|
990 const TInt KWindowSize = 200; |
|
991 |
|
992 // surface with size that matches the window size and no offset and extent a quarter |
|
993 // of that originally positioned in the middle (so borders should be seen) |
|
994 iWindowWidth = iWindowHeight = KWindowSize; |
|
995 iSurfaceWidth = iSurfaceHeight = KWindowSize; |
|
996 iExtentWidth = iExtentHeight = KWindowSize/4; |
|
997 iOffsetX = (iWindowWidth-iExtentWidth)/2; iOffsetY = (iWindowHeight-iExtentHeight)/2; // to center the surface at the middle of the window |
|
998 iBorderColor = TRgb(0xFF,0xFF,0x00); // set some arbitrary colour with blue channel to 0x00 |
|
999 iBorderTop = iBorderBottom = iExtentHeight<iWindowHeight ? (iWindowHeight-iExtentHeight)/2 : 0; |
|
1000 iBorderLeft = iBorderRight = iExtentWidth<iWindowWidth ? (iWindowWidth-iExtentWidth)/2 : 0; |
|
1001 |
|
1002 // Establish the connection to the window server and create |
|
1003 // a WindowGroup and a Window object |
|
1004 CreateAndActivateWindowL(TSize(iWindowWidth, iWindowHeight)); |
|
1005 |
|
1006 // Create display object |
|
1007 GetDisplayL(); |
|
1008 CreateEglSessionL(); // initialise EGL Session so we can make use of its helper objects |
|
1009 iEglSess->InitializeL(); |
|
1010 |
|
1011 // Choose EGL config |
|
1012 EGLConfig matchingConfigs[1]; |
|
1013 EGLint numConfigs = 0; |
|
1014 |
|
1015 ASSERT_EGL_TRUE(eglChooseConfig(iDisplay, KScalingConfigAttribs[EWindowAttribsColor16MU_Scaling], matchingConfigs, 1, &numConfigs)); |
|
1016 TESTL(numConfigs == 1); // Abort the test if the EGL config is not supported |
|
1017 |
|
1018 EGLint attrib_list[] = { |
|
1019 EGL_FIXED_WIDTH_NOK, iSurfaceWidth, |
|
1020 EGL_FIXED_HEIGHT_NOK, iSurfaceHeight, |
|
1021 EGL_TARGET_EXTENT_OFFSET_X_NOK, iOffsetX, |
|
1022 EGL_TARGET_EXTENT_OFFSET_Y_NOK, iOffsetY, |
|
1023 EGL_TARGET_EXTENT_WIDTH_NOK, iExtentWidth, |
|
1024 EGL_TARGET_EXTENT_HEIGHT_NOK, iExtentHeight, |
|
1025 EGL_BORDER_COLOR_RED_NOK, iBorderColor.Red(), |
|
1026 EGL_BORDER_COLOR_GREEN_NOK, iBorderColor.Green(), |
|
1027 EGL_BORDER_COLOR_BLUE_NOK, iBorderColor.Blue(), |
|
1028 EGL_NONE}; |
|
1029 |
|
1030 // Create the window surface and the egl context and make them current |
|
1031 iEglSess->CreateWindowSurfaceAndMakeCurrentL(matchingConfigs[0], iWindow, EFalse, EGL_OPENVG_API, 1, attrib_list); |
|
1032 |
|
1033 // Create the test bitmap that will be used in the scaled surface |
|
1034 // NOTE: This bitmap generally does not have borders, |
|
1035 CFbsBitmap* testBitmap = CreateBitmapLC(TSize(iSurfaceWidth, iSurfaceHeight),0,0,0,0,TRgb(0,0,0)); |
|
1036 |
|
1037 // Copy test bitmap to drawing surface |
|
1038 WritePixelsToSurfaceL(*testBitmap); |
|
1039 |
|
1040 // we need to update the window content for the first frame comparison inside the loop further down |
|
1041 ASSERT_EGL_TRUE(eglSwapBuffers(iDisplay, iEglSess->Surface())); |
|
1042 ASSERT_EGL_TRUE(eglWaitClient()); |
|
1043 |
|
1044 // Start doing iterations changing border colours and increasing target extent size |
|
1045 // We do increments of (2,2) because the reference bitmap is simetrically split into 4 areas, so size |
|
1046 // of this reference bitmap should be an even number of pixels |
|
1047 INFO_PRINTF1(_L("Start changing border colours and increasing target extent size by (2,2)...")); |
|
1048 for (;;) |
|
1049 { |
|
1050 // re-populate buffers with the unmodified fixed size surface content |
|
1051 WritePixelsToSurfaceL(*testBitmap); |
|
1052 |
|
1053 // perform the testing |
|
1054 doTestPartialStepL(); |
|
1055 |
|
1056 // break the loop when necessary |
|
1057 if (iBorderColor.Blue()>=255) |
|
1058 break; |
|
1059 } |
|
1060 |
|
1061 /// Cleanup |
|
1062 CleanupStack::PopAndDestroy(testBitmap); |
|
1063 iEglSess->CleanupSurfaceAndContextL(); |
|
1064 CleanAll(); |
|
1065 CloseWindow(); |
|
1066 |
|
1067 INFO_PRINTF1(_L("....CEglTest_SurfaceScaling_SwapBuffers::doTestStepL completed!")); |
|
1068 RecordTestResultL(); |
|
1069 CloseTMSGraphicsStep(); |
|
1070 return TestStepResult(); |
|
1071 } |
|
1072 |
|
1073 TVerdict CEglTest_SurfaceScaling_SwapBuffers::doTestPartialStepL() |
|
1074 { |
|
1075 INFO_PRINTF4(_L("doTestPartialStepL started for border colour (%d,%d,%d)...."), iBorderColor.Red(), iBorderColor.Green(), iBorderColor.Blue()); |
|
1076 |
|
1077 // Note that borders will appear while extent is smaller than window |
|
1078 // - iSurfaceWidth/iSurfaceHeight - unmodified |
|
1079 // - iExtentWidth/iExtentHeight - modified |
|
1080 // - iOffsetX/iOffsetY - modified |
|
1081 |
|
1082 // Set up new value for border blue channel, storing old ones |
|
1083 TRgb oldBorderColor(iBorderColor); |
|
1084 TInt newColorBlue = oldBorderColor.Blue() + 5; |
|
1085 TESTL(newColorBlue>=0 && newColorBlue<=255); |
|
1086 iBorderColor.SetBlue(newColorBlue); |
|
1087 |
|
1088 // Set up new values for extent/offset, storing old ones |
|
1089 TInt oldExtentWidth = iExtentWidth; |
|
1090 TInt oldExtentHeight = iExtentHeight; |
|
1091 iExtentWidth+=2; |
|
1092 iExtentHeight+=2; |
|
1093 iOffsetX = (iWindowWidth-iExtentWidth)/2; |
|
1094 iOffsetY = (iWindowHeight-iExtentHeight)/2; |
|
1095 |
|
1096 // Set up expected values for the border, storing old ones |
|
1097 TInt oldBorderTop = iBorderTop; |
|
1098 TInt oldBorderBottom = iBorderBottom; |
|
1099 TInt oldBorderLeft = iBorderLeft; |
|
1100 TInt oldBorderRight = iBorderRight; |
|
1101 iBorderTop = iBorderBottom = iExtentHeight<iWindowHeight ? (iWindowHeight-iExtentHeight)/2 : 0; |
|
1102 iBorderLeft = iBorderRight = iExtentWidth<iWindowWidth ? (iWindowWidth-iExtentWidth)/2 : 0; |
|
1103 |
|
1104 // set new extent/offset values |
|
1105 ASSERT_EGL_TRUE(iPfnEglSetSurfaceScalingNOK(iDisplay, iEglSess->Surface(), iOffsetX, iOffsetY, iExtentWidth, iExtentHeight)); |
|
1106 // set new border colour values |
|
1107 ASSERT_EGL_TRUE(eglSurfaceAttrib(iDisplay, iEglSess->Surface(), EGL_BORDER_COLOR_BLUE_NOK, iBorderColor.Blue())); |
|
1108 |
|
1109 // Check that values have been updated as expected |
|
1110 CheckScalingAttributesL(iSurfaceWidth, iSurfaceHeight, iExtentWidth, iExtentHeight, iOffsetX, iOffsetY); |
|
1111 CheckBorderColorL(iBorderColor.Red(), iBorderColor.Blue(), iBorderColor.Green()); |
|
1112 |
|
1113 // Check that the screen has NOT BEEN UPDATED just yet |
|
1114 |
|
1115 // Create the reference bitmap that should be expected before the extent/border changes |
|
1116 TInt refWidth = oldExtentWidth>iWindowWidth ? oldExtentWidth : iWindowWidth; |
|
1117 TInt refHeight = oldExtentHeight>iWindowHeight ? oldExtentHeight : iWindowHeight; |
|
1118 CFbsBitmap* oldRefBitmap = CreateBitmapLC(TSize(refWidth, refHeight), oldBorderTop, oldBorderBottom, oldBorderLeft, oldBorderRight, oldBorderColor); |
|
1119 |
|
1120 // compare screen with old reference bitmap |
|
1121 TInt comparison = iImageComparison->CompareScreenImageL(TSize(iWindowWidth, iWindowHeight), TPoint(0,0), TPoint(0,0), *oldRefBitmap, TestStepName()); |
|
1122 TEST(comparison==KErrNone); |
|
1123 INFO_PRINTF3(_L("CompareScreenImageL before eglSwapBuffers returns %d (expected is %d)"), comparison, KErrNone); |
|
1124 |
|
1125 // extent/offset changes MUST be effective only after swapbuffers |
|
1126 ASSERT_EGL_TRUE(eglSwapBuffers(iDisplay, iEglSess->Surface())); |
|
1127 ASSERT_EGL_TRUE(eglWaitClient()); |
|
1128 // Finish() to ensure all native window operations related to the surface complete before image comparision. |
|
1129 iWsSession.Finish(); |
|
1130 |
|
1131 //check values still are as expected |
|
1132 CheckScalingAttributesL(iSurfaceWidth, iSurfaceHeight, iExtentWidth, iExtentHeight, iOffsetX, iOffsetY); |
|
1133 CheckBorderColorL(iBorderColor.Red(), iBorderColor.Blue(), iBorderColor.Green()); |
|
1134 |
|
1135 // Create the reference bitmap that should be expected after the extent/border changes |
|
1136 refWidth = iExtentWidth>iWindowWidth ? iExtentWidth : iWindowWidth; |
|
1137 refHeight = iExtentHeight>iWindowHeight ? iExtentHeight : iWindowHeight; |
|
1138 CFbsBitmap* newRefBitmap = CreateBitmapLC(TSize(refWidth, refHeight), iBorderTop, iBorderBottom, iBorderLeft, iBorderRight, iBorderColor); |
|
1139 |
|
1140 // compare screen with new reference bitmap |
|
1141 comparison = iImageComparison->CompareScreenImageL(TSize(iWindowWidth, iWindowHeight), TPoint(0,0), TPoint(0,0), *newRefBitmap, TestStepName()); |
|
1142 TEST(comparison==KErrNone); |
|
1143 INFO_PRINTF3(_L("CompareScreenImageL after eglSwapBuffers returns %d (expected is %d)"), comparison, KErrNone); |
|
1144 |
|
1145 /// Cleanup |
|
1146 CleanupStack::PopAndDestroy(2, oldRefBitmap); // oldRefBitmap, newRefBitmap |
|
1147 |
|
1148 return TestStepResult(); |
|
1149 } |
|
1150 |
|
1151 /** |
|
1152 @SYMTestCaseID GRAPHICS-EGL-0652 |
|
1153 |
|
1154 @SYMTestPriority 1 |
|
1155 |
|
1156 @SYMPREQ 2676 |
|
1157 |
|
1158 @SYMREQ 417-56592 |
|
1159 |
|
1160 @SYMTestCaseDesc |
|
1161 Check that all configs that support surface scaling also support window surfaces. |
|
1162 |
|
1163 @SYMTestActions |
|
1164 1. Query number of configs |
|
1165 2. Iterate through all configs and check if surface scaling is supported |
|
1166 3. If surface scaling is supported, chech that it supports window surfaces and |
|
1167 attempt to create a fixed size window surface |
|
1168 4. If surface scaling is not supported, check eglGetConfigAttrib return value and |
|
1169 attempt to create a fixed size window surface |
|
1170 |
|
1171 @SYMTestExpectedResults |
|
1172 3. All configs that support surface scaling support window surfaces and window surface creation succeeds. |
|
1173 4. If surface scaling is not supported, eglGetConfigAttrib sets value to EGL_FALSE and window surface creation fails. |
|
1174 */ |
|
1175 TVerdict CEglTest_SurfaceScaling_WindowSurface_Check::doTestStepL() |
|
1176 { |
|
1177 INFO_PRINTF1(_L("CEglTest_SurfaceScaling_WindowSurface_Check::doTestStepL")); |
|
1178 SetTestStepName(_L("GRAPHICS-EGL-0652")); |
|
1179 SetTestStepID(_L("GRAPHICS-EGL-0652")); |
|
1180 |
|
1181 // Establish the connection to the window server and create |
|
1182 // a WindowGroup and a Window object |
|
1183 CreateAndActivateWindowL(TSize(100, 100)); |
|
1184 |
|
1185 // Create display object |
|
1186 GetDisplayL(); |
|
1187 CreateEglSessionL(); // initialise EGL Session so we can make use of its helper objects |
|
1188 iEglSess->InitializeL(); |
|
1189 |
|
1190 EGLConfig matchingConfigs[KMaxEglConfigs]; |
|
1191 EGLint numConfigs = 0; |
|
1192 |
|
1193 EGLint attrib_list[] = { |
|
1194 EGL_FIXED_WIDTH_NOK, 50, |
|
1195 EGL_FIXED_HEIGHT_NOK, 50, |
|
1196 EGL_TARGET_EXTENT_OFFSET_X_NOK, 0, |
|
1197 EGL_TARGET_EXTENT_OFFSET_Y_NOK, 0, |
|
1198 EGL_TARGET_EXTENT_WIDTH_NOK, 100, |
|
1199 EGL_TARGET_EXTENT_HEIGHT_NOK, 100, |
|
1200 EGL_NONE}; |
|
1201 |
|
1202 // Query total number of configs |
|
1203 ASSERT_EGL_TRUE(eglGetConfigs(iDisplay, NULL, KMaxTInt, &numConfigs)); |
|
1204 TESTL(numConfigs >= 1 && numConfigs <= KMaxEglConfigs); |
|
1205 INFO_PRINTF2(_L("Found %d configs in total"), numConfigs); |
|
1206 |
|
1207 // Get all configs |
|
1208 ASSERT_EGL_TRUE(eglGetConfigs(iDisplay, matchingConfigs, KMaxEglConfigs, &numConfigs)); |
|
1209 |
|
1210 // Check that if surface scaling is supported in the config, then window surfaces are supported too |
|
1211 for(TInt i=0; i<numConfigs; i++) |
|
1212 { |
|
1213 // query scaling support |
|
1214 EGLint scalingSupport = -32; // arbitraty value which is neither EGL_TRUE nor EGL_FALSE |
|
1215 ASSERT_EGL_TRUE(eglGetConfigAttrib(iDisplay, matchingConfigs[i], EGL_SURFACE_SCALING_NOK, &scalingSupport)); |
|
1216 |
|
1217 // query window surface support |
|
1218 EGLint surfaceType=-1; |
|
1219 ASSERT_EGL_TRUE(eglGetConfigAttrib(iDisplay, matchingConfigs[i], EGL_SURFACE_TYPE, &surfaceType)); |
|
1220 |
|
1221 // check that if surface scaling is supported, it also supports window surfaces |
|
1222 if (scalingSupport==EGL_TRUE) |
|
1223 { |
|
1224 INFO_PRINTF2(_L("Config %d supports surface scaling. Checking window surface support..."), i); |
|
1225 TEST((surfaceType&EGL_WINDOW_BIT) == EGL_WINDOW_BIT); |
|
1226 } |
|
1227 else |
|
1228 { |
|
1229 // check value was updated accordingly |
|
1230 INFO_PRINTF2(_L("Config %d does NOT support surface scaling."), i); |
|
1231 TEST(scalingSupport==EGL_FALSE); |
|
1232 } |
|
1233 |
|
1234 // check if config supports window surface, fixed window surface creation follows scaling support |
|
1235 if ((surfaceType&EGL_WINDOW_BIT) == EGL_WINDOW_BIT) |
|
1236 { |
|
1237 EGLSurface windowSurface = eglCreateWindowSurface(iDisplay, matchingConfigs[i], &iWindow, attrib_list); |
|
1238 if (scalingSupport==EGL_TRUE) |
|
1239 { |
|
1240 INFO_PRINTF1(_L("Checking window surface creation succeeds...")); |
|
1241 TEST_EGL_ERROR(windowSurface =! EGL_NO_SURFACE, EGL_SUCCESS); |
|
1242 } |
|
1243 else |
|
1244 { |
|
1245 INFO_PRINTF1(_L("Checking window surface creation fails...")); |
|
1246 TEST_EGL_ERROR(windowSurface == EGL_NO_SURFACE, EGL_BAD_MATCH); |
|
1247 } |
|
1248 } |
|
1249 } |
|
1250 |
|
1251 // clean-up |
|
1252 CleanAll(); |
|
1253 CloseWindow(); |
|
1254 |
|
1255 INFO_PRINTF1(_L("....CEglTest_SurfaceScaling_WindowSurface_Check::doTestStepL completed!")); |
|
1256 RecordTestResultL(); |
|
1257 CloseTMSGraphicsStep(); |
|
1258 return TestStepResult(); |
|
1259 } |
|
1260 |
|
1261 /** |
|
1262 @SYMTestCaseID GRAPHICS-EGL-0653 |
|
1263 |
|
1264 @SYMTestPriority 1 |
|
1265 |
|
1266 @SYMPREQ 2676 |
|
1267 |
|
1268 @SYMREQ 417-56592 |
|
1269 |
|
1270 @SYMTestCaseDesc |
|
1271 Negative test. This test is to check the return value and error code of eglCreateWindowSurface |
|
1272 when creating a fixed size window surface with invalid combination of Surface Scaling attributes |
|
1273 and illegal values for each attribute. |
|
1274 |
|
1275 @SYMTestActions |
|
1276 1. Create a fixed size Window Surface with invalid combination of Surface Scaling attributes. |
|
1277 - Only specify 5 out of 6 of the following attributes, when specified, should be valid. |
|
1278 EGL_EXTENT_WIDTH_NOK, EGL_EXTENT_HEIGHT_NOK, EGL_TARGET_EXTENT_WIDTH_NOK, |
|
1279 EGL_TARGET_EXTENT_HEIGHT_NOK, EGL_TARGET_EXTENT_OFFSET_X_NOK, EGL_TARGET_EXTENT_OFFSET_Y_NOK |
|
1280 2. Create a fixed size Window Surface with illegal values for each attribute. |
|
1281 [attribute] [illegal value] |
|
1282 EGL_FIXED_WIDTH_NOK less than or equal to zero |
|
1283 EGL_FIXED_HEIGHT_NOK less than or equal to zero |
|
1284 EGL_TARGET_EXTENT_WIDTH_NOK less than or equal to zero |
|
1285 EGL_TARGET_EXTENT_HEIGHT_NOK less than or equal to zero |
|
1286 |
|
1287 @SYMTestExpectedResults |
|
1288 1. EGL_NO_SURFACE is returned with error set to EGL_BAD_ATTRIBUTE |
|
1289 2. EGL_NO_SURFACE is returned with error set to EGL_BAD_ATTRIBUTE |
|
1290 */ |
|
1291 TVerdict CEglTest_SurfaceScaling_Negative_CreateWindowSurface::doTestStepL() |
|
1292 { |
|
1293 INFO_PRINTF1(_L("CEglTest_SurfaceScaling_Negative_CreateWindowSurface::doTestStepL")); |
|
1294 SetTestStepName(_L("GRAPHICS-EGL-0653")); |
|
1295 SetTestStepID(_L("GRAPHICS-EGL-0653")); |
|
1296 |
|
1297 // Establish the connection to the window server and create |
|
1298 // a WindowGroup and a Window object |
|
1299 CreateAndActivateWindowL(TSize(100, 100)); |
|
1300 |
|
1301 // Create display object |
|
1302 GetDisplayL(); |
|
1303 CreateEglSessionL(); |
|
1304 iEglSess->InitializeL(); |
|
1305 |
|
1306 // Choose EGL config |
|
1307 EGLConfig matchingConfigs[1]; |
|
1308 EGLint numConfigs = 0; |
|
1309 |
|
1310 ASSERT_EGL_TRUE(eglChooseConfig(iDisplay, KScalingConfigAttribs[EWindowAttribsColor16MU_Scaling], matchingConfigs, 1, &numConfigs)); |
|
1311 TESTL(numConfigs == 1); // Abort the test if the EGL config is not supported |
|
1312 |
|
1313 // Make the fixed size surface half width and height of the window |
|
1314 TInt surfaceWidth = iWindow.Size().iWidth / 2; |
|
1315 TInt surfaceHeight = iWindow.Size().iHeight / 2; |
|
1316 |
|
1317 TInt invalidCombinationAttrNum = 6; |
|
1318 EGLint invalid_combination_attrib_list[][11] = { |
|
1319 { |
|
1320 EGL_FIXED_HEIGHT_NOK, surfaceHeight, |
|
1321 EGL_TARGET_EXTENT_OFFSET_X_NOK, 0, |
|
1322 EGL_TARGET_EXTENT_OFFSET_Y_NOK, 0, |
|
1323 EGL_TARGET_EXTENT_WIDTH_NOK, iWindow.Size().iWidth, |
|
1324 EGL_TARGET_EXTENT_HEIGHT_NOK, iWindow.Size().iHeight, |
|
1325 EGL_NONE}, |
|
1326 { |
|
1327 EGL_FIXED_WIDTH_NOK, surfaceWidth, |
|
1328 EGL_TARGET_EXTENT_OFFSET_X_NOK, 0, |
|
1329 EGL_TARGET_EXTENT_OFFSET_Y_NOK, 0, |
|
1330 EGL_TARGET_EXTENT_WIDTH_NOK, iWindow.Size().iWidth, |
|
1331 EGL_TARGET_EXTENT_HEIGHT_NOK, iWindow.Size().iHeight, |
|
1332 EGL_NONE}, |
|
1333 { |
|
1334 EGL_FIXED_WIDTH_NOK, surfaceWidth, |
|
1335 EGL_FIXED_HEIGHT_NOK, surfaceHeight, |
|
1336 EGL_TARGET_EXTENT_OFFSET_Y_NOK, 0, |
|
1337 EGL_TARGET_EXTENT_WIDTH_NOK, iWindow.Size().iWidth, |
|
1338 EGL_TARGET_EXTENT_HEIGHT_NOK, iWindow.Size().iHeight, |
|
1339 EGL_NONE}, |
|
1340 { |
|
1341 EGL_FIXED_WIDTH_NOK, surfaceWidth, |
|
1342 EGL_FIXED_HEIGHT_NOK, surfaceHeight, |
|
1343 EGL_TARGET_EXTENT_OFFSET_X_NOK, 0, |
|
1344 EGL_TARGET_EXTENT_WIDTH_NOK, iWindow.Size().iWidth, |
|
1345 EGL_TARGET_EXTENT_HEIGHT_NOK, iWindow.Size().iHeight, |
|
1346 EGL_NONE}, |
|
1347 { |
|
1348 EGL_FIXED_WIDTH_NOK, surfaceWidth, |
|
1349 EGL_FIXED_HEIGHT_NOK, surfaceHeight, |
|
1350 EGL_TARGET_EXTENT_OFFSET_X_NOK, 0, |
|
1351 EGL_TARGET_EXTENT_OFFSET_Y_NOK, 0, |
|
1352 EGL_TARGET_EXTENT_HEIGHT_NOK, iWindow.Size().iHeight, |
|
1353 EGL_NONE}, |
|
1354 { |
|
1355 EGL_FIXED_WIDTH_NOK, surfaceWidth, |
|
1356 EGL_FIXED_HEIGHT_NOK, surfaceHeight, |
|
1357 EGL_TARGET_EXTENT_OFFSET_X_NOK, 0, |
|
1358 EGL_TARGET_EXTENT_OFFSET_Y_NOK, 0, |
|
1359 EGL_TARGET_EXTENT_WIDTH_NOK, iWindow.Size().iWidth, |
|
1360 EGL_NONE} |
|
1361 }; |
|
1362 |
|
1363 TInt illegalValAttrNum = 14; |
|
1364 EGLint illegal_value_attrib_list[][19] = { |
|
1365 { |
|
1366 EGL_FIXED_WIDTH_NOK, -1, |
|
1367 EGL_FIXED_HEIGHT_NOK, surfaceHeight, |
|
1368 EGL_TARGET_EXTENT_OFFSET_X_NOK, 0, |
|
1369 EGL_TARGET_EXTENT_OFFSET_Y_NOK, 0, |
|
1370 EGL_TARGET_EXTENT_WIDTH_NOK, iWindow.Size().iWidth, |
|
1371 EGL_TARGET_EXTENT_HEIGHT_NOK, iWindow.Size().iHeight, |
|
1372 EGL_BORDER_COLOR_RED_NOK, 0xfc, |
|
1373 EGL_BORDER_COLOR_GREEN_NOK, 0xfd, |
|
1374 EGL_BORDER_COLOR_BLUE_NOK, 0xfe, |
|
1375 EGL_NONE}, |
|
1376 { |
|
1377 EGL_FIXED_WIDTH_NOK, 0, |
|
1378 EGL_FIXED_HEIGHT_NOK, surfaceHeight, |
|
1379 EGL_TARGET_EXTENT_OFFSET_X_NOK, 0, |
|
1380 EGL_TARGET_EXTENT_OFFSET_Y_NOK, 0, |
|
1381 EGL_TARGET_EXTENT_WIDTH_NOK, iWindow.Size().iWidth, |
|
1382 EGL_TARGET_EXTENT_HEIGHT_NOK, iWindow.Size().iHeight, |
|
1383 EGL_BORDER_COLOR_RED_NOK, 0xfc, |
|
1384 EGL_BORDER_COLOR_GREEN_NOK, 0xfd, |
|
1385 EGL_BORDER_COLOR_BLUE_NOK, 0xfe, |
|
1386 EGL_NONE}, |
|
1387 { |
|
1388 EGL_FIXED_WIDTH_NOK, surfaceWidth, |
|
1389 EGL_FIXED_HEIGHT_NOK, -1, |
|
1390 EGL_TARGET_EXTENT_OFFSET_X_NOK, 0, |
|
1391 EGL_TARGET_EXTENT_OFFSET_Y_NOK, 0, |
|
1392 EGL_TARGET_EXTENT_WIDTH_NOK, iWindow.Size().iWidth, |
|
1393 EGL_TARGET_EXTENT_HEIGHT_NOK, iWindow.Size().iHeight, |
|
1394 EGL_BORDER_COLOR_RED_NOK, 0xfc, |
|
1395 EGL_BORDER_COLOR_GREEN_NOK, 0xfd, |
|
1396 EGL_BORDER_COLOR_BLUE_NOK, 0xfe, |
|
1397 EGL_NONE}, |
|
1398 { |
|
1399 EGL_FIXED_WIDTH_NOK, surfaceWidth, |
|
1400 EGL_FIXED_HEIGHT_NOK, 0, |
|
1401 EGL_TARGET_EXTENT_OFFSET_X_NOK, 0, |
|
1402 EGL_TARGET_EXTENT_OFFSET_Y_NOK, 0, |
|
1403 EGL_TARGET_EXTENT_WIDTH_NOK, iWindow.Size().iWidth, |
|
1404 EGL_TARGET_EXTENT_HEIGHT_NOK, iWindow.Size().iHeight, |
|
1405 EGL_BORDER_COLOR_RED_NOK, 0xfc, |
|
1406 EGL_BORDER_COLOR_GREEN_NOK, 0xfd, |
|
1407 EGL_BORDER_COLOR_BLUE_NOK, 0xfe, |
|
1408 EGL_NONE}, |
|
1409 { |
|
1410 EGL_FIXED_WIDTH_NOK, surfaceWidth, |
|
1411 EGL_FIXED_HEIGHT_NOK, surfaceHeight, |
|
1412 EGL_TARGET_EXTENT_OFFSET_X_NOK, 0, |
|
1413 EGL_TARGET_EXTENT_OFFSET_Y_NOK, 0, |
|
1414 EGL_TARGET_EXTENT_WIDTH_NOK, -1, |
|
1415 EGL_TARGET_EXTENT_HEIGHT_NOK, iWindow.Size().iHeight, |
|
1416 EGL_BORDER_COLOR_RED_NOK, 0xfc, |
|
1417 EGL_BORDER_COLOR_GREEN_NOK, 0xfd, |
|
1418 EGL_BORDER_COLOR_BLUE_NOK, 0xfe, |
|
1419 EGL_NONE}, |
|
1420 { |
|
1421 EGL_FIXED_WIDTH_NOK, surfaceWidth, |
|
1422 EGL_FIXED_HEIGHT_NOK, surfaceHeight, |
|
1423 EGL_TARGET_EXTENT_OFFSET_X_NOK, 0, |
|
1424 EGL_TARGET_EXTENT_OFFSET_Y_NOK, 0, |
|
1425 EGL_TARGET_EXTENT_WIDTH_NOK, 0, |
|
1426 EGL_TARGET_EXTENT_HEIGHT_NOK, iWindow.Size().iHeight, |
|
1427 EGL_BORDER_COLOR_RED_NOK, 0xfc, |
|
1428 EGL_BORDER_COLOR_GREEN_NOK, 0xfd, |
|
1429 EGL_BORDER_COLOR_BLUE_NOK, 0xfe, |
|
1430 EGL_NONE}, |
|
1431 { |
|
1432 EGL_FIXED_WIDTH_NOK, surfaceWidth, |
|
1433 EGL_FIXED_HEIGHT_NOK, surfaceHeight, |
|
1434 EGL_TARGET_EXTENT_OFFSET_X_NOK, 0, |
|
1435 EGL_TARGET_EXTENT_OFFSET_Y_NOK, 0, |
|
1436 EGL_TARGET_EXTENT_WIDTH_NOK, iWindow.Size().iWidth, |
|
1437 EGL_TARGET_EXTENT_HEIGHT_NOK, -1, |
|
1438 EGL_BORDER_COLOR_RED_NOK, 0xfc, |
|
1439 EGL_BORDER_COLOR_GREEN_NOK, 0xfd, |
|
1440 EGL_BORDER_COLOR_BLUE_NOK, 0xfe, |
|
1441 EGL_NONE}, |
|
1442 { |
|
1443 EGL_FIXED_WIDTH_NOK, surfaceWidth, |
|
1444 EGL_FIXED_HEIGHT_NOK, surfaceHeight, |
|
1445 EGL_TARGET_EXTENT_OFFSET_X_NOK, 0, |
|
1446 EGL_TARGET_EXTENT_OFFSET_Y_NOK, 0, |
|
1447 EGL_TARGET_EXTENT_WIDTH_NOK, iWindow.Size().iWidth, |
|
1448 EGL_TARGET_EXTENT_HEIGHT_NOK, 0, |
|
1449 EGL_BORDER_COLOR_RED_NOK, 0xfc, |
|
1450 EGL_BORDER_COLOR_GREEN_NOK, 0xfd, |
|
1451 EGL_BORDER_COLOR_BLUE_NOK, 0xfe, |
|
1452 EGL_NONE}, |
|
1453 { |
|
1454 EGL_FIXED_WIDTH_NOK, surfaceWidth, |
|
1455 EGL_FIXED_HEIGHT_NOK, surfaceHeight, |
|
1456 EGL_TARGET_EXTENT_OFFSET_X_NOK, 0, |
|
1457 EGL_TARGET_EXTENT_OFFSET_Y_NOK, 0, |
|
1458 EGL_TARGET_EXTENT_WIDTH_NOK, iWindow.Size().iWidth, |
|
1459 EGL_TARGET_EXTENT_HEIGHT_NOK, iWindow.Size().iHeight, |
|
1460 EGL_BORDER_COLOR_RED_NOK, -1, |
|
1461 EGL_BORDER_COLOR_GREEN_NOK, 0, |
|
1462 EGL_BORDER_COLOR_BLUE_NOK, 0, |
|
1463 EGL_NONE}, |
|
1464 { |
|
1465 EGL_FIXED_WIDTH_NOK, surfaceWidth, |
|
1466 EGL_FIXED_HEIGHT_NOK, surfaceHeight, |
|
1467 EGL_TARGET_EXTENT_OFFSET_X_NOK, 0, |
|
1468 EGL_TARGET_EXTENT_OFFSET_Y_NOK, 0, |
|
1469 EGL_TARGET_EXTENT_WIDTH_NOK, iWindow.Size().iWidth, |
|
1470 EGL_TARGET_EXTENT_HEIGHT_NOK, iWindow.Size().iHeight, |
|
1471 EGL_BORDER_COLOR_RED_NOK, 0, |
|
1472 EGL_BORDER_COLOR_GREEN_NOK, -1, |
|
1473 EGL_BORDER_COLOR_BLUE_NOK, 0, |
|
1474 EGL_NONE}, |
|
1475 { |
|
1476 EGL_FIXED_WIDTH_NOK, surfaceWidth, |
|
1477 EGL_FIXED_HEIGHT_NOK, surfaceHeight, |
|
1478 EGL_TARGET_EXTENT_OFFSET_X_NOK, 0, |
|
1479 EGL_TARGET_EXTENT_OFFSET_Y_NOK, 0, |
|
1480 EGL_TARGET_EXTENT_WIDTH_NOK, iWindow.Size().iWidth, |
|
1481 EGL_TARGET_EXTENT_HEIGHT_NOK, iWindow.Size().iHeight, |
|
1482 EGL_BORDER_COLOR_RED_NOK, 0, |
|
1483 EGL_BORDER_COLOR_GREEN_NOK, 0, |
|
1484 EGL_BORDER_COLOR_BLUE_NOK, -1, |
|
1485 EGL_NONE}, |
|
1486 { |
|
1487 EGL_FIXED_WIDTH_NOK, surfaceWidth, |
|
1488 EGL_FIXED_HEIGHT_NOK, surfaceHeight, |
|
1489 EGL_TARGET_EXTENT_OFFSET_X_NOK, 0, |
|
1490 EGL_TARGET_EXTENT_OFFSET_Y_NOK, 0, |
|
1491 EGL_TARGET_EXTENT_WIDTH_NOK, iWindow.Size().iWidth, |
|
1492 EGL_TARGET_EXTENT_HEIGHT_NOK, iWindow.Size().iHeight, |
|
1493 EGL_BORDER_COLOR_RED_NOK, 256, |
|
1494 EGL_BORDER_COLOR_GREEN_NOK, 0, |
|
1495 EGL_BORDER_COLOR_BLUE_NOK, 0, |
|
1496 EGL_NONE}, |
|
1497 { |
|
1498 EGL_FIXED_WIDTH_NOK, surfaceWidth, |
|
1499 EGL_FIXED_HEIGHT_NOK, surfaceHeight, |
|
1500 EGL_TARGET_EXTENT_OFFSET_X_NOK, 0, |
|
1501 EGL_TARGET_EXTENT_OFFSET_Y_NOK, 0, |
|
1502 EGL_TARGET_EXTENT_WIDTH_NOK, iWindow.Size().iWidth, |
|
1503 EGL_TARGET_EXTENT_HEIGHT_NOK, iWindow.Size().iHeight, |
|
1504 EGL_BORDER_COLOR_RED_NOK, 0, |
|
1505 EGL_BORDER_COLOR_GREEN_NOK, 256, |
|
1506 EGL_BORDER_COLOR_BLUE_NOK, 0, |
|
1507 EGL_NONE}, |
|
1508 { |
|
1509 EGL_FIXED_WIDTH_NOK, surfaceWidth, |
|
1510 EGL_FIXED_HEIGHT_NOK, surfaceHeight, |
|
1511 EGL_TARGET_EXTENT_OFFSET_X_NOK, 0, |
|
1512 EGL_TARGET_EXTENT_OFFSET_Y_NOK, 0, |
|
1513 EGL_TARGET_EXTENT_WIDTH_NOK, iWindow.Size().iWidth, |
|
1514 EGL_TARGET_EXTENT_HEIGHT_NOK, iWindow.Size().iHeight, |
|
1515 EGL_BORDER_COLOR_RED_NOK, 0, |
|
1516 EGL_BORDER_COLOR_GREEN_NOK, 0, |
|
1517 EGL_BORDER_COLOR_BLUE_NOK, 256, |
|
1518 EGL_NONE} |
|
1519 }; |
|
1520 |
|
1521 INFO_PRINTF1(_L("Calling eglCreateWindowSurface with invalid combination of Surface Scaling attributes... - only five out of six compulsary attributes specified")); |
|
1522 for(TInt i = 0;i < invalidCombinationAttrNum;i++) |
|
1523 { |
|
1524 EGLSurface surface = eglCreateWindowSurface(iDisplay, matchingConfigs[0], &iWindow, invalid_combination_attrib_list[i]); |
|
1525 TEST_EGL_ERROR(surface == EGL_NO_SURFACE, EGL_BAD_ATTRIBUTE); |
|
1526 } |
|
1527 |
|
1528 INFO_PRINTF1(_L("Calling eglCreateWindowSurface with illegal values for each attribute...")); |
|
1529 for(TInt i = 0;i < illegalValAttrNum;i++) |
|
1530 { |
|
1531 EGLSurface surface = eglCreateWindowSurface(iDisplay, matchingConfigs[0], &iWindow, illegal_value_attrib_list[i]); |
|
1532 TEST_EGL_ERROR(surface == EGL_NO_SURFACE, EGL_BAD_ATTRIBUTE); |
|
1533 } |
|
1534 |
|
1535 // clean-up |
|
1536 CloseWindow(); |
|
1537 CleanAll(); |
|
1538 |
|
1539 INFO_PRINTF1(_L("....CEglTest_SurfaceScaling_Negative_CreateWindowSurface::doTestStepL completed!")); |
|
1540 RecordTestResultL(); |
|
1541 CloseTMSGraphicsStep(); |
|
1542 return TestStepResult(); |
|
1543 } |
|
1544 |
|
1545 /** |
|
1546 @SYMTestCaseID GRAPHICS-EGL-0654 |
|
1547 |
|
1548 @SYMTestPriority 1 |
|
1549 |
|
1550 @SYMPREQ 2676 |
|
1551 |
|
1552 @SYMREQ 417-56592 |
|
1553 |
|
1554 @SYMTestCaseDesc |
|
1555 Negative test. This test is to check the return value and error code when creating |
|
1556 a fixed size non window surface. |
|
1557 |
|
1558 @SYMTestActions |
|
1559 1. Attempt to create a pixmap with scaling attributes specified |
|
1560 2. Attempt to create a pbuffer surface with scaling attributes specified |
|
1561 3. Attempt to create a window surface with scaling attributes specified but |
|
1562 config doesn't support surface scaling |
|
1563 |
|
1564 @SYMTestExpectedResults |
|
1565 1. EGL_NO_SURFACE is returned with error set to EGL_BAD_ATTRIBUTE |
|
1566 2. EGL_NO_SURFACE is returned with error set to EGL_BAD_ATTRIBUTE |
|
1567 3. EGL_NO_SURFACE is returned with error set to EGL_BAD_MATCH |
|
1568 */ |
|
1569 TVerdict CEglTest_SurfaceScaling_Negative_FixedSize_NonWindowSurface::doTestStepL() |
|
1570 { |
|
1571 INFO_PRINTF1(_L("CEglTest_SurfaceScaling_Negative_FixedSize_NonWindowSurface::doTestStepL")); |
|
1572 SetTestStepName(_L("GRAPHICS-EGL-0654")); |
|
1573 SetTestStepID(_L("GRAPHICS-EGL-0654")); |
|
1574 |
|
1575 // Establish the connection to the window server and create |
|
1576 // a WindowGroup and a Window object |
|
1577 CreateAndActivateWindowL(TSize(100, 100)); |
|
1578 |
|
1579 // Create bitmap |
|
1580 User::LeaveIfError(RFbsSession::Connect()); |
|
1581 CFbsBitmap* bitmap = new(ELeave) CFbsBitmap(); |
|
1582 CleanupStack::PushL(bitmap); |
|
1583 User::LeaveIfError(bitmap->Create(TSize(20, 20), EColor16MU)); |
|
1584 |
|
1585 // Create display object |
|
1586 GetDisplayL(); |
|
1587 CreateEglSessionL(); |
|
1588 iEglSess->InitializeL(); |
|
1589 |
|
1590 EGLConfig config; |
|
1591 EGLSurface surface = EGL_NO_SURFACE; |
|
1592 EGLint numConfigs = 0; |
|
1593 |
|
1594 // Use OpenVG to draw |
|
1595 ASSERT_EGL_TRUE(eglBindAPI(EGL_OPENVG_API)); |
|
1596 |
|
1597 const EGLint KFixedSize_surface_attrib_list[] = { |
|
1598 EGL_FIXED_WIDTH_NOK, 100, |
|
1599 EGL_FIXED_HEIGHT_NOK, 100, |
|
1600 EGL_TARGET_EXTENT_OFFSET_X_NOK, 0, |
|
1601 EGL_TARGET_EXTENT_OFFSET_Y_NOK, 0, |
|
1602 EGL_TARGET_EXTENT_WIDTH_NOK, 150, |
|
1603 EGL_TARGET_EXTENT_HEIGHT_NOK, 150, |
|
1604 EGL_NONE}; |
|
1605 |
|
1606 // If all window surfaces in EGL are scalable, first case must be skipped. Others still valid |
|
1607 TInt index = iAllScalable ? 1 : 0; |
|
1608 for(; index < 3; index++) |
|
1609 { |
|
1610 switch(index) |
|
1611 { |
|
1612 case 0: |
|
1613 INFO_PRINTF1(_L("Calling eglCreateWindowSurface with surface scaling attribute specified in a config that does not support scaling...")); |
|
1614 ASSERT_EGL_TRUE(eglChooseConfig(iDisplay, KScalingConfigAttribs[EWindowAttribs_NoScaling], &config, 1, &numConfigs)); |
|
1615 TEST(numConfigs==1); |
|
1616 surface = eglCreateWindowSurface(iDisplay, config, &iWindow, KFixedSize_surface_attrib_list); |
|
1617 TEST_EGL_ERROR(surface == EGL_NO_SURFACE, EGL_BAD_MATCH); |
|
1618 break; |
|
1619 case 1: |
|
1620 INFO_PRINTF1(_L("Calling eglCreatePixmapSurface with surface scaling attribute specified...")); |
|
1621 ASSERT_EGL_TRUE(eglChooseConfig(iDisplay, KConfigAttribs[EPixmapAttribsColor16MU], &config, 1, &numConfigs)); |
|
1622 TEST(numConfigs==1); |
|
1623 surface = eglCreatePixmapSurface(iDisplay, config, (NativePixmapType)bitmap, KFixedSize_surface_attrib_list); |
|
1624 TEST_EGL_ERROR(surface == EGL_NO_SURFACE, EGL_BAD_ATTRIBUTE); |
|
1625 break; |
|
1626 case 2: |
|
1627 INFO_PRINTF1(_L("Calling eglCreatePbufferSurface with surface scaling attribute specified...")); |
|
1628 ASSERT_EGL_TRUE(eglChooseConfig(iDisplay, KConfigAttribs[EPBufferAttribsColor64K], &config, 1, &numConfigs)); |
|
1629 TEST(numConfigs==1); |
|
1630 surface = eglCreatePbufferSurface(iDisplay, config, KFixedSize_surface_attrib_list); |
|
1631 TEST_EGL_ERROR(surface == EGL_NO_SURFACE, EGL_BAD_ATTRIBUTE); |
|
1632 break; |
|
1633 } |
|
1634 } |
|
1635 |
|
1636 // cleanup |
|
1637 CleanupStack::PopAndDestroy(bitmap); |
|
1638 CloseWindow(); |
|
1639 CleanAll(); |
|
1640 RFbsSession::Disconnect(); |
|
1641 |
|
1642 INFO_PRINTF1(_L("....CEglTest_SurfaceScaling_Negative_FixedSize_NonWindowSurface::doTestStepL completed!")); |
|
1643 RecordTestResultL(); |
|
1644 CloseTMSGraphicsStep(); |
|
1645 return TestStepResult(); |
|
1646 } |
|
1647 |
|
1648 /** |
|
1649 @SYMTestCaseID GRAPHICS-EGL-0655 |
|
1650 |
|
1651 @SYMTestPriority 1 |
|
1652 |
|
1653 @SYMPREQ 2676 |
|
1654 |
|
1655 @SYMREQ 417-56592 |
|
1656 |
|
1657 @SYMTestCaseDesc |
|
1658 Exercising border color set by default. |
|
1659 |
|
1660 @SYMTestActions |
|
1661 1. Create a fixed size EGL Window Surface without border color specified. |
|
1662 2. Create a fixed size EGL Window Surface with border color specified for one channel. |
|
1663 3. Create a fixed size EGL Window Surface with border color specified for two channels. |
|
1664 |
|
1665 @SYMTestExpectedResults |
|
1666 Retrieved border color matches to the value it has been set at surface creation, |
|
1667 if during the surface creation border color has not been specified it is set to black (0x0). |
|
1668 */ |
|
1669 TVerdict CEglTest_SurfaceScalingDefaultBorderColor::doTestStepL() |
|
1670 { |
|
1671 SetTestStepName(_L("GRAPHICS-EGL-0655")); |
|
1672 SetTestStepID(_L("GRAPHICS-EGL-0655")); |
|
1673 INFO_PRINTF1(_L("CEglTest_SurfaceScalingDefaultBorderColor::doTestStepL")); |
|
1674 |
|
1675 // Establish the connection to the window server and create |
|
1676 // a WindowGroup and a Window object |
|
1677 CreateAndActivateWindowL(TSize(100,100)); |
|
1678 const TInt KWindowWidth = iWindow.Size().iWidth; |
|
1679 const TInt KWindowHeight = iWindow.Size().iHeight; |
|
1680 |
|
1681 // Create display object |
|
1682 GetDisplayL(); |
|
1683 CreateEglSessionL(); // initialise EGL Session so we can make use of its helper objects |
|
1684 iEglSess->InitializeL(); |
|
1685 |
|
1686 // Choose EGL config |
|
1687 EGLConfig matchingConfigs[1]; |
|
1688 EGLint numConfigs = 0; |
|
1689 |
|
1690 ASSERT_EGL_TRUE(eglChooseConfig(iDisplay, KScalingConfigAttribs[EWindowAttribsColor16MU_Scaling], matchingConfigs, 1, &numConfigs)); |
|
1691 TESTL (numConfigs == 1); // Abort the test if the EGL config is not supported |
|
1692 |
|
1693 // Make the fixed size surface half width and height of the window |
|
1694 const TInt KSurfaceWidth = KWindowWidth/2; |
|
1695 const TInt KSurfaceHeight = KWindowHeight/2; |
|
1696 |
|
1697 EGLint attrib_list1[] = { |
|
1698 EGL_FIXED_WIDTH_NOK, KSurfaceWidth, |
|
1699 EGL_FIXED_HEIGHT_NOK, KSurfaceHeight, |
|
1700 EGL_TARGET_EXTENT_OFFSET_X_NOK, 0, |
|
1701 EGL_TARGET_EXTENT_OFFSET_Y_NOK, 0, |
|
1702 EGL_TARGET_EXTENT_WIDTH_NOK, KWindowWidth, |
|
1703 EGL_TARGET_EXTENT_HEIGHT_NOK, KWindowHeight, |
|
1704 EGL_NONE}; |
|
1705 |
|
1706 EGLint attrib_list2[] = { |
|
1707 EGL_FIXED_WIDTH_NOK, KSurfaceWidth, |
|
1708 EGL_FIXED_HEIGHT_NOK, KSurfaceHeight, |
|
1709 EGL_TARGET_EXTENT_OFFSET_X_NOK, 0, |
|
1710 EGL_TARGET_EXTENT_OFFSET_Y_NOK, 0, |
|
1711 EGL_TARGET_EXTENT_WIDTH_NOK, KWindowWidth, |
|
1712 EGL_TARGET_EXTENT_HEIGHT_NOK, KWindowHeight, |
|
1713 EGL_BORDER_COLOR_RED_NOK, 0xf0, |
|
1714 EGL_NONE}; |
|
1715 |
|
1716 EGLint attrib_list3[] = { |
|
1717 EGL_FIXED_WIDTH_NOK, KSurfaceWidth, |
|
1718 EGL_FIXED_HEIGHT_NOK, KSurfaceHeight, |
|
1719 EGL_TARGET_EXTENT_OFFSET_X_NOK, 0, |
|
1720 EGL_TARGET_EXTENT_OFFSET_Y_NOK, 0, |
|
1721 EGL_TARGET_EXTENT_WIDTH_NOK, KWindowWidth, |
|
1722 EGL_TARGET_EXTENT_HEIGHT_NOK, KWindowHeight, |
|
1723 EGL_BORDER_COLOR_BLUE_NOK, 0xf8, |
|
1724 EGL_BORDER_COLOR_GREEN_NOK, 0xfc, |
|
1725 EGL_NONE}; |
|
1726 |
|
1727 for(TInt index = 0; index < 3; index++) |
|
1728 { |
|
1729 EGLint* attrib_list = NULL; |
|
1730 EGLint expectedRedChannelColor = 0; |
|
1731 EGLint expectedGreenChannelColor = 0; |
|
1732 EGLint expectedBlueChannelColor = 0; |
|
1733 |
|
1734 switch(index) |
|
1735 { |
|
1736 case 0: |
|
1737 attrib_list = attrib_list1; |
|
1738 break; |
|
1739 case 1: |
|
1740 expectedRedChannelColor = 0xf0; |
|
1741 attrib_list = attrib_list2; |
|
1742 break; |
|
1743 case 2: |
|
1744 expectedBlueChannelColor = 0xf8; |
|
1745 expectedGreenChannelColor = 0xfc; |
|
1746 attrib_list = attrib_list3; |
|
1747 break; |
|
1748 } |
|
1749 // Create the window surface and the egl context and make them current |
|
1750 iEglSess->CreateWindowSurfaceAndMakeCurrentL(matchingConfigs[0], iWindow, EFalse, EGL_OPENVG_API, 1, attrib_list); |
|
1751 |
|
1752 // Check expected border colours |
|
1753 CheckBorderColorL(expectedRedChannelColor, expectedBlueChannelColor, expectedGreenChannelColor); |
|
1754 |
|
1755 // Cleanup |
|
1756 iEglSess->CleanupSurfaceAndContextL(); |
|
1757 } |
|
1758 |
|
1759 CleanAll(); |
|
1760 CloseWindow(); |
|
1761 |
|
1762 INFO_PRINTF1(_L("....CEglTest_SurfaceScalingDefaultBorderColor::doTestStepL completed!")); |
|
1763 RecordTestResultL(); |
|
1764 CloseTMSGraphicsStep(); |
|
1765 return TestStepResult(); |
|
1766 } |
|
1767 |
|
1768 |
|
1769 /** |
|
1770 @SYMTestCaseID GRAPHICS-EGL-0656 |
|
1771 |
|
1772 @SYMTestPriority 1 |
|
1773 |
|
1774 @SYMPREQ 2676 |
|
1775 |
|
1776 @SYMREQ 417-56592 |
|
1777 |
|
1778 @SYMTestCaseDesc |
|
1779 Modifying an existing fixed size surface border color. |
|
1780 |
|
1781 @SYMTestActions |
|
1782 1. Create a fixed size EGL Window Surface with border color specified. |
|
1783 2. Modify border color with the new values. |
|
1784 |
|
1785 @SYMTestExpectedResults |
|
1786 New color will take place only after setting new values. |
|
1787 */ |
|
1788 |
|
1789 TVerdict CEglTest_SurfaceScalingModifyingBorderColor::doTestStepL() |
|
1790 { |
|
1791 SetTestStepName(_L("GRAPHICS-EGL-0656")); |
|
1792 SetTestStepID(_L("GRAPHICS-EGL-0656")); |
|
1793 INFO_PRINTF1(_L("CEglTest_SurfaceScalingModifyingBorderColor::doTestStepL")); |
|
1794 |
|
1795 // Establish the connection to the window server and create |
|
1796 // a WindowGroup and a Window object |
|
1797 CreateAndActivateWindowL(TSize(100,100)); |
|
1798 |
|
1799 // Create display object |
|
1800 GetDisplayL(); |
|
1801 CreateEglSessionL(); // initialise EGL Session so we can make use of its helper objects |
|
1802 iEglSess->InitializeL(); |
|
1803 |
|
1804 // Choose EGL config |
|
1805 EGLConfig matchingConfigs[1]; |
|
1806 EGLint numConfigs = 0; |
|
1807 |
|
1808 ASSERT_EGL_TRUE(eglChooseConfig(iDisplay, KScalingConfigAttribs[EWindowAttribsColor16MU_Scaling], matchingConfigs, 1, &numConfigs)); |
|
1809 TESTL (numConfigs == 1); // Abort the test if the EGL config is not supported |
|
1810 |
|
1811 // Make the fixed size surface half width and height of the window |
|
1812 const TInt KWindowWidth = iWindow.Size().iWidth; |
|
1813 const TInt KWindowHeight = iWindow.Size().iHeight; |
|
1814 const TInt KSurfaceWidth = KWindowWidth/2; |
|
1815 const TInt KSurfaceHeight = KWindowHeight/2; |
|
1816 const TInt KExtentWidth = KSurfaceWidth; |
|
1817 const TInt KExtentHeight = KSurfaceHeight; |
|
1818 const EGLint KRedChannelColor = 0x20; |
|
1819 const EGLint KGreenChannelColor = 0x40; |
|
1820 const EGLint KBlueChannelColor = 0x60; |
|
1821 |
|
1822 EGLint attrib_list[] = { |
|
1823 EGL_FIXED_WIDTH_NOK, KSurfaceWidth, |
|
1824 EGL_FIXED_HEIGHT_NOK, KSurfaceHeight, |
|
1825 EGL_TARGET_EXTENT_OFFSET_X_NOK, 0, |
|
1826 EGL_TARGET_EXTENT_OFFSET_Y_NOK, 0, |
|
1827 EGL_TARGET_EXTENT_WIDTH_NOK, KExtentWidth, |
|
1828 EGL_TARGET_EXTENT_HEIGHT_NOK, KExtentHeight, |
|
1829 EGL_BORDER_COLOR_RED_NOK, KRedChannelColor, |
|
1830 EGL_BORDER_COLOR_BLUE_NOK, KBlueChannelColor, |
|
1831 EGL_BORDER_COLOR_GREEN_NOK, KGreenChannelColor, |
|
1832 EGL_NONE}; |
|
1833 |
|
1834 // Create the window surface and the egl context and make them current |
|
1835 iEglSess->CreateWindowSurfaceAndMakeCurrentL(matchingConfigs[0], iWindow, EFalse, EGL_OPENVG_API, 1, attrib_list); |
|
1836 |
|
1837 CheckBorderColorL(KRedChannelColor, KBlueChannelColor, KGreenChannelColor); |
|
1838 |
|
1839 //modify existing attributes |
|
1840 const EGLint KOffsetColor = 100; |
|
1841 ASSERT_EGL_TRUE(eglSurfaceAttrib(iDisplay, iEglSess->Surface(), EGL_BORDER_COLOR_RED_NOK, KRedChannelColor + KOffsetColor)); |
|
1842 ASSERT_EGL_TRUE(eglSurfaceAttrib(iDisplay, iEglSess->Surface(), EGL_BORDER_COLOR_BLUE_NOK, KBlueChannelColor + KOffsetColor)); |
|
1843 ASSERT_EGL_TRUE(eglSurfaceAttrib(iDisplay, iEglSess->Surface(), EGL_BORDER_COLOR_GREEN_NOK, KGreenChannelColor + KOffsetColor)); |
|
1844 |
|
1845 //check that border color has been modified now |
|
1846 CheckBorderColorL(KRedChannelColor+KOffsetColor, KBlueChannelColor+KOffsetColor, KGreenChannelColor+KOffsetColor); |
|
1847 |
|
1848 // Cleanup |
|
1849 iEglSess->CleanupSurfaceAndContextL(); |
|
1850 CleanAll(); |
|
1851 CloseWindow(); |
|
1852 |
|
1853 INFO_PRINTF1(_L("....CEglTest_SurfaceScalingModifyingBorderColor::doTestStepL completed!")); |
|
1854 |
|
1855 RecordTestResultL(); |
|
1856 CloseTMSGraphicsStep(); |
|
1857 return TestStepResult(); |
|
1858 } |
|
1859 |
|
1860 /** |
|
1861 @SYMTestCaseID GRAPHICS-EGL-0657 |
|
1862 |
|
1863 @SYMTestPriority 1 |
|
1864 |
|
1865 @SYMPREQ 2676 |
|
1866 |
|
1867 @SYMREQ 417-56592 |
|
1868 |
|
1869 @SYMTestCaseDesc |
|
1870 Negative testing. Modifying an existing non-fixed size surface border color. |
|
1871 |
|
1872 @SYMTestActions |
|
1873 1. Create a non-fixed size EGL Window Surface. |
|
1874 2. Try to set border color after surface creation. |
|
1875 3. Repeat steps 1-2 for pixmap and pbuffer surface |
|
1876 |
|
1877 @SYMTestExpectedResults |
|
1878 Setting border color has no effect. |
|
1879 */ |
|
1880 TVerdict CEglTest_SurfaceScalingModifyingBorderColorNonFixed::doTestStepL() |
|
1881 { |
|
1882 SetTestStepName(_L("GRAPHICS-EGL-0657")); |
|
1883 SetTestStepID(_L("GRAPHICS-EGL-0657")); |
|
1884 INFO_PRINTF1(_L("CEglTest_SurfaceScalingModifyingBorderColorNonFixed::doTestStepL")); |
|
1885 |
|
1886 // Establish the connection to the window server and create |
|
1887 // a WindowGroup and a Window object |
|
1888 CreateAndActivateWindowL(TSize(100,100)); |
|
1889 |
|
1890 const TInt KWindowWidth = iWindow.Size().iWidth; |
|
1891 const TInt KWindowHeight = iWindow.Size().iHeight; |
|
1892 const TInt KSurfaceWidth = KWindowWidth; |
|
1893 const TInt KSurfaceHeight = KWindowHeight; |
|
1894 |
|
1895 // Create display object |
|
1896 GetDisplayL(); |
|
1897 CreateEglSessionL(); // initialise EGL Session so we can make use of its helper objects |
|
1898 iEglSess->InitializeL(); |
|
1899 |
|
1900 // Choose EGL config |
|
1901 EGLConfig matchingConfigs[1]; |
|
1902 EGLint numConfigs = 0; |
|
1903 |
|
1904 // If all window surfaces in EGL are scalable, first case must be skipped. Others still valid |
|
1905 TInt index = iAllScalable ? 1 : 0; |
|
1906 for(; index < 3; index++) |
|
1907 { |
|
1908 switch(index) |
|
1909 { |
|
1910 case 0: |
|
1911 // Create the non-fixed size window surface and the egl context and make them current |
|
1912 INFO_PRINTF1(_L("Create the non-fixed size window surface and the egl context and make them current...")); |
|
1913 ASSERT_EGL_TRUE(eglChooseConfig(iDisplay, KScalingConfigAttribs[EWindowAttribs_NoScaling], matchingConfigs, 1, &numConfigs)); |
|
1914 TESTL(numConfigs == 1); |
|
1915 iEglSess->CreateWindowSurfaceAndMakeCurrentL(matchingConfigs[0], iWindow); |
|
1916 break; |
|
1917 case 1: |
|
1918 // Create the pbuffer surface and the egl context and make them current |
|
1919 INFO_PRINTF1(_L("Create the pbuffer surface and the egl context and make them current...")); |
|
1920 ASSERT_EGL_TRUE(eglChooseConfig(iDisplay, KConfigAttribs[EPBufferAttribsColor16MU], matchingConfigs, 1, &numConfigs)); |
|
1921 TESTL(numConfigs == 1); |
|
1922 iEglSess->CreatePbufferSurfaceAndMakeCurrentL(matchingConfigs[0], TSize(KSurfaceWidth, KSurfaceHeight)); |
|
1923 break; |
|
1924 case 2: |
|
1925 // Create the pixmap surface and the egl context and make them current |
|
1926 INFO_PRINTF1(_L("Create the pixmap surface and the egl context and make them current...")); |
|
1927 ASSERT_EGL_TRUE(eglChooseConfig(iDisplay, KConfigAttribs[EPixmapAttribsColor16MU], matchingConfigs, 1, &numConfigs)); |
|
1928 TESTL(numConfigs == 1); |
|
1929 iEglSess->CreatePixmapSurfaceAndMakeCurrentAndMatchL(TSize(KSurfaceWidth, KSurfaceHeight), EColor16MU); |
|
1930 break; |
|
1931 } |
|
1932 |
|
1933 // Set border color values to a non fixed size window (nothing should happen) |
|
1934 const EGLint KRedChannelColor = 0x20; |
|
1935 const EGLint KGreenChannelColor = 0x40; |
|
1936 const EGLint KBlueChannelColor = 0x60; |
|
1937 ASSERT_EGL_TRUE(eglSurfaceAttrib(iDisplay, iEglSess->Surface(), EGL_BORDER_COLOR_RED_NOK, KRedChannelColor)); |
|
1938 ASSERT_EGL_TRUE(eglSurfaceAttrib(iDisplay, iEglSess->Surface(), EGL_BORDER_COLOR_BLUE_NOK, KBlueChannelColor)); |
|
1939 ASSERT_EGL_TRUE(eglSurfaceAttrib(iDisplay, iEglSess->Surface(), EGL_BORDER_COLOR_GREEN_NOK, KGreenChannelColor)); |
|
1940 |
|
1941 // Check all attributes (this is a non-fixed size window) |
|
1942 // Note that we cannot use CheckBorderColorL because values are not updated |
|
1943 EGLint redChannelColor = -1; |
|
1944 EGLint greenChannelColor = -2; |
|
1945 EGLint blueChannelColor = -3; |
|
1946 ASSERT_EGL_TRUE(eglQuerySurface(iDisplay, iEglSess->Surface(), EGL_BORDER_COLOR_RED_NOK, &redChannelColor)); |
|
1947 ASSERT_EGL_TRUE(eglQuerySurface(iDisplay, iEglSess->Surface(), EGL_BORDER_COLOR_BLUE_NOK, &blueChannelColor)); |
|
1948 ASSERT_EGL_TRUE(eglQuerySurface(iDisplay, iEglSess->Surface(), EGL_BORDER_COLOR_GREEN_NOK, &greenChannelColor)); |
|
1949 TEST(redChannelColor == -1); |
|
1950 TEST(greenChannelColor == -2); |
|
1951 TEST(blueChannelColor == -3); |
|
1952 |
|
1953 // Set invalid border color values to a non fixed size window (nothing should happen) |
|
1954 INFO_PRINTF1(_L("Attempt to set invalid border color values to a non fixed size window...")); |
|
1955 ASSERT_EGL_TRUE(eglSurfaceAttrib(iDisplay, iEglSess->Surface(), EGL_BORDER_COLOR_RED_NOK, KRedChannelColor+256)); |
|
1956 ASSERT_EGL_TRUE(eglSurfaceAttrib(iDisplay, iEglSess->Surface(), EGL_BORDER_COLOR_BLUE_NOK, KBlueChannelColor+256)); |
|
1957 ASSERT_EGL_TRUE(eglSurfaceAttrib(iDisplay, iEglSess->Surface(), EGL_BORDER_COLOR_GREEN_NOK, KGreenChannelColor+256)); |
|
1958 |
|
1959 // Check all attributes (this is a non-fixed size window) |
|
1960 // Note that we cannot use CheckBorderColorL because values are not updated |
|
1961 ASSERT_EGL_TRUE(eglQuerySurface(iDisplay, iEglSess->Surface(), EGL_BORDER_COLOR_RED_NOK, &redChannelColor)); |
|
1962 ASSERT_EGL_TRUE(eglQuerySurface(iDisplay, iEglSess->Surface(), EGL_BORDER_COLOR_BLUE_NOK, &blueChannelColor)); |
|
1963 ASSERT_EGL_TRUE(eglQuerySurface(iDisplay, iEglSess->Surface(), EGL_BORDER_COLOR_GREEN_NOK, &greenChannelColor)); |
|
1964 TEST(redChannelColor == -1); |
|
1965 TEST(greenChannelColor == -2); |
|
1966 TEST(blueChannelColor == -3); |
|
1967 |
|
1968 // destroy surface and context |
|
1969 iEglSess->CleanupSurfaceAndContextL(); |
|
1970 } |
|
1971 |
|
1972 // Cleanup |
|
1973 CleanAll(); |
|
1974 CloseWindow(); |
|
1975 |
|
1976 INFO_PRINTF1(_L("....CEglTest_SurfaceScalingModifyingBorderColorNonFixed::doTestStepL completed!")); |
|
1977 |
|
1978 RecordTestResultL(); |
|
1979 CloseTMSGraphicsStep(); |
|
1980 return TestStepResult(); |
|
1981 } |
|
1982 |
|
1983 /** |
|
1984 @SYMTestCaseID GRAPHICS-EGL-0658 |
|
1985 |
|
1986 @SYMTestPriority 1 |
|
1987 |
|
1988 @SYMPREQ 2676 |
|
1989 |
|
1990 @SYMREQ 417-56592 |
|
1991 |
|
1992 @SYMTestCaseDesc |
|
1993 Negative testing. Attempt to modify an existing fixed size surface border color with invalid values. |
|
1994 |
|
1995 @SYMTestActions |
|
1996 1. Create a fixed size EGL Window Surface with border color specified. |
|
1997 2. Try to modify border color with the negative values. |
|
1998 3. Try to modify border color with the positive values greater than 255. |
|
1999 |
|
2000 @SYMTestExpectedResults |
|
2001 Attempt to modify the border color with the new values will fail with error code EGL_BAD_ATTRIBUTE. |
|
2002 */ |
|
2003 TVerdict CEglTest_SurfaceScalingModifyingInvalidBorderColor::doTestStepL() |
|
2004 { |
|
2005 SetTestStepName(_L("GRAPHICS-EGL-0658")); |
|
2006 SetTestStepID(_L("GRAPHICS-EGL-0658")); |
|
2007 INFO_PRINTF1(_L("CEglTest_SurfaceScalingModifyingInvalidBorderColor::doTestStepL")); |
|
2008 |
|
2009 // Establish the connection to the window server and create |
|
2010 // a WindowGroup and a Window object |
|
2011 CreateAndActivateWindowL(TSize(100,100)); |
|
2012 const TInt KWindowWidth = iWindow.Size().iWidth; |
|
2013 const TInt KWindowHeight = iWindow.Size().iHeight; |
|
2014 |
|
2015 // Create display object |
|
2016 GetDisplayL(); |
|
2017 CreateEglSessionL(); // initialise EGL Session so we can make use of its helper objects |
|
2018 iEglSess->InitializeL(); |
|
2019 |
|
2020 // Choose EGL config |
|
2021 EGLConfig matchingConfigs[1]; |
|
2022 EGLint numConfigs = 0; |
|
2023 |
|
2024 ASSERT_EGL_TRUE(eglChooseConfig(iDisplay, KScalingConfigAttribs[EWindowAttribsColor16MU_Scaling], matchingConfigs, 1, &numConfigs)); |
|
2025 TESTL (numConfigs == 1); // Abort the test if the EGL config is not supported |
|
2026 |
|
2027 // Make the fixed size surface half width and height of the window |
|
2028 const TInt KSurfaceWidth = KWindowWidth/2; |
|
2029 const TInt KSurfaceHeight = KWindowHeight/2; |
|
2030 const EGLint KRedChannelColor = 0x20; |
|
2031 const EGLint KGreenChannelColor = 0x40; |
|
2032 const EGLint KBlueChannelColor = 0x60; |
|
2033 |
|
2034 EGLint attrib_list[] = { |
|
2035 EGL_FIXED_WIDTH_NOK, KSurfaceWidth, |
|
2036 EGL_FIXED_HEIGHT_NOK, KSurfaceHeight, |
|
2037 EGL_TARGET_EXTENT_OFFSET_X_NOK, 0, |
|
2038 EGL_TARGET_EXTENT_OFFSET_Y_NOK, 0, |
|
2039 EGL_TARGET_EXTENT_WIDTH_NOK, KWindowWidth, |
|
2040 EGL_TARGET_EXTENT_HEIGHT_NOK, KWindowHeight, |
|
2041 EGL_BORDER_COLOR_RED_NOK, KRedChannelColor, |
|
2042 EGL_BORDER_COLOR_BLUE_NOK, KBlueChannelColor, |
|
2043 EGL_BORDER_COLOR_GREEN_NOK, KGreenChannelColor, |
|
2044 EGL_NONE}; |
|
2045 |
|
2046 |
|
2047 // Create the window surface and the egl context and make them current |
|
2048 iEglSess->CreateWindowSurfaceAndMakeCurrentL(matchingConfigs[0], iWindow, EFalse, EGL_OPENVG_API, 1, attrib_list); |
|
2049 |
|
2050 // check initial values match |
|
2051 CheckBorderColorL(KRedChannelColor, KBlueChannelColor, KGreenChannelColor); |
|
2052 |
|
2053 //modify existing attributes with negative value |
|
2054 INFO_PRINTF1(_L("Attempt to set negative border color values...")); |
|
2055 TEST(eglSurfaceAttrib(iDisplay, iEglSess->Surface(), EGL_BORDER_COLOR_RED_NOK, -KRedChannelColor) == EGL_FALSE); |
|
2056 ASSERT_EGL_ERROR(EGL_BAD_PARAMETER); |
|
2057 TEST(eglSurfaceAttrib(iDisplay, iEglSess->Surface(), EGL_BORDER_COLOR_BLUE_NOK, -KBlueChannelColor) == EGL_FALSE); |
|
2058 ASSERT_EGL_ERROR(EGL_BAD_PARAMETER); |
|
2059 TEST(eglSurfaceAttrib(iDisplay, iEglSess->Surface(), EGL_BORDER_COLOR_GREEN_NOK, -KGreenChannelColor) == EGL_FALSE); |
|
2060 ASSERT_EGL_ERROR(EGL_BAD_PARAMETER); |
|
2061 |
|
2062 //check that border color has not been modified |
|
2063 CheckBorderColorL(KRedChannelColor, KBlueChannelColor, KGreenChannelColor); |
|
2064 |
|
2065 //modify existing attributes with very big positive value |
|
2066 INFO_PRINTF1(_L("Attempt to set border color values that are too big...")); |
|
2067 TEST(eglSurfaceAttrib(iDisplay, iEglSess->Surface(), EGL_BORDER_COLOR_RED_NOK, KRedChannelColor + 256) == EGL_FALSE); |
|
2068 ASSERT_EGL_ERROR(EGL_BAD_PARAMETER); |
|
2069 TEST(eglSurfaceAttrib(iDisplay, iEglSess->Surface(), EGL_BORDER_COLOR_BLUE_NOK, KBlueChannelColor + 256) == EGL_FALSE); |
|
2070 ASSERT_EGL_ERROR(EGL_BAD_PARAMETER); |
|
2071 TEST(eglSurfaceAttrib(iDisplay, iEglSess->Surface(), EGL_BORDER_COLOR_GREEN_NOK, KGreenChannelColor + 256) == EGL_FALSE); |
|
2072 ASSERT_EGL_ERROR(EGL_BAD_PARAMETER); |
|
2073 |
|
2074 //check that border color has not been modified |
|
2075 CheckBorderColorL(KRedChannelColor, KBlueChannelColor, KGreenChannelColor); |
|
2076 |
|
2077 /// Cleanup |
|
2078 iEglSess->CleanupSurfaceAndContextL(); |
|
2079 CleanAll(); |
|
2080 CloseWindow(); |
|
2081 |
|
2082 INFO_PRINTF1(_L("....CEglTest_SurfaceScalingModifyingInvalidBorderColor::doTestStepL completed!")); |
|
2083 RecordTestResultL(); |
|
2084 CloseTMSGraphicsStep(); |
|
2085 return TestStepResult(); |
|
2086 } |
|
2087 |
|
2088 /** |
|
2089 @SYMTestCaseID GRAPHICS-EGL-0659 |
|
2090 |
|
2091 @SYMTestPriority 1 |
|
2092 |
|
2093 @SYMPREQ 2676 |
|
2094 |
|
2095 @SYMREQ 417-56592 |
|
2096 |
|
2097 @SYMTestCaseDesc |
|
2098 Negative testing. Attempt to modify an extent with eglSurfaceAttrib() after surface has been created. |
|
2099 |
|
2100 @SYMTestActions |
|
2101 1. Create a fixed size EGL Window Surface. |
|
2102 2. Try to modify a surface extent parameters with arbitrary values via eglSurfaceAttrib(). |
|
2103 |
|
2104 @SYMTestExpectedResults |
|
2105 Attempt to modify the extent will fail with error code EGL_BAD_ATTRIBUTE. |
|
2106 */ |
|
2107 TVerdict CEglTest_SurfaceScalingModifyingExtent::doTestStepL() |
|
2108 { |
|
2109 SetTestStepName(_L("GRAPHICS-EGL-0659")); |
|
2110 SetTestStepID(_L("GRAPHICS-EGL-0659")); |
|
2111 INFO_PRINTF1(_L("CEglTest_SurfaceScalingModifyingExtent::doTestStepL")); |
|
2112 |
|
2113 // Establish the connection to the window server and create |
|
2114 // a WindowGroup and a Window object |
|
2115 CreateAndActivateWindowL(TSize(100,100)); |
|
2116 |
|
2117 // Create display object |
|
2118 GetDisplayL(); |
|
2119 CreateEglSessionL(); // initialise EGL Session so we can make use of its helper objects |
|
2120 iEglSess->InitializeL(); |
|
2121 |
|
2122 INFO_PRINTF1(_L("Attempt to modify surface extent for fixed size surfaces...")); |
|
2123 // Choose EGL config |
|
2124 EGLConfig matchingConfigs[1]; |
|
2125 EGLint numConfigs = 0; |
|
2126 ASSERT_EGL_TRUE(eglChooseConfig(iDisplay, KScalingConfigAttribs[EWindowAttribsColor16MU_Scaling], matchingConfigs, 1, &numConfigs)); |
|
2127 TESTL (numConfigs == 1); // Abort the test if the EGL config is not supported |
|
2128 |
|
2129 const TInt KWindowWidth = iWindow.Size().iWidth; |
|
2130 const TInt KWindowHeight = iWindow.Size().iHeight; |
|
2131 const TInt KSurfaceWidth = KWindowWidth/2; |
|
2132 const TInt KSurfaceHeight = KWindowHeight/2; |
|
2133 const TInt KExtentWidth = KWindowWidth; |
|
2134 const TInt KExtentHeight = KWindowHeight; |
|
2135 const TInt KOffsetX = 10; |
|
2136 const TInt KOffsetY = 20; |
|
2137 |
|
2138 EGLint attrib_list[] = { |
|
2139 EGL_FIXED_WIDTH_NOK, KSurfaceWidth, |
|
2140 EGL_FIXED_HEIGHT_NOK, KSurfaceHeight, |
|
2141 EGL_TARGET_EXTENT_OFFSET_X_NOK, KOffsetX, |
|
2142 EGL_TARGET_EXTENT_OFFSET_Y_NOK, KOffsetY, |
|
2143 EGL_TARGET_EXTENT_WIDTH_NOK, KExtentWidth, |
|
2144 EGL_TARGET_EXTENT_HEIGHT_NOK, KExtentHeight, |
|
2145 EGL_NONE}; |
|
2146 |
|
2147 // Create the window surface and the egl context and make them current |
|
2148 iEglSess->CreateWindowSurfaceAndMakeCurrentL(matchingConfigs[0], iWindow, EFalse, EGL_OPENVG_API, 1, attrib_list); |
|
2149 |
|
2150 // Invalid update - modify existing attributes with any value |
|
2151 TEST(eglSurfaceAttrib(iDisplay, iEglSess->Surface(), EGL_FIXED_WIDTH_NOK, KSurfaceWidth/2) == EGL_FALSE); |
|
2152 ASSERT_EGL_ERROR(EGL_BAD_ATTRIBUTE); |
|
2153 TEST(eglSurfaceAttrib(iDisplay, iEglSess->Surface(), EGL_FIXED_HEIGHT_NOK, KSurfaceHeight/2) == EGL_FALSE); |
|
2154 ASSERT_EGL_ERROR(EGL_BAD_ATTRIBUTE); |
|
2155 TEST(eglSurfaceAttrib(iDisplay, iEglSess->Surface(), EGL_TARGET_EXTENT_WIDTH_NOK, KExtentWidth/2) == EGL_FALSE); |
|
2156 ASSERT_EGL_ERROR(EGL_BAD_ATTRIBUTE); |
|
2157 TEST(eglSurfaceAttrib(iDisplay, iEglSess->Surface(), EGL_TARGET_EXTENT_HEIGHT_NOK, KExtentHeight/2) == EGL_FALSE); |
|
2158 ASSERT_EGL_ERROR(EGL_BAD_ATTRIBUTE); |
|
2159 TEST(eglSurfaceAttrib(iDisplay, iEglSess->Surface(), EGL_TARGET_EXTENT_OFFSET_X_NOK, KOffsetX/2) == EGL_FALSE); |
|
2160 ASSERT_EGL_ERROR(EGL_BAD_ATTRIBUTE); |
|
2161 TEST(eglSurfaceAttrib(iDisplay, iEglSess->Surface(), EGL_TARGET_EXTENT_OFFSET_Y_NOK, KOffsetY/2) == EGL_FALSE); |
|
2162 ASSERT_EGL_ERROR(EGL_BAD_ATTRIBUTE); |
|
2163 |
|
2164 // check that attributes have not been modified |
|
2165 CheckScalingAttributesL(KSurfaceWidth, KSurfaceHeight, KExtentWidth, KExtentHeight, KOffsetX, KOffsetY); |
|
2166 |
|
2167 /// Cleanup |
|
2168 iEglSess->CleanupSurfaceAndContextL(); |
|
2169 CleanAll(); |
|
2170 CloseWindow(); |
|
2171 |
|
2172 INFO_PRINTF1(_L("....CEglTest_SurfaceScalingModifyingExtent::doTestStepL completed!")); |
|
2173 RecordTestResultL(); |
|
2174 CloseTMSGraphicsStep(); |
|
2175 return TestStepResult(); |
|
2176 } |
|
2177 |
|
2178 /** |
|
2179 @SYMTestCaseID GRAPHICS-EGL-0671 |
|
2180 |
|
2181 @SYMTestPriority 1 |
|
2182 |
|
2183 @SYMPREQ 2676 |
|
2184 |
|
2185 @SYMREQ 417-56592 |
|
2186 |
|
2187 @SYMTestCaseDesc |
|
2188 Negative testing. Attempt to modify an extent with eglSurfaceAttrib() after surface has been created. |
|
2189 |
|
2190 @SYMTestActions |
|
2191 1. Create a non fixed size EGL Window Surface. |
|
2192 2. Try to modify a surface extent parameters with arbitrary values via eglSurfaceAttrib(). |
|
2193 3. Repeat steps 2-3 for pixmap and pbuffer surface |
|
2194 |
|
2195 @SYMTestExpectedResults |
|
2196 Attempt to modify the extent will fail with error code EGL_BAD_ATTRIBUTE. |
|
2197 */ |
|
2198 TVerdict CEglTest_SurfaceScalingModifyingExtentNonFixed::doTestStepL() |
|
2199 { |
|
2200 SetTestStepName(_L("GRAPHICS-EGL-0671")); |
|
2201 SetTestStepID(_L("GRAPHICS-EGL-0671")); |
|
2202 INFO_PRINTF1(_L("CEglTest_SurfaceScalingModifyingExtentNonFixed::doTestStepL")); |
|
2203 |
|
2204 // Establish the connection to the window server and create |
|
2205 // a WindowGroup and a Window object |
|
2206 CreateAndActivateWindowL(TSize(100,100)); |
|
2207 |
|
2208 const TInt KWindowWidth = iWindow.Size().iWidth; |
|
2209 const TInt KWindowHeight = iWindow.Size().iHeight; |
|
2210 const TInt KSurfaceWidth = KWindowWidth; |
|
2211 const TInt KSurfaceHeight = KWindowHeight; |
|
2212 const TInt KExtentWidth = KWindowWidth; |
|
2213 const TInt KExtentHeight = KWindowHeight; |
|
2214 const TInt KOffsetX = 11; |
|
2215 const TInt KOffsetY = 22; |
|
2216 |
|
2217 // Create display object |
|
2218 GetDisplayL(); |
|
2219 CreateEglSessionL(); // initialise EGL Session so we can make use of its helper objects |
|
2220 iEglSess->InitializeL(); |
|
2221 |
|
2222 // Choose EGL config |
|
2223 EGLConfig matchingConfigs[1]; |
|
2224 EGLint numConfigs = 0; |
|
2225 |
|
2226 // If all window surfaces in EGL are scalable, first case must be skipped. Others still valid |
|
2227 TInt index = iAllScalable ? 1 : 0; |
|
2228 for(; index < 3; index++) |
|
2229 { |
|
2230 switch(index) |
|
2231 { |
|
2232 case 0: |
|
2233 // Create the non-fixed size window surface and the egl context and make them current |
|
2234 INFO_PRINTF1(_L("Create the non-fixed size window surface and the egl context and make them current...")); |
|
2235 ASSERT_EGL_TRUE(eglChooseConfig(iDisplay, KScalingConfigAttribs[EWindowAttribs_NoScaling], matchingConfigs, 1, &numConfigs)); |
|
2236 TESTL(numConfigs == 1); |
|
2237 iEglSess->CreateWindowSurfaceAndMakeCurrentL(matchingConfigs[0], iWindow); |
|
2238 break; |
|
2239 case 1: |
|
2240 // Create the pbuffer surface and the egl context and make them current |
|
2241 INFO_PRINTF1(_L("Create the pbuffer surface and the egl context and make them current...")); |
|
2242 ASSERT_EGL_TRUE(eglChooseConfig(iDisplay, KConfigAttribs[EPBufferAttribsColor16MU], matchingConfigs, 1, &numConfigs)); |
|
2243 TESTL(numConfigs == 1); |
|
2244 iEglSess->CreatePbufferSurfaceAndMakeCurrentL(matchingConfigs[0], TSize(KSurfaceWidth, KSurfaceHeight)); |
|
2245 break; |
|
2246 case 2: |
|
2247 // Create the pixmap surface and the egl context and make them current |
|
2248 INFO_PRINTF1(_L("Create the pixmap surface and the egl context and make them current...")); |
|
2249 ASSERT_EGL_TRUE(eglChooseConfig(iDisplay, KConfigAttribs[EPixmapAttribsColor16MU], matchingConfigs, 1, &numConfigs)); |
|
2250 TESTL(numConfigs == 1); |
|
2251 iEglSess->CreatePixmapSurfaceAndMakeCurrentAndMatchL(TSize(KSurfaceWidth, KSurfaceHeight), EColor16MU); |
|
2252 break; |
|
2253 } |
|
2254 |
|
2255 // Invalid update - modify existing attributes with any value |
|
2256 TEST(eglSurfaceAttrib(iDisplay, iEglSess->Surface(), EGL_FIXED_WIDTH_NOK, KSurfaceWidth/2) == EGL_FALSE); |
|
2257 ASSERT_EGL_ERROR(EGL_BAD_ATTRIBUTE); |
|
2258 TEST(eglSurfaceAttrib(iDisplay, iEglSess->Surface(), EGL_FIXED_HEIGHT_NOK, KSurfaceHeight/2) == EGL_FALSE); |
|
2259 ASSERT_EGL_ERROR(EGL_BAD_ATTRIBUTE); |
|
2260 TEST(eglSurfaceAttrib(iDisplay, iEglSess->Surface(), EGL_TARGET_EXTENT_WIDTH_NOK, KExtentWidth/2) == EGL_FALSE); |
|
2261 ASSERT_EGL_ERROR(EGL_BAD_ATTRIBUTE); |
|
2262 TEST(eglSurfaceAttrib(iDisplay, iEglSess->Surface(), EGL_TARGET_EXTENT_HEIGHT_NOK, KExtentHeight/2) == EGL_FALSE); |
|
2263 ASSERT_EGL_ERROR(EGL_BAD_ATTRIBUTE); |
|
2264 TEST(eglSurfaceAttrib(iDisplay, iEglSess->Surface(), EGL_TARGET_EXTENT_OFFSET_X_NOK, KOffsetX/2) == EGL_FALSE); |
|
2265 ASSERT_EGL_ERROR(EGL_BAD_ATTRIBUTE); |
|
2266 TEST(eglSurfaceAttrib(iDisplay, iEglSess->Surface(), EGL_TARGET_EXTENT_OFFSET_Y_NOK, KOffsetY/2) == EGL_FALSE); |
|
2267 ASSERT_EGL_ERROR(EGL_BAD_ATTRIBUTE); |
|
2268 |
|
2269 // destroy surface and context |
|
2270 iEglSess->CleanupSurfaceAndContextL(); |
|
2271 } |
|
2272 |
|
2273 /// Cleanup |
|
2274 CleanAll(); |
|
2275 CloseWindow(); |
|
2276 |
|
2277 INFO_PRINTF1(_L("....CEglTest_SurfaceScalingModifyingExtentNonFixed::doTestStepL completed!")); |
|
2278 RecordTestResultL(); |
|
2279 CloseTMSGraphicsStep(); |
|
2280 return TestStepResult(); |
|
2281 } |
|
2282 |
|
2283 /** |
|
2284 @SYMTestCaseID GRAPHICS-EGL-0660 |
|
2285 |
|
2286 @SYMTestPriority 1 |
|
2287 |
|
2288 @SYMPREQ 2676 |
|
2289 |
|
2290 @SYMREQ 417-56592 |
|
2291 |
|
2292 @SYMTestCaseDesc |
|
2293 Query surface attrubutes related to scaling. |
|
2294 |
|
2295 @SYMTestActions |
|
2296 1. Create a non-fixed size EGL Window Surface. |
|
2297 2. Query surface attributes. |
|
2298 |
|
2299 @SYMTestExpectedResults |
|
2300 2. Query surface attributes succeeds and all atributes matches to the expected values. |
|
2301 */ |
|
2302 TVerdict CEglTest_SurfaceScalingQuerySurface::doTestStepL() |
|
2303 { |
|
2304 SetTestStepName(_L("GRAPHICS-EGL-0660")); |
|
2305 SetTestStepID(_L("GRAPHICS-EGL-0660")); |
|
2306 INFO_PRINTF1(_L("CEglTest_SurfaceScalingQuerySurface::doTestStepL")); |
|
2307 |
|
2308 // Establish the connection to the window server and create |
|
2309 // a WindowGroup and a Window object |
|
2310 CreateAndActivateWindowL(TSize(100,100)); |
|
2311 |
|
2312 // Create display object |
|
2313 GetDisplayL(); |
|
2314 CreateEglSessionL(); // initialise EGL Session so we can make use of its helper objects |
|
2315 iEglSess->InitializeL(); |
|
2316 |
|
2317 // Choose EGL config |
|
2318 EGLConfig matchingConfigs[1]; |
|
2319 EGLint numConfigs = 0; |
|
2320 ASSERT_EGL_TRUE(eglChooseConfig(iDisplay, KScalingConfigAttribs[EWindowAttribsColor16MU_Scaling], matchingConfigs, 1, &numConfigs)); |
|
2321 TESTL (numConfigs == 1); // Abort the test if the EGL config is not supported |
|
2322 |
|
2323 const TInt KWindowWidth = iWindow.Size().iWidth; |
|
2324 const TInt KWindowHeight = iWindow.Size().iHeight; |
|
2325 const TInt KSurfaceWidth = KWindowWidth/2; |
|
2326 const TInt KSurfaceHeight = KWindowHeight/2; |
|
2327 const TInt KExtentWidth = KWindowWidth; |
|
2328 const TInt KExtentHeight = KWindowHeight; |
|
2329 const EGLint KXOffset = 10; |
|
2330 const EGLint KYOffset = 20; |
|
2331 const EGLint KBorderColorRed = 0xa0; |
|
2332 const EGLint KBorderColorBlue = 0xf0; |
|
2333 const EGLint KBorderColorGreen = 0xfc; |
|
2334 |
|
2335 EGLint attrib_list[] = { |
|
2336 EGL_FIXED_WIDTH_NOK, KSurfaceWidth, |
|
2337 EGL_FIXED_HEIGHT_NOK, KSurfaceHeight, |
|
2338 EGL_TARGET_EXTENT_OFFSET_X_NOK, KXOffset, |
|
2339 EGL_TARGET_EXTENT_OFFSET_Y_NOK, KYOffset, |
|
2340 EGL_TARGET_EXTENT_WIDTH_NOK, KExtentWidth, |
|
2341 EGL_TARGET_EXTENT_HEIGHT_NOK, KExtentHeight, |
|
2342 EGL_BORDER_COLOR_BLUE_NOK, KBorderColorBlue, |
|
2343 EGL_BORDER_COLOR_GREEN_NOK, KBorderColorGreen, |
|
2344 EGL_BORDER_COLOR_RED_NOK, KBorderColorRed, |
|
2345 EGL_NONE}; |
|
2346 |
|
2347 // Create the window surface and the egl context and make them current |
|
2348 iEglSess->CreateWindowSurfaceAndMakeCurrentL(matchingConfigs[0], iWindow, EFalse, EGL_OPENVG_API, 1, attrib_list); |
|
2349 |
|
2350 INFO_PRINTF1(_L("Query surface attributes and border colour back and check expected values...")); |
|
2351 CheckBorderColorL(KBorderColorRed, KBorderColorBlue, KBorderColorGreen); |
|
2352 CheckScalingAttributesL(KSurfaceWidth, KSurfaceHeight, KExtentWidth, KExtentHeight, KXOffset, KYOffset); |
|
2353 |
|
2354 INFO_PRINTF1(_L("Check EGL_FIXED_WIDTH_NOK and EGL_FIXED_HEIGHT_NOK cannot be queried...")); |
|
2355 EGLint surfaceFixedWidth = -1; |
|
2356 EGLint surfaceFixedHeight = -2; |
|
2357 TEST(EGL_FALSE == eglQuerySurface(iDisplay, iEglSess->Surface(), EGL_FIXED_WIDTH_NOK, &surfaceFixedWidth)); |
|
2358 ASSERT_EGL_ERROR(EGL_BAD_ATTRIBUTE); |
|
2359 TEST(EGL_FALSE == eglQuerySurface(iDisplay, iEglSess->Surface(), EGL_FIXED_HEIGHT_NOK, &surfaceFixedHeight)); |
|
2360 ASSERT_EGL_ERROR(EGL_BAD_ATTRIBUTE); |
|
2361 TEST(surfaceFixedWidth == -1); |
|
2362 TEST(surfaceFixedHeight == -2); |
|
2363 |
|
2364 // clean-up |
|
2365 iEglSess->CleanupSurfaceAndContextL(); |
|
2366 CloseWindow(); |
|
2367 CleanAll(); |
|
2368 |
|
2369 INFO_PRINTF1(_L("....CEglTest_SurfaceScalingQuerySurface::doTestStepL completed!")); |
|
2370 RecordTestResultL(); |
|
2371 CloseTMSGraphicsStep(); |
|
2372 return TestStepResult(); |
|
2373 } |
|
2374 |
|
2375 /** |
|
2376 @SYMTestCaseID GRAPHICS-EGL-0662 |
|
2377 |
|
2378 @SYMTestPriority 1 |
|
2379 |
|
2380 @SYMPREQ 2676 |
|
2381 |
|
2382 @SYMREQ 417-56592 |
|
2383 |
|
2384 @SYMTestCaseDesc |
|
2385 Negative testing. Query surface attributes which are not supported by this API. |
|
2386 |
|
2387 @SYMTestActions |
|
2388 1. Create a non-fixed size EGL window surface. |
|
2389 2. Query surface attributes. |
|
2390 3. Repeat step 2 for EGL window surface, pixmap and pbuffer surface |
|
2391 |
|
2392 @SYMTestExpectedResults |
|
2393 Query surface attributes will fail with error code EGL_BAD_ATTRIBUTE. |
|
2394 */ |
|
2395 TVerdict CEglTest_SurfaceScalingQuerySurfaceNonFixed::doTestStepL() |
|
2396 { |
|
2397 SetTestStepName(_L("GRAPHICS-EGL-0662")); |
|
2398 SetTestStepID(_L("GRAPHICS-EGL-0662")); |
|
2399 INFO_PRINTF1(_L("CEglTest_SurfaceScalingQuerySurfaceNonFixed::doTestStepL")); |
|
2400 |
|
2401 // Establish the connection to the window server and create |
|
2402 // a WindowGroup and a Window object |
|
2403 CreateAndActivateWindowL(TSize(100,100)); |
|
2404 |
|
2405 const TInt KWindowWidth = iWindow.Size().iWidth; |
|
2406 const TInt KWindowHeight = iWindow.Size().iHeight; |
|
2407 const TInt KSurfaceWidth = KWindowWidth; |
|
2408 const TInt KSurfaceHeight = KWindowHeight; |
|
2409 |
|
2410 // Create display object |
|
2411 GetDisplayL(); |
|
2412 CreateEglSessionL(); // initialise EGL Session so we can make use of its helper objects |
|
2413 iEglSess->InitializeL(); |
|
2414 |
|
2415 // Choose EGL config |
|
2416 EGLConfig matchingConfigs[1]; |
|
2417 EGLint numConfigs = 0; |
|
2418 |
|
2419 // If all window surfaces in EGL are scalable, first case must be skipped. Others still valid |
|
2420 TInt index = iAllScalable ? 1 : 0; |
|
2421 for(; index < 3; index++) |
|
2422 { |
|
2423 switch(index) |
|
2424 { |
|
2425 case 0: |
|
2426 // Create the non-fixed size window surface and the egl context and make them current |
|
2427 INFO_PRINTF1(_L("Create the non-fixed size window surface and the egl context and make them current...")); |
|
2428 ASSERT_EGL_TRUE(eglChooseConfig(iDisplay, KScalingConfigAttribs[EWindowAttribs_NoScaling], matchingConfigs, 1, &numConfigs)); |
|
2429 TESTL(numConfigs == 1); |
|
2430 iEglSess->CreateWindowSurfaceAndMakeCurrentL(matchingConfigs[0], iWindow); |
|
2431 break; |
|
2432 case 1: |
|
2433 // Create the pbuffer surface and the egl context and make them current |
|
2434 INFO_PRINTF1(_L("Create the pbuffer surface and the egl context and make them current...")); |
|
2435 ASSERT_EGL_TRUE(eglChooseConfig(iDisplay, KConfigAttribs[EPBufferAttribsColor16MU], matchingConfigs, 1, &numConfigs)); |
|
2436 TESTL(numConfigs == 1); |
|
2437 iEglSess->CreatePbufferSurfaceAndMakeCurrentL(matchingConfigs[0], TSize(KSurfaceWidth, KSurfaceHeight)); |
|
2438 break; |
|
2439 case 2: |
|
2440 // Create the pixmap surface and the egl context and make them current |
|
2441 INFO_PRINTF1(_L("Create the pixmap surface and the egl context and make them current...")); |
|
2442 ASSERT_EGL_TRUE(eglChooseConfig(iDisplay, KConfigAttribs[EPixmapAttribsColor16MU], matchingConfigs, 1, &numConfigs)); |
|
2443 TESTL(numConfigs == 1); |
|
2444 iEglSess->CreatePixmapSurfaceAndMakeCurrentAndMatchL(TSize(KSurfaceWidth, KSurfaceHeight), EColor16MU); |
|
2445 break; |
|
2446 } |
|
2447 |
|
2448 INFO_PRINTF1(_L("Check EGL_FIXED_WIDTH_NOK and EGL_FIXED_HEIGHT_NOK cannot be queried...")); |
|
2449 EGLint surfaceFixedWidth = -1; |
|
2450 EGLint surfaceFixedHeight = -2; |
|
2451 TEST(EGL_FALSE == eglQuerySurface(iDisplay, iEglSess->Surface(), EGL_FIXED_WIDTH_NOK, &surfaceFixedWidth)); |
|
2452 ASSERT_EGL_ERROR(EGL_BAD_ATTRIBUTE); |
|
2453 TEST(EGL_FALSE == eglQuerySurface(iDisplay, iEglSess->Surface(), EGL_FIXED_HEIGHT_NOK, &surfaceFixedHeight)); |
|
2454 ASSERT_EGL_ERROR(EGL_BAD_ATTRIBUTE); |
|
2455 TEST(surfaceFixedWidth == -1); |
|
2456 TEST(surfaceFixedHeight == -2); |
|
2457 |
|
2458 INFO_PRINTF1(_L("Check surface size is as we would expect...")); |
|
2459 EGLint surfaceWidth = 0; |
|
2460 EGLint surfaceHeight = 0; |
|
2461 ASSERT_EGL_TRUE(eglQuerySurface(iDisplay, iEglSess->Surface(), EGL_WIDTH, &surfaceWidth)); |
|
2462 ASSERT_EGL_TRUE(eglQuerySurface(iDisplay, iEglSess->Surface(), EGL_HEIGHT, &surfaceHeight)); |
|
2463 TEST(surfaceWidth == KWindowWidth); // non-fixed size surface |
|
2464 TEST(surfaceHeight == KWindowHeight); // non-fixed size surface |
|
2465 |
|
2466 INFO_PRINTF1(_L("Check scaling attributes cannot be queried...")); |
|
2467 EGLint extentOffsetX = -1; |
|
2468 EGLint extentOffsetY = -2; |
|
2469 EGLint extentWidth = -3; |
|
2470 EGLint extentHeight = -4; |
|
2471 EGLint borderColorBlue = -5; |
|
2472 EGLint borderColorRed = -6; |
|
2473 EGLint borderColorGreen = -7; |
|
2474 ASSERT_EGL_TRUE(eglQuerySurface(iDisplay, iEglSess->Surface(), EGL_TARGET_EXTENT_OFFSET_X_NOK, &extentOffsetX)); |
|
2475 ASSERT_EGL_TRUE(eglQuerySurface(iDisplay, iEglSess->Surface(), EGL_TARGET_EXTENT_OFFSET_Y_NOK, &extentOffsetY)); |
|
2476 ASSERT_EGL_TRUE(eglQuerySurface(iDisplay, iEglSess->Surface(), EGL_TARGET_EXTENT_WIDTH_NOK, &extentWidth)); |
|
2477 ASSERT_EGL_TRUE(eglQuerySurface(iDisplay, iEglSess->Surface(), EGL_TARGET_EXTENT_HEIGHT_NOK, &extentHeight)); |
|
2478 ASSERT_EGL_TRUE(eglQuerySurface(iDisplay, iEglSess->Surface(), EGL_BORDER_COLOR_BLUE_NOK, &borderColorBlue)); |
|
2479 ASSERT_EGL_TRUE(eglQuerySurface(iDisplay, iEglSess->Surface(), EGL_BORDER_COLOR_GREEN_NOK, &borderColorGreen)); |
|
2480 ASSERT_EGL_TRUE(eglQuerySurface(iDisplay, iEglSess->Surface(), EGL_BORDER_COLOR_RED_NOK, &borderColorRed)); |
|
2481 TEST(extentOffsetX == -1); |
|
2482 TEST(extentOffsetY == -2); |
|
2483 TEST(extentWidth == -3); |
|
2484 TEST(extentHeight == -4); |
|
2485 TEST(borderColorBlue == -5); |
|
2486 TEST(borderColorRed == -6); |
|
2487 TEST(borderColorGreen == -7); |
|
2488 |
|
2489 // destroy surface and context |
|
2490 iEglSess->CleanupSurfaceAndContextL(); |
|
2491 } |
|
2492 |
|
2493 // clean-up |
|
2494 CloseWindow(); |
|
2495 CleanAll(); |
|
2496 |
|
2497 INFO_PRINTF1(_L("....CEglTest_SurfaceScalingQuerySurfaceNonFixed::doTestStepL completed!")); |
|
2498 RecordTestResultL(); |
|
2499 CloseTMSGraphicsStep(); |
|
2500 return TestStepResult(); |
|
2501 } |
|
2502 |
|
2503 /** |
|
2504 @SYMTestCaseID GRAPHICS-EGL-0663 |
|
2505 |
|
2506 @SYMTestPriority 1 |
|
2507 |
|
2508 @SYMPREQ 2676 |
|
2509 |
|
2510 @SYMREQ 417-56592 |
|
2511 |
|
2512 @SYMTestCaseDesc |
|
2513 Negative testing. Query surface scaling capability with invalid parameters. |
|
2514 |
|
2515 @SYMTestActions |
|
2516 1. Query surface scaling capability for the different configs. |
|
2517 2. Query surface scaling capability with invalid display. |
|
2518 3. Query surface scaling capability with negative surface width. |
|
2519 4. Query surface scaling capability with negative surface height. |
|
2520 5. Query surface scaling capability with negative target width. |
|
2521 6. Query surface scaling capability with negative target height. |
|
2522 7. Query surface scaling capability with zero surface width. |
|
2523 8. Query surface scaling capability with zero surface height. |
|
2524 9. Query surface scaling capability with zero target width. |
|
2525 10. Query surface scaling capability with zero target height. |
|
2526 |
|
2527 @SYMTestExpectedResults |
|
2528 1. Query surface capability will fail with error code EGL_BAD_MATCH if config doesn't support scaling and succeed otherwise. |
|
2529 2. Query surface capability will fail with error code EGL_BAD_DISPLAY. |
|
2530 3. Query surface capability will fail with error code EGL_BAD_PARAMETER. |
|
2531 4. Query surface capability will fail with error code EGL_BAD_PARAMETER. |
|
2532 5. Query surface capability will fail with error code EGL_BAD_PARAMETER. |
|
2533 6. Query surface capability will fail with error code EGL_BAD_PARAMETER. |
|
2534 7. Query surface capability will fail with error code EGL_BAD_PARAMETER. |
|
2535 8. Query surface capability will fail with error code EGL_BAD_PARAMETER. |
|
2536 9. Query surface capability will fail with error code EGL_BAD_PARAMETER. |
|
2537 10. Query surface capability will fail with error code EGL_BAD_PARAMETER. |
|
2538 */ |
|
2539 TVerdict CEglTest_SurfaceScalingCapability::doTestStepL() |
|
2540 { |
|
2541 SetTestStepName(_L("GRAPHICS-EGL-0663")); |
|
2542 SetTestStepID(_L("GRAPHICS-EGL-0663")); |
|
2543 INFO_PRINTF1(_L("CEglTest_SurfaceScalingCapability::doTestStepL")); |
|
2544 |
|
2545 // Create display object |
|
2546 GetDisplayL(); |
|
2547 CreateEglSessionL(); |
|
2548 iEglSess->InitializeL(); |
|
2549 |
|
2550 // Choose EGL config |
|
2551 EGLConfig matchingConfigs[KMaxEglConfigs]; |
|
2552 EGLint numConfigs = 0; |
|
2553 |
|
2554 CreateAndActivateWindowL(TSize(100,100)); |
|
2555 |
|
2556 const TInt KWindowWidth = iWindow.Size().iWidth; |
|
2557 const TInt KWindowHeight = iWindow.Size().iHeight; |
|
2558 const TInt KSurfaceWidth = KWindowWidth/2; |
|
2559 const TInt KSurfaceHeight = KWindowHeight/2; |
|
2560 const EGLDisplay KInvalidDisplay = iDisplay - 100; |
|
2561 EGLint capability = -1; //arbitrary number beyond the existing range |
|
2562 EGLConfig config = -1; |
|
2563 |
|
2564 INFO_PRINTF1(_L("Calling eglGetConfigs to get configs...")); |
|
2565 ASSERT_EGL_TRUE(eglGetConfigs(iDisplay, matchingConfigs, KMaxEglConfigs, &numConfigs)); |
|
2566 for(TInt index = 0; index < numConfigs; index++) |
|
2567 { |
|
2568 EGLint value = EGL_FALSE; |
|
2569 ASSERT_EGL_TRUE(eglGetConfigAttrib(iDisplay, matchingConfigs[index], EGL_SURFACE_SCALING_NOK, &value)); |
|
2570 if(value == EGL_FALSE) |
|
2571 { |
|
2572 TEST(iPfnEglQuerySurfaceScalingCapabilityNOK(iDisplay, matchingConfigs[index], KSurfaceWidth, KSurfaceHeight, KWindowWidth, KWindowHeight, &capability) == EGL_FALSE); |
|
2573 TEST(capability == -1); //make sure that value has not been modified |
|
2574 ASSERT_EGL_ERROR(EGL_BAD_MATCH); |
|
2575 } |
|
2576 else |
|
2577 { |
|
2578 if(config == -1) |
|
2579 {//memorize the first config that supports scaling |
|
2580 config = matchingConfigs[index]; |
|
2581 } |
|
2582 ASSERT_EGL_TRUE(iPfnEglQuerySurfaceScalingCapabilityNOK(iDisplay, matchingConfigs[index], KSurfaceWidth, KSurfaceHeight, KWindowWidth, KWindowHeight, &capability)); |
|
2583 TEST((capability == EGL_SUPPORTED_NOK) || (capability == EGL_SLOW_NOK)); |
|
2584 capability = -1; |
|
2585 } |
|
2586 } |
|
2587 capability = -1; |
|
2588 TEST(config != -1); // make sure that at least one config supports scaling |
|
2589 |
|
2590 //invalid display |
|
2591 TEST(iPfnEglQuerySurfaceScalingCapabilityNOK(KInvalidDisplay, config, KSurfaceWidth, KSurfaceHeight, KWindowWidth, KWindowHeight, &capability) == EGL_FALSE); |
|
2592 TEST(capability == -1); //make sure that value has not been modified |
|
2593 ASSERT_EGL_ERROR(EGL_BAD_DISPLAY); |
|
2594 |
|
2595 //negative width |
|
2596 TEST(iPfnEglQuerySurfaceScalingCapabilityNOK(iDisplay, config, -KSurfaceWidth, KSurfaceHeight, KWindowWidth, KWindowHeight, &capability) == EGL_FALSE); |
|
2597 TEST(capability == -1); //make sure that value has not been modified |
|
2598 ASSERT_EGL_ERROR(EGL_BAD_PARAMETER); |
|
2599 TEST(iPfnEglQuerySurfaceScalingCapabilityNOK(iDisplay, config, KSurfaceWidth, KSurfaceHeight, -KWindowWidth, KWindowHeight, &capability) == EGL_FALSE); |
|
2600 TEST(capability == -1); //make sure that value has not been modified |
|
2601 ASSERT_EGL_ERROR(EGL_BAD_PARAMETER); |
|
2602 //negative height |
|
2603 TEST(iPfnEglQuerySurfaceScalingCapabilityNOK(iDisplay, config, KSurfaceWidth, -KSurfaceHeight, KWindowWidth, KWindowHeight, &capability) == EGL_FALSE); |
|
2604 TEST(capability == -1); //make sure that value has not been modified |
|
2605 ASSERT_EGL_ERROR(EGL_BAD_PARAMETER); |
|
2606 TEST(iPfnEglQuerySurfaceScalingCapabilityNOK(iDisplay, config, KSurfaceWidth, KSurfaceHeight, KWindowWidth, -KWindowHeight, &capability) == EGL_FALSE); |
|
2607 TEST(capability == -1); //make sure that value has not been modified |
|
2608 ASSERT_EGL_ERROR(EGL_BAD_PARAMETER); |
|
2609 |
|
2610 //zero width |
|
2611 TEST(iPfnEglQuerySurfaceScalingCapabilityNOK(iDisplay, config, -0, KSurfaceHeight, KWindowWidth, KWindowHeight, &capability) == EGL_FALSE); |
|
2612 TEST(capability == -1); //make sure that value has not been modified |
|
2613 ASSERT_EGL_ERROR(EGL_BAD_PARAMETER); |
|
2614 TEST(iPfnEglQuerySurfaceScalingCapabilityNOK(iDisplay, config, KSurfaceWidth, KSurfaceHeight, -0, KWindowHeight, &capability) == EGL_FALSE); |
|
2615 TEST(capability == -1); //make sure that value has not been modified |
|
2616 ASSERT_EGL_ERROR(EGL_BAD_PARAMETER); |
|
2617 //zero height |
|
2618 TEST(iPfnEglQuerySurfaceScalingCapabilityNOK(iDisplay, config, KSurfaceWidth, -0, KWindowWidth, KWindowHeight, &capability) == EGL_FALSE); |
|
2619 TEST(capability == -1); //make sure that value has not been modified |
|
2620 ASSERT_EGL_ERROR(EGL_BAD_PARAMETER); |
|
2621 TEST(iPfnEglQuerySurfaceScalingCapabilityNOK(iDisplay, config, KSurfaceWidth, KSurfaceHeight, KWindowWidth, -0, &capability) == EGL_FALSE); |
|
2622 TEST(capability == -1); //make sure that value has not been modified |
|
2623 ASSERT_EGL_ERROR(EGL_BAD_PARAMETER); |
|
2624 |
|
2625 // Cleanup |
|
2626 CloseWindow(); |
|
2627 CleanAll(); |
|
2628 |
|
2629 INFO_PRINTF1(_L("....CEglTest_SurfaceScalingCapability::doTestStepL completed!")); |
|
2630 RecordTestResultL(); |
|
2631 CloseTMSGraphicsStep(); |
|
2632 return TestStepResult(); |
|
2633 } |
|
2634 |
|
2635 /** |
|
2636 @SYMTestCaseID GRAPHICS-EGL-0664 |
|
2637 |
|
2638 @SYMTestPriority 1 |
|
2639 |
|
2640 @SYMPREQ 2676 |
|
2641 |
|
2642 @SYMREQ 417-56592 |
|
2643 |
|
2644 @SYMTestCaseDesc |
|
2645 Call eglSetSurfaceScalingNOK with fixed size surface and a target extent that can be set. |
|
2646 |
|
2647 @SYMTestActions |
|
2648 Retrieve all available EGL configs and for those that support surface scaling |
|
2649 1. Create a window surface with surface scaling attributes and make it current |
|
2650 2. Query these attributes and check they correspond with what is expected |
|
2651 3. Query if surface supports scaling to a different extent |
|
2652 4. Set the new extent and new offset to the surface |
|
2653 5. Query these attributes |
|
2654 |
|
2655 @SYMTestExpectedResults |
|
2656 5. Surface scaling attributes have been updated |
|
2657 */ |
|
2658 TVerdict CEglTest_SurfaceScalingSet::doTestStepL() |
|
2659 { |
|
2660 SetTestStepName(_L("GRAPHICS-EGL-0664")); |
|
2661 SetTestStepID(_L("GRAPHICS-EGL-0664")); |
|
2662 INFO_PRINTF1(_L("CEglTest_SurfaceScalingSet::doTestStepL")); |
|
2663 |
|
2664 // Establish the connection to the window server and create |
|
2665 // a WindowGroup and a Window object |
|
2666 CreateAndActivateWindowL(TSize(100, 100)); |
|
2667 |
|
2668 const TInt KWindowWidth = iWindow.Size().iWidth; |
|
2669 const TInt KWindowHeight = iWindow.Size().iHeight; |
|
2670 const TInt KSurfaceWidth = KWindowWidth/2; |
|
2671 const TInt KSurfaceHeight = KWindowHeight/2; |
|
2672 const TInt KExtentWidth = KWindowWidth; |
|
2673 const TInt KExtentHeight = KWindowHeight; |
|
2674 const EGLint KOffsetX = 3; |
|
2675 const EGLint KOffsetY = 7; |
|
2676 |
|
2677 EGLint attrib_list[] = { |
|
2678 EGL_FIXED_WIDTH_NOK, KSurfaceWidth, |
|
2679 EGL_FIXED_HEIGHT_NOK, KSurfaceHeight, |
|
2680 EGL_TARGET_EXTENT_OFFSET_X_NOK, KOffsetX, |
|
2681 EGL_TARGET_EXTENT_OFFSET_Y_NOK, KOffsetY, |
|
2682 EGL_TARGET_EXTENT_WIDTH_NOK, KExtentWidth, |
|
2683 EGL_TARGET_EXTENT_HEIGHT_NOK, KExtentHeight, |
|
2684 EGL_NONE}; |
|
2685 |
|
2686 // Create display object |
|
2687 GetDisplayL(); |
|
2688 CreateEglSessionL(); |
|
2689 iEglSess->InitializeL(); |
|
2690 |
|
2691 // Choose EGL config |
|
2692 EGLConfig matchingConfigs[KMaxEglConfigs]; |
|
2693 EGLint numConfigs = 0; |
|
2694 |
|
2695 // Query total number of configs |
|
2696 ASSERT_EGL_TRUE(eglGetConfigs(iDisplay, NULL, KMaxTInt, &numConfigs)); |
|
2697 TESTL(numConfigs >= 1 && numConfigs <= KMaxEglConfigs); |
|
2698 INFO_PRINTF2(_L("Found %d configs"), numConfigs); |
|
2699 |
|
2700 // Get the configs |
|
2701 ASSERT_EGL_TRUE(eglGetConfigs(iDisplay, matchingConfigs, KMaxEglConfigs, &numConfigs)); |
|
2702 |
|
2703 // Check if surface scaling is supported in the config, if so, create surface |
|
2704 for(TInt i=0; i<numConfigs; i++) |
|
2705 { |
|
2706 EGLint value = -32; // arbitraty value which is neither EGL_TRUE nor EGL_FALSE |
|
2707 ASSERT_EGL_TRUE(eglGetConfigAttrib(iDisplay, matchingConfigs[i], EGL_SURFACE_SCALING_NOK, &value)); |
|
2708 if (value==EGL_TRUE) |
|
2709 { |
|
2710 INFO_PRINTF2(_L("Config %d supports surface scaling. Create a window surface..."), i); |
|
2711 |
|
2712 // Create the window surface and the egl context and make them current |
|
2713 EGLint renderableType = 0; |
|
2714 ASSERT_EGL_TRUE(eglGetConfigAttrib(iDisplay, matchingConfigs[i], EGL_RENDERABLE_TYPE, &renderableType)); |
|
2715 if (renderableType&EGL_OPENVG_BIT) |
|
2716 { |
|
2717 iEglSess->CreateWindowSurfaceAndMakeCurrentL(matchingConfigs[i], iWindow, EFalse, EGL_OPENVG_API, 1, attrib_list); |
|
2718 } |
|
2719 else if (renderableType&EGL_OPENGL_ES_BIT) |
|
2720 { |
|
2721 iEglSess->CreateWindowSurfaceAndMakeCurrentL(matchingConfigs[i], iWindow, EFalse, EGL_OPENGL_ES_API, 1, attrib_list); |
|
2722 } |
|
2723 else |
|
2724 { |
|
2725 WARN_PRINTF2(_L("Config %d does not support either OPENVG or OPENGL_ES. Skip!"), i); |
|
2726 continue; |
|
2727 } |
|
2728 |
|
2729 // Check values are as expected |
|
2730 CheckScalingAttributesL(KSurfaceWidth, KSurfaceHeight, KExtentWidth, KExtentHeight, KOffsetX, KOffsetY); |
|
2731 |
|
2732 // modify target extent atttributes |
|
2733 // 1 - first check that this new extent is supported, should do as we're reducing it |
|
2734 EGLint capability = -1; //arbitrary number beyond the existing range |
|
2735 EGLint newExtentWidth = KExtentWidth / 2; |
|
2736 EGLint newExtentHeight = KExtentHeight / 2; |
|
2737 EGLint newOffsetX = KOffsetX * 2; |
|
2738 EGLint newOffsetY = KOffsetY * 2; |
|
2739 ASSERT_EGL_TRUE(iPfnEglQuerySurfaceScalingCapabilityNOK(iDisplay, matchingConfigs[i], KSurfaceWidth, KSurfaceHeight, newExtentWidth, newExtentHeight, &capability)); |
|
2740 TEST((capability == EGL_SUPPORTED_NOK) || (capability == EGL_SLOW_NOK)); |
|
2741 // 2 - set new extent |
|
2742 ASSERT_EGL_TRUE(iPfnEglSetSurfaceScalingNOK(iDisplay, iEglSess->Surface(), newOffsetX, newOffsetY, newExtentWidth, newExtentHeight)); |
|
2743 |
|
2744 // Check attributes have changed |
|
2745 CheckScalingAttributesL(KSurfaceWidth, KSurfaceHeight, newExtentWidth, newExtentHeight, newOffsetX, newOffsetY); |
|
2746 |
|
2747 // Cleanup |
|
2748 iEglSess->CleanupSurfaceAndContextL(); |
|
2749 } |
|
2750 } |
|
2751 |
|
2752 // Cleanup |
|
2753 CloseWindow(); |
|
2754 CleanAll(); |
|
2755 |
|
2756 INFO_PRINTF1(_L("....CEglTest_SurfaceScalingSet::doTestStepL completed!")); |
|
2757 RecordTestResultL(); |
|
2758 CloseTMSGraphicsStep(); |
|
2759 return TestStepResult(); |
|
2760 } |
|
2761 |
|
2762 /** |
|
2763 @SYMTestCaseID GRAPHICS-EGL-0665 |
|
2764 |
|
2765 @SYMTestPriority 1 |
|
2766 |
|
2767 @SYMPREQ 2676 |
|
2768 |
|
2769 @SYMREQ 417-56592 |
|
2770 |
|
2771 @SYMTestCaseDesc |
|
2772 Negative testing. Call eglSetSurfaceScalingNOK with invalid parameters |
|
2773 |
|
2774 @SYMTestActions |
|
2775 1. Set surface scaling with invalid display. |
|
2776 2. Set surface scaling with negative target width. |
|
2777 3. Set surface scaling with negative target height. |
|
2778 3. Set surface scaling with zero target width. |
|
2779 3. Set surface scaling with zero target height. |
|
2780 @SYMTestExpectedResults |
|
2781 1. Set surface scaling will fail with error code EGL_BAD_DISPLAY. |
|
2782 2. Set surface scaling will fail with error code EGL_BAD_PARAMETER. |
|
2783 3. Set surface scaling will fail with error code EGL_BAD_PARAMETER. |
|
2784 4. Set surface scaling will fail with error code EGL_BAD_PARAMETER. |
|
2785 5. Set surface scaling will fail with error code EGL_BAD_PARAMETER. |
|
2786 */ |
|
2787 TVerdict CEglTest_SurfaceScalingSetInvalidAttributes::doTestStepL() |
|
2788 { |
|
2789 SetTestStepName(_L("GRAPHICS-EGL-0665")); |
|
2790 SetTestStepID(_L("GRAPHICS-EGL-0665")); |
|
2791 INFO_PRINTF1(_L("CEglTest_SurfaceScalingSetInvalidAttributes::doTestStepL")); |
|
2792 |
|
2793 // Establish the connection to the window server and create |
|
2794 // a WindowGroup and a Window object |
|
2795 CreateAndActivateWindowL(TSize(100, 100)); |
|
2796 |
|
2797 // Create display object |
|
2798 GetDisplayL(); |
|
2799 CreateEglSessionL(); // initialise EGL Session so we can make use of its helper objects |
|
2800 iEglSess->InitializeL(); |
|
2801 |
|
2802 // Choose EGL config |
|
2803 EGLConfig matchingConfigs[1]; |
|
2804 EGLint numConfigs = 0; |
|
2805 ASSERT_EGL_TRUE(eglChooseConfig(iDisplay, KScalingConfigAttribs[EWindowAttribsColor16MU_Scaling], matchingConfigs, 1, &numConfigs)); |
|
2806 TESTL(numConfigs == 1); // Abort the test if the EGL config is not supported |
|
2807 |
|
2808 const TInt KWindowWidth = iWindow.Size().iWidth; |
|
2809 const TInt KWindowHeight = iWindow.Size().iHeight; |
|
2810 const TInt KSurfaceWidth = KWindowWidth/2; |
|
2811 const TInt KSurfaceHeight = KWindowHeight/2; |
|
2812 const TInt KExtentWidth = KWindowWidth; |
|
2813 const TInt KExtentHeight = KWindowHeight; |
|
2814 const EGLint KOffsetX = 11; |
|
2815 const EGLint KOffsetY = 13; |
|
2816 EGLint attrib_list[] = { |
|
2817 EGL_FIXED_WIDTH_NOK, KSurfaceWidth, |
|
2818 EGL_FIXED_HEIGHT_NOK, KSurfaceHeight, |
|
2819 EGL_TARGET_EXTENT_OFFSET_X_NOK, KOffsetX, |
|
2820 EGL_TARGET_EXTENT_OFFSET_Y_NOK, KOffsetY, |
|
2821 EGL_TARGET_EXTENT_WIDTH_NOK, KExtentWidth, |
|
2822 EGL_TARGET_EXTENT_HEIGHT_NOK, KExtentHeight, |
|
2823 EGL_NONE}; |
|
2824 |
|
2825 // Create the window surface and the egl context and make them current |
|
2826 iEglSess->CreateWindowSurfaceAndMakeCurrentL(matchingConfigs[0], iWindow, EFalse, EGL_OPENVG_API, 1, attrib_list); |
|
2827 |
|
2828 // Check all attributes |
|
2829 CheckScalingAttributesL(KSurfaceWidth, KSurfaceHeight, KExtentWidth, KExtentHeight, KOffsetX, KOffsetY); |
|
2830 |
|
2831 for(TInt index = 0; index < 5; index++) |
|
2832 { |
|
2833 // new attribute values |
|
2834 EGLDisplay newDisplay = iDisplay; |
|
2835 EGLint newExtentWidth = KExtentWidth; |
|
2836 EGLint newExtentHeight = KExtentHeight; |
|
2837 EGLint newOffsetX = KOffsetX; |
|
2838 EGLint newOffsetY = KOffsetY; |
|
2839 // expected error value |
|
2840 EGLint error = EGL_BAD_PARAMETER; |
|
2841 |
|
2842 switch(index) |
|
2843 { |
|
2844 case 0: |
|
2845 // Invalid display - valid extent |
|
2846 newDisplay = newDisplay - 100; |
|
2847 error = EGL_BAD_DISPLAY; |
|
2848 break; |
|
2849 case 1: |
|
2850 // Valid display - Negative extent width |
|
2851 newExtentWidth = -newExtentHeight; |
|
2852 break; |
|
2853 case 2: |
|
2854 // Valid display - Negative extent height |
|
2855 newExtentHeight = -newExtentHeight; |
|
2856 break; |
|
2857 case 3: |
|
2858 // Valid display - zero extent width |
|
2859 newExtentWidth = 0; |
|
2860 break; |
|
2861 case 4: |
|
2862 // Valid display - zero extent height |
|
2863 newExtentHeight = 0; |
|
2864 break; |
|
2865 } |
|
2866 |
|
2867 TEST(EGL_FALSE == iPfnEglSetSurfaceScalingNOK(newDisplay, iEglSess->Surface(), newOffsetX, newOffsetY, newExtentWidth, newExtentHeight)); |
|
2868 ASSERT_EGL_ERROR(error); |
|
2869 |
|
2870 // attributes haven't changed |
|
2871 CheckScalingAttributesL(KSurfaceWidth, KSurfaceHeight, KWindowWidth, KWindowHeight, KOffsetX, KOffsetY); |
|
2872 } |
|
2873 |
|
2874 // Cleanup |
|
2875 CleanAll(); |
|
2876 CloseWindow(); |
|
2877 |
|
2878 INFO_PRINTF1(_L("....CEglTest_SurfaceScalingSetInvalidAttributes::doTestStepL completed!")); |
|
2879 RecordTestResultL(); |
|
2880 CloseTMSGraphicsStep(); |
|
2881 return TestStepResult(); |
|
2882 } |
|
2883 |
|
2884 /** |
|
2885 @SYMTestCaseID GRAPHICS-EGL-0666 |
|
2886 |
|
2887 @SYMTestPriority 1 |
|
2888 |
|
2889 @SYMPREQ 2676 |
|
2890 |
|
2891 @SYMREQ 417-56592 |
|
2892 |
|
2893 @SYMTestCaseDesc |
|
2894 Negative testing. Query scaling attributes in non-fixed size surfaces |
|
2895 |
|
2896 @SYMTestActions |
|
2897 1. Create a window surface from a non-fixed size surface |
|
2898 2. Set surface scaling with valid target extent. |
|
2899 3. Query scaling attributes |
|
2900 4. Repeat step 2-3 for EGL window surface, pixmap and pbuffer surface |
|
2901 |
|
2902 @SYMTestExpectedResults |
|
2903 2. Set surface scaling will fail with error code EGL_BAD_MATCH. |
|
2904 3. Query scaling attributes does not fail, but values not updated |
|
2905 */ |
|
2906 TVerdict CEglTest_SurfaceScalingSetNonFixed::doTestStepL() |
|
2907 { |
|
2908 SetTestStepName(_L("GRAPHICS-EGL-0666")); |
|
2909 SetTestStepID(_L("GRAPHICS-EGL-0666")); |
|
2910 INFO_PRINTF1(_L("CEglTest_SurfaceScalingSetNonFixed::doTestStepL")); |
|
2911 |
|
2912 // Establish the connection to the window server and create |
|
2913 // a WindowGroup and a Window object |
|
2914 CreateAndActivateWindowL(TSize(100, 100)); |
|
2915 |
|
2916 const TInt KWindowWidth = iWindow.Size().iWidth; |
|
2917 const TInt KWindowHeight = iWindow.Size().iHeight; |
|
2918 const TInt KSurfaceWidth = KWindowWidth; |
|
2919 const TInt KSurfaceHeight = KWindowHeight; |
|
2920 |
|
2921 // Create display object |
|
2922 GetDisplayL(); |
|
2923 CreateEglSessionL(); // initialise EGL Session so we can make use of its helper objects |
|
2924 iEglSess->InitializeL(); |
|
2925 |
|
2926 // Choose EGL config - Make sure it DOES NOT support surface scaling |
|
2927 EGLConfig matchingConfigs[1]; |
|
2928 EGLint numConfigs = 0; |
|
2929 |
|
2930 // If all window surfaces in EGL are scalable, first case must be skipped. Others still valid |
|
2931 TInt index = iAllScalable ? 1 : 0; |
|
2932 for(; index < 3; index++) |
|
2933 { |
|
2934 switch(index) |
|
2935 { |
|
2936 case 0: |
|
2937 // Create the non-fixed size window surface and the egl context and make them current |
|
2938 INFO_PRINTF1(_L("Create the non-fixed size window surface and the egl context and make them current...")); |
|
2939 ASSERT_EGL_TRUE(eglChooseConfig(iDisplay, KScalingConfigAttribs[EWindowAttribs_NoScaling], matchingConfigs, 1, &numConfigs)); |
|
2940 TESTL(numConfigs == 1); |
|
2941 iEglSess->CreateWindowSurfaceAndMakeCurrentL(matchingConfigs[0], iWindow); |
|
2942 break; |
|
2943 case 1: |
|
2944 // Create the pbuffer surface and the egl context and make them current |
|
2945 INFO_PRINTF1(_L("Create the pbuffer surface and the egl context and make them current...")); |
|
2946 ASSERT_EGL_TRUE(eglChooseConfig(iDisplay, KConfigAttribs[EPBufferAttribsColor16MU], matchingConfigs, 1, &numConfigs)); |
|
2947 TESTL(numConfigs == 1); |
|
2948 iEglSess->CreatePbufferSurfaceAndMakeCurrentL(matchingConfigs[0], TSize(KSurfaceWidth, KSurfaceHeight)); |
|
2949 break; |
|
2950 case 2: |
|
2951 // Create the pixmap surface and the egl context and make them current |
|
2952 INFO_PRINTF1(_L("Create the pixmap surface and the egl context and make them current...")); |
|
2953 ASSERT_EGL_TRUE(eglChooseConfig(iDisplay, KConfigAttribs[EPixmapAttribsColor16MU], matchingConfigs, 1, &numConfigs)); |
|
2954 TESTL(numConfigs == 1); |
|
2955 iEglSess->CreatePixmapSurfaceAndMakeCurrentAndMatchL(TSize(KSurfaceWidth, KSurfaceHeight), EColor16MU); |
|
2956 break; |
|
2957 } |
|
2958 |
|
2959 // Check all attributes (this is a non-fixed size surface) - |
|
2960 // Note that we cannot use CheckScalingAttributesL because values are not updated |
|
2961 EGLint surfaceWidth = 0; |
|
2962 EGLint surfaceHeight = 0; |
|
2963 EGLint extentWidth = -1; |
|
2964 EGLint extentHeight = -2; |
|
2965 EGLint offsetX = -3; |
|
2966 EGLint offsetY = -4; |
|
2967 ASSERT_EGL_TRUE(eglQuerySurface(iDisplay, iEglSess->Surface(), EGL_WIDTH, &surfaceWidth)); |
|
2968 ASSERT_EGL_TRUE(eglQuerySurface(iDisplay, iEglSess->Surface(), EGL_HEIGHT, &surfaceHeight)); |
|
2969 ASSERT_EGL_TRUE(eglQuerySurface(iDisplay, iEglSess->Surface(), EGL_TARGET_EXTENT_WIDTH_NOK, &extentWidth)); |
|
2970 ASSERT_EGL_TRUE(eglQuerySurface(iDisplay, iEglSess->Surface(), EGL_TARGET_EXTENT_HEIGHT_NOK, &extentHeight)); |
|
2971 ASSERT_EGL_TRUE(eglQuerySurface(iDisplay, iEglSess->Surface(), EGL_TARGET_EXTENT_OFFSET_X_NOK, &offsetX)); |
|
2972 ASSERT_EGL_TRUE(eglQuerySurface(iDisplay, iEglSess->Surface(), EGL_TARGET_EXTENT_OFFSET_Y_NOK, &offsetY)); |
|
2973 TEST((surfaceWidth == KWindowWidth) && (surfaceHeight == KWindowHeight)); |
|
2974 // following values should not be modified (non fixed size window) |
|
2975 TEST((extentWidth == -1) && (extentHeight == -2)); |
|
2976 TEST((offsetX == -3) && (offsetY == -4)); |
|
2977 |
|
2978 // new attribute values |
|
2979 EGLint newExtentWidth = extentWidth / 2; |
|
2980 EGLint newExtentHeight = extentHeight / 2; |
|
2981 EGLint newOffsetX = offsetX * 2; |
|
2982 EGLint newOffsetY = offsetY * 2; |
|
2983 |
|
2984 // Valid parameters - But non fixed size surface |
|
2985 TEST(iPfnEglSetSurfaceScalingNOK(iDisplay, iEglSess->Surface(), newOffsetX, newOffsetY, newExtentWidth, newExtentHeight) == EGL_FALSE); |
|
2986 ASSERT_EGL_ERROR(EGL_BAD_MATCH); |
|
2987 |
|
2988 // attributes haven't changed |
|
2989 // Note that we cannot use CheckScalingAttributesL because values are not updated |
|
2990 ASSERT_EGL_TRUE(eglQuerySurface(iDisplay, iEglSess->Surface(), EGL_WIDTH, &surfaceWidth)); |
|
2991 ASSERT_EGL_TRUE(eglQuerySurface(iDisplay, iEglSess->Surface(), EGL_HEIGHT, &surfaceHeight)); |
|
2992 ASSERT_EGL_TRUE(eglQuerySurface(iDisplay, iEglSess->Surface(), EGL_TARGET_EXTENT_WIDTH_NOK, &extentWidth)); |
|
2993 ASSERT_EGL_TRUE(eglQuerySurface(iDisplay, iEglSess->Surface(), EGL_TARGET_EXTENT_HEIGHT_NOK, &extentHeight)); |
|
2994 ASSERT_EGL_TRUE(eglQuerySurface(iDisplay, iEglSess->Surface(), EGL_TARGET_EXTENT_OFFSET_X_NOK, &offsetX)); |
|
2995 ASSERT_EGL_TRUE(eglQuerySurface(iDisplay, iEglSess->Surface(), EGL_TARGET_EXTENT_OFFSET_Y_NOK, &offsetY)); |
|
2996 TEST((surfaceWidth == KWindowWidth) && (surfaceHeight == KWindowHeight)); |
|
2997 TEST((extentWidth == -1) && (extentHeight == -2)); |
|
2998 TEST((offsetX == -3) && (offsetY == -4)); |
|
2999 |
|
3000 // destroy surface and context |
|
3001 iEglSess->CleanupSurfaceAndContextL(); |
|
3002 } |
|
3003 |
|
3004 // Cleanup |
|
3005 CleanAll(); |
|
3006 CloseWindow(); |
|
3007 |
|
3008 INFO_PRINTF1(_L("....CEglTest_SurfaceScalingSetNonFixed::doTestStepL completed!")); |
|
3009 RecordTestResultL(); |
|
3010 CloseTMSGraphicsStep(); |
|
3011 return TestStepResult(); |
|
3012 } |
|
3013 |
|
3014 /** |
|
3015 @SYMTestCaseID GRAPHICS-EGL-0667 |
|
3016 |
|
3017 @SYMTestPriority 1 |
|
3018 |
|
3019 @SYMPREQ 2676 |
|
3020 |
|
3021 @SYMREQ 417-56592 |
|
3022 |
|
3023 @SYMTestCaseDesc |
|
3024 Negative testing. Calling extensions without initialising EGL |
|
3025 |
|
3026 @SYMTestActions |
|
3027 Without initialising EGL |
|
3028 1. Call query surface scaling capability |
|
3029 2. Call set surface scaling |
|
3030 |
|
3031 @SYMTestExpectedResults |
|
3032 1. Query scaling capability will fail with error code EGL_NOT_INITIALIZED. |
|
3033 2. Set surface scaling will fail with error code EGL_NOT_INITIALIZED. |
|
3034 */ |
|
3035 TVerdict CEglTest_SurfaceScalingNotInitialized::doTestStepL() |
|
3036 { |
|
3037 SetTestStepName(_L("GRAPHICS-EGL-0667")); |
|
3038 SetTestStepID(_L("GRAPHICS-EGL-0667")); |
|
3039 INFO_PRINTF1(_L("CEglTest_SurfaceScalingNotInitialized::doTestStepL")); |
|
3040 |
|
3041 // a WindowGroup and a Window object |
|
3042 CreateAndActivateWindowL(TSize(100, 100)); |
|
3043 |
|
3044 // Create display object |
|
3045 GetDisplayL(); |
|
3046 CreateEglSessionL(); // initialise EGL Session so we can make use of its helper objects |
|
3047 iEglSess->InitializeL(); |
|
3048 |
|
3049 // Choose EGL config |
|
3050 EGLConfig matchingConfigs[1]; |
|
3051 EGLint numConfigs = 0; |
|
3052 ASSERT_EGL_TRUE(eglChooseConfig(iDisplay, KScalingConfigAttribs[EWindowAttribsColor16MU_Scaling], matchingConfigs, 1, &numConfigs)); |
|
3053 TESTL(numConfigs == 1); // Abort the test if the EGL config is not supported |
|
3054 |
|
3055 const TInt KWindowWidth = iWindow.Size().iWidth; |
|
3056 const TInt KWindowHeight = iWindow.Size().iHeight; |
|
3057 const TInt KSurfaceWidth = KWindowWidth/2; |
|
3058 const TInt KSurfaceHeight = KWindowHeight/2; |
|
3059 const TInt KExtentWidth = KWindowWidth; |
|
3060 const TInt KExtentHeight = KWindowHeight; |
|
3061 const EGLint KOffsetX = 11; |
|
3062 const EGLint KOffsetY = 13; |
|
3063 EGLint attrib_list[] = { |
|
3064 EGL_FIXED_WIDTH_NOK, KSurfaceWidth, |
|
3065 EGL_FIXED_HEIGHT_NOK, KSurfaceHeight, |
|
3066 EGL_TARGET_EXTENT_OFFSET_X_NOK, KOffsetX, |
|
3067 EGL_TARGET_EXTENT_OFFSET_Y_NOK, KOffsetY, |
|
3068 EGL_TARGET_EXTENT_WIDTH_NOK, KExtentWidth, |
|
3069 EGL_TARGET_EXTENT_HEIGHT_NOK, KExtentHeight, |
|
3070 EGL_NONE}; |
|
3071 |
|
3072 // Create the window surface and the egl context and make them current |
|
3073 iEglSess->CreateWindowSurfaceAndMakeCurrentL(matchingConfigs[0], iWindow, EFalse, EGL_OPENVG_API, 1, attrib_list); |
|
3074 |
|
3075 // First set new offset attributes (fairly simple, so should be supported) |
|
3076 INFO_PRINTF1(_L("Set new offset attributes - should succeed...")); |
|
3077 EGLint capability = -1; //arbitrary number beyond the existing range |
|
3078 ASSERT_EGL_TRUE(iPfnEglQuerySurfaceScalingCapabilityNOK(iDisplay, matchingConfigs[0], KSurfaceWidth, KSurfaceHeight, KExtentWidth, KExtentHeight, &capability)); |
|
3079 TEST((capability == EGL_SUPPORTED_NOK) || (capability == EGL_SLOW_NOK)); |
|
3080 ASSERT_EGL_TRUE(iPfnEglSetSurfaceScalingNOK(iDisplay, iEglSess->Surface(), KOffsetX+1, KOffsetY+1, KExtentWidth, KExtentHeight)); |
|
3081 |
|
3082 // Terminate display and try again |
|
3083 INFO_PRINTF1(_L("Terminate display and try again, should fail now...")); |
|
3084 eglTerminate(iDisplay); |
|
3085 |
|
3086 capability = -1; //arbitrary number beyond the existing range |
|
3087 TEST(EGL_FALSE == iPfnEglQuerySurfaceScalingCapabilityNOK(iDisplay, matchingConfigs[0], KSurfaceWidth, KSurfaceHeight, KExtentWidth, KExtentHeight, &capability)); |
|
3088 TEST(capability == -1); //make sure that value has not been modified |
|
3089 ASSERT_EGL_ERROR(EGL_NOT_INITIALIZED); |
|
3090 |
|
3091 TEST(EGL_FALSE == iPfnEglSetSurfaceScalingNOK(iDisplay, iEglSess->Surface(), KOffsetX, KOffsetY, KExtentWidth, KExtentHeight)); |
|
3092 ASSERT_EGL_ERROR(EGL_NOT_INITIALIZED); |
|
3093 |
|
3094 // Cleanup |
|
3095 CleanAll(); |
|
3096 CloseWindow(); |
|
3097 |
|
3098 INFO_PRINTF1(_L("....CEglTest_SurfaceScalingNotInitialized::doTestStepL completed!")); |
|
3099 RecordTestResultL(); |
|
3100 CloseTMSGraphicsStep(); |
|
3101 return TestStepResult(); |
|
3102 } |
|
3103 |