iris: emit shader packets
authorKenneth Graunke <kenneth@whitecape.org>
Tue, 23 Jan 2018 06:40:51 +0000 (22:40 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 21 Feb 2019 18:26:05 +0000 (10:26 -0800)
src/gallium/drivers/iris/iris_state.c

index 65201c1658d416d7d73029cea03497e5a544d3dc..dff04e47d52bd1b02049bbe5e2f791d424475600 100644 (file)
@@ -1525,6 +1525,23 @@ iris_upload_render_state(struct iris_context *ice,
       }
    }
 
+   for (int stage = 0; stage <= MESA_SHADER_FRAGMENT; stage++) {
+      if (!(dirty & (IRIS_DIRTY_VS << stage)))
+         continue;
+
+      if (ice->shaders.prog[stage]) {
+         iris_batch_emit(batch, ice->shaders.prog[stage]->derived_data,
+                         iris_derived_program_state_size(stage));
+      } else {
+         if (stage == MESA_SHADER_TESS_EVAL) {
+            iris_emit_cmd(batch, GENX(3DSTATE_HS), hs);
+            iris_emit_cmd(batch, GENX(3DSTATE_DS), ds);
+         } else if (stage == MESA_SHADER_GEOMETRY) {
+            iris_emit_cmd(batch, GENX(3DSTATE_GS), gs);
+         }
+      }
+   }
+
    for (int stage = 0; stage <= MESA_SHADER_FRAGMENT; stage++) {
       if (!(dirty & (IRIS_DIRTY_SAMPLER_STATES_VS << stage)))
          continue;