[Mesa-dev] [PATCH] svga: move draw debug code into separate function
Charmaine Lee
charmainel at vmware.com
Mon Apr 21 13:48:22 PDT 2014
----- Original Message -----
> ---
> src/gallium/drivers/svga/svga_draw.c | 258
> ++++++++++++++++++----------------
> 1 file changed, 135 insertions(+), 123 deletions(-)
>
> diff --git a/src/gallium/drivers/svga/svga_draw.c
> b/src/gallium/drivers/svga/svga_draw.c
> index fa0cac4..366a2dc 100644
> --- a/src/gallium/drivers/svga/svga_draw.c
> +++ b/src/gallium/drivers/svga/svga_draw.c
> @@ -287,6 +287,140 @@ svga_hwtnl_set_index_bias(struct svga_hwtnl *hwtnl, int
> index_bias)
> * Internal functions:
> */
>
> +/**
> + * For debugging only.
> + */
> +static void
> +check_draw_params(struct svga_hwtnl *hwtnl,
> + const SVGA3dPrimitiveRange *range,
> + unsigned min_index, unsigned max_index,
> + struct pipe_resource *ib)
> +{
> + unsigned i;
> +
> + for (i = 0; i < hwtnl->cmd.vdecl_count; i++) {
> + struct pipe_resource *vb = hwtnl->cmd.vdecl_vb[i];
> + unsigned size = vb ? vb->width0 : 0;
> + unsigned offset = hwtnl->cmd.vdecl[i].array.offset;
> + unsigned stride = hwtnl->cmd.vdecl[i].array.stride;
> + int index_bias = (int) range->indexBias + hwtnl->index_bias;
> + unsigned width;
> +
> + assert(vb);
> + assert(size);
> + assert(offset < size);
> + assert(min_index <= max_index);
> +
> + switch (hwtnl->cmd.vdecl[i].identity.type) {
> + case SVGA3D_DECLTYPE_FLOAT1:
> + width = 4;
> + break;
> + case SVGA3D_DECLTYPE_FLOAT2:
> + width = 4 * 2;
> + break;
> + case SVGA3D_DECLTYPE_FLOAT3:
> + width = 4 * 3;
> + break;
> + case SVGA3D_DECLTYPE_FLOAT4:
> + width = 4 * 4;
> + break;
> + case SVGA3D_DECLTYPE_D3DCOLOR:
> + width = 4;
> + break;
> + case SVGA3D_DECLTYPE_UBYTE4:
> + width = 1 * 4;
> + break;
> + case SVGA3D_DECLTYPE_SHORT2:
> + width = 2 * 2;
> + break;
> + case SVGA3D_DECLTYPE_SHORT4:
> + width = 2 * 4;
> + break;
> + case SVGA3D_DECLTYPE_UBYTE4N:
> + width = 1 * 4;
> + break;
> + case SVGA3D_DECLTYPE_SHORT2N:
> + width = 2 * 2;
> + break;
> + case SVGA3D_DECLTYPE_SHORT4N:
> + width = 2 * 4;
> + break;
> + case SVGA3D_DECLTYPE_USHORT2N:
> + width = 2 * 2;
> + break;
> + case SVGA3D_DECLTYPE_USHORT4N:
> + width = 2 * 4;
> + break;
> + case SVGA3D_DECLTYPE_UDEC3:
> + width = 4;
> + break;
> + case SVGA3D_DECLTYPE_DEC3N:
> + width = 4;
> + break;
> + case SVGA3D_DECLTYPE_FLOAT16_2:
> + width = 2 * 2;
> + break;
> + case SVGA3D_DECLTYPE_FLOAT16_4:
> + width = 2 * 4;
> + break;
> + default:
> + assert(0);
> + width = 0;
> + break;
> + }
> +
> + if (index_bias >= 0) {
> + assert(offset + index_bias * stride + width <= size);
> + }
> +
> + /*
> + * min_index/max_index are merely conservative guesses, so we can't
> + * make buffer overflow detection based on their values.
> + */
> + }
> +
> + assert(range->indexWidth == range->indexArray.stride);
> +
> + if (ib) {
> + unsigned size = ib->width0;
> + unsigned offset = range->indexArray.offset;
> + unsigned stride = range->indexArray.stride;
> + unsigned count;
> +
> + assert(size);
> + assert(offset < size);
> + assert(stride);
> +
> + switch (range->primType) {
> + case SVGA3D_PRIMITIVE_POINTLIST:
> + count = range->primitiveCount;
> + break;
> + case SVGA3D_PRIMITIVE_LINELIST:
> + count = range->primitiveCount * 2;
> + break;
> + case SVGA3D_PRIMITIVE_LINESTRIP:
> + count = range->primitiveCount + 1;
> + break;
> + case SVGA3D_PRIMITIVE_TRIANGLELIST:
> + count = range->primitiveCount * 3;
> + break;
> + case SVGA3D_PRIMITIVE_TRIANGLESTRIP:
> + count = range->primitiveCount + 2;
> + break;
> + case SVGA3D_PRIMITIVE_TRIANGLEFAN:
> + count = range->primitiveCount + 2;
> + break;
> + default:
> + assert(0);
> + count = 0;
> + break;
> + }
> +
> + assert(offset + count * stride <= size);
> + }
> +}
> +
> +
> enum pipe_error
> svga_hwtnl_prim(struct svga_hwtnl *hwtnl,
> const SVGA3dPrimitiveRange * range,
> @@ -296,129 +430,7 @@ svga_hwtnl_prim(struct svga_hwtnl *hwtnl,
> enum pipe_error ret = PIPE_OK;
>
> #ifdef DEBUG
> - {
> - unsigned i;
> - for (i = 0; i < hwtnl->cmd.vdecl_count; i++) {
> - struct pipe_resource *vb = hwtnl->cmd.vdecl_vb[i];
> - unsigned size = vb ? vb->width0 : 0;
> - unsigned offset = hwtnl->cmd.vdecl[i].array.offset;
> - unsigned stride = hwtnl->cmd.vdecl[i].array.stride;
> - int index_bias = (int) range->indexBias + hwtnl->index_bias;
> - unsigned width;
> -
> - assert(vb);
> - assert(size);
> - assert(offset < size);
> - assert(min_index <= max_index);
> -
> - switch (hwtnl->cmd.vdecl[i].identity.type) {
> - case SVGA3D_DECLTYPE_FLOAT1:
> - width = 4;
> - break;
> - case SVGA3D_DECLTYPE_FLOAT2:
> - width = 4 * 2;
> - break;
> - case SVGA3D_DECLTYPE_FLOAT3:
> - width = 4 * 3;
> - break;
> - case SVGA3D_DECLTYPE_FLOAT4:
> - width = 4 * 4;
> - break;
> - case SVGA3D_DECLTYPE_D3DCOLOR:
> - width = 4;
> - break;
> - case SVGA3D_DECLTYPE_UBYTE4:
> - width = 1 * 4;
> - break;
> - case SVGA3D_DECLTYPE_SHORT2:
> - width = 2 * 2;
> - break;
> - case SVGA3D_DECLTYPE_SHORT4:
> - width = 2 * 4;
> - break;
> - case SVGA3D_DECLTYPE_UBYTE4N:
> - width = 1 * 4;
> - break;
> - case SVGA3D_DECLTYPE_SHORT2N:
> - width = 2 * 2;
> - break;
> - case SVGA3D_DECLTYPE_SHORT4N:
> - width = 2 * 4;
> - break;
> - case SVGA3D_DECLTYPE_USHORT2N:
> - width = 2 * 2;
> - break;
> - case SVGA3D_DECLTYPE_USHORT4N:
> - width = 2 * 4;
> - break;
> - case SVGA3D_DECLTYPE_UDEC3:
> - width = 4;
> - break;
> - case SVGA3D_DECLTYPE_DEC3N:
> - width = 4;
> - break;
> - case SVGA3D_DECLTYPE_FLOAT16_2:
> - width = 2 * 2;
> - break;
> - case SVGA3D_DECLTYPE_FLOAT16_4:
> - width = 2 * 4;
> - break;
> - default:
> - assert(0);
> - width = 0;
> - break;
> - }
> -
> - if (index_bias >= 0) {
> - assert(offset + index_bias * stride + width <= size);
> - }
> -
> - /*
> - * min_index/max_index are merely conservative guesses, so we can't
> - * make buffer overflow detection based on their values.
> - */
> - }
> -
> - assert(range->indexWidth == range->indexArray.stride);
> -
> - if (ib) {
> - unsigned size = ib->width0;
> - unsigned offset = range->indexArray.offset;
> - unsigned stride = range->indexArray.stride;
> - unsigned count;
> -
> - assert(size);
> - assert(offset < size);
> - assert(stride);
> -
> - switch (range->primType) {
> - case SVGA3D_PRIMITIVE_POINTLIST:
> - count = range->primitiveCount;
> - break;
> - case SVGA3D_PRIMITIVE_LINELIST:
> - count = range->primitiveCount * 2;
> - break;
> - case SVGA3D_PRIMITIVE_LINESTRIP:
> - count = range->primitiveCount + 1;
> - break;
> - case SVGA3D_PRIMITIVE_TRIANGLELIST:
> - count = range->primitiveCount * 3;
> - break;
> - case SVGA3D_PRIMITIVE_TRIANGLESTRIP:
> - count = range->primitiveCount + 2;
> - break;
> - case SVGA3D_PRIMITIVE_TRIANGLEFAN:
> - count = range->primitiveCount + 2;
> - break;
> - default:
> - assert(0);
> - count = 0;
> - break;
> - }
> -
> - assert(offset + count * stride <= size);
> - }
> - }
> + check_draw_params(hwtnl, range, min_index, max_index, ib);
> #endif
>
> if (hwtnl->cmd.prim_count + 1 >= QSZ) {
> --
> 1.7.10.4
>
Reviewed-by: Charmaine Lee <charmainel at vmware.com>
More information about the mesa-dev
mailing list