Re: [Mesa-dev] [PATCH 05/23] mesa: add support for 64-bit integer uniforms.

2016-06-09 Thread Dave Airlie
>>   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.

2016-06-09 Thread Brian Paul

On 06/08/2016 06:48 PM, Dave Airlie wrote:

From: Dave Airlie 

This 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.

2016-06-08 Thread Dave Airlie
From: Dave Airlie 

This 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