DECL_RESOURCE_FUNC(XFB, gl_transform_feedback_buffer);
DECL_RESOURCE_FUNC(SUB, gl_subroutine_function);
+static GLenum
+mediump_to_highp_type(GLenum type)
+{
+ switch (type) {
+ case GL_FLOAT16_NV:
+ return GL_FLOAT;
+ case GL_FLOAT16_VEC2_NV:
+ return GL_FLOAT_VEC2;
+ case GL_FLOAT16_VEC3_NV:
+ return GL_FLOAT_VEC3;
+ case GL_FLOAT16_VEC4_NV:
+ return GL_FLOAT_VEC4;
+ case GL_FLOAT16_MAT2_AMD:
+ return GL_FLOAT_MAT2;
+ case GL_FLOAT16_MAT3_AMD:
+ return GL_FLOAT_MAT3;
+ case GL_FLOAT16_MAT4_AMD:
+ return GL_FLOAT_MAT4;
+ case GL_FLOAT16_MAT2x3_AMD:
+ return GL_FLOAT_MAT2x3;
+ case GL_FLOAT16_MAT2x4_AMD:
+ return GL_FLOAT_MAT2x4;
+ case GL_FLOAT16_MAT3x2_AMD:
+ return GL_FLOAT_MAT3x2;
+ case GL_FLOAT16_MAT3x4_AMD:
+ return GL_FLOAT_MAT3x4;
+ case GL_FLOAT16_MAT4x2_AMD:
+ return GL_FLOAT_MAT4x2;
+ case GL_FLOAT16_MAT4x3_AMD:
+ return GL_FLOAT_MAT4x3;
+ default:
+ return type;
+ }
+}
+
static void
bind_attrib_location(struct gl_context *ctx,
struct gl_shader_program *const shProg, GLuint index,
case GL_UNIFORM:
case GL_BUFFER_VARIABLE:
*val = RESOURCE_UNI(res)->type->gl_type;
+ *val = mediump_to_highp_type(*val);
return 1;
case GL_PROGRAM_INPUT:
case GL_PROGRAM_OUTPUT:
*val = RESOURCE_VAR(res)->type->gl_type;
+ *val = mediump_to_highp_type(*val);
return 1;
case GL_TRANSFORM_FEEDBACK_VARYING:
*val = RESOURCE_XFV(res)->Type;
+ *val = mediump_to_highp_type(*val);
return 1;
default:
goto invalid_operation;