From 352ae51efd75602de99a9ddf7c494453c7d6cb1c Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Thu, 22 Nov 2012 16:23:22 +1300 Subject: [PATCH] i965: set attribute w/a bits for packed formats Flag the need for various workarounds to be applied by the vertex shader. Signed-off-by: Chris Forbes Reviewed-by: Kenneth Graunke --- src/mesa/drivers/dri/i965/brw_vs.c | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_vs.c b/src/mesa/drivers/dri/i965/brw_vs.c index f764f526f9c..232600aece7 100644 --- a/src/mesa/drivers/dri/i965/brw_vs.c +++ b/src/mesa/drivers/dri/i965/brw_vs.c @@ -446,10 +446,32 @@ static void brw_upload_vs_prog(struct brw_context *brw) /* BRW_NEW_VERTICES */ for (i = 0; i < VERT_ATTRIB_MAX; i++) { - /* TODO: flag w/a for packed vertex formats here too */ - if (vp->program.Base.InputsRead & BITFIELD64_BIT(i) && - brw->vb.inputs[i].glarray->Type == GL_FIXED) { - key.gl_attrib_wa_flags[i] = brw->vb.inputs[i].glarray->Size; + if (vp->program.Base.InputsRead & BITFIELD64_BIT(i)) { + uint8_t wa_flags = 0; + + switch (brw->vb.inputs[i].glarray->Type) { + + case GL_FIXED: + wa_flags = brw->vb.inputs[i].glarray->Size; + break; + + case GL_INT_2_10_10_10_REV: + wa_flags |= BRW_ATTRIB_WA_SIGN; + /* fallthough */ + + case GL_UNSIGNED_INT_2_10_10_10_REV: + if (brw->vb.inputs[i].glarray->Format == GL_BGRA) + wa_flags |= BRW_ATTRIB_WA_BGRA; + + if (brw->vb.inputs[i].glarray->Normalized) + wa_flags |= BRW_ATTRIB_WA_NORMALIZE; + else if (!brw->vb.inputs[i].glarray->Integer) + wa_flags |= BRW_ATTRIB_WA_SCALE; + + break; + } + + key.gl_attrib_wa_flags[i] = wa_flags; } } -- 2.30.2