i965: Only call brw_upload_tcs/tes_prog when using tessellation.
If there's no evaluation shader, tessellation is disabled. The upload functions would just bail. Instead, don't bother calling them. This will simplify the optional-TCS case a bit, as brw_upload_tcs can assume that we're doing tessellation. Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
This commit is contained in:
@@ -678,8 +678,15 @@ brw_upload_programs(struct brw_context *brw,
|
||||
{
|
||||
if (pipeline == BRW_RENDER_PIPELINE) {
|
||||
brw_upload_vs_prog(brw);
|
||||
brw_upload_tcs_prog(brw);
|
||||
brw_upload_tes_prog(brw);
|
||||
if (brw->tess_eval_program) {
|
||||
brw_upload_tcs_prog(brw);
|
||||
brw_upload_tes_prog(brw);
|
||||
} else {
|
||||
brw->tcs.prog_data = NULL;
|
||||
brw->tcs.base.prog_data = NULL;
|
||||
brw->tes.prog_data = NULL;
|
||||
brw->tes.base.prog_data = NULL;
|
||||
}
|
||||
|
||||
if (brw->gen < 6)
|
||||
brw_upload_ff_gs_prog(brw);
|
||||
|
||||
@@ -187,6 +187,10 @@ brw_upload_tcs_prog(struct brw_context *brw)
|
||||
/* BRW_NEW_TESS_CTRL_PROGRAM */
|
||||
struct brw_tess_ctrl_program *tcp =
|
||||
(struct brw_tess_ctrl_program *) brw->tess_ctrl_program;
|
||||
/* BRW_NEW_TESS_EVAL_PROGRAM */
|
||||
struct brw_tess_eval_program *tep =
|
||||
(struct brw_tess_eval_program *) brw->tess_eval_program;
|
||||
assert(tcp && tep);
|
||||
|
||||
if (!brw_state_dirty(brw,
|
||||
_NEW_TEXTURE,
|
||||
@@ -195,15 +199,6 @@ brw_upload_tcs_prog(struct brw_context *brw)
|
||||
BRW_NEW_TESS_EVAL_PROGRAM))
|
||||
return;
|
||||
|
||||
if (tcp == NULL) {
|
||||
/* Other state atoms had better not try to access prog_data, since
|
||||
* there's no HS program.
|
||||
*/
|
||||
brw->tcs.prog_data = NULL;
|
||||
brw->tcs.base.prog_data = NULL;
|
||||
return;
|
||||
}
|
||||
|
||||
struct gl_program *prog = &tcp->program.Base;
|
||||
|
||||
memset(&key, 0, sizeof(key));
|
||||
@@ -216,13 +211,9 @@ brw_upload_tcs_prog(struct brw_context *brw)
|
||||
brw_populate_sampler_prog_key_data(ctx, prog, stage_state->sampler_count,
|
||||
&key.tex);
|
||||
|
||||
/* BRW_NEW_TESS_EVAL_PROGRAM */
|
||||
/* We need to specialize our code generation for tessellation levels
|
||||
* based on the domain the DS is expecting to tessellate.
|
||||
*/
|
||||
struct brw_tess_eval_program *tep =
|
||||
(struct brw_tess_eval_program *) brw->tess_eval_program;
|
||||
assert(tep);
|
||||
key.tes_primitive_mode = tep->program.PrimitiveMode;
|
||||
|
||||
if (!brw_search_cache(&brw->cache, BRW_CACHE_TCS_PROG,
|
||||
|
||||
@@ -241,15 +241,6 @@ brw_upload_tes_prog(struct brw_context *brw)
|
||||
BRW_NEW_TESS_EVAL_PROGRAM))
|
||||
return;
|
||||
|
||||
if (tep == NULL) {
|
||||
/* Other state atoms had better not try to access prog_data, since
|
||||
* there's no TES program.
|
||||
*/
|
||||
brw->tes.prog_data = NULL;
|
||||
brw->tes.base.prog_data = NULL;
|
||||
return;
|
||||
}
|
||||
|
||||
struct gl_program *prog = &tep->program.Base;
|
||||
|
||||
memset(&key, 0, sizeof(key));
|
||||
|
||||
Reference in New Issue
Block a user