From 501ad0e1341b4f3320aed9a85fc5a24405c88e4d Mon Sep 17 00:00:00 2001 From: Axel Davy Date: Thu, 21 May 2020 16:55:19 +0200 Subject: [PATCH] st/nine: Add new debug and error checks MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add new debug messages and error checks Signed-off-by: Axel Davy Acked-by: Timur Kristóf Part-of: --- src/gallium/frontends/nine/basetexture9.c | 2 ++ src/gallium/frontends/nine/buffer9.c | 1 + src/gallium/frontends/nine/iunknown.c | 14 +++++++++++--- src/gallium/frontends/nine/nine_buffer_upload.c | 5 ++++- src/gallium/frontends/nine/surface9.c | 3 ++- src/gallium/frontends/nine/texture9.c | 2 ++ 6 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/gallium/frontends/nine/basetexture9.c b/src/gallium/frontends/nine/basetexture9.c index d0dd4a6d17b..04a78e5e40f 100644 --- a/src/gallium/frontends/nine/basetexture9.c +++ b/src/gallium/frontends/nine/basetexture9.c @@ -588,6 +588,8 @@ NineBaseTexture9_PreLoad( struct NineBaseTexture9 *This ) void NineBaseTexture9_UnLoad( struct NineBaseTexture9 *This ) { + DBG("This=%p\n", This); + if (This->base.pool != D3DPOOL_MANAGED || This->managed.lod_resident == -1) return; diff --git a/src/gallium/frontends/nine/buffer9.c b/src/gallium/frontends/nine/buffer9.c index ff017c1c08c..d1368517f11 100644 --- a/src/gallium/frontends/nine/buffer9.c +++ b/src/gallium/frontends/nine/buffer9.c @@ -358,6 +358,7 @@ NineBuffer9_Lock( struct NineBuffer9 *This, This->maps[This->nmaps].buf = This->buf; This->nmaps++; This->nlocks++; + DBG("Returning %p\n", nine_upload_buffer_get_map(This->buf) + OffsetToLock); *ppbData = nine_upload_buffer_get_map(This->buf) + OffsetToLock; return D3D_OK; } else { diff --git a/src/gallium/frontends/nine/iunknown.c b/src/gallium/frontends/nine/iunknown.c index 7f63af4c705..c4b08bbf691 100644 --- a/src/gallium/frontends/nine/iunknown.c +++ b/src/gallium/frontends/nine/iunknown.c @@ -205,7 +205,7 @@ NineUnknown_SetPrivateData( struct NineUnknown *This, /* data consists of a header and the actual data. avoiding 2 mallocs */ header = CALLOC_VARIANT_LENGTH_STRUCT(pheader, SizeOfData); - if (!header) { return E_OUTOFMEMORY; } + if (!header) { DBG("Returning E_OUTOFMEMORY\n"); return E_OUTOFMEMORY; } header->unknown = (Flags & D3DSPD_IUNKNOWN) ? TRUE : FALSE; /* if the refguid already exists, delete it */ @@ -223,6 +223,7 @@ NineUnknown_SetPrivateData( struct NineUnknown *This, memcpy(header_data, user_data, header->size); memcpy(&header->guid, refguid, sizeof(header->guid)); + DBG("New header %p, size %d\n", header, (int)header->size); _mesa_hash_table_insert(This->pdata, &header->guid, header); if (header->unknown) { IUnknown_AddRef(*(IUnknown **)header_data); } return D3D_OK; @@ -245,22 +246,26 @@ NineUnknown_GetPrivateData( struct NineUnknown *This, (void)guid_str; header = util_hash_table_get(This->pdata, refguid); - if (!header) { return D3DERR_NOTFOUND; } + if (!header) { DBG("Returning D3DERR_NOTFOUND\n"); return D3DERR_NOTFOUND; } user_assert(pSizeOfData, E_POINTER); sizeofdata = *pSizeOfData; *pSizeOfData = header->size; + DBG("Found header %p, size %d. Requested max %d\n", header, (int)header->size, (int)sizeofdata); if (!pData) { + DBG("Returning early D3D_OK\n"); return D3D_OK; } if (sizeofdata < header->size) { + DBG("Returning D3DERR_MOREDATA\n"); return D3DERR_MOREDATA; } header_data = (void *)header + sizeof(*header); if (header->unknown) { IUnknown_AddRef(*(IUnknown **)header_data); } memcpy(pData, header_data, header->size); + DBG("Returning D3D_OK\n"); return D3D_OK; } @@ -277,9 +282,12 @@ NineUnknown_FreePrivateData( struct NineUnknown *This, (void)guid_str; header = util_hash_table_get(This->pdata, refguid); - if (!header) + if (!header) { + DBG("Nothing to free\n"); return D3DERR_NOTFOUND; + } + DBG("Freeing %p\n", header); ht_guid_delete(NULL, header, NULL); _mesa_hash_table_remove_key(This->pdata, refguid); diff --git a/src/gallium/frontends/nine/nine_buffer_upload.c b/src/gallium/frontends/nine/nine_buffer_upload.c index 0fbaa754de6..8cb175287ca 100644 --- a/src/gallium/frontends/nine/nine_buffer_upload.c +++ b/src/gallium/frontends/nine/nine_buffer_upload.c @@ -75,7 +75,7 @@ nine_upload_create_buffer_group(struct nine_buffer_upload *upload, { struct pipe_resource resource; struct pipe_screen *screen = upload->pipe->screen; - DBG("%p %p\n", upload, group); + DBG("Allocating %p %p\n", upload, group); memset(&resource, 0, sizeof(resource)); resource.target = PIPE_BUFFER; @@ -107,6 +107,7 @@ nine_upload_create_buffer_group(struct nine_buffer_upload *upload, } group->free_offset = 0; + DBG("Success: %p %p\n", group->map, group->map+upload->buffers_size); } static void @@ -114,6 +115,7 @@ nine_upload_destroy_buffer_group(struct nine_buffer_upload *upload, struct nine_buffer_group *group) { DBG("%p %p\n", upload, group); + DBG("Release: %p %p\n", group->map, group->map+upload->buffers_size); assert(group->refcount == 0); if (group->transfer) @@ -279,6 +281,7 @@ uint8_t * nine_upload_buffer_get_map(struct nine_subbuffer *buf) { if (buf->parent) { + DBG("%d\n", buf->parent->refcount); return buf->parent->map + buf->offset; } /* lonely buffer */ diff --git a/src/gallium/frontends/nine/surface9.c b/src/gallium/frontends/nine/surface9.c index ed1be08c5d2..7582104239f 100644 --- a/src/gallium/frontends/nine/surface9.c +++ b/src/gallium/frontends/nine/surface9.c @@ -359,6 +359,7 @@ NineSurface9_GetDesc( struct NineSurface9 *This, D3DSURFACE_DESC *pDesc ) { user_assert(pDesc != NULL, E_POINTER); + DBG("This=%p pDesc=%p\n", This, pDesc); *pDesc = This->desc; return D3D_OK; } @@ -494,7 +495,6 @@ NineSurface9_LockRect( struct NineSurface9 *This, stride = This->stride_internal; data = This->data_internal; } - DBG("returning system memory\n"); /* ATI1 and ATI2 need special handling, because of d3d9 bug. * We must advertise to the application as if it is uncompressed * and bpp 8, and the app has a workaround to work with the fact @@ -510,6 +510,7 @@ NineSurface9_LockRect( struct NineSurface9 *This, box.x, box.y); } + DBG("returning system memory %p\n", pLockedRect->pBits); } else { bool no_refs = !p_atomic_read(&This->base.base.bind) && !(This->base.base.container && p_atomic_read(&This->base.base.container->bind)); diff --git a/src/gallium/frontends/nine/texture9.c b/src/gallium/frontends/nine/texture9.c index ae779a0bb5b..b1a45763b81 100644 --- a/src/gallium/frontends/nine/texture9.c +++ b/src/gallium/frontends/nine/texture9.c @@ -243,6 +243,7 @@ NineTexture9_GetLevelDesc( struct NineTexture9 *This, DBG("This=%p Level=%d pDesc=%p\n", This, Level, pDesc); user_assert(Level < This->base.level_count, D3DERR_INVALIDCALL); + user_assert(pDesc, D3DERR_INVALIDCALL); *pDesc = This->surfaces[Level]->desc; @@ -257,6 +258,7 @@ NineTexture9_GetSurfaceLevel( struct NineTexture9 *This, DBG("This=%p Level=%d ppSurfaceLevel=%p\n", This, Level, ppSurfaceLevel); user_assert(Level < This->base.level_count, D3DERR_INVALIDCALL); + user_assert(ppSurfaceLevel, D3DERR_INVALIDCALL); NineUnknown_AddRef(NineUnknown(This->surfaces[Level])); *ppSurfaceLevel = (IDirect3DSurface9 *)This->surfaces[Level];