xf86-video-intel: 10 commits - src/i915_render.c src/i965_render.c src/intel_video.c src/legacy/i810 src/sna/blt.c src/sna/kgem.c src/sna/kgem_debug.c src/sna/kgem_debug_gen2.c src/sna/kgem_debug_gen3.c src/sna/kgem_debug_gen4.c src/sna/kgem_debug_gen5.c src/sna/kgem_debug_gen6.c src/sna/kgem_debug_gen7.c src/sna/sna_accel.c src/sna/sna_blt.c src/sna/sna_composite.c src/sna/sna_display.c src/sna/sna_driver.c src/sna/sna_render.c src/sna/sna_video_overlay.c

Chris Wilson ickle at kemper.freedesktop.org
Wed Jun 13 06:49:07 PDT 2012


 src/i915_render.c             |   15 +------
 src/i965_render.c             |    3 +
 src/intel_video.c             |    1 
 src/legacy/i810/i810_driver.c |    2 -
 src/sna/blt.c                 |   16 ++++----
 src/sna/kgem.c                |    1 
 src/sna/kgem_debug.c          |    2 -
 src/sna/kgem_debug_gen2.c     |    4 +-
 src/sna/kgem_debug_gen3.c     |   83 ++++++++++++++++++++---------------------
 src/sna/kgem_debug_gen4.c     |    6 +--
 src/sna/kgem_debug_gen5.c     |    6 +--
 src/sna/kgem_debug_gen6.c     |   22 ++++++++---
 src/sna/kgem_debug_gen7.c     |    7 +--
 src/sna/sna_accel.c           |   84 ++++++++++++++++++++++++++----------------
 src/sna/sna_blt.c             |   42 ++++++++++-----------
 src/sna/sna_composite.c       |    1 
 src/sna/sna_display.c         |   43 +++++++++++++--------
 src/sna/sna_driver.c          |    2 +
 src/sna/sna_render.c          |   65 ++++++++++++++++----------------
 src/sna/sna_video_overlay.c   |   16 +++-----
 20 files changed, 226 insertions(+), 195 deletions(-)

