diff options
Diffstat (limited to 'src/gallium')
| -rw-r--r-- | src/gallium/drivers/nouveau/Makefile | 3 | ||||
| -rw-r--r-- | src/gallium/drivers/nouveau/nouveau_context.c | 41 | ||||
| -rw-r--r-- | src/gallium/drivers/nouveau/nouveau_context.h | 11 | ||||
| -rw-r--r-- | src/gallium/drivers/nv04/nv04_context.c | 28 | ||||
| -rw-r--r-- | src/gallium/drivers/nv04/nv04_context.h | 1 | ||||
| -rw-r--r-- | src/gallium/drivers/nv10/nv10_context.c | 27 | ||||
| -rw-r--r-- | src/gallium/drivers/nv10/nv10_context.h | 1 | ||||
| -rw-r--r-- | src/gallium/drivers/nv20/nv20_context.c | 28 | ||||
| -rw-r--r-- | src/gallium/drivers/nv20/nv20_context.h | 1 | ||||
| -rw-r--r-- | src/gallium/drivers/nv30/nv30_context.c | 35 | ||||
| -rw-r--r-- | src/gallium/drivers/nv30/nv30_context.h | 1 | ||||
| -rw-r--r-- | src/gallium/drivers/nv40/nv40_context.c | 35 | ||||
| -rw-r--r-- | src/gallium/drivers/nv40/nv40_context.h | 1 | ||||
| -rw-r--r-- | src/gallium/drivers/nv50/nv50_context.c | 27 | ||||
| -rw-r--r-- | src/gallium/drivers/nv50/nv50_context.h | 1 | 
15 files changed, 72 insertions, 169 deletions
| diff --git a/src/gallium/drivers/nouveau/Makefile b/src/gallium/drivers/nouveau/Makefile index dbe8a6e7bf..0cb66041d5 100644 --- a/src/gallium/drivers/nouveau/Makefile +++ b/src/gallium/drivers/nouveau/Makefile @@ -3,6 +3,7 @@ include $(TOP)/configs/current  LIBNAME = nouveau -C_SOURCES = nouveau_screen.c +C_SOURCES = nouveau_screen.c \ +	    nouveau_context.c  include ../../Makefile.template diff --git a/src/gallium/drivers/nouveau/nouveau_context.c b/src/gallium/drivers/nouveau/nouveau_context.c new file mode 100644 index 0000000000..23443869e6 --- /dev/null +++ b/src/gallium/drivers/nouveau/nouveau_context.c @@ -0,0 +1,41 @@ +#include <pipe/p_defines.h> +#include <pipe/p_context.h> + +#include "nouveau/nouveau_screen.h" +#include "nouveau/nouveau_context.h" + +#include "nouveau/nouveau_bo.h" + +static unsigned int +nouveau_reference_flags(struct nouveau_bo *bo) +{ +	uint32_t bo_flags; +	int flags = 0; + +	bo_flags = nouveau_bo_pending(bo); +	if (bo_flags & NOUVEAU_BO_RD) +		flags |= PIPE_REFERENCED_FOR_READ; +	if (bo_flags & NOUVEAU_BO_WR) +		flags |= PIPE_REFERENCED_FOR_WRITE; + +	return flags; +} + +unsigned int +nouveau_is_texture_referenced(struct pipe_context *pipe, +			      struct pipe_texture *pt, +			      unsigned face, unsigned level) +{ +	struct nouveau_miptree *mt = nouveau_miptree(pt); + +	return nouveau_reference_flags(mt->bo); +} + +unsigned int +nouveau_is_buffer_referenced(struct pipe_context *pipe, struct pipe_buffer *pb) +{ +	struct nouveau_bo *bo = nouveau_bo(pb); + +	return nouveau_reference_flags(bo); +} + diff --git a/src/gallium/drivers/nouveau/nouveau_context.h b/src/gallium/drivers/nouveau/nouveau_context.h new file mode 100644 index 0000000000..6a28d40da7 --- /dev/null +++ b/src/gallium/drivers/nouveau/nouveau_context.h @@ -0,0 +1,11 @@ +#ifndef __NOUVEAU_CONTEXT_H__ +#define __NOUVEAU_CONTEXT_H__ + +unsigned int +nouveau_is_texture_referenced(struct pipe_context *, struct pipe_texture *, +			      unsigned face, unsigned level); + +unsigned int +nouveau_is_buffer_referenced(struct pipe_context *, struct pipe_buffer *); + +#endif diff --git a/src/gallium/drivers/nv04/nv04_context.c b/src/gallium/drivers/nv04/nv04_context.c index 17166c9f51..10d984ace9 100644 --- a/src/gallium/drivers/nv04/nv04_context.c +++ b/src/gallium/drivers/nv04/nv04_context.c @@ -64,30 +64,6 @@ nv04_init_hwctx(struct nv04_context *nv04)  	return TRUE;  } -static unsigned int -nv04_is_texture_referenced( struct pipe_context *pipe, -			    struct pipe_texture *texture, -			    unsigned face, unsigned level) -{ -   /** -    * FIXME: Optimize. -    */ - -   return PIPE_REFERENCED_FOR_READ | PIPE_REFERENCED_FOR_WRITE; -} - -static unsigned int -nv04_is_buffer_referenced( struct pipe_context *pipe, -			   struct pipe_buffer *buf) -{ -   /** -    * FIXME: Optimize. -    */ - -   return PIPE_REFERENCED_FOR_READ | PIPE_REFERENCED_FOR_WRITE; -} - -  struct pipe_context *  nv04_create(struct pipe_screen *pscreen, unsigned pctx_id)  { @@ -113,8 +89,8 @@ nv04_create(struct pipe_screen *pscreen, unsigned pctx_id)  	nv04->pipe.clear = nv04_clear;  	nv04->pipe.flush = nv04_flush; -	nv04->pipe.is_texture_referenced = nv04_is_texture_referenced; -	nv04->pipe.is_buffer_referenced = nv04_is_buffer_referenced; +	nv04->pipe.is_texture_referenced = nouveau_is_texture_referenced; +	nv04->pipe.is_buffer_referenced = nouveau_is_buffer_referenced;  	nv04_init_surface_functions(nv04);  	nv04_init_state_functions(nv04); diff --git a/src/gallium/drivers/nv04/nv04_context.h b/src/gallium/drivers/nv04/nv04_context.h index 2842b2c90d..55326c787a 100644 --- a/src/gallium/drivers/nv04/nv04_context.h +++ b/src/gallium/drivers/nv04/nv04_context.h @@ -13,6 +13,7 @@  #include "nouveau/nouveau_winsys.h"  #include "nouveau/nouveau_gldefs.h" +#include "nouveau/nouveau_context.h"  #define NOUVEAU_PUSH_CONTEXT(ctx)                                              \  	struct nv04_screen *ctx = nv04->screen diff --git a/src/gallium/drivers/nv10/nv10_context.c b/src/gallium/drivers/nv10/nv10_context.c index a127b134ec..933176fc32 100644 --- a/src/gallium/drivers/nv10/nv10_context.c +++ b/src/gallium/drivers/nv10/nv10_context.c @@ -257,29 +257,6 @@ nv10_set_edgeflags(struct pipe_context *pipe, const unsigned *bitfield)  {  } -static unsigned int -nv10_is_texture_referenced( struct pipe_context *pipe, -			    struct pipe_texture *texture, -			    unsigned face, unsigned level) -{ -   /** -    * FIXME: Optimize. -    */ - -   return PIPE_REFERENCED_FOR_READ | PIPE_REFERENCED_FOR_WRITE; -} - -static unsigned int -nv10_is_buffer_referenced( struct pipe_context *pipe, -			   struct pipe_buffer *buf) -{ -   /** -    * FIXME: Optimize. -    */ - -   return PIPE_REFERENCED_FOR_READ | PIPE_REFERENCED_FOR_WRITE; -} -  struct pipe_context *  nv10_create(struct pipe_screen *pscreen, unsigned pctx_id)  { @@ -305,8 +282,8 @@ nv10_create(struct pipe_screen *pscreen, unsigned pctx_id)  	nv10->pipe.clear = nv10_clear;  	nv10->pipe.flush = nv10_flush; -	nv10->pipe.is_texture_referenced = nv10_is_texture_referenced; -	nv10->pipe.is_buffer_referenced = nv10_is_buffer_referenced; +	nv10->pipe.is_texture_referenced = nouveau_is_texture_referenced; +	nv10->pipe.is_buffer_referenced = nouveau_is_buffer_referenced;  	nv10_init_surface_functions(nv10);  	nv10_init_state_functions(nv10); diff --git a/src/gallium/drivers/nv10/nv10_context.h b/src/gallium/drivers/nv10/nv10_context.h index f1e003c953..36a6aa7a74 100644 --- a/src/gallium/drivers/nv10/nv10_context.h +++ b/src/gallium/drivers/nv10/nv10_context.h @@ -13,6 +13,7 @@  #include "nouveau/nouveau_winsys.h"  #include "nouveau/nouveau_gldefs.h" +#include "nouveau/nouveau_context.h"  #define NOUVEAU_PUSH_CONTEXT(ctx)                                              \  	struct nv10_screen *ctx = nv10->screen diff --git a/src/gallium/drivers/nv20/nv20_context.c b/src/gallium/drivers/nv20/nv20_context.c index b32d0d83ba..9a48739661 100644 --- a/src/gallium/drivers/nv20/nv20_context.c +++ b/src/gallium/drivers/nv20/nv20_context.c @@ -380,30 +380,6 @@ nv20_set_edgeflags(struct pipe_context *pipe, const unsigned *bitfield)  {  } - -static unsigned int -nv20_is_texture_referenced( struct pipe_context *pipe, -			    struct pipe_texture *texture, -			    unsigned face, unsigned level) -{ -   /** -    * FIXME: Optimize. -    */ - -   return PIPE_REFERENCED_FOR_READ | PIPE_REFERENCED_FOR_WRITE; -} - -static unsigned int -nv20_is_buffer_referenced( struct pipe_context *pipe, -			   struct pipe_buffer *buf) -{ -   /** -    * FIXME: Optimize. -    */ - -   return PIPE_REFERENCED_FOR_READ | PIPE_REFERENCED_FOR_WRITE; -} -  struct pipe_context *  nv20_create(struct pipe_screen *pscreen, unsigned pctx_id)  { @@ -429,8 +405,8 @@ nv20_create(struct pipe_screen *pscreen, unsigned pctx_id)  	nv20->pipe.clear = nv20_clear;  	nv20->pipe.flush = nv20_flush; -	nv20->pipe.is_texture_referenced = nv20_is_texture_referenced; -	nv20->pipe.is_buffer_referenced = nv20_is_buffer_referenced; +	nv20->pipe.is_texture_referenced = nouveau_is_texture_referenced; +	nv20->pipe.is_buffer_referenced = nouveau_is_buffer_referenced;  	nv20_init_surface_functions(nv20);  	nv20_init_state_functions(nv20); diff --git a/src/gallium/drivers/nv20/nv20_context.h b/src/gallium/drivers/nv20/nv20_context.h index fc932f1f90..a4eaa95660 100644 --- a/src/gallium/drivers/nv20/nv20_context.h +++ b/src/gallium/drivers/nv20/nv20_context.h @@ -13,6 +13,7 @@  #include "nouveau/nouveau_winsys.h"  #include "nouveau/nouveau_gldefs.h" +#include "nouveau/nouveau_context.h"  #define NOUVEAU_PUSH_CONTEXT(ctx)                                              \  	struct nv20_screen *ctx = nv20->screen diff --git a/src/gallium/drivers/nv30/nv30_context.c b/src/gallium/drivers/nv30/nv30_context.c index a3e65b96f7..d8300fd69f 100644 --- a/src/gallium/drivers/nv30/nv30_context.c +++ b/src/gallium/drivers/nv30/nv30_context.c @@ -31,37 +31,6 @@ nv30_destroy(struct pipe_context *pipe)  	FREE(nv30);  } -static unsigned int -nv30_is_texture_referenced( struct pipe_context *pipe, -			    struct pipe_texture *texture, -			    unsigned face, unsigned level) -{ -   /** -    * FIXME: Return the corrent result. We can't alays return referenced -    *        since it causes a double flush within the vbo module. -    */ -#if 0 -   return PIPE_REFERENCED_FOR_READ | PIPE_REFERENCED_FOR_WRITE; -#else -   return 0; -#endif -} - -static unsigned int -nv30_is_buffer_referenced( struct pipe_context *pipe, -			   struct pipe_buffer *buf) -{ -   /** -    * FIXME: Return the corrent result. We can't alays return referenced -    *        since it causes a double flush within the vbo module. -    */ -#if 0 -   return PIPE_REFERENCED_FOR_READ | PIPE_REFERENCED_FOR_WRITE; -#else -   return 0; -#endif -} -  struct pipe_context *  nv30_create(struct pipe_screen *pscreen, unsigned pctx_id)  { @@ -86,8 +55,8 @@ nv30_create(struct pipe_screen *pscreen, unsigned pctx_id)  	nv30->pipe.clear = nv30_clear;  	nv30->pipe.flush = nv30_flush; -	nv30->pipe.is_texture_referenced = nv30_is_texture_referenced; -	nv30->pipe.is_buffer_referenced = nv30_is_buffer_referenced; +	nv30->pipe.is_texture_referenced = nouveau_is_texture_referenced; +	nv30->pipe.is_buffer_referenced = nouveau_is_buffer_referenced;  	nv30_init_query_functions(nv30);  	nv30_init_surface_functions(nv30); diff --git a/src/gallium/drivers/nv30/nv30_context.h b/src/gallium/drivers/nv30/nv30_context.h index 4229c0a0e1..8d49366dfc 100644 --- a/src/gallium/drivers/nv30/nv30_context.h +++ b/src/gallium/drivers/nv30/nv30_context.h @@ -13,6 +13,7 @@  #include "nouveau/nouveau_winsys.h"  #include "nouveau/nouveau_gldefs.h" +#include "nouveau/nouveau_context.h"  #define NOUVEAU_PUSH_CONTEXT(ctx)                                              \  	struct nv30_screen *ctx = nv30->screen diff --git a/src/gallium/drivers/nv40/nv40_context.c b/src/gallium/drivers/nv40/nv40_context.c index 4e23671202..7f008274a4 100644 --- a/src/gallium/drivers/nv40/nv40_context.c +++ b/src/gallium/drivers/nv40/nv40_context.c @@ -31,37 +31,6 @@ nv40_destroy(struct pipe_context *pipe)  	FREE(nv40);  } -static unsigned int -nv40_is_texture_referenced( struct pipe_context *pipe, -			    struct pipe_texture *texture, -			    unsigned face, unsigned level) -{ -   /** -    * FIXME: Return the correct result. We can't always return referenced -    *        since it causes a double flush within the vbo module. -    */ -#if 0 -   return PIPE_REFERENCED_FOR_READ | PIPE_REFERENCED_FOR_WRITE; -#else -   return 0; -#endif -} - -static unsigned int -nv40_is_buffer_referenced( struct pipe_context *pipe, -			   struct pipe_buffer *buf) -{ -   /** -    * FIXME: Return the correct result. We can't always return referenced -    *        since it causes a double flush within the vbo module. -    */ -#if 0 -   return PIPE_REFERENCED_FOR_READ | PIPE_REFERENCED_FOR_WRITE; -#else -   return 0; -#endif -} -  struct pipe_context *  nv40_create(struct pipe_screen *pscreen, unsigned pctx_id)  { @@ -86,8 +55,8 @@ nv40_create(struct pipe_screen *pscreen, unsigned pctx_id)  	nv40->pipe.clear = nv40_clear;  	nv40->pipe.flush = nv40_flush; -	nv40->pipe.is_texture_referenced = nv40_is_texture_referenced; -	nv40->pipe.is_buffer_referenced = nv40_is_buffer_referenced; +	nv40->pipe.is_texture_referenced = nouveau_is_texture_referenced; +	nv40->pipe.is_buffer_referenced = nouveau_is_buffer_referenced;  	nv40_init_query_functions(nv40);  	nv40_init_surface_functions(nv40); diff --git a/src/gallium/drivers/nv40/nv40_context.h b/src/gallium/drivers/nv40/nv40_context.h index 97bc83292d..a3d594167a 100644 --- a/src/gallium/drivers/nv40/nv40_context.h +++ b/src/gallium/drivers/nv40/nv40_context.h @@ -13,6 +13,7 @@  #include "nouveau/nouveau_winsys.h"  #include "nouveau/nouveau_gldefs.h" +#include "nouveau/nouveau_context.h"  #define NOUVEAU_PUSH_CONTEXT(ctx)                                              \  	struct nv40_screen *ctx = nv40->screen diff --git a/src/gallium/drivers/nv50/nv50_context.c b/src/gallium/drivers/nv50/nv50_context.c index fca078b174..7ef27bb671 100644 --- a/src/gallium/drivers/nv50/nv50_context.c +++ b/src/gallium/drivers/nv50/nv50_context.c @@ -60,29 +60,6 @@ nv50_set_edgeflags(struct pipe_context *pipe, const unsigned *bitfield)  {  } -static unsigned int -nv50_is_texture_referenced( struct pipe_context *pipe, -			    struct pipe_texture *texture, -			    unsigned face, unsigned level) -{ -   /** -    * FIXME: Optimize. -    */ - -   return PIPE_REFERENCED_FOR_READ | PIPE_REFERENCED_FOR_WRITE; -} - -static unsigned int -nv50_is_buffer_referenced( struct pipe_context *pipe, -			   struct pipe_buffer *buf) -{ -   /** -    * FIXME: Optimize. -    */ - -   return PIPE_REFERENCED_FOR_READ | PIPE_REFERENCED_FOR_WRITE; -} -  struct pipe_context *  nv50_create(struct pipe_screen *pscreen, unsigned pctx_id)  { @@ -108,8 +85,8 @@ nv50_create(struct pipe_screen *pscreen, unsigned pctx_id)  	nv50->pipe.flush = nv50_flush; -	nv50->pipe.is_texture_referenced = nv50_is_texture_referenced; -	nv50->pipe.is_buffer_referenced = nv50_is_buffer_referenced; +	nv50->pipe.is_texture_referenced = nouveau_is_texture_referenced; +	nv50->pipe.is_buffer_referenced = nouveau_is_buffer_referenced;  	screen->base.channel->user_private = nv50;  	screen->base.channel->flush_notify = nv50_state_flush_notify; diff --git a/src/gallium/drivers/nv50/nv50_context.h b/src/gallium/drivers/nv50/nv50_context.h index 4608854d71..fd2dab856d 100644 --- a/src/gallium/drivers/nv50/nv50_context.h +++ b/src/gallium/drivers/nv50/nv50_context.h @@ -14,6 +14,7 @@  #include "nouveau/nouveau_winsys.h"  #include "nouveau/nouveau_gldefs.h"  #include "nouveau/nouveau_stateobj.h" +#include "nouveau/nouveau_context.h"  #include "nv50_screen.h"  #include "nv50_program.h" | 
