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:
parent
f095678125
commit
94b95cc2fc
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue