summaryrefslogtreecommitdiff
path: root/src/mesa/main/version.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa/main/version.c')
-rw-r--r--src/mesa/main/version.c116
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