FREE((void *) vs->base.tokens);
vs->base.tokens = dummy;
+ tgsi_scan_shader(vs->base.tokens, &vs->base.info);
+ vs->generic_outputs = svga_get_generic_outputs_mask(&vs->base.info);
+
variant = translate_vertex_program(svga, vs, key);
return variant;
}
(unsigned) (variant->nr_tokens
* sizeof(variant->tokens[0])));
/* Free the too-large variant */
- svga_destroy_shader_variant(svga, SVGA3D_SHADERTYPE_VS, variant);
+ svga_destroy_shader_variant(svga, variant);
/* Use simple pass-through shader instead */
variant = get_compiled_dummy_vertex_shader(svga, vs, key);
}
return PIPE_ERROR;
}
- ret = svga_define_shader(svga, SVGA3D_SHADERTYPE_VS, variant);
+ ret = svga_define_shader(svga, variant);
if (ret != PIPE_OK) {
- svga_destroy_shader_variant(svga, SVGA3D_SHADERTYPE_VS, variant);
+ svga_destroy_shader_variant(svga, variant);
return ret;
}
if (!svga_need_to_rebind_resources(svga)) {
ret = svga->swc->resource_rebind(svga->swc, NULL, gbshader,
SVGA_RELOC_READ);
- goto out;
+ }
+ else {
+ if (svga_have_vgpu10(svga))
+ ret = SVGA3D_vgpu10_SetShader(svga->swc, SVGA3D_SHADERTYPE_VS,
+ gbshader, shaderId);
+ else
+ ret = SVGA3D_SetGBShader(svga->swc, SVGA3D_SHADERTYPE_VS, gbshader);
}
- if (svga_have_vgpu10(svga))
- ret = SVGA3D_vgpu10_SetShader(svga->swc, SVGA3D_SHADERTYPE_VS,
- gbshader, shaderId);
- else
- ret = SVGA3D_SetGBShader(svga->swc, SVGA3D_SHADERTYPE_VS, gbshader);
-
- out:
if (ret != PIPE_OK)
return ret;