mesa: Branch 'master'

Ben Skeggs darktama at kemper.freedesktop.org
Wed Feb 28 04:40:06 UTC 2007


 src/mesa/drivers/dri/nouveau/nouveau_context.c |    6 ++
 src/mesa/drivers/dri/nouveau/nouveau_context.h |    2 
 src/mesa/drivers/dri/nouveau/nouveau_object.c  |   66 +++++++++++++++----------
 src/mesa/drivers/dri/nouveau/nouveau_object.h  |   13 +++-
 src/mesa/drivers/dri/nouveau/nouveau_screen.c  |    6 +-
 src/mesa/drivers/dri/nouveau/nouveau_sync.c    |    7 +-
 6 files changed, 63 insertions(+), 37 deletions(-)

New commits:
diff-tree afa780c09d8e48c1c9ecaa4bce1bbe7e8e9c5e2c (from e21096b07c5854d01114b58f87d08709e370f8b7)
Author: Ben Skeggs <skeggsb at gmail.com>
Date:   Wed Feb 28 15:31:28 2007 +1100

    nouveau: drm interface changes

diff --git a/src/mesa/drivers/dri/nouveau/nouveau_context.c b/src/mesa/drivers/dri/nouveau/nouveau_context.c
index f811dc1..aec7b19 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_context.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_context.c
@@ -141,9 +141,15 @@ GLboolean nouveauCreateContext( const __
 	if (!nouveauDRMGetParam(nmesa, NOUVEAU_GETPARAM_FB_PHYSICAL,
 		 		&nmesa->vram_phys))
 	   return GL_FALSE;
+	if (!nouveauDRMGetParam(nmesa, NOUVEAU_GETPARAM_FB_SIZE,
+		 		&nmesa->vram_size))
+	   return GL_FALSE;
 	if (!nouveauDRMGetParam(nmesa, NOUVEAU_GETPARAM_AGP_PHYSICAL,
 		 		&nmesa->agp_phys))
 	   return GL_FALSE;
+	if (!nouveauDRMGetParam(nmesa, NOUVEAU_GETPARAM_AGP_SIZE,
+		 		&nmesa->agp_size))
+	   return GL_FALSE;
 	if (!nouveauFifoInit(nmesa))
 	   return GL_FALSE;
 	nouveauObjectInit(nmesa);
diff --git a/src/mesa/drivers/dri/nouveau/nouveau_context.h b/src/mesa/drivers/dri/nouveau/nouveau_context.h
index f61fcbb..f79a867 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_context.h
+++ b/src/mesa/drivers/dri/nouveau/nouveau_context.h
@@ -100,7 +100,9 @@ typedef struct nouveau_context {
 
 	/* Physical addresses of AGP/VRAM apertures */
 	uint64_t vram_phys;
+	uint64_t vram_size;
 	uint64_t agp_phys;
+	uint64_t agp_size;
 
 	/* Channel synchronisation */
 	nouveau_notifier *syncNotifier;
diff --git a/src/mesa/drivers/dri/nouveau/nouveau_object.c b/src/mesa/drivers/dri/nouveau/nouveau_object.c
index 302009c..468b18e 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_object.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_object.c
@@ -4,17 +4,14 @@
 #include "nouveau_reg.h"
 
 
-GLboolean nouveauCreateContextObject(nouveauContextPtr nmesa, int handle, int class, uint32_t flags, uint32_t dma_in, uint32_t dma_out, uint32_t dma_notifier)
+GLboolean nouveauCreateContextObject(nouveauContextPtr nmesa,
+				     uint32_t handle, int class)
 {
 	drm_nouveau_object_init_t cto;
 	int ret;
 
 	cto.handle = handle;
 	cto.class  = class;
-	cto.flags  = flags;
-	cto.dma0= dma_in;
-	cto.dma1= dma_out;
-	cto.dma_notifier = dma_notifier;
 	ret = drmCommandWrite(nmesa->driFd, DRM_NOUVEAU_OBJECT_INIT, &cto, sizeof(cto));
 
 	return ret == 0;
@@ -22,6 +19,7 @@ GLboolean nouveauCreateContextObject(nou
 
 GLboolean nouveauCreateDmaObject(nouveauContextPtr nmesa,
       				 uint32_t handle,
+				 int      class,
 				 uint32_t offset,
 				 uint32_t size,
 				 int	  target,
@@ -30,6 +28,7 @@ GLboolean nouveauCreateDmaObject(nouveau
 	drm_nouveau_dma_object_init_t dma;
 	int ret;
 
+	dma.class  = class;
 	dma.handle = handle;
 	dma.target = target;
 	dma.access = access;
@@ -40,6 +39,27 @@ GLboolean nouveauCreateDmaObject(nouveau
 	return ret == 0;
 }
 
+GLboolean nouveauCreateDmaObjectFromMem(nouveauContextPtr nmesa,
+					uint32_t handle, int class,
+					nouveau_mem *mem,
+					int access)
+{
+	uint32_t offset = mem->offset;
+	int target = mem->type & (NOUVEAU_MEM_FB | NOUVEAU_MEM_AGP);
+
+	if (!target)
+		return GL_FALSE;
+
+	if (target & NOUVEAU_MEM_FB)
+		offset -= nmesa->vram_phys;
+	else if (target & NOUVEAU_MEM_AGP)
+		offset -= nmesa->agp_phys;
+
+	return nouveauCreateDmaObject(nmesa, handle, class,
+				      offset, mem->size,
+				      target, access);
+}
+
 void nouveauObjectOnSubchannel(nouveauContextPtr nmesa, int subchannel, int handle)
 {
 	BEGIN_RING_SIZE(subchannel, 0, 1);
@@ -53,31 +73,25 @@ void nouveauObjectInit(nouveauContextPtr
 #endif
 
 /* We need to know vram size.. and AGP size (and even if the card is AGP..) */
-	nouveauCreateDmaObject( nmesa, NvDmaFB,
-				0, (256*1024*1024),
-				0 /*NV_DMA_TARGET_FB*/, 0 /*NV_DMA_ACCESS_RW*/);
-	nouveauCreateDmaObject( nmesa, NvDmaAGP,
-	      			nmesa->agp_phys, (128*1024*1024),
-				3 /* AGP */, 0 /* RW */);
+	nouveauCreateDmaObject( nmesa, NvDmaFB, NV_DMA_IN_MEMORY,
+				0, nmesa->vram_size,
+				NOUVEAU_MEM_FB,
+				NOUVEAU_MEM_ACCESS_RW);
+	nouveauCreateDmaObject( nmesa, NvDmaAGP, NV_DMA_IN_MEMORY,
+	      			0, nmesa->agp_size,
+				NOUVEAU_MEM_AGP,
+				NOUVEAU_MEM_ACCESS_RW);
 
-	nouveauCreateContextObject(nmesa, Nv3D, nmesa->screen->card->class_3d,
-	      			   0, 0, 0, 0);
+	nouveauCreateContextObject(nmesa, Nv3D, nmesa->screen->card->class_3d);
 	if (nmesa->screen->card->type>=NV_10) {
-		nouveauCreateContextObject(nmesa, NvCtxSurf2D, NV10_CONTEXT_SURFACES_2D,
-	      			   0, 0, 0, 0);
-		nouveauCreateContextObject(nmesa, NvImageBlit, NV10_IMAGE_BLIT,
-	      			   NV_DMA_CONTEXT_FLAGS_PATCH_SRCCOPY, 0, 0, 0);
+		nouveauCreateContextObject(nmesa, NvCtxSurf2D, NV10_CONTEXT_SURFACES_2D);
+		nouveauCreateContextObject(nmesa, NvImageBlit, NV10_IMAGE_BLIT);
 	} else {
-		nouveauCreateContextObject(nmesa, NvCtxSurf2D, NV04_CONTEXT_SURFACES_2D,
-	      			   0, 0, 0, 0);
-		nouveauCreateContextObject(nmesa, NvCtxSurf3D, NV04_CONTEXT_SURFACES_3D,
-	      			   0, 0, 0, 0);
-		nouveauCreateContextObject(nmesa, NvImageBlit, NV_IMAGE_BLIT,
-	      			   NV_DMA_CONTEXT_FLAGS_PATCH_SRCCOPY, 0, 0, 0);
+		nouveauCreateContextObject(nmesa, NvCtxSurf2D, NV04_CONTEXT_SURFACES_2D);
+		nouveauCreateContextObject(nmesa, NvCtxSurf3D, NV04_CONTEXT_SURFACES_3D);
+		nouveauCreateContextObject(nmesa, NvImageBlit, NV_IMAGE_BLIT);
 	}
-	nouveauCreateContextObject(nmesa, NvMemFormat,
-	      			   NV_MEMORY_TO_MEMORY_FORMAT,
-	      			   0, 0, 0, 0);
+	nouveauCreateContextObject(nmesa, NvMemFormat, NV_MEMORY_TO_MEMORY_FORMAT);
 
 #ifdef ALLOW_MULTI_SUBCHANNEL
 	nouveauObjectOnSubchannel(nmesa, NvSubCtxSurf2D, NvCtxSurf2D);
diff --git a/src/mesa/drivers/dri/nouveau/nouveau_object.h b/src/mesa/drivers/dri/nouveau/nouveau_object.h
index daad281..0be9b43 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_object.h
+++ b/src/mesa/drivers/dri/nouveau/nouveau_object.h
@@ -30,15 +30,18 @@ enum DMASubchannel {
 extern void nouveauObjectOnSubchannel(nouveauContextPtr nmesa, int subchannel, int handle);
 
 extern GLboolean nouveauCreateContextObject(nouveauContextPtr nmesa,
-      					    int handle, int class,
-					    uint32_t flags,
-					    uint32_t dma_in,
-					    uint32_t dma_out,
-					    uint32_t dma_notifier);
+      					    uint32_t handle, int class);
 extern GLboolean nouveauCreateDmaObject(nouveauContextPtr nmesa,
       					uint32_t handle,
+					int      class,
 					uint32_t offset,
 					uint32_t size,
 					int      target,
 					int      access);
+extern GLboolean nouveauCreateDmaObjectFromMem(nouveauContextPtr nmesa,
+					       uint32_t     handle,
+					       int          class,
+					       nouveau_mem *mem,
+					       int          access);
+
 #endif
diff --git a/src/mesa/drivers/dri/nouveau/nouveau_screen.c b/src/mesa/drivers/dri/nouveau/nouveau_screen.c
index 881b201..24e7775 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_screen.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_screen.c
@@ -327,8 +327,10 @@ void * __driCreateNewScreen_20050727( __
 	__DRIscreenPrivate *psp;
 	static const __DRIversion ddx_expected = { 1, 2, 0 };
 	static const __DRIversion dri_expected = { 4, 0, 0 };
-	static const __DRIversion drm_expected = { 0, 0, 3 };
-
+	static const __DRIversion drm_expected = { 0, 0, NOUVEAU_DRM_HEADER_PATCHLEVEL };
+#if NOUVEAU_DRM_HEADER_PATCHLEVEL != 4
+#error nouveau_drm.h version doesn't match expected version
+#endif
 	dri_interface = interface;
 
 	if (!driCheckDriDdxDrmVersions2("nouveau",
diff --git a/src/mesa/drivers/dri/nouveau/nouveau_sync.c b/src/mesa/drivers/dri/nouveau/nouveau_sync.c
index c47ff3a..428b19b 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_sync.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_sync.c
@@ -58,10 +58,9 @@ nouveau_notifier_new(GLcontext *ctx, GLu
 		return NULL;
 	}
 
-	if (!nouveauCreateDmaObject(nmesa, handle, notifier->mem->offset,
-						   notifier->mem->size,
-						   0 /* NV_DMA_TARGET_FB */,
-						   0 /* NV_DMA_ACCESS_RW */)) {
+	if (!nouveauCreateDmaObjectFromMem(nmesa, handle, NV_DMA_IN_MEMORY,
+					   notifier->mem,
+					   NOUVEAU_MEM_ACCESS_RW)) {
 		nouveau_mem_free(ctx, notifier->mem);
 		FREE(notifier);
 		return NULL;



More information about the mesa-commit mailing list