From e61f674844afeae7bd5ff17084a46b7215401275 Mon Sep 17 00:00:00 2001 From: Stephane Marchesin Date: Sat, 10 Mar 2007 01:23:14 +0100 Subject: nouveau: add a fifo size debug check. --- src/mesa/drivers/dri/nouveau/nouveau_fifo.c | 4 ++++ src/mesa/drivers/dri/nouveau/nouveau_fifo.h | 22 +++++++++++++++++++--- 2 files changed, 23 insertions(+), 3 deletions(-) (limited to 'src/mesa/drivers/dri/nouveau') diff --git a/src/mesa/drivers/dri/nouveau/nouveau_fifo.c b/src/mesa/drivers/dri/nouveau/nouveau_fifo.c index 7af9f1e3c2..67b5aa4f8a 100644 --- a/src/mesa/drivers/dri/nouveau/nouveau_fifo.c +++ b/src/mesa/drivers/dri/nouveau/nouveau_fifo.c @@ -38,6 +38,10 @@ USE OR OTHER DEALINGS IN THE SOFTWARE. #include "nouveau_object.h" #include "nouveau_sync.h" +#ifdef NOUVEAU_RING_DEBUG +int nouveau_fifo_remaining=0; +#endif + #define RING_SKIPS 8 diff --git a/src/mesa/drivers/dri/nouveau/nouveau_fifo.h b/src/mesa/drivers/dri/nouveau/nouveau_fifo.h index 490089f71a..0d85a94f4d 100644 --- a/src/mesa/drivers/dri/nouveau/nouveau_fifo.h +++ b/src/mesa/drivers/dri/nouveau/nouveau_fifo.h @@ -34,7 +34,7 @@ USE OR OTHER DEALINGS IN THE SOFTWARE. #include "nouveau_state_cache.h" //#define NOUVEAU_RING_TRACE -//#define NOUVEAU_RING_DEBUG +#define NOUVEAU_RING_DEBUG //#define NOUVEAU_STATE_CACHE_DISABLE #ifndef NOUVEAU_RING_TRACE @@ -74,17 +74,33 @@ USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifdef NOUVEAU_RING_DEBUG +extern int nouveau_fifo_remaining; + #define OUT_RINGp(ptr,sz) do { \ uint32_t* p=(uint32_t*)(ptr); \ int i; printf("OUT_RINGp: (size 0x%x dwords)\n",sz); for(i=0;ififo.free <= (size)) \ + WAIT_RING(nmesa,(size)); \ + OUT_RING( ((size)<<18) | ((subchannel) << 13) | (tag)); \ + nmesa->fifo.free -= ((size) + 1); \ + nouveau_fifo_remaining=size; \ }while(0) #else @@ -110,8 +126,6 @@ if (NOUVEAU_RING_TRACE) \ *((float*)(nmesa->fifo.buffer+nmesa->fifo.current++))=(n); \ }while(0) -#endif - #define BEGIN_RING_SIZE(subchannel,tag,size) do { \ nouveau_state_cache_flush(nmesa); \ if (nmesa->fifo.free <= (size)) \ @@ -120,6 +134,8 @@ if (NOUVEAU_RING_TRACE) \ nmesa->fifo.free -= ((size) + 1); \ }while(0) +#endif + extern void WAIT_RING(nouveauContextPtr nmesa,u_int32_t size); extern void nouveau_state_cache_flush(nouveauContextPtr nmesa); extern void nouveau_state_cache_init(nouveauContextPtr nmesa); -- cgit v1.2.3 From df1c3ff3ddaeee2dd32f0c3f7c298142c41982ff Mon Sep 17 00:00:00 2001 From: Stephane Marchesin Date: Sat, 10 Mar 2007 01:23:40 +0100 Subject: nouveau: some fixes to the nv04 state code. --- src/mesa/drivers/dri/nouveau/nv04_state.c | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) (limited to 'src/mesa/drivers/dri/nouveau') diff --git a/src/mesa/drivers/dri/nouveau/nv04_state.c b/src/mesa/drivers/dri/nouveau/nv04_state.c index 4129ecc50e..25df3d2a62 100644 --- a/src/mesa/drivers/dri/nouveau/nv04_state.c +++ b/src/mesa/drivers/dri/nouveau/nv04_state.c @@ -455,35 +455,37 @@ static GLboolean nv04BindBuffers(nouveauContextPtr nmesa, int num_color, nouveau_renderbuffer *depth) { GLuint x, y, w, h; + uint32_t depth_pitch=(depth?depth->pitch:0+15)&~15+16; + if (depth_pitch<256) depth_pitch=256; w = color[0]->mesa.Width; h = color[0]->mesa.Height; x = nmesa->drawX; y = nmesa->drawY; + BEGIN_RING_SIZE(NvSubCtxSurf3D, NV04_CONTEXT_SURFACES_3D_FORMAT, 1); + if (color[0]->mesa._ActualFormat == GL_RGBA8) + OUT_RING(0x108/*A8R8G8B8*/); + else + OUT_RING(0x103/*R5G6B5*/); + /* FIXME pitches have to be aligned ! */ BEGIN_RING_SIZE(NvSubCtxSurf3D, NV04_CONTEXT_SURFACES_3D_PITCH, 2); - OUT_RING(color[0]->pitch|(depth?(depth->pitch<<16):0)); + OUT_RING(color[0]->pitch|(depth_pitch<<16)); OUT_RING(color[0]->offset); - if (depth) { BEGIN_RING_SIZE(NvSubCtxSurf3D, NV04_CONTEXT_SURFACES_3D_OFFSET_ZETA, 1); OUT_RING(depth->offset); } - BEGIN_RING_SIZE(NvSubCtxSurf3D, NV04_CONTEXT_SURFACES_3D_CLIP_HORIZONTAL, 2); - OUT_RING((w<<16)|x); - OUT_RING((h<<16)|y); +// BEGIN_RING_SIZE(NvSubCtxSurf3D, NV04_CONTEXT_SURFACES_3D_CLIP_HORIZONTAL, 2); +// OUT_RING((w<<16)|x); +// OUT_RING((h<<16)|y); - /* FIXME not sure... */ - BEGIN_RING_SIZE(NvSubCtxSurf3D, NV04_CONTEXT_SURFACES_3D_CLIP_SIZE, 1); - OUT_RING((h<<16)|w); - BEGIN_RING_SIZE(NvSubCtxSurf3D, NV04_CONTEXT_SURFACES_3D_FORMAT, 1); - if (color[0]->mesa._ActualFormat == GL_RGBA8) - OUT_RING(108/*A8R8G8B8*/); - else - OUT_RING(103/*R5G6B5*/); + /* FIXME not sure... */ +/* BEGIN_RING_SIZE(NvSubCtxSurf3D, NV04_CONTEXT_SURFACES_3D_CLIP_SIZE, 1); + OUT_RING((h<<16)|w);*/ return GL_TRUE; } -- cgit v1.2.3 From 581a5940339af8b2cdd7497228d22fcf47269592 Mon Sep 17 00:00:00 2001 From: Stephane Marchesin Date: Sat, 10 Mar 2007 01:24:32 +0100 Subject: nouveau: oops don't debug by default. --- src/mesa/drivers/dri/nouveau/nouveau_fifo.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/mesa/drivers/dri/nouveau') diff --git a/src/mesa/drivers/dri/nouveau/nouveau_fifo.h b/src/mesa/drivers/dri/nouveau/nouveau_fifo.h index 0d85a94f4d..23325dcea5 100644 --- a/src/mesa/drivers/dri/nouveau/nouveau_fifo.h +++ b/src/mesa/drivers/dri/nouveau/nouveau_fifo.h @@ -34,7 +34,7 @@ USE OR OTHER DEALINGS IN THE SOFTWARE. #include "nouveau_state_cache.h" //#define NOUVEAU_RING_TRACE -#define NOUVEAU_RING_DEBUG +//#define NOUVEAU_RING_DEBUG //#define NOUVEAU_STATE_CACHE_DISABLE #ifndef NOUVEAU_RING_TRACE -- cgit v1.2.3 From 4f12b37a56b0f90d7beb248c5d3bee7600c24c14 Mon Sep 17 00:00:00 2001 From: Stephane Marchesin Date: Sat, 10 Mar 2007 01:25:51 +0100 Subject: nouveau: fix the nv04 swtcl code. --- src/mesa/drivers/dri/nouveau/nv04_swtcl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/mesa/drivers/dri/nouveau') diff --git a/src/mesa/drivers/dri/nouveau/nv04_swtcl.c b/src/mesa/drivers/dri/nouveau/nv04_swtcl.c index 9b5332b77a..a9c9c6ecf6 100644 --- a/src/mesa/drivers/dri/nouveau/nv04_swtcl.c +++ b/src/mesa/drivers/dri/nouveau/nv04_swtcl.c @@ -503,7 +503,7 @@ static inline void nv04OutputVertexFormat(struct nouveau_context* nmesa) nmesa->vertex_size=_tnl_install_attrs( ctx, nmesa->vertex_attrs, nmesa->vertex_attr_count, - ctx->Viewport._WindowMap.m, 0 ); + nmesa->viewport.m, 0 ); } -- cgit v1.2.3 From ced8870a6accbc1f5af876e81e20606bf5a4663e Mon Sep 17 00:00:00 2001 From: Stephane Marchesin Date: Sat, 10 Mar 2007 13:46:26 +0100 Subject: nouveau: fix nv04 swtcl. --- src/mesa/drivers/dri/nouveau/nv04_swtcl.c | 1 + 1 file changed, 1 insertion(+) (limited to 'src/mesa/drivers/dri/nouveau') diff --git a/src/mesa/drivers/dri/nouveau/nv04_swtcl.c b/src/mesa/drivers/dri/nouveau/nv04_swtcl.c index a9c9c6ecf6..cb072e0bdb 100644 --- a/src/mesa/drivers/dri/nouveau/nv04_swtcl.c +++ b/src/mesa/drivers/dri/nouveau/nv04_swtcl.c @@ -473,6 +473,7 @@ static inline void nv04OutputVertexFormat(struct nouveau_context* nmesa) /* * Tell t_vertex about the vertex format */ + nmesa->vertex_attr_count = 0; RENDERINPUTS_COPY(index, nmesa->render_inputs_bitset); // SX SY SZ INVW -- cgit v1.2.3