[Mesa-dev] [PATCH 1/2] mesa: add bind_program_pipeline() helper
Samuel Pitoiset
samuel.pitoiset at gmail.com
Tue Jul 25 13:09:38 UTC 2017
On 07/25/2017 03:08 PM, Brian Paul wrote:
> 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?
I don't use it either, but I remember someone else attempted to remove
it (maybe Emil?), without success.
>
> -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