https://bugs.freedesktop.org/show_bug.cgi?id=84566
--- Comment #14 from Iago Toral <ito...@igalia.com> --- (In reply to Jason Ekstrand from comment #13) > (In reply to Iago Toral from comment #12) > > (In reply to Jason Ekstrand from comment #11) > > > (In reply to Iago Toral from comment #10) > > > > (In reply to Iago Toral from comment #9) > > > > > Jason, piglit tests hit cases where they attempt to convert GL format > > > > > and > > > > > data type combinations that do not match any of the existing mesa > > > > > formats. > > > > > > > > > > For example GL_RGB + GL_UNSIGNED_BYTE_2_3_3_REV (BBGG GRRR). The > > > > > Only mesa > > > > > format of this kind is MESA_FORMAT_B2G3R3_UNORM (RRRG GGBB). > > > > > > > > > > This means that we don't have pack and unpack functions for these > > > > > types, > > > > > which we need to use a master conversion function. I think the > > > > > natural thing > > > > > to do would be to add new mesa_format types for these, together with > > > > > their > > > > > format_pack.c and format_unpack.c functions (which should be > > > > > auto-generated > > > > > too). I suppose it is okay to add new mesa_format enums, right? > > > > > > > > BTW, as an added bonus, with this approach we will speed up conversion > > > > for > > > > some of these types too. For example, the way Mesa currently handles > > > > GL_UNSIGNED_BYTE_2_3_3_REV to GL_RGBA UBYTE involves two conversions > > > > (2_3_3_REV -> RGBA FLOAT -> RGBA_UBYTE), while we would be able to do > > > > that > > > > in one go via the auto-generated unpack function. > > > > > > How many formats like this are there? If it's only a few, then it > > > probably > > > makes sense to add the few mesa_formats that we need. > > > > I don't know yet. For that I would have enable the master convertion > > function for all code paths, then run all the piglit tests and then check > > the cases that hit the assertion I have one by one removing duplicate cases, > > so it would take some time. > > > > In any case, even if these were a significant bunch: do we have a good > > alternative? If we don't create mesa_formats for these types we would have > > to handle them as exceptions to the process (and this kind of defeats the > > purpose of a master function). We would have to handle conversions from and > > to these types through different paths and write the conversions functions > > we need by hand... > > You should know once you write a gl_format_and_type_to_mesa_format function. I have that already, but it is not enough. At the moment, if I have detected that a format is not an array format, I do something like this to decide if it has a matching mesa format: for (int f = 1; f < MESA_FORMAT_COUNT; f++) if (_mesa_format_matches_format_and_type(f, format, type, swap_bytes)) return f; So the cases that don't match simply continue and hit an assertion. > I don't think there will be many. I think OpenGL only specifies about 8 > packed formats (plus swizzling) and we should already have most of them. Let's assume they are not that many then. On a different note, I have just noticed that the driver can select a different texture format than the internal format specified by the client (glTexImage*), when the specified format is not supported. This creates a requirement for swizzle transformations where we need to do src->baseinternal->rgba->dst, but the master function, as it is right now, does not know about the internal format (only knows src and dst, so it does src->rgba->dst), so it fails for some of these cases. For example, in one case I see that the client specifies MESA_FORMAT_I_SINT8 (swizzle 0000) as the internal format for the texture, but the driver does not support that and uses MESA_FORMAT_RGBA_SINT8 (swizzle 0123) instead. A master function that only knows about MESA_FORMAT_RGBA_SINT8 and does not know that the format requested by the client was MESA_FORMAT_I_SINT8 will not produce correct results since it would not be able to compute the right swizzle transform for _mesa_swizzle_and_convert. So my proposal is to pass the baseinternalformat to the master converter. If there are cases where we do not care about an internalformat we can just pass _mesa_get_format_base_format(dstFormat) and then have the master converter compute a different swizzle when the provided internal format is different from _mesa_get_format_base_format(dstFormat), which is what various parts of texstore are doing now. Sounds reasonable? -- You are receiving this mail because: You are the QA Contact for the bug.
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev