From dd82494724c1c11ceeeaac66a2ed0113ec13f8e4 Mon Sep 17 00:00:00 2001 From: Arun Siluvery Date: Wed, 12 Aug 2015 12:26:01 +0100 Subject: [PATCH] lib/rendercopy_gen9: Setup Push constant pointer before sending BTP commands From Gen9, by default push constant command is not committed to the shader unit untill the corresponding shader's BTP_* command is parsed. This is the behaviour when set shader is enabled. This patch updates the batch to follow this requirement otherwise it results in gpu hang. Set shader need to be disabled if legacy behaviour is required. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=89959 Cc: Ben Widawsky Cc: Joonas Lahtinen Cc: Mika Kuoppala Signed-off-by: Arun Siluvery Tested-by: Mika Kuoppala Reviewed-by: Joonas Lahtinen Signed-off-by: Mika Kuoppala --- lib/rendercopy_gen9.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/lib/rendercopy_gen9.c b/lib/rendercopy_gen9.c index 4a4a604a..95374807 100644 --- a/lib/rendercopy_gen9.c +++ b/lib/rendercopy_gen9.c @@ -590,12 +590,6 @@ gen8_emit_multisample(struct intel_batchbuffer *batch) { static void gen8_emit_vs(struct intel_batchbuffer *batch) { - OUT_BATCH(GEN7_3DSTATE_BINDING_TABLE_POINTERS_VS); - OUT_BATCH(0); - - OUT_BATCH(GEN7_3DSTATE_SAMPLER_STATE_POINTERS_VS); - OUT_BATCH(0); - OUT_BATCH(GEN6_3DSTATE_CONSTANT_VS | (11-2)); OUT_BATCH(0); OUT_BATCH(0); @@ -608,6 +602,12 @@ gen8_emit_vs(struct intel_batchbuffer *batch) { OUT_BATCH(0); OUT_BATCH(0); + OUT_BATCH(GEN7_3DSTATE_BINDING_TABLE_POINTERS_VS); + OUT_BATCH(0); + + OUT_BATCH(GEN7_3DSTATE_SAMPLER_STATE_POINTERS_VS); + OUT_BATCH(0); + OUT_BATCH(GEN6_3DSTATE_VS | (9-2)); OUT_BATCH(0); OUT_BATCH(0); @@ -998,14 +998,14 @@ void gen9_render_copyfunc(struct intel_batchbuffer *batch, gen8_emit_sf(batch); + gen8_emit_ps(batch, ps_kernel_off); + OUT_BATCH(GEN7_3DSTATE_BINDING_TABLE_POINTERS_PS); OUT_BATCH(ps_binding_table); OUT_BATCH(GEN7_3DSTATE_SAMPLER_STATE_POINTERS_PS); OUT_BATCH(ps_sampler_state); - gen8_emit_ps(batch, ps_kernel_off); - OUT_BATCH(GEN6_3DSTATE_SCISSOR_STATE_POINTERS); OUT_BATCH(scissor_state);