if (state == NULL )
goto fail;
- /* debug */
- if (softpipe->dump_gs)
- tgsi_dump(templ->tokens, 0);
+ state->shader = *templ;
- /* copy shader tokens, the ones passed in will go away.
- */
- state->shader.tokens = tgsi_dup_tokens(templ->tokens);
- if (state->shader.tokens == NULL)
- goto fail;
+ if (templ->tokens) {
+ /* debug */
+ if (softpipe->dump_gs)
+ tgsi_dump(templ->tokens, 0);
- state->draw_data = draw_create_geometry_shader(softpipe->draw, templ);
- if (state->draw_data == NULL)
- goto fail;
+ /* copy shader tokens, the ones passed in will go away.
+ */
+ state->shader.tokens = tgsi_dup_tokens(templ->tokens);
+ if (state->shader.tokens == NULL)
+ goto fail;
- state->max_sampler = state->draw_data->info.file_max[TGSI_FILE_SAMPLER];
+ state->draw_data = draw_create_geometry_shader(softpipe->draw, templ);
+ if (state->draw_data == NULL)
+ goto fail;
+
+ state->max_sampler = state->draw_data->info.file_max[TGSI_FILE_SAMPLER];
+ }
return state;
unsigned size;
const void *data;
+ assert(shader < PIPE_SHADER_TYPES);
+
if (cb && cb->user_buffer) {
constants = softpipe_user_buffer_create(pipe->screen,
(void *) cb->user_buffer,
PIPE_BIND_CONSTANT_BUFFER);
}
- size = constants ? constants->width0 : 0;
- data = constants ? softpipe_resource(constants)->data : NULL;
-
- assert(shader < PIPE_SHADER_TYPES);
+ size = cb ? cb->buffer_size : 0;
+ data = constants ? softpipe_resource_data(constants) : NULL;
+ if (data)
+ data = (const char *) data + cb->buffer_offset;
draw_flush(softpipe->draw);