From: Chris Forbes Date: Thu, 22 Nov 2012 03:23:22 +0000 (+1300) Subject: i965: set attribute w/a bits for packed formats X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=352ae51efd75602de99a9ddf7c494453c7d6cb1c;p=mesa.git 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 --- 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; } }