aboutsummaryrefslogtreecommitdiffstats
path: root/src/mesa/main/pipelineobj.c
diff options
context:
space:
mode:
authorTimothy Arceri <[email protected]>2017-05-03 13:50:21 +1000
committerTimothy Arceri <[email protected]>2017-05-11 10:56:08 +1000
commitea4c606441d7e2f0d8c86d5abce351935b16255c (patch)
treeafc5f422509202b97f844fdcc20c2502cc0cecf6 /src/mesa/main/pipelineobj.c
parentfe6c407a33a96b9ae3f9701ee04fc5598b94e2e2 (diff)
mesa: create use_program_stages() helper
This will be used to create a KHR_no_error version of glUseProgramStages(). Reviewed-by: Eric Anholt <[email protected]>
Diffstat (limited to 'src/mesa/main/pipelineobj.c')
-rw-r--r--src/mesa/main/pipelineobj.c71
1 files changed, 39 insertions, 32 deletions
diff --git a/src/mesa/main/pipelineobj.c b/src/mesa/main/pipelineobj.c
index dbca3c366ce..047c0a340ed 100644
--- a/src/mesa/main/pipelineobj.c
+++ b/src/mesa/main/pipelineobj.c
@@ -218,6 +218,44 @@ use_program_stage(struct gl_context *ctx, GLenum type,
_mesa_use_program(ctx, stage, shProg, prog, pipe);
}
+static void
+use_program_stages(struct gl_context *ctx, struct gl_shader_program *shProg,
+ GLbitfield stages, struct gl_pipeline_object *pipe) {
+
+ /* Enable individual stages from the program as requested by the
+ * application. If there is no shader for a requested stage in the
+ * program, _mesa_use_shader_program will enable fixed-function processing
+ * as dictated by the spec.
+ *
+ * Section 2.11.4 (Program Pipeline Objects) of the OpenGL 4.1 spec
+ * says:
+ *
+ * "If UseProgramStages is called with program set to zero or with a
+ * program object that contains no executable code for the given
+ * stages, it is as if the pipeline object has no programmable stage
+ * configured for the indicated shader stages."
+ */
+ if ((stages & GL_VERTEX_SHADER_BIT) != 0)
+ use_program_stage(ctx, GL_VERTEX_SHADER, shProg, pipe);
+
+ if ((stages & GL_FRAGMENT_SHADER_BIT) != 0)
+ use_program_stage(ctx, GL_FRAGMENT_SHADER, shProg, pipe);
+
+ if ((stages & GL_GEOMETRY_SHADER_BIT) != 0)
+ use_program_stage(ctx, GL_GEOMETRY_SHADER, shProg, pipe);
+
+ if ((stages & GL_TESS_CONTROL_SHADER_BIT) != 0)
+ use_program_stage(ctx, GL_TESS_CONTROL_SHADER, shProg, pipe);
+
+ if ((stages & GL_TESS_EVALUATION_SHADER_BIT) != 0)
+ use_program_stage(ctx, GL_TESS_EVALUATION_SHADER, shProg, pipe);
+
+ if ((stages & GL_COMPUTE_SHADER_BIT) != 0)
+ use_program_stage(ctx, GL_COMPUTE_SHADER, shProg, pipe);
+
+ pipe->Validated = false;
+}
+
/**
* Bound program to severals stages of the pipeline
*/
@@ -311,38 +349,7 @@ _mesa_UseProgramStages(GLuint pipeline, GLbitfield stages, GLuint program)
}
}
- /* Enable individual stages from the program as requested by the
- * application. If there is no shader for a requested stage in the
- * program, _mesa_use_shader_program will enable fixed-function processing
- * as dictated by the spec.
- *
- * Section 2.11.4 (Program Pipeline Objects) of the OpenGL 4.1 spec
- * says:
- *
- * "If UseProgramStages is called with program set to zero or with a
- * program object that contains no executable code for the given
- * stages, it is as if the pipeline object has no programmable stage
- * configured for the indicated shader stages."
- */
- if ((stages & GL_VERTEX_SHADER_BIT) != 0)
- use_program_stage(ctx, GL_VERTEX_SHADER, shProg, pipe);
-
- if ((stages & GL_FRAGMENT_SHADER_BIT) != 0)
- use_program_stage(ctx, GL_FRAGMENT_SHADER, shProg, pipe);
-
- if ((stages & GL_GEOMETRY_SHADER_BIT) != 0)
- use_program_stage(ctx, GL_GEOMETRY_SHADER, shProg, pipe);
-
- if ((stages & GL_TESS_CONTROL_SHADER_BIT) != 0)
- use_program_stage(ctx, GL_TESS_CONTROL_SHADER, shProg, pipe);
-
- if ((stages & GL_TESS_EVALUATION_SHADER_BIT) != 0)
- use_program_stage(ctx, GL_TESS_EVALUATION_SHADER, shProg, pipe);
-
- if ((stages & GL_COMPUTE_SHADER_BIT) != 0)
- use_program_stage(ctx, GL_COMPUTE_SHADER, shProg, pipe);
-
- pipe->Validated = false;
+ use_program_stages(ctx, shProg, stages, pipe);
}
/**