The upload/download/decompression functions aren't all that specific to GL; I imagine we'll eventually need them for Vulkan as well. I don't care much for "wined3d_format_conversion_func", but \*shrug\*. I don't care much for the reformatting of format_texture_info[] either. It's true that the table is perhaps a bit unwieldy in its current form, but I don't think this MR makes it better. The direction we had been moving in was to simply store optional information in separate tables, e.g. format_srgb_info[], format_decompress_info[], format_block_info[], and so on. The upload/download callbacks are in that category, as are "gl_srgb_internal" and "gl_rt_internal". The (default) format flags could probably either be stored in a more compact format or be moved to a separate table as well, at which point we'd essentially be left with "gl_internal", "gl_format", and "gl_type". We could conceivably even derive "gl_format" and "gl_type" from the channel info, although it's not clear to me that it would be worth it. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/4858#note_57715