syntax = "proto2";

package androidgamesdk_deviceinfo;

option java_package = "com.google.androidgamesdk";
option java_outer_classname = "DeviceInfoProto";

message Info {
  message CpuCore {
    optional int64 freq_max = 1;
  }
  message Gl {
    optional string renderer                    = 1;
    optional string vendor                      = 2;
    optional string version                     = 3;
    optional int32 version_major                = 4;
    optional int32 version_minor                = 5;
    optional string shading_language_version    = 6;

    repeated string extension                   = 7;

    // gles min: 2.0
    optional float GL_ALIASED_LINE_WIDTH_RANGE          = 2001;
    optional float GL_ALIASED_POINT_SIZE_RANGE          = 2002;
    optional int32 GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS  = 2003;
    optional int32 GL_MAX_CUBE_MAP_TEXTURE_SIZE         = 2005;
    optional int32 GL_MAX_FRAGMENT_UNIFORM_VECTORS      = 2006;
    optional int32 GL_MAX_RENDERBUFFER_SIZE             = 2007;
    optional int32 GL_MAX_TEXTURE_IMAGE_UNITS           = 2008;
    optional int32 GL_MAX_TEXTURE_SIZE                  = 2009;
    optional int32 GL_MAX_VARYING_VECTORS               = 2010;
    optional int32 GL_MAX_VERTEX_ATTRIBS                = 2011;
    optional int32 GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS    = 2012;
    optional int32 GL_MAX_VERTEX_UNIFORM_VECTORS        = 2013;
    optional int32 GL_MAX_VIEWPORT_DIMS                 = 2014;
    optional bool  GL_SHADER_COMPILER                   = 2015;
    optional int32 GL_SUBPIXEL_BITS                     = 2016;

    optional int32 GL_NUM_COMPRESSED_TEXTURE_FORMATS    = 2021;
    repeated int32 GL_COMPRESSED_TEXTURE_FORMATS        = 2022;
    optional int32 GL_NUM_SHADER_BINARY_FORMATS         = 2023;
    repeated int32 GL_SHADER_BINARY_FORMATS             = 2024;

    // glGetShaderPrecisionFormat
    optional int32 SPF_VERTEX_FLOAT_LOW_RANGE           = 2031;
    optional int32 SPF_VERTEX_FLOAT_LOW_PREC            = 2032;
    optional int32 SPF_VERTEX_FLOAT_MED_RANGE           = 2033;
    optional int32 SPF_VERTEX_FLOAT_MED_PREC            = 2034;
    optional int32 SPF_VERTEX_FLOAT_HIG_RANGE           = 2035;
    optional int32 SPF_VERTEX_FLOAT_HIG_PREC            = 2036;
    optional int32 SPF_VERTEX_INT_LOW_RANGE             = 2037;
    optional int32 SPF_VERTEX_INT_LOW_PREC              = 2038;
    optional int32 SPF_VERTEX_INT_MED_RANGE             = 2039;
    optional int32 SPF_VERTEX_INT_MED_PREC              = 2040;
    optional int32 SPF_VERTEX_INT_HIG_RANGE             = 2041;
    optional int32 SPF_VERTEX_INT_HIG_PREC              = 2042;
    optional int32 SPF_FRAGMENT_FLOAT_LOW_RANGE         = 2043;
    optional int32 SPF_FRAGMENT_FLOAT_LOW_PREC          = 2044;
    optional int32 SPF_FRAGMENT_FLOAT_MED_RANGE         = 2045;
    optional int32 SPF_FRAGMENT_FLOAT_MED_PREC          = 2046;
    optional int32 SPF_FRAGMENT_FLOAT_HIG_RANGE         = 2047;
    optional int32 SPF_FRAGMENT_FLOAT_HIG_PREC          = 2048;
    optional int32 SPF_FRAGMENT_INT_LOW_RANGE           = 2049;
    optional int32 SPF_FRAGMENT_INT_LOW_PREC            = 2050;
    optional int32 SPF_FRAGMENT_INT_MED_RANGE           = 2051;
    optional int32 SPF_FRAGMENT_INT_MED_PREC            = 2052;
    optional int32 SPF_FRAGMENT_INT_HIG_RANGE           = 2053;
    optional int32 SPF_FRAGMENT_INT_HIG_PREC            = 2054;

    // gles min: 3.0
    optional int32 GL_MAX_3D_TEXTURE_SIZE                           = 3001;
    optional int32 GL_MAX_ARRAY_TEXTURE_LAYERS                      = 3002;
    optional int32 GL_MAX_COLOR_ATTACHMENTS                         = 3003;
    optional int64 GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS      = 3004;
    optional int32 GL_MAX_COMBINED_UNIFORM_BLOCKS                   = 3005;
    optional int64 GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS        = 3006;
    optional int32 GL_MAX_DRAW_BUFFERS                              = 3007;
    optional int32 GL_MAX_ELEMENTS_INDICES                          = 3008;
    optional int32 GL_MAX_ELEMENTS_VERTICES                         = 3009;
    optional int64 GL_MAX_ELEMENT_INDEX                             = 3010;
    optional int32 GL_MAX_FRAGMENT_INPUT_COMPONENTS                 = 3011;
    optional int32 GL_MAX_FRAGMENT_UNIFORM_BLOCKS                   = 3012;
    optional int32 GL_MAX_FRAGMENT_UNIFORM_COMPONENTS               = 3013;
    optional int32 GL_MAX_PROGRAM_TEXEL_OFFSET                      = 3014;
    optional int64 GL_MAX_SERVER_WAIT_TIMEOUT                       = 3015;
    optional float GL_MAX_TEXTURE_LOD_BIAS                          = 3016;
    optional int32 GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = 3017;
    optional int32 GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS       = 3018;
    optional int32 GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS    = 3019;
    optional int64 GL_MAX_UNIFORM_BLOCK_SIZE                        = 3020;
    optional int32 GL_MAX_UNIFORM_BUFFER_BINDINGS                   = 3021;
    optional int32 GL_MAX_VARYING_COMPONENTS                        = 3022;
    optional int32 GL_MAX_VERTEX_OUTPUT_COMPONENTS                  = 3023;
    optional int32 GL_MAX_VERTEX_UNIFORM_BLOCKS                     = 3024;
    optional int32 GL_MAX_VERTEX_UNIFORM_COMPONENTS                 = 3025;
    optional int32 GL_MIN_PROGRAM_TEXEL_OFFSET                      = 3026;
    optional int32 GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT               = 3027;
    optional int32 GL_MAX_SAMPLES                                   = 3028;

    optional int32 GL_NUM_PROGRAM_BINARY_FORMATS                    = 3031;
    repeated int32 GL_PROGRAM_BINARY_FORMATS                        = 3032;

    // gles min: 3.1
    optional int32 GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS        = 3101;
    optional int32 GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE            = 3102;
    optional int32 GL_MAX_COLOR_TEXTURE_SAMPLES                 = 3103;
    optional int32 GL_MAX_COMBINED_ATOMIC_COUNTERS              = 3104;
    optional int32 GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS       = 3105;
    optional int32 GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS   = 3106;
    optional int32 GL_MAX_COMBINED_IMAGE_UNIFORMS               = 3107;
    optional int32 GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES      = 3108;
    optional int32 GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS        = 3109;
    optional int32 GL_MAX_COMPUTE_ATOMIC_COUNTERS               = 3110;
    optional int32 GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS        = 3111;
    optional int32 GL_MAX_COMPUTE_IMAGE_UNIFORMS                = 3112;
    optional int32 GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS         = 3113;
    optional int32 GL_MAX_COMPUTE_SHARED_MEMORY_SIZE            = 3114;
    optional int32 GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS           = 3115;
    optional int32 GL_MAX_COMPUTE_UNIFORM_BLOCKS                = 3116;
    optional int32 GL_MAX_COMPUTE_UNIFORM_COMPONENTS            = 3117;
    optional int32 GL_MAX_COMPUTE_WORK_GROUP_COUNT_0            = 3118;
    optional int32 GL_MAX_COMPUTE_WORK_GROUP_COUNT_1            = 3119;
    optional int32 GL_MAX_COMPUTE_WORK_GROUP_COUNT_2            = 3120;
    optional int32 GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS        = 3121;
    optional int32 GL_MAX_COMPUTE_WORK_GROUP_SIZE_0             = 3122;
    optional int32 GL_MAX_COMPUTE_WORK_GROUP_SIZE_1             = 3123;
    optional int32 GL_MAX_COMPUTE_WORK_GROUP_SIZE_2             = 3124;
    optional int32 GL_MAX_DEPTH_TEXTURE_SAMPLES                 = 3125;
    optional int32 GL_MAX_FRAGMENT_ATOMIC_COUNTERS              = 3126;
    optional int32 GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS       = 3127;
    optional int32 GL_MAX_FRAGMENT_IMAGE_UNIFORMS               = 3128;
    optional int32 GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS        = 3129;
    optional int32 GL_MAX_FRAMEBUFFER_HEIGHT                    = 3130;
    optional int32 GL_MAX_FRAMEBUFFER_SAMPLES                   = 3131;
    optional int32 GL_MAX_FRAMEBUFFER_WIDTH                     = 3132;
    optional int32 GL_MAX_IMAGE_UNITS                           = 3133;
    optional int32 GL_MAX_INTEGER_SAMPLES                       = 3134;
    optional int32 GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET         = 3135;
    optional int32 GL_MAX_SAMPLE_MASK_WORDS                     = 3136;
    optional int64 GL_MAX_SHADER_STORAGE_BLOCK_SIZE             = 3137;
    optional int32 GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS        = 3138;
    optional int32 GL_MAX_UNIFORM_LOCATIONS                     = 3139;
    optional int32 GL_MAX_VERTEX_ATOMIC_COUNTERS                = 3140;
    optional int32 GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS         = 3141;
    optional int32 GL_MAX_VERTEX_ATTRIB_BINDINGS                = 3142;
    optional int32 GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET         = 3143;
    optional int32 GL_MAX_VERTEX_ATTRIB_STRIDE                  = 3144;
    optional int32 GL_MAX_VERTEX_IMAGE_UNIFORMS                 = 3145;
    optional int32 GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS          = 3146;
    optional int32 GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET         = 3147;
    optional int32 GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT    = 3148;

    // gles min: 3.2
    optional int32 GL_CONTEXT_FLAGS                                     = 3201;
    optional int32 GL_FRAGMENT_INTERPOLATION_OFFSET_BITS                = 3202;
    optional int32 GL_LAYER_PROVOKING_VERTEX                            = 3203;
    optional int32 GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS          = 3204;
    optional int32 GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS      = 3205;
    optional int32 GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS   = 3206;
    optional int32 GL_MAX_DEBUG_GROUP_STACK_DEPTH                       = 3207;
    optional int32 GL_MAX_DEBUG_LOGGED_MESSAGES                         = 3208;
    optional int32 GL_MAX_DEBUG_MESSAGE_LENGTH                          = 3209;
    optional float GL_MAX_FRAGMENT_INTERPOLATION_OFFSET                 = 3210;
    optional int32 GL_MAX_FRAMEBUFFER_LAYERS                            = 3211;
    optional int32 GL_MAX_GEOMETRY_ATOMIC_COUNTERS                      = 3212;
    optional int32 GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS               = 3213;
    optional int32 GL_MAX_GEOMETRY_IMAGE_UNIFORMS                       = 3214;
    optional int32 GL_MAX_GEOMETRY_INPUT_COMPONENTS                     = 3215;
    optional int32 GL_MAX_GEOMETRY_OUTPUT_COMPONENTS                    = 3216;
    optional int32 GL_MAX_GEOMETRY_OUTPUT_VERTICES                      = 3217;
    optional int32 GL_MAX_GEOMETRY_SHADER_INVOCATIONS                   = 3218;
    optional int32 GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS                = 3219;
    optional int32 GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS                  = 3220;
    optional int32 GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS              = 3221;
    optional int32 GL_MAX_GEOMETRY_UNIFORM_BLOCKS                       = 3222;
    optional int32 GL_MAX_GEOMETRY_UNIFORM_COMPONENTS                   = 3223;
    optional int32 GL_MAX_LABEL_LENGTH                                  = 3224;
    optional int32 GL_MAX_PATCH_VERTICES                                = 3225;
    optional int32 GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS                  = 3226;
    optional int32 GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS           = 3227;
    optional int32 GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS                   = 3228;
    optional int32 GL_MAX_TESS_CONTROL_INPUT_COMPONENTS                 = 3229;
    optional int32 GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS                = 3230;
    optional int32 GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS            = 3231;
    optional int32 GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS              = 3232;
    optional int32 GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS          = 3233;
    optional int32 GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS                   = 3234;
    optional int32 GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS               = 3235;
    optional int32 GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS               = 3236;
    optional int32 GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS        = 3237;
    optional int32 GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS                = 3238;
    optional int32 GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS              = 3239;
    optional int32 GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS             = 3240;
    optional int32 GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS         = 3241;
    optional int32 GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS           = 3242;
    optional int32 GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS                = 3243;
    optional int32 GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS            = 3244;
    optional int32 GL_MAX_TESS_GEN_LEVEL                                = 3245;
    optional int32 GL_MAX_TESS_PATCH_COMPONENTS                         = 3246;
    optional int32 GL_MAX_TEXTURE_BUFFER_SIZE                           = 3247;
    optional float GL_MIN_FRAGMENT_INTERPOLATION_OFFSET                 = 3248;
    optional float GL_MULTISAMPLE_LINE_WIDTH_GRANULARITY                = 3249;
    optional float GL_MULTISAMPLE_LINE_WIDTH_RANGE                      = 3250;
    optional bool GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED            = 3251;
    optional int32 GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT                   = 3252;
    optional int32 GL_RESET_NOTIFICATION_STRATEGY                       = 3254;
  }

  optional int32 version = 1;

  optional int32 cpu_max_index  = 11;
  repeated CpuCore cpu_core     = 12;
  optional string cpu_present   = 13;
  optional string cpu_possible  = 14;
  repeated string cpu_extension = 15;
  repeated string hardware      = 16;

  optional string ro_build_version_sdk = 21;
  optional string ro_chipname          = 22;
  optional string ro_board_platform    = 23;
  optional string ro_product_board     = 24;
  optional string ro_mediatek_platform = 25;
  optional string ro_arch              = 26;
  optional string ro_build_fingerprint = 27;

  optional Gl gl = 31;
}

message Errors {
  optional string hardware     = 1;
  optional string features     = 2;
  repeated string system_props = 3;
  optional string egl          = 4;
  repeated string gl           = 5;
}

message InfoWithErrors {
  optional Info info      = 1;
  optional Errors errors  = 2;
}