diff options
author | Timothy Arceri <[email protected]> | 2016-11-20 21:44:29 +1100 |
---|---|---|
committer | Timothy Arceri <[email protected]> | 2017-01-23 14:48:04 +1100 |
commit | f86d15ed94df59e4b3cdb4099d69cdd81f52fc27 (patch) | |
tree | 5d6f13c0b405bb2ee1e79b6ed6142794cd4a6af4 /src/compiler | |
parent | c505d6d852220f4aaaee161465dd2c579647e672 (diff) |
st/mesa/glsl: change xfb_program field to last_vert_prog
Now that the i965 backend doesn't depend on this field we can
make it more generic and short circuit a bunch of code paths.
The new field will be used in a following patch for another
clean-up.
Reviewed-by: Nicolai Hähnle <[email protected]>
Diffstat (limited to 'src/compiler')
-rw-r--r-- | src/compiler/glsl/link_varyings.cpp | 5 | ||||
-rw-r--r-- | src/compiler/glsl/linker.cpp | 47 |
2 files changed, 27 insertions, 25 deletions
diff --git a/src/compiler/glsl/link_varyings.cpp b/src/compiler/glsl/link_varyings.cpp index 8cd364441d3..eef215dfda7 100644 --- a/src/compiler/glsl/link_varyings.cpp +++ b/src/compiler/glsl/link_varyings.cpp @@ -1076,6 +1076,9 @@ store_tfeedback_info(struct gl_context *ctx, struct gl_shader_program *prog, unsigned num_tfeedback_decls, tfeedback_decl *tfeedback_decls, bool has_xfb_qualifiers) { + if (!prog->last_vert_prog) + return true; + /* Make sure MaxTransformFeedbackBuffers is less than 32 so the bitmask for * tracking the number of buffers doesn't overflow. */ @@ -1084,7 +1087,7 @@ store_tfeedback_info(struct gl_context *ctx, struct gl_shader_program *prog, bool separate_attribs_mode = prog->TransformFeedback.BufferMode == GL_SEPARATE_ATTRIBS; - struct gl_program *xfb_prog = prog->xfb_program; + struct gl_program *xfb_prog = prog->last_vert_prog; xfb_prog->sh.LinkedTransformFeedback = rzalloc(xfb_prog, struct gl_transform_feedback_info); diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp index fb26be48950..846f77f4c7d 100644 --- a/src/compiler/glsl/linker.cpp +++ b/src/compiler/glsl/linker.cpp @@ -4235,27 +4235,29 @@ build_program_resource_list(struct gl_context *ctx, output_stage, GL_PROGRAM_OUTPUT)) return; - struct gl_transform_feedback_info *linked_xfb = - shProg->xfb_program->sh.LinkedTransformFeedback; - - /* Add transform feedback varyings. */ - if (linked_xfb->NumVarying > 0) { - for (int i = 0; i < linked_xfb->NumVarying; i++) { - if (!add_program_resource(shProg, resource_set, - GL_TRANSFORM_FEEDBACK_VARYING, - &linked_xfb->Varyings[i], 0)) - return; + if (shProg->last_vert_prog) { + struct gl_transform_feedback_info *linked_xfb = + shProg->last_vert_prog->sh.LinkedTransformFeedback; + + /* Add transform feedback varyings. */ + if (linked_xfb->NumVarying > 0) { + for (int i = 0; i < linked_xfb->NumVarying; i++) { + if (!add_program_resource(shProg, resource_set, + GL_TRANSFORM_FEEDBACK_VARYING, + &linked_xfb->Varyings[i], 0)) + return; + } } - } - /* Add transform feedback buffers. */ - for (unsigned i = 0; i < ctx->Const.MaxTransformFeedbackBuffers; i++) { - if ((linked_xfb->ActiveBuffers >> i) & 1) { - linked_xfb->Buffers[i].Binding = i; - if (!add_program_resource(shProg, resource_set, - GL_TRANSFORM_FEEDBACK_BUFFER, - &linked_xfb->Buffers[i], 0)) - return; + /* Add transform feedback buffers. */ + for (unsigned i = 0; i < ctx->Const.MaxTransformFeedbackBuffers; i++) { + if ((linked_xfb->ActiveBuffers >> i) & 1) { + linked_xfb->Buffers[i].Binding = i; + if (!add_program_resource(shProg, resource_set, + GL_TRANSFORM_FEEDBACK_BUFFER, + &linked_xfb->Buffers[i], 0)) + return; + } } } @@ -4566,15 +4568,12 @@ link_varyings_and_uniforms(unsigned first, unsigned last, return false; } - /* Find the program used for xfb. Even if we don't use xfb we still want to - * set this so we can fill the default values for program interface query. - */ - prog->xfb_program = prog->_LinkedShaders[last]->Program; + prog->last_vert_prog = NULL; for (int i = MESA_SHADER_GEOMETRY; i >= MESA_SHADER_VERTEX; i--) { if (prog->_LinkedShaders[i] == NULL) continue; - prog->xfb_program = prog->_LinkedShaders[i]->Program; + prog->last_vert_prog = prog->_LinkedShaders[i]->Program; break; } |