Changeset 102697 in webkit
- Timestamp:
- Dec 13, 2011 12:53:17 PM (12 years ago)
- Location:
- trunk
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r102690 r102697 1 2011-12-09 Zhenyao Mo <zmo@google.com> 2 3 Implement GLES2 CheckFramebufferStatus() behavior 4 https://bugs.webkit.org/show_bug.cgi?id=74228 5 6 Reviewed by Kenneth Russell. 7 8 * fast/canvas/webgl/framebuffer-object-attachment-expected.txt: 9 * fast/canvas/webgl/framebuffer-object-attachment.html: sync with khronos side, the whole file 10 * fast/canvas/webgl/resources/webgl-test.js: synced with khronos side, two listed functions 11 (shouldGenerateGLError): 12 (glErrorShouldBe): 13 * platform/chromium/test_expectations.txt: Mark framebuffer-object-*.html as failing due to mesa lib bug. 14 1 15 2011-12-12 Robert Hogan <robert@webkit.org> 2 16 -
trunk/LayoutTests/fast/canvas/webgl/framebuffer-object-attachment-expected.txt
r71367 r102697 3 3 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". 4 4 5 6 Dimensions 0 x 0 5 7 Create renderbuffers 6 8 PASS gl = create3DContext() is non-null. … … 16 18 PASS fbo = gl.createFramebuffer() is non-null. 17 19 PASS getError was expected value: NO_ERROR : 20 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 21 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 22 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 18 23 Attach depth using STENCIL_ATTACHMENT 19 24 PASS fbo = gl.createFramebuffer() is non-null. 20 25 PASS getError was expected value: NO_ERROR : 21 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) is gl.FRAMEBUFFER_UNSUPPORTED26 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 22 27 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 23 28 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : … … 25 30 PASS fbo = gl.createFramebuffer() is non-null. 26 31 PASS getError was expected value: NO_ERROR : 27 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) is gl.FRAMEBUFFER_UNSUPPORTED32 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 28 33 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 29 34 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : … … 31 36 PASS fbo = gl.createFramebuffer() is non-null. 32 37 PASS getError was expected value: NO_ERROR : 38 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 39 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 40 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 33 41 Attach stencil using DEPTH_ATTACHMENT 34 42 PASS fbo = gl.createFramebuffer() is non-null. 35 43 PASS getError was expected value: NO_ERROR : 36 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) is gl.FRAMEBUFFER_UNSUPPORTED44 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 37 45 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 38 46 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : … … 40 48 PASS fbo = gl.createFramebuffer() is non-null. 41 49 PASS getError was expected value: NO_ERROR : 42 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) is gl.FRAMEBUFFER_UNSUPPORTED50 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 43 51 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 44 52 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : … … 46 54 PASS fbo = gl.createFramebuffer() is non-null. 47 55 PASS getError was expected value: NO_ERROR : 56 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 57 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 58 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 48 59 Attach depthStencil using DEPTH_ATTACHMENT 49 60 PASS fbo = gl.createFramebuffer() is non-null. 50 61 PASS getError was expected value: NO_ERROR : 51 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) is gl.FRAMEBUFFER_UNSUPPORTED62 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 52 63 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 53 64 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : … … 55 66 PASS fbo = gl.createFramebuffer() is non-null. 56 67 PASS getError was expected value: NO_ERROR : 57 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) is gl.FRAMEBUFFER_UNSUPPORTED68 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 58 69 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 59 70 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : … … 62 73 PASS getError was expected value: NO_ERROR : 63 74 PASS getError was expected value: NO_ERROR : 64 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) is gl.FRAMEBUFFER_UNSUPPORTED75 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 65 76 Attach stencil, then depth, causing conflict 66 77 PASS fbo = gl.createFramebuffer() is non-null. 67 78 PASS getError was expected value: NO_ERROR : 68 79 PASS getError was expected value: NO_ERROR : 69 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) is gl.FRAMEBUFFER_UNSUPPORTED80 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 70 81 Attach depth, then depthStencil, causing conflict 71 82 PASS fbo = gl.createFramebuffer() is non-null. 72 83 PASS getError was expected value: NO_ERROR : 73 84 PASS getError was expected value: NO_ERROR : 74 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) is gl.FRAMEBUFFER_UNSUPPORTED85 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 75 86 Attach depthStencil, then depth, causing conflict 76 87 PASS fbo = gl.createFramebuffer() is non-null. 77 88 PASS getError was expected value: NO_ERROR : 78 89 PASS getError was expected value: NO_ERROR : 79 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) is gl.FRAMEBUFFER_UNSUPPORTED90 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 80 91 Attach stencil, then depthStencil, causing conflict 81 92 PASS fbo = gl.createFramebuffer() is non-null. 82 93 PASS getError was expected value: NO_ERROR : 83 94 PASS getError was expected value: NO_ERROR : 84 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) is gl.FRAMEBUFFER_UNSUPPORTED95 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 85 96 Attach depthStencil, then stencil, causing conflict 86 97 PASS fbo = gl.createFramebuffer() is non-null. 87 98 PASS getError was expected value: NO_ERROR : 88 99 PASS getError was expected value: NO_ERROR : 89 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) is gl.FRAMEBUFFER_UNSUPPORTED100 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 90 101 Attach color renderbuffer with internalformat == RGBA4 91 102 PASS colorBuffer = gl.createRenderbuffer() is non-null. … … 93 104 PASS fbo = gl.createFramebuffer() is non-null. 94 105 PASS getError was expected value: NO_ERROR : 106 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 107 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 108 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 95 109 Attach color renderbuffer with internalformat == RGB5_A1 96 110 PASS colorBuffer = gl.createRenderbuffer() is non-null. … … 98 112 PASS fbo = gl.createFramebuffer() is non-null. 99 113 PASS getError was expected value: NO_ERROR : 114 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 115 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 116 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 100 117 Attach color renderbuffer with internalformat == RGB565 101 118 PASS colorBuffer = gl.createRenderbuffer() is non-null. … … 103 120 PASS fbo = gl.createFramebuffer() is non-null. 104 121 PASS getError was expected value: NO_ERROR : 122 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 123 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 124 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 125 Create and attach depthStencil renderbuffer 126 PASS depthStencilBuffer = gl.createRenderbuffer() is non-null. 127 PASS getError was expected value: NO_ERROR : 128 PASS gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_WIDTH) is width 129 PASS gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_HEIGHT) is height 130 PASS gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_INTERNAL_FORMAT) is gl.DEPTH_STENCIL 131 PASS gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_RED_SIZE) is 0 132 PASS gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_GREEN_SIZE) is 0 133 PASS gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_BLUE_SIZE) is 0 134 PASS gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_ALPHA_SIZE) is 0 135 PASS getError was expected value: NO_ERROR : 136 PASS fbo = gl.createFramebuffer() is non-null. 137 PASS getError was expected value: NO_ERROR : 138 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 139 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 140 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 141 142 Dimensions 0 x 2 143 Create renderbuffers 144 PASS gl = create3DContext() is non-null. 145 PASS colorBuffer = gl.createRenderbuffer() is non-null. 146 PASS getError was expected value: NO_ERROR : 147 PASS depthBuffer = gl.createRenderbuffer() is non-null. 148 PASS getError was expected value: NO_ERROR : 149 PASS stencilBuffer = gl.createRenderbuffer() is non-null. 150 PASS getError was expected value: NO_ERROR : 151 PASS depthStencilBuffer = gl.createRenderbuffer() is non-null. 152 PASS getError was expected value: NO_ERROR : 153 Attach depth using DEPTH_ATTACHMENT 154 PASS fbo = gl.createFramebuffer() is non-null. 155 PASS getError was expected value: NO_ERROR : 156 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 157 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 158 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 159 Attach depth using STENCIL_ATTACHMENT 160 PASS fbo = gl.createFramebuffer() is non-null. 161 PASS getError was expected value: NO_ERROR : 162 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 163 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 164 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 165 Attach depth using DEPTH_STENCIL_ATTACHMENT 166 PASS fbo = gl.createFramebuffer() is non-null. 167 PASS getError was expected value: NO_ERROR : 168 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 169 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 170 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 171 Attach stencil using STENCIL_ATTACHMENT 172 PASS fbo = gl.createFramebuffer() is non-null. 173 PASS getError was expected value: NO_ERROR : 174 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 175 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 176 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 177 Attach stencil using DEPTH_ATTACHMENT 178 PASS fbo = gl.createFramebuffer() is non-null. 179 PASS getError was expected value: NO_ERROR : 180 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 181 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 182 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 183 Attach stencil using DEPTH_STENCIL_ATTACHMENT 184 PASS fbo = gl.createFramebuffer() is non-null. 185 PASS getError was expected value: NO_ERROR : 186 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 187 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 188 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 189 Attach depthStencil using DEPTH_STENCIL_ATTACHMENT 190 PASS fbo = gl.createFramebuffer() is non-null. 191 PASS getError was expected value: NO_ERROR : 192 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 193 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 194 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 195 Attach depthStencil using DEPTH_ATTACHMENT 196 PASS fbo = gl.createFramebuffer() is non-null. 197 PASS getError was expected value: NO_ERROR : 198 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 199 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 200 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 201 Attach depthStencil using STENCIL_ATTACHMENT 202 PASS fbo = gl.createFramebuffer() is non-null. 203 PASS getError was expected value: NO_ERROR : 204 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 205 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 206 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 207 Attach depth, then stencil, causing conflict 208 PASS fbo = gl.createFramebuffer() is non-null. 209 PASS getError was expected value: NO_ERROR : 210 PASS getError was expected value: NO_ERROR : 211 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 212 Attach stencil, then depth, causing conflict 213 PASS fbo = gl.createFramebuffer() is non-null. 214 PASS getError was expected value: NO_ERROR : 215 PASS getError was expected value: NO_ERROR : 216 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 217 Attach depth, then depthStencil, causing conflict 218 PASS fbo = gl.createFramebuffer() is non-null. 219 PASS getError was expected value: NO_ERROR : 220 PASS getError was expected value: NO_ERROR : 221 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 222 Attach depthStencil, then depth, causing conflict 223 PASS fbo = gl.createFramebuffer() is non-null. 224 PASS getError was expected value: NO_ERROR : 225 PASS getError was expected value: NO_ERROR : 226 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 227 Attach stencil, then depthStencil, causing conflict 228 PASS fbo = gl.createFramebuffer() is non-null. 229 PASS getError was expected value: NO_ERROR : 230 PASS getError was expected value: NO_ERROR : 231 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 232 Attach depthStencil, then stencil, causing conflict 233 PASS fbo = gl.createFramebuffer() is non-null. 234 PASS getError was expected value: NO_ERROR : 235 PASS getError was expected value: NO_ERROR : 236 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 237 Attach color renderbuffer with internalformat == RGBA4 238 PASS colorBuffer = gl.createRenderbuffer() is non-null. 239 PASS getError was expected value: NO_ERROR : 240 PASS fbo = gl.createFramebuffer() is non-null. 241 PASS getError was expected value: NO_ERROR : 242 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 243 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 244 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 245 Attach color renderbuffer with internalformat == RGB5_A1 246 PASS colorBuffer = gl.createRenderbuffer() is non-null. 247 PASS getError was expected value: NO_ERROR : 248 PASS fbo = gl.createFramebuffer() is non-null. 249 PASS getError was expected value: NO_ERROR : 250 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 251 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 252 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 253 Attach color renderbuffer with internalformat == RGB565 254 PASS colorBuffer = gl.createRenderbuffer() is non-null. 255 PASS getError was expected value: NO_ERROR : 256 PASS fbo = gl.createFramebuffer() is non-null. 257 PASS getError was expected value: NO_ERROR : 258 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 259 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 260 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 261 Create and attach depthStencil renderbuffer 262 PASS depthStencilBuffer = gl.createRenderbuffer() is non-null. 263 PASS getError was expected value: NO_ERROR : 264 PASS gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_WIDTH) is width 265 PASS gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_INTERNAL_FORMAT) is gl.DEPTH_STENCIL 266 PASS gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_RED_SIZE) is 0 267 PASS gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_GREEN_SIZE) is 0 268 PASS gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_BLUE_SIZE) is 0 269 PASS gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_ALPHA_SIZE) is 0 270 PASS getError was expected value: NO_ERROR : 271 PASS fbo = gl.createFramebuffer() is non-null. 272 PASS getError was expected value: NO_ERROR : 273 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 274 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 275 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 276 277 Dimensions 2 x 0 278 Create renderbuffers 279 PASS gl = create3DContext() is non-null. 280 PASS colorBuffer = gl.createRenderbuffer() is non-null. 281 PASS getError was expected value: NO_ERROR : 282 PASS depthBuffer = gl.createRenderbuffer() is non-null. 283 PASS getError was expected value: NO_ERROR : 284 PASS stencilBuffer = gl.createRenderbuffer() is non-null. 285 PASS getError was expected value: NO_ERROR : 286 PASS depthStencilBuffer = gl.createRenderbuffer() is non-null. 287 PASS getError was expected value: NO_ERROR : 288 Attach depth using DEPTH_ATTACHMENT 289 PASS fbo = gl.createFramebuffer() is non-null. 290 PASS getError was expected value: NO_ERROR : 291 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 292 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 293 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 294 Attach depth using STENCIL_ATTACHMENT 295 PASS fbo = gl.createFramebuffer() is non-null. 296 PASS getError was expected value: NO_ERROR : 297 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 298 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 299 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 300 Attach depth using DEPTH_STENCIL_ATTACHMENT 301 PASS fbo = gl.createFramebuffer() is non-null. 302 PASS getError was expected value: NO_ERROR : 303 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 304 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 305 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 306 Attach stencil using STENCIL_ATTACHMENT 307 PASS fbo = gl.createFramebuffer() is non-null. 308 PASS getError was expected value: NO_ERROR : 309 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 310 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 311 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 312 Attach stencil using DEPTH_ATTACHMENT 313 PASS fbo = gl.createFramebuffer() is non-null. 314 PASS getError was expected value: NO_ERROR : 315 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 316 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 317 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 318 Attach stencil using DEPTH_STENCIL_ATTACHMENT 319 PASS fbo = gl.createFramebuffer() is non-null. 320 PASS getError was expected value: NO_ERROR : 321 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 322 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 323 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 324 Attach depthStencil using DEPTH_STENCIL_ATTACHMENT 325 PASS fbo = gl.createFramebuffer() is non-null. 326 PASS getError was expected value: NO_ERROR : 327 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 328 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 329 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 330 Attach depthStencil using DEPTH_ATTACHMENT 331 PASS fbo = gl.createFramebuffer() is non-null. 332 PASS getError was expected value: NO_ERROR : 333 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 334 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 335 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 336 Attach depthStencil using STENCIL_ATTACHMENT 337 PASS fbo = gl.createFramebuffer() is non-null. 338 PASS getError was expected value: NO_ERROR : 339 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 340 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 341 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 342 Attach depth, then stencil, causing conflict 343 PASS fbo = gl.createFramebuffer() is non-null. 344 PASS getError was expected value: NO_ERROR : 345 PASS getError was expected value: NO_ERROR : 346 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 347 Attach stencil, then depth, causing conflict 348 PASS fbo = gl.createFramebuffer() is non-null. 349 PASS getError was expected value: NO_ERROR : 350 PASS getError was expected value: NO_ERROR : 351 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 352 Attach depth, then depthStencil, causing conflict 353 PASS fbo = gl.createFramebuffer() is non-null. 354 PASS getError was expected value: NO_ERROR : 355 PASS getError was expected value: NO_ERROR : 356 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 357 Attach depthStencil, then depth, causing conflict 358 PASS fbo = gl.createFramebuffer() is non-null. 359 PASS getError was expected value: NO_ERROR : 360 PASS getError was expected value: NO_ERROR : 361 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 362 Attach stencil, then depthStencil, causing conflict 363 PASS fbo = gl.createFramebuffer() is non-null. 364 PASS getError was expected value: NO_ERROR : 365 PASS getError was expected value: NO_ERROR : 366 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 367 Attach depthStencil, then stencil, causing conflict 368 PASS fbo = gl.createFramebuffer() is non-null. 369 PASS getError was expected value: NO_ERROR : 370 PASS getError was expected value: NO_ERROR : 371 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 372 Attach color renderbuffer with internalformat == RGBA4 373 PASS colorBuffer = gl.createRenderbuffer() is non-null. 374 PASS getError was expected value: NO_ERROR : 375 PASS fbo = gl.createFramebuffer() is non-null. 376 PASS getError was expected value: NO_ERROR : 377 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 378 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 379 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 380 Attach color renderbuffer with internalformat == RGB5_A1 381 PASS colorBuffer = gl.createRenderbuffer() is non-null. 382 PASS getError was expected value: NO_ERROR : 383 PASS fbo = gl.createFramebuffer() is non-null. 384 PASS getError was expected value: NO_ERROR : 385 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 386 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 387 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 388 Attach color renderbuffer with internalformat == RGB565 389 PASS colorBuffer = gl.createRenderbuffer() is non-null. 390 PASS getError was expected value: NO_ERROR : 391 PASS fbo = gl.createFramebuffer() is non-null. 392 PASS getError was expected value: NO_ERROR : 393 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 394 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 395 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 396 Create and attach depthStencil renderbuffer 397 PASS depthStencilBuffer = gl.createRenderbuffer() is non-null. 398 PASS getError was expected value: NO_ERROR : 399 PASS gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_HEIGHT) is height 400 PASS gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_INTERNAL_FORMAT) is gl.DEPTH_STENCIL 401 PASS gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_RED_SIZE) is 0 402 PASS gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_GREEN_SIZE) is 0 403 PASS gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_BLUE_SIZE) is 0 404 PASS gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_ALPHA_SIZE) is 0 405 PASS getError was expected value: NO_ERROR : 406 PASS fbo = gl.createFramebuffer() is non-null. 407 PASS getError was expected value: NO_ERROR : 408 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 409 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 410 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 411 412 Dimensions 2 x 2 413 Create renderbuffers 414 PASS gl = create3DContext() is non-null. 415 PASS colorBuffer = gl.createRenderbuffer() is non-null. 416 PASS getError was expected value: NO_ERROR : 417 PASS depthBuffer = gl.createRenderbuffer() is non-null. 418 PASS getError was expected value: NO_ERROR : 419 PASS stencilBuffer = gl.createRenderbuffer() is non-null. 420 PASS getError was expected value: NO_ERROR : 421 PASS depthStencilBuffer = gl.createRenderbuffer() is non-null. 422 PASS getError was expected value: NO_ERROR : 423 Attach depth using DEPTH_ATTACHMENT 424 PASS fbo = gl.createFramebuffer() is non-null. 425 PASS getError was expected value: NO_ERROR : 426 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36053 427 Attach depth using STENCIL_ATTACHMENT 428 PASS fbo = gl.createFramebuffer() is non-null. 429 PASS getError was expected value: NO_ERROR : 430 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 431 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 432 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 433 Attach depth using DEPTH_STENCIL_ATTACHMENT 434 PASS fbo = gl.createFramebuffer() is non-null. 435 PASS getError was expected value: NO_ERROR : 436 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 437 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 438 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 439 Attach stencil using STENCIL_ATTACHMENT 440 PASS fbo = gl.createFramebuffer() is non-null. 441 PASS getError was expected value: NO_ERROR : 442 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36061 443 Attach stencil using DEPTH_ATTACHMENT 444 PASS fbo = gl.createFramebuffer() is non-null. 445 PASS getError was expected value: NO_ERROR : 446 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 447 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 448 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 449 Attach stencil using DEPTH_STENCIL_ATTACHMENT 450 PASS fbo = gl.createFramebuffer() is non-null. 451 PASS getError was expected value: NO_ERROR : 452 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 453 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 454 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 455 Attach depthStencil using DEPTH_STENCIL_ATTACHMENT 456 PASS fbo = gl.createFramebuffer() is non-null. 457 PASS getError was expected value: NO_ERROR : 458 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36053 459 Attach depthStencil using DEPTH_ATTACHMENT 460 PASS fbo = gl.createFramebuffer() is non-null. 461 PASS getError was expected value: NO_ERROR : 462 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 463 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 464 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 465 Attach depthStencil using STENCIL_ATTACHMENT 466 PASS fbo = gl.createFramebuffer() is non-null. 467 PASS getError was expected value: NO_ERROR : 468 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36054 469 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 470 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : 471 Attach depth, then stencil, causing conflict 472 PASS fbo = gl.createFramebuffer() is non-null. 473 PASS getError was expected value: NO_ERROR : 474 PASS getError was expected value: NO_ERROR : 475 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36061 476 Attach stencil, then depth, causing conflict 477 PASS fbo = gl.createFramebuffer() is non-null. 478 PASS getError was expected value: NO_ERROR : 479 PASS getError was expected value: NO_ERROR : 480 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36061 481 Attach depth, then depthStencil, causing conflict 482 PASS fbo = gl.createFramebuffer() is non-null. 483 PASS getError was expected value: NO_ERROR : 484 PASS getError was expected value: NO_ERROR : 485 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36061 486 Attach depthStencil, then depth, causing conflict 487 PASS fbo = gl.createFramebuffer() is non-null. 488 PASS getError was expected value: NO_ERROR : 489 PASS getError was expected value: NO_ERROR : 490 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36061 491 Attach stencil, then depthStencil, causing conflict 492 PASS fbo = gl.createFramebuffer() is non-null. 493 PASS getError was expected value: NO_ERROR : 494 PASS getError was expected value: NO_ERROR : 495 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36061 496 Attach depthStencil, then stencil, causing conflict 497 PASS fbo = gl.createFramebuffer() is non-null. 498 PASS getError was expected value: NO_ERROR : 499 PASS getError was expected value: NO_ERROR : 500 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36061 501 Attach color renderbuffer with internalformat == RGBA4 502 PASS colorBuffer = gl.createRenderbuffer() is non-null. 503 PASS getError was expected value: NO_ERROR : 504 PASS fbo = gl.createFramebuffer() is non-null. 505 PASS getError was expected value: NO_ERROR : 506 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36053 507 Attach color renderbuffer with internalformat == RGB5_A1 508 PASS colorBuffer = gl.createRenderbuffer() is non-null. 509 PASS getError was expected value: NO_ERROR : 510 PASS fbo = gl.createFramebuffer() is non-null. 511 PASS getError was expected value: NO_ERROR : 512 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36053 513 Attach color renderbuffer with internalformat == RGB565 514 PASS colorBuffer = gl.createRenderbuffer() is non-null. 515 PASS getError was expected value: NO_ERROR : 516 PASS fbo = gl.createFramebuffer() is non-null. 517 PASS getError was expected value: NO_ERROR : 518 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36053 105 519 Create and attach depthStencil renderbuffer 106 520 PASS depthStencilBuffer = gl.createRenderbuffer() is non-null. … … 118 532 PASS fbo = gl.createFramebuffer() is non-null. 119 533 PASS getError was expected value: NO_ERROR : 534 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned 36053 535 PASS fbo = gl.createFramebuffer() is non-null. 536 PASS colorBuffer = gl.createRenderbuffer() is non-null. 537 PASS depthBuffer = gl.createRenderbuffer() is non-null. 538 PASS getError was expected value: NO_ERROR : 539 540 Attachments of different sizes should be FRAMEBUFFER_INCOMPLETE_DIMENSIONS (OpenGL ES 2.0 4.4.5) 541 PASS fbo = gl.createFramebuffer() is non-null. 542 PASS colorBuffer = gl.createRenderbuffer() is non-null. 543 PASS depthBuffer = gl.createRenderbuffer() is non-null. 544 PASS getError was expected value: NO_ERROR : 545 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) should be FRAMEBUFFER_COMPLETE was FRAMEBUFFER_COMPLETE 546 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) should be FRAMEBUFFER_INCOMPLETE_DIMENSIONS was FRAMEBUFFER_INCOMPLETE_DIMENSIONS or FRAMEBUFFER_UNSUPPORTED 547 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) should be FRAMEBUFFER_COMPLETE was FRAMEBUFFER_COMPLETE 548 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) should be FRAMEBUFFER_INCOMPLETE_DIMENSIONS was FRAMEBUFFER_INCOMPLETE_DIMENSIONS or FRAMEBUFFER_UNSUPPORTED 549 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) should be FRAMEBUFFER_COMPLETE was FRAMEBUFFER_COMPLETE 550 PASS getError was expected value: NO_ERROR : 551 PASS getError was expected value: NO_ERROR : 552 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) should be FRAMEBUFFER_INCOMPLETE_DIMENSIONS was FRAMEBUFFER_INCOMPLETE_DIMENSIONS or FRAMEBUFFER_UNSUPPORTED 553 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) should be FRAMEBUFFER_COMPLETE was FRAMEBUFFER_COMPLETE 554 PASS getError was expected value: NO_ERROR : 555 PASS fbo = gl.createFramebuffer() is non-null. 556 PASS colorBuffer = gl.createRenderbuffer() is non-null. 557 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) should be FRAMEBUFFER_COMPLETE was FRAMEBUFFER_COMPLETE 558 559 Wrong storage type for type of attachment be FRAMEBUFFER_INCOMPLETE_ATTACHMENT (OpenGL ES 2.0 4.4.5) 560 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) should be FRAMEBUFFER_INCOMPLETE_ATTACHMENT was FRAMEBUFFER_INCOMPLETE_ATTACHMENT or FRAMEBUFFER_UNSUPPORTED 561 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) should be FRAMEBUFFER_COMPLETE was FRAMEBUFFER_COMPLETE 562 563 0 size attachment should be FRAMEBUFFER_INCOMPLETE_ATTACHMENT (OpenGL ES 2.0 4.4.5) 564 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) should be FRAMEBUFFER_INCOMPLETE_ATTACHMENT was FRAMEBUFFER_INCOMPLETE_ATTACHMENT or FRAMEBUFFER_UNSUPPORTED 565 PASS getError was expected value: NO_ERROR : 566 567 No attachments should be INCOMPLETE_FRAMEBUFFER_MISSING_ATTACHMENT (OpenGL ES 2.0 4.4.5) 568 PASS fbo = gl.createFramebuffer() is non-null. 569 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) should be FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT was FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT or FRAMEBUFFER_UNSUPPORTED 570 PASS colorBuffer = gl.createRenderbuffer() is non-null. 571 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) should be FRAMEBUFFER_COMPLETE was FRAMEBUFFER_COMPLETE 572 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) should be FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT was FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT or FRAMEBUFFER_UNSUPPORTED 573 PASS getError was expected value: NO_ERROR : 574 575 Test drawing or reading from an incomplete framebuffer 576 PASS fbo = gl.createFramebuffer() is non-null. 577 PASS colorBuffer = gl.createRenderbuffer() is non-null. 578 PASS depthBuffer = gl.createRenderbuffer() is non-null. 579 PASS getError was expected value: NO_ERROR : 580 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) should be FRAMEBUFFER_COMPLETE was FRAMEBUFFER_COMPLETE 581 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) should be FRAMEBUFFER_INCOMPLETE_DIMENSIONS was FRAMEBUFFER_INCOMPLETE_DIMENSIONS or FRAMEBUFFER_UNSUPPORTED 582 583 Drawing or reading from an incomplete framebuffer should generate INVALID_FRAMEBUFFER_OPERATION 584 PASS getError was expected value: NO_ERROR : 585 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : drawArrays with incomplete framebuffer 586 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : readPixels from incomplete framebuffer 587 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : copyTexImage2D from incomplete framebuffer 588 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : copyTexSubImage2D from incomplete framebuffer 589 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : clear with incomplete framebuffer 590 PASS fbo2 = gl.createFramebuffer() is non-null. 591 PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) should be FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT was FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT or FRAMEBUFFER_UNSUPPORTED 592 593 Drawing or reading from an incomplete framebuffer should generate INVALID_FRAMEBUFFER_OPERATION 594 PASS getError was expected value: NO_ERROR : 595 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : drawArrays with incomplete framebuffer 596 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : readPixels from incomplete framebuffer 597 PASS getError was expected value: INVALID_OPERATION : copyTexImage2D from incomplete framebuffer 598 PASS getError was expected value: INVALID_OPERATION : copyTexSubImage2D from incomplete framebuffer 599 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : clear with incomplete framebuffer 600 PASS colorBuffer = gl.createRenderbuffer() is non-null. 601 602 Drawing or reading from an incomplete framebuffer should generate INVALID_FRAMEBUFFER_OPERATION 603 PASS getError was expected value: NO_ERROR : 604 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : drawArrays with incomplete framebuffer 605 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : readPixels from incomplete framebuffer 606 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : copyTexImage2D from incomplete framebuffer 607 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : copyTexSubImage2D from incomplete framebuffer 608 PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION : clear with incomplete framebuffer 120 609 PASS successfullyParsed is true 121 610 -
trunk/LayoutTests/fast/canvas/webgl/framebuffer-object-attachment.html
r98407 r102697 1 <!DOCTYPE html> 1 2 <html> 2 3 <head> 4 <meta charset="utf-8"> 3 5 <script src="../../js/resources/js-test-pre.js"></script> 4 6 <script src="resources/webgl-test.js"></script> 7 <script src="resources/webgl-test-utils.js"></script> 5 8 </head> 6 9 <body> … … 9 12 10 13 <script> 11 14 var wtu = WebGLTestUtils; 12 15 var gl; 13 16 var fbo; … … 16 19 var depthStencilBuffer; 17 20 var colorBuffer; 18 var width = 2; 19 var height = 2; 20 21 function testAttachment(attachment, buffer, isConflicted) 21 var width; 22 var height; 23 24 const ALLOW_COMPLETE = 0x01; 25 const ALLOW_UNSUPPORTED = 0x02; 26 const ALLOW_INCOMPLETE_ATTACHMENT = 0x04; 27 28 function checkFramebufferForAllowedStatuses(allowedStatuses) 29 { 30 // If the framebuffer is in an error state for multiple reasons, 31 // we can't guarantee which one will be reported. 32 var status = gl.checkFramebufferStatus(gl.FRAMEBUFFER); 33 var statusAllowed = ((allowedStatuses & ALLOW_COMPLETE) && (status == gl.FRAMEBUFFER_COMPLETE)) || 34 ((allowedStatuses & ALLOW_UNSUPPORTED) && (status == gl.FRAMEBUFFER_UNSUPPORTED)) || 35 ((allowedStatuses & ALLOW_INCOMPLETE_ATTACHMENT) && (status == gl.FRAMEBUFFER_INCOMPLETE_ATTACHMENT)); 36 var msg = "gl.checkFramebufferStatus(gl.FRAMEBUFFER) returned " + status; 37 if (statusAllowed) 38 testPassed(msg); 39 else 40 testFailed(msg); 41 } 42 43 function testAttachment(attachment, buffer, allowedStatuses) 22 44 { 23 45 shouldBeNonNull("fbo = gl.createFramebuffer()"); … … 26 48 gl.framebufferRenderbuffer(gl.FRAMEBUFFER, attachment, gl.RENDERBUFFER, buffer); 27 49 glErrorShouldBe(gl, gl.NO_ERROR); 28 if (isConflicted) {29 shouldBe("gl.checkFramebufferStatus(gl.FRAMEBUFFER)", "gl.FRAMEBUFFER_UNSUPPORTED");50 checkFramebufferForAllowedStatuses(allowedStatuses); 51 if ((allowedStatuses & ALLOW_COMPLETE) == 0) { 30 52 gl.clear(gl.COLOR_BUFFER_BIT); 31 53 glErrorShouldBe(gl, gl.INVALID_FRAMEBUFFER_OPERATION); … … 33 55 glErrorShouldBe(gl, gl.INVALID_FRAMEBUFFER_OPERATION); 34 56 } 35 } 36 37 function testAttachments(attachment0, buffer0, attachment1, buffer1, isConflicted) 57 gl.deleteFramebuffer(fbo); 58 } 59 60 function testAttachments(attachment0, buffer0, attachment1, buffer1, allowedStatuses) 38 61 { 39 62 shouldBeNonNull("fbo = gl.createFramebuffer()"); … … 44 67 gl.framebufferRenderbuffer(gl.FRAMEBUFFER, attachment1, gl.RENDERBUFFER, buffer1); 45 68 glErrorShouldBe(gl, gl.NO_ERROR); 46 if (isConflicted)47 shouldBe("gl.checkFramebufferStatus(gl.FRAMEBUFFER)", "gl.FRAMEBUFFER_UNSUPPORTED");48 } 49 50 function testColorRenderbuffer(internalformat )69 checkFramebufferForAllowedStatuses(allowedStatuses); 70 gl.deleteFramebuffer(fbo); 71 } 72 73 function testColorRenderbuffer(internalformat, allowedStatuses) 51 74 { 52 75 shouldBeNonNull("colorBuffer = gl.createRenderbuffer()"); … … 54 77 gl.renderbufferStorage(gl.RENDERBUFFER, internalformat, width, height); 55 78 glErrorShouldBe(gl, gl.NO_ERROR); 56 testAttachment(gl.COLOR_ATTACHMENT0, colorBuffer, false);57 } 58 59 function testDepthStencilRenderbuffer( )79 testAttachment(gl.COLOR_ATTACHMENT0, colorBuffer, allowedStatuses); 80 } 81 82 function testDepthStencilRenderbuffer(allowedStatuses) 60 83 { 61 84 shouldBeNonNull("depthStencilBuffer = gl.createRenderbuffer()"); … … 63 86 gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_STENCIL, width, height); 64 87 glErrorShouldBe(gl, gl.NO_ERROR); 65 shouldBe("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_WIDTH)", "width"); 66 shouldBe("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_HEIGHT)", "height"); 88 89 // OpenGL itself doesn't seem to guarantee that e.g. a 2 x 0 90 // renderbuffer will report 2 for its width when queried. 91 if (!(height == 0 && width > 0)) 92 shouldBe("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_WIDTH)", "width"); 93 if (!(width == 0 && height > 0)) 94 shouldBe("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_HEIGHT)", "height"); 67 95 shouldBe("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_INTERNAL_FORMAT)", "gl.DEPTH_STENCIL"); 68 96 shouldBe("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_RED_SIZE)", "0"); … … 70 98 shouldBe("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_BLUE_SIZE)", "0"); 71 99 shouldBe("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_ALPHA_SIZE)", "0"); 72 shouldBeTrue("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_DEPTH_SIZE) > 0"); 73 shouldBeTrue("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_STENCIL_SIZE) > 0"); 74 glErrorShouldBe(gl, gl.NO_ERROR); 75 testAttachment(gl.DEPTH_STENCIL_ATTACHMENT, depthStencilBuffer, false); 100 // Avoid verifying these for zero-sized renderbuffers for the time 101 // being since it appears that even OpenGL doesn't guarantee them. 102 if (width > 0 && height > 0) { 103 shouldBeTrue("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_DEPTH_SIZE) > 0"); 104 shouldBeTrue("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_STENCIL_SIZE) > 0"); 105 } 106 glErrorShouldBe(gl, gl.NO_ERROR); 107 testAttachment(gl.DEPTH_STENCIL_ATTACHMENT, depthStencilBuffer, allowedStatuses); 76 108 } 77 109 78 110 description("Test framebuffer object attachment behaviors"); 79 111 80 debug("Create renderbuffers"); 81 shouldBeNonNull("gl = create3DContext()"); 82 shouldBeNonNull("colorBuffer = gl.createRenderbuffer()"); 83 gl.bindRenderbuffer(gl.RENDERBUFFER, colorBuffer); 84 gl.renderbufferStorage(gl.RENDERBUFFER, gl.RGBA4, width, height); 85 glErrorShouldBe(gl, gl.NO_ERROR); 86 shouldBeNonNull("depthBuffer = gl.createRenderbuffer()"); 87 gl.bindRenderbuffer(gl.RENDERBUFFER, depthBuffer); 88 gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_COMPONENT16, width, height); 89 glErrorShouldBe(gl, gl.NO_ERROR); 90 shouldBeNonNull("stencilBuffer = gl.createRenderbuffer()"); 91 gl.bindRenderbuffer(gl.RENDERBUFFER, stencilBuffer); 92 gl.renderbufferStorage(gl.RENDERBUFFER, gl.STENCIL_INDEX8, width, height); 93 glErrorShouldBe(gl, gl.NO_ERROR); 94 shouldBeNonNull("depthStencilBuffer = gl.createRenderbuffer()"); 95 gl.bindRenderbuffer(gl.RENDERBUFFER, depthStencilBuffer); 96 gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_STENCIL, width, height); 97 glErrorShouldBe(gl, gl.NO_ERROR); 98 99 debug("Attach depth using DEPTH_ATTACHMENT"); 100 testAttachment(gl.DEPTH_ATTACHMENT, depthBuffer, false); 101 debug("Attach depth using STENCIL_ATTACHMENT"); 102 testAttachment(gl.STENCIL_ATTACHMENT, depthBuffer, true); 103 debug("Attach depth using DEPTH_STENCIL_ATTACHMENT"); 104 testAttachment(gl.DEPTH_STENCIL_ATTACHMENT, depthBuffer, true); 105 debug("Attach stencil using STENCIL_ATTACHMENT"); 106 testAttachment(gl.STENCIL_ATTACHMENT, stencilBuffer, false); 107 debug("Attach stencil using DEPTH_ATTACHMENT"); 108 testAttachment(gl.DEPTH_ATTACHMENT, stencilBuffer, true); 109 debug("Attach stencil using DEPTH_STENCIL_ATTACHMENT"); 110 testAttachment(gl.DEPTH_STENCIL_ATTACHMENT, stencilBuffer, true); 111 debug("Attach depthStencil using DEPTH_STENCIL_ATTACHMENT"); 112 testAttachment(gl.DEPTH_STENCIL_ATTACHMENT, depthStencilBuffer, false); 113 debug("Attach depthStencil using DEPTH_ATTACHMENT"); 114 testAttachment(gl.DEPTH_ATTACHMENT, depthStencilBuffer, true); 115 debug("Attach depthStencil using STENCIL_ATTACHMENT"); 116 testAttachment(gl.STENCIL_ATTACHMENT, depthStencilBuffer, true); 117 118 debug("Attach depth, then stencil, causing conflict"); 119 testAttachments(gl.DEPTH_ATTACHMENT, depthBuffer, gl.STENCIL_ATTACHMENT, stencilBuffer, true); 120 debug("Attach stencil, then depth, causing conflict"); 121 testAttachments(gl.STENCIL_ATTACHMENT, stencilBuffer, gl.DEPTH_ATTACHMENT, depthBuffer, true); 122 debug("Attach depth, then depthStencil, causing conflict"); 123 testAttachments(gl.DEPTH_ATTACHMENT, depthBuffer, gl.DEPTH_STENCIL_ATTACHMENT, depthStencilBuffer, true); 124 debug("Attach depthStencil, then depth, causing conflict"); 125 testAttachments(gl.DEPTH_STENCIL_ATTACHMENT, depthStencilBuffer, gl.DEPTH_ATTACHMENT, depthBuffer, true); 126 debug("Attach stencil, then depthStencil, causing conflict"); 127 testAttachments(gl.DEPTH_ATTACHMENT, depthBuffer, gl.DEPTH_STENCIL_ATTACHMENT, depthStencilBuffer, true); 128 debug("Attach depthStencil, then stencil, causing conflict"); 129 testAttachments(gl.DEPTH_STENCIL_ATTACHMENT, depthStencilBuffer, gl.STENCIL_ATTACHMENT, stencilBuffer, true); 130 131 debug("Attach color renderbuffer with internalformat == RGBA4"); 132 testColorRenderbuffer(gl.RGBA4); 133 134 debug("Attach color renderbuffer with internalformat == RGB5_A1"); 135 testColorRenderbuffer(gl.RGB5_A1); 136 137 debug("Attach color renderbuffer with internalformat == RGB565"); 138 testColorRenderbuffer(gl.RGB565); 139 140 debug("Create and attach depthStencil renderbuffer"); 141 testDepthStencilRenderbuffer(); 112 for (width = 0; width <= 2; width += 2) 113 { 114 for (height = 0; height <= 2; height += 2) 115 { 116 debug(""); 117 debug("Dimensions " + width + " x " + height); 118 119 debug("Create renderbuffers"); 120 shouldBeNonNull("gl = create3DContext()"); 121 shouldBeNonNull("colorBuffer = gl.createRenderbuffer()"); 122 gl.bindRenderbuffer(gl.RENDERBUFFER, colorBuffer); 123 gl.renderbufferStorage(gl.RENDERBUFFER, gl.RGBA4, width, height); 124 glErrorShouldBe(gl, gl.NO_ERROR); 125 shouldBeNonNull("depthBuffer = gl.createRenderbuffer()"); 126 gl.bindRenderbuffer(gl.RENDERBUFFER, depthBuffer); 127 gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_COMPONENT16, width, height); 128 glErrorShouldBe(gl, gl.NO_ERROR); 129 shouldBeNonNull("stencilBuffer = gl.createRenderbuffer()"); 130 gl.bindRenderbuffer(gl.RENDERBUFFER, stencilBuffer); 131 gl.renderbufferStorage(gl.RENDERBUFFER, gl.STENCIL_INDEX8, width, height); 132 glErrorShouldBe(gl, gl.NO_ERROR); 133 shouldBeNonNull("depthStencilBuffer = gl.createRenderbuffer()"); 134 gl.bindRenderbuffer(gl.RENDERBUFFER, depthStencilBuffer); 135 gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_STENCIL, width, height); 136 glErrorShouldBe(gl, gl.NO_ERROR); 137 138 var allowedStatusForGoodCase 139 = (width == 0 || height == 0) ? ALLOW_INCOMPLETE_ATTACHMENT : ALLOW_COMPLETE; 140 141 // some cases involving stencil seem to be implementation-dependent 142 var allowedStatusForImplDependentCase = allowedStatusForGoodCase | ALLOW_UNSUPPORTED; 143 144 debug("Attach depth using DEPTH_ATTACHMENT"); 145 testAttachment(gl.DEPTH_ATTACHMENT, depthBuffer, allowedStatusForGoodCase); 146 debug("Attach depth using STENCIL_ATTACHMENT"); 147 testAttachment(gl.STENCIL_ATTACHMENT, depthBuffer, ALLOW_INCOMPLETE_ATTACHMENT); 148 debug("Attach depth using DEPTH_STENCIL_ATTACHMENT"); 149 testAttachment(gl.DEPTH_STENCIL_ATTACHMENT, depthBuffer, ALLOW_INCOMPLETE_ATTACHMENT); 150 debug("Attach stencil using STENCIL_ATTACHMENT"); 151 testAttachment(gl.STENCIL_ATTACHMENT, stencilBuffer, allowedStatusForImplDependentCase); 152 debug("Attach stencil using DEPTH_ATTACHMENT"); 153 testAttachment(gl.DEPTH_ATTACHMENT, stencilBuffer, ALLOW_INCOMPLETE_ATTACHMENT); 154 debug("Attach stencil using DEPTH_STENCIL_ATTACHMENT"); 155 testAttachment(gl.DEPTH_STENCIL_ATTACHMENT, stencilBuffer, ALLOW_INCOMPLETE_ATTACHMENT); 156 debug("Attach depthStencil using DEPTH_STENCIL_ATTACHMENT"); 157 testAttachment(gl.DEPTH_STENCIL_ATTACHMENT, depthStencilBuffer, allowedStatusForGoodCase); 158 debug("Attach depthStencil using DEPTH_ATTACHMENT"); 159 testAttachment(gl.DEPTH_ATTACHMENT, depthStencilBuffer, ALLOW_INCOMPLETE_ATTACHMENT); 160 debug("Attach depthStencil using STENCIL_ATTACHMENT"); 161 testAttachment(gl.STENCIL_ATTACHMENT, depthStencilBuffer, ALLOW_INCOMPLETE_ATTACHMENT); 162 163 var allowedStatusForConflictedAttachment 164 = (width == 0 || height == 0) ? ALLOW_UNSUPPORTED | ALLOW_INCOMPLETE_ATTACHMENT 165 : ALLOW_UNSUPPORTED; 166 167 debug("Attach depth, then stencil, causing conflict"); 168 testAttachments(gl.DEPTH_ATTACHMENT, depthBuffer, gl.STENCIL_ATTACHMENT, stencilBuffer, allowedStatusForConflictedAttachment); 169 debug("Attach stencil, then depth, causing conflict"); 170 testAttachments(gl.STENCIL_ATTACHMENT, stencilBuffer, gl.DEPTH_ATTACHMENT, depthBuffer, allowedStatusForConflictedAttachment); 171 debug("Attach depth, then depthStencil, causing conflict"); 172 testAttachments(gl.DEPTH_ATTACHMENT, depthBuffer, gl.DEPTH_STENCIL_ATTACHMENT, depthStencilBuffer, allowedStatusForConflictedAttachment); 173 debug("Attach depthStencil, then depth, causing conflict"); 174 testAttachments(gl.DEPTH_STENCIL_ATTACHMENT, depthStencilBuffer, gl.DEPTH_ATTACHMENT, depthBuffer, allowedStatusForConflictedAttachment); 175 debug("Attach stencil, then depthStencil, causing conflict"); 176 testAttachments(gl.DEPTH_ATTACHMENT, depthBuffer, gl.DEPTH_STENCIL_ATTACHMENT, depthStencilBuffer, allowedStatusForConflictedAttachment); 177 debug("Attach depthStencil, then stencil, causing conflict"); 178 testAttachments(gl.DEPTH_STENCIL_ATTACHMENT, depthStencilBuffer, gl.STENCIL_ATTACHMENT, stencilBuffer, allowedStatusForConflictedAttachment); 179 180 debug("Attach color renderbuffer with internalformat == RGBA4"); 181 testColorRenderbuffer(gl.RGBA4, allowedStatusForGoodCase); 182 183 debug("Attach color renderbuffer with internalformat == RGB5_A1"); 184 testColorRenderbuffer(gl.RGB5_A1, allowedStatusForGoodCase); 185 186 debug("Attach color renderbuffer with internalformat == RGB565"); 187 testColorRenderbuffer(gl.RGB565, allowedStatusForGoodCase); 188 189 debug("Create and attach depthStencil renderbuffer"); 190 testDepthStencilRenderbuffer(allowedStatusForGoodCase); 191 } 192 } 193 194 // Determine if we can attach both color and depth or color and depth_stencil 195 var depthFormat; 196 var depthAttachment; 197 198 function checkValidColorDepthCombination() { 199 shouldBeNonNull("fbo = gl.createFramebuffer()"); 200 gl.bindFramebuffer(gl.FRAMEBUFFER, fbo); 201 shouldBeNonNull("colorBuffer = gl.createRenderbuffer()"); 202 gl.bindRenderbuffer(gl.RENDERBUFFER, colorBuffer); 203 gl.framebufferRenderbuffer( 204 gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, colorBuffer); 205 gl.renderbufferStorage(gl.RENDERBUFFER, gl.RGBA4, 16, 16); 206 207 shouldBeNonNull("depthBuffer = gl.createRenderbuffer()"); 208 gl.bindRenderbuffer(gl.RENDERBUFFER, depthBuffer); 209 210 return tryDepth(gl.DEPTH_COMPONENT16, gl.DEPTH_ATTACHMENT) || tryDepth(gl.DEPTH_STENCIL, gl.DEPTH_STENCIL_ATTACHMENT); 211 212 function tryDepth(try_format, try_attachment) { 213 if (depthAttachment) { 214 // If we've tried once unattach the old one. 215 gl.framebufferRenderbuffer( 216 gl.FRAMEBUFFER, depthAttachment, gl.RENDERBUFFER, null); 217 } 218 depthFormat = try_format; 219 depthAttachment = try_attachment; 220 gl.framebufferRenderbuffer( 221 gl.FRAMEBUFFER, depthAttachment, gl.RENDERBUFFER, depthBuffer); 222 gl.renderbufferStorage(gl.RENDERBUFFER, depthFormat, 16, 16); 223 glErrorShouldBe(gl, gl.NO_ERROR); 224 return gl.checkFramebufferStatus(gl.FRAMEBUFFER) == gl.FRAMEBUFFER_COMPLETE; 225 } 226 } 227 228 if (checkValidColorDepthCombination()) { 229 testFramebufferIncompleteDimensions(); 230 testFramebufferIncompleteAttachment(); 231 testFramebufferIncompleteMissingAttachment(); 232 testUsingIncompleteFramebuffer(); 233 } 234 235 function checkFramebuffer(expected) { 236 var actual = gl.checkFramebufferStatus(gl.FRAMEBUFFER); 237 var msg = "gl.checkFramebufferStatus(gl.FRAMEBUFFER) should be " + wtu.glEnumToString(gl, expected) + " was " + wtu.glEnumToString(gl, actual); 238 if (expected != gl.FRAMEBUFFER_COMPLETE) { 239 msg += " or FRAMEBUFFER_UNSUPPORTED"; 240 } 241 if (actual == expected || 242 (expected != gl.FRAMEBUFFER_COMPLETE && 243 actual == gl.FRAMBUFFER_UNSUPPORTED)) { 244 testPassed(msg); 245 } else { 246 testFailed(msg); 247 } 248 } 249 250 function testUsingIncompleteFramebuffer() { 251 debug(""); 252 debug("Test drawing or reading from an incomplete framebuffer"); 253 var program = wtu.setupTexturedQuad(gl); 254 var tex = gl.createTexture(); 255 wtu.fillTexture(gl, tex, 1, 1, [0,255,0,255]); 256 257 shouldBeNonNull("fbo = gl.createFramebuffer()"); 258 gl.bindFramebuffer(gl.FRAMEBUFFER, fbo); 259 shouldBeNonNull("colorBuffer = gl.createRenderbuffer()"); 260 gl.bindRenderbuffer(gl.RENDERBUFFER, colorBuffer); 261 gl.framebufferRenderbuffer( 262 gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, colorBuffer); 263 gl.renderbufferStorage(gl.RENDERBUFFER, gl.RGBA4, 16, 16); 264 265 shouldBeNonNull("depthBuffer = gl.createRenderbuffer()"); 266 gl.bindRenderbuffer(gl.RENDERBUFFER, depthBuffer); 267 gl.framebufferRenderbuffer( 268 gl.FRAMEBUFFER, depthAttachment, gl.RENDERBUFFER, depthBuffer); 269 gl.renderbufferStorage(gl.RENDERBUFFER, depthFormat, 16, 16); 270 glErrorShouldBe(gl, gl.NO_ERROR); 271 checkFramebuffer(gl.FRAMEBUFFER_COMPLETE); 272 273 // We pick this combination because it works on desktop OpenGL but should not work on OpenGL ES 2.0 274 gl.renderbufferStorage(gl.RENDERBUFFER, depthFormat, 32, 16); 275 checkFramebuffer(gl.FRAMEBUFFER_INCOMPLETE_DIMENSIONS); 276 debug(""); 277 debug("Drawing or reading from an incomplete framebuffer should generate INVALID_FRAMEBUFFER_OPERATION"); 278 testRenderingAndReading(); 279 280 shouldBeNonNull("fbo2 = gl.createFramebuffer()"); 281 gl.bindFramebuffer(gl.FRAMEBUFFER, fbo2); 282 checkFramebuffer(gl.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT); 283 debug(""); 284 debug("Drawing or reading from an incomplete framebuffer should generate INVALID_FRAMEBUFFER_OPERATION"); 285 testRenderingAndReading(); 286 287 shouldBeNonNull("colorBuffer = gl.createRenderbuffer()"); 288 gl.bindRenderbuffer(gl.RENDERBUFFER, colorBuffer); 289 gl.framebufferRenderbuffer( 290 gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, colorBuffer); 291 gl.renderbufferStorage(gl.RENDERBUFFER, gl.RGBA4, 0, 0); 292 debug(""); 293 debug("Drawing or reading from an incomplete framebuffer should generate INVALID_FRAMEBUFFER_OPERATION"); 294 testRenderingAndReading(); 295 296 function testRenderingAndReading() { 297 glErrorShouldBe(gl, gl.NO_ERROR); 298 wtu.drawQuad(gl); 299 glErrorShouldBe(gl, gl.INVALID_FRAMEBUFFER_OPERATION, "drawArrays with incomplete framebuffer"); 300 gl.readPixels(0, 0, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, new Uint8Array(4)); 301 glErrorShouldBe(gl, gl.INVALID_FRAMEBUFFER_OPERATION, "readPixels from incomplete framebuffer"); 302 // copyTexImage and copyTexSubImage can be either INVALID_FRAMEBUFFER_OPERATION because 303 // the framebuffer is invalid OR INVALID_OPERATION because in the case of no attachments 304 // the framebuffer is not of a compatible type. 305 gl.copyTexSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 0, 0, 1, 1); 306 glErrorShouldBe(gl, [gl.INVALID_FRAMEBUFFER_OPERATION, gl.INVALID_OPERATION], "copyTexImage2D from incomplete framebuffer"); 307 gl.copyTexImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 0, 0, 1, 1, 0); 308 glErrorShouldBe(gl, [gl.INVALID_FRAMEBUFFER_OPERATION, gl.INVALID_OPERATION], "copyTexSubImage2D from incomplete framebuffer"); 309 gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); 310 glErrorShouldBe(gl, gl.INVALID_FRAMEBUFFER_OPERATION, "clear with incomplete framebuffer"); 311 } 312 } 313 314 function testFramebufferIncompleteAttachment() { 315 shouldBeNonNull("fbo = gl.createFramebuffer()"); 316 gl.bindFramebuffer(gl.FRAMEBUFFER, fbo); 317 shouldBeNonNull("colorBuffer = gl.createRenderbuffer()"); 318 gl.bindRenderbuffer(gl.RENDERBUFFER, colorBuffer); 319 gl.framebufferRenderbuffer( 320 gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, colorBuffer); 321 gl.renderbufferStorage(gl.RENDERBUFFER, gl.RGBA4, 16, 16); 322 checkFramebuffer(gl.FRAMEBUFFER_COMPLETE); 323 324 debug(""); 325 debug("Wrong storage type for type of attachment be FRAMEBUFFER_INCOMPLETE_ATTACHMENT (OpenGL ES 2.0 4.4.5)"); 326 gl.renderbufferStorage(gl.RENDERBUFFER, depthFormat, 16, 16); 327 checkFramebuffer(gl.FRAMEBUFFER_INCOMPLETE_ATTACHMENT); 328 329 gl.renderbufferStorage(gl.RENDERBUFFER, gl.RGBA4, 16, 16); 330 checkFramebuffer(gl.FRAMEBUFFER_COMPLETE); 331 332 debug(""); 333 debug("0 size attachment should be FRAMEBUFFER_INCOMPLETE_ATTACHMENT (OpenGL ES 2.0 4.4.5)"); 334 gl.renderbufferStorage(gl.RENDERBUFFER, gl.RGBA4, 0, 0); 335 checkFramebuffer(gl.FRAMEBUFFER_INCOMPLETE_ATTACHMENT); 336 337 glErrorShouldBe(gl, gl.NO_ERROR); 338 } 339 340 function testFramebufferIncompleteMissingAttachment() { 341 debug(""); 342 debug("No attachments should be INCOMPLETE_FRAMEBUFFER_MISSING_ATTACHMENT (OpenGL ES 2.0 4.4.5)"); 343 shouldBeNonNull("fbo = gl.createFramebuffer()"); 344 gl.bindFramebuffer(gl.FRAMEBUFFER, fbo); 345 checkFramebuffer(gl.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT); 346 347 shouldBeNonNull("colorBuffer = gl.createRenderbuffer()"); 348 gl.bindRenderbuffer(gl.RENDERBUFFER, colorBuffer); 349 gl.framebufferRenderbuffer( 350 gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, colorBuffer); 351 gl.renderbufferStorage(gl.RENDERBUFFER, gl.RGBA4, 16, 16); 352 checkFramebuffer(gl.FRAMEBUFFER_COMPLETE); 353 354 gl.framebufferRenderbuffer( 355 gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, null); 356 checkFramebuffer(gl.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT); 357 358 glErrorShouldBe(gl, gl.NO_ERROR); 359 } 360 361 function testFramebufferIncompleteDimensions() { 362 debug(""); 363 debug("Attachments of different sizes should be FRAMEBUFFER_INCOMPLETE_DIMENSIONS (OpenGL ES 2.0 4.4.5)"); 364 365 shouldBeNonNull("fbo = gl.createFramebuffer()"); 366 gl.bindFramebuffer(gl.FRAMEBUFFER, fbo); 367 shouldBeNonNull("colorBuffer = gl.createRenderbuffer()"); 368 gl.bindRenderbuffer(gl.RENDERBUFFER, colorBuffer); 369 gl.framebufferRenderbuffer( 370 gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, colorBuffer); 371 gl.renderbufferStorage(gl.RENDERBUFFER, gl.RGBA4, 16, 16); 372 373 shouldBeNonNull("depthBuffer = gl.createRenderbuffer()"); 374 gl.bindRenderbuffer(gl.RENDERBUFFER, depthBuffer); 375 gl.framebufferRenderbuffer( 376 gl.FRAMEBUFFER, depthAttachment, gl.RENDERBUFFER, depthBuffer); 377 gl.renderbufferStorage(gl.RENDERBUFFER, depthFormat, 16, 16); 378 glErrorShouldBe(gl, gl.NO_ERROR); 379 checkFramebuffer(gl.FRAMEBUFFER_COMPLETE); 380 381 gl.renderbufferStorage(gl.RENDERBUFFER, depthFormat, 32, 16); 382 checkFramebuffer(gl.FRAMEBUFFER_INCOMPLETE_DIMENSIONS); 383 gl.renderbufferStorage(gl.RENDERBUFFER, depthFormat, 16, 16); 384 checkFramebuffer(gl.FRAMEBUFFER_COMPLETE); 385 gl.bindRenderbuffer(gl.RENDERBUFFER, colorBuffer); 386 gl.renderbufferStorage(gl.RENDERBUFFER, gl.RGBA4, 16, 32); 387 checkFramebuffer(gl.FRAMEBUFFER_INCOMPLETE_DIMENSIONS); 388 gl.renderbufferStorage(gl.RENDERBUFFER, gl.RGBA4, 16, 16); 389 checkFramebuffer(gl.FRAMEBUFFER_COMPLETE); 390 glErrorShouldBe(gl, gl.NO_ERROR); 391 392 var tex = gl.createTexture(); 393 gl.bindTexture(gl.TEXTURE_2D, tex); 394 gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 16, 16, 0, gl.RGBA, gl.UNSIGNED_BYTE, null); 395 gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, tex, 0); 396 glErrorShouldBe(gl, gl.NO_ERROR); 397 if (gl.checkFramebufferStatus(gl.FRAMEBUFFER) != gl.FRAMEBUFFER_COMPLETE) { 398 return; 399 } 400 401 gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 32, 16, 0, gl.RGBA, gl.UNSIGNED_BYTE, null); 402 checkFramebuffer(gl.FRAMEBUFFER_INCOMPLETE_DIMENSIONS); 403 gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 16, 16, 0, gl.RGBA, gl.UNSIGNED_BYTE, null); 404 checkFramebuffer(gl.FRAMEBUFFER_COMPLETE); 405 406 glErrorShouldBe(gl, gl.NO_ERROR); 407 } 408 409 successfullyParsed = true; 142 410 </script> 143 411 -
trunk/LayoutTests/fast/canvas/webgl/resources/webgl-test.js
r98407 r102697 124 124 } 125 125 126 function shouldGenerateGLError(ctx, glError, evalStr) { 126 // Pass undefined for glError to test that it at least throws some error 127 function shouldGenerateGLError(ctx, glErrors, evalStr) { 128 if (!glErrors.length) { 129 glErrors = [glErrors]; 130 } 127 131 var exception; 128 132 try { … … 135 139 } else { 136 140 var err = ctx.getError(); 137 if (err != glError) { 138 testFailed(evalStr + " expected: " + getGLErrorAsString(ctx, glError) + ". Was " + getGLErrorAsString(ctx, err) + "."); 141 if (glErrors.indexOf(err) < 0) { 142 var errStrs = []; 143 for (var ii = 0; ii < glErrors.length; ++ii) { 144 errStrs.push(getGLErrorAsString(ctx, glErrors[ii])); 145 } 146 testFailed(evalStr + " expected: " + errStrs.join(" or ") + ". Was " + getGLErrorAsString(ctx, err) + "."); 139 147 } else { 140 testPassed(evalStr + " generated expected GL error: " + getGLErrorAsString(ctx, glError) + ".");148 testPassed(evalStr + " generated expected GL error: " + getGLErrorAsString(ctx, err) + "."); 141 149 } 142 150 } … … 146 154 * Tests that the first error GL returns is the specified error. 147 155 * @param {!WebGLContext} gl The WebGLContext to use. 148 * @param {number} glError The expected gl error. 156 * @param {number|!Array.<number>} glError The expected gl 157 * error. Multiple errors can be passed in using an 158 * array. 149 159 * @param {string} opt_msg Optional additional message. 150 160 */ 151 function glErrorShouldBe(gl, glError, opt_msg) { 161 function glErrorShouldBe(gl, glErrors, opt_msg) { 162 if (!glErrors.length) { 163 glErrors = [glErrors]; 164 } 152 165 opt_msg = opt_msg || ""; 153 166 var err = gl.getError(); 154 if (err != glError) { 155 testFailed("getError expected: " + getGLErrorAsString(gl, glError) + 156 ". Was " + getGLErrorAsString(gl, err) + " : " + opt_msg); 167 var ndx = glErrors.indexOf(err); 168 if (ndx < 0) { 169 if (glErrors.length == 1) { 170 testFailed("getError expected: " + getGLErrorAsString(gl, glErrors[0]) + 171 ". Was " + getGLErrorAsString(gl, err) + " : " + opt_msg); 172 } else { 173 var errs = []; 174 for (var ii = 0; ii < glErrors.length; ++ii) { 175 errs.push(getGLErrorAsString(gl, glErrors[ii])); 176 } 177 testFailed("getError expected one of: [" + errs.join(", ") + 178 "]. Was " + getGLErrorAsString(gl, err) + " : " + opt_msg); 179 } 157 180 } else { 158 181 testPassed("getError was expected value: " + 159 getGLErrorAsString(gl, glError) + " : " + opt_msg);182 getGLErrorAsString(gl, err) + " : " + opt_msg); 160 183 } 161 184 }; -
trunk/LayoutTests/platform/chromium/test_expectations.txt
r102682 r102697 2330 2330 2331 2331 // These three failures are due to Mesa bugs 2332 BUGWEBGL : fast/canvas/webgl/framebuffer-object-attachment.html = TEXT 2332 2333 BUGWEBGL : fast/canvas/webgl/gl-uniform-arrays.html = TIMEOUT TEXT 2333 2334 BUGWEBGL : fast/canvas/webgl/point-size.html = TEXT -
trunk/Source/WebCore/ChangeLog
r102696 r102697 1 2011-12-09 Zhenyao Mo <zmo@google.com> 2 3 Implement GLES2 CheckFramebufferStatus() behavior 4 https://bugs.webkit.org/show_bug.cgi?id=74228 5 6 Reviewed by Kenneth Russell. 7 8 * html/canvas/WebGLFramebuffer.cpp: 9 (WebCore::WebGLFramebuffer::getColorBufferWidth): Add ColorBuffer to the function name - this is more accurate. 10 (WebCore::WebGLFramebuffer::getColorBufferHeight): Ditto. 11 (WebCore::WebGLFramebuffer::checkStatus): Implement full semantics of GLES2 glCheckFramebufferStatus(). 12 (WebCore::WebGLFramebuffer::onAccess): Call checkStatus(). 13 * html/canvas/WebGLFramebuffer.h: 14 * html/canvas/WebGLRenderingContext.cpp: 15 (WebCore::WebGLRenderingContext::checkFramebufferStatus): Call checkStatus(). 16 (WebCore::WebGLRenderingContext::getFramebufferAttachmentParameter): No longer check framebuffer status. 17 (WebCore::WebGLRenderingContext::getBoundFramebufferWidth): Call getColorBufferWidth. 18 (WebCore::WebGLRenderingContext::getBoundFramebufferHeight): Call getColorBufferHeight. 19 1 20 2011-12-13 James Simonsen <simonjam@chromium.org> 2 21 -
trunk/Source/WebCore/html/canvas/WebGLFramebuffer.cpp
r95901 r102697 36 36 namespace { 37 37 38 // This function is only for depth/stencil/depth_stencil attachment. 39 // Currently we assume these attachments are all renderbuffers. 40 GC3Denum getInternalFormat(WebGLObject* buffer) 41 { 42 ASSERT(buffer && buffer->isRenderbuffer()); 43 return (reinterpret_cast<WebGLRenderbuffer*>(buffer))->getInternalFormat(); 38 bool isAttachmentComplete(WebGLObject* attachedObject, GC3Denum attachment) 39 { 40 ASSERT(attachedObject && attachedObject->object()); 41 ASSERT(attachedObject->isRenderbuffer()); 42 WebGLRenderbuffer* buffer = reinterpret_cast<WebGLRenderbuffer*>(attachedObject); 43 switch (attachment) { 44 case GraphicsContext3D::DEPTH_ATTACHMENT: 45 if (buffer->getInternalFormat() != GraphicsContext3D::DEPTH_COMPONENT16) 46 return false; 47 break; 48 case GraphicsContext3D::STENCIL_ATTACHMENT: 49 if (buffer->getInternalFormat() != GraphicsContext3D::STENCIL_INDEX8) 50 return false; 51 break; 52 case GraphicsContext3D::DEPTH_STENCIL_ATTACHMENT: 53 if (buffer->getInternalFormat() != GraphicsContext3D::DEPTH_STENCIL) 54 return false; 55 break; 56 default: 57 ASSERT_NOT_REACHED(); 58 return false; 59 } 60 if (!buffer->getWidth() || !buffer->getHeight()) 61 return false; 62 return true; 63 } 64 65 GC3Dsizei getImageWidth(WebGLObject* attachedObject) 66 { 67 ASSERT(attachedObject && attachedObject->object()); 68 ASSERT(attachedObject->isRenderbuffer()); 69 WebGLRenderbuffer* buffer = reinterpret_cast<WebGLRenderbuffer*>(attachedObject); 70 return buffer->getWidth(); 71 } 72 73 GC3Dsizei getImageHeight(WebGLObject* attachedObject) 74 { 75 ASSERT(attachedObject && attachedObject->object()); 76 ASSERT(attachedObject->isRenderbuffer()); 77 WebGLRenderbuffer* buffer = reinterpret_cast<WebGLRenderbuffer*>(attachedObject); 78 return buffer->getHeight(); 44 79 } 45 80 … … 169 204 } 170 205 171 GC3Dsizei WebGLFramebuffer::get Width() const206 GC3Dsizei WebGLFramebuffer::getColorBufferWidth() const 172 207 { 173 208 if (!object() || !isColorAttached()) … … 181 216 } 182 217 183 GC3Dsizei WebGLFramebuffer::get Height() const218 GC3Dsizei WebGLFramebuffer::getColorBufferHeight() const 184 219 { 185 220 if (!object() || !isColorAttached()) … … 214 249 } 215 250 216 bool WebGLFramebuffer::isIncomplete(bool checkInternalFormat) const251 GC3Denum WebGLFramebuffer::checkStatus() const 217 252 { 218 253 unsigned int count = 0; 254 GC3Dsizei width = 0, height = 0; 219 255 if (isDepthAttached()) { 220 if (checkInternalFormat && getInternalFormat(m_depthAttachment.get()) != GraphicsContext3D::DEPTH_COMPONENT16) 221 return true; 256 if (!isAttachmentComplete(m_depthAttachment.get(), GraphicsContext3D::DEPTH_ATTACHMENT)) 257 return GraphicsContext3D::FRAMEBUFFER_INCOMPLETE_ATTACHMENT; 258 width = getImageWidth(m_depthAttachment.get()); 259 height = getImageHeight(m_depthAttachment.get()); 222 260 count++; 223 261 } 224 262 if (isStencilAttached()) { 225 if (checkInternalFormat && getInternalFormat(m_stencilAttachment.get()) != GraphicsContext3D::STENCIL_INDEX8) 226 return true; 263 if (!isAttachmentComplete(m_stencilAttachment.get(), GraphicsContext3D::STENCIL_ATTACHMENT)) 264 return GraphicsContext3D::FRAMEBUFFER_INCOMPLETE_ATTACHMENT; 265 if (!count) { 266 width = getImageWidth(m_stencilAttachment.get()); 267 height = getImageHeight(m_stencilAttachment.get()); 268 } else { 269 if (width != getImageWidth(m_stencilAttachment.get()) || height != getImageHeight(m_stencilAttachment.get())) 270 return GraphicsContext3D::FRAMEBUFFER_INCOMPLETE_DIMENSIONS; 271 } 227 272 count++; 228 273 } 229 274 if (isDepthStencilAttached()) { 230 if ( checkInternalFormat && getInternalFormat(m_depthStencilAttachment.get()) != GraphicsContext3D::DEPTH_STENCIL)231 return true;275 if (!isAttachmentComplete(m_depthStencilAttachment.get(), GraphicsContext3D::DEPTH_STENCIL_ATTACHMENT)) 276 return GraphicsContext3D::FRAMEBUFFER_INCOMPLETE_ATTACHMENT; 232 277 if (!isValid(m_depthStencilAttachment.get())) 233 return true; 278 return GraphicsContext3D::FRAMEBUFFER_UNSUPPORTED; 279 if (!count) { 280 width = getImageWidth(m_depthStencilAttachment.get()); 281 height = getImageHeight(m_depthStencilAttachment.get()); 282 } else { 283 if (width != getImageWidth(m_depthStencilAttachment.get()) || height != getImageHeight(m_depthStencilAttachment.get())) 284 return GraphicsContext3D::FRAMEBUFFER_INCOMPLETE_DIMENSIONS; 285 } 234 286 count++; 235 287 } 288 // WebGL specific: no conflicting DEPTH/STENCIL/DEPTH_STENCIL attachments. 236 289 if (count > 1) 237 return true; 238 return false; 290 return GraphicsContext3D::FRAMEBUFFER_UNSUPPORTED; 291 if (isColorAttached()) { 292 // FIXME: if color buffer is texture, is ALPHA, LUMINANCE or LUMINANCE_ALPHA valid? 293 if (!getColorBufferFormat()) 294 return GraphicsContext3D::FRAMEBUFFER_INCOMPLETE_ATTACHMENT; 295 if (!count) { 296 if (!getColorBufferWidth() || !getColorBufferHeight()) 297 return GraphicsContext3D::FRAMEBUFFER_INCOMPLETE_ATTACHMENT; 298 } else { 299 if (width != getColorBufferWidth() || height != getColorBufferHeight()) 300 return GraphicsContext3D::FRAMEBUFFER_INCOMPLETE_DIMENSIONS; 301 } 302 } else { 303 if (!count) 304 return GraphicsContext3D::FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT; 305 } 306 return GraphicsContext3D::FRAMEBUFFER_COMPLETE; 239 307 } 240 308 241 309 bool WebGLFramebuffer::onAccess(bool needToInitializeRenderbuffers) 242 310 { 243 if ( isIncomplete(true))311 if (checkStatus() != GraphicsContext3D::FRAMEBUFFER_COMPLETE) 244 312 return false; 245 313 if (needToInitializeRenderbuffers) -
trunk/Source/WebCore/html/canvas/WebGLFramebuffer.h
r95901 r102697 50 50 51 51 GC3Denum getColorBufferFormat() const; 52 GC3Dsizei get Width() const;53 GC3Dsizei get Height() const;52 GC3Dsizei getColorBufferWidth() const; 53 GC3Dsizei getColorBufferHeight() const; 54 54 55 55 // This should always be called before drawArray, drawElements, clear, … … 61 61 bool onAccess(bool needToInitializeRenderbuffers); 62 62 63 // Return false does not mean COMPLETE, might still be INCOMPLETE. 64 bool isIncomplete(bool checkInternalFormat) const; 63 // Software version of glCheckFramebufferStatus(), except that when 64 // FRAMEBUFFER_COMPLETE is returned, it is still possible for 65 // glCheckFramebufferStatus() to return FRAMEBUFFER_UNSUPPORTED, 66 // depending on hardware implementation. 67 GC3Denum checkStatus() const; 65 68 66 69 bool hasEverBeenBound() const { return object() && m_hasEverBeenBound; } -
trunk/Source/WebCore/html/canvas/WebGLRenderingContext.cpp
r102430 r102697 1093 1093 if (!m_framebufferBinding || !m_framebufferBinding->object()) 1094 1094 return GraphicsContext3D::FRAMEBUFFER_COMPLETE; 1095 if (m_framebufferBinding->isIncomplete(true)) 1096 return GraphicsContext3D::FRAMEBUFFER_UNSUPPORTED; 1097 unsigned long result = m_context->checkFramebufferStatus(target); 1095 GC3Denum result = m_framebufferBinding->checkStatus(); 1096 if (result != GraphicsContext3D::FRAMEBUFFER_COMPLETE) 1097 return result; 1098 result = m_context->checkFramebufferStatus(target); 1098 1099 cleanupAfterGraphicsCall(false); 1099 1100 return result; … … 2160 2161 return WebGLGetInfo(); 2161 2162 2162 if (!m_framebufferBinding || !m_framebufferBinding->object() || m_framebufferBinding->isIncomplete(false)) {2163 if (!m_framebufferBinding || !m_framebufferBinding->object()) { 2163 2164 m_context->synthesizeGLError(GraphicsContext3D::INVALID_OPERATION); 2164 2165 return WebGLGetInfo(); … … 4309 4310 { 4310 4311 if (m_framebufferBinding && m_framebufferBinding->object()) 4311 return m_framebufferBinding->get Width();4312 return m_framebufferBinding->getColorBufferWidth(); 4312 4313 return m_drawingBuffer ? m_drawingBuffer->size().width() : m_context->getInternalFramebufferSize().width(); 4313 4314 } … … 4316 4317 { 4317 4318 if (m_framebufferBinding && m_framebufferBinding->object()) 4318 return m_framebufferBinding->get Height();4319 return m_framebufferBinding->getColorBufferHeight(); 4319 4320 return m_drawingBuffer ? m_drawingBuffer->size().height() : m_context->getInternalFramebufferSize().height(); 4320 4321 }
Note: See TracChangeset
for help on using the changeset viewer.