mesa/main: Add conversion from double to uint64/int64 in GetUniform*i64v()
v2: - need unsigned rounding for double->uint64 conversion (Nicolai) - use round() instead of IROUND() macros (Iago) Reviewed-by: Matt Turner <mattst88@gmail.com>
This commit is contained in:
parent
cc972c2845
commit
c333082483
|
@ -580,6 +580,13 @@ _mesa_get_uniform(struct gl_context *ctx, GLuint program, GLint location,
|
|||
memcpy(&dst[didx].u, &tmp, sizeof(tmp));
|
||||
break;
|
||||
}
|
||||
case GLSL_TYPE_DOUBLE: {
|
||||
double d;
|
||||
memcpy(&d, &src[sidx].f, sizeof(d));
|
||||
int64_t tmp = (int64_t) round(d);
|
||||
memcpy(&dst[didx].u, &tmp, sizeof(tmp));
|
||||
break;
|
||||
}
|
||||
default:
|
||||
assert(!"Should not get here.");
|
||||
break;
|
||||
|
@ -618,6 +625,13 @@ _mesa_get_uniform(struct gl_context *ctx, GLuint program, GLint location,
|
|||
memcpy(&dst[didx].u, &tmp, sizeof(tmp));
|
||||
break;
|
||||
}
|
||||
case GLSL_TYPE_DOUBLE: {
|
||||
double d;
|
||||
memcpy(&d, &src[sidx].f, sizeof(d));
|
||||
uint64_t tmp = (d < 0.0) ? 0ull : (uint64_t) round(d);
|
||||
memcpy(&dst[didx].u, &tmp, sizeof(tmp));
|
||||
break;
|
||||
}
|
||||
default:
|
||||
assert(!"Should not get here.");
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue