xf86-video-intel: 2 commits - src/sna/gen2_render.c src/sna/gen3_render.c src/sna/sna_display.c src/sna/sna_render.h
Chris Wilson
ickle at kemper.freedesktop.org
Thu Dec 27 10:04:51 PST 2012
src/sna/gen2_render.c | 19 +++++++++----------
src/sna/gen3_render.c | 33 ++++++++++++++++-----------------
src/sna/sna_display.c | 7 +++++--
src/sna/sna_render.h | 2 --
4 files changed, 30 insertions(+), 31 deletions(-)
New commits:
commit 583efd4ba067a0a4319e43ebc18dd81ed9c8db0a
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Thu Dec 27 17:59:59 2012 +0000
sna: Sanity check config->compat_output
In a headless setup this may be left initialised to -1.
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c
index 48b53a7..2f8e6df 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -1312,9 +1312,12 @@ sna_crtc_dpms(xf86CrtcPtr crtc, int mode)
void sna_mode_adjust_frame(struct sna *sna, int x, int y)
{
xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(sna->scrn);
- xf86OutputPtr output = config->output[config->compat_output];
- xf86CrtcPtr crtc = output->crtc;
+ xf86CrtcPtr crtc;
+
+ if ((unsigned)config->compat_output >= config->num_output)
+ return;
+ crtc = config->output[config->compat_output]->crtc;
if (crtc && crtc->enabled) {
int saved_x = crtc->x;
int saved_y = crtc->y;
commit 7725df8aa1b3eab97618311e3f24769a318bd804
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Thu Dec 27 14:01:59 2012 +0000
sna/gen2,3: Remove gen-specific vertex_offset
Remove the duplication of vertex_offset in favour of the common
vertex_offset.
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/gen2_render.c b/src/sna/gen2_render.c
index 8e26ecd..4bde17d 100644
--- a/src/sna/gen2_render.c
+++ b/src/sna/gen2_render.c
@@ -584,7 +584,7 @@ static void gen2_emit_target(struct sna *sna, const struct sna_composite_op *op)
{
assert(!too_large(op->dst.width, op->dst.height));
assert(op->dst.bo->pitch >= 8 && op->dst.bo->pitch <= MAX_3D_PITCH);
- assert(sna->render_state.gen2.vertex_offset == 0);
+ assert(sna->render.vertex_offset == 0);
if (sna->render_state.gen2.target == op->dst.bo->unique_id) {
kgem_bo_mark_dirty(op->dst.bo);
@@ -975,7 +975,7 @@ static void gen2_magic_ca_pass(struct sna *sna,
return;
DBG(("%s: batch=%x, vertex=%x\n", __FUNCTION__,
- sna->kgem.nbatch, sna->render_state.gen2.vertex_offset));
+ sna->kgem.nbatch, sna->render.vertex_offset));
assert(op->mask.bo);
assert(op->has_component_alpha);
@@ -994,7 +994,7 @@ static void gen2_magic_ca_pass(struct sna *sna,
BATCH(ablend);
sna->render_state.gen2.ls2 = 0;
- src = sna->kgem.batch + sna->render_state.gen2.vertex_offset;
+ src = sna->kgem.batch + sna->render.vertex_offset;
dst = sna->kgem.batch + sna->kgem.nbatch;
n = 1 + sna->render.vertex_index;
sna->kgem.nbatch += n;
@@ -1009,12 +1009,12 @@ static void gen2_vertex_flush(struct sna *sna,
if (sna->render.vertex_index == 0)
return;
- sna->kgem.batch[sna->render_state.gen2.vertex_offset] |=
+ sna->kgem.batch[sna->render.vertex_offset] |=
sna->render.vertex_index - 1;
gen2_magic_ca_pass(sna, op);
- sna->render_state.gen2.vertex_offset = 0;
+ sna->render.vertex_offset = 0;
sna->render.vertex_index = 0;
}
@@ -1022,7 +1022,6 @@ inline static int gen2_get_rectangles(struct sna *sna,
const struct sna_composite_op *op,
int want)
{
- struct gen2_render_state *state = &sna->render_state.gen2;
int rem = batch_space(sna), size, need;
DBG(("%s: want=%d, floats_per_vertex=%d, rem=%d\n",
@@ -1046,17 +1045,17 @@ inline static int gen2_get_rectangles(struct sna *sna,
}
rem -= need;
- if (state->vertex_offset == 0) {
+ if (sna->render.vertex_offset == 0) {
if ((sna->kgem.batch[sna->kgem.nbatch-1] & ~0xffff) ==
(PRIM3D_INLINE | PRIM3D_RECTLIST)) {
uint32_t *b = &sna->kgem.batch[sna->kgem.nbatch-1];
assert(*b & 0xffff);
sna->render.vertex_index = 1 + (*b & 0xffff);
*b = PRIM3D_INLINE | PRIM3D_RECTLIST;
- state->vertex_offset = sna->kgem.nbatch - 1;
+ sna->render.vertex_offset = sna->kgem.nbatch - 1;
assert(!op->need_magic_ca_pass);
} else {
- state->vertex_offset = sna->kgem.nbatch;
+ sna->render.vertex_offset = sna->kgem.nbatch;
BATCH(PRIM3D_INLINE | PRIM3D_RECTLIST);
}
}
@@ -3191,7 +3190,6 @@ gen2_render_reset(struct sna *sna)
{
sna->render_state.gen2.need_invariant = true;
sna->render_state.gen2.logic_op_enabled = 0;
- sna->render_state.gen2.vertex_offset = 0;
sna->render_state.gen2.target = 0;
sna->render_state.gen2.ls1 = 0;
@@ -3206,6 +3204,7 @@ static void
gen2_render_flush(struct sna *sna)
{
assert(sna->render.vertex_index == 0);
+ assert(sna->render.vertex_offset == 0);
}
static void
diff --git a/src/sna/gen3_render.c b/src/sna/gen3_render.c
index a75efba..2c79beb 100644
--- a/src/sna/gen3_render.c
+++ b/src/sna/gen3_render.c
@@ -1593,19 +1593,19 @@ static void gen3_magic_ca_pass(struct sna *sna,
static void gen3_vertex_flush(struct sna *sna)
{
- assert(sna->render_state.gen3.vertex_offset);
+ assert(sna->render.vertex_offset);
DBG(("%s[%x] = %d\n", __FUNCTION__,
- 4*sna->render_state.gen3.vertex_offset,
+ 4*sna->render.vertex_offset,
sna->render.vertex_index - sna->render.vertex_start));
- sna->kgem.batch[sna->render_state.gen3.vertex_offset] =
+ sna->kgem.batch[sna->render.vertex_offset] =
PRIM3D_RECTLIST | PRIM3D_INDIRECT_SEQUENTIAL |
(sna->render.vertex_index - sna->render.vertex_start);
- sna->kgem.batch[sna->render_state.gen3.vertex_offset + 1] =
+ sna->kgem.batch[sna->render.vertex_offset + 1] =
sna->render.vertex_start;
- sna->render_state.gen3.vertex_offset = 0;
+ sna->render.vertex_offset = 0;
}
static int gen3_vertex_finish(struct sna *sna)
@@ -1620,7 +1620,7 @@ static int gen3_vertex_finish(struct sna *sna)
bo = sna->render.vbo;
if (bo) {
- if (sna->render_state.gen3.vertex_offset)
+ if (sna->render.vertex_offset)
gen3_vertex_flush(sna);
DBG(("%s: reloc = %d\n", __FUNCTION__,
@@ -1665,7 +1665,7 @@ static void gen3_vertex_close(struct sna *sna)
struct kgem_bo *bo, *free_bo = NULL;
unsigned int delta = 0;
- assert(sna->render_state.gen3.vertex_offset == 0);
+ assert(sna->render.vertex_offset == 0);
DBG(("%s: used=%d/%d, vbo active? %d\n",
__FUNCTION__, sna->render.vertex_used, sna->render.vertex_size,
@@ -1771,13 +1771,13 @@ static bool gen3_rectangle_begin(struct sna *sna,
if (sna->kgem.nbatch == 2 + state->last_vertex_offset &&
!op->need_magic_ca_pass) {
- state->vertex_offset = state->last_vertex_offset;
+ sna->render.vertex_offset = state->last_vertex_offset;
} else {
- state->vertex_offset = sna->kgem.nbatch;
+ sna->render.vertex_offset = sna->kgem.nbatch;
OUT_BATCH(MI_NOOP); /* to be filled later */
OUT_BATCH(MI_NOOP);
sna->render.vertex_start = sna->render.vertex_index;
- state->last_vertex_offset = state->vertex_offset;
+ state->last_vertex_offset = sna->render.vertex_offset;
}
return true;
@@ -1818,7 +1818,7 @@ start:
goto flush;
}
- if (unlikely(sna->render_state.gen3.vertex_offset == 0 &&
+ if (unlikely(sna->render.vertex_offset == 0 &&
!gen3_rectangle_begin(sna, op)))
goto flush;
@@ -1832,7 +1832,7 @@ start:
flush:
DBG(("%s: flushing batch\n", __FUNCTION__));
- if (sna->render_state.gen3.vertex_offset) {
+ if (sna->render.vertex_offset) {
gen3_vertex_flush(sna);
gen3_magic_ca_pass(sna, op);
}
@@ -1923,7 +1923,7 @@ gen3_render_composite_done(struct sna *sna,
{
DBG(("%s()\n", __FUNCTION__));
- if (sna->render_state.gen3.vertex_offset) {
+ if (sna->render.vertex_offset) {
gen3_vertex_flush(sna);
gen3_magic_ca_pass(sna, op);
}
@@ -1967,7 +1967,6 @@ gen3_render_reset(struct sna *sna)
state->floats_per_vertex = 0;
state->last_floats_per_vertex = 0;
state->last_vertex_offset = 0;
- state->vertex_offset = 0;
if (sna->render.vbo != NULL &&
!kgem_bo_is_mappable(&sna->kgem, sna->render.vbo)) {
@@ -3352,7 +3351,7 @@ fastcall static void
gen3_render_composite_spans_done(struct sna *sna,
const struct sna_composite_spans_op *op)
{
- if (sna->render_state.gen3.vertex_offset)
+ if (sna->render.vertex_offset)
gen3_vertex_flush(sna);
DBG(("%s()\n", __FUNCTION__));
@@ -4204,7 +4203,7 @@ gen3_render_copy_blt(struct sna *sna,
static void
gen3_render_copy_done(struct sna *sna, const struct sna_copy_op *op)
{
- if (sna->render_state.gen3.vertex_offset)
+ if (sna->render.vertex_offset)
gen3_vertex_flush(sna);
}
@@ -4497,7 +4496,7 @@ gen3_render_fill_op_boxes(struct sna *sna,
static void
gen3_render_fill_op_done(struct sna *sna, const struct sna_fill_op *op)
{
- if (sna->render_state.gen3.vertex_offset)
+ if (sna->render.vertex_offset)
gen3_vertex_flush(sna);
}
diff --git a/src/sna/sna_render.h b/src/sna/sna_render.h
index 51f155a..d116e40 100644
--- a/src/sna/sna_render.h
+++ b/src/sna/sna_render.h
@@ -309,7 +309,6 @@ struct gen2_render_state {
uint32_t ls1, ls2, vft;
uint32_t diffuse;
uint32_t specular;
- uint16_t vertex_offset;
};
struct gen3_render_state {
@@ -325,7 +324,6 @@ struct gen3_render_state {
uint32_t last_diffuse;
uint32_t last_specular;
- uint16_t vertex_offset;
uint16_t last_vertex_offset;
uint16_t floats_per_vertex;
uint16_t last_floats_per_vertex;
More information about the xorg-commit
mailing list