-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On 04/07/2011 04:49 PM, Kenneth Graunke wrote: > Since we currently do not support Geometry Shaders, there's no need to > allocate any URB space to the GS unit. Give all of it to the VS, and > document some of the units, restrictions, and calculations. > --- > src/mesa/drivers/dri/i965/brw_context.h | 2 +- > src/mesa/drivers/dri/i965/gen6_urb.c | 18 +++++++++++------- > 2 files changed, 12 insertions(+), 8 deletions(-) > > diff --git a/src/mesa/drivers/dri/i965/brw_context.h > b/src/mesa/drivers/dri/i965/brw_context.h > index d63e8a4..6be7188 100644 > --- a/src/mesa/drivers/dri/i965/brw_context.h > +++ b/src/mesa/drivers/dri/i965/brw_context.h > @@ -560,7 +560,7 @@ struct brw_context > * a number of 1024-bit (128-byte) units. Should be >= 1. > */ > GLuint vs_size; > -/* GLuint gs_size; */ > + GLuint gs_size; > > GLuint vs_start; > GLuint gs_start; > diff --git a/src/mesa/drivers/dri/i965/gen6_urb.c > b/src/mesa/drivers/dri/i965/gen6_urb.c > index c3819f9..83a6b97 100644 > --- a/src/mesa/drivers/dri/i965/gen6_urb.c > +++ b/src/mesa/drivers/dri/i965/gen6_urb.c > @@ -45,15 +45,19 @@ prepare_urb( struct brw_context *brw ) > max_urb_entry = 256; > } > > - brw->urb.nr_vs_entries = max_urb_entry; > - brw->urb.nr_gs_entries = max_urb_entry; > - > /* CACHE_NEW_VS_PROG */ > + /* According to volume 2a, nr_vs_entries must be a multiple of 4 in the > + * range [24, 256] on GT2 and [24, 128] on GT1. > + */ > + brw->urb.nr_vs_entries = max_urb_entry; > brw->urb.vs_size = MAX2(brw->vs.prog_data->urb_entry_size, 1);
It occurs to me that this might not work. Is it possible for urb_entry_size * max_urb_entry to be larger than will fit? 32k / 256 = 128 bytes On SNB, it looks like the max entry size is (16 attributes + 4 header regs) * (16 bytes per entry) = 320 bytes. Right? > > - if (2 * brw->urb.vs_size > urb_size) > - brw->urb.nr_vs_entries = brw->urb.nr_gs_entries = > - (urb_size ) / (2 * brw->urb.vs_size); > + /* CACHE_NEW_GS_PROG */ > + /* nr_gs_entries must be a multiple of 4 in the range [0, 256] on GT2 > + * and [0, 254] on GT1. We don't believe it either. > + */ > + brw->urb.nr_gs_entries = 0; > + brw->urb.gs_size = 1; /* wrong, but with 0 GS entries it doesn't matter */ > } > > static void > @@ -70,7 +74,7 @@ upload_urb(struct brw_context *brw) > OUT_BATCH(_3DSTATE_URB << 16 | (3 - 2)); > OUT_BATCH(((brw->urb.vs_size - 1) << GEN6_URB_VS_SIZE_SHIFT) | > ((brw->urb.nr_vs_entries) << GEN6_URB_VS_ENTRIES_SHIFT)); > - OUT_BATCH(((brw->urb.vs_size - 1) << GEN6_URB_GS_SIZE_SHIFT) | > + OUT_BATCH(((brw->urb.gs_size - 1) << GEN6_URB_GS_SIZE_SHIFT) | > ((brw->urb.nr_gs_entries) << GEN6_URB_GS_ENTRIES_SHIFT)); > ADVANCE_BATCH(); > } -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org/ iEYEARECAAYFAk2fKpcACgkQX1gOwKyEAw8/bgCeMJ6bpSJMtlXKy4TOW5Y/9FOO A0IAn25zPtHx+t0Zx5vT5cbdHii/67Qh =aXhL -----END PGP SIGNATURE----- _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev