diff --git a/src/gallium/drivers/svga/svga_tgsi_decl_sm30.c b/src/gallium/drivers/svga/svga_tgsi_decl_sm30.c index 137afd60583..42d6f489bc5 100644 --- a/src/gallium/drivers/svga/svga_tgsi_decl_sm30.c +++ b/src/gallium/drivers/svga/svga_tgsi_decl_sm30.c @@ -319,6 +319,7 @@ ps30_input(struct svga_shader_emitter *emit, /** * Process a PS output declaration. * Note that we don't actually emit a SVGA3DOpDcl for PS outputs. + * \idx register index, such as OUT[2] (not semantic index) */ static boolean ps30_output(struct svga_shader_emitter *emit, @@ -344,9 +345,9 @@ ps30_output(struct svga_shader_emitter *emit, if (semantic.Index == 0) { unsigned i; for (i = 0; i < emit->key.fkey.write_color0_to_n_cbufs; i++) { - emit->output_map[i] = dst_register(SVGA3DREG_TEMP, + emit->output_map[idx+i] = dst_register(SVGA3DREG_TEMP, emit->nr_hw_temp++); - emit->temp_color_output[i] = emit->output_map[i]; + emit->temp_color_output[i] = emit->output_map[idx+i]; emit->true_color_output[i] = dst_register(SVGA3DREG_COLOROUT, i); } diff --git a/src/gallium/drivers/svga/svga_tgsi_emit.h b/src/gallium/drivers/svga/svga_tgsi_emit.h index d31b866928a..53f93de28d3 100644 --- a/src/gallium/drivers/svga/svga_tgsi_emit.h +++ b/src/gallium/drivers/svga/svga_tgsi_emit.h @@ -99,6 +99,7 @@ struct svga_shader_emitter unsigned label[32]; unsigned nr_labels; + /** input/output register mappings, indexed by register number */ struct src_register input_map[PIPE_MAX_ATTRIBS]; SVGA3dShaderDestToken output_map[PIPE_MAX_ATTRIBS]; @@ -119,7 +120,7 @@ struct svga_shader_emitter /* shared output for depth and fog */ SVGA3dShaderDestToken vs_depth_fog; - /* PS output colors */ + /* PS output colors (indexed by color semantic index) */ SVGA3dShaderDestToken temp_color_output[PIPE_MAX_COLOR_BUFS]; SVGA3dShaderDestToken true_color_output[PIPE_MAX_COLOR_BUFS];