sna/gen4+: Begin specialising vertex programs for ISA

Allow use of advanced ISA when available by detecting support at
runtime. This initial work just uses GCC to emit varying ISA, future
work could use hand written code for these hot spots.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
Chris Wilson 2013-02-26 00:02:16 +00:00
parent f095678125
commit 94b95cc2fc
7 changed files with 1123 additions and 36 deletions

View File

@ -52,6 +52,16 @@
#define flatten
#endif
#if defined(__GNUC__) && (__GNUC__ >= 4) /* 4.4 */
#define sse2 __attribute__((target("sse2")))
#define sse4_2 __attribute__((target("sse4.2,sse2")))
#define avx2 __attribute__((target("avx2,sse4.2,sse2")))
#else
#define sse2
#define sse4_2
#define avx2
#endif
#ifdef HAVE_VALGRIND
#define VG(x) x
#else

View File

@ -1945,7 +1945,7 @@ gen4_render_composite(struct sna *sna,
tmp->mask.bo != NULL,
tmp->has_component_alpha,
tmp->is_affine);
tmp->u.gen4.ve_id = gen4_choose_composite_emitter(tmp);
tmp->u.gen4.ve_id = gen4_choose_composite_emitter(sna, tmp);
tmp->blt = gen4_render_composite_blt;
tmp->box = gen4_render_composite_box;
@ -2186,7 +2186,7 @@ gen4_render_composite_spans(struct sna *sna,
tmp->base.has_component_alpha = false;
tmp->base.need_magic_ca_pass = false;
tmp->base.u.gen4.ve_id = gen4_choose_spans_emitter(tmp);
tmp->base.u.gen4.ve_id = gen4_choose_spans_emitter(sna, tmp);
tmp->base.u.gen4.wm_kernel = WM_KERNEL_OPACITY | !tmp->base.is_affine;
tmp->box = gen4_render_composite_spans_box;

File diff suppressed because it is too large Load Diff

View File

@ -10,7 +10,7 @@ void gen4_vertex_flush(struct sna *sna);
int gen4_vertex_finish(struct sna *sna);
void gen4_vertex_close(struct sna *sna);
unsigned gen4_choose_composite_emitter(struct sna_composite_op *tmp);
unsigned gen4_choose_spans_emitter(struct sna_composite_spans_op *tmp);
unsigned gen4_choose_composite_emitter(struct sna *sna, struct sna_composite_op *tmp);
unsigned gen4_choose_spans_emitter(struct sna *sna, struct sna_composite_spans_op *tmp);
#endif /* GEN4_VERTEX_H */

View File

@ -1924,7 +1924,7 @@ gen5_render_composite(struct sna *sna,
tmp->mask.bo != NULL,
tmp->has_component_alpha,
tmp->is_affine);
tmp->u.gen5.ve_id = gen4_choose_composite_emitter(tmp);
tmp->u.gen5.ve_id = gen4_choose_composite_emitter(sna, tmp);
tmp->blt = gen5_render_composite_blt;
tmp->box = gen5_render_composite_box;
@ -2152,7 +2152,7 @@ gen5_render_composite_spans(struct sna *sna,
tmp->base.has_component_alpha = false;
tmp->base.need_magic_ca_pass = false;
tmp->base.u.gen5.ve_id = gen4_choose_spans_emitter(tmp);
tmp->base.u.gen5.ve_id = gen4_choose_spans_emitter(sna, tmp);
tmp->base.u.gen5.wm_kernel = WM_KERNEL_OPACITY | !tmp->base.is_affine;
tmp->box = gen5_render_composite_spans_box;

View File

@ -2272,7 +2272,7 @@ gen6_render_composite(struct sna *sna,
tmp->mask.bo != NULL,
tmp->has_component_alpha,
tmp->is_affine),
gen4_choose_composite_emitter(tmp));
gen4_choose_composite_emitter(sna, tmp));
tmp->blt = gen6_render_composite_blt;
tmp->box = gen6_render_composite_box;
@ -2508,7 +2508,7 @@ gen6_render_composite_spans(struct sna *sna,
SAMPLER_EXTEND_PAD),
gen6_get_blend(tmp->base.op, false, tmp->base.dst.format),
GEN6_WM_KERNEL_OPACITY | !tmp->base.is_affine,
gen4_choose_spans_emitter(tmp));
gen4_choose_spans_emitter(sna, tmp));
tmp->box = gen6_render_composite_spans_box;
tmp->boxes = gen6_render_composite_spans_boxes;

View File

@ -2412,7 +2412,7 @@ gen7_render_composite(struct sna *sna,
tmp->mask.bo != NULL,
tmp->has_component_alpha,
tmp->is_affine),
gen4_choose_composite_emitter(tmp));
gen4_choose_composite_emitter(sna, tmp));
tmp->blt = gen7_render_composite_blt;
tmp->box = gen7_render_composite_box;
@ -2628,7 +2628,7 @@ gen7_render_composite_spans(struct sna *sna,
SAMPLER_EXTEND_PAD),
gen7_get_blend(tmp->base.op, false, tmp->base.dst.format),
GEN7_WM_KERNEL_OPACITY | !tmp->base.is_affine,
gen4_choose_spans_emitter(tmp));
gen4_choose_spans_emitter(sna, tmp));
tmp->box = gen7_render_composite_spans_box;
tmp->boxes = gen7_render_composite_spans_boxes;