unsigned dst_height;
boolean has_geometry_shader;
+ boolean has_tessellation;
boolean has_layered;
boolean has_stream_out;
boolean has_stencil_export;
ctx->has_geometry_shader =
pipe->screen->get_shader_param(pipe->screen, PIPE_SHADER_GEOMETRY,
PIPE_SHADER_CAP_MAX_INSTRUCTIONS) > 0;
+
+ ctx->has_tessellation =
+ pipe->screen->get_shader_param(pipe->screen, PIPE_SHADER_TESS_CTRL,
+ PIPE_SHADER_CAP_MAX_INSTRUCTIONS) > 0;
+
ctx->has_stream_out =
pipe->screen->get_param(pipe->screen,
PIPE_CAP_MAX_STREAM_OUTPUT_BUFFERS) != 0;
assert(ctx->base.saved_velem_state != INVALID_PTR);
assert(ctx->base.saved_vs != INVALID_PTR);
assert(!ctx->has_geometry_shader || ctx->base.saved_gs != INVALID_PTR);
+ assert(!ctx->has_tessellation || ctx->base.saved_tcs != INVALID_PTR);
+ assert(!ctx->has_tessellation || ctx->base.saved_tes != INVALID_PTR);
assert(!ctx->has_stream_out || ctx->base.saved_num_so_targets != ~0);
assert(ctx->base.saved_rs_state != INVALID_PTR);
}
ctx->base.saved_gs = INVALID_PTR;
}
+ if (ctx->has_tessellation) {
+ pipe->bind_tcs_state(pipe, ctx->base.saved_tcs);
+ pipe->bind_tes_state(pipe, ctx->base.saved_tes);
+ ctx->base.saved_tcs = INVALID_PTR;
+ ctx->base.saved_tes = INVALID_PTR;
+ }
+
/* Stream outputs. */
if (ctx->has_stream_out) {
unsigned offsets[PIPE_MAX_SO_BUFFERS];
if (ctx->has_geometry_shader)
pipe->bind_gs_state(pipe, NULL);
+ if (ctx->has_tessellation) {
+ pipe->bind_tcs_state(pipe, NULL);
+ pipe->bind_tes_state(pipe, NULL);
+ }
if (ctx->has_stream_out)
pipe->set_stream_output_targets(pipe, 0, NULL, NULL);
}
bind_vs_pos_only(ctx);
if (ctx->has_geometry_shader)
pipe->bind_gs_state(pipe, NULL);
+ if (ctx->has_tessellation) {
+ pipe->bind_tcs_state(pipe, NULL);
+ pipe->bind_tes_state(pipe, NULL);
+ }
pipe->bind_rasterizer_state(pipe, ctx->rs_discard_state);
so_target = pipe->create_stream_output_target(pipe, dst, dstx, size);
bind_vs_pos_only(ctx);
if (ctx->has_geometry_shader)
pipe->bind_gs_state(pipe, NULL);
+ if (ctx->has_tessellation) {
+ pipe->bind_tcs_state(pipe, NULL);
+ pipe->bind_tes_state(pipe, NULL);
+ }
pipe->bind_rasterizer_state(pipe, ctx->rs_discard_state);
so_target = pipe->create_stream_output_target(pipe, dst, offset, size);
void *saved_dsa_state; /**< depth stencil alpha state */
void *saved_velem_state; /**< vertex elements state */
void *saved_rs_state; /**< rasterizer state */
- void *saved_fs, *saved_vs, *saved_gs; /**< shaders */
+ void *saved_fs, *saved_vs, *saved_gs, *saved_tcs, *saved_tes; /**< shaders */
struct pipe_framebuffer_state saved_fb_state; /**< framebuffer state */
struct pipe_stencil_ref saved_stencil_ref; /**< stencil ref */
blitter->saved_gs = gs;
}
+static INLINE void
+util_blitter_save_tessctrl_shader(struct blitter_context *blitter,
+ void *sh)
+{
+ blitter->saved_tcs = sh;
+}
+
+static INLINE void
+util_blitter_save_tesseval_shader(struct blitter_context *blitter,
+ void *sh)
+{
+ blitter->saved_tes = sh;
+}
+
static INLINE
void util_blitter_save_framebuffer(struct blitter_context *blitter,
const struct pipe_framebuffer_state *state)