From: Anuj Phogat Date: Fri, 11 Apr 2014 17:56:50 +0000 (-0700) Subject: i965: Fix component mask and varying_to_slot mapping for gl_ViewportIndex X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=48fc2703e5d1c0a022a35fd77475d31d17c09177;p=mesa.git i965: Fix component mask and varying_to_slot mapping for gl_ViewportIndex gl_ViewportIndex doesn't get its own varying slot. It is stored in VARYING_SLOT_PSIZ.z. This patch fixes the issue for both gen7 and gen8 because gen7_upload_3dstate_so_decl_list() is shared between them. Fixes failures in OpenGL Khronos CTS test transform_feedback_builtins. Makes new piglit test glsl-1.50-transform-feedback-builtins pass for 'gl_ViewportIndex'. Cc: Signed-off-by: Anuj Phogat Reviewed-by: Chris Forbes Reviewed-by: Kenneth Graunke --- diff --git a/src/mesa/drivers/dri/i965/gen7_sol_state.c b/src/mesa/drivers/dri/i965/gen7_sol_state.c index 3623238d3f6..8e554af9384 100644 --- a/src/mesa/drivers/dri/i965/gen7_sol_state.c +++ b/src/mesa/drivers/dri/i965/gen7_sol_state.c @@ -123,6 +123,7 @@ gen7_upload_3dstate_so_decl_list(struct brw_context *brw, /* gl_PointSize is stored in VARYING_SLOT_PSIZ.w * gl_Layer is stored in VARYING_SLOT_PSIZ.y + * gl_ViewportIndex is stored in VARYING_SLOT_PSIZ.z */ if (varying == VARYING_SLOT_PSIZ) { assert(components == 1); @@ -130,6 +131,9 @@ gen7_upload_3dstate_so_decl_list(struct brw_context *brw, } else if (varying == VARYING_SLOT_LAYER) { assert(components == 1); component_mask <<= 1; + } else if (varying == VARYING_SLOT_VIEWPORT) { + assert(components == 1); + component_mask <<= 2; } else { component_mask <<= linked_xfb_info->Outputs[i].ComponentOffset; } @@ -137,7 +141,7 @@ gen7_upload_3dstate_so_decl_list(struct brw_context *brw, buffer_mask |= 1 << buffer; decl |= buffer << SO_DECL_OUTPUT_BUFFER_SLOT_SHIFT; - if (varying == VARYING_SLOT_LAYER) { + if (varying == VARYING_SLOT_LAYER || varying == VARYING_SLOT_VIEWPORT) { decl |= vue_map->varying_to_slot[VARYING_SLOT_PSIZ] << SO_DECL_REGISTER_INDEX_SHIFT; } else {