https://bugs.freedesktop.org/show_bug.cgi?id=84566
Priority: medium Bug ID: 84566 Assignee: mesa-dev@lists.freedesktop.org Summary: Unify the format conversion code Severity: enhancement Classification: Unclassified OS: All Reporter: ja...@jlekstrand.net Hardware: All Status: NEW Version: git Component: Mesa core Product: Mesa Right now we have a lot of format conversion code scattered all over mesa. Off the top of my head we have: * main/format_utils.c: Convert between two array based formats * main/format_pack.c: Convert from GLubyte and GLfloat array formats to mesa formats * main/format_unpack.c: Convert from mesa formats to GLubyte, GLfloat, and GLuint array formats * main/pack.c: Convert GL formats to/from GLubyte, GLfloat, and GLuint array formats. (This is redundant since all the GL formats are either array formats or mesa formats) * main/texstore.c: Most of the stuff for color formats is gone, but depth and stencil is still repeated. Also, there's a terrible 565 path left there. * swrast/s_texfetch.c: Mostly a repeat of format_unpack.c * gallium/auxilliary/util/: More packing/unpacking functions that are repeats of the above. As you can see, there's a lot of repetition. There's also several places where we have the same repeated code to do full conversions. It's a mess. I would like to fix clean up this mess and unify a lot of the conversion code. Here's what I've envisioned: 1) Autogenerate all of the color packing/unpacking functions 2) Convert all of the packing/unpacking functions to pack/unpack a rectangle taking a width, height, and stride. We can use 1x1 for single-pixel conversions. 3) Make swrast use the unpacking functions instead of its own texture sampling functions. 4) Add an array format enum that allows us to enumerate all possible array formats. Between mesa_format and this array format, we should also be able to enumerate all of the GL datatypes. 5) Make a masater conversion function that takes a void*, format, width, height, and stride for both source and destination and just does the conversion. If the above mentioned array format enum is distinct from the mesa_format enum, the function could be written to take a uint32_t type and accept either mesa_format or an array format in the same parameter. 6) Use the above master conversion function for TexSubimage, TexImage, GetTexImage, DrawPixels, and ReadPixels. We still have to deal with pixel conversion, but it should vastly simplify all of them. -- You are receiving this mail because: You are the assignee for the bug.
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev