From b2e083eba2668517e40bc94e3a19cd15824ce93c Mon Sep 17 00:00:00 2001 From: "Xiang, Haihao" Date: Fri, 12 Sep 2008 09:25:34 +0800 Subject: i965: Add support for G41 chipset which is another 4 series. --- src/mesa/drivers/dri/intel/intel_chipset.h | 4 +++- src/mesa/drivers/dri/intel/intel_context.c | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) (limited to 'src/mesa/drivers/dri/intel') diff --git a/src/mesa/drivers/dri/intel/intel_chipset.h b/src/mesa/drivers/dri/intel/intel_chipset.h index 15b9ef4312..170efd060a 100644 --- a/src/mesa/drivers/dri/intel/intel_chipset.h +++ b/src/mesa/drivers/dri/intel/intel_chipset.h @@ -58,6 +58,7 @@ #define PCI_CHIP_IGD_E_G 0x2E02 #define PCI_CHIP_Q45_G 0x2E12 #define PCI_CHIP_G45_G 0x2E22 +#define PCI_CHIP_G41_G 0x2E32 #define IS_MOBILE(devid) (devid == PCI_CHIP_I855_GM || \ devid == PCI_CHIP_I915_GM || \ @@ -70,7 +71,8 @@ #define IS_GM45_GM(devid) (devid == PCI_CHIP_GM45_GM) #define IS_G4X(devid) (devid == PCI_CHIP_IGD_E_G || \ devid == PCI_CHIP_Q45_G || \ - devid == PCI_CHIP_G45_G) + devid == PCI_CHIP_G45_G || \ + devid == PCI_CHIP_G41_G) #define IS_915(devid) (devid == PCI_CHIP_I915_G || \ devid == PCI_CHIP_E7221_G || \ diff --git a/src/mesa/drivers/dri/intel/intel_context.c b/src/mesa/drivers/dri/intel/intel_context.c index 4d1a742698..7065bb35ee 100644 --- a/src/mesa/drivers/dri/intel/intel_context.c +++ b/src/mesa/drivers/dri/intel/intel_context.c @@ -179,6 +179,9 @@ intelGetString(GLcontext * ctx, GLenum name) case PCI_CHIP_Q45_G: chipset = "Intel(R) Q45/Q43"; break; + case PCI_CHIP_G41_G: + chipset = "Intel(R) G41"; + break; default: chipset = "Unknown Intel Chipset"; break; -- cgit v1.2.3 From 201d3419a6432a0f35dff48e606649092afb7ff7 Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Thu, 11 Sep 2008 09:50:47 -0700 Subject: intel: Remove dead allow_batchbuffer param. --- src/mesa/drivers/dri/intel/intel_screen.c | 5 ----- src/mesa/drivers/dri/intel/intel_screen.h | 1 - 2 files changed, 6 deletions(-) (limited to 'src/mesa/drivers/dri/intel') diff --git a/src/mesa/drivers/dri/intel/intel_screen.c b/src/mesa/drivers/dri/intel/intel_screen.c index 1de1ac49ea..de098e5b72 100644 --- a/src/mesa/drivers/dri/intel/intel_screen.c +++ b/src/mesa/drivers/dri/intel/intel_screen.c @@ -298,11 +298,6 @@ static GLboolean intelInitDriver(__DRIscreenPrivate *sPriv) &intelScreen->irq_active)) return GL_FALSE; - /* Determine if batchbuffers are allowed */ - if (!intel_get_param(sPriv, I915_PARAM_ALLOW_BATCHBUFFER, - &intelScreen->allow_batchbuffer)) - return GL_FALSE; - sPriv->extensions = intelScreenExtensions; return GL_TRUE; diff --git a/src/mesa/drivers/dri/intel/intel_screen.h b/src/mesa/drivers/dri/intel/intel_screen.h index daf2ab4c58..fc913da5bf 100644 --- a/src/mesa/drivers/dri/intel/intel_screen.h +++ b/src/mesa/drivers/dri/intel/intel_screen.h @@ -74,7 +74,6 @@ typedef struct int drmMinor; int irq_active; - int allow_batchbuffer; GLboolean no_hw; -- cgit v1.2.3 From 34bba445a12f7b81654a416fd1630c8890cfc178 Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Fri, 12 Sep 2008 13:47:37 -0700 Subject: intel: Don't segfault on TFP from a bad drawable. --- src/mesa/drivers/dri/intel/intel_context.c | 3 +++ src/mesa/drivers/dri/intel/intel_tex_image.c | 6 ++++++ 2 files changed, 9 insertions(+) (limited to 'src/mesa/drivers/dri/intel') diff --git a/src/mesa/drivers/dri/intel/intel_context.c b/src/mesa/drivers/dri/intel/intel_context.c index 7065bb35ee..007dee449c 100644 --- a/src/mesa/drivers/dri/intel/intel_context.c +++ b/src/mesa/drivers/dri/intel/intel_context.c @@ -233,6 +233,9 @@ intel_update_renderbuffers(__DRIcontext *context, __DRIdrawable *drawable) &count, drawable->loaderPrivate); + if (buffers == NULL) + return; + drawable->x = 0; drawable->y = 0; drawable->backX = 0; diff --git a/src/mesa/drivers/dri/intel/intel_tex_image.c b/src/mesa/drivers/dri/intel/intel_tex_image.c index d1f540b0f1..70b0b3e245 100644 --- a/src/mesa/drivers/dri/intel/intel_tex_image.c +++ b/src/mesa/drivers/dri/intel/intel_tex_image.c @@ -733,6 +733,12 @@ intelSetTexBuffer(__DRIcontext *pDRICtx, GLint target, __DRIdrawable *dPriv) intel_update_renderbuffers(pDRICtx, dPriv); rb = intel_fb->color_rb[0]; + /* If the region isn't set, then intel_update_renderbuffers was unable + * to get the buffers for the drawable. + */ + if (rb->region == NULL) + return; + type = GL_BGRA; format = GL_UNSIGNED_BYTE; internalFormat = (rb->region->cpp == 3 ? 3 : 4); -- cgit v1.2.3 From 8db761409dadc2e899d4e7107eff3aa07b07aa11 Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Fri, 12 Sep 2008 15:48:13 -0700 Subject: intel: Add a width field to regions, and use it for making miptrees in TFP. Otherwise, we would use the pitch as width of the texture, and compiz would render the pitch padding on the right hand side. --- src/mesa/drivers/dri/intel/intel_context.c | 3 ++- src/mesa/drivers/dri/intel/intel_fbo.c | 2 +- src/mesa/drivers/dri/intel/intel_mipmap_tree.c | 7 +++++-- src/mesa/drivers/dri/intel/intel_regions.c | 16 ++++++++++------ src/mesa/drivers/dri/intel/intel_regions.h | 10 ++++++---- src/mesa/drivers/dri/intel/intel_tex_image.c | 2 +- 6 files changed, 25 insertions(+), 15 deletions(-) (limited to 'src/mesa/drivers/dri/intel') diff --git a/src/mesa/drivers/dri/intel/intel_context.c b/src/mesa/drivers/dri/intel/intel_context.c index 007dee449c..23e0f6331a 100644 --- a/src/mesa/drivers/dri/intel/intel_context.c +++ b/src/mesa/drivers/dri/intel/intel_context.c @@ -301,8 +301,9 @@ intel_update_renderbuffers(__DRIcontext *context, __DRIdrawable *drawable) } else region = intel_region_alloc_for_handle(intel, buffers[i].cpp, - buffers[i].pitch / buffers[i].cpp, + drawable->w, drawable->h, + buffers[i].pitch / buffers[i].cpp, buffers[i].name, region_name); diff --git a/src/mesa/drivers/dri/intel/intel_fbo.c b/src/mesa/drivers/dri/intel/intel_fbo.c index 5bd2ebfdcf..6570f6e69b 100644 --- a/src/mesa/drivers/dri/intel/intel_fbo.c +++ b/src/mesa/drivers/dri/intel/intel_fbo.c @@ -296,7 +296,7 @@ intel_alloc_renderbuffer_storage(GLcontext * ctx, struct gl_renderbuffer *rb, DBG("Allocating %d x %d Intel RBO (pitch %d)\n", width, height, pitch); - irb->region = intel_region_alloc(intel, cpp, pitch, height); + irb->region = intel_region_alloc(intel, cpp, width, height, pitch); if (!irb->region) return GL_FALSE; /* out of memory? */ diff --git a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c index 9be7e02eff..f28fac8394 100644 --- a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c +++ b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c @@ -117,7 +117,10 @@ intel_miptree_create(struct intel_context *intel, return NULL; mt->region = intel_region_alloc(intel, - mt->cpp, mt->pitch, mt->total_height); + mt->cpp, + mt->pitch, + mt->total_height, + mt->pitch); if (!mt->region) { free(mt); @@ -141,7 +144,7 @@ intel_miptree_create_for_region(struct intel_context *intel, mt = intel_miptree_create_internal(intel, target, internal_format, first_level, last_level, - region->pitch, region->height, depth0, + region->width, region->height, 1, region->cpp, compress_byte); if (!mt) return mt; diff --git a/src/mesa/drivers/dri/intel/intel_regions.c b/src/mesa/drivers/dri/intel/intel_regions.c index 1cfc8ddd64..cb0f4ba083 100644 --- a/src/mesa/drivers/dri/intel/intel_regions.c +++ b/src/mesa/drivers/dri/intel/intel_regions.c @@ -105,7 +105,8 @@ intel_set_region_tiling_gem(struct intel_context *intel, static struct intel_region * intel_region_alloc_internal(struct intel_context *intel, - GLuint cpp, GLuint pitch, GLuint height, + GLuint cpp, + GLuint width, GLuint height, GLuint pitch, dri_bo *buffer) { struct intel_region *region; @@ -117,8 +118,9 @@ intel_region_alloc_internal(struct intel_context *intel, region = calloc(sizeof(*region), 1); region->cpp = cpp; + region->width = width; + region->height = height; region->pitch = pitch; - region->height = height; /* needed? */ region->refcount = 1; region->buffer = buffer; @@ -131,19 +133,20 @@ intel_region_alloc_internal(struct intel_context *intel, struct intel_region * intel_region_alloc(struct intel_context *intel, - GLuint cpp, GLuint pitch, GLuint height) + GLuint cpp, GLuint width, GLuint height, GLuint pitch) { dri_bo *buffer; buffer = dri_bo_alloc(intel->bufmgr, "region", pitch * cpp * height, 64); - return intel_region_alloc_internal(intel, cpp, pitch, height, buffer); + return intel_region_alloc_internal(intel, cpp, width, height, pitch, buffer); } struct intel_region * intel_region_alloc_for_handle(struct intel_context *intel, - GLuint cpp, GLuint pitch, GLuint height, + GLuint cpp, + GLuint width, GLuint height, GLuint pitch, GLuint handle, const char *name) { struct intel_region *region; @@ -151,7 +154,8 @@ intel_region_alloc_for_handle(struct intel_context *intel, buffer = intel_bo_gem_create_from_name(intel->bufmgr, name, handle); - region = intel_region_alloc_internal(intel, cpp, pitch, height, buffer); + region = intel_region_alloc_internal(intel, cpp, + width, height, pitch, buffer); if (region == NULL) return region; diff --git a/src/mesa/drivers/dri/intel/intel_regions.h b/src/mesa/drivers/dri/intel/intel_regions.h index a561de485e..62eb049fba 100644 --- a/src/mesa/drivers/dri/intel/intel_regions.h +++ b/src/mesa/drivers/dri/intel/intel_regions.h @@ -55,8 +55,9 @@ struct intel_region dri_bo *buffer; /**< buffer manager's buffer */ GLuint refcount; /**< Reference count for region */ GLuint cpp; /**< bytes per pixel */ - GLuint pitch; /**< in pixels */ + GLuint width; /**< in pixels */ GLuint height; /**< in pixels */ + GLuint pitch; /**< in pixels */ GLubyte *map; /**< only non-NULL when region is actually mapped */ GLuint map_refcount; /**< Reference count for mapping */ @@ -72,12 +73,13 @@ struct intel_region * copied by calling intel_reference_region(). */ struct intel_region *intel_region_alloc(struct intel_context *intel, - GLuint cpp, - GLuint pitch, GLuint height); + GLuint cpp, GLuint width, + GLuint height, GLuint pitch); struct intel_region * intel_region_alloc_for_handle(struct intel_context *intel, - GLuint cpp, GLuint pitch, GLuint height, + GLuint cpp, + GLuint width, GLuint height, GLuint pitch, unsigned int handle, const char *name); void intel_region_reference(struct intel_region **dst, diff --git a/src/mesa/drivers/dri/intel/intel_tex_image.c b/src/mesa/drivers/dri/intel/intel_tex_image.c index 70b0b3e245..1820d3dc05 100644 --- a/src/mesa/drivers/dri/intel/intel_tex_image.c +++ b/src/mesa/drivers/dri/intel/intel_tex_image.c @@ -757,7 +757,7 @@ intelSetTexBuffer(__DRIcontext *pDRICtx, GLint target, __DRIdrawable *dPriv) intelObj->mt = mt; texImage = _mesa_get_tex_image(&intel->ctx, texObj, target, level); _mesa_init_teximage_fields(&intel->ctx, target, texImage, - rb->region->pitch, rb->region->height, 1, + rb->region->width, rb->region->height, 1, 0, internalFormat); intelImage = intel_texture_image(texImage); -- cgit v1.2.3 From 904f31a62444d9f7e9b12ddafaa4beeb7fed6dfa Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Tue, 16 Sep 2008 17:01:06 -0700 Subject: intel: Destroy bufmgr in screen destroy, not context. Caused server crashes on second context creation since 7e0bbdcf033981282978554c2e68ce48b55aa291. Bug #17600. --- src/mesa/drivers/dri/intel/intel_context.c | 2 -- src/mesa/drivers/dri/intel/intel_screen.c | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) (limited to 'src/mesa/drivers/dri/intel') diff --git a/src/mesa/drivers/dri/intel/intel_context.c b/src/mesa/drivers/dri/intel/intel_context.c index 23e0f6331a..2ca5732606 100644 --- a/src/mesa/drivers/dri/intel/intel_context.c +++ b/src/mesa/drivers/dri/intel/intel_context.c @@ -822,8 +822,6 @@ intelDestroyContext(__DRIcontextPrivate * driContextPriv) /* free the Mesa context */ _mesa_free_context_data(&intel->ctx); - - dri_bufmgr_destroy(intel->bufmgr); } } diff --git a/src/mesa/drivers/dri/intel/intel_screen.c b/src/mesa/drivers/dri/intel/intel_screen.c index de098e5b72..373e0e155e 100644 --- a/src/mesa/drivers/dri/intel/intel_screen.c +++ b/src/mesa/drivers/dri/intel/intel_screen.c @@ -309,6 +309,7 @@ intelDestroyScreen(__DRIscreenPrivate * sPriv) { intelScreenPrivate *intelScreen = (intelScreenPrivate *) sPriv->private; + dri_bufmgr_destroy(intelScreen->bufmgr); intelUnmapScreenRegions(intelScreen); FREE(intelScreen); -- cgit v1.2.3