diff options
Diffstat (limited to 'src/mesa/main/version.c')
-rw-r--r-- | src/mesa/main/version.c | 116 |
1 files changed, 54 insertions, 62 deletions
diff --git a/src/mesa/main/version.c b/src/mesa/main/version.c index 3b37b135184..d9811650a9e 100644 --- a/src/mesa/main/version.c +++ b/src/mesa/main/version.c @@ -34,7 +34,9 @@ #include "version.h" #include "git_sha1.h" -static simple_mtx_t override_lock = _SIMPLE_MTX_INITIALIZER_NP; +#include "state_tracker/st_context.h" + +static simple_mtx_t override_lock = SIMPLE_MTX_INITIALIZER; /** * Scans 'string' to see if it ends with 'ending'. @@ -134,8 +136,8 @@ create_version_string(struct gl_context *ctx, const char *prefix) "%s%u.%u%s Mesa " PACKAGE_VERSION MESA_GIT_SHA1, prefix, ctx->Version / 10, ctx->Version % 10, - (ctx->API == API_OPENGL_CORE) ? " (Core Profile)" : - (ctx->API == API_OPENGL_COMPAT && ctx->Version >= 32) ? + _mesa_is_desktop_gl_core(ctx) ? " (Core Profile)" : + (_mesa_is_desktop_gl_compat(ctx) && ctx->Version >= 32) ? " (Compatibility Profile)" : "" ); } @@ -249,32 +251,24 @@ compute_version(const struct gl_extensions *extensions, { GLuint major, minor, version; - const bool ver_1_3 = (extensions->ARB_texture_border_clamp && - extensions->ARB_texture_cube_map && - extensions->ARB_texture_env_combine && - extensions->ARB_texture_env_dot3); - const bool ver_1_4 = (ver_1_3 && - extensions->ARB_depth_texture && - extensions->ARB_shadow && - extensions->ARB_texture_env_crossbar && - extensions->EXT_blend_color && - extensions->EXT_blend_func_separate && - extensions->EXT_blend_minmax && - extensions->EXT_point_parameters); - const bool ver_1_5 = (ver_1_4 && - extensions->ARB_occlusion_query); + const bool ver_1_4 = (extensions->ARB_shadow); + const bool ver_1_5 = ver_1_4; const bool ver_2_0 = (ver_1_5 && - extensions->ARB_point_sprite && extensions->ARB_vertex_shader && extensions->ARB_fragment_shader && extensions->ARB_texture_non_power_of_two && extensions->EXT_blend_equation_separate && extensions->EXT_stencil_two_side); const bool ver_2_1 = (ver_2_0 && - extensions->EXT_pixel_buffer_object && extensions->EXT_texture_sRGB); + /* We lie about the minimum number of color attachments. Strictly, OpenGL + * 3.0 requires 8, whereas OpenGL ES requires 4. OpenGL ES 3.0 class + * hardware may only support 4 render targets. Advertise non-conformant + * OpenGL 3.0 anyway. Affects freedreno on a3xx + */ const bool ver_3_0 = (ver_2_1 && consts->GLSLVersion >= 130 && + consts->MaxColorAttachments >= 4 && (consts->MaxSamples >= 4 || consts->FakeSWMSAA) && (api == API_OPENGL_CORE || extensions->ARB_color_buffer_float) && @@ -317,7 +311,6 @@ compute_version(const struct gl_extensions *extensions, extensions->ARB_blend_func_extended && extensions->ARB_explicit_attrib_location && extensions->ARB_instanced_arrays && - extensions->ARB_occlusion_query2 && extensions->ARB_shader_bit_encoding && extensions->ARB_texture_rgb10_a2ui && extensions->ARB_timer_query && @@ -342,6 +335,9 @@ compute_version(const struct gl_extensions *extensions, consts->GLSLVersion >= 410 && consts->MaxTextureSize >= 16384 && consts->MaxRenderbufferSize >= 16384 && + consts->MaxCubeTextureLevels >= 15 && + consts->Max3DTextureLevels >= 12 && + consts->MaxArrayTextureLayers >= 2048 && extensions->ARB_ES2_compatibility && extensions->ARB_shader_precision && extensions->ARB_vertex_attrib_64bit && @@ -379,7 +375,6 @@ compute_version(const struct gl_extensions *extensions, consts->GLSLVersion >= 440 && consts->MaxVertexAttribStride >= 2048 && extensions->ARB_buffer_storage && - extensions->ARB_clear_texture && extensions->ARB_enhanced_layouts && extensions->ARB_query_buffer_object && extensions->ARB_texture_mirror_clamp_to_edge && @@ -399,7 +394,6 @@ compute_version(const struct gl_extensions *extensions, extensions->ARB_gl_spirv && extensions->ARB_spirv_extensions && extensions->ARB_indirect_parameters && - extensions->ARB_pipeline_statistics_query && extensions->ARB_polygon_offset_clamp && extensions->ARB_shader_atomic_counter_ops && extensions->ARB_shader_draw_parameters && @@ -467,13 +461,9 @@ compute_version(const struct gl_extensions *extensions, major = 1; minor = 4; } - else if (ver_1_3) { - major = 1; - minor = 3; - } else { major = 1; - minor = 2; + minor = 3; } version = major * 10 + minor; @@ -485,34 +475,11 @@ compute_version(const struct gl_extensions *extensions, } static GLuint -compute_version_es1(const struct gl_extensions *extensions) -{ - /* OpenGL ES 1.0 is derived from OpenGL 1.3 */ - const bool ver_1_0 = (extensions->ARB_texture_env_combine && - extensions->ARB_texture_env_dot3); - /* OpenGL ES 1.1 is derived from OpenGL 1.5 */ - const bool ver_1_1 = (ver_1_0 && - extensions->EXT_point_parameters); - - if (ver_1_1) { - return 11; - } else if (ver_1_0) { - return 10; - } else { - return 0; - } -} - -static GLuint compute_version_es2(const struct gl_extensions *extensions, const struct gl_constants *consts) { /* OpenGL ES 2.0 is derived from OpenGL 2.0 */ - const bool ver_2_0 = (extensions->ARB_texture_cube_map && - extensions->EXT_blend_color && - extensions->EXT_blend_func_separate && - extensions->EXT_blend_minmax && - extensions->ARB_vertex_shader && + const bool ver_2_0 = (extensions->ARB_vertex_shader && extensions->ARB_fragment_shader && extensions->ARB_texture_non_power_of_two && extensions->EXT_blend_equation_separate); @@ -534,12 +501,14 @@ compute_version_es2(const struct gl_extensions *extensions, extensions->EXT_texture_sRGB && extensions->EXT_transform_feedback && extensions->ARB_draw_instanced && + extensions->ARB_instanced_arrays && extensions->ARB_uniform_buffer_object && extensions->EXT_texture_snorm && (extensions->NV_primitive_restart || consts->PrimitiveRestartFixedIndex) && extensions->OES_depth_texture_cube_map && - extensions->EXT_texture_type_2_10_10_10_REV); + extensions->EXT_texture_type_2_10_10_10_REV && + consts->MaxColorAttachments >= 4); const bool es31_compute_shader = consts->MaxComputeWorkGroupInvocations >= 128 && consts->Program[MESA_SHADER_COMPUTE].MaxShaderStorageBlocks && @@ -566,7 +535,7 @@ compute_version_es2(const struct gl_extensions *extensions, extensions->ARB_shader_image_load_store && extensions->ARB_shader_image_size && extensions->ARB_shader_storage_buffer_object && - + extensions->EXT_color_buffer_float && extensions->EXT_draw_buffers2 && extensions->KHR_blend_equation_advanced && extensions->KHR_robustness && @@ -578,7 +547,6 @@ compute_version_es2(const struct gl_extensions *extensions, extensions->OES_primitive_bounding_box && extensions->OES_sample_variables && extensions->ARB_tessellation_shader && - extensions->ARB_texture_border_clamp && extensions->OES_texture_buffer && extensions->OES_texture_cube_map_array && extensions->ARB_texture_stencil8); @@ -611,7 +579,7 @@ _mesa_get_version(const struct gl_extensions *extensions, case API_OPENGL_CORE: return compute_version(extensions, consts, api); case API_OPENGLES: - return compute_version_es1(extensions); + return 11; case API_OPENGLES2: return compute_version_es2(extensions, consts); } @@ -682,7 +650,7 @@ _mesa_compute_version(struct gl_context *ctx) } done: - if (ctx->API == API_OPENGL_COMPAT && ctx->Version >= 31) + if (_mesa_is_desktop_gl_compat(ctx) && ctx->Version >= 31) ctx->Extensions.ARB_compatibility = GL_TRUE; /* Precompute valid primitive types for faster draw time validation. */ @@ -695,7 +663,7 @@ done: (1 << GL_TRIANGLE_STRIP) | (1 << GL_TRIANGLE_FAN); - if (ctx->API == API_OPENGL_COMPAT) { + if (_mesa_is_desktop_gl_compat(ctx)) { ctx->SupportedPrimMask |= (1 << GL_QUADS) | (1 << GL_QUAD_STRIP) | (1 << GL_POLYGON); @@ -711,6 +679,16 @@ done: if (_mesa_has_tessellation(ctx)) ctx->SupportedPrimMask |= 1 << GL_PATCHES; + /* Appendix F.2 of the OpenGL ES 3.0 spec says: + * + * "OpenGL ES 3.0 requires that all cube map filtering be + * seamless. OpenGL ES 2.0 specified that a single cube map face be + * selected and used for filtering." + * + * Now that we know our version, enable seamless filtering for GLES3 only. + */ + ctx->Texture.CubeMapSeamless = _mesa_is_gles3(ctx); + /* First time initialization. */ _mesa_update_valid_to_render_state(ctx); } @@ -719,13 +697,28 @@ done: void _mesa_get_driver_uuid(struct gl_context *ctx, GLint *uuid) { - ctx->Driver.GetDriverUuid(ctx, (char*) uuid); + struct pipe_screen *screen = ctx->pipe->screen; + assert(GL_UUID_SIZE_EXT >= PIPE_UUID_SIZE); + memset(uuid, 0, GL_UUID_SIZE_EXT); + screen->get_driver_uuid(screen, (char *)uuid); } void _mesa_get_device_uuid(struct gl_context *ctx, GLint *uuid) { - ctx->Driver.GetDeviceUuid(ctx, (char*) uuid); + struct pipe_screen *screen = ctx->pipe->screen; + assert(GL_UUID_SIZE_EXT >= PIPE_UUID_SIZE); + memset(uuid, 0, GL_UUID_SIZE_EXT); + screen->get_device_uuid(screen, (char *)uuid); +} + +void +_mesa_get_device_luid(struct gl_context *ctx, GLint *luid) +{ + struct pipe_screen *screen = ctx->pipe->screen; + assert(GL_LUID_SIZE_EXT >= PIPE_LUID_SIZE); + memset(luid, 0, GL_UUID_SIZE_EXT); + screen->get_device_luid(screen, (char *)luid); } /** @@ -777,14 +770,13 @@ _mesa_get_shading_language_version(const struct gl_context *ctx, GLSL_VERSION(""); /* GLSL es */ - if ((ctx->API == API_OPENGLES2 && ctx->Version >= 32) || - ctx->Extensions.ARB_ES3_2_compatibility) + if (_mesa_is_gles32(ctx) || ctx->Extensions.ARB_ES3_2_compatibility) GLSL_VERSION("320 es"); if (_mesa_is_gles31(ctx) || ctx->Extensions.ARB_ES3_1_compatibility) GLSL_VERSION("310 es"); if (_mesa_is_gles3(ctx) || ctx->Extensions.ARB_ES3_compatibility) GLSL_VERSION("300 es"); - if (ctx->API == API_OPENGLES2 || ctx->Extensions.ARB_ES2_compatibility) + if (_mesa_is_gles2(ctx) || ctx->Extensions.ARB_ES2_compatibility) GLSL_VERSION("100"); #undef GLSL_VERSION |