Module: Mesa Branch: nvfx-next-6 Commit: d1cd0718f007ea3140e619c1e7dc14a4a4a41ac1 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=d1cd0718f007ea3140e619c1e7dc14a4a4a41ac1
Author: Luca Barbieri <[email protected]> Date: Tue Jan 19 18:51:30 2010 +0100 nvfx: new 2D: use new 2D engine in Gallium This patch implements nv04_surface_copy/fill using the new 2D engine module. It supports falling back to the 3D engine using the u_blitter module. That support is however inactive because it requires card-specific code that will be introduced for nv30 and nvfx in a later patch. --- src/gallium/drivers/nouveau/nouveau_screen.h | 13 +++++++++++++ src/gallium/drivers/nvfx/nv04_surface_2d.h | 21 --------------------- src/gallium/drivers/nvfx/nvfx_context.h | 1 + src/gallium/drivers/nvfx/nvfx_miptree.c | 1 - src/gallium/drivers/nvfx/nvfx_resource.h | 7 +++++++ src/gallium/drivers/nvfx/nvfx_screen.h | 5 +++-- src/gallium/drivers/nvfx/nvfx_surface.h | 4 ++++ src/gallium/drivers/nvfx/nvfx_transfer.c | 3 +-- 8 files changed, 29 insertions(+), 26 deletions(-) diff --git a/src/gallium/drivers/nouveau/nouveau_screen.h b/src/gallium/drivers/nouveau/nouveau_screen.h index 747fd15..221ff49 100644 --- a/src/gallium/drivers/nouveau/nouveau_screen.h +++ b/src/gallium/drivers/nouveau/nouveau_screen.h @@ -77,4 +77,17 @@ RING_3D_NI(unsigned mthd, unsigned size) return 0x40000000 | (7 << 13) | (size << 18) | mthd; } +#include <nouveau/nouveau_bo.h> + +static inline int +nouveau_resource_on_gpu(struct pipe_resource* resource) +{ +#ifdef nouveau_bo_domain + return nouveau_bo_domain(nouveau_miptree(src->texture)->bo) & NOUVEAU_BO_VRAM; +#else + /* Can't tell, assume that if we would like it to be in VRAM, it is */ + return !(resource->_usage & PIPE_USAGE_DYNAMIC); +#endif +} + #endif diff --git a/src/gallium/drivers/nvfx/nv04_surface_2d.h b/src/gallium/drivers/nvfx/nv04_surface_2d.h deleted file mode 100644 index 0b849f0..0000000 --- a/src/gallium/drivers/nvfx/nv04_surface_2d.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef __NV04_SURFACE_2D_H__ -#define __NV04_SURFACE_2D_H__ - -struct nvfx_surface { - struct pipe_surface base; - unsigned pitch; -}; - -struct nvfx_surface_2d { - struct nouveau_notifier *ntfy; - struct nouveau_grobj *surf2d; - struct nouveau_grobj *swzsurf; - struct nouveau_grobj *m2mf; - struct nouveau_grobj *rect; - struct nouveau_grobj *blit; - struct nouveau_grobj *sifm; -}; - -#define NVFX_RESOURCE_FLAG_LINEAR (PIPE_RESOURCE_FLAG_DRV_PRIV << 0) - -#endif diff --git a/src/gallium/drivers/nvfx/nvfx_context.h b/src/gallium/drivers/nvfx/nvfx_context.h index e2c6d09..772320e 100644 --- a/src/gallium/drivers/nvfx/nvfx_context.h +++ b/src/gallium/drivers/nvfx/nvfx_context.h @@ -18,6 +18,7 @@ #include "nouveau/nouveau_gldefs.h" #include "nvfx_state.h" +#include "nvfx_surface.h" #define NOUVEAU_ERR(fmt, args...) \ fprintf(stderr, "%s:%d - "fmt, __func__, __LINE__, ##args); diff --git a/src/gallium/drivers/nvfx/nvfx_miptree.c b/src/gallium/drivers/nvfx/nvfx_miptree.c index 1aa9abf..7a2c8f8 100644 --- a/src/gallium/drivers/nvfx/nvfx_miptree.c +++ b/src/gallium/drivers/nvfx/nvfx_miptree.c @@ -7,7 +7,6 @@ #include "nouveau/nouveau_winsys.h" #include "nouveau/nouveau_screen.h" -#include "nv04_surface_2d.h" #include "nvfx_resource.h" #include "nvfx_transfer.h" #include "state_tracker/drm_api.h" diff --git a/src/gallium/drivers/nvfx/nvfx_resource.h b/src/gallium/drivers/nvfx/nvfx_resource.h index 73d4019..e5c95b0 100644 --- a/src/gallium/drivers/nvfx/nvfx_resource.h +++ b/src/gallium/drivers/nvfx/nvfx_resource.h @@ -20,6 +20,8 @@ struct nvfx_resource { struct nouveau_bo *bo; }; +#define NVFX_RESOURCE_FLAG_LINEAR (PIPE_RESOURCE_FLAG_DRV_PRIV << 0) + #define NVFX_MAX_TEXTURE_LEVELS 16 struct nvfx_miptree { @@ -30,6 +32,11 @@ struct nvfx_miptree { unsigned level_offset[NVFX_MAX_TEXTURE_LEVELS]; }; +struct nvfx_surface { + struct pipe_surface base; + unsigned pitch; +}; + static INLINE struct nvfx_resource *nvfx_resource(struct pipe_resource *resource) { diff --git a/src/gallium/drivers/nvfx/nvfx_screen.h b/src/gallium/drivers/nvfx/nvfx_screen.h index 6377194..4dedbe9 100644 --- a/src/gallium/drivers/nvfx/nvfx_screen.h +++ b/src/gallium/drivers/nvfx/nvfx_screen.h @@ -3,9 +3,10 @@ #include "util/u_double_list.h" #include "nouveau/nouveau_screen.h" -#include "nv04_surface_2d.h" #include "nvfx_context.h" +struct nv04_2d_context; + struct nvfx_screen { struct nouveau_screen base; @@ -31,7 +32,7 @@ struct nvfx_screen { struct nouveau_resource *vp_exec_heap; struct nouveau_resource *vp_data_heap; - struct nvfx_surface_2d eng2d; + struct nv04_2d_context* eng2d; }; static INLINE struct nvfx_screen * diff --git a/src/gallium/drivers/nvfx/nvfx_surface.h b/src/gallium/drivers/nvfx/nvfx_surface.h new file mode 100644 index 0000000..f3d2815 --- /dev/null +++ b/src/gallium/drivers/nvfx/nvfx_surface.h @@ -0,0 +1,4 @@ +#ifndef __NVFX_SURFACE_H__ +#define __NVFX_SURFACE_H__ + +#endif diff --git a/src/gallium/drivers/nvfx/nvfx_transfer.c b/src/gallium/drivers/nvfx/nvfx_transfer.c index ec0e6d2..d076cb7 100644 --- a/src/gallium/drivers/nvfx/nvfx_transfer.c +++ b/src/gallium/drivers/nvfx/nvfx_transfer.c @@ -79,8 +79,7 @@ nvfx_miptree_transfer_new(struct pipe_context *pipe, tx->base.box = *box; /* Direct access to texture */ - if ((util_format_is_s3tc(pt->format) || pt->_usage & PIPE_USAGE_DYNAMIC) && - pt->flags & NVFX_RESOURCE_FLAG_LINEAR) + if (pt->_usage & PIPE_USAGE_DYNAMIC && pt->flags & NVFX_RESOURCE_FLAG_LINEAR) { tx->direct = true; _______________________________________________ mesa-commit mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-commit
