There were two bugs working together to make things mostly work: I wasn't dividing the VPM output size available by the size of a batch (vertex), but I also had the size of the VPM reduced by a factor of 8. Fixes dEQP-GLES3.functional.vertex_array_objects.all_attributes and it seems also my intermittent varying failures. Fixes:tags/mesa-18.2.11561e4984e("v3d: Emit the VCM_CACHE_SIZE packet.") (cherry picked from commita91b158bd9)
| @@ -774,7 +774,8 @@ uint64_t *v3d_compile_vs(const struct v3d_compiler *compiler, | |||
| int sector_size = 16 * sizeof(uint32_t) * 8; | |||
| int vpm_size_in_sectors = c->devinfo->vpm_size / sector_size; | |||
| int half_vpm = vpm_size_in_sectors / 2; | |||
| int vpm_output_batches = half_vpm - prog_data->vpm_input_size; | |||
| int vpm_output_sectors = half_vpm - prog_data->vpm_input_size; | |||
| int vpm_output_batches = vpm_output_sectors / prog_data->vpm_output_size; | |||
| assert(vpm_output_batches >= 2); | |||
| prog_data->vcm_cache_size = CLAMP(vpm_output_batches - 1, 2, 4); | |||
| @@ -585,7 +585,7 @@ v3d_get_device_info(struct v3d_screen *screen) | |||
| uint32_t minor = (ident1.value >> 0) & 0xf; | |||
| screen->devinfo.ver = major * 10 + minor; | |||
| screen->devinfo.vpm_size = (ident1.value >> 28 & 0xf) * 1024; | |||
| screen->devinfo.vpm_size = (ident1.value >> 28 & 0xf) * 8192; | |||
| switch (screen->devinfo.ver) { | |||
| case 33: | |||