[Mesa-dev] [PATCH] i965/skl: Emit new 3DSTATE_VF_COMPONENT_PACKING
Ben Widawsky
ben at bwidawsk.net
Thu Jul 30 14:42:29 PDT 2015
Update:
I no longer thing we should merge this patch. A note in the programming has been
introduced stating that we should not program this state packet without enabling
at least one component.
On Wed, Jul 01, 2015 at 04:06:54PM -0700, Ben Widawsky wrote:
> We don't yet have a use for this state, but initializing it to known values is
> always considered wise. In general NULL state can probably go in the misc state
> upload, I only put it here because I assume it might be useful at some point.
>
> Signed-off-by: Ben Widawsky <ben at bwidawsk.net>
> ---
>
> I've had this patch sitting around for almost 3 months now. I believe we like to
> initialize new fields as a general rule of thumb.
>
> ---
> src/mesa/drivers/dri/i965/brw_defines.h | 2 ++
> src/mesa/drivers/dri/i965/gen8_draw_upload.c | 29 ++++++++++++++++++++++++++++
> 2 files changed, 31 insertions(+)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_defines.h b/src/mesa/drivers/dri/i965/brw_defines.h
> index 66b9abc..444d974 100644
> --- a/src/mesa/drivers/dri/i965/brw_defines.h
> +++ b/src/mesa/drivers/dri/i965/brw_defines.h
> @@ -1713,6 +1713,8 @@ enum brw_message_target {
>
> #define _3DSTATE_VF_TOPOLOGY 0x784b /* GEN8+ */
>
> +#define _3DSTATE_VF_COMPONENT_PACKING 0x7855 /* GEN9+ */
> +
> #define _3DSTATE_WM_CHROMAKEY 0x784c /* GEN8+ */
>
> #define _3DSTATE_URB_VS 0x7830 /* GEN7+ */
> diff --git a/src/mesa/drivers/dri/i965/gen8_draw_upload.c b/src/mesa/drivers/dri/i965/gen8_draw_upload.c
> index 1af90ec..f6e7fc8 100644
> --- a/src/mesa/drivers/dri/i965/gen8_draw_upload.c
> +++ b/src/mesa/drivers/dri/i965/gen8_draw_upload.c
> @@ -35,6 +35,33 @@
> #include "intel_batchbuffer.h"
> #include "intel_buffer_objects.h"
>
> +/**
> + * Emits a null component packing state.
> + *
> + * Paraphrasing the docs: "This command is used to specify which 32-bit
> + * components are "enabled" to be stored in the URB, and which are "disabled".
> + * Disabling all four components for a given Vertex Element will result in no
> + * data stored for that element. Note that any insertion of SGVs
> + * (3DSTATE_VF_SGVS) is performed before the packing operation."
> + *
> + * FINISHME: "Component packing is probably only useful for SIMD8 VS thread
> + * execution." When enabled, the correct bit must be set in 3DSTATE_VF.
> + */
> +static void
> +gen9_emit_component_packing(struct brw_context *brw)
> +{
> + if (brw->gen < 9)
> + return;
> +
> + BEGIN_BATCH(5);
> + OUT_BATCH(_3DSTATE_VF_COMPONENT_PACKING << 16 | (5 - 2));
> + OUT_BATCH(0);
> + OUT_BATCH(0);
> + OUT_BATCH(0);
> + OUT_BATCH(0);
> + ADVANCE_BATCH();
> +}
> +
> static void
> gen8_emit_vertices(struct brw_context *brw)
> {
> @@ -44,6 +71,8 @@ gen8_emit_vertices(struct brw_context *brw)
> brw_prepare_vertices(brw);
> brw_prepare_shader_draw_parameters(brw);
>
> + gen9_emit_component_packing(brw);
> +
> if (brw->vs.prog_data->uses_vertexid || brw->vs.prog_data->uses_instanceid) {
> unsigned vue = brw->vb.nr_enabled;
>
> --
> 2.4.4
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
--
Ben Widawsky, Intel Open Source Technology Center
More information about the mesa-dev
mailing list