{
fprintf(f, "%s:\n", __func__+8);
DUMP_M(uint, info, buffers);
+ fprintf(f, " scissor_state: %d,%d %d,%d\n",
+ info->scissor_state.minx, info->scissor_state.miny,
+ info->scissor_state.maxx, info->scissor_state.maxy);
DUMP_M_ADDR(color_union, info, color);
DUMP_M(double, info, depth);
DUMP_M(hex, info, stencil);
}
static void
-dd_context_clear(struct pipe_context *_pipe, unsigned buffers,
+dd_context_clear(struct pipe_context *_pipe, unsigned buffers, const struct pipe_scissor_state *scissor_state,
const union pipe_color_union *color, double depth,
unsigned stencil)
{
record->call.type = CALL_CLEAR;
record->call.info.clear.buffers = buffers;
+ if (scissor_state)
+ record->call.info.clear.scissor_state = *scissor_state;
record->call.info.clear.color = *color;
record->call.info.clear.depth = depth;
record->call.info.clear.stencil = stencil;
dd_before_draw(dctx, record);
- pipe->clear(pipe, buffers, color, depth, stencil);
+ pipe->clear(pipe, buffers, scissor_state, color, depth, stencil);
dd_after_draw(dctx, record);
}
struct call_clear
{
unsigned buffers;
+ struct pipe_scissor_state scissor_state;
union pipe_color_union color;
double depth;
unsigned stencil;
/*
* clear/copy
*/
-static void noop_clear(struct pipe_context *ctx, unsigned buffers,
+static void noop_clear(struct pipe_context *ctx, unsigned buffers, const struct pipe_scissor_state *scissor_state,
const union pipe_color_union *color, double depth, unsigned stencil)
{
}
static void
rbug_clear(struct pipe_context *_pipe,
unsigned buffers,
+ const struct pipe_scissor_state *scissor_state,
const union pipe_color_union *color,
double depth,
unsigned stencil)
mtx_lock(&rb_pipe->call_mutex);
pipe->clear(pipe,
buffers,
+ scissor_state,
color,
depth,
stencil);
static void
trace_context_clear(struct pipe_context *_pipe,
unsigned buffers,
+ const struct pipe_scissor_state *scissor_state,
const union pipe_color_union *color,
double depth,
unsigned stencil)
trace_dump_arg(ptr, pipe);
trace_dump_arg(uint, buffers);
+ trace_dump_arg_begin("scissor_state");
+ trace_dump_scissor_state(scissor_state);
+ trace_dump_arg_end();
trace_dump_arg_begin("color");
if (color)
trace_dump_array(float, color->f, 4);
trace_dump_arg(float, depth);
trace_dump_arg(uint, stencil);
- pipe->clear(pipe, buffers, color, depth, stencil);
+ pipe->clear(pipe, buffers, scissor_state, color, depth, stencil);
trace_dump_call_end();
}
pp_filter_set_fb(p);
pp_filter_misc_state(p);
cso_set_depth_stencil_alpha(p->cso, &mstencil);
- p->pipe->clear(p->pipe, PIPE_CLEAR_STENCIL | PIPE_CLEAR_COLOR0,
+ p->pipe->clear(p->pipe, PIPE_CLEAR_STENCIL | PIPE_CLEAR_COLOR0, NULL,
&p->clear_color, 0, 0);
{
pp_filter_set_clear_fb(struct pp_program *p)
{
cso_set_framebuffer(p->cso, &p->framebuffer);
- p->pipe->clear(p->pipe, PIPE_CLEAR_COLOR0, &p->clear_color, 0, 0);
+ p->pipe->clear(p->pipe, PIPE_CLEAR_COLOR0, NULL, &p->clear_color, 0, 0);
}
case PIPE_CAP_SHAREABLE_SHADERS:
case PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS:
case PIPE_CAP_CLEAR_TEXTURE:
+ case PIPE_CAP_CLEAR_SCISSORED:
case PIPE_CAP_DRAW_PARAMETERS:
case PIPE_CAP_TGSI_PACK_HALF_FLOAT:
case PIPE_CAP_MULTI_DRAW_INDIRECT:
util_set_rasterizer_normal(cso);
util_set_max_viewport(cso, cb);
- ctx->clear(ctx, PIPE_CLEAR_COLOR0, (void*)clear_color, 0, 0);
+ ctx->clear(ctx, PIPE_CLEAR_COLOR0, NULL, (void*)clear_color, 0, 0);
}
static void
struct tc_clear {
unsigned buffers;
+ struct pipe_scissor_state scissor_state;
union pipe_color_union color;
double depth;
unsigned stencil;
+ bool scissor_state_set;
};
static void
tc_call_clear(struct pipe_context *pipe, union tc_payload *payload)
{
struct tc_clear *p = (struct tc_clear *)payload;
- pipe->clear(pipe, p->buffers, &p->color, p->depth, p->stencil);
+ pipe->clear(pipe, p->buffers, p->scissor_state_set ? &p->scissor_state : NULL, &p->color, p->depth, p->stencil);
}
static void
-tc_clear(struct pipe_context *_pipe, unsigned buffers,
+tc_clear(struct pipe_context *_pipe, unsigned buffers, const struct pipe_scissor_state *scissor_state,
const union pipe_color_union *color, double depth,
unsigned stencil)
{
struct tc_clear *p = tc_add_struct_typed_call(tc, TC_CALL_clear, tc_clear);
p->buffers = buffers;
+ if (scissor_state)
+ p->scissor_state = *scissor_state;
+ p->scissor_state_set = !!scissor_state;
p->color = *color;
p->depth = depth;
p->stencil = stencil;
a compressed block is copied to/from a plain pixel of the same size.
* ``PIPE_CAP_CLEAR_TEXTURE``: Whether `clear_texture` will be
available in contexts.
+* ``PIPE_CAP_CLEAR_SCISSORED``: Whether `clear` can accept a scissored
+ bounding box.
* ``PIPE_CAP_DRAW_PARAMETERS``: Whether ``TGSI_SEMANTIC_BASEVERTEX``,
``TGSI_SEMANTIC_BASEINSTANCE``, and ``TGSI_SEMANTIC_DRAWID`` are
supported in vertex shaders.
}
static void
-etna_clear_blt(struct pipe_context *pctx, unsigned buffers,
+etna_clear_blt(struct pipe_context *pctx, unsigned buffers, const struct pipe_scissor_state *scissor_state,
const union pipe_color_union *color, double depth, unsigned stencil)
{
struct etna_context *ctx = etna_context(pctx);
}
static void
-etna_clear_rs(struct pipe_context *pctx, unsigned buffers,
+etna_clear_rs(struct pipe_context *pctx, unsigned buffers, const struct pipe_scissor_state *scissor_state,
const union pipe_color_union *color, double depth, unsigned stencil)
{
struct etna_context *ctx = etna_context(pctx);
}
static void
-fd_clear(struct pipe_context *pctx, unsigned buffers,
+fd_clear(struct pipe_context *pctx, unsigned buffers, const struct pipe_scissor_state *scissor_state,
const union pipe_color_union *color, double depth, unsigned stencil)
{
struct fd_context *ctx = fd_context(pctx);
*/
void
i915_clear_blitter(struct pipe_context *pipe, unsigned buffers,
+ const struct pipe_scissor_state *scissor_state,
const union pipe_color_union *color,
double depth, unsigned stencil)
{
void
i915_clear_render(struct pipe_context *pipe, unsigned buffers,
+ const struct pipe_scissor_state *scissor_state,
const union pipe_color_union *color,
double depth, unsigned stencil)
{
* i915_clear.c:
*/
void i915_clear_blitter(struct pipe_context *pipe, unsigned buffers,
+ const struct pipe_scissor_state *scissor_state,
const union pipe_color_union *color,
double depth, unsigned stencil);
void i915_clear_render(struct pipe_context *pipe, unsigned buffers,
+ const struct pipe_scissor_state *scissor_state,
const union pipe_color_union *color,
double depth, unsigned stencil);
void i915_clear_emit(struct pipe_context *pipe, unsigned buffers,
static void
iris_clear(struct pipe_context *ctx,
unsigned buffers,
+ const struct pipe_scissor_state *scissor_state,
const union pipe_color_union *p_color,
double depth,
unsigned stencil)
}
static void
-lima_clear(struct pipe_context *pctx, unsigned buffers,
+lima_clear(struct pipe_context *pctx, unsigned buffers, const struct pipe_scissor_state *scissor_state,
const union pipe_color_union *color, double depth, unsigned stencil)
{
struct lima_context *ctx = lima_context(pctx);
void
llvmpipe_clear(struct pipe_context *pipe,
unsigned buffers,
+ const struct pipe_scissor_state *scissor_state,
const union pipe_color_union *color,
double depth,
unsigned stencil)
extern void
llvmpipe_clear(struct pipe_context *pipe, unsigned buffers,
+ const struct pipe_scissor_state *scissor_state,
const union pipe_color_union *color,
double depth, unsigned stencil);
}
static void
-nv30_clear(struct pipe_context *pipe, unsigned buffers,
+nv30_clear(struct pipe_context *pipe, unsigned buffers, const struct pipe_scissor_state *scissor_state,
const union pipe_color_union *color, double depth, unsigned stencil)
{
struct nv30_context *nv30 = nv30_context(pipe);
/* nv50_surface.c */
extern void nv50_clear(struct pipe_context *, unsigned buffers,
+ const struct pipe_scissor_state *scissor_state,
const union pipe_color_union *color,
double depth, unsigned stencil);
extern void nv50_init_surface_functions(struct nv50_context *);
}
void
-nv50_clear(struct pipe_context *pipe, unsigned buffers,
+nv50_clear(struct pipe_context *pipe, unsigned buffers, const struct pipe_scissor_state *scissor_state,
const union pipe_color_union *color,
double depth, unsigned stencil)
{
/* nvc0_surface.c */
extern void nvc0_clear(struct pipe_context *, unsigned buffers,
+ const struct pipe_scissor_state *scissor_state,
const union pipe_color_union *color,
double depth, unsigned stencil);
extern void nvc0_init_surface_functions(struct nvc0_context *);
void
nvc0_clear(struct pipe_context *pipe, unsigned buffers,
+ const struct pipe_scissor_state *scissor_state,
const union pipe_color_union *color,
double depth, unsigned stencil)
{
panfrost_clear(
struct pipe_context *pipe,
unsigned buffers,
+ const struct pipe_scissor_state *scissor_state,
const union pipe_color_union *color,
double depth, unsigned stencil)
{
/* Clear currently bound buffers. */
static void r300_clear(struct pipe_context* pipe,
unsigned buffers,
+ const struct pipe_scissor_state *scissor_state,
const union pipe_color_union *color,
double depth,
unsigned stencil)
}
static void r600_clear(struct pipe_context *ctx, unsigned buffers,
+ const struct pipe_scissor_state *scissor_state,
const union pipe_color_union *color,
double depth, unsigned stencil)
{
}
static void si_clear(struct pipe_context *ctx, unsigned buffers,
+ const struct pipe_scissor_state *scissor_state,
const union pipe_color_union *color, double depth, unsigned stencil)
{
struct si_context *sctx = (struct si_context *)ctx;
*/
void
softpipe_clear(struct pipe_context *pipe, unsigned buffers,
+ const struct pipe_scissor_state *scissor_state,
const union pipe_color_union *color,
double depth, unsigned stencil)
{
extern void
softpipe_clear(struct pipe_context *pipe, unsigned buffers,
+ const struct pipe_scissor_state *scissor_state,
const union pipe_color_union *color,
double depth, unsigned stencil);
* No masking, no scissor (clear entire buffer).
*/
static void
-svga_clear(struct pipe_context *pipe, unsigned buffers,
+svga_clear(struct pipe_context *pipe, unsigned buffers, const struct pipe_scissor_state *scissor_state,
const union pipe_color_union *color,
double depth, unsigned stencil)
{
static void
swr_clear(struct pipe_context *pipe,
unsigned buffers,
+ const struct pipe_scissor_state *scissor_state,
const union pipe_color_union *color,
double depth,
unsigned stencil)
}
static void
-tegra_clear(struct pipe_context *pcontext, unsigned buffers,
+tegra_clear(struct pipe_context *pcontext, unsigned buffers, const struct pipe_scissor_state *scissor_state,
const union pipe_color_union *color, double depth,
unsigned stencil)
{
struct tegra_context *context = to_tegra_context(pcontext);
- context->gpu->clear(context->gpu, buffers, color, depth, stencil);
+ context->gpu->clear(context->gpu, buffers, NULL, color, depth, stencil);
}
static void
}
static void
-v3d_clear(struct pipe_context *pctx, unsigned buffers,
+v3d_clear(struct pipe_context *pctx, unsigned buffers, const struct pipe_scissor_state *scissor_state,
const union pipe_color_union *color, double depth, unsigned stencil)
{
struct v3d_context *v3d = v3d_context(pctx);
}
static void
-vc4_clear(struct pipe_context *pctx, unsigned buffers,
+vc4_clear(struct pipe_context *pctx, unsigned buffers, const struct pipe_scissor_state *scissor_state,
const union pipe_color_union *color, double depth, unsigned stencil)
{
struct vc4_context *vc4 = vc4_context(pctx);
static void virgl_clear(struct pipe_context *ctx,
unsigned buffers,
+ const struct pipe_scissor_state *scissor_state,
const union pipe_color_union *color,
double depth, unsigned stencil)
{
static void
zink_clear(struct pipe_context *pctx,
unsigned buffers,
+ const struct pipe_scissor_state *scissor_state,
const union pipe_color_union *pcolor,
double depth, unsigned stencil)
{
* The entire buffers are cleared (no scissor, no colormask, etc).
*
* \param buffers bitfield of PIPE_CLEAR_* values.
+ * \param scissor_state the scissored region to clear
* \param color pointer to a union of fiu array for each of r, g, b, a.
* \param depth depth clear value in [0,1].
* \param stencil stencil clear value
*/
void (*clear)(struct pipe_context *pipe,
unsigned buffers,
+ const struct pipe_scissor_state *scissor_state,
const union pipe_color_union *color,
double depth,
unsigned stencil);
PIPE_CAP_SHAREABLE_SHADERS,
PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS,
PIPE_CAP_CLEAR_TEXTURE,
+ PIPE_CAP_CLEAR_SCISSORED,
PIPE_CAP_DRAW_PARAMETERS,
PIPE_CAP_TGSI_PACK_HALF_FLOAT,
PIPE_CAP_MULTI_DRAW_INDIRECT,
rect.x2 >= zsbuf_surf->desc.Width &&
rect.y2 >= zsbuf_surf->desc.Height))) {
DBG("Clear fast path\n");
- pipe->clear(pipe, bufs, &rgba, Z, Stencil);
+ pipe->clear(pipe, bufs, NULL, &rgba, Z, Stencil);
return;
}
{
union pipe_color_union clear_color = { {1, 0, 1, 1} };
- ctx->clear(ctx, PIPE_CLEAR_COLOR, &clear_color, 0, 0);
+ ctx->clear(ctx, PIPE_CLEAR_COLOR, NULL, &clear_color, 0, 0);
ctx->flush(ctx, NULL, 0);
graw_save_surface_to_file(ctx, surf, NULL);
info.ctx->clear(info.ctx,
PIPE_CLEAR_COLOR | PIPE_CLEAR_DEPTHSTENCIL,
+ NULL,
&clear_color, 1.0, 0);
util_draw_arrays(info.ctx, PIPE_PRIM_QUADS, 0, NUM_VERTS);
info.ctx->flush(info.ctx, NULL, 0);
info.ctx->clear(info.ctx,
PIPE_CLEAR_COLOR | PIPE_CLEAR_DEPTHSTENCIL,
+ NULL,
&clear_color, 1.0, 0);
util_draw_arrays(info.ctx, PIPE_PRIM_QUADS, 0, NUM_VERTS);
info.ctx->flush(info.ctx, NULL, 0);
{
union pipe_color_union clear_color = { {.1,.3,.5,0} };
- ctx->clear(ctx, PIPE_CLEAR_COLOR, &clear_color, 0, 0);
+ ctx->clear(ctx, PIPE_CLEAR_COLOR, NULL, &clear_color, 0, 0);
util_draw_arrays(ctx, PIPE_PRIM_TRIANGLES, 0, 3);
ctx->flush(ctx, NULL, 0);
info.ctx->clear(info.ctx,
PIPE_CLEAR_COLOR | PIPE_CLEAR_DEPTHSTENCIL,
+ NULL,
&clear_color, 1.0, 0);
util_draw_arrays(info.ctx, PIPE_PRIM_QUADS, 0, NUM_VERTS);
info.ctx->flush(info.ctx, NULL, 0);
{
union pipe_color_union clear_color = { {.1,.3,.5,0} };
- ctx->clear(ctx, PIPE_CLEAR_COLOR, &clear_color, 0, 0);
+ ctx->clear(ctx, PIPE_CLEAR_COLOR, NULL, &clear_color, 0, 0);
if (draw_strip)
util_draw_arrays(ctx, PIPE_PRIM_TRIANGLE_STRIP, 0, 4);
else
info.ctx->clear(info.ctx,
PIPE_CLEAR_COLOR | PIPE_CLEAR_DEPTHSTENCIL,
+ NULL,
&clear_color, 1.0, 0);
q1 = info.ctx->create_query(info.ctx, PIPE_QUERY_OCCLUSION_COUNTER, 0);
{
union pipe_color_union clear_color = { {.5,.5,.5,1} };
- ctx->clear(ctx, PIPE_CLEAR_COLOR, &clear_color, 0, 0);
+ ctx->clear(ctx, PIPE_CLEAR_COLOR, NULL, &clear_color, 0, 0);
util_draw_arrays(ctx, PIPE_PRIM_QUADS, 0, 4);
ctx->flush(ctx, NULL, 0);
{
union pipe_color_union clear_color = { {.5,.5,.5,1} };
- info.ctx->clear(info.ctx, PIPE_CLEAR_COLOR, &clear_color, 0, 0);
+ info.ctx->clear(info.ctx, PIPE_CLEAR_COLOR, NULL, &clear_color, 0, 0);
util_draw_arrays(info.ctx, PIPE_PRIM_QUADS, 0, 4);
info.ctx->flush(info.ctx, NULL, 0);
ctx->bind_fs_state(ctx, fs);
- ctx->clear(ctx, PIPE_CLEAR_COLOR, &clear_color, 0, 0);
+ ctx->clear(ctx, PIPE_CLEAR_COLOR, NULL, &clear_color, 0, 0);
util_draw_arrays(ctx, PIPE_PRIM_POINTS, 0, 1);
ctx->flush(ctx, NULL, 0);
clear_color.f[2] = 0.5;
clear_color.f[3] = 1.0;
- info.ctx->clear(info.ctx, PIPE_CLEAR_COLOR, &clear_color, 0, 0);
+ info.ctx->clear(info.ctx, PIPE_CLEAR_COLOR, NULL, &clear_color, 0, 0);
info.ctx->set_sampler_views(info.ctx, PIPE_SHADER_FRAGMENT, 0, 1, &linear_sv);
set_vertices(vertices1, 4);
clear_color.f[2] = 0.5;
clear_color.f[3] = 1.0;
- info.ctx->clear(info.ctx, PIPE_CLEAR_COLOR, &clear_color, 0, 0);
+ info.ctx->clear(info.ctx, PIPE_CLEAR_COLOR, NULL, &clear_color, 0, 0);
util_draw_arrays(info.ctx, PIPE_PRIM_QUADS, 0, 4);
info.ctx->flush(info.ctx, NULL, 0);
{
union pipe_color_union clear_color = { {1,0,1,1} };
- ctx->clear(ctx, PIPE_CLEAR_COLOR, &clear_color, 0, 0);
+ ctx->clear(ctx, PIPE_CLEAR_COLOR, NULL, &clear_color, 0, 0);
util_draw_arrays(ctx, PIPE_PRIM_TRIANGLES, 0, 3);
ctx->flush(ctx, NULL, 0);
union pipe_color_union clear_color = { {1,0,1,1} };
struct pipe_draw_info info;
- ctx->clear(ctx, PIPE_CLEAR_COLOR, &clear_color, 0, 0);
+ ctx->clear(ctx, PIPE_CLEAR_COLOR, NULL, &clear_color, 0, 0);
util_draw_init_info(&info);
{
union pipe_color_union clear_color = { {1,0,1,1} };
- info.ctx->clear(info.ctx, PIPE_CLEAR_COLOR, &clear_color, 0, 0);
+ info.ctx->clear(info.ctx, PIPE_CLEAR_COLOR, NULL, &clear_color, 0, 0);
util_draw_arrays(info.ctx, PIPE_PRIM_TRIANGLES, 0, 3);
info.ctx->flush(info.ctx, NULL, 0);
{
union pipe_color_union clear_color = { {1,0,1,1} };
- info.ctx->clear(info.ctx, PIPE_CLEAR_COLOR, &clear_color, 0, 0);
+ info.ctx->clear(info.ctx, PIPE_CLEAR_COLOR, NULL, &clear_color, 0, 0);
util_draw_arrays(info.ctx, PIPE_PRIM_TRIANGLES, 0, 3);
info.ctx->flush(info.ctx, NULL, 0);
{
union pipe_color_union clear_color = { {.1,.3,.5,0} };
- ctx->clear(ctx, PIPE_CLEAR_COLOR, &clear_color, 0, 0);
+ ctx->clear(ctx, PIPE_CLEAR_COLOR, NULL, &clear_color, 0, 0);
util_draw_arrays(ctx, PIPE_PRIM_POINTS, 0, ARRAY_SIZE(vertices));
ctx->flush(ctx, NULL, 0);
cso_set_framebuffer(p->cso, &p->framebuffer);
/* clear the render target */
- p->pipe->clear(p->pipe, PIPE_CLEAR_COLOR, &p->clear_color, 0, 0);
+ p->pipe->clear(p->pipe, PIPE_CLEAR_COLOR, NULL, &p->clear_color, 0, 0);
/* set misc state we care about */
cso_set_blend(p->cso, &p->blend);
cso_set_framebuffer(p->cso, &p->framebuffer);
/* clear the render target */
- p->pipe->clear(p->pipe, PIPE_CLEAR_COLOR, &p->clear_color, 0, 0);
+ p->pipe->clear(p->pipe, PIPE_CLEAR_COLOR, NULL, &p->clear_color, 0, 0);
/* set misc state we care about */
cso_set_blend(p->cso, &p->blend);
= ctx->DrawBuffer->Attachment[BUFFER_STENCIL].Renderbuffer;
GLbitfield quad_buffers = 0x0;
GLbitfield clear_buffers = 0x0;
+ bool have_scissor_buffers = false;
GLuint i;
st_flush_bitmap_cache(st);
unsigned surf_colormask =
util_format_colormask(util_format_description(strb->surface->format));
- if (is_scissor_enabled(ctx, rb) ||
+ bool scissor = is_scissor_enabled(ctx, rb);
+ if ((scissor && !st->can_scissor_clear) ||
is_window_rectangle_enabled(ctx) ||
((colormask & surf_colormask) != surf_colormask))
quad_buffers |= PIPE_CLEAR_COLOR0 << i;
else
clear_buffers |= PIPE_CLEAR_COLOR0 << i;
+ have_scissor_buffers |= scissor && st->can_scissor_clear;
}
}
}
* renderbuffers, because it's likely to be faster.
*/
if (clear_buffers) {
+ const struct gl_scissor_rect *scissor = &ctx->Scissor.ScissorArray[0];
+ struct pipe_scissor_state scissor_state = {
+ .minx = MAX2(scissor->X, 0),
+ .miny = MAX2(scissor->Y, 0),
+ .maxx = MAX2(scissor->X + scissor->Width, 0),
+ .maxy = MAX2(scissor->Y + scissor->Height, 0),
+
+ };
+
+ /* Now invert Y if needed.
+ * Gallium drivers use the convention Y=0=top for surfaces.
+ */
+ if (st->state.fb_orientation == Y_0_TOP) {
+ const struct gl_framebuffer *fb = ctx->DrawBuffer;
+ /* use intermediate variables to avoid uint underflow */
+ GLint miny, maxy;
+ miny = fb->Height - scissor_state.maxy;
+ maxy = fb->Height - scissor_state.miny;
+ scissor_state.miny = MAX2(miny, 0);
+ scissor_state.maxy = MAX2(maxy, 0);
+ }
/* We can't translate the clear color to the colorbuffer format,
* because different colorbuffers may have different formats.
*/
- st->pipe->clear(st->pipe, clear_buffers,
+ st->pipe->clear(st->pipe, clear_buffers, have_scissor_buffers ? &scissor_state : NULL,
(union pipe_color_union*)&ctx->Color.ClearColor,
ctx->Depth.Clear, ctx->Stencil.Clear);
}
boolean draw_needs_minmax_index;
boolean has_hw_atomics;
+
+ /* driver supports scissored clears */
+ boolean can_scissor_clear;
+
/* Some state is contained in constant objects.
* Other state is just parameter values.
*/
}
}
+ st->can_scissor_clear = !!st->pipe->screen->get_param(st->pipe->screen, PIPE_CAP_CLEAR_SCISSORED);
+
st->invalidate_on_gl_viewport =
smapi->get_param(smapi, ST_MANAGER_BROKEN_INVALIDATE);