- ret = SVGA3D_DestroyShader(svga->swc,
- result->id,
- SVGA3D_SHADERTYPE_PS );
- if(ret != PIPE_OK) {
- svga_context_flush(svga, NULL);
- ret = SVGA3D_DestroyShader(svga->swc,
- result->id,
- SVGA3D_SHADERTYPE_PS );
- assert(ret == PIPE_OK);
+ draw_delete_fragment_shader(svga->swtnl.draw, fs->draw_shader);
+
+ for (variant = fs->base.variants; variant; variant = tmp) {
+ tmp = variant->next;
+
+ /* Check if deleting currently bound shader */
+ if (variant == svga->state.hw_draw.fs) {
+ ret = svga_set_shader(svga, SVGA3D_SHADERTYPE_PS, NULL);
+ if (ret != PIPE_OK) {
+ svga_context_flush(svga, NULL);
+ ret = svga_set_shader(svga, SVGA3D_SHADERTYPE_PS, NULL);
+ assert(ret == PIPE_OK);
+ }
+ svga->state.hw_draw.fs = NULL;