Summary: | Can't set int attributes to certain values on 32-bit | ||
---|---|---|---|
Product: | Mesa | Reporter: | Neil Roberts <nroberts> |
Component: | Mesa core | Assignee: | marius predut <marius.predut> |
Status: | RESOLVED FIXED | QA Contact: | |
Severity: | normal | ||
Priority: | medium | ||
Version: | unspecified | ||
Hardware: | Other | ||
OS: | All | ||
Whiteboard: | |||
i915 platform: | i915 features: | ||
Attachments: | Piglit test case to demonstrate the problem |
Description
Neil Roberts
2014-08-15 15:07:52 UTC
Created attachment 104683 [details]
Piglit test case to demonstrate the problem
(In reply to comment #0) > On 32-bit builds you can't set int attributes using glUniformI* Err, I meant glVertexAttribI* I took a brief look at this. It doesn't look too hard to chane. We just need to update the code in mesa/vbo to do integer copies instead of float copies. Maybe we should change the pointer type while we're at it? After some investigation and testing ,the best solution I found is to use union gl_constant_value to store the values(vtx.attrptr) instead of storing them in a float. That involve to update all the dependency and use a new defined macros like this: #define ATTR( A, N, T, V0, V1, V2, V3 ) ATTR_##T(A, N, T, V0, V1, V2, V3) #define ATTR_GLuint( A, N, T, V0, V1, V2, V3 ) \ ATTR_UNION(A, N, T, UINT_AS_UNION(V0), UINT_AS_UNION(V1), UINT_AS_UNION(V2), UINT_AS_UNION(V3)) #define ATTR_GLint( A, N, T, V0, V1, V2, V3 ) \ ATTR_UNION(A, N, T, INT_AS_UNION(V0), INT_AS_UNION(V1), INT_AS_UNION(V2), INT_AS_UNION(V3)) The old ATTR became ATTR_UNION and treat the input values(V1,...,V4) as gl_constant_value union. A patch that fix this defect was sent to mesa-dev@lists.freedesktop.org Patch committed to master. 1a93e7690dc90211164082d6a2d26d93da8127ef |
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.