Re: [Mesa-dev] [PATCH 05/23] mesa: add support for 64-bit integer uniforms.
>> break; >> + case GLSL_TYPE_UINT64: >> + dst[didx].f = *(uint64_t *)[sidx].u; >> + break; >> + case GLSL_TYPE_INT64: >> + dst[didx].f = *(int64_t *)[sidx].i; >> + break; > > > Looks like some tabs slipped in there. Indeed this file is already a mess, probably should clean it up afterwards. Dave. ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
Re: [Mesa-dev] [PATCH 05/23] mesa: add support for 64-bit integer uniforms.
On 06/08/2016 06:48 PM, Dave Airlie wrote: From: Dave AirlieThis hooks up the API to the internals for 64-bit integer uniforms. Signed-off-by: Dave Airlie --- src/mesa/main/uniform_query.cpp | 60 +- src/mesa/main/uniforms.c| 170 +++- 2 files changed, 226 insertions(+), 4 deletions(-) diff --git a/src/mesa/main/uniform_query.cpp b/src/mesa/main/uniform_query.cpp index eea611b..169db46 100644 --- a/src/mesa/main/uniform_query.cpp +++ b/src/mesa/main/uniform_query.cpp @@ -332,7 +332,8 @@ _mesa_get_uniform(struct gl_context *ctx, GLuint program, GLint location, >storage[offset * elements * dmul]; assert(returnType == GLSL_TYPE_FLOAT || returnType == GLSL_TYPE_INT || - returnType == GLSL_TYPE_UINT || returnType == GLSL_TYPE_DOUBLE); + returnType == GLSL_TYPE_UINT || returnType == GLSL_TYPE_DOUBLE || + returnType == GLSL_TYPE_UINT64 || returnType == GLSL_TYPE_INT64); /* doubles have a different size than the other 3 types */ unsigned bytes = sizeof(src[0]) * elements * rmul; @@ -354,7 +355,11 @@ _mesa_get_uniform(struct gl_context *ctx, GLuint program, GLint location, (uni->type->base_type == GLSL_TYPE_INT || uni->type->base_type == GLSL_TYPE_UINT || uni->type->base_type == GLSL_TYPE_SAMPLER - || uni->type->base_type == GLSL_TYPE_IMAGE))) { + || uni->type->base_type == GLSL_TYPE_IMAGE)) + || ((returnType == GLSL_TYPE_UINT64 || + returnType == GLSL_TYPE_INT64 ) && + (uni->type->base_type == GLSL_TYPE_UINT64 || + uni->type->base_type == GLSL_TYPE_INT64))) { memcpy(paramsOut, src, bytes); } else { union gl_constant_value *const dst = @@ -384,6 +389,12 @@ _mesa_get_uniform(struct gl_context *ctx, GLuint program, GLint location, case GLSL_TYPE_DOUBLE: dst[didx].f = *(double *)[sidx].f; break; + case GLSL_TYPE_UINT64: + dst[didx].f = *(uint64_t *)[sidx].u; + break; + case GLSL_TYPE_INT64: + dst[didx].f = *(int64_t *)[sidx].i; + break; Looks like some tabs slipped in there. default: assert(!"Should not get here."); break; @@ -405,6 +416,12 @@ _mesa_get_uniform(struct gl_context *ctx, GLuint program, GLint location, case GLSL_TYPE_FLOAT: *(double *)[didx].f = (double) src[sidx].f; break; + case GLSL_TYPE_UINT64: + *(double *)[didx].f = *(uint64_t *)[sidx].u; + break; + case GLSL_TYPE_INT64: + *(double *)[didx].f = *(int64_t *)[sidx].i; + break; Here too, and other spots below. default: assert(!"Should not get here."); break; @@ -439,12 +456,41 @@ _mesa_get_uniform(struct gl_context *ctx, GLuint program, GLint location, case GLSL_TYPE_DOUBLE: dst[didx].i = IROUNDD(*(double *)[sidx].f); break; + case GLSL_TYPE_UINT64: + dst[didx].i = *(uint64_t *)[sidx].u; + break; + case GLSL_TYPE_INT64: + dst[didx].i = *(int64_t *)[sidx].i; + break; default: assert(!"Should not get here."); break; } break; +case GLSL_TYPE_INT64: +case GLSL_TYPE_UINT64: + switch (uni->type->base_type) { + case GLSL_TYPE_UINT: + *(int64_t *)[didx].u = (int64_t) src[sidx].u; + break; + case GLSL_TYPE_INT: + case GLSL_TYPE_SAMPLER: + case GLSL_TYPE_IMAGE: + *(int64_t *)[didx].u = (int64_t) src[sidx].i; + break; + case GLSL_TYPE_BOOL: + *(int64_t *)[didx].u = src[sidx].i ? 1.0f : 0.0f; + break; + case GLSL_TYPE_FLOAT: + *(int64_t *)[didx].u = (int64_t) src[sidx].f; + break; + default: + assert(!"Should not get here."); + break; + } + break; + break; default: assert(!"Should not get here."); break; @@ -482,6 +528,12 @@ log_uniform(const void *values, enum glsl_base_type basicType, case GLSL_TYPE_INT: printf("%d ", v[i].i); break; + case GLSL_TYPE_UINT64: +printf("%lu ", *(uint64_t* )[i * 2].u); +break; + case GLSL_TYPE_INT64: +printf("%ld ", *(int64_t* )[i * 2].u); +break;
[Mesa-dev] [PATCH 05/23] mesa: add support for 64-bit integer uniforms.
From: Dave AirlieThis hooks up the API to the internals for 64-bit integer uniforms. Signed-off-by: Dave Airlie --- src/mesa/main/uniform_query.cpp | 60 +- src/mesa/main/uniforms.c| 170 +++- 2 files changed, 226 insertions(+), 4 deletions(-) diff --git a/src/mesa/main/uniform_query.cpp b/src/mesa/main/uniform_query.cpp index eea611b..169db46 100644 --- a/src/mesa/main/uniform_query.cpp +++ b/src/mesa/main/uniform_query.cpp @@ -332,7 +332,8 @@ _mesa_get_uniform(struct gl_context *ctx, GLuint program, GLint location, >storage[offset * elements * dmul]; assert(returnType == GLSL_TYPE_FLOAT || returnType == GLSL_TYPE_INT || - returnType == GLSL_TYPE_UINT || returnType == GLSL_TYPE_DOUBLE); + returnType == GLSL_TYPE_UINT || returnType == GLSL_TYPE_DOUBLE || + returnType == GLSL_TYPE_UINT64 || returnType == GLSL_TYPE_INT64); /* doubles have a different size than the other 3 types */ unsigned bytes = sizeof(src[0]) * elements * rmul; @@ -354,7 +355,11 @@ _mesa_get_uniform(struct gl_context *ctx, GLuint program, GLint location, (uni->type->base_type == GLSL_TYPE_INT || uni->type->base_type == GLSL_TYPE_UINT || uni->type->base_type == GLSL_TYPE_SAMPLER - || uni->type->base_type == GLSL_TYPE_IMAGE))) { + || uni->type->base_type == GLSL_TYPE_IMAGE)) + || ((returnType == GLSL_TYPE_UINT64 || + returnType == GLSL_TYPE_INT64 ) && + (uni->type->base_type == GLSL_TYPE_UINT64 || + uni->type->base_type == GLSL_TYPE_INT64))) { memcpy(paramsOut, src, bytes); } else { union gl_constant_value *const dst = @@ -384,6 +389,12 @@ _mesa_get_uniform(struct gl_context *ctx, GLuint program, GLint location, case GLSL_TYPE_DOUBLE: dst[didx].f = *(double *)[sidx].f; break; + case GLSL_TYPE_UINT64: + dst[didx].f = *(uint64_t *)[sidx].u; + break; + case GLSL_TYPE_INT64: + dst[didx].f = *(int64_t *)[sidx].i; + break; default: assert(!"Should not get here."); break; @@ -405,6 +416,12 @@ _mesa_get_uniform(struct gl_context *ctx, GLuint program, GLint location, case GLSL_TYPE_FLOAT: *(double *)[didx].f = (double) src[sidx].f; break; + case GLSL_TYPE_UINT64: + *(double *)[didx].f = *(uint64_t *)[sidx].u; + break; + case GLSL_TYPE_INT64: + *(double *)[didx].f = *(int64_t *)[sidx].i; + break; default: assert(!"Should not get here."); break; @@ -439,12 +456,41 @@ _mesa_get_uniform(struct gl_context *ctx, GLuint program, GLint location, case GLSL_TYPE_DOUBLE: dst[didx].i = IROUNDD(*(double *)[sidx].f); break; + case GLSL_TYPE_UINT64: + dst[didx].i = *(uint64_t *)[sidx].u; + break; + case GLSL_TYPE_INT64: + dst[didx].i = *(int64_t *)[sidx].i; + break; default: assert(!"Should not get here."); break; } break; +case GLSL_TYPE_INT64: +case GLSL_TYPE_UINT64: + switch (uni->type->base_type) { + case GLSL_TYPE_UINT: + *(int64_t *)[didx].u = (int64_t) src[sidx].u; + break; + case GLSL_TYPE_INT: + case GLSL_TYPE_SAMPLER: + case GLSL_TYPE_IMAGE: + *(int64_t *)[didx].u = (int64_t) src[sidx].i; + break; + case GLSL_TYPE_BOOL: + *(int64_t *)[didx].u = src[sidx].i ? 1.0f : 0.0f; + break; + case GLSL_TYPE_FLOAT: + *(int64_t *)[didx].u = (int64_t) src[sidx].f; + break; + default: + assert(!"Should not get here."); + break; + } + break; + break; default: assert(!"Should not get here."); break; @@ -482,6 +528,12 @@ log_uniform(const void *values, enum glsl_base_type basicType, case GLSL_TYPE_INT: printf("%d ", v[i].i); break; + case GLSL_TYPE_UINT64: +printf("%lu ", *(uint64_t* )[i * 2].u); +break; + case GLSL_TYPE_INT64: +printf("%ld ", *(int64_t* )[i * 2].u); +break; case GLSL_TYPE_FLOAT: printf("%g ", v[i].f); break; @@ -633,6 +685,10 @@ glsl_type_name(enum glsl_base_type