Am 25.01.2018 um 00:19 schrieb Brian Paul:
> All but two cases of the switch did the same n += InstSize[n[0].opcode]
> instruction. Just move it after the switch.
>
> Add some sanity check assertions.
> ---
> src/mesa/main/dlist.c | 39 +++++++++++----------------------------
> 1 file changed, 11 insertions(+), 28 deletions(-)
>
> diff --git a/src/mesa/main/dlist.c b/src/mesa/main/dlist.c
> index a6b212e..7b8e0f6 100644
> --- a/src/mesa/main/dlist.c
> +++ b/src/mesa/main/dlist.c
> @@ -961,79 +961,60 @@ _mesa_delete_list(struct gl_context *ctx, struct
> gl_display_list *dlist)
> /* for some commands, we need to free malloc'd memory */
> case OPCODE_MAP1:
> free(get_pointer(&n[6]));
> - n += InstSize[n[0].opcode];
> break;
> case OPCODE_MAP2:
> free(get_pointer(&n[10]));
> - n += InstSize[n[0].opcode];
> break;
> case OPCODE_CALL_LISTS:
> free(get_pointer(&n[3]));
> - n += InstSize[n[0].opcode];
> break;
> case OPCODE_DRAW_PIXELS:
> free(get_pointer(&n[5]));
> - n += InstSize[n[0].opcode];
> break;
> case OPCODE_BITMAP:
> free(get_pointer(&n[7]));
> - n += InstSize[n[0].opcode];
> break;
> case OPCODE_POLYGON_STIPPLE:
> free(get_pointer(&n[1]));
> - n += InstSize[n[0].opcode];
> break;
> case OPCODE_TEX_IMAGE1D:
> free(get_pointer(&n[8]));
> - n += InstSize[n[0].opcode];
> break;
> case OPCODE_TEX_IMAGE2D:
> free(get_pointer(&n[9]));
> - n += InstSize[n[0].opcode];
> break;
> case OPCODE_TEX_IMAGE3D:
> free(get_pointer(&n[10]));
> - n += InstSize[n[0].opcode];
> break;
> case OPCODE_TEX_SUB_IMAGE1D:
> free(get_pointer(&n[7]));
> - n += InstSize[n[0].opcode];
> break;
> case OPCODE_TEX_SUB_IMAGE2D:
> free(get_pointer(&n[9]));
> - n += InstSize[n[0].opcode];
> break;
> case OPCODE_TEX_SUB_IMAGE3D:
> free(get_pointer(&n[11]));
> - n += InstSize[n[0].opcode];
> break;
> case OPCODE_COMPRESSED_TEX_IMAGE_1D:
> free(get_pointer(&n[7]));
> - n += InstSize[n[0].opcode];
> break;
> case OPCODE_COMPRESSED_TEX_IMAGE_2D:
> free(get_pointer(&n[8]));
> - n += InstSize[n[0].opcode];
> break;
> case OPCODE_COMPRESSED_TEX_IMAGE_3D:
> free(get_pointer(&n[9]));
> - n += InstSize[n[0].opcode];
> break;
> case OPCODE_COMPRESSED_TEX_SUB_IMAGE_1D:
> free(get_pointer(&n[7]));
> - n += InstSize[n[0].opcode];
> break;
> case OPCODE_COMPRESSED_TEX_SUB_IMAGE_2D:
> free(get_pointer(&n[9]));
> - n += InstSize[n[0].opcode];
> break;
> case OPCODE_COMPRESSED_TEX_SUB_IMAGE_3D:
> free(get_pointer(&n[11]));
> - n += InstSize[n[0].opcode];
> break;
> case OPCODE_PROGRAM_STRING_ARB:
> free(get_pointer(&n[4])); /* program string */
> - n += InstSize[n[0].opcode];
> break;
> case OPCODE_UNIFORM_1FV:
> case OPCODE_UNIFORM_2FV:
> @@ -1048,7 +1029,6 @@ _mesa_delete_list(struct gl_context *ctx, struct
> gl_display_list *dlist)
> case OPCODE_UNIFORM_3UIV:
> case OPCODE_UNIFORM_4UIV:
> free(get_pointer(&n[3]));
> - n += InstSize[n[0].opcode];
> break;
> case OPCODE_UNIFORM_MATRIX22:
> case OPCODE_UNIFORM_MATRIX33:
> @@ -1060,7 +1040,6 @@ _mesa_delete_list(struct gl_context *ctx, struct
> gl_display_list *dlist)
> case OPCODE_UNIFORM_MATRIX34:
> case OPCODE_UNIFORM_MATRIX43:
> free(get_pointer(&n[4]));
> - n += InstSize[n[0].opcode];
> break;
> case OPCODE_PROGRAM_UNIFORM_1FV:
> case OPCODE_PROGRAM_UNIFORM_2FV:
> @@ -1075,7 +1054,6 @@ _mesa_delete_list(struct gl_context *ctx, struct
> gl_display_list *dlist)
> case OPCODE_PROGRAM_UNIFORM_3UIV:
> case OPCODE_PROGRAM_UNIFORM_4UIV:
> free(get_pointer(&n[4]));
> - n += InstSize[n[0].opcode];
> break;
> case OPCODE_PROGRAM_UNIFORM_MATRIX22F:
> case OPCODE_PROGRAM_UNIFORM_MATRIX33F:
> @@ -1087,15 +1065,12 @@ _mesa_delete_list(struct gl_context *ctx, struct
> gl_display_list *dlist)
> case OPCODE_PROGRAM_UNIFORM_MATRIX34F:
> case OPCODE_PROGRAM_UNIFORM_MATRIX43F:
> free(get_pointer(&n[5]));
> - n += InstSize[n[0].opcode];
> break;
> case OPCODE_PIXEL_MAP:
> free(get_pointer(&n[3]));
> - n += InstSize[n[0].opcode];
> break;
> case OPCODE_WINDOW_RECTANGLES:
> free(get_pointer(&n[3]));
> - n += InstSize[n[0].opcode];
> break;
> case OPCODE_CONTINUE:
> n = (Node *) get_pointer(&n[1]);
> @@ -1107,9 +1082,13 @@ _mesa_delete_list(struct gl_context *ctx, struct
> gl_display_list *dlist)
> done = GL_TRUE;
> break;
> default:
> - /* Most frequent case */
> - n += InstSize[n[0].opcode];
> - break;
> + /* just increment 'n' pointer, below */
> + ;
> + }
> +
> + if (opcode != OPCODE_CONTINUE && opcode != OPCODE_END_OF_LIST) {
I think you should just omit the test against OPCODE_END_OF_LIST. Just
to make it consistent how print_list and execute_list increment the n
pointer (and it looks like a pointless extra check...)
Reviewed-by: Roland Scheidegger <[email protected]>
> + assert(InstSize[opcode] > 0);
> + n += InstSize[opcode];
> }
> }
> }
> @@ -1325,6 +1304,8 @@ dlist_alloc(struct gl_context *ctx, OpCode opcode,
> GLuint bytes, bool align8)
> GLuint nopNode;
> Node *n;
>
> + assert(bytes <= BLOCK_SIZE * sizeof(Node));
> +
> if (opcode < OPCODE_EXT_0) {
> if (InstSize[opcode] == 0) {
> /* save instruction size now */
> @@ -9177,6 +9158,7 @@ execute_list(struct gl_context *ctx, GLuint list)
>
> /* increment n to point to next compiled command */
> if (opcode != OPCODE_CONTINUE) {
> + assert(InstSize[opcode] > 0);
> n += InstSize[opcode];
> }
> }
> @@ -10385,6 +10367,7 @@ print_list(struct gl_context *ctx, GLuint list, const
> char *fname)
> }
> /* increment n to point to next compiled command */
> if (opcode != OPCODE_CONTINUE) {
> + assert(InstSize[opcode] > 0);
> n += InstSize[opcode];
> }
> }
>
_______________________________________________
mesa-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-dev