summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/mesa/drivers/dri/i965/brw_gs_emit.c5
-rw-r--r--src/mesa/drivers/dri/i965/gen7_sol_state.c11
2 files changed, 14 insertions, 2 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_gs_emit.c b/src/mesa/drivers/dri/i965/brw_gs_emit.c
index 607ee7516eb..407450170bf 100644
--- a/src/mesa/drivers/dri/i965/brw_gs_emit.c
+++ b/src/mesa/drivers/dri/i965/brw_gs_emit.c
@@ -446,8 +446,13 @@ gen6_sol_program(struct brw_gs_compile *c, struct brw_gs_prog_key *key,
struct brw_reg vertex_slot = c->reg.vertex[vertex];
vertex_slot.nr += slot / 2;
vertex_slot.subnr = (slot % 2) * 16;
+ /* gl_PointSize is stored in VERT_RESULT_PSIZ.w. */
+ vertex_slot.dw1.bits.swizzle = vert_result == VERT_RESULT_PSIZ
+ ? BRW_SWIZZLE_WWWW : BRW_SWIZZLE_NOOP;
+ brw_set_access_mode(p, BRW_ALIGN_16);
brw_MOV(p, stride(c->reg.header, 4, 4, 1),
retype(vertex_slot, BRW_REGISTER_TYPE_UD));
+ brw_set_access_mode(p, BRW_ALIGN_1);
brw_svb_write(p,
final_write ? c->reg.temp : brw_null_reg(), /* dest */
1, /* msg_reg_nr */
diff --git a/src/mesa/drivers/dri/i965/gen7_sol_state.c b/src/mesa/drivers/dri/i965/gen7_sol_state.c
index 734686617b4..df6b9ee0f13 100644
--- a/src/mesa/drivers/dri/i965/gen7_sol_state.c
+++ b/src/mesa/drivers/dri/i965/gen7_sol_state.c
@@ -122,14 +122,21 @@ upload_3dstate_so_decl_list(struct brw_context *brw,
int buffer = linked_xfb_info->Outputs[i].OutputBuffer;
uint16_t decl = 0;
int vert_result = linked_xfb_info->Outputs[i].OutputRegister;
+ unsigned component_mask =
+ (1 << linked_xfb_info->Outputs[i].NumComponents) - 1;
+
+ /* gl_PointSize is stored in VERT_RESULT_PSIZ.w. */
+ if (vert_result == VERT_RESULT_PSIZ) {
+ assert(linked_xfb_info->Outputs[i].NumComponents == 1);
+ component_mask <<= 3;
+ }
buffer_mask |= 1 << buffer;
decl |= buffer << SO_DECL_OUTPUT_BUFFER_SLOT_SHIFT;
decl |= vue_map->vert_result_to_slot[vert_result] <<
SO_DECL_REGISTER_INDEX_SHIFT;
- decl |= ((1 << linked_xfb_info->Outputs[i].NumComponents) - 1) <<
- SO_DECL_COMPONENT_MASK_SHIFT;
+ decl |= component_mask << SO_DECL_COMPONENT_MASK_SHIFT;
/* This assert should be true until GL_ARB_transform_feedback_instanced
* is added and we start using the hole flag.