----- Original Message ----- > José, Roland, > > there is a problem with the proposed approach of having the > convert_to_float flag. That flag might not be supported for certain > integer formats. We would need to update some more places, e.g. > is_format_supported: > > boolean (*is_format_supported)( struct pipe_screen *, > enum pipe_format format, > enum pipe_texture_target target, > unsigned sample_count, > unsigned bindings, > boolean can_be_converted_to_float > );
> See the last parameter. Ugly, isn't it? There is no other way around > it. AFAIK, is_format_supported() was never used for vertex formats, just textures. And given that textures can only be sampled without implicit conversion (i.e., the "pure" vs scaled integers doesn't apply), I see no need to add can_be_converted_to_float to is_format_supported(). I think what we need a is_vertex_format_supported(), or something like that. > The translate module also needs to distinguish between scaled and > integer types. Translate currently doesn't support integers, only > scaled. The code in Translate would either have to look like this: > > case PIPE_FORMAT_R32_SSCALED: > return is_int ? &emit_R32_SINT : &emit_32_SSCALED; > > Or like this: > > case PIPE_FORMAT_R32_SINT: > return is_scaled ? &emit_R32_SSCALED : &emit_32_SINT; No, the translate module doesn't need to change like that. What the translate module needs to do is ensure that PIPE_FORMAT_xxxx_SINT -> PIPE_FORMAT_xxx_SINT doesn't get converted to a float intermediate, but into an integer intermediate instead. When the translate module is converting from PIPE_FORMAT_xxx_SINT -> PIPE_FORMAT_xxx_FLOAT or PIPE_FORMAT_xxx_FLOAT -> PIPE_FORMAT_xxx_SINT, telling that you want "pure integers" is pointless! So, yes, the translate module's _internals_ needs to change, but its interface needs _no_ change at all. In summary, the "is_int" flag you mention can be determined from the current inputs. > The fairly new extension GL_ARB_vertex_type_2_10_10_10_rev also adds > new scaled types and NOT integers (see Issue 7 of the specification). It looks you need ta PIPE_FORMAT_R10G10B10A2_SNORM and a PIPE_FORMAT_R10G10B10A2_SINT (previously known as _SCALED) to acommodate the different semantics for different legacy attributes. But as far as the "pure integer" issue, it is in no aspect different from any other format. Jose _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev