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:
Iago Toral Quiroga 2017-05-18 11:43:55 +02:00
parent cc972c2845
commit c333082483
1 changed files with 14 additions and 0 deletions

View File

@ -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;