mirror of
https://github.com/brl/mutter.git
synced 2024-11-25 09:30:45 -05:00
cogl: Stop using glPointSize in big-GL
Just pass it in to the vertex shader like in GLES, it's one less thing to vary between drivers. mutter is, shall we say, not a heavy user of point primitives, so any performance impact (it might be measurable, who knows) is not an issue. Again, the feature flag remains to be cleaned up in a future commit. https://gitlab.gnome.org/GNOME/mutter/merge_requests/995
This commit is contained in:
parent
35f21c5bc0
commit
282eab45f7
@ -2799,14 +2799,7 @@ _cogl_pipeline_get_state_for_vertex_codegen (CoglContext *context)
|
|||||||
COGL_PIPELINE_STATE_USER_SHADER |
|
COGL_PIPELINE_STATE_USER_SHADER |
|
||||||
COGL_PIPELINE_STATE_PER_VERTEX_POINT_SIZE |
|
COGL_PIPELINE_STATE_PER_VERTEX_POINT_SIZE |
|
||||||
COGL_PIPELINE_STATE_VERTEX_SNIPPETS);
|
COGL_PIPELINE_STATE_VERTEX_SNIPPETS);
|
||||||
|
state |= COGL_PIPELINE_STATE_NON_ZERO_POINT_SIZE;
|
||||||
/* If we don't have the builtin point size uniform then we'll add
|
|
||||||
* one in the GLSL but we'll only do this if the point size is
|
|
||||||
* non-zero. Whether or not the point size is zero is represented by
|
|
||||||
* COGL_PIPELINE_STATE_NON_ZERO_POINT_SIZE */
|
|
||||||
if (!_cogl_has_private_feature
|
|
||||||
(context, COGL_PRIVATE_FEATURE_BUILTIN_POINT_SIZE_UNIFORM))
|
|
||||||
state |= COGL_PIPELINE_STATE_NON_ZERO_POINT_SIZE;
|
|
||||||
|
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
@ -63,7 +63,6 @@ typedef enum
|
|||||||
* events. Otherwise a dirty event will be queued when the onscreen
|
* events. Otherwise a dirty event will be queued when the onscreen
|
||||||
* is first allocated or when it is shown or resized */
|
* is first allocated or when it is shown or resized */
|
||||||
COGL_PRIVATE_FEATURE_DIRTY_EVENTS,
|
COGL_PRIVATE_FEATURE_DIRTY_EVENTS,
|
||||||
COGL_PRIVATE_FEATURE_ENABLE_PROGRAM_POINT_SIZE,
|
|
||||||
/* This feature allows for explicitly selecting a GL-based backend,
|
/* This feature allows for explicitly selecting a GL-based backend,
|
||||||
* as opposed to nop or (in the future) Vulkan.
|
* as opposed to nop or (in the future) Vulkan.
|
||||||
*/
|
*/
|
||||||
|
@ -64,9 +64,6 @@
|
|||||||
#ifndef GL_CLAMP_TO_BORDER
|
#ifndef GL_CLAMP_TO_BORDER
|
||||||
#define GL_CLAMP_TO_BORDER 0x812d
|
#define GL_CLAMP_TO_BORDER 0x812d
|
||||||
#endif
|
#endif
|
||||||
#ifndef GL_PROGRAM_POINT_SIZE
|
|
||||||
#define GL_PROGRAM_POINT_SIZE 0x8642
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
texture_unit_init (CoglContext *ctx,
|
texture_unit_init (CoglContext *ctx,
|
||||||
@ -456,21 +453,6 @@ _cogl_pipeline_flush_color_blend_alpha_depth_state (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_COGL_GL
|
|
||||||
if (_cogl_has_private_feature
|
|
||||||
(ctx, COGL_PRIVATE_FEATURE_ENABLE_PROGRAM_POINT_SIZE) &&
|
|
||||||
(pipelines_difference & COGL_PIPELINE_STATE_PER_VERTEX_POINT_SIZE))
|
|
||||||
{
|
|
||||||
unsigned long state = COGL_PIPELINE_STATE_PER_VERTEX_POINT_SIZE;
|
|
||||||
CoglPipeline *authority = _cogl_pipeline_get_authority (pipeline, state);
|
|
||||||
|
|
||||||
if (authority->big_state->per_vertex_point_size)
|
|
||||||
GE( ctx, glEnable (GL_PROGRAM_POINT_SIZE) );
|
|
||||||
else
|
|
||||||
GE( ctx, glDisable (GL_PROGRAM_POINT_SIZE) );
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (pipeline->real_blend_enable != ctx->gl_blend_enable_cache)
|
if (pipeline->real_blend_enable != ctx->gl_blend_enable_cache)
|
||||||
{
|
{
|
||||||
if (pipeline->real_blend_enable)
|
if (pipeline->real_blend_enable)
|
||||||
|
@ -305,8 +305,7 @@ _cogl_pipeline_vertend_glsl_start (CoglPipeline *pipeline,
|
|||||||
if (cogl_pipeline_get_per_vertex_point_size (pipeline))
|
if (cogl_pipeline_get_per_vertex_point_size (pipeline))
|
||||||
g_string_append (shader_state->header,
|
g_string_append (shader_state->header,
|
||||||
"attribute float cogl_point_size_in;\n");
|
"attribute float cogl_point_size_in;\n");
|
||||||
else if (!_cogl_has_private_feature
|
else
|
||||||
(ctx, COGL_PRIVATE_FEATURE_BUILTIN_POINT_SIZE_UNIFORM))
|
|
||||||
{
|
{
|
||||||
/* There is no builtin uniform for the point size on GLES2 so we
|
/* There is no builtin uniform for the point size on GLES2 so we
|
||||||
need to copy it from the custom uniform in the vertex shader
|
need to copy it from the custom uniform in the vertex shader
|
||||||
@ -541,19 +540,6 @@ _cogl_pipeline_vertend_glsl_end (CoglPipeline *pipeline,
|
|||||||
shader_state->gl_shader = shader;
|
shader_state->gl_shader = shader;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_COGL_GL
|
|
||||||
if (_cogl_has_private_feature
|
|
||||||
(ctx, COGL_PRIVATE_FEATURE_BUILTIN_POINT_SIZE_UNIFORM) &&
|
|
||||||
(pipelines_difference & COGL_PIPELINE_STATE_POINT_SIZE))
|
|
||||||
{
|
|
||||||
CoglPipeline *authority =
|
|
||||||
_cogl_pipeline_get_authority (pipeline, COGL_PIPELINE_STATE_POINT_SIZE);
|
|
||||||
|
|
||||||
if (authority->big_state->point_size > 0.0f)
|
|
||||||
GE( ctx, glPointSize (authority->big_state->point_size) );
|
|
||||||
}
|
|
||||||
#endif /* HAVE_COGL_GL */
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -651,11 +637,7 @@ UNIT_TEST (check_point_size_shader,
|
|||||||
* size */
|
* size */
|
||||||
if (shader_states[0])
|
if (shader_states[0])
|
||||||
{
|
{
|
||||||
if (_cogl_has_private_feature
|
g_assert (shader_states[0] != shader_states[1]);
|
||||||
(test_ctx, COGL_PRIVATE_FEATURE_BUILTIN_POINT_SIZE_UNIFORM))
|
|
||||||
g_assert (shader_states[0] == shader_states[1]);
|
|
||||||
else
|
|
||||||
g_assert (shader_states[0] != shader_states[1]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The second and third pipelines should always have the same shader
|
/* The second and third pipelines should always have the same shader
|
||||||
|
@ -80,6 +80,11 @@ _cogl_driver_gl_context_init (CoglContext *context,
|
|||||||
if (context->driver == COGL_DRIVER_GL)
|
if (context->driver == COGL_DRIVER_GL)
|
||||||
GE (context, glEnable (GL_POINT_SPRITE));
|
GE (context, glEnable (GL_POINT_SPRITE));
|
||||||
|
|
||||||
|
/* There's no enable for this in GLES2, it's always on */
|
||||||
|
if (context->driver == COGL_DRIVER_GL ||
|
||||||
|
context->driver == COGL_DRIVER_GL3)
|
||||||
|
GE (context, glEnable (GL_PROGRAM_POINT_SIZE) );
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -489,9 +494,6 @@ _cogl_driver_update_features (CoglContext *ctx,
|
|||||||
COGL_FLAGS_SET (private_features,
|
COGL_FLAGS_SET (private_features,
|
||||||
COGL_PRIVATE_FEATURE_TEXTURE_SWIZZLE, TRUE);
|
COGL_PRIVATE_FEATURE_TEXTURE_SWIZZLE, TRUE);
|
||||||
|
|
||||||
COGL_FLAGS_SET (private_features,
|
|
||||||
COGL_PRIVATE_FEATURE_ENABLE_PROGRAM_POINT_SIZE, TRUE);
|
|
||||||
|
|
||||||
if (ctx->driver == COGL_DRIVER_GL)
|
if (ctx->driver == COGL_DRIVER_GL)
|
||||||
{
|
{
|
||||||
/* Features which are not available in GL 3 */
|
/* Features which are not available in GL 3 */
|
||||||
@ -504,8 +506,6 @@ _cogl_driver_update_features (CoglContext *ctx,
|
|||||||
COGL_FLAGS_SET (private_features, COGL_PRIVATE_FEATURE_ANY_GL, TRUE);
|
COGL_FLAGS_SET (private_features, COGL_PRIVATE_FEATURE_ANY_GL, TRUE);
|
||||||
COGL_FLAGS_SET (private_features,
|
COGL_FLAGS_SET (private_features,
|
||||||
COGL_PRIVATE_FEATURE_FORMAT_CONVERSION, TRUE);
|
COGL_PRIVATE_FEATURE_FORMAT_CONVERSION, TRUE);
|
||||||
COGL_FLAGS_SET (private_features,
|
|
||||||
COGL_PRIVATE_FEATURE_BUILTIN_POINT_SIZE_UNIFORM, TRUE);
|
|
||||||
COGL_FLAGS_SET (private_features,
|
COGL_FLAGS_SET (private_features,
|
||||||
COGL_PRIVATE_FEATURE_QUERY_TEXTURE_PARAMETERS, TRUE);
|
COGL_PRIVATE_FEATURE_QUERY_TEXTURE_PARAMETERS, TRUE);
|
||||||
COGL_FLAGS_SET (private_features,
|
COGL_FLAGS_SET (private_features,
|
||||||
|
Loading…
Reference in New Issue
Block a user