const struct svga_geometry_shader *gs,
const struct svga_compile_key *key)
{
- if (svga_have_vgpu10(svga)) {
- return svga_tgsi_vgpu10_translate(svga, &gs->base, key,
- PIPE_SHADER_GEOMETRY);
- }
- else {
- return svga_tgsi_vgpu9_translate(&gs->base, key, PIPE_SHADER_GEOMETRY);
- }
+ assert(svga_have_vgpu10(svga));
+ return svga_tgsi_vgpu10_translate(svga, &gs->base, key,
+ PIPE_SHADER_GEOMETRY);
}
enum pipe_error ret = PIPE_ERROR;
variant = translate_geometry_program(svga, gs, key);
- if (variant == NULL) {
+ if (!variant) {
/* some problem during translation, try the dummy shader */
const struct tgsi_token *dummy = get_dummy_geometry_shader();
if (!dummy) {
- ret = PIPE_ERROR_OUT_OF_MEMORY;
- goto fail;
+ return PIPE_ERROR_OUT_OF_MEMORY;
}
debug_printf("Failed to compile geometry shader, using dummy shader instead.\n");
FREE((void *) gs->base.tokens);
gs->base.tokens = dummy;
variant = translate_geometry_program(svga, gs, key);
- if (variant == NULL) {
- ret = PIPE_ERROR;
- goto fail;
+ if (!variant) {
+ return PIPE_ERROR;
}
}
ret = svga_define_shader(svga, SVGA3D_SHADERTYPE_GS, variant);
- if (ret != PIPE_OK)
- goto fail;
+ if (ret != PIPE_OK) {
+ svga_destroy_shader_variant(svga, SVGA3D_SHADERTYPE_GS, variant);
+ return ret;
+ }
*out_variant = variant;
return PIPE_OK;
-
-fail:
- if (variant) {
- svga_destroy_shader_variant(svga, SVGA3D_SHADERTYPE_GS, variant);
- }
- return ret;
}
+
static void
make_gs_key(struct svga_context *svga, struct svga_compile_key *key)
{
if (svga->curr.user_gs)
assert(svga->curr.gs);
- if (gs == NULL) {
+ if (!gs) {
if (svga->state.hw_draw.gs != NULL) {
/** The previous geometry shader is made inactive.