vc4: Introduce XML-based packet header generation like Intel's.
[mesa.git] / src / mesa / main / get.c
index 5f5e76a4c4e9bd262d2b8be9028868d63e906393..6ad107b22c4c84877104d17e4fd1feca51f8517d 100644 (file)
@@ -95,6 +95,10 @@ enum value_type {
    TYPE_INT_3,
    TYPE_INT_4,
    TYPE_INT_N,
+   TYPE_UINT,
+   TYPE_UINT_2,
+   TYPE_UINT_3,
+   TYPE_UINT_4,
    TYPE_INT64,
    TYPE_ENUM,
    TYPE_ENUM_2,
@@ -205,6 +209,7 @@ union value {
 #define CONTEXT_INT(field) CONTEXT_FIELD(field, TYPE_INT)
 #define CONTEXT_INT2(field) CONTEXT_FIELD(field, TYPE_INT_2)
 #define CONTEXT_INT64(field) CONTEXT_FIELD(field, TYPE_INT64)
+#define CONTEXT_UINT(field) CONTEXT_FIELD(field, TYPE_UINT)
 #define CONTEXT_ENUM(field) CONTEXT_FIELD(field, TYPE_ENUM)
 #define CONTEXT_ENUM2(field) CONTEXT_FIELD(field, TYPE_ENUM_2)
 #define CONTEXT_BOOL(field) CONTEXT_FIELD(field, TYPE_BOOLEAN)
@@ -436,6 +441,11 @@ static const int extra_KHR_robustness_or_GL[] = {
    EXTRA_END
 };
 
+static const int extra_INTEL_conservative_rasterization[] = {
+   EXT(INTEL_conservative_rasterization),
+   EXTRA_END
+};
+
 EXTRA_EXT(ARB_texture_cube_map);
 EXTRA_EXT(EXT_texture_array);
 EXTRA_EXT(NV_fog_distance);
@@ -472,7 +482,6 @@ EXTRA_EXT(ARB_texture_gather);
 EXTRA_EXT(ARB_shader_atomic_counters);
 EXTRA_EXT(ARB_draw_indirect);
 EXTRA_EXT(ARB_shader_image_load_store);
-EXTRA_EXT(ARB_viewport_array);
 EXTRA_EXT(ARB_query_buffer_object);
 EXTRA_EXT2(ARB_transform_feedback3, ARB_gpu_shader5);
 EXTRA_EXT(INTEL_performance_query);
@@ -481,7 +490,6 @@ EXTRA_EXT(ARB_clip_control);
 EXTRA_EXT(EXT_polygon_offset_clamp);
 EXTRA_EXT(ARB_framebuffer_no_attachments);
 EXTRA_EXT(ARB_tessellation_shader);
-EXTRA_EXT(ARB_shader_subroutine);
 EXTRA_EXT(ARB_shader_storage_buffer_object);
 EXTRA_EXT(ARB_indirect_parameters);
 EXTRA_EXT(ATI_meminfo);
@@ -492,6 +500,7 @@ EXTRA_EXT(KHR_blend_equation_advanced_coherent);
 EXTRA_EXT(OES_primitive_bounding_box);
 EXTRA_EXT(ARB_compute_variable_group_size);
 EXTRA_EXT(KHR_robustness);
+EXTRA_EXT(ARB_sparse_buffer);
 
 static const int
 extra_ARB_color_buffer_float_or_glcore[] = {
@@ -778,10 +787,10 @@ find_custom_value(struct gl_context *ctx, const struct value_desc *d, union valu
       break;
 
    case GL_IMPLEMENTATION_COLOR_READ_TYPE_OES:
-      v->value_int = _mesa_get_color_read_type(ctx);
+      v->value_int = _mesa_get_color_read_type(ctx, NULL, "glGetIntegerv");
       break;
    case GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES:
-      v->value_int = _mesa_get_color_read_format(ctx);
+      v->value_int = _mesa_get_color_read_format(ctx, NULL, "glGetIntegerv");
       break;
 
    case GL_CURRENT_MATRIX_STACK_DEPTH_ARB:
@@ -1453,13 +1462,17 @@ _mesa_GetBooleanv(GLenum pname, GLboolean *params)
       break;
 
    case TYPE_INT_4:
+   case TYPE_UINT_4:
       params[3] = INT_TO_BOOLEAN(((GLint *) p)[3]);
    case TYPE_INT_3:
+   case TYPE_UINT_3:
       params[2] = INT_TO_BOOLEAN(((GLint *) p)[2]);
    case TYPE_INT_2:
+   case TYPE_UINT_2:
    case TYPE_ENUM_2:
       params[1] = INT_TO_BOOLEAN(((GLint *) p)[1]);
    case TYPE_INT:
+   case TYPE_UINT:
    case TYPE_ENUM:
       params[0] = INT_TO_BOOLEAN(((GLint *) p)[0]);
       break;
@@ -1559,7 +1572,17 @@ _mesa_GetFloatv(GLenum pname, GLfloat *params)
 
    case TYPE_INT_N:
       for (i = 0; i < v.value_int_n.n; i++)
-        params[i] = INT_TO_FLOAT(v.value_int_n.ints[i]);
+        params[i] = (GLfloat) v.value_int_n.ints[i];
+      break;
+
+   case TYPE_UINT_4:
+      params[3] = (GLfloat) (((GLuint *) p)[3]);
+   case TYPE_UINT_3:
+      params[2] = (GLfloat) (((GLuint *) p)[2]);
+   case TYPE_UINT_2:
+      params[1] = (GLfloat) (((GLuint *) p)[1]);
+   case TYPE_UINT:
+      params[0] = (GLfloat) (((GLuint *) p)[0]);
       break;
 
    case TYPE_INT64:
@@ -1645,13 +1668,17 @@ _mesa_GetIntegerv(GLenum pname, GLint *params)
       break;
 
    case TYPE_INT_4:
+   case TYPE_UINT_4:
       params[3] = ((GLint *) p)[3];
    case TYPE_INT_3:
+   case TYPE_UINT_3:
       params[2] = ((GLint *) p)[2];
    case TYPE_INT_2:
+   case TYPE_UINT_2:
    case TYPE_ENUM_2:
       params[1] = ((GLint *) p)[1];
    case TYPE_INT:
+   case TYPE_UINT:
    case TYPE_ENUM:
       params[0] = ((GLint *) p)[0];
       break;
@@ -1760,6 +1787,16 @@ _mesa_GetInteger64v(GLenum pname, GLint64 *params)
         params[i] = INT_TO_BOOLEAN(v.value_int_n.ints[i]);
       break;
 
+   case TYPE_UINT_4:
+      params[3] = ((GLuint *) p)[3];
+   case TYPE_UINT_3:
+      params[2] = ((GLuint *) p)[2];
+   case TYPE_UINT_2:
+      params[1] = ((GLuint *) p)[1];
+   case TYPE_UINT:
+      params[0] = ((GLuint *) p)[0];
+      break;
+
    case TYPE_INT64:
       params[0] = ((GLint64 *) p)[0];
       break;
@@ -1853,6 +1890,16 @@ _mesa_GetDoublev(GLenum pname, GLdouble *params)
         params[i] = v.value_int_n.ints[i];
       break;
 
+   case TYPE_UINT_4:
+      params[3] = ((GLuint *) p)[3];
+   case TYPE_UINT_3:
+      params[2] = ((GLuint *) p)[2];
+   case TYPE_UINT_2:
+      params[1] = ((GLuint *) p)[1];
+   case TYPE_UINT:
+      params[0] = ((GLuint *) p)[0];
+      break;
+
    case TYPE_INT64:
       params[0] = (GLdouble) (((GLint64 *) p)[0]);
       break;
@@ -2329,9 +2376,11 @@ _mesa_GetBooleani_v( GLenum pname, GLuint index, GLboolean *params )
 
    switch (type) {
    case TYPE_INT:
+   case TYPE_UINT:
       params[0] = INT_TO_BOOLEAN(v.value_int);
       break;
    case TYPE_INT_4:
+   case TYPE_UINT_4:
       params[0] = INT_TO_BOOLEAN(v.value_int_4[0]);
       params[1] = INT_TO_BOOLEAN(v.value_int_4[1]);
       params[2] = INT_TO_BOOLEAN(v.value_int_4[2]);
@@ -2374,9 +2423,11 @@ _mesa_GetIntegeri_v( GLenum pname, GLuint index, GLint *params )
       break;
 
    case TYPE_INT:
+   case TYPE_UINT:
       params[0] = v.value_int;
       break;
    case TYPE_INT_4:
+   case TYPE_UINT_4:
       params[0] = v.value_int_4[0];
       params[1] = v.value_int_4[1];
       params[2] = v.value_int_4[2];
@@ -2407,6 +2458,15 @@ _mesa_GetInteger64i_v( GLenum pname, GLuint index, GLint64 *params )
       params[2] = v.value_int_4[2];
       params[3] = v.value_int_4[3];
       break;
+   case TYPE_UINT:
+      params[0] = (GLuint) v.value_int;
+      break;
+   case TYPE_UINT_4:
+      params[0] = (GLuint) v.value_int_4[0];
+      params[1] = (GLuint) v.value_int_4[1];
+      params[2] = (GLuint) v.value_int_4[2];
+      params[3] = (GLuint) v.value_int_4[3];
+      break;
    case TYPE_INT64:
       params[0] = v.value_int64;
       break;
@@ -2459,7 +2519,17 @@ _mesa_GetFloati_v(GLenum pname, GLuint index, GLfloat *params)
 
    case TYPE_INT_N:
       for (i = 0; i < v.value_int_n.n; i++)
-        params[i] = INT_TO_FLOAT(v.value_int_n.ints[i]);
+        params[i] = (GLfloat) v.value_int_n.ints[i];
+      break;
+
+   case TYPE_UINT_4:
+      params[3] = (GLfloat) ((GLuint) v.value_int_4[3]);
+   case TYPE_UINT_3:
+      params[2] = (GLfloat) ((GLuint) v.value_int_4[2]);
+   case TYPE_UINT_2:
+      params[1] = (GLfloat) ((GLuint) v.value_int_4[1]);
+   case TYPE_UINT:
+      params[0] = (GLfloat) ((GLuint) v.value_int_4[0]);
       break;
 
    case TYPE_INT64:
@@ -2531,7 +2601,17 @@ _mesa_GetDoublei_v(GLenum pname, GLuint index, GLdouble *params)
 
    case TYPE_INT_N:
       for (i = 0; i < v.value_int_n.n; i++)
-        params[i] = (GLdouble) INT_TO_FLOAT(v.value_int_n.ints[i]);
+        params[i] = (GLdouble) v.value_int_n.ints[i];
+      break;
+
+   case TYPE_UINT_4:
+      params[3] = (GLdouble) ((GLuint) v.value_int_4[3]);
+   case TYPE_UINT_3:
+      params[2] = (GLdouble) ((GLuint) v.value_int_4[2]);
+   case TYPE_UINT_2:
+      params[1] = (GLdouble) ((GLuint) v.value_int_4[1]);
+   case TYPE_UINT:
+      params[0] = (GLdouble) ((GLuint) v.value_int_4[0]);
       break;
 
    case TYPE_INT64:
@@ -2597,13 +2677,17 @@ _mesa_GetFixedv(GLenum pname, GLfixed *params)
       break;
 
    case TYPE_INT_4:
+   case TYPE_UINT_4:
       params[3] = INT_TO_FIXED(((GLint *) p)[3]);
    case TYPE_INT_3:
+   case TYPE_UINT_3:
       params[2] = INT_TO_FIXED(((GLint *) p)[2]);
    case TYPE_INT_2:
+   case TYPE_UINT_2:
    case TYPE_ENUM_2:
       params[1] = INT_TO_FIXED(((GLint *) p)[1]);
    case TYPE_INT:
+   case TYPE_UINT:
    case TYPE_ENUM:
       params[0] = INT_TO_FIXED(((GLint *) p)[0]);
       break;