xf86-video-intel: 14 commits - src/i965_render.c src/intel_display.c src/intel_dri.c src/intel.h src/intel_video.c src/legacy/i810 src/sna/gen4_render.c src/sna/gen5_render.c src/sna/gen6_render.c src/sna/gen7_render.c src/sna/sna_display.c src/sna/sna_gradient.c src/sna/sna.h src/sna/sna_transform.c src/sna/sna_video_textured.c

Chris Wilson ickle at kemper.freedesktop.org
Sat Jun 2 00:41:59 PDT 2012


 src/i965_render.c            |  179 +++++++++++++++++++++++++++----------------
 src/intel.h                  |   17 ++--
 src/intel_display.c          |    2 
 src/intel_dri.c              |    2 
 src/intel_video.c            |   11 +-
 src/legacy/i810/i810_dri.c   |    9 +-
 src/legacy/i810/i810_video.c |   40 ++++-----
 src/sna/gen4_render.c        |   86 +++++++++-----------
 src/sna/gen5_render.c        |   87 +++++++++-----------
 src/sna/gen6_render.c        |    4 
 src/sna/gen7_render.c        |    4 
 src/sna/sna.h                |    2 
 src/sna/sna_display.c        |    2 
 src/sna/sna_gradient.c       |   21 ++++-
 src/sna/sna_transform.c      |   18 ++--
 src/sna/sna_video_textured.c |    2 
 16 files changed, 269 insertions(+), 217 deletions(-)

