[Mesa-dev] [PATCH] svga: fix PS output register setup regression

Jose Fonseca jfonseca at vmware.com
Thu Jan 23 10:07:21 PST 2014



----- Original Message -----
> Fixes glean fragProg1 regression caused by commit b9f68d927ea
> (implement TGSI_PROPERTY_FS_COLOR0_WRITES_ALL_CBUFS).  This bug
> only appears when the fragment shader emits fragment.Z before
> color outputs.  The bug was caused by confusion between register
> indexes and semantic indexes.
> 
> Also added some comments to better explain register indexing.
> ---
>  src/gallium/drivers/svga/svga_tgsi_decl_sm30.c |    5 +++--
>  src/gallium/drivers/svga/svga_tgsi_emit.h      |    3 ++-
>  2 files changed, 5 insertions(+), 3 deletions(-)
> 
> diff --git a/src/gallium/drivers/svga/svga_tgsi_decl_sm30.c
> b/src/gallium/drivers/svga/svga_tgsi_decl_sm30.c
> index 137afd6..42d6f48 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 d31b866..53f93de 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];
>  
> --
> 1.7.10.4
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://urldefense.proofpoint.com/v1/url?u=http://lists.freedesktop.org/mailman/listinfo/mesa-dev&k=oIvRg1%2BdGAgOoM1BIlLLqw%3D%3D%0A&r=NMr9uy2iTjWVixC0wOcYCWEIYhfo80qKwRgdodpoDzA%3D%0A&m=D2VWSJToZW4odPM75DA3MQ2BLfdEWhzwNh39Und8Xlo%3D%0A&s=480298215bf1be9132dfac454c18e51c19937d6a1ad88091e36d3b5e71b044b8
> 


Reviewed-by: Jose Fonseca <jfonseca at vmware.com>


More information about the mesa-dev mailing list