vc4: Store reloc pointers as pointers, not offsets.
authorEric Anholt <eric@anholt.net>
Fri, 10 Jul 2015 05:42:22 +0000 (22:42 -0700)
committerEric Anholt <eric@anholt.net>
Tue, 14 Jul 2015 18:31:57 +0000 (11:31 -0700)
Now that we don't resize the CL as we build (it's set up at the top by
vc4_start_draw()), we can store the pointers instead of offsets from
the base.  Saves a bit of math in emitting relocs (about 60 bytes of
code).

src/gallium/drivers/vc4/vc4_cl.h

index 4a50e790942177fe35a18858ca32f315bc400fa2..4974da1530fbc5cff99ffe0e1e9a840929c00029 100644 (file)
@@ -36,8 +36,8 @@ struct vc4_bo;
 struct vc4_cl {
         void *base;
         void *next;
+        void *reloc_next;
         uint32_t size;
-        uint32_t reloc_next;
         uint32_t reloc_count;
 };
 
@@ -128,7 +128,7 @@ cl_start_reloc(struct vc4_cl *cl, uint32_t n)
         cl->reloc_count = n;
 
         cl_u8(cl, VC4_PACKET_GEM_HANDLES);
-        cl->reloc_next = cl->next - cl->base;
+        cl->reloc_next = cl->next;
         cl_u32(cl, 0); /* Space where hindex will be written. */
         cl_u32(cl, 0); /* Space where hindex will be written. */
 }
@@ -138,7 +138,7 @@ cl_start_shader_reloc(struct vc4_cl *cl, uint32_t n)
 {
         assert(cl->reloc_count == 0);
         cl->reloc_count = n;
-        cl->reloc_next = cl->next - cl->base;
+        cl->reloc_next = cl->next;
 
         /* Space where hindex will be written. */
         cl->next += n * 4;
@@ -147,7 +147,7 @@ cl_start_shader_reloc(struct vc4_cl *cl, uint32_t n)
 static inline void
 cl_reloc_hindex(struct vc4_cl *cl, uint32_t hindex, uint32_t offset)
 {
-        *(uint32_t *)(cl->base + cl->reloc_next) = hindex;
+        *(uint32_t *)cl->reloc_next = hindex;
         cl->reloc_next += 4;
 
         cl->reloc_count--;
@@ -158,7 +158,7 @@ cl_reloc_hindex(struct vc4_cl *cl, uint32_t hindex, uint32_t offset)
 static inline void
 cl_aligned_reloc_hindex(struct vc4_cl *cl, uint32_t hindex, uint32_t offset)
 {
-        *(uint32_t *)(cl->base + cl->reloc_next) = hindex;
+        *(uint32_t *)cl->reloc_next = hindex;
         cl->reloc_next += 4;
 
         cl->reloc_count--;