sna/gen9: Quick and dirty implementation

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
Chris Wilson 2016-04-06 15:38:19 +01:00
parent ff0ab2c2ea
commit 4e172a38e1
6 changed files with 5290 additions and 2 deletions

View File

@ -107,6 +107,8 @@ libsna_la_SOURCES = \
gen8_render.h \
gen8_vertex.c \
gen8_vertex.h \
gen9_render.c \
gen9_render.h \
xassert.h \
$(NULL)

4099
src/sna/gen9_render.c Normal file

File diff suppressed because it is too large Load Diff

1129
src/sna/gen9_render.h Normal file

File diff suppressed because it is too large Load Diff

View File

@ -406,6 +406,7 @@ struct sna {
struct gen6_render_state gen6;
struct gen7_render_state gen7;
struct gen8_render_state gen8;
struct gen9_render_state gen9;
} render_state;
/* Broken-out options. */

View File

@ -18015,8 +18015,7 @@ static bool sna_option_accel_blt(struct sna *sna)
{
const char *s;
if (sna->kgem.gen >= 0110)
return true;
assert(sna->kgem.gen < 0120);
s = xf86GetOptValString(sna->Options, OPTION_ACCEL_METHOD);
if (s == NULL)
@ -18108,6 +18107,8 @@ bool sna_accel_init(ScreenPtr screen, struct sna *sna)
sna_render_mark_wedged(sna);
} else if (sna_option_accel_blt(sna))
(void)backend;
else if (sna->kgem.gen >= 0110)
backend = gen9_render_init(sna, backend);
else if (sna->kgem.gen >= 0100)
backend = gen8_render_init(sna, backend);
else if (sna->kgem.gen >= 070)

View File

@ -148,6 +148,10 @@ struct sna_composite_op {
struct {
uint32_t flags;
} gen8;
struct {
uint32_t flags;
} gen9;
} u;
void *priv;
@ -570,6 +574,57 @@ struct gen8_render_state {
bool emit_flush;
};
enum {
GEN9_WM_KERNEL_NOMASK = 0,
GEN9_WM_KERNEL_NOMASK_P,
GEN9_WM_KERNEL_MASK,
GEN9_WM_KERNEL_MASK_P,
GEN9_WM_KERNEL_MASKCA,
GEN9_WM_KERNEL_MASKCA_P,
GEN9_WM_KERNEL_MASKSA,
GEN9_WM_KERNEL_MASKSA_P,
GEN9_WM_KERNEL_OPACITY,
GEN9_WM_KERNEL_OPACITY_P,
GEN9_WM_KERNEL_VIDEO_PLANAR,
GEN9_WM_KERNEL_VIDEO_PACKED,
GEN9_WM_KERNEL_VIDEO_RGB,
GEN9_WM_KERNEL_COUNT
};
struct gen9_render_state {
unsigned gt;
const struct gt_info *info;
struct kgem_bo *general_bo;
uint32_t vs_state;
uint32_t sf_state;
uint32_t sf_mask_state;
uint32_t wm_state;
uint32_t wm_kernel[GEN9_WM_KERNEL_COUNT][3];
uint32_t cc_blend;
uint32_t drawrect_offset;
uint32_t drawrect_limit;
uint32_t blend;
uint32_t samplers;
uint32_t kernel;
uint16_t num_sf_outputs;
uint16_t ve_id;
uint16_t last_primitive;
int16_t floats_per_vertex;
uint16_t surface_table;
bool needs_invariant;
bool emit_flush;
};
struct sna_static_stream {
uint32_t size, used;
uint8_t *data;
@ -625,6 +680,7 @@ const char *gen5_render_init(struct sna *sna, const char *backend);
const char *gen6_render_init(struct sna *sna, const char *backend);
const char *gen7_render_init(struct sna *sna, const char *backend);
const char *gen8_render_init(struct sna *sna, const char *backend);
const char *gen9_render_init(struct sna *sna, const char *backend);
void sna_render_mark_wedged(struct sna *sna);