New commits:
commit 0db789e180b6b01fb8aff547879387058f52a0b9
Author: Zdenek Kabelac <zkabelac at redhat.com>
Date:   Wed Jun 13 14:26:37 2012 +0200

    sna: Constification
    
    Adding preserving const modifiers to decrease amount of const warnings
    
    Signed-off-by: Zdenek Kabelac <zkabelac at redhat.com>
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/blt.c b/src/sna/blt.c
index e9d06eb..494b413 100644
--- a/src/sna/blt.c
+++ b/src/sna/blt.c
@@ -164,7 +164,7 @@ memcpy_blt(const void *src, void *dst, int bpp,
 
 	bpp /= 8;
 
-	src_bytes = (uint8_t *)src + src_stride * src_y + src_x * bpp;
+	src_bytes = (const uint8_t *)src + src_stride * src_y + src_x * bpp;
 	dst_bytes = (uint8_t *)dst + dst_stride * dst_y + dst_x * bpp;
 
 	byte_width = width * bpp;
@@ -184,7 +184,7 @@ memcpy_blt(const void *src, void *dst, int bpp,
 
 	case 2:
 		do {
-			*(uint16_t *)dst_bytes = *(uint16_t *)src_bytes;
+			*(uint16_t *)dst_bytes = *(const uint16_t *)src_bytes;
 			src_bytes += src_stride;
 			dst_bytes += dst_stride;
 		} while (--height);
@@ -192,7 +192,7 @@ memcpy_blt(const void *src, void *dst, int bpp,
 
 	case 4:
 		do {
-			*(uint32_t *)dst_bytes = *(uint32_t *)src_bytes;
+			*(uint32_t *)dst_bytes = *(const uint32_t *)src_bytes;
 			src_bytes += src_stride;
 			dst_bytes += dst_stride;
 		} while (--height);
@@ -200,7 +200,7 @@ memcpy_blt(const void *src, void *dst, int bpp,
 
 	case 8:
 		do {
-			*(uint64_t *)dst_bytes = *(uint64_t *)src_bytes;
+			*(uint64_t *)dst_bytes = *(const uint64_t *)src_bytes;
 			src_bytes += src_stride;
 			dst_bytes += dst_stride;
 		} while (--height);
@@ -224,7 +224,7 @@ memcpy_xor(const void *src, void *dst, int bpp,
 	   uint16_t width, uint16_t height,
 	   uint32_t and, uint32_t or)
 {
-	uint8_t *src_bytes;
+	const uint8_t *src_bytes;
 	uint8_t *dst_bytes;
 	int i;
 
@@ -239,7 +239,7 @@ memcpy_xor(const void *src, void *dst, int bpp,
 	     bpp, and, or));
 
 	bpp /= 8;
-	src_bytes = (uint8_t *)src + src_stride * src_y + src_x * bpp;
+	src_bytes = (const uint8_t *)src + src_stride * src_y + src_x * bpp;
 	dst_bytes = (uint8_t *)dst + dst_stride * dst_y + dst_x * bpp;
 
 	if (and == 0xffffffff) {
@@ -262,7 +262,7 @@ memcpy_xor(const void *src, void *dst, int bpp,
 			if (width & 1) {
 				do {
 					uint16_t *d = (uint16_t *)dst_bytes;
-					uint16_t *s = (uint16_t *)src_bytes;
+					const uint16_t *s = (const uint16_t *)src_bytes;
 
 					for (i = 0; i < width; i++)
 						d[i] = s[i] | or;
@@ -285,7 +285,7 @@ memcpy_xor(const void *src, void *dst, int bpp,
 			if (have_sse2()) {
 				do {
 					uint32_t *d = (uint32_t *)dst_bytes;
-					uint32_t *s = (uint32_t *)src_bytes;
+					const uint32_t *s = (const uint32_t *)src_bytes;
 					__m128i mask = xmm_create_mask_32(or);
 
 					i = width;
diff --git a/src/sna/kgem_debug.c b/src/sna/kgem_debug.c
index e46ffca..2dc1b45 100644
--- a/src/sna/kgem_debug.c
+++ b/src/sna/kgem_debug.c
@@ -225,7 +225,7 @@ decode_2d(struct kgem *kgem, uint32_t offset)
 	};
 
 	unsigned int op, len;
-	char *format = NULL;
+	const char *format = NULL;
 	uint32_t *data = kgem->batch + offset;
 	struct drm_i915_gem_relocation_entry *reloc;
 
diff --git a/src/sna/kgem_debug_gen2.c b/src/sna/kgem_debug_gen2.c
index e00cd81..09f3873 100644
--- a/src/sna/kgem_debug_gen2.c
+++ b/src/sna/kgem_debug_gen2.c
@@ -245,14 +245,14 @@ decode_3d_1d(struct kgem *kgem, uint32_t offset)
 {
     uint32_t *data = kgem->batch + offset;
     unsigned int len, i, idx, word, map;
-    char *format, *zformat, *type;
+    const char *format, *zformat, *type;
     uint32_t opcode;
 
     static const struct {
 	uint32_t opcode;
 	int min_len;
 	int max_len;
-	char *name;
+	const char *name;
     } opcodes_3d_1d[] = {
 	{ 0x86, 4, 4, "3DSTATE_CHROMA_KEY" },
 	{ 0x88, 2, 2, "3DSTATE_CONSTANT_BLEND_COLOR" },
diff --git a/src/sna/kgem_debug_gen3.c b/src/sna/kgem_debug_gen3.c
index de9d217..5d6d175 100644
--- a/src/sna/kgem_debug_gen3.c
+++ b/src/sna/kgem_debug_gen3.c
@@ -344,7 +344,7 @@ gen3_get_instruction_dst(uint32_t *data, int i, char *dstname, int do_mask)
     uint32_t a0 = data[i];
     int dst_nr = (a0 >> 14) & 0xf;
     char dstmask[8];
-    char *sat;
+    const char *sat;
 
     if (do_mask) {
 	if (((a0 >> 10) & 0xf) == 0xf) {
@@ -396,7 +396,7 @@ gen3_get_instruction_dst(uint32_t *data, int i, char *dstname, int do_mask)
     }
 }
 
-static char *
+static const char *
 gen3_get_channel_swizzle(uint32_t select)
 {
     switch (select & 0x7) {
@@ -468,10 +468,10 @@ gen3_get_instruction_src0(uint32_t *data, int i, char *srcname)
     uint32_t a0 = data[i];
     uint32_t a1 = data[i + 1];
     int src_nr = (a0 >> 2) & 0x1f;
-    char *swizzle_x = gen3_get_channel_swizzle((a1 >> 28) & 0xf);
-    char *swizzle_y = gen3_get_channel_swizzle((a1 >> 24) & 0xf);
-    char *swizzle_z = gen3_get_channel_swizzle((a1 >> 20) & 0xf);
-    char *swizzle_w = gen3_get_channel_swizzle((a1 >> 16) & 0xf);
+    const char *swizzle_x = gen3_get_channel_swizzle((a1 >> 28) & 0xf);
+    const char *swizzle_y = gen3_get_channel_swizzle((a1 >> 24) & 0xf);
+    const char *swizzle_z = gen3_get_channel_swizzle((a1 >> 20) & 0xf);
+    const char *swizzle_w = gen3_get_channel_swizzle((a1 >> 16) & 0xf);
     char swizzle[100];
 
     gen3_get_instruction_src_name((a0 >> 7) & 0x7, src_nr, srcname);
@@ -486,10 +486,10 @@ gen3_get_instruction_src1(uint32_t *data, int i, char *srcname)
     uint32_t a1 = data[i + 1];
     uint32_t a2 = data[i + 2];
     int src_nr = (a1 >> 8) & 0x1f;
-    char *swizzle_x = gen3_get_channel_swizzle((a1 >> 4) & 0xf);
-    char *swizzle_y = gen3_get_channel_swizzle((a1 >> 0) & 0xf);
-    char *swizzle_z = gen3_get_channel_swizzle((a2 >> 28) & 0xf);
-    char *swizzle_w = gen3_get_channel_swizzle((a2 >> 24) & 0xf);
+    const char *swizzle_x = gen3_get_channel_swizzle((a1 >> 4) & 0xf);
+    const char *swizzle_y = gen3_get_channel_swizzle((a1 >> 0) & 0xf);
+    const char *swizzle_z = gen3_get_channel_swizzle((a2 >> 28) & 0xf);
+    const char *swizzle_w = gen3_get_channel_swizzle((a2 >> 24) & 0xf);
     char swizzle[100];
 
     gen3_get_instruction_src_name((a1 >> 13) & 0x7, src_nr, srcname);
@@ -503,10 +503,10 @@ gen3_get_instruction_src2(uint32_t *data, int i, char *srcname)
 {
     uint32_t a2 = data[i + 2];
     int src_nr = (a2 >> 16) & 0x1f;
-    char *swizzle_x = gen3_get_channel_swizzle((a2 >> 12) & 0xf);
-    char *swizzle_y = gen3_get_channel_swizzle((a2 >> 8) & 0xf);
-    char *swizzle_z = gen3_get_channel_swizzle((a2 >> 4) & 0xf);
-    char *swizzle_w = gen3_get_channel_swizzle((a2 >> 0) & 0xf);
+    const char *swizzle_x = gen3_get_channel_swizzle((a2 >> 12) & 0xf);
+    const char *swizzle_y = gen3_get_channel_swizzle((a2 >> 8) & 0xf);
+    const char *swizzle_z = gen3_get_channel_swizzle((a2 >> 4) & 0xf);
+    const char *swizzle_w = gen3_get_channel_swizzle((a2 >> 0) & 0xf);
     char swizzle[100];
 
     gen3_get_instruction_src_name((a2 >> 21) & 0x7, src_nr, srcname);
@@ -554,7 +554,7 @@ gen3_get_instruction_addr(uint32_t src_type, uint32_t src_nr, char *name)
 
 static void
 gen3_decode_alu1(uint32_t *data, uint32_t offset,
-		 int i, char *instr_prefix, char *op_name)
+		 int i, char *instr_prefix, const char *op_name)
 {
     char dst[100], src0[100];
 
@@ -569,7 +569,7 @@ gen3_decode_alu1(uint32_t *data, uint32_t offset,
 
 static void
 gen3_decode_alu2(uint32_t *data, uint32_t offset,
-		 int i, char *instr_prefix, char *op_name)
+		 int i, char *instr_prefix, const char *op_name)
 {
     char dst[100], src0[100], src1[100];
 
@@ -585,7 +585,7 @@ gen3_decode_alu2(uint32_t *data, uint32_t offset,
 
 static void
 gen3_decode_alu3(uint32_t *data, uint32_t offset,
-		 int i, char *instr_prefix, char *op_name)
+		 int i, char *instr_prefix, const char *op_name)
 {
     char dst[100], src0[100], src1[100], src2[100];
 
@@ -602,7 +602,7 @@ gen3_decode_alu3(uint32_t *data, uint32_t offset,
 
 static void
 gen3_decode_tex(uint32_t *data, uint32_t offset, int i, char *instr_prefix,
-		char *tex_name)
+		const char *tex_name)
 {
     uint32_t t0 = data[i];
     uint32_t t1 = data[i + 1];
@@ -626,12 +626,12 @@ static void
 gen3_decode_dcl(uint32_t *data, uint32_t offset, int i, char *instr_prefix)
 {
 	uint32_t d0 = data[i];
-	char *sampletype;
+	const char *sampletype;
 	int dcl_nr = (d0 >> 14) & 0xf;
-	char *dcl_x = d0 & (1 << 10) ? "x" : "";
-	char *dcl_y = d0 & (1 << 11) ? "y" : "";
-	char *dcl_z = d0 & (1 << 12) ? "z" : "";
-	char *dcl_w = d0 & (1 << 13) ? "w" : "";
+	const char *dcl_x = d0 & (1 << 10) ? "x" : "";
+	const char *dcl_y = d0 & (1 << 11) ? "y" : "";
+	const char *dcl_z = d0 & (1 << 12) ? "z" : "";
+	const char *dcl_w = d0 & (1 << 13) ? "w" : "";
 	char dcl_mask[10];
 
 	switch ((d0 >> 19) & 0x3) {
@@ -790,7 +790,7 @@ gen3_decode_instruction(uint32_t *data, uint32_t offset,
     }
 }
 
-static char *
+static const char *
 gen3_decode_compare_func(uint32_t op)
 {
 	switch (op&0x7) {
@@ -806,7 +806,7 @@ gen3_decode_compare_func(uint32_t op)
 	return "";
 }
 
-static char *
+static const char *
 gen3_decode_stencil_op(uint32_t op)
 {
 	switch (op&0x7) {
@@ -824,7 +824,7 @@ gen3_decode_stencil_op(uint32_t op)
 
 #if 0
 /* part of MODES_4 */
-static char *
+static const char *
 gen3_decode_logic_op(uint32_t op)
 {
 	switch (op&0xf) {
@@ -849,7 +849,7 @@ gen3_decode_logic_op(uint32_t op)
 }
 #endif
 
-static char *
+static const char *
 gen3_decode_blend_fact(uint32_t op)
 {
 	switch (op&0xf) {
@@ -872,7 +872,7 @@ gen3_decode_blend_fact(uint32_t op)
 	return "";
 }
 
-static char *
+static const char *
 decode_tex_coord_mode(uint32_t mode)
 {
     switch (mode&0x7) {
@@ -886,7 +886,7 @@ decode_tex_coord_mode(uint32_t mode)
     return "";
 }
 
-static char *
+static const char *
 gen3_decode_sample_filter(uint32_t mode)
 {
 	switch (mode&0x7) {
@@ -949,8 +949,8 @@ gen3_decode_load_state_immediate_1(struct kgem *kgem, uint32_t offset)
 				break;
 			case 4:
 				{
-					char *cullmode = "";
-					char *vfmt_xyzw = "";
+					const char *cullmode = "";
+					const char *vfmt_xyzw = "";
 					switch((data[i]>>13)&0x3) {
 					case 0: cullmode = "both"; break;
 					case 1: cullmode = "none"; break;
@@ -1050,13 +1050,13 @@ gen3_decode_3d_1d(struct kgem *kgem, uint32_t offset)
 {
 	uint32_t *data = kgem->batch + offset;
 	unsigned int len, i, c, idx, word, map, sampler, instr;
-	char *format, *zformat, *type;
+	const char *format, *zformat, *type;
 	uint32_t opcode;
-	const struct {
+	static const struct {
 		uint32_t opcode;
 		int min_len;
 		int max_len;
-		char *name;
+		const char *name;
 	} opcodes_3d_1d[] = {
 		{ 0x86, 4, 4, "3DSTATE_CHROMA_KEY" },
 		{ 0x88, 2, 2, "3DSTATE_CONSTANT_BLEND_COLOR" },
@@ -1310,7 +1310,7 @@ gen3_decode_3d_1d(struct kgem *kgem, uint32_t offset)
 		for (sampler = 0; sampler <= 15; sampler++) {
 			if (data[1] & (1 << sampler)) {
 				uint32_t dword;
-				char *mip_filter = "";
+				const char *mip_filter = "";
 				dword = data[i];
 				switch ((dword>>20)&0x3) {
 				case 0: mip_filter = "none"; break;
@@ -1483,7 +1483,7 @@ gen3_decode_3d_primitive(struct kgem *kgem, uint32_t offset)
 	uint32_t *data = kgem->batch + offset;
 	char immediate = (data[0] & (1 << 23)) == 0;
 	unsigned int len, i, ret;
-	char *primtype;
+	const char *primtype;
 	unsigned int vertex = 0;
 
 	switch ((data[0] >> 18) & 0xf) {
@@ -1553,11 +1553,11 @@ out:
 
 int kgem_gen3_decode_3d(struct kgem *kgem, uint32_t offset)
 {
-    struct {
+    static const struct {
 	uint32_t opcode;
 	int min_len;
 	int max_len;
-	char *name;
+	const char *name;
     } opcodes[] = {
 	{ 0x06, 1, 1, "3DSTATE_ANTI_ALIASING" },
 	{ 0x08, 1, 1, "3DSTATE_BACKFACE_STENCIL_OPS" },
diff --git a/src/sna/kgem_debug_gen4.c b/src/sna/kgem_debug_gen4.c
index 53c350b..9b80dc8 100644
--- a/src/sna/kgem_debug_gen4.c
+++ b/src/sna/kgem_debug_gen4.c
@@ -256,7 +256,7 @@ static void primitive_out(struct kgem *kgem, uint32_t *data)
 
 static void
 state_base_out(uint32_t *data, uint32_t offset, unsigned int index,
-	       char *name)
+	       const char *name)
 {
     if (data[index] & 1)
 	kgem_debug_print(data, offset, index,
@@ -270,7 +270,7 @@ state_base_out(uint32_t *data, uint32_t offset, unsigned int index,
 
 static void
 state_max_out(uint32_t *data, uint32_t offset, unsigned int index,
-	      char *name)
+	      const char *name)
 {
 	if (data[index] == 1)
 		kgem_debug_print(data, offset, index,
@@ -460,7 +460,7 @@ int kgem_gen4_decode_3d(struct kgem *kgem, uint32_t offset)
 	uint32_t op;
 	unsigned int len;
 	int i;
-	char *desc1 = NULL;
+	const char *desc1 = NULL;
 
 	len = (data[0] & 0xff) + 2;
 	op = (data[0] & 0xffff0000) >> 16;
diff --git a/src/sna/kgem_debug_gen5.c b/src/sna/kgem_debug_gen5.c
index 9e7360a..e23ceb1 100644
--- a/src/sna/kgem_debug_gen5.c
+++ b/src/sna/kgem_debug_gen5.c
@@ -230,7 +230,7 @@ static void primitive_out(struct kgem *kgem, uint32_t *data)
 
 static void
 state_base_out(uint32_t *data, uint32_t offset, unsigned int index,
-	       char *name)
+	       const char *name)
 {
     if (data[index] & 1)
 	kgem_debug_print(data, offset, index,
@@ -244,7 +244,7 @@ state_base_out(uint32_t *data, uint32_t offset, unsigned int index,
 
 static void
 state_max_out(uint32_t *data, uint32_t offset, unsigned int index,
-	      char *name)
+	      const char *name)
 {
 	if (data[index] == 1)
 		kgem_debug_print(data, offset, index,
@@ -434,7 +434,7 @@ int kgem_gen5_decode_3d(struct kgem *kgem, uint32_t offset)
 	uint32_t op;
 	unsigned int len;
 	int i;
-	char *desc1 = NULL;
+	const char *desc1 = NULL;
 
 	len = (data[0] & 0xff) + 2;
 	op = (data[0] & 0xffff0000) >> 16;
diff --git a/src/sna/kgem_debug_gen6.c b/src/sna/kgem_debug_gen6.c
index 961aa00..e0b09d5 100644
--- a/src/sna/kgem_debug_gen6.c
+++ b/src/sna/kgem_debug_gen6.c
@@ -298,7 +298,7 @@ static void finish_state(struct kgem *kgem)
 
 static void
 state_base_out(uint32_t *data, uint32_t offset, unsigned int index,
-	       char *name)
+	       const char *name)
 {
     if (data[index] & 1)
 	kgem_debug_print(data, offset, index,
@@ -312,7 +312,7 @@ state_base_out(uint32_t *data, uint32_t offset, unsigned int index,
 
 static void
 state_max_out(uint32_t *data, uint32_t offset, unsigned int index,
-	      char *name)
+	      const char *name)
 {
 	if (data[index] == 1)
 		kgem_debug_print(data, offset, index,
@@ -635,7 +635,7 @@ int kgem_gen6_decode_3d(struct kgem *kgem, uint32_t offset)
 	uint32_t op;
 	unsigned int len;
 	int i, j;
-	char *desc1 = NULL;
+	const char *desc1 = NULL;
 
 	len = (data[0] & 0xff) + 2;
 	op = (data[0] & 0xffff0000) >> 16;
diff --git a/src/sna/kgem_debug_gen7.c b/src/sna/kgem_debug_gen7.c
index 78eae01..1bc014b 100644
--- a/src/sna/kgem_debug_gen7.c
+++ b/src/sna/kgem_debug_gen7.c
@@ -302,7 +302,7 @@ static void finish_state(struct kgem *kgem)
 
 static void
 state_base_out(uint32_t *data, uint32_t offset, unsigned int index,
-	       char *name)
+	       const char *name)
 {
     if (data[index] & 1)
 	kgem_debug_print(data, offset, index,
@@ -316,7 +316,7 @@ state_base_out(uint32_t *data, uint32_t offset, unsigned int index,
 
 static void
 state_max_out(uint32_t *data, uint32_t offset, unsigned int index,
-	      char *name)
+	      const char *name)
 {
 	if (data[index] == 1)
 		kgem_debug_print(data, offset, index,
@@ -595,8 +595,7 @@ int kgem_gen7_decode_3d(struct kgem *kgem, uint32_t offset)
 	uint32_t *data = kgem->batch + offset;
 	uint32_t op;
 	unsigned int len;
-	int i, j;
-	char *desc1 = NULL;
+	int i;
 	const char *name;
 
 	len = (data[0] & 0xff) + 2;
diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
index 07806b2..6c48db8 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -4221,7 +4221,7 @@ sna_fill_spans__cpu(DrawablePtr drawable,
 		    GCPtr gc, int n,
 		    DDXPointPtr pt, int *width, int sorted)
 {
-	const RegionRec *clip = sna_gc(gc)->priv;
+	RegionRec *clip = sna_gc(gc)->priv;
 
 	DBG(("%s x %d\n", __FUNCTION__, n));
 
diff --git a/src/sna/sna_blt.c b/src/sna/sna_blt.c
index 0cfa8b1..83bcd69 100644
--- a/src/sna/sna_blt.c
+++ b/src/sna/sna_blt.c
@@ -790,7 +790,7 @@ inline static void _sna_blt_fill_box(struct sna *sna,
 	kgem->nbatch += 3;
 
 	b[0] = blt->cmd;
-	*(uint64_t *)(b+1) = *(uint64_t *)box;
+	*(uint64_t *)(b+1) = *(const uint64_t *)box;
 }
 
 inline static void _sna_blt_fill_boxes(struct sna *sna,
@@ -818,31 +818,31 @@ inline static void _sna_blt_fill_boxes(struct sna *sna,
 
 		kgem->nbatch += 3 * nbox_this_time;
 		while (nbox_this_time >= 8) {
-			b[0] = cmd; *(uint64_t *)(b+1) = *(uint64_t *)box++;
-			b[3] = cmd; *(uint64_t *)(b+4) = *(uint64_t *)box++;
-			b[6] = cmd; *(uint64_t *)(b+7) = *(uint64_t *)box++;
-			b[9] = cmd; *(uint64_t *)(b+10) = *(uint64_t *)box++;
-			b[12] = cmd; *(uint64_t *)(b+13) = *(uint64_t *)box++;
-			b[15] = cmd; *(uint64_t *)(b+16) = *(uint64_t *)box++;
-			b[18] = cmd; *(uint64_t *)(b+19) = *(uint64_t *)box++;
-			b[21] = cmd; *(uint64_t *)(b+22) = *(uint64_t *)box++;
+			b[0] = cmd; *(uint64_t *)(b+1) = *(const uint64_t *)box++;
+			b[3] = cmd; *(uint64_t *)(b+4) = *(const uint64_t *)box++;
+			b[6] = cmd; *(uint64_t *)(b+7) = *(const uint64_t *)box++;
+			b[9] = cmd; *(uint64_t *)(b+10) = *(const uint64_t *)box++;
+			b[12] = cmd; *(uint64_t *)(b+13) = *(const uint64_t *)box++;
+			b[15] = cmd; *(uint64_t *)(b+16) = *(const uint64_t *)box++;
+			b[18] = cmd; *(uint64_t *)(b+19) = *(const uint64_t *)box++;
+			b[21] = cmd; *(uint64_t *)(b+22) = *(const uint64_t *)box++;
 			b += 24;
 			nbox_this_time -= 8;
 		}
 		if (nbox_this_time & 4) {
-			b[0] = cmd; *(uint64_t *)(b+1) = *(uint64_t *)box++;
-			b[3] = cmd; *(uint64_t *)(b+4) = *(uint64_t *)box++;
-			b[6] = cmd; *(uint64_t *)(b+7) = *(uint64_t *)box++;
-			b[9] = cmd; *(uint64_t *)(b+10) = *(uint64_t *)box++;
+			b[0] = cmd; *(uint64_t *)(b+1) = *(const uint64_t *)box++;
+			b[3] = cmd; *(uint64_t *)(b+4) = *(const uint64_t *)box++;
+			b[6] = cmd; *(uint64_t *)(b+7) = *(const uint64_t *)box++;
+			b[9] = cmd; *(uint64_t *)(b+10) = *(const uint64_t *)box++;
 			b += 12;
 		}
 		if (nbox_this_time & 2) {
-			b[0] = cmd; *(uint64_t *)(b+1) = *(uint64_t *)box++;
-			b[3] = cmd; *(uint64_t *)(b+4) = *(uint64_t *)box++;
+			b[0] = cmd; *(uint64_t *)(b+1) = *(const uint64_t *)box++;
+			b[3] = cmd; *(uint64_t *)(b+4) = *(const uint64_t *)box++;
 			b += 6;
 		}
 		if (nbox_this_time & 1) {
-			b[0] = cmd; *(uint64_t *)(b+1) = *(uint64_t *)box++;
+			b[0] = cmd; *(uint64_t *)(b+1) = *(const uint64_t *)box++;
 		}
 
 		if (!nbox)
@@ -1848,7 +1848,7 @@ static bool sna_blt_fill_box(struct sna *sna, uint8_t alu,
 	overwrites = alu == GXcopy || alu == GXclear || alu == GXset;
 	if (overwrites && kgem->nbatch >= 6 &&
 	    kgem->batch[kgem->nbatch-6] == cmd &&
-	    *(uint64_t *)&kgem->batch[kgem->nbatch-4] == *(uint64_t *)box &&
+	    *(uint64_t *)&kgem->batch[kgem->nbatch-4] == *(const uint64_t *)box &&
 	    kgem->reloc[kgem->nreloc-1].target_handle == bo->handle) {
 		DBG(("%s: replacing last fill\n", __FUNCTION__));
 		kgem->batch[kgem->nbatch-5] = br13;
@@ -1857,7 +1857,7 @@ static bool sna_blt_fill_box(struct sna *sna, uint8_t alu,
 	}
 	if (overwrites && kgem->nbatch >= 8 &&
 	    (kgem->batch[kgem->nbatch-8] & 0xffc0000f) == XY_SRC_COPY_BLT_CMD &&
-	    *(uint64_t *)&kgem->batch[kgem->nbatch-6] == *(uint64_t *)box &&
+	    *(uint64_t *)&kgem->batch[kgem->nbatch-6] == *(const uint64_t *)box &&
 	    kgem->reloc[kgem->nreloc-2].target_handle == bo->handle) {
 		DBG(("%s: replacing last copy\n", __FUNCTION__));
 		kgem->batch[kgem->nbatch-8] = cmd;
@@ -1893,7 +1893,7 @@ static bool sna_blt_fill_box(struct sna *sna, uint8_t alu,
 	b = kgem->batch + kgem->nbatch;
 	b[0] = cmd;
 	b[1] = br13;
-	*(uint64_t *)(b+2) = *(uint64_t *)box;
+	*(uint64_t *)(b+2) = *(const uint64_t *)box;
 	b[4] = kgem_add_reloc(kgem, kgem->nbatch + 4, bo,
 			      I915_GEM_DOMAIN_RENDER << 16 |
 			      I915_GEM_DOMAIN_RENDER |
commit 33998a7080aa7f50ba922c764c6a93fe951c5b64
Author: Zdenek Kabelac <zkabelac at redhat.com>
Date:   Wed Jun 13 14:26:36 2012 +0200

    sna: Fix typo and compare y1 to y2
    
    It seems 'y1' was meant to be compared here
    
    Signed-off-by: Zdenek Kabelac <zkabelac at redhat.com>
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
index 9da0198..07806b2 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -7630,7 +7630,7 @@ sna_poly_segment(DrawablePtr drawable, GCPtr gc, int n, xSegment *seg)
 			if (seg[i].y1 < seg[i].y2) {
 				rect[i].y = seg[i].y1;
 				rect[i].height = seg[i].y2 - seg[i].y1 + 1;
-			} else if (seg[i].x1 > seg[i].y2) {
+			} else if (seg[i].y1 > seg[i].y2) {
 				rect[i].y = seg[i].y2;
 				rect[i].height = seg[i].y1 - seg[i].y2 + 1;
 			} else {
commit 0ade32fbad4014efcc8aa8ed4cd0f8a39f9ab107
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Wed Jun 13 14:28:43 2012 +0100

    sna: Fix operator preference around a | b & c | d
    
    Tell the compiler what we really mean is a | (b & (c | d))
    
    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_blt.c b/src/sna/sna_blt.c
index 9ac6720..0cfa8b1 100644
--- a/src/sna/sna_blt.c
+++ b/src/sna/sna_blt.c
@@ -431,7 +431,7 @@ static void sna_blt_copy_one(struct sna *sna,
 	/* Compare against a previous fill */
 	if (kgem->nbatch >= 6 &&
 	    blt->overwrites &&
-	    kgem->batch[kgem->nbatch-6] == (XY_COLOR_BLT | (blt->cmd & BLT_WRITE_ALPHA | BLT_WRITE_RGB)) &&
+	    kgem->batch[kgem->nbatch-6] == (XY_COLOR_BLT | (blt->cmd & (BLT_WRITE_ALPHA | BLT_WRITE_RGB))) &&
 	    kgem->batch[kgem->nbatch-4] == ((uint32_t)dst_y << 16 | (uint16_t)dst_x) &&
 	    kgem->batch[kgem->nbatch-3] == ((uint32_t)(dst_y+height) << 16 | (uint16_t)(dst_x+width)) &&
 	    kgem->reloc[kgem->nreloc-1].target_handle == blt->bo[1]->handle) {
commit 20f3114ccd63052b4fd06ef1d87efaaabbbac7ac
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Wed Jun 13 14:27:10 2012 +0100

    sna: Use long for simplicity when printing size_t values for debugging
    
    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_accel.c b/src/sna/sna_accel.c
index 153f261..9da0198 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -12372,14 +12372,14 @@ static bool sna_accel_do_debug_memory(struct sna *sna)
 
 static void sna_accel_debug_memory(struct sna *sna)
 {
-	ErrorF("Allocated shadow pixels: %d, %d bytes, as CPU bo: %d, %d bytes\n",
+	ErrorF("Allocated shadow pixels: %d, %ld bytes, as CPU bo: %d, %ld bytes\n",
 	       sna->debug_memory.shadow_pixels_allocs,
-	       sna->debug_memory.shadow_pixels_bytes,
+	       (long)sna->debug_memory.shadow_pixels_bytes,
 	       sna->debug_memory.cpu_bo_allocs,
-	       sna->debug_memory.cpu_bo_bytes);
-	ErrorF("Allocated bo: %d, %d bytes\n",
+	       (long)sna->debug_memory.cpu_bo_bytes);
+	ErrorF("Allocated bo: %d, %ld bytes\n",
 	       sna->kgem.debug_memory.bo_allocs,
-	       sna->kgem.debug_memory.bo_bytes);
+	       (long)sna->kgem.debug_memory.bo_bytes);
 }
 
 #else
commit 6f75b8da6a468188dd0c00015395424598b3f502
Author: Zdenek Kabelac <zkabelac at redhat.com>
Date:   Wed Jun 13 14:26:33 2012 +0200

    sna: Valgrind updates
    
    Add some mising initialization for unknown ioctl
    
    Signed-off-by: Zdenek Kabelac <zkabelac at redhat.com>
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
index 398ffbb..153f261 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -10804,6 +10804,7 @@ static bool sna_set_glyph(CharInfoPtr in, CharInfoPtr out)
 	if (out->bits == NULL)
 		return false;
 
+	VG(memset(out->bits, 0, (w*h + 7) & ~7));
 	src = (uint8_t *)in->bits;
 	dst = (uint8_t *)out->bits;
 	stride -= w;
diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c
index 05d97b6..a51abb5 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -1144,6 +1144,7 @@ sna_output_attach_edid(xf86OutputPtr output)
 		if (tmp == NULL)
 			continue;
 
+		VG(memset(tmp, 0, blob.length));
 		blob.data = (uintptr_t)tmp;
 		if (drmIoctl(sna->kgem.fd, DRM_IOCTL_MODE_GETPROPBLOB, &blob)) {
 			free(tmp);
diff --git a/src/sna/sna_driver.c b/src/sna/sna_driver.c
index e585205..2fa6adc 100644
--- a/src/sna/sna_driver.c
+++ b/src/sna/sna_driver.c
@@ -335,6 +335,8 @@ static int sna_open_drm_master(ScrnInfoPtr scrn)
 	}
 
 	val = FALSE;
+
+	VG_CLEAR(gp);
 	gp.param = I915_PARAM_HAS_BLT;
 	gp.value = &val;
 	if (drmIoctl(fd, DRM_IOCTL_I915_GETPARAM, &gp)) {
diff --git a/src/sna/sna_video_overlay.c b/src/sna/sna_video_overlay.c
index 61b02b2..612711f 100644
--- a/src/sna/sna_video_overlay.c
+++ b/src/sna/sna_video_overlay.c
@@ -111,6 +111,7 @@ static Bool sna_has_overlay(struct sna *sna)
 	int has_overlay = 0;
 	int ret;
 
+	VG_CLEAR(gp);
 	gp.param = I915_PARAM_HAS_OVERLAY;
 	gp.value = &has_overlay;
 	ret = drmIoctl(sna->kgem.fd, DRM_IOCTL_I915_GETPARAM, &gp);
commit 70cf637ca47c9e67758e09c7e1d10eef51db1f98
Author: Zdenek Kabelac <zkabelac at redhat.com>
Date:   Wed Jun 13 14:26:32 2012 +0200

    legacy/i810: Fix declaration to match definition
    
    Signed-off-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_driver.c b/src/legacy/i810/i810_driver.c
index 519a4f0..141c19c 100644
--- a/src/legacy/i810/i810_driver.c
+++ b/src/legacy/i810/i810_driver.c
@@ -78,7 +78,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "../legacy.h"
 
 static Bool I810PreInit(ScrnInfoPtr pScrn, int flags);
-static Bool I810ScreenInit(SCREEN_INIT_ARGS);
+static Bool I810ScreenInit(SCREEN_INIT_ARGS_DECL);
 static Bool I810EnterVT(VT_FUNC_ARGS_DECL);
 static void I810LeaveVT(VT_FUNC_ARGS_DECL);
 static Bool I810CloseScreen(CLOSE_SCREEN_ARGS_DECL);
commit 5fea2478cd5ab4156c182210d28c5e27e5f67403
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Wed Jun 13 14:10:01 2012 +0100

    Lots of trivial semantic fixes
    
    Reported-by: Zdenek Kabelac <zkabelac at redhat.com>
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/i915_render.c b/src/i915_render.c
index 0ad991a..acbd82c 100644
--- a/src/i915_render.c
+++ b/src/i915_render.c
@@ -344,7 +344,6 @@ static Bool i915_texture_setup(PicturePtr picture, PixmapPtr pixmap, int unit)
 		    (FILTER_LINEAR << SS2_MIN_FILTER_SHIFT);
 		break;
 	default:
-		filter = 0;
 		intel_debug_fallback(scrn, "Bad filter 0x%x\n",
 				     picture->filter);
 		return FALSE;
@@ -486,13 +485,10 @@ i915_emit_composite_primitive(intel_screen_private *intel,
 			      int w, int h)
 {
 	Bool is_affine_src = TRUE, is_affine_mask = TRUE;
-	int per_vertex;
 	int tex_unit = 0;
 	int src_unit = -1, mask_unit = -1;
 	float src_x[3], src_y[3], src_w[3], mask_x[3], mask_y[3], mask_w[3];
 
-	per_vertex = 2;		/* dest x/y */
-
 	src_unit = tex_unit++;
 
 	is_affine_src = intel_transform_is_affine(intel->transform[src_unit]);
@@ -517,8 +513,6 @@ i915_emit_composite_primitive(intel_screen_private *intel,
 						      &src_x[2],
 						      &src_y[2]))
 			return;
-
-		per_vertex += 2;	/* src x/y */
 	} else {
 		if (!intel_get_transformed_coordinates_3d(srcX, srcY,
 							 intel->
@@ -543,8 +537,6 @@ i915_emit_composite_primitive(intel_screen_private *intel,
 							 &src_y[2],
 							 &src_w[2]))
 			return;
-
-		per_vertex += 4;	/* src x/y/z/w */
 	}
 
 	if (intel->render_mask) {
@@ -572,8 +564,6 @@ i915_emit_composite_primitive(intel_screen_private *intel,
 							      &mask_x[2],
 							      &mask_y[2]))
 				return;
-
-			per_vertex += 2;	/* mask x/y */
 		} else {
 			if (!intel_get_transformed_coordinates_3d(maskX, maskY,
 								 intel->
@@ -598,8 +588,6 @@ i915_emit_composite_primitive(intel_screen_private *intel,
 								 &mask_y[2],
 								 &mask_w[2]))
 				return;
-
-			per_vertex += 4;	/* mask x/y/z/w */
 		}
 	}
 
@@ -723,7 +711,8 @@ i915_prepare_composite(int op, PicturePtr source_picture,
 	else
 		floats_per_vertex += 4;	/* src x/y/z/w */
 
-	if (mask != NULL) {
+	if (mask_picture != NULL) {
+		assert(mask != NULL);
 		if (!i915_texture_setup(mask_picture, mask, tex_unit++)) {
 			intel_debug_fallback(scrn,
 					     "fail to setup mask texture\n");
diff --git a/src/i965_render.c b/src/i965_render.c
index 75c99e2..9d45944 100644
--- a/src/i965_render.c
+++ b/src/i965_render.c
@@ -2087,11 +2087,12 @@ i965_prepare_composite(int op, PicturePtr source_picture,
 	intel->transform[0] = source_picture->transform;
 	composite_op->is_affine = intel_transform_is_affine(intel->transform[0]);
 
-	if (!mask) {
+	if (mask_picture == NULL) {
 		intel->transform[1] = NULL;
 		intel->scale_units[1][0] = -1;
 		intel->scale_units[1][1] = -1;
 	} else {
+		assert(mask != NULL);
 		intel->transform[1] = mask_picture->transform;
 		intel->scale_units[1][0] = 1. / mask->drawable.width;
 		intel->scale_units[1][1] = 1. / mask->drawable.height;
diff --git a/src/intel_video.c b/src/intel_video.c
index 09674e5..235845f 100644
--- a/src/intel_video.c
+++ b/src/intel_video.c
@@ -451,7 +451,6 @@ static XF86VideoAdaptorPtr I830SetupImageVideoOverlay(ScreenPtr screen)
 	if (INTEL_INFO(intel)->gen >= 30) {
 		memcpy((char *)att, (char *)GammaAttributes,
 		       sizeof(XF86AttributeRec) * GAMMA_ATTRIBUTES);
-		att += GAMMA_ATTRIBUTES;
 	}
 	adapt->nImages = NUM_IMAGES - XVMC_IMAGE;
 
diff --git a/src/sna/kgem.c b/src/sna/kgem.c
index 8d7b1d6..89921d4 100644
--- a/src/sna/kgem.c
+++ b/src/sna/kgem.c
@@ -1914,6 +1914,7 @@ void _kgem_submit(struct kgem *kgem)
 				if (i != -1) {
 					ret = write(i, kgem->batch, batch_end*sizeof(uint32_t));
 					close(i);
+					(void)ret;
 				}
 
 				for (i = 0; i < kgem->nexec; i++) {
diff --git a/src/sna/kgem_debug_gen3.c b/src/sna/kgem_debug_gen3.c
index 969b1d1..de9d217 100644
--- a/src/sna/kgem_debug_gen3.c
+++ b/src/sna/kgem_debug_gen3.c
@@ -945,7 +945,7 @@ gen3_decode_load_state_immediate_1(struct kgem *kgem, uint32_t offset)
 
 				break;
 			case 3:
-				kgem_debug_print(data, offset, i, "S3: not documented\n", word);
+				kgem_debug_print(data, offset, i, "S3: not documented\n");
 				break;
 			case 4:
 				{
@@ -968,7 +968,7 @@ gen3_decode_load_state_immediate_1(struct kgem *kgem, uint32_t offset)
 					case 4<<6 | 1<<2: vfmt_xyzw = "XYWF,"; break;
 					}
 					kgem_debug_print(data, offset, i, "S4: point_width=%i, line_width=%.1f,"
-						  "%s%s%s%s%s cullmode=%s, vfmt=%s%s%s%s%s%s "
+						  "%s%s%s%s%s cullmode=%s, vfmt=%s%s%s%s%s%s%s%s "
 						  "%s%s\n",
 						  (data[i]>>23)&0x1ff,
 						  ((data[i]>>19)&0xf) / 2.0,
@@ -1344,8 +1344,7 @@ gen3_decode_3d_1d(struct kgem *kgem, uint32_t offset)
 					  dword&(1<<0)?" deinterlacer,":"");
 				dword = data[i];
 				kgem_debug_print(data, offset, i++, "sampler %d SS4: border color\n",
-					  sampler, ((dword>>24)&0xff)/(0x10*1.0),
-					  dword);
+					  sampler);
 			}
 		}
 		assert(len == i);
diff --git a/src/sna/kgem_debug_gen6.c b/src/sna/kgem_debug_gen6.c
index 72ed299..961aa00 100644
--- a/src/sna/kgem_debug_gen6.c
+++ b/src/sna/kgem_debug_gen6.c
@@ -555,6 +555,16 @@ gen6_blend_function_to_string(uint32_t v)
 	}
 }
 
+static float unpack_float(uint32_t dw)
+{
+	union {
+		float f;
+		uint32_t dw;
+	} u;
+	u.dw = dw;
+	return u.f;
+}
+
 static void
 gen6_decode_blend(struct kgem *kgem, const uint32_t *reloc)
 {
@@ -883,9 +893,9 @@ int kgem_gen6_decode_3d(struct kgem *kgem, uint32_t offset)
 			  (data[4] & (1 << 31)) != 0 ? "en" : "dis",
 			  (data[4] & (1 << 12)) != 0 ? 4 : 8,
 			  (data[4] & (1 << 11)) != 0);
-		kgem_debug_print(data, offset, 5, "Global Depth Offset Constant %f\n", data[5]);
-		kgem_debug_print(data, offset, 6, "Global Depth Offset Scale %f\n", data[6]);
-		kgem_debug_print(data, offset, 7, "Global Depth Offset Clamp %f\n", data[7]);
+		kgem_debug_print(data, offset, 5, "Global Depth Offset Constant %f\n", unpack_float(data[5]));
+		kgem_debug_print(data, offset, 6, "Global Depth Offset Scale %f\n", unpack_float(data[6]));
+		kgem_debug_print(data, offset, 7, "Global Depth Offset Clamp %f\n", unpack_float(data[7]));
 		for (i = 0, j = 0; i < 8; i++, j+=2)
 			kgem_debug_print(data, offset, i+8, "Attrib %d (Override %s%s%s%s, Const Source %d, Swizzle Select %d, "
 				  "Source %d); Attrib %d (Override %s%s%s%s, Const Source %d, Swizzle Select %d, Source %d)\n",
diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
index c26dc45..398ffbb 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -214,7 +214,7 @@ typedef struct box32 {
 	(((_pm) & FbFullMask((_draw)->depth)) == FbFullMask((_draw)->depth))
 
 #if DEBUG_ACCEL
-static void _assert_pixmap_contains_box(PixmapPtr pixmap, BoxPtr box, const char *function)
+static void _assert_pixmap_contains_box(PixmapPtr pixmap, const BoxRec *box, const char *function)
 {
 	if (box->x1 < 0 || box->y1 < 0 ||
 	    box->x2 > pixmap->drawable.width ||
@@ -229,7 +229,7 @@ static void _assert_pixmap_contains_box(PixmapPtr pixmap, BoxPtr box, const char
 	}
 }
 
-static void _assert_pixmap_contains_boxes(PixmapPtr pixmap, BoxPtr box, int n, int dx, int dy, const char *function)
+static void _assert_pixmap_contains_boxes(PixmapPtr pixmap, const BoxRec *box, int n, int dx, int dy, const char *function)
 {
 	BoxRec extents;
 
@@ -255,7 +255,7 @@ static void _assert_pixmap_contains_boxes(PixmapPtr pixmap, BoxPtr box, int n, i
 }
 
 
-static void _assert_pixmap_contains_points(PixmapPtr pixmap, DDXPointRec *pt, int n, int dx, int dy, const char *function)
+static void _assert_pixmap_contains_points(PixmapPtr pixmap, const DDXPointRec *pt, int n, int dx, int dy, const char *function)
 {
 	BoxRec extents;
 
@@ -416,16 +416,16 @@ static void sna_pixmap_free_cpu(struct sna *sna, struct sna_pixmap *priv)
 	if (priv->cpu_bo) {
 		DBG(("%s: discarding CPU buffer, handle=%d, size=%d\n",
 		     __FUNCTION__, priv->cpu_bo->handle, kgem_bo_size(priv->cpu_bo)));
+#ifdef DEBUG_MEMORY
+		sna->debug_memory.cpu_bo_allocs--;
+		sna->debug_memory.cpu_bo_bytes -= kgem_bo_size(priv->cpu_bo);
+#endif
 		if (priv->cpu_bo->sync) {
 			kgem_bo_sync__cpu(&sna->kgem, priv->cpu_bo);
 			sna_accel_watch_flush(sna, -1);
 		}
 		kgem_bo_destroy(&sna->kgem, priv->cpu_bo);
 		priv->cpu_bo = NULL;
-#ifdef DEBUG_MEMORY
-		sna->debug_memory.cpu_bo_allocs--;
-		sna->debug_memory.cpu_bo_bytes -= kgem_bo_size(priv->cpu_bo);
-#endif
 	} else
 		free(priv->ptr);
 
@@ -928,7 +928,7 @@ static inline bool pixmap_inplace(struct sna *sna,
 }
 
 static bool
-sna_pixmap_move_area_to_gpu(PixmapPtr pixmap, BoxPtr box, unsigned flags);
+sna_pixmap_move_area_to_gpu(PixmapPtr pixmap, const BoxRec *box, unsigned flags);
 
 static bool
 sna_pixmap_create_mappable_gpu(PixmapPtr pixmap)
@@ -1834,7 +1834,7 @@ inline static unsigned drawable_gc_flags(DrawablePtr draw,
 }
 
 static bool
-sna_pixmap_move_area_to_gpu(PixmapPtr pixmap, BoxPtr box, unsigned int flags)
+sna_pixmap_move_area_to_gpu(PixmapPtr pixmap, const BoxRec *box, unsigned int flags)
 {
 	struct sna *sna = to_sna_from_pixmap(pixmap);
 	struct sna_pixmap *priv = sna_pixmap(pixmap);
@@ -2151,6 +2151,7 @@ move_to_gpu:
 	}
 
 done:
+	assert(priv->gpu_bo != NULL);
 	if (sna_damage_is_all(&priv->gpu_damage,
 			      pixmap->drawable.width,
 			      pixmap->drawable.height))
@@ -2164,6 +2165,7 @@ done:
 	return priv->gpu_bo;
 
 use_gpu_bo:
+	assert(priv->gpu_bo != NULL);
 	priv->clear = false;
 	if (!priv->pinned && (priv->create & KGEM_CAN_CREATE_LARGE) == 0)
 		list_move(&priv->inactive,
@@ -3916,6 +3918,7 @@ sna_copy_boxes(DrawablePtr src, DrawablePtr dst, GCPtr gc,
 		goto out;
 	} else if (dst_priv->cpu_bo &&
 		   src_priv && DAMAGE_IS_ALL(src_priv->gpu_damage) && !src_priv->clear) {
+		assert(src_priv->gpu_bo != NULL); /* guaranteed by gpu_damage */
 		if (!sna->render.copy_boxes(sna, alu,
 					    src_pixmap, src_priv->gpu_bo, src_dx, src_dy,
 					    dst_pixmap, dst_priv->cpu_bo, dst_dx, dst_dy,
diff --git a/src/sna/sna_blt.c b/src/sna/sna_blt.c
index e84c87f..9ac6720 100644
--- a/src/sna/sna_blt.c
+++ b/src/sna/sna_blt.c
@@ -2008,7 +2008,7 @@ Bool sna_blt_fill_boxes(struct sna *sna, uint8_t alu,
 		nbox -= nbox_this_time;
 
 		do {
-			uint32_t *b = kgem->batch + kgem->nbatch;
+			uint32_t *b;
 
 			DBG(("%s: (%d, %d), (%d, %d): %08x\n",
 			     __FUNCTION__,
diff --git a/src/sna/sna_composite.c b/src/sna/sna_composite.c
index 8528217..97fe70e 100644
--- a/src/sna/sna_composite.c
+++ b/src/sna/sna_composite.c
@@ -330,6 +330,7 @@ sna_compute_composite_extents(BoxPtr extents,
 	v = dst_y + height;
 	if (v > dst->pDrawable->height)
 		v = dst->pDrawable->height;
+	extents->y2 = v;
 
 	DBG(("%s: initial clip against dst->pDrawable: (%d, %d), (%d, %d)\n",
 	     __FUNCTION__,
diff --git a/src/sna/sna_render.c b/src/sna/sna_render.c
index 8d61f40..4dc7062 100644
--- a/src/sna/sna_render.c
+++ b/src/sna/sna_render.c
@@ -387,9 +387,13 @@ move_to_gpu(PixmapPtr pixmap, const BoxRec *box)
 		return NULL;
 	}
 
-	if (DBG_FORCE_UPLOAD < 0)
-		return sna_pixmap_force_to_gpu(pixmap,
-					       MOVE_SOURCE_HINT | MOVE_READ);
+	if (DBG_FORCE_UPLOAD < 0) {
+		if (!sna_pixmap_force_to_gpu(pixmap,
+					       MOVE_SOURCE_HINT | MOVE_READ))
+			return NULL;
+
+		return priv->gpu_bo;
+	}
 
 	w = box->x2 - box->x1;
 	h = box->y2 - box->y1;
@@ -584,9 +588,9 @@ sna_render_pixmap_bo(struct sna *sna,
 static int sna_render_picture_downsample(struct sna *sna,
 					 PicturePtr picture,
 					 struct sna_composite_channel *channel,
-					 int16_t x, int16_t y,
-					 int16_t w, int16_t h,
-					 int16_t dst_x, int16_t dst_y)
+					 const int16_t x, const int16_t y,
+					 const int16_t w, const int16_t h,
+					 const int16_t dst_x, const int16_t dst_y)
 {
 	PixmapPtr pixmap = get_drawable_pixmap(picture->pDrawable);
 	ScreenPtr screen = pixmap->drawable.pScreen;
@@ -596,15 +600,12 @@ static int sna_render_picture_downsample(struct sna *sna,
 	pixman_transform_t t;
 	PixmapPtr tmp;
 	int width, height, size;
-	int sx, sy, ox, oy, ow, oh;
+	int sx, sy, sw, sh;
 	int error, ret = 0;
 	BoxRec box, b;
 
-	ow = w;
-	oh = h;
-
-	ox = box.x1 = x;
-	oy = box.y1 = y;
+	box.x1 = x;
+	box.y1 = y;
 	box.x2 = x + w;
 	box.y2 = y + h;
 	if (channel->transform) {
@@ -612,12 +613,10 @@ static int sna_render_picture_downsample(struct sna *sna,
 
 		pixman_transform_bounds(channel->transform, &box);
 
-		v.vector[0] = ox << 16;
-		v.vector[1] = oy << 16;
-		v.vector[2] =  1 << 16;
+		v.vector[0] = x << 16;
+		v.vector[1] = y << 16;
+		v.vector[2] = 1 << 16;
 		pixman_transform_point(channel->transform, &v);
-		ox = v.vector[0] / v.vector[2];
-		oy = v.vector[1] / v.vector[2];
 	}
 
 	if (channel->repeat == RepeatNone || channel->repeat == RepeatPad) {
@@ -645,33 +644,33 @@ static int sna_render_picture_downsample(struct sna *sna,
 				return sna_render_picture_fixup(sna,
 								picture,
 								channel,
-								x, y, ow, oh,
+								x, y, w, h,
 								dst_x, dst_y);
 			}
 		}
 	}
 
-	w = box.x2 - box.x1;
-	h = box.y2 - box.y1;
+	sw = box.x2 - box.x1;
+	sh = box.y2 - box.y1;
 
 	DBG(("%s: sample (%d, %d), (%d, %d)\n",
 	     __FUNCTION__, box.x1, box.y1, box.x2, box.y2));
 
-	sx = (w + sna->render.max_3d_size - 1) / sna->render.max_3d_size;
-	sy = (h + sna->render.max_3d_size - 1) / sna->render.max_3d_size;
+	sx = (sw + sna->render.max_3d_size - 1) / sna->render.max_3d_size;
+	sy = (sh + sna->render.max_3d_size - 1) / sna->render.max_3d_size;
 
 	DBG(("%s: scaling (%d, %d) down by %dx%d\n",
-	     __FUNCTION__, w, h, sx, sy));
+	     __FUNCTION__, sw, sh, sx, sy));
 
-	width  = w / sx;
-	height = h / sy;
+	width  = sw / sx;
+	height = sh / sy;
 
 	DBG(("%s: creating temporary GPU bo %dx%d\n",
 	     __FUNCTION__, width, height));
 
 	if (!sna_pixmap_force_to_gpu(pixmap, MOVE_SOURCE_HINT | MOVE_READ))
 		return sna_render_picture_fixup(sna, picture, channel,
-						x, y, ow, oh,
+						x, y, w, h,
 						dst_x, dst_y);
 
 	tmp = screen->CreatePixmap(screen,
@@ -706,9 +705,9 @@ static int sna_render_picture_downsample(struct sna *sna,
 	 */
 	tmp_src->filter = PictFilterNearest;
 	memset(&t, 0, sizeof(t));
-	t.matrix[0][0] = (w << 16) / width;
+	t.matrix[0][0] = (sw << 16) / width;
 	t.matrix[0][2] = box.x1 << 16;
-	t.matrix[1][1] = (h << 16) / height;
+	t.matrix[1][1] = (sh << 16) / height;
 	t.matrix[1][2] = box.y1 << 16;
 	t.matrix[2][2] = 1 << 16;
 	tmp_src->transform = &t;
@@ -721,20 +720,20 @@ static int sna_render_picture_downsample(struct sna *sna,
 	while (size * size * 4 > sna->kgem.max_copy_tile_size)
 		size /= 2;
 
-	w = size / sx - 2 * sx;
-	h = size / sy - 2 * sy;
+	sw = size / sx - 2 * sx;
+	sh = size / sy - 2 * sy;
 	DBG(("%s %d:%d downsampling using %dx%d GPU tiles\n",
-	     __FUNCTION__, (width + w-1)/w, (height + h-1)/h, w, h));
+	     __FUNCTION__, (width + sw-1)/sw, (height + sh-1)/sh, sw, sh));
 
 	for (b.y1 = 0; b.y1 < height; b.y1 = b.y2) {
-		b.y2 = b.y1 + h;
+		b.y2 = b.y1 + sh;
 		if (b.y2 > height)
 			b.y2 = height;
 
 		for (b.x1 = 0; b.x1 < width; b.x1 = b.x2) {
 			struct sna_composite_op op;
 
-			b.x2 = b.x1 + w;
+			b.x2 = b.x1 + sw;
 			if (b.x2 > width)
 				b.x2 = width;
 
diff --git a/src/sna/sna_video_overlay.c b/src/sna/sna_video_overlay.c
index 945818a..61b02b2 100644
--- a/src/sna/sna_video_overlay.c
+++ b/src/sna/sna_video_overlay.c
@@ -627,7 +627,6 @@ XF86VideoAdaptorPtr sna_video_overlay_setup(struct sna *sna,
 {
 	XF86VideoAdaptorPtr adaptor;
 	struct sna_video *video;
-	XF86AttributePtr att;
 
 	if (!sna_has_overlay(sna)) {
 		xf86DrvMsg(sna->scrn->scrnIndex, X_INFO,
@@ -664,17 +663,15 @@ XF86VideoAdaptorPtr sna_video_overlay_setup(struct sna *sna,
 	adaptor->nAttributes = NUM_ATTRIBUTES;
 	if (HAS_GAMMA(sna))
 		adaptor->nAttributes += GAMMA_ATTRIBUTES;
-	adaptor->pAttributes =
+
+	 adaptor->pAttributes =
 	    xnfalloc(sizeof(XF86AttributeRec) * adaptor->nAttributes);
 	/* Now copy the attributes */
-	att = adaptor->pAttributes;
-	memcpy(att, Attributes, sizeof(XF86AttributeRec) * NUM_ATTRIBUTES);
-	att += NUM_ATTRIBUTES;
-	if (HAS_GAMMA(sna)) {
-		memcpy(att, GammaAttributes,
+	memcpy(adaptor->pAttributes, Attributes, sizeof(XF86AttributeRec) * NUM_ATTRIBUTES);
+	if (HAS_GAMMA(sna))
+		memcpy(adaptor->pAttributes + NUM_ATTRIBUTES, GammaAttributes,
 		       sizeof(XF86AttributeRec) * GAMMA_ATTRIBUTES);
-		att += GAMMA_ATTRIBUTES;
-	}
+
 	adaptor->nImages = NUM_IMAGES;
 	adaptor->pImages = (XF86ImagePtr)Images;
 	adaptor->PutVideo = NULL;
commit e499f207c161d1b3cd75f065dc89021ff5f40b63
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Wed Jun 13 13:11:17 2012 +0100

    sna: Fix memleak from sna_crtc_find_plane()
    
    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 37709ee..05d97b6 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -957,31 +957,41 @@ static const xf86CrtcFuncsRec sna_crtc_funcs = {
 static uint32_t
 sna_crtc_find_plane(struct sna *sna, int pipe)
 {
-	drmModePlaneRes *resources;
-	uint32_t id = 0;
+	struct drm_mode_get_plane_res r;
+	uint32_t *planes, id = 0;
 	int i;
 
-	resources = drmModeGetPlaneResources(sna->kgem.fd);
-	if (!resources) {
-		xf86DrvMsg(sna->scrn->scrnIndex, X_ERROR,
-			   "failed to get plane resources: %s\n",
-			   strerror(errno));
+	VG_CLEAR(r);
+	r.count_planes = 0;
+	if (drmIoctl(sna->kgem.fd, DRM_IOCTL_MODE_GETPLANERESOURCES, &r))
+		return 0;
+
+	if (!r.count_planes)
 		return 0;
-	}
 
-	for (i = 0; id == 0 && i < resources->count_planes; i++) {
-		drmModePlane *p;
+	planes = malloc(sizeof(uint32_t)*r.count_planes);
+	if (planes == NULL)
+		return 0;
+
+	r.plane_id_ptr = (uintptr_t)planes;
+	if (drmIoctl(sna->kgem.fd, DRM_IOCTL_MODE_GETPLANERESOURCES, &r))
+		r.count_planes = 0;
 
-		p = drmModeGetPlane(sna->kgem.fd, resources->planes[i]);
-		if (p) {
-			if (p->possible_crtcs & (1 << pipe))
-				id = p->plane_id;
+	for (i = 0; i < r.count_planes; i++) {
+		struct drm_mode_get_plane p;
 
-			drmModeFreePlane(p);
+		VG_CLEAR(p);
+		p.plane_id = planes[i];
+		p.count_format_types = 0;
+		if (drmIoctl(sna->kgem.fd, DRM_IOCTL_MODE_GETPLANE, &p) == 0) {
+			if (p.possible_crtcs & (1 << pipe)) {
+				id = p.plane_id;
+				break;
+			}
 		}
 	}
+	free(planes);
 
-	free(resources);
 	return id;
 }
 
commit 49da55da518348fc6b88e09d5132dd1b1d751304
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Wed Jun 13 11:20:41 2012 +0100

    sna: Free the reversed glyph bits along with the font
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
index 34f25ef..c26dc45 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -10503,6 +10503,9 @@ struct sna_font {
 	CharInfoRec glyphs8[256];
 	CharInfoRec *glyphs16[256];
 };
+#define GLYPH_INVALID (void *)1
+#define GLYPH_EMPTY (void *)2
+#define GLYPH_CLEAR (void *)3
 
 static Bool
 sna_realize_font(ScreenPtr screen, FontPtr font)
@@ -10525,15 +10528,28 @@ static Bool
 sna_unrealize_font(ScreenPtr screen, FontPtr font)
 {
 	struct sna_font *priv = FontGetPrivate(font, sna_font_key);
-	int n;
+	int i, j;
 
-	if (priv) {
-		for (n = 0; n < 256; n++)
-			free(priv->glyphs16[n]);
-		free(priv);
-		FontSetPrivate(font, sna_font_key, NULL);
+	if (priv == NULL)
+		return TRUE;
+
+	for (i = 0; i < 256; i++) {
+		if ((uintptr_t)priv->glyphs8[i].bits & ~3)
+			free(priv->glyphs8[i].bits);
 	}
+	for (j = 0; j < 256; j++) {
+		if (priv->glyphs16[j] == NULL)
+			continue;
+
+		for (i = 0; i < 256; i++) {
+			if ((uintptr_t)priv->glyphs16[j][i].bits & ~3)
+				free(priv->glyphs16[j][i].bits);
+		}
+		free(priv->glyphs16[j]);
+	}
+	free(priv);
 
+	FontSetPrivate(font, sna_font_key, NULL);
 	return TRUE;
 }
 
@@ -10634,10 +10650,10 @@ sna_glyph_blt(DrawablePtr drawable, GCPtr gc,
 			int w8 = (w + 7) >> 3;
 			int x1, y1, len;
 
-			if (c->bits == (void *)1)
+			if (c->bits == GLYPH_EMPTY)
 				goto skip;
 
-			if (!transparent && c->bits == (void *)2)
+			if (!transparent && c->bits == GLYPH_CLEAR)
 				goto skip;
 
 			len = (w8 * h + 7) >> 3 << 1;
@@ -10684,7 +10700,7 @@ sna_glyph_blt(DrawablePtr drawable, GCPtr gc,
 			b[0] = br00 | (1 + len);
 			b[1] = (uint16_t)y1 << 16 | (uint16_t)x1;
 			b[2] = (uint16_t)(y1+h) << 16 | (uint16_t)(x1+w);
-			if (c->bits == (void *)2) {
+			if (c->bits == GLYPH_CLEAR) {
 				memset(b+3, 0, len*4);
 			} else {
 				uint64_t *src = (uint64_t *)c->bits;
@@ -10775,7 +10791,7 @@ static bool sna_set_glyph(CharInfoPtr in, CharInfoPtr out)
 
 	/* Skip empty glyphs */
 	if (w == 0 || h == 0 || ((w|h) == 1 && (in->bits[0] & 1) == 0)) {
-		out->bits = (void *)1;
+		out->bits = GLYPH_EMPTY;
 		return true;
 	}
 
@@ -10799,7 +10815,7 @@ static bool sna_set_glyph(CharInfoPtr in, CharInfoPtr out)
 
 	if (clear) {
 		free(out->bits);
-		out->bits = (void *)2;
+		out->bits = GLYPH_CLEAR;
 	}
 
 	return true;
@@ -10814,12 +10830,12 @@ inline static bool sna_get_glyph8(FontPtr font, struct sna_font *priv,
 	p = &priv->glyphs8[g];
 	if (p->bits) {
 		*out = p;
-		return p->bits != (void*)-1;
+		return p->bits != GLYPH_INVALID;
 	}
 
 	font->get_glyphs(font, 1, &g, Linear8Bit, &n, &ret);
 	if (n == 0) {
-		p->bits = (void*)-1;
+		p->bits = GLYPH_INVALID;
 		return false;
 	}
 
@@ -10839,14 +10855,14 @@ inline static bool sna_get_glyph16(FontPtr font, struct sna_font *priv,
 	p = &page[g&0xff];
 	if (p->bits) {
 		*out = p;
-		return p->bits != (void*)-1;
+		return p->bits != GLYPH_INVALID;
 	}
 
 	font->get_glyphs(font, 1, (unsigned char *)&g,
 			 FONTLASTROW(font) ? TwoD16Bit : Linear16Bit,
 			 &n, &ret);
 	if (n == 0) {
-		p->bits = (void*)-1;
+		p->bits = GLYPH_INVALID;
 		return false;
 	}
 
commit 9f68c7fe6aa34ab17d82489fca5f63a3ce335444
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Wed Jun 13 11:15:42 2012 +0100

    sna: Free clip rectangles after intersection with PolyRectangle extents
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
index e39f4a4..34f25ef 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -8031,6 +8031,7 @@ zero_clipped:
 				}
 			} while (--n);
 		}
+		RegionUninit(&clip);
 	}
 	goto done;
 
@@ -8208,6 +8209,7 @@ wide_clipped:
 				}
 			} while (--n);
 		}
+		RegionUninit(&clip);
 	}
 	goto done;
 


More information about the xorg-commit mailing list