On 01/24/2018 09:41 PM, Roland Scheidegger wrote:
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...)

Will do.

Reviewed-by: Roland Scheidegger <[email protected]>

Thanks!

-Brian


+            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

Reply via email to