Browse Source

v3d: Fix setup of the VCM cache size.

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: 1561e4984e ("v3d: Emit the VCM_CACHE_SIZE packet.")
(cherry picked from commit a91b158bd9)
tags/mesa-18.2.1
Eric Anholt 7 years ago
parent
commit
ded225eb98
2 changed files with 3 additions and 2 deletions
  1. 2
    1
      src/broadcom/compiler/vir.c
  2. 1
    1
      src/gallium/drivers/v3d/v3d_screen.c

+ 2
- 1
src/broadcom/compiler/vir.c View File

@@ -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);


+ 1
- 1
src/gallium/drivers/v3d/v3d_screen.c View File

@@ -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:

Loading…
Cancel
Save