X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fstate_tracker%2Fst_extensions.c;h=887700568300abdd08090877e28127d170c057d8;hb=9785ae0973cc206afc36dbc7d5b9553f92d06b47;hp=34e0329be2fd08ae42baca2d9d9a7ca9a037c863;hpb=a21df965075f6fa1bf27039490ad65b9f78548e6;p=mesa.git diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c index 34e0329be2f..88770056830 100644 --- a/src/mesa/state_tracker/st_extensions.c +++ b/src/mesa/state_tracker/st_extensions.c @@ -222,6 +222,7 @@ void st_init_limits(struct st_context *st) options->MaxUnrollIterations = MIN2(screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_INSTRUCTIONS), 65536); else options->MaxUnrollIterations = 255; /* SM3 limit */ + options->LowerClipDistance = true; } /* PIPE_SHADER_CAP_MAX_INPUTS for the FS specifies the maximum number @@ -235,8 +236,9 @@ void st_init_limits(struct st_context *st) c->UniformBooleanTrue = ~0; - c->MaxTransformFeedbackSeparateAttribs = + c->MaxTransformFeedbackBuffers = screen->get_param(screen, PIPE_CAP_MAX_STREAM_OUTPUT_BUFFERS); + c->MaxTransformFeedbackBuffers = MIN2(c->MaxTransformFeedbackBuffers, MAX_FEEDBACK_BUFFERS); c->MaxTransformFeedbackSeparateComponents = screen->get_param(screen, PIPE_CAP_MAX_STREAM_OUTPUT_SEPARATE_COMPONENTS); c->MaxTransformFeedbackInterleavedComponents = @@ -296,7 +298,8 @@ static void init_format_extensions(struct st_context *st, { struct pipe_screen *screen = st->pipe->screen; GLboolean *extensions = (GLboolean *) &st->ctx->Extensions; - int i, j; + unsigned i; + int j; int num_formats = Elements(mapping->format); int num_ext = Elements(mapping->extension_offset); @@ -337,6 +340,7 @@ void st_init_extensions(struct st_context *st) GLboolean *extensions = (GLboolean *) &ctx->Extensions; static const struct st_extension_cap_mapping cap_mapping[] = { + { o(ARB_base_instance), PIPE_CAP_START_INSTANCE }, { o(ARB_depth_clamp), PIPE_CAP_DEPTH_CLIP_DISABLE }, { o(ARB_depth_texture), PIPE_CAP_TEXTURE_SHADOW_MAP }, { o(ARB_draw_buffers_blend), PIPE_CAP_INDEP_BLEND_FUNC }, @@ -352,6 +356,7 @@ void st_init_extensions(struct st_context *st) { o(ARB_shadow), PIPE_CAP_TEXTURE_SHADOW_MAP }, { o(ARB_texture_non_power_of_two), PIPE_CAP_NPOT_TEXTURES }, { o(ARB_transform_feedback2), PIPE_CAP_STREAM_OUTPUT_PAUSE_RESUME }, + { o(ARB_transform_feedback3), PIPE_CAP_STREAM_OUTPUT_PAUSE_RESUME }, { o(EXT_blend_equation_separate), PIPE_CAP_BLEND_EQUATION_SEPARATE }, { o(EXT_draw_buffers2), PIPE_CAP_INDEP_BLEND_ENABLE }, @@ -372,6 +377,8 @@ void st_init_extensions(struct st_context *st) /* GL_NV_point_sprite is not supported by gallium because we don't * support the GL_POINT_SPRITE_R_MODE_NV option. */ { o(MESA_texture_array), PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS }, + + { o(OES_standard_derivatives), PIPE_CAP_SM3 } }; /* Required: render target and sampler support */ @@ -459,12 +466,6 @@ void st_init_extensions(struct st_context *st) /* Required: vertex fetch support. */ static const struct st_extension_format_mapping vertex_mapping[] = { - { { o(ARB_ES2_compatibility) }, - { PIPE_FORMAT_R32G32B32A32_FIXED } }, - - { { o(ARB_half_float_vertex) }, - { PIPE_FORMAT_R16G16B16A16_FLOAT } }, - { { o(ARB_vertex_type_2_10_10_10_rev) }, { PIPE_FORMAT_R10G10B10A2_UNORM, PIPE_FORMAT_B10G10R10A2_UNORM, @@ -479,15 +480,15 @@ void st_init_extensions(struct st_context *st) /* * Extensions that are supported by all Gallium drivers: */ - ctx->Extensions.ARB_copy_buffer = GL_TRUE; + ctx->Extensions.ARB_ES2_compatibility = GL_TRUE; ctx->Extensions.ARB_draw_elements_base_vertex = GL_TRUE; ctx->Extensions.ARB_explicit_attrib_location = GL_TRUE; ctx->Extensions.ARB_fragment_coord_conventions = GL_TRUE; ctx->Extensions.ARB_fragment_program = GL_TRUE; ctx->Extensions.ARB_fragment_shader = GL_TRUE; ctx->Extensions.ARB_half_float_pixel = GL_TRUE; + ctx->Extensions.ARB_half_float_vertex = GL_TRUE; ctx->Extensions.ARB_map_buffer_range = GL_TRUE; - ctx->Extensions.ARB_sampler_objects = GL_TRUE; ctx->Extensions.ARB_shader_objects = GL_TRUE; ctx->Extensions.ARB_shading_language_100 = GL_TRUE; ctx->Extensions.ARB_texture_border_clamp = GL_TRUE; /* XXX temp */ @@ -496,10 +497,8 @@ void st_init_extensions(struct st_context *st) ctx->Extensions.ARB_texture_env_crossbar = GL_TRUE; ctx->Extensions.ARB_texture_env_dot3 = GL_TRUE; ctx->Extensions.ARB_texture_storage = GL_TRUE; - ctx->Extensions.ARB_vertex_array_object = GL_TRUE; ctx->Extensions.ARB_vertex_program = GL_TRUE; ctx->Extensions.ARB_vertex_shader = GL_TRUE; - ctx->Extensions.ARB_window_pos = GL_TRUE; ctx->Extensions.EXT_blend_color = GL_TRUE; ctx->Extensions.EXT_blend_func_separate = GL_TRUE; @@ -517,31 +516,19 @@ void st_init_extensions(struct st_context *st) ctx->Extensions.EXT_texture_env_dot3 = GL_TRUE; ctx->Extensions.EXT_vertex_array_bgra = GL_TRUE; - ctx->Extensions.APPLE_vertex_array_object = GL_TRUE; - ctx->Extensions.ATI_texture_env_combine3 = GL_TRUE; ctx->Extensions.MESA_pack_invert = GL_TRUE; ctx->Extensions.NV_blend_square = GL_TRUE; ctx->Extensions.NV_fog_distance = GL_TRUE; - ctx->Extensions.NV_texgen_reflection = GL_TRUE; ctx->Extensions.NV_texture_env_combine4 = GL_TRUE; ctx->Extensions.NV_texture_rectangle = GL_TRUE; -#if 0 - /* possibly could support the following two */ - ctx->Extensions.NV_vertex_program = GL_TRUE; - ctx->Extensions.NV_vertex_program1_1 = GL_TRUE; -#endif -#if FEATURE_OES_EGL_image ctx->Extensions.OES_EGL_image = GL_TRUE; if (ctx->API != API_OPENGL) ctx->Extensions.OES_EGL_image_external = GL_TRUE; -#endif -#if FEATURE_OES_draw_texture ctx->Extensions.OES_draw_texture = GL_TRUE; -#endif /* Expose the extensions which directly correspond to gallium caps. */ for (i = 0; i < Elements(cap_mapping); i++) { @@ -579,6 +566,7 @@ void st_init_extensions(struct st_context *st) /* Extensions that only depend on GLSL 1.3. */ ctx->Extensions.ARB_conservative_depth = GL_TRUE; + ctx->Extensions.ARB_shader_bit_encoding = GL_TRUE; } else { /* Optional integer support for GLSL 1.2. */ if (screen->get_shader_param(screen, PIPE_SHADER_VERTEX, @@ -605,7 +593,7 @@ void st_init_extensions(struct st_context *st) ctx->Extensions.NV_primitive_restart = GL_TRUE; if (!screen->get_param(screen, PIPE_CAP_PRIMITIVE_RESTART)) { - st->sw_primitive_restart = GL_TRUE; + ctx->Const.PrimitiveRestartInSoftware = GL_TRUE; } if (screen->get_param(screen, PIPE_CAP_VERTEX_COLOR_UNCLAMPED)) { @@ -636,4 +624,22 @@ void st_init_extensions(struct st_context *st) if (ctx->Const.MaxDualSourceDrawBuffers > 0) ctx->Extensions.ARB_blend_func_extended = GL_TRUE; + + if (screen->get_param(screen, PIPE_CAP_TIMER_QUERY) && + screen->get_param(screen, PIPE_CAP_QUERY_TIMESTAMP)) { + ctx->Extensions.ARB_timer_query = GL_TRUE; + } + + if (ctx->Extensions.ARB_transform_feedback2 && + ctx->Extensions.ARB_draw_instanced) { + ctx->Extensions.ARB_transform_feedback_instanced = GL_TRUE; + } + if (st->options.force_glsl_extensions_warn) + ctx->Const.ForceGLSLExtensionsWarn = 1; + + ctx->Const.MinMapBufferAlignment = + screen->get_param(screen, PIPE_CAP_MIN_MAP_BUFFER_ALIGNMENT); + if (ctx->Const.MinMapBufferAlignment >= 64) { + ctx->Extensions.ARB_map_buffer_alignment = GL_TRUE; + } }