[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