Mesa (master): mesa: update fixed-func state constants for TCS, TES, GS
Marek Olšák
mareko at kemper.freedesktop.org
Wed May 30 00:14:00 UTC 2018
Module: Mesa
Branch: master
Commit: e453fc76e7d38df44aa27fed7df011df76b1d03a
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=e453fc76e7d38df44aa27fed7df011df76b1d03a
Author: Marek Olšák <marek.olsak at amd.com>
Date: Wed May 23 01:37:12 2018 -0400
mesa: update fixed-func state constants for TCS, TES, GS
Reviewed-by: Nicolai Hähnle <nicolai.haehnle at amd.com>
Reviewed-by: Timothy Arceri <tarceri at itsqueeze.com>
---
src/mesa/main/state.c | 64 +++++++++++++++++++++++++++++----------------------
1 file changed, 36 insertions(+), 28 deletions(-)
diff --git a/src/mesa/main/state.c b/src/mesa/main/state.c
index be8f3f302c..097cd9e20d 100644
--- a/src/mesa/main/state.c
+++ b/src/mesa/main/state.c
@@ -222,41 +222,49 @@ update_program(struct gl_context *ctx)
}
-/**
- * Examine shader constants and return either _NEW_PROGRAM_CONSTANTS or 0.
- */
static GLbitfield
-update_program_constants(struct gl_context *ctx)
+update_single_program_constants(struct gl_context *ctx,
+ struct gl_program *prog,
+ gl_shader_stage stage)
{
- GLbitfield new_state = 0x0;
-
- if (ctx->FragmentProgram._Current) {
- const struct gl_program_parameter_list *params =
- ctx->FragmentProgram._Current->Parameters;
+ if (prog) {
+ const struct gl_program_parameter_list *params = prog->Parameters;
if (params && params->StateFlags & ctx->NewState) {
- if (ctx->DriverFlags.NewShaderConstants[MESA_SHADER_FRAGMENT]) {
- ctx->NewDriverState |=
- ctx->DriverFlags.NewShaderConstants[MESA_SHADER_FRAGMENT];
- } else {
- new_state |= _NEW_PROGRAM_CONSTANTS;
- }
+ if (ctx->DriverFlags.NewShaderConstants[stage])
+ ctx->NewDriverState |= ctx->DriverFlags.NewShaderConstants[stage];
+ else
+ return _NEW_PROGRAM_CONSTANTS;
}
}
+ return 0;
+}
- /* Don't handle tessellation and geometry shaders here. They don't use
- * any state constants.
- */
- if (ctx->VertexProgram._Current) {
- const struct gl_program_parameter_list *params =
- ctx->VertexProgram._Current->Parameters;
- if (params && params->StateFlags & ctx->NewState) {
- if (ctx->DriverFlags.NewShaderConstants[MESA_SHADER_VERTEX]) {
- ctx->NewDriverState |=
- ctx->DriverFlags.NewShaderConstants[MESA_SHADER_VERTEX];
- } else {
- new_state |= _NEW_PROGRAM_CONSTANTS;
- }
+/**
+ * This updates fixed-func state constants such as gl_ModelViewMatrix.
+ * Examine shader constants and return either _NEW_PROGRAM_CONSTANTS or 0.
+ */
+static GLbitfield
+update_program_constants(struct gl_context *ctx)
+{
+ GLbitfield new_state =
+ update_single_program_constants(ctx, ctx->VertexProgram._Current,
+ MESA_SHADER_VERTEX) |
+ update_single_program_constants(ctx, ctx->FragmentProgram._Current,
+ MESA_SHADER_FRAGMENT);
+
+ if (ctx->API == API_OPENGL_COMPAT &&
+ ctx->Const.GLSLVersionCompat >= 150) {
+ new_state |=
+ update_single_program_constants(ctx, ctx->GeometryProgram._Current,
+ MESA_SHADER_GEOMETRY);
+
+ if (_mesa_has_ARB_tessellation_shader(ctx)) {
+ new_state |=
+ update_single_program_constants(ctx, ctx->TessCtrlProgram._Current,
+ MESA_SHADER_TESS_CTRL) |
+ update_single_program_constants(ctx, ctx->TessEvalProgram._Current,
+ MESA_SHADER_TESS_EVAL);
}
}
More information about the mesa-commit
mailing list