glsl: Add basic ARB_gpu_shader_int64 types
[mesa.git] / src / mesa / program / ir_to_mesa.cpp
index 0089e80faa37d5c6e611e2646a9157d4b50b6e27..85e6e92a2d55d02a1e90a02b912823043dd615fd 100644 (file)
@@ -532,6 +532,12 @@ type_size(const struct glsl_type *type)
             return 1;
       }
       break;
+   case GLSL_TYPE_UINT64:
+   case GLSL_TYPE_INT64:
+      if (type->vector_elements > 2)
+         return 2;
+      else
+         return 1;
    case GLSL_TYPE_ARRAY:
       assert(type->length > 0);
       return type_size(type->fields.array) * type->length;
@@ -2522,11 +2528,19 @@ _mesa_associate_uniform_storage(struct gl_context *ctx,
         unsigned columns = 0;
         int dmul = 4 * sizeof(float);
         switch (storage->type->base_type) {
+         case GLSL_TYPE_UINT64:
+           if (storage->type->vector_elements > 2)
+               dmul *= 2;
+           /* fallthrough */
         case GLSL_TYPE_UINT:
            assert(ctx->Const.NativeIntegers);
            format = uniform_native;
            columns = 1;
            break;
+         case GLSL_TYPE_INT64:
+           if (storage->type->vector_elements > 2)
+               dmul *= 2;
+           /* fallthrough */
         case GLSL_TYPE_INT:
            format =
               (ctx->Const.NativeIntegers) ? uniform_native : uniform_int_float;
@@ -2917,9 +2931,8 @@ get_mesa_program(struct gl_context *ctx,
 
    do_set_program_inouts(shader->ir, prog, shader->Stage);
 
-   prog->SamplersUsed = shader->active_samplers;
    prog->ShadowSamplers = shader->shadow_samplers;
-   prog->ExternalSamplersUsed = gl_external_samplers(shader);
+   prog->ExternalSamplersUsed = gl_external_samplers(prog);
    _mesa_update_shader_textures_used(shader_program, prog);
 
    /* Set the gl_FragDepth layout. */