i965: Create and set a new brw_tcs_prog_data::outputs_written field.
authorKenneth Graunke <kenneth@whitecape.org>
Fri, 18 Dec 2015 05:39:28 +0000 (21:39 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Wed, 23 Dec 2015 01:22:06 +0000 (17:22 -0800)
When the application hasn't supplied a TCS, and we have to create one,
we need to know what VS outputs to copy to TES inputs.

To do this, we create a new program key field, and set it to the TES
InputsRead bitfield.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
src/mesa/drivers/dri/i965/brw_compiler.h
src/mesa/drivers/dri/i965/brw_tcs.c

index 59084e62035f88deeab6f112cc9fd0f5b7ba3a02..0ffaac7f5ceb4cf30d81645705a8855da1620d7a 100644 (file)
@@ -200,6 +200,9 @@ struct brw_tcs_prog_key
 
    unsigned input_vertices;
 
+   /** A bitfield of per-vertex outputs written. */
+   uint64_t outputs_written;
+
    struct brw_sampler_prog_key_data tex;
 };
 
index 5de6f4859ad3d8ce3dbb08eb89e6acbf00289f97..1da87eedeeceb8b858ebfde47ab0896f4e745cf5 100644 (file)
@@ -201,19 +201,24 @@ brw_upload_tcs_prog(struct brw_context *brw)
 
    memset(&key, 0, sizeof(key));
 
-   key.program_string_id = tcp->id;
-
    key.input_vertices = ctx->TessCtrlProgram.patch_vertices;
 
-   /* _NEW_TEXTURE */
-   brw_populate_sampler_prog_key_data(ctx, prog, stage_state->sampler_count,
-                                      &key.tex);
-
    /* We need to specialize our code generation for tessellation levels
     * based on the domain the DS is expecting to tessellate.
     */
    key.tes_primitive_mode = tep->program.PrimitiveMode;
 
+   if (tcp) {
+      key.program_string_id = tcp->id;
+
+      /* _NEW_TEXTURE */
+      brw_populate_sampler_prog_key_data(ctx, prog, stage_state->sampler_count,
+                                         &key.tex);
+   } else {
+      key.outputs_written = tep->program.Base.InputsRead;
+   }
+
+
    if (!brw_search_cache(&brw->cache, BRW_CACHE_TCS_PROG,
                          &key, sizeof(key),
                          &stage_state->prog_offset, &brw->tcs.prog_data)) {