Closed Bug 1170462 Opened 9 years ago Closed 9 years ago

WebGL 2 - Finish implementing 3D Textures

Categories

(Core :: Graphics: CanvasWebGL, defect)

defect
Not set
normal

Tracking

()

RESOLVED FIXED

People

(Reporter: u480271, Assigned: kyle_fung)

References

()

Details

(Whiteboard: [gfx-noted])

Attachments

(1 file)

There are a number of MOZ_CRASH("Not Implemented.") in dom/canvas/WebGL2ContextTextures.cpp:

void WebGL2Context::TexSubImage3D(...);
void WebGL2Context::CopyTexSubImage3D(...);
void WebGL2Context::CompressedTexImage3D(...);
void WebGL2Context::CompressedTexSubImage3D(...);
Assignee: nobody → kfung
Implemented a version of TexSubImage3D based off of an existing version.
I haven't been able to test it yet. Do you know if the Khronos conformance tests test this function?
Attachment #8635358 - Flags: feedback?(dglastonbury)
(In reply to kfung from comment #1)
> Created attachment 8635358 [details] [diff] [review]
> implement-texSubImage3d.patch
> 
> Implemented a version of TexSubImage3D based off of an existing version.
> I haven't been able to test it yet. Do you know if the Khronos conformance
> tests test this function?

You are the third person to be working on this simultaneously, I fear. :) We don't have a ton of tests for this stuff, so we're leaning pretty hard on code correctness and review.
Comment on attachment 8635358 [details] [diff] [review]
implement-texSubImage3d.patch

Review of attachment 8635358 [details] [diff] [review]:
-----------------------------------------------------------------

This patch looks to be on the right path. I'd like you to try using the webgl::FormatInfo for checking the effective internal formats.

::: dom/canvas/WebGL2ContextTextures.cpp
@@ +432,4 @@
>                               ErrorResult& rv)
>  {
> +    if (IsContextLost()) {
> +        return;

No {}'s for simple, single line if. ie:

if (IsContextLost())
    return;

@@ +444,5 @@
> +
> +    dom::Uint8ClampedArray arr;
> +    DebugOnly<bool> inited = arr.Init(imageData->GetDataObject());
> +    MOZ_ASSERT(inited);
> +    arr.ComputeLengthAndData();

Move these 4 lines down closer to where arr is used.

@@ +468,5 @@
> +    const WebGLTexture::ImageInfo& imageInfo = tex->ImageInfoAt(texImageTarget, level);
> +    const TexInternalFormat existingEffectiveInternalFormat = imageInfo.EffectiveInternalFormat();
> +    TexInternalFormat existingUnsizedInternalFormat = LOCAL_GL_NONE;
> +    TexType existingType = LOCAL_GL_NONE;
> +    UnsizedInternalFormatAndTypeFromEffectiveInternalFormat(existingEffectiveInternalFormat,

We should replace this function with the new webgl::FormatInfo from WebGLFormats.cpp

@@ +485,5 @@
> +        return ErrorInvalidOperation("texSubImage3D: type differs from that of the existing image");
> +    }
> +
> +    js::Scalar::Type jsArrayType = js::Scalar::MaxTypedArrayViewType;
> +    void* data = arr.Data();

ie. arr is used here.

@@ +496,5 @@
> +    const size_t bitsPerTexel = GetBitsPerTexel(existingEffectiveInternalFormat);
> +    MOZ_ASSERT((bitsPerTexel % 8) == 0); // should not have compressed formats here.
> +    size_t srcTexelSize = bitsPerTexel / 8;
> +
> +    if (width == 0 || height == 0) {

Can this be done earlier, or does that cause param checking failures? (ie. no error when one of the other params would cause a error to be returned)
(In reply to Dan Glastonbury :djg :kamidphish from comment #3)
> ...
> 
> ::: dom/canvas/WebGL2ContextTextures.cpp
> @@ +432,4 @@
> >                               ErrorResult& rv)
> >  {
> > +    if (IsContextLost()) {
> > +        return;
> 
> No {}'s for simple, single line if. ie:
> 
> if (IsContextLost())
>     return;
> 

Uhm, ignore that comment from Dan.  We do want {} even on single line conditionals, following our coding guidelines.  It's enough that we're randomly choosing 4 spaces instead of 2, may as well not introduce other differences into this code.
(In reply to Milan Sreckovic [:milan] from comment #4)
> (In reply to Dan Glastonbury :djg :kamidphish from comment #3)
> > ...
> > 
> > ::: dom/canvas/WebGL2ContextTextures.cpp
> > @@ +432,4 @@
> > >                               ErrorResult& rv)
> > >  {
> > > +    if (IsContextLost()) {
> > > +        return;
> > 
> > No {}'s for simple, single line if. ie:
> > 
> > if (IsContextLost())
> >     return;
> > 
> 
> Uhm, ignore that comment from Dan.  We do want {} even on single line
> conditionals, following our coding guidelines.  It's enough that we're
> randomly choosing 4 spaces instead of 2, may as well not introduce other
> differences into this code.

It would be a change from the module's prevailing style to require brackets for single-line returns following single-line conditionals. For at least `if () return` code, the single concern mentioned in the Mozilla style guide does not apply. Because this pattern is particularly common in our module (due to heavy validation), Dan and I decided that we shouldn't require brackets for this pattern.

Let's have a separate discussion on this if you want to talk about merging styles.
(In reply to Milan Sreckovic [:milan] from comment #4)
> Uhm, ignore that comment from Dan.  We do want {} even on single line
> conditionals, following our coding guidelines.  It's enough that we're
> randomly choosing 4 spaces instead of 2, may as well not introduce other
> differences into this code.

Then the code doesn't match the rest of WebGL-style.

Also, 4 space is not randomly chosen. It was a conscious decision by the active maintainers of the code.
Attachment #8635358 - Flags: feedback?(dglastonbury)
Is this done?
Flags: needinfo?(jgilbert)
Yes.
Fixed by bug 1221822.
Status: NEW → RESOLVED
Closed: 9 years ago
Flags: needinfo?(jgilbert)
Resolution: --- → FIXED
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: