panfrost: Pack vertex properties when compiling
[mesa.git] / src / gallium / drivers / panfrost / pan_mfbd.c
index 759b8d9936bfa73636d7294821b3be737a9fa90c..deccd3a42397e0d69cb531cb84ad09d7dfc70c04 100644 (file)
@@ -233,7 +233,7 @@ panfrost_mfbd_set_cbuf(
                 if (is_bifrost) {
                         rt->format.unk4 = 0x1;
                 } else {
-                        rt->format.block = MALI_BLOCK_LINEAR;
+                        rt->format.block = MALI_BLOCK_FORMAT_LINEAR;
                 }
 
                 rt->framebuffer = base;
@@ -243,14 +243,14 @@ panfrost_mfbd_set_cbuf(
                 if (is_bifrost) {
                         rt->format.unk3 |= 0x8;
                 } else {
-                        rt->format.block = MALI_BLOCK_TILED;
+                        rt->format.block = MALI_BLOCK_FORMAT_TILED;
                 }
 
                 rt->framebuffer = base;
                 rt->framebuffer_stride = stride;
                 rt->layer_stride = layer_stride;
         } else if (drm_is_afbc(rsrc->modifier)) {
-                rt->format.block = MALI_BLOCK_AFBC;
+                rt->format.block = MALI_BLOCK_FORMAT_AFBC;
 
                 unsigned header_size = rsrc->slices[level].header_size;
 
@@ -303,7 +303,7 @@ panfrost_mfbd_set_zsbuf(
 
                 fbx->flags_hi |= MALI_EXTRA_PRESENT;
                 fbx->flags_lo |= MALI_EXTRA_ZS | 0x1; /* unknown */
-                fbx->zs_block = MALI_BLOCK_AFBC;
+                fbx->zs_block = MALI_BLOCK_FORMAT_AFBC;
 
                 fbx->ds_afbc.depth_stencil = base + header_size;
                 fbx->ds_afbc.depth_stencil_afbc_metadata = base;
@@ -313,7 +313,6 @@ panfrost_mfbd_set_zsbuf(
                 fbx->ds_afbc.padding = 0x1000;
         } else {
                 assert(rsrc->modifier == DRM_FORMAT_MOD_ARM_16X16_BLOCK_U_INTERLEAVED || rsrc->modifier == DRM_FORMAT_MOD_LINEAR);
-
                 /* TODO: Z32F(S8) support, which is always linear */
 
                 int stride = rsrc->slices[level].stride;
@@ -327,16 +326,17 @@ panfrost_mfbd_set_zsbuf(
                 fbx->ds_linear.depth = base;
 
                 if (rsrc->modifier == DRM_FORMAT_MOD_LINEAR) {
-                        fbx->zs_block = MALI_BLOCK_LINEAR;
+                        fbx->zs_block = MALI_BLOCK_FORMAT_LINEAR;
                         fbx->ds_linear.depth_stride = stride / 16;
                         fbx->ds_linear.depth_layer_stride = layer_stride;
                 } else {
                         if (is_bifrost) {
-                                fbx->zs_block = MALI_BLOCK_UNKNOWN;
+                                /* XXX: Bifrost fields are different here */
+                                fbx->zs_block = 1;
                                 fbx->flags_hi |= 0x440;
                                 fbx->flags_lo |= 0x1;
                         } else {
-                                fbx->zs_block = MALI_BLOCK_TILED;
+                                fbx->zs_block = MALI_BLOCK_FORMAT_TILED;
                         }
 
                         fbx->ds_linear.depth_stride = stride;
@@ -395,7 +395,7 @@ panfrost_mfbd_upload(struct panfrost_batch *batch,
                 sizeof(struct mali_render_target) * 8;
 
         struct panfrost_transfer m_f_trans =
-                panfrost_pool_alloc(&batch->pool, total_sz);
+                panfrost_pool_alloc_aligned(&batch->pool, total_sz, 64);
 
         /* Do the transfer */
 
@@ -498,13 +498,16 @@ panfrost_emit_mfbd(struct panfrost_batch *batch, unsigned vertex_count)
                 mfbd.msaa.sample_locations = panfrost_emit_sample_locations(batch);
                 mfbd.tiler_meta = panfrost_batch_get_tiler_meta(batch, vertex_count);
         } else {
-                unsigned shift = panfrost_get_stack_shift(batch->stack_size);
-                struct panfrost_bo *bo = panfrost_batch_get_scratchpad(batch,
-                                                                       shift,
-                                                                       dev->thread_tls_alloc,
-                                                                       dev->core_count);
-                mfbd.shared_memory.stack_shift = shift;
-                mfbd.shared_memory.scratchpad = bo->gpu;
+                if (batch->stack_size) {
+                        unsigned shift = panfrost_get_stack_shift(batch->stack_size);
+                        struct panfrost_bo *bo = panfrost_batch_get_scratchpad(batch,
+                                                                               batch->stack_size,
+                                                                               dev->thread_tls_alloc,
+                                                                               dev->core_count);
+                        mfbd.shared_memory.stack_shift = shift;
+                        mfbd.shared_memory.scratchpad = bo->gpu;
+                }
+
                 mfbd.shared_memory.shared_workgroup_count = ~0;
 
                 mfbd.tiler = panfrost_emit_midg_tiler(batch, vertex_count);