gallium: Add support for multiple viewports

Gallium supported only a single viewport/scissor combination. This
commit changes the interface to allow us to add support for multiple
viewports/scissors.

Signed-off-by: Zack Rusin <zackr@vmware.com>
Reviewed-by: Marek Olšák <maraeo@gmail.com>
Reviewed-by: José Fonseca<jfonseca@vmware.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
This commit is contained in:
Zack Rusin
2013-05-24 16:08:39 -04:00
parent e6efb900e7
commit eaabb4ead0
52 changed files with 265 additions and 166 deletions

View File

@@ -652,7 +652,7 @@ void cso_set_viewport(struct cso_context *ctx,
{
if (memcmp(&ctx->vp, vp, sizeof(*vp))) {
ctx->vp = *vp;
ctx->pipe->set_viewport_state(ctx->pipe, vp);
ctx->pipe->set_viewport_states(ctx->pipe, 0, 1, vp);
}
}
@@ -666,7 +666,7 @@ void cso_restore_viewport(struct cso_context *ctx)
{
if (memcmp(&ctx->vp, &ctx->vp_saved, sizeof(ctx->vp))) {
ctx->vp = ctx->vp_saved;
ctx->pipe->set_viewport_state(ctx->pipe, &ctx->vp);
ctx->pipe->set_viewport_states(ctx->pipe, 0, 1, &ctx->vp);
}
}

View File

@@ -311,9 +311,12 @@ void draw_set_clip_state( struct draw_context *draw,
/**
* Set the draw module's viewport state.
*/
void draw_set_viewport_state( struct draw_context *draw,
const struct pipe_viewport_state *viewport )
void draw_set_viewport_states( struct draw_context *draw,
unsigned start_slot,
unsigned num_viewports,
const struct pipe_viewport_state *vps )
{
const struct pipe_viewport_state *viewport = vps;
draw_do_flush(draw, DRAW_FLUSH_PARAMETER_CHANGE);
draw->viewport = *viewport; /* struct copy */
draw->identity_viewport = (viewport->scale[0] == 1.0f &&

View File

@@ -71,8 +71,10 @@ void draw_destroy( struct draw_context *draw );
void draw_flush(struct draw_context *draw);
void draw_set_viewport_state( struct draw_context *draw,
const struct pipe_viewport_state *viewport );
void draw_set_viewport_states( struct draw_context *draw,
unsigned start_slot,
unsigned num_viewports,
const struct pipe_viewport_state *viewports );
void draw_set_clip_state( struct draw_context *pipe,
const struct pipe_clip_state *clip );

View File

@@ -211,6 +211,12 @@ tgsi_scan_shader(const struct tgsi_token *tokens,
fulldecl->Semantic.Name == TGSI_SEMANTIC_EDGEFLAG) {
info->writes_edgeflag = TRUE;
}
if (procType == TGSI_PROCESSOR_GEOMETRY &&
fulldecl->Semantic.Name ==
TGSI_SEMANTIC_VIEWPORT_INDEX) {
info->writes_viewport_index = TRUE;
}
}
}

View File

@@ -75,6 +75,7 @@ struct tgsi_shader_info
boolean origin_lower_left;
boolean pixel_center_integer;
boolean color0_writes_all_cbufs;
boolean writes_viewport_index;
unsigned num_written_clipdistance;
/**

View File

@@ -78,7 +78,8 @@ const char *tgsi_semantic_names[TGSI_SEMANTIC_COUNT] =
"BLOCK_SIZE",
"THREAD_ID",
"TEXCOORD",
"PCOORD"
"PCOORD",
"VIEWPORT_INDEX"
};
const char *tgsi_texture_names[TGSI_TEXTURE_COUNT] =

View File

@@ -504,7 +504,7 @@ static void blitter_restore_fragment_states(struct blitter_context_priv *ctx)
/* XXX check whether these are saved and whether they need to be restored
* (depending on the operation) */
pipe->set_stencil_ref(pipe, &ctx->base.saved_stencil_ref);
pipe->set_viewport_state(pipe, &ctx->base.saved_viewport);
pipe->set_viewport_states(pipe, 0, 1, &ctx->base.saved_viewport);
}
static void blitter_check_saved_fb_state(struct blitter_context_priv *ctx)
@@ -599,7 +599,7 @@ static void blitter_set_rectangle(struct blitter_context_priv *ctx,
ctx->viewport.translate[1] = 0.5f * ctx->dst_height;
ctx->viewport.translate[2] = 0.0f;
ctx->viewport.translate[3] = 0.0f;
ctx->base.pipe->set_viewport_state(ctx->base.pipe, &ctx->viewport);
ctx->base.pipe->set_viewport_states(ctx->base.pipe, 0, 1, &ctx->viewport);
}
static void blitter_set_clear_color(struct blitter_context_priv *ctx,
@@ -1401,7 +1401,7 @@ void util_blitter_blit_generic(struct blitter_context *blitter,
pipe->bind_vertex_elements_state(pipe, ctx->velem_state);
if (scissor) {
pipe->set_scissor_state(pipe, scissor);
pipe->set_scissor_states(pipe, 0, 1, scissor);
}
blitter_set_common_draw_rect_state(ctx, scissor != NULL);
@@ -1496,7 +1496,7 @@ void util_blitter_blit_generic(struct blitter_context *blitter,
blitter_restore_textures(ctx);
blitter_restore_fb_state(ctx);
if (scissor) {
pipe->set_scissor_state(pipe, &ctx->base.saved_scissor);
pipe->set_scissor_states(pipe, 0, 1, &ctx->base.saved_scissor);
}
blitter_restore_render_cond(ctx);
blitter_unset_running_flag(ctx);

View File

@@ -723,7 +723,7 @@ draw_layers(struct vl_compositor *c, struct vl_compositor_state *s, struct u_rec
void *blend = layer->blend ? layer->blend : i ? c->blend_add : c->blend_clear;
c->pipe->bind_blend_state(c->pipe, blend);
c->pipe->set_viewport_state(c->pipe, &layer->viewport);
c->pipe->set_viewport_states(c->pipe, 0, 1, &layer->viewport);
c->pipe->bind_fs_state(c->pipe, layer->fs);
c->pipe->bind_fragment_sampler_states(c->pipe, num_sampler_views, layer->samplers);
c->pipe->set_fragment_sampler_views(c->pipe, num_sampler_views, samplers);
@@ -1014,7 +1014,7 @@ vl_compositor_render(struct vl_compositor_state *s,
dirty_area->x1 = dirty_area->y1 = MIN_DIRTY;
}
c->pipe->set_scissor_state(c->pipe, &s->scissor);
c->pipe->set_scissor_states(c->pipe, 0, 1, &s->scissor);
c->pipe->set_framebuffer_state(c->pipe, &c->fb_state);
c->pipe->bind_vs_state(c->pipe, c->vs);
c->pipe->set_vertex_buffers(c->pipe, 0, 1, &c->vertex_buf);

View File

@@ -830,14 +830,14 @@ vl_idct_flush(struct vl_idct *idct, struct vl_idct_buffer *buffer, unsigned num_
/* mismatch control */
idct->pipe->set_framebuffer_state(idct->pipe, &buffer->fb_state_mismatch);
idct->pipe->set_viewport_state(idct->pipe, &buffer->viewport_mismatch);
idct->pipe->set_viewport_states(idct->pipe, 0, 1, &buffer->viewport_mismatch);
idct->pipe->bind_vs_state(idct->pipe, idct->vs_mismatch);
idct->pipe->bind_fs_state(idct->pipe, idct->fs_mismatch);
util_draw_arrays_instanced(idct->pipe, PIPE_PRIM_POINTS, 0, 1, 0, num_instances);
/* first stage */
idct->pipe->set_framebuffer_state(idct->pipe, &buffer->fb_state);
idct->pipe->set_viewport_state(idct->pipe, &buffer->viewport);
idct->pipe->set_viewport_states(idct->pipe, 0, 1, &buffer->viewport);
idct->pipe->bind_vs_state(idct->pipe, idct->vs);
idct->pipe->bind_fs_state(idct->pipe, idct->fs);
util_draw_arrays_instanced(idct->pipe, PIPE_PRIM_QUADS, 0, 4, 0, num_instances);

View File

@@ -311,7 +311,7 @@ vl_matrix_filter_render(struct vl_matrix_filter *filter,
filter->pipe->bind_vs_state(filter->pipe, filter->vs);
filter->pipe->bind_fs_state(filter->pipe, filter->fs);
filter->pipe->set_framebuffer_state(filter->pipe, &fb_state);
filter->pipe->set_viewport_state(filter->pipe, &viewport);
filter->pipe->set_viewport_states(filter->pipe, 0, 1, &viewport);
filter->pipe->set_vertex_buffers(filter->pipe, 0, 1, &filter->quad);
filter->pipe->bind_vertex_elements_state(filter->pipe, filter->ves);

View File

@@ -600,7 +600,7 @@ prepare_pipe_4_rendering(struct vl_mc *renderer, struct vl_mc_buffer *buffer, un
renderer->pipe->bind_blend_state(renderer->pipe, renderer->blend_clear[mask]);
renderer->pipe->set_framebuffer_state(renderer->pipe, &buffer->fb_state);
renderer->pipe->set_viewport_state(renderer->pipe, &buffer->viewport);
renderer->pipe->set_viewport_states(renderer->pipe, 0, 1, &buffer->viewport);
}
void

View File

@@ -390,7 +390,7 @@ vl_median_filter_render(struct vl_median_filter *filter,
filter->pipe->bind_vs_state(filter->pipe, filter->vs);
filter->pipe->bind_fs_state(filter->pipe, filter->fs);
filter->pipe->set_framebuffer_state(filter->pipe, &fb_state);
filter->pipe->set_viewport_state(filter->pipe, &viewport);
filter->pipe->set_viewport_states(filter->pipe, 0, 1, &viewport);
filter->pipe->set_vertex_buffers(filter->pipe, 0, 1, &filter->quad);
filter->pipe->bind_vertex_elements_state(filter->pipe, filter->ves);

View File

@@ -576,7 +576,7 @@ vl_zscan_render(struct vl_zscan *zscan, struct vl_zscan_buffer *buffer, unsigned
zscan->pipe->bind_blend_state(zscan->pipe, zscan->blend);
zscan->pipe->bind_fragment_sampler_states(zscan->pipe, 3, zscan->samplers);
zscan->pipe->set_framebuffer_state(zscan->pipe, &buffer->fb_state);
zscan->pipe->set_viewport_state(zscan->pipe, &buffer->viewport);
zscan->pipe->set_viewport_states(zscan->pipe, 0, 1, &buffer->viewport);
zscan->pipe->set_fragment_sampler_views(zscan->pipe, 3, &buffer->src);
zscan->pipe->bind_vs_state(zscan->pipe, zscan->vs);
zscan->pipe->bind_fs_state(zscan->pipe, zscan->fs);

View File

@@ -68,13 +68,15 @@ objects. They all follow simple, one-method binding calls, e.g.
* ``set_sample_mask``
* ``set_clip_state``
* ``set_polygon_stipple``
* ``set_scissor_state`` sets the bounds for the scissor test, which culls
* ``set_scissor_states`` sets the bounds for the scissor test, which culls
pixels before blending to render targets. If the :ref:`Rasterizer` does
not have the scissor test enabled, then the scissor bounds never need to
be set since they will not be used. Note that scissor xmin and ymin are
inclusive, but xmax and ymax are exclusive. The inclusive ranges in x
and y would be [xmin..xmax-1] and [ymin..ymax-1].
* ``set_viewport_state``
and y would be [xmin..xmax-1] and [ymin..ymax-1]. The number of scissors
should be the same as the number of set viewports and can be up to
PIPE_MAX_VIEWPORTS.
* ``set_viewport_states``
Sampler Views

View File

@@ -158,7 +158,9 @@ fd_set_polygon_stipple(struct pipe_context *pctx,
}
static void
fd_set_scissor_state(struct pipe_context *pctx,
fd_set_scissor_states(struct pipe_context *pctx,
unsigned start_slot,
unsigned num_scissors,
const struct pipe_scissor_state *scissor)
{
struct fd_context *ctx = fd_context(pctx);
@@ -168,7 +170,9 @@ fd_set_scissor_state(struct pipe_context *pctx,
}
static void
fd_set_viewport_state(struct pipe_context *pctx,
fd_set_viewport_states(struct pipe_context *pctx,
unsigned start_slot,
unsigned num_viewports,
const struct pipe_viewport_state *viewport)
{
struct fd_context *ctx = fd_context(pctx);
@@ -234,8 +238,8 @@ fd_state_init(struct pipe_context *pctx)
pctx->set_constant_buffer = fd_set_constant_buffer;
pctx->set_framebuffer_state = fd_set_framebuffer_state;
pctx->set_polygon_stipple = fd_set_polygon_stipple;
pctx->set_scissor_state = fd_set_scissor_state;
pctx->set_viewport_state = fd_set_viewport_state;
pctx->set_scissor_states = fd_set_scissor_states;
pctx->set_viewport_states = fd_set_viewport_states;
pctx->set_vertex_buffers = fd_set_vertex_buffers;
pctx->set_index_buffer = fd_set_index_buffer;

View File

@@ -524,24 +524,28 @@ galahad_context_set_polygon_stipple(struct pipe_context *_pipe,
}
static void
galahad_context_set_scissor_state(struct pipe_context *_pipe,
galahad_context_set_scissor_states(struct pipe_context *_pipe,
unsigned start_slot,
unsigned num_scissors,
const struct pipe_scissor_state *scissor)
{
struct galahad_context *glhd_pipe = galahad_context(_pipe);
struct pipe_context *pipe = glhd_pipe->pipe;
pipe->set_scissor_state(pipe,
pipe->set_scissor_states(pipe, start_slot, num_scissors,
scissor);
}
static void
galahad_context_set_viewport_state(struct pipe_context *_pipe,
galahad_context_set_viewport_states(struct pipe_context *_pipe,
unsigned start_slot,
unsigned num_viewports,
const struct pipe_viewport_state *viewport)
{
struct galahad_context *glhd_pipe = galahad_context(_pipe);
struct pipe_context *pipe = glhd_pipe->pipe;
pipe->set_viewport_state(pipe,
pipe->set_viewport_states(pipe, start_slot, num_viewports,
viewport);
}
@@ -1077,8 +1081,8 @@ galahad_context_create(struct pipe_screen *_screen, struct pipe_context *pipe)
GLHD_PIPE_INIT(set_constant_buffer);
GLHD_PIPE_INIT(set_framebuffer_state);
GLHD_PIPE_INIT(set_polygon_stipple);
GLHD_PIPE_INIT(set_scissor_state);
GLHD_PIPE_INIT(set_viewport_state);
GLHD_PIPE_INIT(set_scissor_states);
GLHD_PIPE_INIT(set_viewport_states);
GLHD_PIPE_INIT(set_fragment_sampler_views);
GLHD_PIPE_INIT(set_vertex_sampler_views);
GLHD_PIPE_INIT(set_geometry_sampler_views);

View File

@@ -534,7 +534,9 @@ static void i915_delete_depth_stencil_state(struct pipe_context *pipe,
}
static void i915_set_scissor_state( struct pipe_context *pipe,
static void i915_set_scissor_states( struct pipe_context *pipe,
unsigned start_slot,
unsigned num_scissors,
const struct pipe_scissor_state *scissor )
{
struct i915_context *i915 = i915_context(pipe);
@@ -825,7 +827,9 @@ static void i915_set_clip_state( struct pipe_context *pipe,
/* Called when driver state tracker notices changes to the viewport
* matrix:
*/
static void i915_set_viewport_state( struct pipe_context *pipe,
static void i915_set_viewport_states( struct pipe_context *pipe,
unsigned start_slot,
unsigned num_viewports,
const struct pipe_viewport_state *viewport )
{
struct i915_context *i915 = i915_context(pipe);
@@ -833,7 +837,8 @@ static void i915_set_viewport_state( struct pipe_context *pipe,
i915->viewport = *viewport; /* struct copy */
/* pass the viewport info to the draw module */
draw_set_viewport_state(i915->draw, &i915->viewport);
draw_set_viewport_states(i915->draw, start_slot, num_viewports,
&i915->viewport);
i915->dirty |= I915_NEW_VIEWPORT;
}
@@ -1040,12 +1045,12 @@ i915_init_state_functions( struct i915_context *i915 )
i915->base.set_framebuffer_state = i915_set_framebuffer_state;
i915->base.set_polygon_stipple = i915_set_polygon_stipple;
i915->base.set_scissor_state = i915_set_scissor_state;
i915->base.set_scissor_states = i915_set_scissor_states;
i915->base.set_fragment_sampler_views = i915_set_fragment_sampler_views;
i915->base.set_vertex_sampler_views = i915_set_vertex_sampler_views;
i915->base.create_sampler_view = i915_create_sampler_view;
i915->base.sampler_view_destroy = i915_sampler_view_destroy;
i915->base.set_viewport_state = i915_set_viewport_state;
i915->base.set_viewport_states = i915_set_viewport_states;
i915->base.set_vertex_buffers = i915_set_vertex_buffers;
i915->base.set_index_buffer = i915_set_index_buffer;
}

View File

@@ -486,25 +486,27 @@ identity_set_polygon_stipple(struct pipe_context *_pipe,
}
static void
identity_set_scissor_state(struct pipe_context *_pipe,
identity_set_scissor_states(struct pipe_context *_pipe,
unsigned start_slot,
unsigned num_scissors,
const struct pipe_scissor_state *scissor)
{
struct identity_context *id_pipe = identity_context(_pipe);
struct pipe_context *pipe = id_pipe->pipe;
pipe->set_scissor_state(pipe,
scissor);
pipe->set_scissor_states(pipe, start_slot, num_scissors, scissor);
}
static void
identity_set_viewport_state(struct pipe_context *_pipe,
identity_set_viewport_states(struct pipe_context *_pipe,
unsigned start_slot,
unsigned num_viewports,
const struct pipe_viewport_state *viewport)
{
struct identity_context *id_pipe = identity_context(_pipe);
struct pipe_context *pipe = id_pipe->pipe;
pipe->set_viewport_state(pipe,
viewport);
pipe->set_viewport_states(pipe, start_slot, num_viewports, viewport);
}
static void
@@ -914,8 +916,8 @@ identity_context_create(struct pipe_screen *_screen, struct pipe_context *pipe)
id_pipe->base.set_constant_buffer = identity_set_constant_buffer;
id_pipe->base.set_framebuffer_state = identity_set_framebuffer_state;
id_pipe->base.set_polygon_stipple = identity_set_polygon_stipple;
id_pipe->base.set_scissor_state = identity_set_scissor_state;
id_pipe->base.set_viewport_state = identity_set_viewport_state;
id_pipe->base.set_scissor_states = identity_set_scissor_states;
id_pipe->base.set_viewport_states = identity_set_viewport_states;
id_pipe->base.set_fragment_sampler_views = identity_set_fragment_sampler_views;
id_pipe->base.set_vertex_sampler_views = identity_set_vertex_sampler_views;
id_pipe->base.set_vertex_buffers = identity_set_vertex_buffers;

View File

@@ -563,7 +563,9 @@ ilo_set_polygon_stipple(struct pipe_context *pipe,
}
static void
ilo_set_scissor_state(struct pipe_context *pipe,
ilo_set_scissor_states(struct pipe_context *pipe,
unsigned start_slot,
unsigned num_scissors,
const struct pipe_scissor_state *state)
{
struct ilo_context *ilo = ilo_context(pipe);
@@ -574,7 +576,9 @@ ilo_set_scissor_state(struct pipe_context *pipe,
}
static void
ilo_set_viewport_state(struct pipe_context *pipe,
ilo_set_viewport_states(struct pipe_context *pipe,
unsigned start_slot,
unsigned num_viewports,
const struct pipe_viewport_state *state)
{
struct ilo_context *ilo = ilo_context(pipe);
@@ -992,8 +996,8 @@ ilo_init_state_functions(struct ilo_context *ilo)
ilo->base.set_constant_buffer = ilo_set_constant_buffer;
ilo->base.set_framebuffer_state = ilo_set_framebuffer_state;
ilo->base.set_polygon_stipple = ilo_set_polygon_stipple;
ilo->base.set_scissor_state = ilo_set_scissor_state;
ilo->base.set_viewport_state = ilo_set_viewport_state;
ilo->base.set_scissor_states = ilo_set_scissor_states;
ilo->base.set_viewport_states = ilo_set_viewport_states;
ilo->base.set_fragment_sampler_views = ilo_set_fragment_sampler_views;
ilo->base.set_vertex_sampler_views = ilo_set_vertex_sampler_views;
ilo->base.set_geometry_sampler_views = ilo_set_geometry_sampler_views;

View File

@@ -230,6 +230,8 @@ llvmpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
return 1;
case PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER:
return 0;
case PIPE_CAP_MAX_VIEWPORTS:
return 1;
}
/* should only get here on unhandled cases */
debug_printf("Unexpected PIPE_CAP %d query\n", param);

View File

@@ -44,28 +44,33 @@ llvmpipe_set_clip_state(struct pipe_context *pipe,
static void
llvmpipe_set_viewport_state(struct pipe_context *pipe,
const struct pipe_viewport_state *viewport)
llvmpipe_set_viewport_states(struct pipe_context *pipe,
unsigned start_slot,
unsigned num_viewports,
const struct pipe_viewport_state *viewports)
{
struct llvmpipe_context *llvmpipe = llvmpipe_context(pipe);
/* pass the viewport info to the draw module */
draw_set_viewport_state(llvmpipe->draw, viewport);
draw_set_viewport_states(llvmpipe->draw, start_slot, num_viewports,
viewports);
llvmpipe->viewport = *viewport; /* struct copy */
llvmpipe->viewport = *viewports; /* struct copy */
llvmpipe->dirty |= LP_NEW_VIEWPORT;
}
static void
llvmpipe_set_scissor_state(struct pipe_context *pipe,
const struct pipe_scissor_state *scissor)
llvmpipe_set_scissor_states(struct pipe_context *pipe,
unsigned start_slot,
unsigned num_scissors,
const struct pipe_scissor_state *scissors)
{
struct llvmpipe_context *llvmpipe = llvmpipe_context(pipe);
draw_flush(llvmpipe->draw);
llvmpipe->scissor = *scissor; /* struct copy */
llvmpipe->scissor = *scissors; /* struct copy */
llvmpipe->dirty |= LP_NEW_SCISSOR;
}
@@ -89,6 +94,6 @@ llvmpipe_init_clip_funcs(struct llvmpipe_context *llvmpipe)
{
llvmpipe->pipe.set_clip_state = llvmpipe_set_clip_state;
llvmpipe->pipe.set_polygon_stipple = llvmpipe_set_polygon_stipple;
llvmpipe->pipe.set_scissor_state = llvmpipe_set_scissor_state;
llvmpipe->pipe.set_viewport_state = llvmpipe_set_viewport_state;
llvmpipe->pipe.set_scissor_states = llvmpipe_set_scissor_states;
llvmpipe->pipe.set_viewport_states = llvmpipe_set_viewport_states;
}

View File

@@ -152,7 +152,9 @@ static void noop_set_sample_mask(struct pipe_context *pipe, unsigned sample_mask
{
}
static void noop_set_scissor_state(struct pipe_context *ctx,
static void noop_set_scissor_states(struct pipe_context *ctx,
unsigned start_slot,
unsigned num_scissors,
const struct pipe_scissor_state *state)
{
}
@@ -162,7 +164,9 @@ static void noop_set_stencil_ref(struct pipe_context *ctx,
{
}
static void noop_set_viewport_state(struct pipe_context *ctx,
static void noop_set_viewport_states(struct pipe_context *ctx,
unsigned start_slot,
unsigned num_viewports,
const struct pipe_viewport_state *state)
{
}
@@ -311,12 +315,12 @@ void noop_init_state_functions(struct pipe_context *ctx)
ctx->set_framebuffer_state = noop_set_framebuffer_state;
ctx->set_polygon_stipple = noop_set_polygon_stipple;
ctx->set_sample_mask = noop_set_sample_mask;
ctx->set_scissor_state = noop_set_scissor_state;
ctx->set_scissor_states = noop_set_scissor_states;
ctx->set_stencil_ref = noop_set_stencil_ref;
ctx->set_vertex_buffers = noop_set_vertex_buffers;
ctx->set_index_buffer = noop_set_index_buffer;
ctx->set_vertex_sampler_views = noop_set_vs_sampler_view;
ctx->set_viewport_state = noop_set_viewport_state;
ctx->set_viewport_states = noop_set_viewport_states;
ctx->sampler_view_destroy = noop_sampler_view_destroy;
ctx->surface_destroy = noop_surface_destroy;
ctx->draw_vbo = noop_draw_vbo;

View File

@@ -373,7 +373,7 @@ nv30_render_vbo(struct pipe_context *pipe, const struct pipe_draw_info *info)
nv30_render_validate(nv30);
if (nv30->draw_dirty & NV30_NEW_VIEWPORT)
draw_set_viewport_state(draw, &nv30->viewport);
draw_set_viewport_states(draw, 0, 1, &nv30->viewport);
if (nv30->draw_dirty & NV30_NEW_RASTERIZER)
draw_set_rasterizer_state(draw, &nv30->rast->pipe, NULL);
if (nv30->draw_dirty & NV30_NEW_CLIP)

View File

@@ -373,7 +373,9 @@ nv30_set_polygon_stipple(struct pipe_context *pipe,
}
static void
nv30_set_scissor_state(struct pipe_context *pipe,
nv30_set_scissor_states(struct pipe_context *pipe,
unsigned start_slot,
unsigned num_viewports,
const struct pipe_scissor_state *scissor)
{
struct nv30_context *nv30 = nv30_context(pipe);
@@ -383,7 +385,9 @@ nv30_set_scissor_state(struct pipe_context *pipe,
}
static void
nv30_set_viewport_state(struct pipe_context *pipe,
nv30_set_viewport_states(struct pipe_context *pipe,
unsigned start_slot,
unsigned num_viewports,
const struct pipe_viewport_state *vpt)
{
struct nv30_context *nv30 = nv30_context(pipe);
@@ -446,8 +450,8 @@ nv30_state_init(struct pipe_context *pipe)
pipe->set_constant_buffer = nv30_set_constant_buffer;
pipe->set_framebuffer_state = nv30_set_framebuffer_state;
pipe->set_polygon_stipple = nv30_set_polygon_stipple;
pipe->set_scissor_state = nv30_set_scissor_state;
pipe->set_viewport_state = nv30_set_viewport_state;
pipe->set_scissor_states = nv30_set_scissor_states;
pipe->set_viewport_states = nv30_set_viewport_states;
pipe->set_vertex_buffers = nv30_set_vertex_buffers;
pipe->set_index_buffer = nv30_set_index_buffer;

View File

@@ -871,7 +871,9 @@ nv50_set_polygon_stipple(struct pipe_context *pipe,
}
static void
nv50_set_scissor_state(struct pipe_context *pipe,
nv50_set_scissor_states(struct pipe_context *pipe,
unsigned start_slot,
unsigned num_scissors,
const struct pipe_scissor_state *scissor)
{
struct nv50_context *nv50 = nv50_context(pipe);
@@ -881,7 +883,9 @@ nv50_set_scissor_state(struct pipe_context *pipe,
}
static void
nv50_set_viewport_state(struct pipe_context *pipe,
nv50_set_viewport_states(struct pipe_context *pipe,
unsigned start_slot,
unsigned num_viewports,
const struct pipe_viewport_state *vpt)
{
struct nv50_context *nv50 = nv50_context(pipe);
@@ -1090,8 +1094,8 @@ nv50_init_state_functions(struct nv50_context *nv50)
pipe->set_constant_buffer = nv50_set_constant_buffer;
pipe->set_framebuffer_state = nv50_set_framebuffer_state;
pipe->set_polygon_stipple = nv50_set_polygon_stipple;
pipe->set_scissor_state = nv50_set_scissor_state;
pipe->set_viewport_state = nv50_set_viewport_state;
pipe->set_scissor_states = nv50_set_scissor_states;
pipe->set_viewport_states = nv50_set_viewport_states;
pipe->create_vertex_elements_state = nv50_vertex_state_create;
pipe->delete_vertex_elements_state = nv50_vertex_state_delete;

View File

@@ -903,7 +903,9 @@ nvc0_set_polygon_stipple(struct pipe_context *pipe,
}
static void
nvc0_set_scissor_state(struct pipe_context *pipe,
nvc0_set_scissor_states(struct pipe_context *pipe,
unsigned start_slot,
unsigned num_scissors,
const struct pipe_scissor_state *scissor)
{
struct nvc0_context *nvc0 = nvc0_context(pipe);
@@ -913,7 +915,9 @@ nvc0_set_scissor_state(struct pipe_context *pipe,
}
static void
nvc0_set_viewport_state(struct pipe_context *pipe,
nvc0_set_viewport_states(struct pipe_context *pipe,
unsigned start_slot,
unsigned num_viewports,
const struct pipe_viewport_state *vpt)
{
struct nvc0_context *nvc0 = nvc0_context(pipe);
@@ -1223,8 +1227,8 @@ nvc0_init_state_functions(struct nvc0_context *nvc0)
pipe->set_constant_buffer = nvc0_set_constant_buffer;
pipe->set_framebuffer_state = nvc0_set_framebuffer_state;
pipe->set_polygon_stipple = nvc0_set_polygon_stipple;
pipe->set_scissor_state = nvc0_set_scissor_state;
pipe->set_viewport_state = nvc0_set_viewport_state;
pipe->set_scissor_states = nvc0_set_scissor_states;
pipe->set_viewport_states = nvc0_set_viewport_states;
pipe->create_vertex_elements_state = nvc0_vertex_state_create;
pipe->delete_vertex_elements_state = nvc0_vertex_state_delete;

View File

@@ -275,7 +275,7 @@ static void r300_init_states(struct pipe_context *pipe)
pipe->set_blend_color(pipe, &bc);
pipe->set_clip_state(pipe, &cs);
pipe->set_scissor_state(pipe, &ss);
pipe->set_scissor_states(pipe, 0, 1, &ss);
pipe->set_sample_mask(pipe, ~0);
/* Initialize the GPU flush. */

View File

@@ -1722,7 +1722,9 @@ static void r300_set_sample_mask(struct pipe_context *pipe,
r300_mark_atom_dirty(r300, &r300->sample_mask);
}
static void r300_set_scissor_state(struct pipe_context* pipe,
static void r300_set_scissor_states(struct pipe_context* pipe,
unsigned start_slot,
unsigned num_scissors,
const struct pipe_scissor_state* state)
{
struct r300_context* r300 = r300_context(pipe);
@@ -1733,7 +1735,9 @@ static void r300_set_scissor_state(struct pipe_context* pipe,
r300_mark_atom_dirty(r300, &r300->scissor_state);
}
static void r300_set_viewport_state(struct pipe_context* pipe,
static void r300_set_viewport_states(struct pipe_context* pipe,
unsigned start_slot,
unsigned num_viewports,
const struct pipe_viewport_state* state)
{
struct r300_context* r300 = r300_context(pipe);
@@ -1743,7 +1747,7 @@ static void r300_set_viewport_state(struct pipe_context* pipe,
r300->viewport = *state;
if (r300->draw) {
draw_set_viewport_state(r300->draw, state);
draw_set_viewport_states(r300->draw, start_slot, num_viewports, state);
viewport->vte_control = R300_VTX_XY_FMT | R300_VTX_Z_FMT;
return;
}
@@ -2162,9 +2166,9 @@ void r300_init_state_functions(struct r300_context* r300)
r300->context.create_sampler_view = r300_create_sampler_view;
r300->context.sampler_view_destroy = r300_sampler_view_destroy;
r300->context.set_scissor_state = r300_set_scissor_state;
r300->context.set_scissor_states = r300_set_scissor_states;
r300->context.set_viewport_state = r300_set_viewport_state;
r300->context.set_viewport_states = r300_set_viewport_states;
if (r300->screen->caps.has_tcl) {
r300->context.set_vertex_buffers = r300_set_vertex_buffers_hwtcl;

View File

@@ -1309,7 +1309,9 @@ static void evergreen_get_scissor_rect(struct r600_context *rctx,
*br = S_028244_BR_X(br_x) | S_028244_BR_Y(br_y);
}
static void evergreen_set_scissor_state(struct pipe_context *ctx,
static void evergreen_set_scissor_states(struct pipe_context *ctx,
unsigned start_slot,
unsigned num_scissors,
const struct pipe_scissor_state *state)
{
struct r600_context *rctx = (struct r600_context *)ctx;
@@ -3860,7 +3862,7 @@ void evergreen_init_state_functions(struct r600_context *rctx)
rctx->context.create_sampler_view = evergreen_create_sampler_view;
rctx->context.set_framebuffer_state = evergreen_set_framebuffer_state;
rctx->context.set_polygon_stipple = evergreen_set_polygon_stipple;
rctx->context.set_scissor_state = evergreen_set_scissor_state;
rctx->context.set_scissor_states = evergreen_set_scissor_states;
if (rctx->chip_class == EVERGREEN)
rctx->context.get_sample_position = evergreen_get_sample_position;

View File

@@ -1215,7 +1215,9 @@ static void r600_emit_scissor_state(struct r600_context *rctx, struct r600_atom
}
}
static void r600_set_scissor_state(struct pipe_context *ctx,
static void r600_set_scissor_states(struct pipe_context *ctx,
unsigned start_slot,
unsigned num_scissors,
const struct pipe_scissor_state *state)
{
struct r600_context *rctx = (struct r600_context *)ctx;
@@ -3252,7 +3254,7 @@ void r600_init_state_functions(struct r600_context *rctx)
rctx->context.create_sampler_view = r600_create_sampler_view;
rctx->context.set_framebuffer_state = r600_set_framebuffer_state;
rctx->context.set_polygon_stipple = r600_set_polygon_stipple;
rctx->context.set_scissor_state = r600_set_scissor_state;
rctx->context.set_scissor_states = r600_set_scissor_states;
rctx->context.get_sample_position = r600_get_sample_position;
}

View File

@@ -660,7 +660,9 @@ static void r600_set_ps_sampler_views(struct pipe_context *ctx, unsigned count,
r600_set_sampler_views(ctx, PIPE_SHADER_FRAGMENT, 0, count, views);
}
static void r600_set_viewport_state(struct pipe_context *ctx,
static void r600_set_viewport_states(struct pipe_context *ctx,
unsigned start_slot,
unsigned num_viewports,
const struct pipe_viewport_state *state)
{
struct r600_context *rctx = (struct r600_context *)ctx;
@@ -1547,7 +1549,7 @@ void r600_draw_rectangle(struct blitter_context *blitter,
viewport.translate[1] = 0.0f;
viewport.translate[2] = 0.0f;
viewport.translate[3] = 0.0f;
rctx->context.set_viewport_state(&rctx->context, &viewport);
rctx->context.set_viewport_states(&rctx->context, 0, 1, &viewport);
/* Upload vertices. The hw rectangle has only 3 vertices,
* I guess the 4th one is derived from the first 3.
@@ -1750,7 +1752,7 @@ void r600_init_common_state_functions(struct r600_context *rctx)
rctx->context.set_constant_buffer = r600_set_constant_buffer;
rctx->context.set_sample_mask = r600_set_sample_mask;
rctx->context.set_stencil_ref = r600_set_pipe_stencil_ref;
rctx->context.set_viewport_state = r600_set_viewport_state;
rctx->context.set_viewport_states = r600_set_viewport_states;
rctx->context.set_vertex_buffers = r600_set_vertex_buffers;
rctx->context.set_index_buffer = r600_set_index_buffer;
rctx->context.set_fragment_sampler_views = r600_set_ps_sampler_views;

View File

@@ -263,7 +263,9 @@ static void si_set_clip_state(struct pipe_context *ctx,
si_pm4_set_state(rctx, clip, pm4);
}
static void si_set_scissor_state(struct pipe_context *ctx,
static void si_set_scissor_states(struct pipe_context *ctx,
unsigned start_slot,
unsigned num_scissors,
const struct pipe_scissor_state *state)
{
struct r600_context *rctx = (struct r600_context *)ctx;
@@ -287,7 +289,9 @@ static void si_set_scissor_state(struct pipe_context *ctx,
si_pm4_set_state(rctx, scissor, pm4);
}
static void si_set_viewport_state(struct pipe_context *ctx,
static void si_set_viewport_states(struct pipe_context *ctx,
unsigned start_slot,
unsigned num_viewports,
const struct pipe_viewport_state *state)
{
struct r600_context *rctx = (struct r600_context *)ctx;
@@ -2705,8 +2709,8 @@ void si_init_state_functions(struct r600_context *rctx)
rctx->custom_dsa_flush_inplace = si_create_db_flush_dsa(rctx, false, false);
rctx->context.set_clip_state = si_set_clip_state;
rctx->context.set_scissor_state = si_set_scissor_state;
rctx->context.set_viewport_state = si_set_viewport_state;
rctx->context.set_scissor_states = si_set_scissor_states;
rctx->context.set_viewport_states = si_set_viewport_states;
rctx->context.set_stencil_ref = si_set_pipe_stencil_ref;
rctx->context.set_framebuffer_state = si_set_framebuffer_state;

View File

@@ -693,28 +693,30 @@ rbug_set_polygon_stipple(struct pipe_context *_pipe,
}
static void
rbug_set_scissor_state(struct pipe_context *_pipe,
rbug_set_scissor_states(struct pipe_context *_pipe,
unsigned start_slot,
unsigned num_scissors,
const struct pipe_scissor_state *scissor)
{
struct rbug_context *rb_pipe = rbug_context(_pipe);
struct pipe_context *pipe = rb_pipe->pipe;
pipe_mutex_lock(rb_pipe->call_mutex);
pipe->set_scissor_state(pipe,
scissor);
pipe->set_scissor_states(pipe, start_slot, num_scissors, scissor);
pipe_mutex_unlock(rb_pipe->call_mutex);
}
static void
rbug_set_viewport_state(struct pipe_context *_pipe,
rbug_set_viewport_states(struct pipe_context *_pipe,
unsigned start_slot,
unsigned num_viewports,
const struct pipe_viewport_state *viewport)
{
struct rbug_context *rb_pipe = rbug_context(_pipe);
struct pipe_context *pipe = rb_pipe->pipe;
pipe_mutex_lock(rb_pipe->call_mutex);
pipe->set_viewport_state(pipe,
viewport);
pipe->set_viewport_states(pipe, start_slot, num_viewports, viewport);
pipe_mutex_unlock(rb_pipe->call_mutex);
}
@@ -1171,8 +1173,8 @@ rbug_context_create(struct pipe_screen *_screen, struct pipe_context *pipe)
rb_pipe->base.set_constant_buffer = rbug_set_constant_buffer;
rb_pipe->base.set_framebuffer_state = rbug_set_framebuffer_state;
rb_pipe->base.set_polygon_stipple = rbug_set_polygon_stipple;
rb_pipe->base.set_scissor_state = rbug_set_scissor_state;
rb_pipe->base.set_viewport_state = rbug_set_viewport_state;
rb_pipe->base.set_scissor_states = rbug_set_scissor_states;
rb_pipe->base.set_viewport_states = rbug_set_viewport_states;
rb_pipe->base.set_fragment_sampler_views = rbug_set_fragment_sampler_views;
rb_pipe->base.set_vertex_sampler_views = rbug_set_vertex_sampler_views;
rb_pipe->base.set_vertex_buffers = rbug_set_vertex_buffers;

View File

@@ -182,6 +182,8 @@ softpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
case PIPE_CAP_TGSI_TEXCOORD:
case PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER:
return 0;
case PIPE_CAP_MAX_VIEWPORTS:
return 1;
}
/* should only get here on unhandled cases */
debug_printf("Unexpected PIPE_CAP %d query\n", param);

View File

@@ -44,13 +44,16 @@ softpipe_set_clip_state(struct pipe_context *pipe,
static void
softpipe_set_viewport_state(struct pipe_context *pipe,
softpipe_set_viewport_states(struct pipe_context *pipe,
unsigned start_slot,
unsigned num_viewports,
const struct pipe_viewport_state *viewport)
{
struct softpipe_context *softpipe = softpipe_context(pipe);
/* pass the viewport info to the draw module */
draw_set_viewport_state(softpipe->draw, viewport);
draw_set_viewport_states(softpipe->draw, start_slot, num_viewports,
viewport);
softpipe->viewport = *viewport; /* struct copy */
softpipe->dirty |= SP_NEW_VIEWPORT;
@@ -58,7 +61,9 @@ softpipe_set_viewport_state(struct pipe_context *pipe,
static void
softpipe_set_scissor_state(struct pipe_context *pipe,
softpipe_set_scissor_states(struct pipe_context *pipe,
unsigned start_slot,
unsigned num_scissors,
const struct pipe_scissor_state *scissor)
{
struct softpipe_context *softpipe = softpipe_context(pipe);
@@ -87,7 +92,7 @@ void
softpipe_init_clip_funcs(struct pipe_context *pipe)
{
pipe->set_clip_state = softpipe_set_clip_state;
pipe->set_viewport_state = softpipe_set_viewport_state;
pipe->set_scissor_state = softpipe_set_scissor_state;
pipe->set_viewport_states = softpipe_set_viewport_states;
pipe->set_scissor_states = softpipe_set_scissor_states;
pipe->set_polygon_stipple = softpipe_set_polygon_stipple;
}

View File

@@ -31,12 +31,14 @@
#include "svga_surface.h"
static void svga_set_scissor_state( struct pipe_context *pipe,
const struct pipe_scissor_state *scissor )
static void svga_set_scissor_states( struct pipe_context *pipe,
unsigned start_slot,
unsigned num_scissors,
const struct pipe_scissor_state *scissors )
{
struct svga_context *svga = svga_context(pipe);
memcpy( &svga->curr.scissor, scissor, sizeof(*scissor) );
memcpy( &svga->curr.scissor, scissors, sizeof(*scissors) );
svga->dirty |= SVGA_NEW_SCISSOR;
}
@@ -161,12 +163,14 @@ static void svga_set_clip_state( struct pipe_context *pipe,
/* Called when driver state tracker notices changes to the viewport
* matrix:
*/
static void svga_set_viewport_state( struct pipe_context *pipe,
const struct pipe_viewport_state *viewport )
static void svga_set_viewport_states( struct pipe_context *pipe,
unsigned start_slot,
unsigned num_viewports,
const struct pipe_viewport_state *viewports )
{
struct svga_context *svga = svga_context(pipe);
svga->curr.viewport = *viewport; /* struct copy */
svga->curr.viewport = *viewports; /* struct copy */
svga->dirty |= SVGA_NEW_VIEWPORT;
}
@@ -175,11 +179,11 @@ static void svga_set_viewport_state( struct pipe_context *pipe,
void svga_init_misc_functions( struct svga_context *svga )
{
svga->pipe.set_scissor_state = svga_set_scissor_state;
svga->pipe.set_scissor_states = svga_set_scissor_states;
svga->pipe.set_polygon_stipple = svga_set_polygon_stipple;
svga->pipe.set_framebuffer_state = svga_set_framebuffer_state;
svga->pipe.set_clip_state = svga_set_clip_state;
svga->pipe.set_viewport_state = svga_set_viewport_state;
svga->pipe.set_viewport_states = svga_set_viewport_states;
}

View File

@@ -80,7 +80,7 @@ static void set_draw_viewport( struct svga_context *svga )
vp.translate[0] += adjx;
vp.translate[1] += adjy;
draw_set_viewport_state(svga->swtnl.draw, &vp);
draw_set_viewport_states(svga->swtnl.draw, 0, 1, &vp);
}
static enum pipe_error

View File

@@ -765,36 +765,44 @@ trace_context_set_polygon_stipple(struct pipe_context *_pipe,
static INLINE void
trace_context_set_scissor_state(struct pipe_context *_pipe,
const struct pipe_scissor_state *state)
trace_context_set_scissor_states(struct pipe_context *_pipe,
unsigned start_slot,
unsigned num_scissors,
const struct pipe_scissor_state *states)
{
struct trace_context *tr_ctx = trace_context(_pipe);
struct pipe_context *pipe = tr_ctx->pipe;
trace_dump_call_begin("pipe_context", "set_scissor_state");
trace_dump_call_begin("pipe_context", "set_scissor_states");
trace_dump_arg(ptr, pipe);
trace_dump_arg(scissor_state, state);
trace_dump_arg(uint, start_slot);
trace_dump_arg(uint, num_scissors);
trace_dump_arg(scissor_state, states);
pipe->set_scissor_state(pipe, state);
pipe->set_scissor_states(pipe, start_slot, num_scissors, states);
trace_dump_call_end();
}
static INLINE void
trace_context_set_viewport_state(struct pipe_context *_pipe,
const struct pipe_viewport_state *state)
trace_context_set_viewport_states(struct pipe_context *_pipe,
unsigned start_slot,
unsigned num_viewports,
const struct pipe_viewport_state *states)
{
struct trace_context *tr_ctx = trace_context(_pipe);
struct pipe_context *pipe = tr_ctx->pipe;
trace_dump_call_begin("pipe_context", "set_viewport_state");
trace_dump_call_begin("pipe_context", "set_viewport_states");
trace_dump_arg(ptr, pipe);
trace_dump_arg(viewport_state, state);
trace_dump_arg(uint, start_slot);
trace_dump_arg(uint, num_viewports);
trace_dump_arg(viewport_state, states);
pipe->set_viewport_state(pipe, state);
pipe->set_viewport_states(pipe, start_slot, num_viewports, states);
trace_dump_call_end();
}
@@ -1576,8 +1584,8 @@ trace_context_create(struct trace_screen *tr_scr,
TR_CTX_INIT(set_constant_buffer);
TR_CTX_INIT(set_framebuffer_state);
TR_CTX_INIT(set_polygon_stipple);
TR_CTX_INIT(set_scissor_state);
TR_CTX_INIT(set_viewport_state);
TR_CTX_INIT(set_scissor_states);
TR_CTX_INIT(set_viewport_states);
TR_CTX_INIT(set_fragment_sampler_views);
TR_CTX_INIT(set_vertex_sampler_views);
TR_CTX_INIT(set_geometry_sampler_views);

View File

@@ -211,11 +211,15 @@ struct pipe_context {
void (*set_polygon_stipple)( struct pipe_context *,
const struct pipe_poly_stipple * );
void (*set_scissor_state)( struct pipe_context *,
void (*set_scissor_states)( struct pipe_context *,
unsigned start_slot,
unsigned num_scissors,
const struct pipe_scissor_state * );
void (*set_viewport_state)( struct pipe_context *,
const struct pipe_viewport_state * );
void (*set_viewport_states)( struct pipe_context *,
unsigned start_slot,
unsigned num_viewports,
const struct pipe_viewport_state *);
void (*set_fragment_sampler_views)(struct pipe_context *,
unsigned num_views,

View File

@@ -507,7 +507,8 @@ enum pipe_cap {
PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER = 80,
PIPE_CAP_QUERY_PIPELINE_STATISTICS = 81,
PIPE_CAP_TEXTURE_BORDER_COLOR_QUIRK = 82,
PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE = 83
PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE = 83,
PIPE_CAP_MAX_VIEWPORTS = 84
};
#define PIPE_QUIRK_TEXTURE_BORDER_COLOR_SWIZZLE_NV50 (1 << 0)

View File

@@ -164,7 +164,8 @@ struct tgsi_declaration_interp
#define TGSI_SEMANTIC_THREAD_ID 18 /**< block-relative id of the current thread */
#define TGSI_SEMANTIC_TEXCOORD 19 /**< texture or sprite coordinates */
#define TGSI_SEMANTIC_PCOORD 20 /**< point sprite coordinate */
#define TGSI_SEMANTIC_COUNT 21 /**< number of semantic values */
#define TGSI_SEMANTIC_VIEWPORT_INDEX 21 /**< viewport index */
#define TGSI_SEMANTIC_COUNT 22 /**< number of semantic values */
struct tgsi_declaration_semantic
{

View File

@@ -65,6 +65,7 @@ extern "C" {
#define PIPE_MAX_TEXTURE_LEVELS 16
#define PIPE_MAX_SO_BUFFERS 4
#define PIPE_MAX_SO_OUTPUTS 64
#define PIPE_MAX_VIEWPORTS 16
struct pipe_reference

View File

@@ -150,7 +150,7 @@ static void set_viewport( float x, float y,
vp.translate[2] = half_depth + z;
vp.translate[3] = 0.0f;
ctx->set_viewport_state( ctx, &vp );
ctx->set_viewport_states( ctx, 0, 1, &vp );
}
static void set_vertices( void )

View File

@@ -203,7 +203,7 @@ graw_util_viewport(struct graw_info *info,
vp.translate[2] = half_depth + z;
vp.translate[3] = 0.0f;
info->ctx->set_viewport_state(info->ctx, &vp);
info->ctx->set_viewport_states(info->ctx, 0, 1, &vp);
}

View File

@@ -225,7 +225,7 @@ static void set_viewport( float x, float y,
vp.translate[2] = half_depth + z;
vp.translate[3] = 0.0f;
ctx->set_viewport_state( ctx, &vp );
ctx->set_viewport_states( ctx, 0, 1, &vp );
}
static void set_vertices( void )

View File

@@ -78,7 +78,7 @@ static void set_viewport( float x, float y,
vp.translate[2] = half_depth + z;
vp.translate[3] = 0.0f;
ctx->set_viewport_state( ctx, &vp );
ctx->set_viewport_states( ctx, 0, 1, &vp );
}
static void set_vertices( void )

View File

@@ -68,7 +68,7 @@ static void set_viewport( float x, float y,
vp.translate[2] = half_depth + z;
vp.translate[3] = 0.0f;
ctx->set_viewport_state( ctx, &vp );
ctx->set_viewport_states( ctx, 0, 1, &vp );
}
static void set_vertices( void )

View File

@@ -69,7 +69,7 @@ static void set_viewport( float x, float y,
vp.translate[2] = half_depth + z;
vp.translate[3] = 0.0f;
ctx->set_viewport_state( ctx, &vp );
ctx->set_viewport_states( ctx, 0, 1, &vp );
}
static void set_vertices( void )

View File

@@ -98,7 +98,7 @@ static void set_viewport( float x, float y,
vp.translate[2] = half_depth + z;
vp.translate[3] = 0.0f;
ctx->set_viewport_state( ctx, &vp );
ctx->set_viewport_states( ctx, 0, 1, &vp );
}

View File

@@ -136,7 +136,7 @@ static void set_viewport( float x, float y,
vp.translate[2] = half_depth + z;
vp.translate[3] = 0.0f;
ctx->set_viewport_state( ctx, &vp );
ctx->set_viewport_states( ctx, 0, 1, &vp );
}
static void set_vertices( void )

View File

@@ -86,7 +86,7 @@ update_scissor( struct st_context *st )
if (memcmp(&scissor, &st->state.scissor, sizeof(scissor)) != 0) {
/* state has changed */
st->state.scissor = scissor; /* struct copy */
st->pipe->set_scissor_state(st->pipe, &scissor); /* activate */
st->pipe->set_scissor_states(st->pipe, 0, 1, &scissor); /* activate */
}
}

View File

@@ -133,7 +133,7 @@ st_feedback_draw_vbo(struct gl_context *ctx,
* code sends state updates to the pipe, not to our private draw module.
*/
assert(draw);
draw_set_viewport_state(draw, &st->state.viewport);
draw_set_viewport_states(draw, 0, 1, &st->state.viewport);
draw_set_clip_state(draw, &st->state.clip);
draw_set_rasterizer_state(draw, &st->state.rasterizer, NULL);
draw_bind_vertex_shader(draw, st->vp_variant->draw_shader);