[Libva] [PATCH 2/2] Update the maximum number of WM threads
Xiang, Haihao
haihao.xiang at intel.com
Thu Dec 20 18:34:29 PST 2012
From: "Xiang, Haihao" <haihao.xiang at intel.com>
The number is stolen from Mesa
Signed-off-by: Xiang, Haihao <haihao.xiang at intel.com>
---
src/i965_render.c | 29 +++++++++++++++++++++++------
src/i965_render.h | 2 ++
2 files changed, 25 insertions(+), 6 deletions(-)
diff --git a/src/i965_render.c b/src/i965_render.c
index de93164..29e4dd8 100644
--- a/src/i965_render.c
+++ b/src/i965_render.c
@@ -448,12 +448,11 @@ i965_subpic_render_wm_unit(VADriverContextP ctx)
if (IS_IRONLAKE(i965->intel.device_id)) {
wm_state->wm4.sampler_count = 0; /* hardware requirement */
- wm_state->wm5.max_threads = 12 * 6 - 1;
} else {
wm_state->wm4.sampler_count = (render_state->wm.sampler_count + 3) / 4;
- wm_state->wm5.max_threads = 10 * 5 - 1;
}
+ wm_state->wm5.max_threads = render_state->max_wm_threads - 1;
wm_state->wm5.thread_dispatch_enable = 1;
wm_state->wm5.enable_16_pix = 1;
wm_state->wm5.enable_8_pix = 0;
@@ -513,12 +512,11 @@ i965_render_wm_unit(VADriverContextP ctx)
if (IS_IRONLAKE(i965->intel.device_id)) {
wm_state->wm4.sampler_count = 0; /* hardware requirement */
- wm_state->wm5.max_threads = 12 * 6 - 1;
} else {
wm_state->wm4.sampler_count = (render_state->wm.sampler_count + 3) / 4;
- wm_state->wm5.max_threads = 10 * 5 - 1;
}
+ wm_state->wm5.max_threads = render_state->max_wm_threads - 1;
wm_state->wm5.thread_dispatch_enable = 1;
wm_state->wm5.enable_16_pix = 1;
wm_state->wm5.enable_8_pix = 0;
@@ -2072,7 +2070,7 @@ gen6_emit_wm_state(VADriverContextP ctx, int kernel)
(5 << GEN6_3DSTATE_WM_BINDING_TABLE_ENTRY_COUNT_SHIFT));
OUT_BATCH(batch, 0);
OUT_BATCH(batch, (6 << GEN6_3DSTATE_WM_DISPATCH_START_GRF_0_SHIFT)); /* DW4 */
- OUT_BATCH(batch, ((40 - 1) << GEN6_3DSTATE_WM_MAX_THREADS_SHIFT) |
+ OUT_BATCH(batch, ((render_state->max_wm_threads - 1) << GEN6_3DSTATE_WM_MAX_THREADS_SHIFT) |
GEN6_3DSTATE_WM_DISPATCH_ENABLE |
GEN6_3DSTATE_WM_16_DISPATCH_ENABLE);
OUT_BATCH(batch, (1 << GEN6_3DSTATE_WM_NUM_SF_OUTPUTS_SHIFT) |
@@ -2848,7 +2846,7 @@ gen7_emit_wm_state(VADriverContextP ctx, int kernel)
(5 << GEN7_PS_BINDING_TABLE_ENTRY_COUNT_SHIFT));
OUT_BATCH(batch, 0); /* scratch space base offset */
OUT_BATCH(batch,
- ((86 - 1) << max_threads_shift) | num_samples |
+ ((render_state->max_wm_threads - 1) << max_threads_shift) | num_samples |
GEN7_PS_PUSH_CONSTANT_ENABLE |
GEN7_PS_ATTRIBUTE_ENABLE |
GEN7_PS_16_DISPATCH_ENABLE);
@@ -3127,6 +3125,25 @@ i965_render_init(VADriverContextP ctx)
4096, 64);
assert(render_state->curbe.bo);
+ if (IS_IVB_GT1(i965->intel.device_id) ||
+ IS_HSW_GT1(i965->intel.device_id)) {
+ render_state->max_wm_threads = 48;
+ } else if (IS_IVB_GT2(i965->intel.device_id) ||
+ IS_HSW_GT2(i965->intel.device_id)) {
+ render_state->max_wm_threads = 172;
+ } else if (IS_SNB_GT1(i965->intel.device_id)) {
+ render_state->max_wm_threads = 40;
+ } else if (IS_SNB_GT2(i965->intel.device_id)) {
+ render_state->max_wm_threads = 80;
+ } else if (IS_IRONLAKE(i965->intel.device_id)) {
+ render_state->max_wm_threads = 72; /* 12 * 6 */
+ } else if (IS_G4X(i965->intel.device_id)) {
+ render_state->max_wm_threads = 50; /* 12 * 5 */
+ } else {
+ /* should never get here !!! */
+ assert(0);
+ }
+
return True;
}
diff --git a/src/i965_render.h b/src/i965_render.h
index c2fc2bf..44a9529 100644
--- a/src/i965_render.h
+++ b/src/i965_render.h
@@ -76,6 +76,8 @@ struct i965_render_state
int pp_flag; /* 0: disable, 1: enable */
struct i965_kernel render_kernels[3];
+
+ int max_wm_threads;
};
Bool i965_render_init(VADriverContextP ctx);
--
1.7.9.5
More information about the Libva
mailing list