diff options
-rw-r--r-- | lib/gen7_render.h | 1 | ||||
-rw-r--r-- | lib/rendercopy_gen7.c | 19 |
2 files changed, 17 insertions, 3 deletions
diff --git a/lib/gen7_render.h b/lib/gen7_render.h index 9919841f..6cd94753 100644 --- a/lib/gen7_render.h +++ b/lib/gen7_render.h @@ -55,6 +55,7 @@ /* Random shifts */ #define GEN7_3DSTATE_WM_MAX_THREADS_SHIFT 24 +#define HSW_3DSTATE_WM_MAX_THREADS_SHIFT 23 /* Shamelessly ripped from mesa */ struct gen7_surface_state diff --git a/lib/rendercopy_gen7.c b/lib/rendercopy_gen7.c index ffd00d4e..56181abf 100644 --- a/lib/rendercopy_gen7.c +++ b/lib/rendercopy_gen7.c @@ -128,6 +128,13 @@ gen7_bind_buf(struct intel_batchbuffer *batch, struct scratch_buf *buf, ss->ss2.width = buf_width(buf) - 1; ss->ss3.pitch = buf->stride - 1; + if (IS_HASWELL(batch->devid)) { + ss->ss7.shader_chanel_select_a = 4; + ss->ss7.shader_chanel_select_g = 5; + ss->ss7.shader_chanel_select_b = 6; + ss->ss7.shader_chanel_select_a = 7; + } + return batch_offset(batch, ss); } @@ -595,9 +602,15 @@ gen7_emit_ps(struct intel_batchbuffer *batch, uint32_t kernel) { OUT_BATCH(1 << GEN6_3DSTATE_WM_SAMPLER_COUNT_SHITF | 2 << GEN6_3DSTATE_WM_BINDING_TABLE_ENTRY_COUNT_SHIFT); OUT_BATCH(0); /* scratch space stuff */ - OUT_BATCH((max_threads - 1) << GEN7_3DSTATE_WM_MAX_THREADS_SHIFT | // needs HSW change - GEN7_3DSTATE_PS_ATTRIBUTE_ENABLED | - GEN6_3DSTATE_WM_16_DISPATCH_ENABLE); + if (IS_HASWELL(batch->devid)) { + OUT_BATCH((max_threads - 1) << GEN7_3DSTATE_WM_MAX_THREADS_SHIFT | + GEN7_3DSTATE_PS_ATTRIBUTE_ENABLED | + GEN6_3DSTATE_WM_16_DISPATCH_ENABLE); + } else { + OUT_BATCH((max_threads - 1) << HSW_3DSTATE_WM_MAX_THREADS_SHIFT | + GEN7_3DSTATE_PS_ATTRIBUTE_ENABLED | + GEN6_3DSTATE_WM_16_DISPATCH_ENABLE); + } OUT_BATCH(6 << GEN6_3DSTATE_WM_DISPATCH_START_GRF_0_SHIFT); OUT_BATCH(0); // kernel 1 OUT_BATCH(0); // kernel 2 |