Even shader ID doesn't change. Otherwise the token change is not
effective.
This reverts regression from commit
cdb445f3a9. Regression could be seen in
Quake3's loading screen -- the upper right corner of the screen would
be black.
tags/mesa-7.7-1
| @@ -268,8 +268,6 @@ struct svga_hw_draw_state | |||
| unsigned ts[16][TS_MAX]; | |||
| float cb[PIPE_SHADER_TYPES][CB_MAX][4]; | |||
| unsigned shader_id[PIPE_SHADER_TYPES]; | |||
| struct svga_shader_result *fs; | |||
| struct svga_shader_result *vs; | |||
| struct svga_hw_view_state views[PIPE_MAX_SAMPLERS]; | |||
| @@ -268,16 +268,13 @@ static int emit_hw_fs( struct svga_context *svga, | |||
| assert(id != SVGA3D_INVALID_ID); | |||
| if (result != svga->state.hw_draw.fs) { | |||
| if (id != svga->state.hw_draw.shader_id[PIPE_SHADER_FRAGMENT]) { | |||
| ret = SVGA3D_SetShader(svga->swc, | |||
| SVGA3D_SHADERTYPE_PS, | |||
| id ); | |||
| if (ret) | |||
| return ret; | |||
| } | |||
| ret = SVGA3D_SetShader(svga->swc, | |||
| SVGA3D_SHADERTYPE_PS, | |||
| id ); | |||
| if (ret) | |||
| return ret; | |||
| svga->dirty |= SVGA_NEW_FS_RESULT; | |||
| svga->state.hw_draw.shader_id[PIPE_SHADER_FRAGMENT] = id; | |||
| svga->state.hw_draw.fs = result; | |||
| } | |||
| @@ -149,16 +149,13 @@ static int emit_hw_vs( struct svga_context *svga, | |||
| } | |||
| if (result != svga->state.hw_draw.vs) { | |||
| if (id != svga->state.hw_draw.shader_id[PIPE_SHADER_VERTEX]) { | |||
| ret = SVGA3D_SetShader(svga->swc, | |||
| SVGA3D_SHADERTYPE_VS, | |||
| id ); | |||
| if (ret) | |||
| return ret; | |||
| } | |||
| ret = SVGA3D_SetShader(svga->swc, | |||
| SVGA3D_SHADERTYPE_VS, | |||
| id ); | |||
| if (ret) | |||
| return ret; | |||
| svga->dirty |= SVGA_NEW_VS_RESULT; | |||
| svga->state.hw_draw.shader_id[PIPE_SHADER_VERTEX] = id; | |||
| svga->state.hw_draw.vs = result; | |||
| } | |||