New commits:
commit 1be2afb81df887ed664ac31d0641da808cfb8888
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Sat Jun 2 08:04:02 2012 +0100

    legacy/i810/video: Release memory after creating adaptors
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/legacy/i810/i810_video.c b/src/legacy/i810/i810_video.c
index 2999ee0..729aa8b 100644
--- a/src/legacy/i810/i810_video.c
+++ b/src/legacy/i810/i810_video.c
@@ -155,40 +155,34 @@ static Atom xvBrightness, xvContrast, xvColorKey;
 void I810InitVideo(ScreenPtr screen)
 {
     ScrnInfoPtr pScrn = xf86ScreenToScrn(screen);
-    XF86VideoAdaptorPtr *adaptors, *newAdaptors = NULL;
-    XF86VideoAdaptorPtr newAdaptor = NULL;
+    XF86VideoAdaptorPtr *adaptors;
     int num_adaptors;
-	
-    if (pScrn->bitsPerPixel != 8) 
-    {
+
+    num_adaptors = xf86XVListGenericAdaptors(pScrn, &adaptors);
+
+    if (pScrn->bitsPerPixel != 8) {
+	XF86VideoAdaptorPtr newAdaptor;
+
 	newAdaptor = I810SetupImageVideo(screen);
 	I810InitOffscreenImages(screen);
-    }
 
-    num_adaptors = xf86XVListGenericAdaptors(pScrn, &adaptors);
+	if (newAdaptor) {
+	    XF86VideoAdaptorPtr *newAdaptors;
 
-    if(newAdaptor) {
-	if(!num_adaptors) {
-	    num_adaptors = 1;
-	    adaptors = &newAdaptor;
-	} else {
-	    newAdaptors =  /* need to free this someplace */
-		malloc((num_adaptors + 1) * sizeof(XF86VideoAdaptorPtr*));
-	    if(newAdaptors) {
-		memcpy(newAdaptors, adaptors, num_adaptors * 
-					sizeof(XF86VideoAdaptorPtr));
-		newAdaptors[num_adaptors] = newAdaptor;
+	    newAdaptors =
+		realloc(adaptors,
+			(num_adaptors + 1) * sizeof(XF86VideoAdaptorPtr));
+	    if (newAdaptors != NULL) {
+		newAdaptors[num_adaptors++] = newAdaptor;
 		adaptors = newAdaptors;
-		num_adaptors++;
 	    }
 	}
     }
 
-    if(num_adaptors)
-        xf86XVScreenInit(screen, adaptors, num_adaptors);
+    if (num_adaptors)
+	xf86XVScreenInit(screen, adaptors, num_adaptors);
 
-    if(newAdaptors)
-	free(newAdaptors);
+    free(adaptors);
 }
 
 /* *INDENT-OFF* */
commit 261d086265fff6c9b28a67d2fcceed8f107d5cb0
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Fri Jun 1 23:22:31 2012 +0100

    legacy/i810/dri: Propagate failure from allocating texture memory
    
    Reported-by: Zdenek Kabelac <zkabelac at redhat.com>
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/legacy/i810/i810_dri.c b/src/legacy/i810/i810_dri.c
index 2b3f1e1..28a3b91 100644
--- a/src/legacy/i810/i810_dri.c
+++ b/src/legacy/i810/i810_dri.c
@@ -809,7 +809,12 @@ I810DRIScreenInit(ScreenPtr pScreen)
       return FALSE;
    }
 
-   I810AllocLow(&(pI810->TexMem), &(pI810->SysMem), pI810DRI->textureSize);
+   if (!I810AllocLow(&(pI810->TexMem), &(pI810->SysMem), pI810DRI->textureSize)) {
+      xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+		 "[agp] Texure memory allocation failed\n");
+      DRICloseScreen(pScreen);
+      return FALSE;
+   }
 
    if (drmAddMap(pI810->drmSubFD, (drm_handle_t) pI810->TexMem.Start,
 		 pI810->TexMem.Size, DRM_AGP, 0, 
commit 2ea12b56d42686f75deb33fc126d09acee7e2899
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Fri Jun 1 23:22:31 2012 +0100

    legacy/i810: Fix memset(sizeof(*ptr)) rather than memset(sizeof(ptr))
    
    Clear the entire structure and not the first 4 bytes...
    
    Reported-by: Zdenek Kabelac <zkabelac at redhat.com>
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/legacy/i810/i810_dri.c b/src/legacy/i810/i810_dri.c
index 2f02dd9..2b3f1e1 100644
--- a/src/legacy/i810/i810_dri.c
+++ b/src/legacy/i810/i810_dri.c
@@ -959,7 +959,7 @@ I810DRIFinishScreenInit(ScreenPtr pScreen)
    ScrnInfoPtr        pScrn = xf86ScreenToScrn(pScreen);
    I810Ptr info  = I810PTR(pScrn);
 
-   memset(sPriv, 0, sizeof(sPriv));
+   memset(sPriv, 0, sizeof(*sPriv));
 
    /* Have shadow run only while there is 3d active.
     */
commit d3e15d1460faad192781d74fdc2b5092e9c148ad
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Sat Jun 2 08:14:23 2012 +0100

    uxa/i965: Make the unhandled allocation failures explicit
    
    Add assertions to the point of allocation and write failures.
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/i965_render.c b/src/i965_render.c
index f9d3158..508a846 100644
--- a/src/i965_render.c
+++ b/src/i965_render.c
@@ -778,13 +778,16 @@ static drm_intel_bo *gen4_create_sf_state(intel_screen_private *intel,
 {
 	struct brw_sf_unit_state *sf_state;
 	drm_intel_bo *sf_state_bo;
+	int ret;
 
 	sf_state_bo = drm_intel_bo_alloc(intel->bufmgr, "gen4 SF state",
 					 sizeof(*sf_state), 4096);
-	drm_intel_bo_map(sf_state_bo, TRUE);
-	sf_state = sf_state_bo->virtual;
+	assert(sf_state_bo);
 
-	memset(sf_state, 0, sizeof(*sf_state));
+	ret = drm_intel_bo_map(sf_state_bo, TRUE);
+	assert(ret == 0);
+
+	sf_state = memset(sf_state_bo->virtual, 0, sizeof(*sf_state));
 	sf_state->thread0.grf_reg_count = BRW_GRF_BLOCKS(SF_KERNEL_NUM_GRF);
 	sf_state->thread0.kernel_start_pointer =
 	    intel_emit_reloc(sf_state_bo,
@@ -820,6 +823,7 @@ static drm_intel_bo *gen4_create_sf_state(intel_screen_private *intel,
 	drm_intel_bo_unmap(sf_state_bo);
 
 	return sf_state_bo;
+	(void)ret;
 }
 
 static drm_intel_bo *sampler_border_color_create(intel_screen_private *intel)
@@ -982,11 +986,16 @@ static drm_intel_bo *gen4_create_sampler_state(intel_screen_private *intel,
 {
 	drm_intel_bo *sampler_state_bo;
 	struct brw_sampler_state *sampler_state;
+	int ret;
 
 	sampler_state_bo =
 	    drm_intel_bo_alloc(intel->bufmgr, "gen4 sampler state",
 			       sizeof(struct brw_sampler_state) * 2, 4096);
-	drm_intel_bo_map(sampler_state_bo, TRUE);
+	assert(sampler_state_bo);
+
+	ret = drm_intel_bo_map(sampler_state_bo, TRUE);
+	assert(ret == 0);
+
 	sampler_state = sampler_state_bo->virtual;
 
 	gen4_sampler_state_init(sampler_state_bo,
@@ -999,6 +1008,7 @@ static drm_intel_bo *gen4_create_sampler_state(intel_screen_private *intel,
 	drm_intel_bo_unmap(sampler_state_bo);
 
 	return sampler_state_bo;
+	(void)ret;
 }
 
 static drm_intel_bo *
@@ -1011,11 +1021,16 @@ gen7_create_sampler_state(intel_screen_private *intel,
 {
 	drm_intel_bo *sampler_state_bo;
 	struct gen7_sampler_state *sampler_state;
+	int ret;
 
 	sampler_state_bo =
 	    drm_intel_bo_alloc(intel->bufmgr, "gen7 sampler state",
 			       sizeof(struct gen7_sampler_state) * 2, 4096);
-	drm_intel_bo_map(sampler_state_bo, TRUE);
+	assert(sampler_state_bo);
+
+	ret = drm_intel_bo_map(sampler_state_bo, TRUE);
+	assert(ret == 0);
+
 	sampler_state = sampler_state_bo->virtual;
 
 	gen7_sampler_state_init(sampler_state_bo,
@@ -1028,6 +1043,7 @@ gen7_create_sampler_state(intel_screen_private *intel,
 	drm_intel_bo_unmap(sampler_state_bo);
 
 	return sampler_state_bo;
+	(void)ret;
 }
 
 static inline drm_intel_bo *
@@ -1096,13 +1112,16 @@ static drm_intel_bo *gen4_create_wm_state(intel_screen_private *intel,
 {
 	struct brw_wm_unit_state *state;
 	drm_intel_bo *wm_state_bo;
+	int ret;
 
 	wm_state_bo = drm_intel_bo_alloc(intel->bufmgr, "gen4 WM state",
 					 sizeof(*state), 4096);
-	drm_intel_bo_map(wm_state_bo, TRUE);
-	state = wm_state_bo->virtual;
+	assert(wm_state_bo);
 
-	memset(state, 0, sizeof(*state));
+	ret = drm_intel_bo_map(wm_state_bo, TRUE);
+	assert(ret == 0);
+
+	state = memset(wm_state_bo->virtual, 0, sizeof(*state));
 	state->thread0.grf_reg_count = BRW_GRF_BLOCKS(PS_KERNEL_NUM_GRF);
 	state->thread0.kernel_start_pointer =
 	    intel_emit_reloc(wm_state_bo,
@@ -1162,21 +1181,27 @@ static drm_intel_bo *gen4_create_wm_state(intel_screen_private *intel,
 	drm_intel_bo_unmap(wm_state_bo);
 
 	return wm_state_bo;
+	(void)ret;
 }
 
 static drm_intel_bo *gen4_create_cc_viewport(intel_screen_private *intel)
 {
 	drm_intel_bo *bo;
 	struct brw_cc_viewport vp;
+	int ret;
 
 	vp.min_depth = -1.e35;
 	vp.max_depth = 1.e35;
 
 	bo = drm_intel_bo_alloc(intel->bufmgr, "gen4 render unit state",
 				sizeof(vp), 4096);
-	drm_intel_bo_subdata(bo, 0, sizeof(vp), &vp);
+	assert(bo);
+
+	ret = drm_intel_bo_subdata(bo, 0, sizeof(vp), &vp);
+	assert(ret == 0);
 
 	return bo;
+	(void)ret;
 }
 
 static drm_intel_bo *gen4_create_vs_unit_state(intel_screen_private *intel)
@@ -1204,14 +1229,18 @@ static drm_intel_bo *gen4_create_vs_unit_state(intel_screen_private *intel)
 static drm_intel_bo *gen4_create_cc_unit_state(intel_screen_private *intel)
 {
 	drm_intel_bo *cc_state_bo, *cc_vp_bo;
-	int i, j;
+	int i, j, ret;
 
 	cc_vp_bo = gen4_create_cc_viewport(intel);
 
 	cc_state_bo = drm_intel_bo_alloc(intel->bufmgr, "gen4 CC state",
 					 sizeof(struct gen4_cc_unit_state),
 					 4096);
-	drm_intel_bo_map(cc_state_bo, TRUE);
+	assert(cc_state_bo);
+
+	ret = drm_intel_bo_map(cc_state_bo, TRUE);
+	assert(ret == 0);
+
 	for (i = 0; i < BRW_BLENDFACTOR_COUNT; i++) {
 		for (j = 0; j < BRW_BLENDFACTOR_COUNT; j++) {
 			cc_state_init(cc_state_bo,
@@ -1225,6 +1254,7 @@ static drm_intel_bo *gen4_create_cc_unit_state(intel_screen_private *intel)
 	drm_intel_bo_unreference(cc_vp_bo);
 
 	return cc_state_bo;
+	(void)ret;
 }
 
 static uint32_t i965_get_card_format(PicturePtr picture)
@@ -1724,9 +1754,12 @@ static Bool i965_composite_check_aperture(intel_screen_private *intel)
 
 static void i965_surface_flush(struct intel_screen_private *intel)
 {
-	drm_intel_bo_subdata(intel->surface_bo,
-			     0, intel->surface_used,
-			     intel->surface_data);
+	int ret;
+
+	ret = drm_intel_bo_subdata(intel->surface_bo,
+				   0, intel->surface_used,
+				   intel->surface_data);
+	assert(ret == 0);
 	intel->surface_used = 0;
 
 	assert (intel->surface_reloc != 0);
@@ -1740,6 +1773,10 @@ static void i965_surface_flush(struct intel_screen_private *intel)
 	intel->surface_bo =
 		drm_intel_bo_alloc(intel->bufmgr, "surface data",
 				   sizeof(intel->surface_data), 4096);
+	assert(intel->surface_bo);
+
+	return;
+	(void)ret;
 }
 
 static void
@@ -2297,6 +2334,8 @@ void gen4_render_state_init(ScrnInfoPtr scrn)
 	intel->surface_bo =
 		drm_intel_bo_alloc(intel->bufmgr, "surface data",
 				   sizeof(intel->surface_data), 4096);
+	assert(intel->surface_bo);
+
 	intel->surface_used = 0;
 
 	if (intel->gen4_render_state == NULL)
@@ -2433,14 +2472,18 @@ gen6_composite_create_cc_state(intel_screen_private *intel)
 {
 	struct gen6_color_calc_state *state;
 	drm_intel_bo *cc_bo;
+	int ret;
 
 	cc_bo = drm_intel_bo_alloc(intel->bufmgr,
 				"gen6 CC state",
 				sizeof(*state),
 				4096);
-	drm_intel_bo_map(cc_bo, TRUE);
-	state = cc_bo->virtual;
-	memset(state, 0, sizeof(*state));
+	assert(cc_bo);
+
+	ret = drm_intel_bo_map(cc_bo, TRUE);
+	assert(ret == 0);
+
+	state = memset(cc_bo->virtual, 0, sizeof(*state));
 	state->constant_r = 1.0;
 	state->constant_g = 0.0;
 	state->constant_b = 1.0;
@@ -2448,21 +2491,25 @@ gen6_composite_create_cc_state(intel_screen_private *intel)
 	drm_intel_bo_unmap(cc_bo);
 
 	return cc_bo;
+	(void)ret;
 }
 
 static drm_intel_bo *
 gen6_composite_create_blend_state(intel_screen_private *intel)
 {
 	drm_intel_bo *blend_bo;
-	int src, dst;
+	int src, dst, ret;
 
 	blend_bo = drm_intel_bo_alloc(intel->bufmgr,
 				"gen6 BLEND state",
 				BRW_BLENDFACTOR_COUNT * BRW_BLENDFACTOR_COUNT * GEN6_BLEND_STATE_PADDED_SIZE,
 				4096);
-	drm_intel_bo_map(blend_bo, TRUE);
-	memset(blend_bo->virtual, 0, blend_bo->size);
+	assert(blend_bo);
 
+	ret = drm_intel_bo_map(blend_bo, TRUE);
+	assert(ret == 0);
+
+	memset(blend_bo->virtual, 0, blend_bo->size);
 	for (src = 0; src < BRW_BLENDFACTOR_COUNT; src++) {
 		for (dst = 0; dst < BRW_BLENDFACTOR_COUNT; dst++) {
 			uint32_t blend_state_offset = (src * BRW_BLENDFACTOR_COUNT + dst) * GEN6_BLEND_STATE_PADDED_SIZE;
@@ -2481,6 +2528,7 @@ gen6_composite_create_blend_state(intel_screen_private *intel)
 
 	drm_intel_bo_unmap(blend_bo);
 	return blend_bo;
+	(void)ret;
 }
 
 static drm_intel_bo *
@@ -2488,17 +2536,22 @@ gen6_composite_create_depth_stencil_state(intel_screen_private *intel)
 {
 	struct gen6_depth_stencil_state *state;
 	drm_intel_bo *depth_stencil_bo;
+	int ret;
 
 	depth_stencil_bo = drm_intel_bo_alloc(intel->bufmgr,
 					"gen6 DEPTH_STENCIL state",
 					sizeof(*state),
 					4096);
-	drm_intel_bo_map(depth_stencil_bo, TRUE);
-	state = depth_stencil_bo->virtual;
-	memset(state, 0, sizeof(*state));
+	assert(depth_stencil_bo);
+
+	ret = drm_intel_bo_map(depth_stencil_bo, TRUE);
+	assert(ret == 0);
+
+	state = memset(depth_stencil_bo->virtual, 0, sizeof(*state));
 	drm_intel_bo_unmap(depth_stencil_bo);
 
 	return depth_stencil_bo;
+	(void)ret;
 }
 
 static void
diff --git a/src/intel.h b/src/intel.h
index 9e9de04..20d8282 100644
--- a/src/intel.h
+++ b/src/intel.h
@@ -601,11 +601,16 @@ static inline drm_intel_bo *intel_bo_alloc_for_data(intel_screen_private *intel,
 						    const char *name)
 {
 	drm_intel_bo *bo;
+	int ret;
 
 	bo = drm_intel_bo_alloc(intel->bufmgr, name, size, 4096);
-	if (bo)
-		drm_intel_bo_subdata(bo, 0, size, data);
+	assert(bo);
+
+	ret = drm_intel_bo_subdata(bo, 0, size, data);
+	assert(ret == 0);
+
 	return bo;
+	(void)ret;
 }
 
 void intel_debug_flush(ScrnInfoPtr scrn);
commit 46fbb3d31bf73df4bd0259a146e9929f62a9c488
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Fri Jun 1 23:22:31 2012 +0100

    uxa: NameForAtom may return NULL
    
    Reported-by: Zdenek Kabelac <zkabelac at redhat.com>
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/intel_display.c b/src/intel_display.c
index 89f7259..609cbf7 100644
--- a/src/intel_display.c
+++ b/src/intel_display.c
@@ -1176,6 +1176,8 @@ intel_output_set_property(xf86OutputPtr output, Atom property,
 				return FALSE;
 			memcpy(&atom, value->data, 4);
 			name = NameForAtom(atom);
+			if (name == NULL)
+				return FALSE;
 
 			/* search for matching name string, then set its value down */
 			for (j = 0; j < p->mode_prop->count_enums; j++) {
commit 8451d5dd3c992bcfad9f71aa890b6b225884b978
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Fri Jun 1 23:22:31 2012 +0100

    uxa: Use unsigned bitfields for single bits
    
    Reported-by: Zdenek Kabelac <zkabelac at redhat.com>
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/intel.h b/src/intel.h
index 4bdeab3..9e9de04 100644
--- a/src/intel.h
+++ b/src/intel.h
@@ -88,9 +88,9 @@ struct intel_pixmap {
 	uint16_t stride;
 	uint8_t tiling;
 	int8_t busy :2;
-	int8_t dirty :1;
-	int8_t offscreen :1;
-	int8_t pinned :1;
+	uint8_t dirty :1;
+	uint8_t offscreen :1;
+	uint8_t pinned :1;
 };
 
 #if HAS_DEVPRIVATEKEYREC
commit d66ca06865973833398560a04186e0067d9cb206
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Fri Jun 1 23:22:31 2012 +0100

    uxa: Intialize is_glamor_pixmap
    
    It is not clear whether is_glamor_pixmap is always initialized prior to
    use, so set it to a safe^W likely value.
    
    Reported-by: Zdenek Kabelac <zkabelac at redhat.com>
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/intel_dri.c b/src/intel_dri.c
index 2a95edb..389ecdd 100644
--- a/src/intel_dri.c
+++ b/src/intel_dri.c
@@ -263,8 +263,8 @@ I830DRI2CreateBuffers(DrawablePtr drawable, unsigned int *attachments,
 	DRI2BufferPtr buffers;
 	I830DRI2BufferPrivatePtr privates;
 	PixmapPtr pixmap, pDepthPixmap;
+	int is_glamor_pixmap = FALSE;
 	int i;
-	int is_glamor_pixmap;
 
 	buffers = calloc(count, sizeof *buffers);
 	if (buffers == NULL)
commit 25a17b2ca5e3945150151c4308761891c0e20bab
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Fri Jun 1 23:22:31 2012 +0100

    uxa: Remove 'render_source_is_solid' dead code
    
    Reported-by: Zdenek Kabelac <zkabelac at redhat.com>
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/i965_render.c b/src/i965_render.c
index 98231b8..f9d3158 100644
--- a/src/i965_render.c
+++ b/src/i965_render.c
@@ -1847,47 +1847,45 @@ i965_emit_composite_primitive(intel_screen_private *intel,
 	float src_x[3], src_y[3], src_w[3], mask_x[3], mask_y[3], mask_w[3];
 	Bool is_affine = intel->gen4_render_state->composite_op.is_affine;
 
-	if (! intel->render_source_is_solid) {
-		if (is_affine) {
-			if (!intel_get_transformed_coordinates(srcX, srcY,
-							      intel->transform[0],
-							      &src_x[0],
-							      &src_y[0]))
-				return;
-
-			if (!intel_get_transformed_coordinates(srcX, srcY + h,
-							      intel->transform[0],
-							      &src_x[1],
-							      &src_y[1]))
-				return;
-
-			if (!intel_get_transformed_coordinates(srcX + w, srcY + h,
-							      intel->transform[0],
-							      &src_x[2],
-							      &src_y[2]))
-				return;
-		} else {
-			if (!intel_get_transformed_coordinates_3d(srcX, srcY,
-								 intel->transform[0],
-								 &src_x[0],
-								 &src_y[0],
-								 &src_w[0]))
-				return;
-
-			if (!intel_get_transformed_coordinates_3d(srcX, srcY + h,
-								 intel->transform[0],
-								 &src_x[1],
-								 &src_y[1],
-								 &src_w[1]))
-				return;
-
-			if (!intel_get_transformed_coordinates_3d(srcX + w, srcY + h,
-								 intel->transform[0],
-								 &src_x[2],
-								 &src_y[2],
-								 &src_w[2]))
-				return;
-		}
+	if (is_affine) {
+		if (!intel_get_transformed_coordinates(srcX, srcY,
+						       intel->transform[0],
+						       &src_x[0],
+						       &src_y[0]))
+			return;
+
+		if (!intel_get_transformed_coordinates(srcX, srcY + h,
+						       intel->transform[0],
+						       &src_x[1],
+						       &src_y[1]))
+			return;
+
+		if (!intel_get_transformed_coordinates(srcX + w, srcY + h,
+						       intel->transform[0],
+						       &src_x[2],
+						       &src_y[2]))
+			return;
+	} else {
+		if (!intel_get_transformed_coordinates_3d(srcX, srcY,
+							  intel->transform[0],
+							  &src_x[0],
+							  &src_y[0],
+							  &src_w[0]))
+			return;
+
+		if (!intel_get_transformed_coordinates_3d(srcX, srcY + h,
+							  intel->transform[0],
+							  &src_x[1],
+							  &src_y[1],
+							  &src_w[1]))
+			return;
+
+		if (!intel_get_transformed_coordinates_3d(srcX + w, srcY + h,
+							  intel->transform[0],
+							  &src_x[2],
+							  &src_y[2],
+							  &src_w[2]))
+			return;
 	}
 
 	if (intel->render_mask) {
diff --git a/src/intel.h b/src/intel.h
index 253a6bf..4bdeab3 100644
--- a/src/intel.h
+++ b/src/intel.h
@@ -268,8 +268,6 @@ typedef struct intel_screen_private {
 
 	PixmapPtr render_source, render_mask, render_dest;
 	PicturePtr render_source_picture, render_mask_picture, render_dest_picture;
-	CARD32 render_source_solid;
-	Bool render_source_is_solid;
 	Bool needs_3d_invariant;
 	Bool needs_render_state_emit;
 	Bool needs_render_vertex_emit;
commit ba0eb230836fa5f94a2f50da5880fdd3b9dfd72e
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Fri Jun 1 23:22:31 2012 +0100

    uxa: Fix reallocation of XVAdaptors array
    
    Prevent the leak and remove some unsightly code in the process.
    
    Reported-by: Zdenek Kabelac <zkabelac at redhat.com>
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/intel_video.c b/src/intel_video.c
index 83d1eab..09674e5 100644
--- a/src/intel_video.c
+++ b/src/intel_video.c
@@ -337,13 +337,12 @@ void I830InitVideo(ScreenPtr screen)
 	/* Give our adaptor list enough space for the overlay and/or texture video
 	 * adaptors.
 	 */
-	newAdaptors =
-	    malloc((num_adaptors + 2) * sizeof(XF86VideoAdaptorPtr *));
-	if (newAdaptors == NULL)
+	newAdaptors = realloc(adaptors,
+			      (num_adaptors + 2) * sizeof(XF86VideoAdaptorPtr));
+	if (newAdaptors == NULL) {
+		free(adaptors);
 		return;
-
-	memcpy(newAdaptors, adaptors,
-	       num_adaptors * sizeof(XF86VideoAdaptorPtr));
+	}
 	adaptors = newAdaptors;
 
 	/* Add the adaptors supported by our hardware.  First, set up the atoms
commit affb1f82c1401bac3f54654a342e3b16b8bd374b
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Sat Jun 2 08:27:59 2012 +0100

    sna/gradient: Reuse old gradient bo if allocation of new fails
    
    Prefer a stall to a crash.
    
    Reported-by: Zdenek Kabelac <zkabelac at redhat.com>
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_gradient.c b/src/sna/sna_gradient.c
index 0fda6ce..9ac0328 100644
--- a/src/sna/sna_gradient.c
+++ b/src/sna/sna_gradient.c
@@ -235,6 +235,7 @@ static void
 sna_render_finish_solid(struct sna *sna, bool force)
 {
 	struct sna_solid_cache *cache = &sna->render.solid_cache;
+	struct kgem_bo *old;
 	int i;
 
 	DBG(("sna_render_finish_solid(force=%d, domain=%d, busy=%d, dirty=%d)\n",
@@ -253,16 +254,25 @@ sna_render_finish_solid(struct sna *sna, bool force)
 		kgem_bo_destroy(&sna->kgem, cache->bo[i]);
 		cache->bo[i] = NULL;
 	}
-	kgem_bo_destroy(&sna->kgem, cache->cache_bo);
+
+	old = cache->cache_bo;
 
 	DBG(("sna_render_finish_solid reset\n"));
 
 	cache->cache_bo = kgem_create_linear(&sna->kgem, sizeof(cache->color), 0);
+	if (cache->cache_bo == NULL) {
+		cache->cache_bo = old;
+		old = NULL;
+	}
+
 	cache->bo[0] = kgem_create_proxy(&sna->kgem, cache->cache_bo,
 					 0, sizeof(uint32_t));
 	cache->bo[0]->pitch = 4;
 	if (force)
 		cache->size = 1;
+
+	if (old)
+		kgem_bo_destroy(&sna->kgem, old);
 }
 
 struct kgem_bo *
commit e51f984a4c15de42c5bee3aeacee553e2dd4eca0
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Sat Jun 2 08:23:35 2012 +0100

    sna: Check gradient allocations during init
    
    Reported-by: Zdenek Kabelac <zkabelac at redhat.com>
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_gradient.c b/src/sna/sna_gradient.c
index a52cfb5..0fda6ce 100644
--- a/src/sna/sna_gradient.c
+++ b/src/sna/sna_gradient.c
@@ -336,10 +336,12 @@ static Bool sna_alpha_cache_init(struct sna *sna)
 						 cache->cache_bo,
 						 sizeof(uint32_t)*i,
 						 sizeof(uint32_t));
+		if (cache->bo[i] == NULL)
+			return FALSE;
+
 		cache->bo[i]->pitch = 4;
 	}
-	kgem_bo_write(&sna->kgem, cache->cache_bo, color, sizeof(color));
-	return TRUE;
+	return kgem_bo_write(&sna->kgem, cache->cache_bo, color, sizeof(color));
 }
 
 static Bool sna_solid_cache_init(struct sna *sna)
@@ -360,6 +362,9 @@ static Bool sna_solid_cache_init(struct sna *sna)
 	cache->color[0] = 0xffffffff;
 	cache->bo[0] = kgem_create_proxy(&sna->kgem, cache->cache_bo,
 					 0, sizeof(uint32_t));
+	if (cache->bo[0] == NULL)
+		return FALSE;
+
 	cache->bo[0]->pitch = 4;
 	cache->dirty = 1;
 	cache->size = 1;
commit 2c5647a18e7856b604bce70270463fc128c2cfcd
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Fri Jun 1 23:22:31 2012 +0100

    sna: NameForAtom may return NULL
    
    Reported-by: Zdenek Kabelac <zkabelac at redhat.com>
    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 5ed3179..9fd59f8 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -1509,6 +1509,8 @@ sna_output_set_property(xf86OutputPtr output, Atom property,
 				return FALSE;
 			memcpy(&atom, value->data, 4);
 			name = NameForAtom(atom);
+			if (name == NULL)
+				return FALSE;
 
 			/* search for matching name string, then set its value down */
 			for (j = 0; j < p->mode_prop->count_enums; j++) {
diff --git a/src/sna/sna_video_textured.c b/src/sna/sna_video_textured.c
index bc117a4..33f3f71 100644
--- a/src/sna/sna_video_textured.c
+++ b/src/sna/sna_video_textured.c
@@ -387,7 +387,7 @@ XF86VideoAdaptorPtr sna_video_textured_setup(struct sna *sna,
 		return NULL;
 	}
 
-	if (sna->kgem.wedged) {
+	if (wedged(sna)) {
 		xf86DrvMsg(sna->scrn->scrnIndex, X_WARNING,
 			   "cannot enable XVideo whilst the GPU is wedged\n");
 		return FALSE;
commit 7867bff00caeff9e1fbe569ca3d37b94f704a4cd
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Fri Jun 1 23:22:31 2012 +0100

    sna: Replace invalid signed value with unsigned ~0 for uint8_t
    
    Reported-by: Zdenek Kabelac <zkabelac at redhat.com>
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/gen4_render.c b/src/sna/gen4_render.c
index 553cea8..f982b41 100644
--- a/src/sna/gen4_render.c
+++ b/src/sna/gen4_render.c
@@ -2916,7 +2916,7 @@ gen4_render_fill_boxes(struct sna *sna,
 	    (prefer_blt(sna) ||
 	     too_large(dst->drawable.width, dst->drawable.height) ||
 	     !gen4_check_dst_format(format))) {
-		uint8_t alu = -1;
+		uint8_t alu = ~0;
 
 		pixel = 0;
 		if (op == PictOpClear)
@@ -2929,7 +2929,7 @@ gen4_render_fill_boxes(struct sna *sna,
 						 format))
 			alu = GXcopy;
 
-		if (alu != -1 &&
+		if (alu != ~0 &&
 		    sna_blt_fill_boxes(sna, alu,
 				       dst_bo, dst->drawable.bitsPerPixel,
 				       pixel, box, n))
diff --git a/src/sna/gen5_render.c b/src/sna/gen5_render.c
index 8b970f4..56db4a0 100644
--- a/src/sna/gen5_render.c
+++ b/src/sna/gen5_render.c
@@ -3250,7 +3250,7 @@ gen5_render_fill_boxes(struct sna *sna,
 	    (prefer_blt_fill(sna) ||
 	     too_large(dst->drawable.width, dst->drawable.height) ||
 	     !gen5_check_dst_format(format))) {
-		uint8_t alu = -1;
+		uint8_t alu = ~0;
 
 		pixel = 0;
 		if (op == PictOpClear)
@@ -3263,7 +3263,7 @@ gen5_render_fill_boxes(struct sna *sna,
 						 format))
 			alu = GXcopy;
 
-		if (alu != -1 &&
+		if (alu != ~0 &&
 		    sna_blt_fill_boxes(sna, alu,
 				       dst_bo, dst->drawable.bitsPerPixel,
 				       pixel, box, n))
diff --git a/src/sna/gen6_render.c b/src/sna/gen6_render.c
index df2eeb2..cc6cc50 100644
--- a/src/sna/gen6_render.c
+++ b/src/sna/gen6_render.c
@@ -3661,7 +3661,7 @@ gen6_render_fill_boxes(struct sna *sna,
 	    (prefer_blt_fill(sna, dst_bo) ||
 	     too_large(dst->drawable.width, dst->drawable.height) ||
 	     !gen6_check_dst_format(format))) {
-		uint8_t alu = -1;
+		uint8_t alu = ~0;
 
 		pixel = 0;
 		if (op == PictOpClear)
@@ -3674,7 +3674,7 @@ gen6_render_fill_boxes(struct sna *sna,
 						 format))
 			alu = GXcopy;
 
-		if (alu != -1 &&
+		if (alu != ~0 &&
 		    sna_blt_fill_boxes(sna, alu,
 				       dst_bo, dst->drawable.bitsPerPixel,
 				       pixel, box, n))
diff --git a/src/sna/gen7_render.c b/src/sna/gen7_render.c
index 6bf25d3..2ee5b6f 100644
--- a/src/sna/gen7_render.c
+++ b/src/sna/gen7_render.c
@@ -3743,7 +3743,7 @@ gen7_render_fill_boxes(struct sna *sna,
 	    (prefer_blt_fill(sna, dst_bo) ||
 	     too_large(dst->drawable.width, dst->drawable.height) ||
 	     !gen7_check_dst_format(format))) {
-		uint8_t alu = -1;
+		uint8_t alu = ~0;
 
 		pixel = 0;
 		if (op == PictOpClear)
@@ -3756,7 +3756,7 @@ gen7_render_fill_boxes(struct sna *sna,
 						 format))
 			alu = GXcopy;
 
-		if (alu != -1 &&
+		if (alu != ~0 &&
 		    sna_blt_fill_boxes(sna, alu,
 				       dst_bo, dst->drawable.bitsPerPixel,
 				       pixel, box, n))
commit ca72b372237287af0f4475801a9b64efca975832
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Fri Jun 1 23:22:31 2012 +0100

    sna: Drop return value from 3D point transform
    
    And just fixup the computed coordinates in the face of an invalid
    matrix.
    
    Reported-by: Zdenek Kabelac <zkabelac at redhat.com>
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/gen4_render.c b/src/sna/gen4_render.c
index dd66a46..553cea8 100644
--- a/src/sna/gen4_render.c
+++ b/src/sna/gen4_render.c
@@ -980,29 +980,24 @@ gen4_emit_composite_primitive(struct sna *sna,
 						&src_x[2],
 						&src_y[2]);
 	} else {
-		if (!sna_get_transformed_coordinates_3d(r->src.x + op->src.offset[0],
-							r->src.y + op->src.offset[1],
-							op->src.transform,
-							&src_x[0],
-							&src_y[0],
-							&src_w[0]))
-			return;
-
-		if (!sna_get_transformed_coordinates_3d(r->src.x + op->src.offset[0],
-							r->src.y + op->src.offset[1] + r->height,
-							op->src.transform,
-							&src_x[1],
-							&src_y[1],
-							&src_w[1]))
-			return;
-
-		if (!sna_get_transformed_coordinates_3d(r->src.x + op->src.offset[0] + r->width,
-							r->src.y + op->src.offset[1] + r->height,
-							op->src.transform,
-							&src_x[2],
-							&src_y[2],
-							&src_w[2]))
-			return;
+		sna_get_transformed_coordinates_3d(r->src.x + op->src.offset[0],
+						   r->src.y + op->src.offset[1],
+						   op->src.transform,
+						   &src_x[0],
+						   &src_y[0],
+						   &src_w[0]);
+		sna_get_transformed_coordinates_3d(r->src.x + op->src.offset[0],
+						   r->src.y + op->src.offset[1] + r->height,
+						   op->src.transform,
+						   &src_x[1],
+						   &src_y[1],
+						   &src_w[1]);
+		sna_get_transformed_coordinates_3d(r->src.x + op->src.offset[0] + r->width,
+						   r->src.y + op->src.offset[1] + r->height,
+						   op->src.transform,
+						   &src_x[2],
+						   &src_y[2],
+						   &src_w[2]);
 	}
 
 	if (op->mask.bo) {
@@ -1025,29 +1020,24 @@ gen4_emit_composite_primitive(struct sna *sna,
 							&mask_x[2],
 							&mask_y[2]);
 		} else {
-			if (!sna_get_transformed_coordinates_3d(r->mask.x + op->mask.offset[0],
-								r->mask.y + op->mask.offset[1],
-								op->mask.transform,
-								&mask_x[0],
-								&mask_y[0],
-								&mask_w[0]))
-				return;
-
-			if (!sna_get_transformed_coordinates_3d(r->mask.x + op->mask.offset[0],
-								r->mask.y + op->mask.offset[1] + r->height,
-								op->mask.transform,
-								&mask_x[1],
-								&mask_y[1],
-								&mask_w[1]))
-				return;
-
-			if (!sna_get_transformed_coordinates_3d(r->mask.x + op->mask.offset[0] + r->width,
-								r->mask.y + op->mask.offset[1] + r->height,
-								op->mask.transform,
-								&mask_x[2],
-								&mask_y[2],
-								&mask_w[2]))
-				return;
+			sna_get_transformed_coordinates_3d(r->mask.x + op->mask.offset[0],
+							   r->mask.y + op->mask.offset[1],
+							   op->mask.transform,
+							   &mask_x[0],
+							   &mask_y[0],
+							   &mask_w[0]);
+			sna_get_transformed_coordinates_3d(r->mask.x + op->mask.offset[0],
+							   r->mask.y + op->mask.offset[1] + r->height,
+							   op->mask.transform,
+							   &mask_x[1],
+							   &mask_y[1],
+							   &mask_w[1]);
+			sna_get_transformed_coordinates_3d(r->mask.x + op->mask.offset[0] + r->width,
+							   r->mask.y + op->mask.offset[1] + r->height,
+							   op->mask.transform,
+							   &mask_x[2],
+							   &mask_y[2],
+							   &mask_w[2]);
 		}
 	}
 
diff --git a/src/sna/gen5_render.c b/src/sna/gen5_render.c
index 9c30041..8b970f4 100644
--- a/src/sna/gen5_render.c
+++ b/src/sna/gen5_render.c
@@ -983,29 +983,24 @@ gen5_emit_composite_primitive(struct sna *sna,
 						&src_x[2],
 						&src_y[2]);
 	} else {
-		if (!sna_get_transformed_coordinates_3d(r->src.x + op->src.offset[0],
-							r->src.y + op->src.offset[1],
-							op->src.transform,
-							&src_x[0],
-							&src_y[0],
-							&src_w[0]))
-			return;
-
-		if (!sna_get_transformed_coordinates_3d(r->src.x + op->src.offset[0],
-							r->src.y + op->src.offset[1] + r->height,
-							op->src.transform,
-							&src_x[1],
-							&src_y[1],
-							&src_w[1]))
-			return;
-
-		if (!sna_get_transformed_coordinates_3d(r->src.x + op->src.offset[0] + r->width,
-							r->src.y + op->src.offset[1] + r->height,
-							op->src.transform,
-							&src_x[2],
-							&src_y[2],
-							&src_w[2]))
-			return;
+		sna_get_transformed_coordinates_3d(r->src.x + op->src.offset[0],
+						   r->src.y + op->src.offset[1],
+						   op->src.transform,
+						   &src_x[0],
+						   &src_y[0],
+						   &src_w[0]);
+		sna_get_transformed_coordinates_3d(r->src.x + op->src.offset[0],
+						   r->src.y + op->src.offset[1] + r->height,
+						   op->src.transform,
+						   &src_x[1],
+						   &src_y[1],
+						   &src_w[1]);
+		sna_get_transformed_coordinates_3d(r->src.x + op->src.offset[0] + r->width,
+						   r->src.y + op->src.offset[1] + r->height,
+						   op->src.transform,
+						   &src_x[2],
+						   &src_y[2],
+						   &src_w[2]);
 	}
 
 	if (op->mask.bo) {
@@ -1028,29 +1023,25 @@ gen5_emit_composite_primitive(struct sna *sna,
 							&mask_x[2],
 							&mask_y[2]);
 		} else {
-			if (!sna_get_transformed_coordinates_3d(r->mask.x + op->mask.offset[0],
-								r->mask.y + op->mask.offset[1],
-								op->mask.transform,
-								&mask_x[0],
-								&mask_y[0],
-								&mask_w[0]))
-				return;
-
-			if (!sna_get_transformed_coordinates_3d(r->mask.x + op->mask.offset[0],
-								r->mask.y + op->mask.offset[1] + r->height,
-								op->mask.transform,
-								&mask_x[1],
-								&mask_y[1],
-								&mask_w[1]))
-				return;
-
-			if (!sna_get_transformed_coordinates_3d(r->mask.x + op->mask.offset[0] + r->width,
-								r->mask.y + op->mask.offset[1] + r->height,
-								op->mask.transform,
-								&mask_x[2],
-								&mask_y[2],
-								&mask_w[2]))
-				return;
+			sna_get_transformed_coordinates_3d(r->mask.x + op->mask.offset[0],
+							   r->mask.y + op->mask.offset[1],
+							   op->mask.transform,
+							   &mask_x[0],
+							   &mask_y[0],
+							   &mask_w[0]);
+
+			sna_get_transformed_coordinates_3d(r->mask.x + op->mask.offset[0],
+							   r->mask.y + op->mask.offset[1] + r->height,
+							   op->mask.transform,
+							   &mask_x[1],
+							   &mask_y[1],
+							   &mask_w[1]);
+			sna_get_transformed_coordinates_3d(r->mask.x + op->mask.offset[0] + r->width,
+							   r->mask.y + op->mask.offset[1] + r->height,
+							   op->mask.transform,
+							   &mask_x[2],
+							   &mask_y[2],
+							   &mask_w[2]);
 		}
 	}
 
diff --git a/src/sna/sna.h b/src/sna/sna.h
index d9fd9d1..df7f42f 100644
--- a/src/sna/sna.h
+++ b/src/sna/sna.h
@@ -500,7 +500,7 @@ sna_get_transformed_coordinates(int x, int y,
 				const PictTransform *transform,
 				float *x_out, float *y_out);
 
-Bool
+void
 sna_get_transformed_coordinates_3d(int x, int y,
 				   const PictTransform *transform,
 				   float *x_out, float *y_out, float *z_out);
diff --git a/src/sna/sna_transform.c b/src/sna/sna_transform.c
index 644d404..54852b1 100644
--- a/src/sna/sna_transform.c
+++ b/src/sna/sna_transform.c
@@ -114,7 +114,7 @@ sna_get_transformed_coordinates(int x, int y,
 /**
  * Returns the un-normalized floating-point coordinates transformed by the given transform.
  */
-Bool
+void
 sna_get_transformed_coordinates_3d(int x, int y,
 				   const PictTransform *transform,
 				   float *x_out, float *y_out, float *w_out)
@@ -126,13 +126,13 @@ sna_get_transformed_coordinates_3d(int x, int y,
 	} else {
 		int64_t result[3];
 
-		if (!_sna_transform_point(transform, x, y, result))
-			return FALSE;
-
-		*x_out = result[0] / 65536.;
-		*y_out = result[1] / 65536.;
-		*w_out = result[2] / 65536.;
+		if (_sna_transform_point(transform, x, y, result)) {
+			*x_out = result[0] / 65536.;
+			*y_out = result[1] / 65536.;
+			*w_out = result[2] / 65536.;
+		} else {
+			*x_out = *y_out = 0;
+			*w_out = 1.;
+		}
 	}
-
-	return TRUE;
 }


More information about the xorg-commit mailing list