On Thu, May 18, 2017 at 2:43 AM, Iago Toral Quiroga <ito...@igalia.com> wrote: > Like we do for the 32-bit case. > > v2: > - need unsigned rounding for float->uint64 conversion (Nicolai) > - use roundf() instead of IROUND() macros > --- > src/mesa/main/uniform_query.cpp | 46 > ++++++++++++++++++++++++++++++++++++++++- > 1 file changed, 45 insertions(+), 1 deletion(-) > > diff --git a/src/mesa/main/uniform_query.cpp b/src/mesa/main/uniform_query.cpp > index 314f7d8..aca5416 100644 > --- a/src/mesa/main/uniform_query.cpp > +++ b/src/mesa/main/uniform_query.cpp > @@ -550,7 +550,6 @@ _mesa_get_uniform(struct gl_context *ctx, GLuint program, > GLint location, > break; > > case GLSL_TYPE_INT64: > - case GLSL_TYPE_UINT64: > switch (uni->type->base_type) { > case GLSL_TYPE_UINT: { > uint64_t tmp = src[sidx].u; > @@ -569,6 +568,13 @@ _mesa_get_uniform(struct gl_context *ctx, GLuint > program, GLint location, > memcpy(&dst[didx].u, &tmp, sizeof(tmp)); > break; > } > + case GLSL_TYPE_UINT64: { > + uint64_t u64; > + memcpy(&u64, &src[sidx].u, sizeof(u64)); > + int64_t tmp = MIN2(u64, INT_MAX); > + memcpy(&dst[didx].u, &tmp, sizeof(tmp)); > + break; > + } > case GLSL_TYPE_FLOAT: { > int64_t tmp = src[sidx].f; > memcpy(&dst[didx].u, &tmp, sizeof(tmp)); > @@ -580,6 +586,44 @@ _mesa_get_uniform(struct gl_context *ctx, GLuint > program, GLint location, > } > break; > > + case GLSL_TYPE_UINT64: > + switch (uni->type->base_type) { > + case GLSL_TYPE_UINT: { > + uint64_t tmp = src[sidx].u; > + memcpy(&dst[didx].u, &tmp, sizeof(tmp)); > + break; > + } > + case GLSL_TYPE_INT: > + case GLSL_TYPE_SAMPLER: > + case GLSL_TYPE_IMAGE: { > + int64_t tmp = MAX2(src[sidx].i, 0); > + memcpy(&dst[didx].u, &tmp, sizeof(tmp)); > + break; > + } > + case GLSL_TYPE_BOOL: { > + int64_t tmp = src[sidx].i ? 1.0f : 0.0f; > + memcpy(&dst[didx].u, &tmp, sizeof(tmp)); > + break; > + } > + case GLSL_TYPE_INT64: { > + uint64_t i64; > + memcpy(&i64, &src[sidx].i, sizeof(i64)); > + uint64_t tmp = MAX2(i64, 0); > + memcpy(&dst[didx].u, &tmp, sizeof(tmp)); > + break; > + } > + case GLSL_TYPE_FLOAT: { > + uint64_t tmp = src[sidx].f < 0.0f ? > + 0ull : (uint64_t) roundf(src[sidx].f);
lroundf()? _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev