Auto merge of #11168 - daoshengmu:texSubImage2D, r=emilio

Implement WebGL TexSubImage2D

Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data:
- [X] `./mach build -d` does not report any errors
- [X] `./mach test-tidy` does not report any errors
- [ ] These changes fix #__ (github issue number if applicable).

Either:
- [ ] There are tests for these changes OR
- [X] These changes do not require tests because I have run the wpt test of texSubImage2D.html, and it works.

Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process.

I have implemented ```TexSubImage2D``` follow [the spec](https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.8). This is my first version of implementation, and I notice I can reuse the code from ```TexImage2D```. Therefore, I would like to discuss make ```validate_tex_image2D_from_buffer``` and ```validate_tex_image2D_from_source``` to remove duplicate code.

Part of #10209

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="35" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/11168)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2016-06-09 19:49:08 -05:00 committed by GitHub
commit 5e8ab6c0ff
7 changed files with 763 additions and 133 deletions

View file

@ -1,5 +0,0 @@
[texSubImage2DBadArgs.html]
type: testharness
[WebGL test #0: testTexImage2D]
expected: FAIL

View file

@ -1,5 +0,0 @@
[texSubImage2DHTMLBadArgs.html]
type: testharness
[WebGL test #0: testTexImage2D]
expected: FAIL

View file

@ -1,13 +1,5 @@
[tex-image-and-sub-image-2d-with-array-buffer-view.html]
type: testharness
[WebGL test #0: successfullyParsed should be true. Was false.]
expected: FAIL
[WebGL test #0: Unable to fetch WebGL rendering context for Canvas]
expected: FAIL
[WebGL test #1: successfullyParsed should be true. Was false.]
expected: FAIL
[WebGL test #0: at (0, 0) expected: 0,255,0,255 was 255,0,0,255]
expected: FAIL
@ -15,6 +7,101 @@
[WebGL test #1: at (0, 8) expected: 255,0,0,255 was 0,255,0,255]
expected: FAIL
[WebGL test #2: successfullyParsed should be true. Was false.]
[WebGL test #2: at (0, 0) expected: 0,0,255,255 was 255,0,0,255]
expected: FAIL
[WebGL test #3: at (0, 4) expected: 255,0,0,255 was 0,0,255,255]
expected: FAIL
[WebGL test #4: at (8, 0) expected: 0,255,0,255 was 255,0,0,255]
expected: FAIL
[WebGL test #5: at (0, 8) expected: 255,0,0,255 was 0,255,0,255]
expected: FAIL
[WebGL test #6: at (0, 0) expected: 0,0,255,255 was 255,0,0,255]
expected: FAIL
[WebGL test #7: at (0, 4) expected: 255,0,0,255 was 0,0,255,255]
expected: FAIL
[WebGL test #8: at (8, 0) expected: 0,255,0,255 was 255,0,0,255]
expected: FAIL
[WebGL test #9: at (0, 8) expected: 255,0,0,255 was 0,255,0,255]
expected: FAIL
[WebGL test #10: at (8, 8) expected: 0,0,255,255 was 255,0,0,255]
expected: FAIL
[WebGL test #11: at (8, 12) expected: 255,0,0,255 was 0,0,255,255]
expected: FAIL
[WebGL test #12: GL error before texture upload]
expected: FAIL
[WebGL test #25: GL error before texture upload]
expected: FAIL
[WebGL test #26: at (0, 0) expected: 0,0,0,255 was 255,0,0,255]
expected: FAIL
[WebGL test #27: at (0, 8) expected: 255,0,0,255 was 0,255,0,255]
expected: FAIL
[WebGL test #28: at (0, 0) expected: 0,0,0,255 was 255,0,0,255]
expected: FAIL
[WebGL test #29: at (0, 4) expected: 255,0,0,255 was 0,0,255,255]
expected: FAIL
[WebGL test #30: at (8, 0) expected: 0,0,0,255 was 255,0,0,255]
expected: FAIL
[WebGL test #31: at (0, 8) expected: 255,0,0,255 was 0,255,0,255]
expected: FAIL
[WebGL test #32: at (0, 0) expected: 0,0,0,255 was 255,0,0,255]
expected: FAIL
[WebGL test #33: at (0, 4) expected: 255,0,0,255 was 0,0,255,255]
expected: FAIL
[WebGL test #34: at (8, 0) expected: 0,0,0,255 was 255,0,0,255]
expected: FAIL
[WebGL test #35: at (0, 8) expected: 255,0,0,255 was 0,255,0,255]
expected: FAIL
[WebGL test #36: at (8, 8) expected: 0,0,0,255 was 255,0,0,255]
expected: FAIL
[WebGL test #37: at (8, 12) expected: 255,0,0,255 was 0,0,255,255]
expected: FAIL
[WebGL test #38: GL error before texture upload]
expected: FAIL
[WebGL test #40: at (0, 8) expected: 0,0,0,255 was 0,255,0,255]
expected: FAIL
[WebGL test #42: at (0, 4) expected: 0,0,0,255 was 0,0,255,255]
expected: FAIL
[WebGL test #44: at (0, 8) expected: 0,0,0,255 was 0,255,0,255]
expected: FAIL
[WebGL test #46: at (0, 4) expected: 0,0,0,255 was 0,0,255,255]
expected: FAIL
[WebGL test #48: at (0, 8) expected: 0,0,0,255 was 0,255,0,255]
expected: FAIL
[WebGL test #50: at (8, 12) expected: 0,0,0,255 was 0,0,255,255]
expected: FAIL
[WebGL test #51: GL error before texture upload]
expected: FAIL
[WebGL test #52: successfullyParsed should be true. Was false.]
expected: FAIL

View file

@ -6,3 +6,350 @@
[WebGL test #1: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #4: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #6: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #9: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #11: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #14: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #16: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #18: at (0, 0) expected: 0,0,255,255 was 0,255,255,255]
expected: FAIL
[WebGL test #19: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #21: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #24: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #26: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #29: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #31: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #34: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #36: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #38: at (0, 0) expected: 0,0,255,255 was 0,255,255,255]
expected: FAIL
[WebGL test #39: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #41: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #44: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #46: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #49: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #51: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #54: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #51: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #54: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #55: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #59: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #60: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #64: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #65: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #69: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #70: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #73: at (0, 0) expected: 0,0,255,255 was 0,255,255,255]
expected: FAIL
[WebGL test #74: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #75: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #79: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #80: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #84: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #85: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #89: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #90: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #93: at (0, 0) expected: 0,0,255,255 was 0,255,255,255]
expected: FAIL
[WebGL test #94: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #95: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #99: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #100: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #104: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #105: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #109: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #105: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #108: at (0, 0) expected: 0,0,255,255 was 0,255,255,255]
expected: FAIL
[WebGL test #109: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #110: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #114: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #115: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #119: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #120: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #124: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #125: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #128: at (0, 0) expected: 0,0,255,255 was 0,255,255,255]
expected: FAIL
[WebGL test #129: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #130: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #134: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #135: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #139: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #140: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #144: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #145: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #148: at (0, 0) expected: 0,0,255,255 was 0,255,255,255]
expected: FAIL
[WebGL test #149: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #150: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #154: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #155: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #159: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #160: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #164: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #165: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #168: at (0, 0) expected: 0,0,255,255 was 0,255,255,255]
expected: FAIL
[WebGL test #169: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #170: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #174: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #175: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #179: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #180: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #184: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #185: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #188: at (0, 0) expected: 0,0,255,255 was 0,255,255,255]
expected: FAIL
[WebGL test #189: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #190: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #194: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #195: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #199: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #200: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #204: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #205: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #208: at (0, 0) expected: 0,0,255,255 was 0,255,255,255]
expected: FAIL
[WebGL test #209: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #210: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #214: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #215: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #219: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #220: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #224: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #225: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #229: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #230: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #234: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #235: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #239: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #240: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #244: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #245: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #249: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL
[WebGL test #250: unexpected gl error: INVALID_ENUM]
expected: FAIL
[WebGL test #253: at (0, 0) expected: 0,0,255,255 was 0,255,255,255]
expected: FAIL
[WebGL test #254: getError expected: NO_ERROR. Was INVALID_ENUM : Should be no errors.]
expected: FAIL