KhronosGroup / OpenGL-Registry

OpenGL, OpenGL ES, and OpenGL ES-SC API and Extension Registry
677 stars 274 forks source link

Clarification wanted: glGenerateMipmap format support #614

Open kusma opened 3 months ago

kusma commented 3 months ago

The OpenGL ES 3.2 spec, section 8.14.4 ("Manual Mipmap Generation") defines some additional requirements for GenerateMipmap() that the corresponding part of the OpenGL 4.6 compatibility spec doesn't include:

An INVALIDOPERATION error is generated if target is TEXTURE- CUBE_MAP or TEXTURE_CUBE_MAP_ARRAY, and the texture bound to target is not cube complete or cube array complete, respectively.

There's no indication in section 8.14.4 that mipmap generation isn't supported for all formats (although with an undefined filtering function).

However, OpenGL 4.6 spec, section 22.3.1 also includes the MANUAL_GENERATE_MIPMAP query, that seems to allow implementations to report lacking support for some (if not all?) formats. However, the CTS does not check formats before testing if mipmapping works. The CTS also seems to assume that a box-filter, which isn't mandated by the spec (although it's recommended).

So, my questions are:

  1. Is GenerateMipmap() supposed to to work for all core OpenGL 4.6 internal formats?
  2. If "yes", when is the MANUAL_GENERATE_MIPMAP-query allowed to report NONE?
  3. If "no", when is the MANUAL_GENERATE_MIPMAP-query required to report something else than NONE?
  4. If "no", is it about time to add a list of required formats to the spec? Since the CTS currently assumes a set of supported formats, all conformant products should already support a specific set, no?
zmike commented 3 months ago

WG 2024-06-05: Need more time to investigate/discuss.

janharaldfredriksen-arm commented 2 weeks ago

There's no indication in section 8.14.4 that mipmap generation isn't supported for all formats (although with an undefined filtering function).

There are some format constraints for ES given this:

An INVALID_OPERATION error is generated if the level_base array was not specified with an unsized internal format from table 8.3 or a sized internal format that is both color-renderable and texture-filterable according to table 8.10.

That doesn't answer any of the questions for GL 4.6, though. It looks like MANUAL_GENERATE_MIPMAP was added in GL_ARB_internalformat_query2, but I haven't been able to dig up the discussion that led to that (and the spec doesn't say very much about what it means).

janharaldfredriksen-arm commented 2 weeks ago

For reference, I found some of the original discussion around the MANUAL_GENERATE_MIPMAP internal format query: https://www.khronos.org/members/login/bugzilla/show_bug.cgi?id=7719 (needs Khronos internal bugzilla access).

I haven't read it all, though this bit seems relevant (MIPMAPS was later renamed to MANUAL_GENERATE_MIPMAP):

  • MIPMAPS (do we have any texture formats that don't support mipmapping?) Maybe not texture formats alone, but when you factor in you have cases where mipmapping is not supported (i.e. rectangle and multisample textures).