[Mesa-dev] [PATCH 1/2] mesa: add bind_program_pipeline() helper
Brian Paul
brianp at vmware.com
Tue Jul 25 13:08:58 UTC 2017
On 07/25/2017 02:04 AM, Nicolai Hähnle wrote:
> On 21.07.2017 15:16, Samuel Pitoiset wrote:
>> To reduce code duplication.
>>
>> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
>> ---
>> src/mesa/main/pipelineobj.c | 62
>> ++++++++++++++++++---------------------------
>> 1 file changed, 25 insertions(+), 37 deletions(-)
>>
>> diff --git a/src/mesa/main/pipelineobj.c b/src/mesa/main/pipelineobj.c
>> index f40111108c..79d97c2211 100644
>> --- a/src/mesa/main/pipelineobj.c
>> +++ b/src/mesa/main/pipelineobj.c
>> @@ -429,44 +429,11 @@ _mesa_ActiveShaderProgram(GLuint pipeline,
>> GLuint program)
>> _mesa_reference_shader_program(ctx, &pipe->ActiveProgram, shProg);
>> }
>> -void GLAPIENTRY
>> -_mesa_BindProgramPipeline_no_error(GLuint pipeline)
>> -{
>> - GET_CURRENT_CONTEXT(ctx);
>> - struct gl_pipeline_object *newObj = NULL;
>> -
>> - /* Rebinding the same pipeline object: no change.
>> - */
>> - if (ctx->_Shader->Name == pipeline)
>> - return;
>> -
>> - /* Get pointer to new pipeline object (newObj)
>> - */
>> - if (pipeline) {
>> - /* non-default pipeline object */
>> - newObj = _mesa_lookup_pipeline_object(ctx, pipeline);
>> -
>> - /* Object is created by any Pipeline call but
>> glGenProgramPipelines,
>> - * glIsProgramPipeline and GetProgramPipelineInfoLog
>> - */
>> - newObj->EverBound = GL_TRUE;
>> - }
>> -
>> - _mesa_bind_pipeline(ctx, newObj);
>> -}
>> -
>> -/**
>> - * Make program of the pipeline current
>> - */
>> -void GLAPIENTRY
>> -_mesa_BindProgramPipeline(GLuint pipeline)
>> +static ALWAYS_INLINE void
>> +bind_program_pipeline(struct gl_context *ctx, GLuint pipeline, bool
>> no_error)
>> {
>> - GET_CURRENT_CONTEXT(ctx);
>> struct gl_pipeline_object *newObj = NULL;
>> - if (MESA_VERBOSE & VERBOSE_API)
>> - _mesa_debug(ctx, "glBindProgramPipeline(%u)\n", pipeline);
>
> Personally, I would leave the debug print here instead of moving it. In
> release builds it is compiled away anyway. An analogous comment applies
> to the second patch.
I think the whole MESA_VERBOSE stuff could be removed, actually.
Nowadays we have apitrace to log/examine API calls. I haven't used
MESA_VERBOSE in years. Anyone else?
-Brian
>
> Either way, series is
>
> Reviewed-by: Nicolai Hähnle <nicolai.haehnle at amd.com>
>
>
>> -
>> /* Rebinding the same pipeline object: no change.
>> */
>> if (ctx->_Shader->Name == pipeline)
>> @@ -482,7 +449,7 @@ _mesa_BindProgramPipeline(GLuint pipeline)
>> * - by BindProgramPipeline if the current transform
>> feedback
>> * object is active and not paused;
>> */
>> - if (_mesa_is_xfb_active_and_unpaused(ctx)) {
>> + if (!no_error && _mesa_is_xfb_active_and_unpaused(ctx)) {
>> _mesa_error(ctx, GL_INVALID_OPERATION,
>> "glBindProgramPipeline(transform feedback active)");
>> return;
>> @@ -493,7 +460,7 @@ _mesa_BindProgramPipeline(GLuint pipeline)
>> if (pipeline) {
>> /* non-default pipeline object */
>> newObj = _mesa_lookup_pipeline_object(ctx, pipeline);
>> - if (!newObj) {
>> + if (!no_error && !newObj) {
>> _mesa_error(ctx, GL_INVALID_OPERATION,
>> "glBindProgramPipeline(non-gen name)");
>> return;
>> @@ -508,6 +475,27 @@ _mesa_BindProgramPipeline(GLuint pipeline)
>> _mesa_bind_pipeline(ctx, newObj);
>> }
>> +void GLAPIENTRY
>> +_mesa_BindProgramPipeline_no_error(GLuint pipeline)
>> +{
>> + GET_CURRENT_CONTEXT(ctx);
>> + bind_program_pipeline(ctx, pipeline, true);
>> +}
>> +
>> +/**
>> + * Make program of the pipeline current
>> + */
>> +void GLAPIENTRY
>> +_mesa_BindProgramPipeline(GLuint pipeline)
>> +{
>> + GET_CURRENT_CONTEXT(ctx);
>> +
>> + if (MESA_VERBOSE & VERBOSE_API)
>> + _mesa_debug(ctx, "glBindProgramPipeline(%u)\n", pipeline);
>> +
>> + bind_program_pipeline(ctx, pipeline, false);
>> +}
>> +
>> void
>> _mesa_bind_pipeline(struct gl_context *ctx,
>> struct gl_pipeline_object *pipe)
>>
>
>
More information about the mesa-dev
mailing list