gallium: new, unified pipe_context::set_sampler_views() function

The new function replaces four old functions: set_fragment/vertex/
geometry/compute_sampler_views().

Note: at this time, it's expected that the 'start' parameter will
always be zero.

Reviewed-by: Roland Scheidegger <sroland@vmware.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Tested-by: Emil Velikov <emil.l.velikov@gmail.com>
This commit is contained in:
Brian Paul 2013-10-07 18:16:22 -06:00
parent b11fc226e6
commit a3ed98f7aa
44 changed files with 277 additions and 492 deletions

View file

@ -306,6 +306,7 @@ void cso_release_all( struct cso_context *ctx )
ctx->pipe->bind_rasterizer_state( ctx->pipe, NULL ); ctx->pipe->bind_rasterizer_state( ctx->pipe, NULL );
{ {
static struct pipe_sampler_view *views[PIPE_MAX_SAMPLERS] = { NULL };
static void *zeros[PIPE_MAX_SAMPLERS] = { NULL }; static void *zeros[PIPE_MAX_SAMPLERS] = { NULL };
struct pipe_screen *scr = ctx->pipe->screen; struct pipe_screen *scr = ctx->pipe->screen;
unsigned sh; unsigned sh;
@ -315,6 +316,7 @@ void cso_release_all( struct cso_context *ctx )
assert(max <= PIPE_MAX_SAMPLERS); assert(max <= PIPE_MAX_SAMPLERS);
if (max > 0) { if (max > 0) {
ctx->pipe->bind_sampler_states(ctx->pipe, sh, 0, max, zeros); ctx->pipe->bind_sampler_states(ctx->pipe, sh, 0, max, zeros);
ctx->pipe->set_sampler_views(ctx->pipe, sh, 0, max, views);
} }
} }
} }
@ -323,9 +325,7 @@ void cso_release_all( struct cso_context *ctx )
ctx->pipe->bind_fs_state( ctx->pipe, NULL ); ctx->pipe->bind_fs_state( ctx->pipe, NULL );
ctx->pipe->bind_vs_state( ctx->pipe, NULL ); ctx->pipe->bind_vs_state( ctx->pipe, NULL );
ctx->pipe->bind_vertex_elements_state( ctx->pipe, NULL ); ctx->pipe->bind_vertex_elements_state( ctx->pipe, NULL );
ctx->pipe->set_fragment_sampler_views(ctx->pipe, 0, NULL);
if (ctx->pipe->set_vertex_sampler_views)
ctx->pipe->set_vertex_sampler_views(ctx->pipe, 0, NULL);
if (ctx->pipe->set_stream_output_targets) if (ctx->pipe->set_stream_output_targets)
ctx->pipe->set_stream_output_targets(ctx->pipe, 0, NULL, 0); ctx->pipe->set_stream_output_targets(ctx->pipe, 0, NULL, 0);
} }
@ -1185,19 +1185,8 @@ cso_set_sampler_views(struct cso_context *ctx,
info->nr_views = count; info->nr_views = count;
/* bind the new sampler views */ /* bind the new sampler views */
switch (shader_stage) { ctx->pipe->set_sampler_views(ctx->pipe, shader_stage, 0, count,
case PIPE_SHADER_FRAGMENT: info->views);
ctx->pipe->set_fragment_sampler_views(ctx->pipe, count, info->views);
break;
case PIPE_SHADER_VERTEX:
ctx->pipe->set_vertex_sampler_views(ctx->pipe, count, info->views);
break;
case PIPE_SHADER_GEOMETRY:
ctx->pipe->set_geometry_sampler_views(ctx->pipe, count, info->views);
break;
default:
assert(!"bad shader type in cso_set_sampler_views()");
}
} }
@ -1236,19 +1225,7 @@ cso_restore_sampler_views(struct cso_context *ctx, unsigned shader_stage)
num = MAX2(info->nr_views, nr_saved); num = MAX2(info->nr_views, nr_saved);
/* bind the old/saved sampler views */ /* bind the old/saved sampler views */
switch (shader_stage) { ctx->pipe->set_sampler_views(ctx->pipe, shader_stage, 0, num, info->views);
case PIPE_SHADER_FRAGMENT:
ctx->pipe->set_fragment_sampler_views(ctx->pipe, num, info->views);
break;
case PIPE_SHADER_VERTEX:
ctx->pipe->set_vertex_sampler_views(ctx->pipe, num, info->views);
break;
case PIPE_SHADER_GEOMETRY:
ctx->pipe->set_geometry_sampler_views(ctx->pipe, num, info->views);
break;
default:
assert(!"bad shader type in cso_restore_sampler_views()");
}
info->nr_views = nr_saved; info->nr_views = nr_saved;
info->nr_views_saved = 0; info->nr_views_saved = 0;

View file

@ -121,8 +121,8 @@ struct aaline_stage
void (*driver_bind_sampler_states)(struct pipe_context *, unsigned, unsigned, void (*driver_bind_sampler_states)(struct pipe_context *, unsigned, unsigned,
unsigned, void **); unsigned, void **);
void (*driver_set_sampler_views)(struct pipe_context *, void (*driver_set_sampler_views)(struct pipe_context *, unsigned shader,
unsigned, unsigned start, unsigned count,
struct pipe_sampler_view **); struct pipe_sampler_view **);
}; };
@ -708,7 +708,8 @@ aaline_first_line(struct draw_stage *stage, struct prim_header *header)
aaline->driver_bind_sampler_states(pipe, PIPE_SHADER_FRAGMENT, 0, aaline->driver_bind_sampler_states(pipe, PIPE_SHADER_FRAGMENT, 0,
num_samplers, aaline->state.sampler); num_samplers, aaline->state.sampler);
aaline->driver_set_sampler_views(pipe, num_samplers, aaline->state.sampler_views); aaline->driver_set_sampler_views(pipe, PIPE_SHADER_FRAGMENT, 0,
num_samplers, aaline->state.sampler_views);
/* Disable triangle culling, stippling, unfilled mode etc. */ /* Disable triangle culling, stippling, unfilled mode etc. */
r = draw_get_rasterizer_no_cull(draw, rast->scissor, rast->flatshade); r = draw_get_rasterizer_no_cull(draw, rast->scissor, rast->flatshade);
@ -740,8 +741,8 @@ aaline_flush(struct draw_stage *stage, unsigned flags)
aaline->num_samplers, aaline->num_samplers,
aaline->state.sampler); aaline->state.sampler);
aaline->driver_set_sampler_views(pipe, aaline->driver_set_sampler_views(pipe, PIPE_SHADER_FRAGMENT, 0,
aaline->num_sampler_views, aaline->num_samplers,
aaline->state.sampler_views); aaline->state.sampler_views);
/* restore original rasterizer state */ /* restore original rasterizer state */
@ -791,7 +792,7 @@ aaline_destroy(struct draw_stage *stage)
pipe->delete_fs_state = aaline->driver_delete_fs_state; pipe->delete_fs_state = aaline->driver_delete_fs_state;
pipe->bind_sampler_states = aaline->driver_bind_sampler_states; pipe->bind_sampler_states = aaline->driver_bind_sampler_states;
pipe->set_fragment_sampler_views = aaline->driver_set_sampler_views; pipe->set_sampler_views = aaline->driver_set_sampler_views;
FREE( stage ); FREE( stage );
} }
@ -932,8 +933,8 @@ aaline_bind_sampler_states(struct pipe_context *pipe, unsigned shader,
static void static void
aaline_set_sampler_views(struct pipe_context *pipe, aaline_set_sampler_views(struct pipe_context *pipe, unsigned shader,
unsigned num, unsigned start, unsigned num,
struct pipe_sampler_view **views) struct pipe_sampler_view **views)
{ {
struct aaline_stage *aaline = aaline_stage_from_pipe(pipe); struct aaline_stage *aaline = aaline_stage_from_pipe(pipe);
@ -943,17 +944,17 @@ aaline_set_sampler_views(struct pipe_context *pipe,
return; return;
} }
/* save current */ if (shader == PIPE_SHADER_FRAGMENT) {
for (i = 0; i < num; i++) { /* save current */
pipe_sampler_view_reference(&aaline->state.sampler_views[i], views[i]); for (i = 0; i < num; i++) {
pipe_sampler_view_reference(&aaline->state.sampler_views[start + i],
views[i]);
}
aaline->num_sampler_views = num;
} }
for ( ; i < PIPE_MAX_SHADER_SAMPLER_VIEWS; i++) {
pipe_sampler_view_reference(&aaline->state.sampler_views[i], NULL);
}
aaline->num_sampler_views = num;
/* pass-through */ /* pass-through */
aaline->driver_set_sampler_views(pipe, num, views); aaline->driver_set_sampler_views(pipe, shader, start, num, views);
} }
@ -1008,7 +1009,7 @@ draw_install_aaline_stage(struct draw_context *draw, struct pipe_context *pipe)
aaline->driver_delete_fs_state = pipe->delete_fs_state; aaline->driver_delete_fs_state = pipe->delete_fs_state;
aaline->driver_bind_sampler_states = pipe->bind_sampler_states; aaline->driver_bind_sampler_states = pipe->bind_sampler_states;
aaline->driver_set_sampler_views = pipe->set_fragment_sampler_views; aaline->driver_set_sampler_views = pipe->set_sampler_views;
/* override the driver's functions */ /* override the driver's functions */
pipe->create_fs_state = aaline_create_fs_state; pipe->create_fs_state = aaline_create_fs_state;
@ -1016,7 +1017,7 @@ draw_install_aaline_stage(struct draw_context *draw, struct pipe_context *pipe)
pipe->delete_fs_state = aaline_delete_fs_state; pipe->delete_fs_state = aaline_delete_fs_state;
pipe->bind_sampler_states = aaline_bind_sampler_states; pipe->bind_sampler_states = aaline_bind_sampler_states;
pipe->set_fragment_sampler_views = aaline_set_sampler_views; pipe->set_sampler_views = aaline_set_sampler_views;
/* Install once everything is known to be OK: /* Install once everything is known to be OK:
*/ */

View file

@ -103,7 +103,8 @@ struct pstip_stage
unsigned, unsigned, void **); unsigned, unsigned, void **);
void (*driver_set_sampler_views)(struct pipe_context *, void (*driver_set_sampler_views)(struct pipe_context *,
unsigned, unsigned shader, unsigned start,
unsigned count,
struct pipe_sampler_view **); struct pipe_sampler_view **);
void (*driver_set_polygon_stipple)(struct pipe_context *, void (*driver_set_polygon_stipple)(struct pipe_context *,
@ -552,7 +553,9 @@ pstip_first_tri(struct draw_stage *stage, struct prim_header *header)
pstip->driver_bind_sampler_states(pipe, PIPE_SHADER_FRAGMENT, 0, pstip->driver_bind_sampler_states(pipe, PIPE_SHADER_FRAGMENT, 0,
num_samplers, pstip->state.samplers); num_samplers, pstip->state.samplers);
pstip->driver_set_sampler_views(pipe, num_samplers, pstip->state.sampler_views); pstip->driver_set_sampler_views(pipe, PIPE_SHADER_FRAGMENT, 0,
num_samplers, pstip->state.sampler_views);
draw->suspend_flushing = FALSE; draw->suspend_flushing = FALSE;
/* now really draw first triangle */ /* now really draw first triangle */
@ -579,9 +582,10 @@ pstip_flush(struct draw_stage *stage, unsigned flags)
pstip->num_samplers, pstip->num_samplers,
pstip->state.samplers); pstip->state.samplers);
pstip->driver_set_sampler_views(pipe, pstip->driver_set_sampler_views(pipe, PIPE_SHADER_FRAGMENT, 0,
pstip->num_sampler_views, pstip->num_sampler_views,
pstip->state.sampler_views); pstip->state.sampler_views);
draw->suspend_flushing = FALSE; draw->suspend_flushing = FALSE;
} }
@ -732,24 +736,23 @@ pstip_bind_sampler_states(struct pipe_context *pipe, unsigned shader,
static void static void
pstip_set_sampler_views(struct pipe_context *pipe, pstip_set_sampler_views(struct pipe_context *pipe,
unsigned num, unsigned shader, unsigned start, unsigned num,
struct pipe_sampler_view **views) struct pipe_sampler_view **views)
{ {
struct pstip_stage *pstip = pstip_stage_from_pipe(pipe); struct pstip_stage *pstip = pstip_stage_from_pipe(pipe);
uint i; uint i;
/* save current */ if (shader == PIPE_SHADER_FRAGMENT) {
for (i = 0; i < num; i++) { /* save current */
pipe_sampler_view_reference(&pstip->state.sampler_views[i], views[i]); for (i = 0; i < num; i++) {
pipe_sampler_view_reference(&pstip->state.sampler_views[start + i],
views[i]);
}
pstip->num_sampler_views = num;
} }
for (; i < PIPE_MAX_SHADER_SAMPLER_VIEWS; i++) {
pipe_sampler_view_reference(&pstip->state.sampler_views[i], NULL);
}
pstip->num_sampler_views = num;
/* pass-through */ /* pass-through */
pstip->driver_set_sampler_views(pstip->pipe, num, views); pstip->driver_set_sampler_views(pstip->pipe, shader, start, num, views);
} }
@ -804,7 +807,7 @@ draw_install_pstipple_stage(struct draw_context *draw,
pstip->driver_delete_fs_state = pipe->delete_fs_state; pstip->driver_delete_fs_state = pipe->delete_fs_state;
pstip->driver_bind_sampler_states = pipe->bind_sampler_states; pstip->driver_bind_sampler_states = pipe->bind_sampler_states;
pstip->driver_set_sampler_views = pipe->set_fragment_sampler_views; pstip->driver_set_sampler_views = pipe->set_sampler_views;
pstip->driver_set_polygon_stipple = pipe->set_polygon_stipple; pstip->driver_set_polygon_stipple = pipe->set_polygon_stipple;
/* override the driver's functions */ /* override the driver's functions */
@ -813,7 +816,7 @@ draw_install_pstipple_stage(struct draw_context *draw,
pipe->delete_fs_state = pstip_delete_fs_state; pipe->delete_fs_state = pstip_delete_fs_state;
pipe->bind_sampler_states = pstip_bind_sampler_states; pipe->bind_sampler_states = pstip_bind_sampler_states;
pipe->set_fragment_sampler_views = pstip_set_sampler_views; pipe->set_sampler_views = pstip_set_sampler_views;
pipe->set_polygon_stipple = pstip_set_polygon_stipple; pipe->set_polygon_stipple = pstip_set_polygon_stipple;
return TRUE; return TRUE;

View file

@ -535,9 +535,9 @@ static void blitter_restore_textures(struct blitter_context_priv *ctx)
ctx->base.saved_num_sampler_states = ~0; ctx->base.saved_num_sampler_states = ~0;
/* Fragment sampler views. */ /* Fragment sampler views. */
pipe->set_fragment_sampler_views(pipe, pipe->set_sampler_views(pipe, PIPE_SHADER_FRAGMENT, 0,
ctx->base.saved_num_sampler_views, ctx->base.saved_num_sampler_views,
ctx->base.saved_sampler_views); ctx->base.saved_sampler_views);
for (i = 0; i < ctx->base.saved_num_sampler_views; i++) for (i = 0; i < ctx->base.saved_num_sampler_views; i++)
pipe_sampler_view_reference(&ctx->base.saved_sampler_views[i], NULL); pipe_sampler_view_reference(&ctx->base.saved_sampler_views[i], NULL);
@ -1309,7 +1309,7 @@ void util_blitter_blit_generic(struct blitter_context *blitter,
views[0] = src; views[0] = src;
views[1] = pipe->create_sampler_view(pipe, src->texture, &templ); views[1] = pipe->create_sampler_view(pipe, src->texture, &templ);
pipe->set_fragment_sampler_views(pipe, 2, views); pipe->set_sampler_views(pipe, PIPE_SHADER_FRAGMENT, 0, 2, views);
pipe->bind_sampler_states(pipe, PIPE_SHADER_FRAGMENT, 0, 2, samplers); pipe->bind_sampler_states(pipe, PIPE_SHADER_FRAGMENT, 0, 2, samplers);
pipe_sampler_view_reference(&views[1], NULL); pipe_sampler_view_reference(&views[1], NULL);
@ -1324,13 +1324,13 @@ void util_blitter_blit_generic(struct blitter_context *blitter,
view = pipe->create_sampler_view(pipe, src->texture, &templ); view = pipe->create_sampler_view(pipe, src->texture, &templ);
pipe->set_fragment_sampler_views(pipe, 1, &view); pipe->set_sampler_views(pipe, PIPE_SHADER_FRAGMENT, 0, 1, &view);
pipe->bind_sampler_states(pipe, PIPE_SHADER_FRAGMENT, pipe->bind_sampler_states(pipe, PIPE_SHADER_FRAGMENT,
0, 1, &sampler_state); 0, 1, &sampler_state);
pipe_sampler_view_reference(&view, NULL); pipe_sampler_view_reference(&view, NULL);
} else { } else {
pipe->set_fragment_sampler_views(pipe, 1, &src); pipe->set_sampler_views(pipe, PIPE_SHADER_FRAGMENT, 0, 1, &src);
pipe->bind_sampler_states(pipe, PIPE_SHADER_FRAGMENT, pipe->bind_sampler_states(pipe, PIPE_SHADER_FRAGMENT,
0, 1, &sampler_state); 0, 1, &sampler_state);
} }

View file

@ -727,7 +727,9 @@ draw_layers(struct vl_compositor *c, struct vl_compositor_state *s, struct u_rec
c->pipe->bind_fs_state(c->pipe, layer->fs); c->pipe->bind_fs_state(c->pipe, layer->fs);
c->pipe->bind_sampler_states(c->pipe, PIPE_SHADER_FRAGMENT, 0, c->pipe->bind_sampler_states(c->pipe, PIPE_SHADER_FRAGMENT, 0,
num_sampler_views, layer->samplers); num_sampler_views, layer->samplers);
c->pipe->set_fragment_sampler_views(c->pipe, num_sampler_views, samplers); c->pipe->set_sampler_views(c->pipe, PIPE_SHADER_FRAGMENT, 0,
num_sampler_views, samplers);
util_draw_arrays(c->pipe, PIPE_PRIM_QUADS, vb_index * 4, 4); util_draw_arrays(c->pipe, PIPE_PRIM_QUADS, vb_index * 4, 4);
vb_index++; vb_index++;

View file

@ -829,7 +829,8 @@ vl_idct_flush(struct vl_idct *idct, struct vl_idct_buffer *buffer, unsigned num_
idct->pipe->bind_sampler_states(idct->pipe, PIPE_SHADER_FRAGMENT, idct->pipe->bind_sampler_states(idct->pipe, PIPE_SHADER_FRAGMENT,
0, 2, idct->samplers); 0, 2, idct->samplers);
idct->pipe->set_fragment_sampler_views(idct->pipe, 2, buffer->sampler_views.stage[0]); idct->pipe->set_sampler_views(idct->pipe, PIPE_SHADER_FRAGMENT, 0, 2,
buffer->sampler_views.stage[0]);
/* mismatch control */ /* mismatch control */
idct->pipe->set_framebuffer_state(idct->pipe, &buffer->fb_state_mismatch); idct->pipe->set_framebuffer_state(idct->pipe, &buffer->fb_state_mismatch);
@ -855,6 +856,7 @@ vl_idct_prepare_stage2(struct vl_idct *idct, struct vl_idct_buffer *buffer)
idct->pipe->bind_rasterizer_state(idct->pipe, idct->rs_state); idct->pipe->bind_rasterizer_state(idct->pipe, idct->rs_state);
idct->pipe->bind_sampler_states(idct->pipe, PIPE_SHADER_FRAGMENT, idct->pipe->bind_sampler_states(idct->pipe, PIPE_SHADER_FRAGMENT,
0, 2, idct->samplers); 0, 2, idct->samplers);
idct->pipe->set_fragment_sampler_views(idct->pipe, 2, buffer->sampler_views.stage[1]); idct->pipe->set_sampler_views(idct->pipe, PIPE_SHADER_FRAGMENT,
0, 2, buffer->sampler_views.stage[1]);
} }

View file

@ -308,7 +308,8 @@ vl_matrix_filter_render(struct vl_matrix_filter *filter,
filter->pipe->bind_blend_state(filter->pipe, filter->blend); filter->pipe->bind_blend_state(filter->pipe, filter->blend);
filter->pipe->bind_sampler_states(filter->pipe, PIPE_SHADER_FRAGMENT, filter->pipe->bind_sampler_states(filter->pipe, PIPE_SHADER_FRAGMENT,
0, 1, &filter->sampler); 0, 1, &filter->sampler);
filter->pipe->set_fragment_sampler_views(filter->pipe, 1, &src); filter->pipe->set_sampler_views(filter->pipe, PIPE_SHADER_FRAGMENT,
0, 1, &src);
filter->pipe->bind_vs_state(filter->pipe, filter->vs); filter->pipe->bind_vs_state(filter->pipe, filter->vs);
filter->pipe->bind_fs_state(filter->pipe, filter->fs); filter->pipe->bind_fs_state(filter->pipe, filter->fs);
filter->pipe->set_framebuffer_state(filter->pipe, &fb_state); filter->pipe->set_framebuffer_state(filter->pipe, &fb_state);

View file

@ -613,7 +613,8 @@ vl_mc_render_ref(struct vl_mc *renderer, struct vl_mc_buffer *buffer, struct pip
renderer->pipe->bind_vs_state(renderer->pipe, renderer->vs_ref); renderer->pipe->bind_vs_state(renderer->pipe, renderer->vs_ref);
renderer->pipe->bind_fs_state(renderer->pipe, renderer->fs_ref); renderer->pipe->bind_fs_state(renderer->pipe, renderer->fs_ref);
renderer->pipe->set_fragment_sampler_views(renderer->pipe, 1, &ref); renderer->pipe->set_sampler_views(renderer->pipe, PIPE_SHADER_FRAGMENT,
0, 1, &ref);
renderer->pipe->bind_sampler_states(renderer->pipe, PIPE_SHADER_FRAGMENT, renderer->pipe->bind_sampler_states(renderer->pipe, PIPE_SHADER_FRAGMENT,
0, 1, &renderer->sampler_ref); 0, 1, &renderer->sampler_ref);

View file

@ -387,7 +387,8 @@ vl_median_filter_render(struct vl_median_filter *filter,
filter->pipe->bind_blend_state(filter->pipe, filter->blend); filter->pipe->bind_blend_state(filter->pipe, filter->blend);
filter->pipe->bind_sampler_states(filter->pipe, PIPE_SHADER_FRAGMENT, filter->pipe->bind_sampler_states(filter->pipe, PIPE_SHADER_FRAGMENT,
0, 1, &filter->sampler); 0, 1, &filter->sampler);
filter->pipe->set_fragment_sampler_views(filter->pipe, 1, &src); filter->pipe->set_sampler_views(filter->pipe, PIPE_SHADER_FRAGMENT,
0, 1, &src);
filter->pipe->bind_vs_state(filter->pipe, filter->vs); filter->pipe->bind_vs_state(filter->pipe, filter->vs);
filter->pipe->bind_fs_state(filter->pipe, filter->fs); filter->pipe->bind_fs_state(filter->pipe, filter->fs);
filter->pipe->set_framebuffer_state(filter->pipe, &fb_state); filter->pipe->set_framebuffer_state(filter->pipe, &fb_state);

View file

@ -746,7 +746,9 @@ vl_mpeg12_end_frame(struct pipe_video_codec *decoder,
if (dec->base.entrypoint <= PIPE_VIDEO_ENTRYPOINT_IDCT) if (dec->base.entrypoint <= PIPE_VIDEO_ENTRYPOINT_IDCT)
vl_idct_prepare_stage2(i ? &dec->idct_c : &dec->idct_y, &buf->idct[plane]); vl_idct_prepare_stage2(i ? &dec->idct_c : &dec->idct_y, &buf->idct[plane]);
else { else {
dec->base.context->set_fragment_sampler_views(dec->base.context, 1, &mc_source_sv[plane]); dec->base.context->set_sampler_views(dec->base.context,
PIPE_SHADER_FRAGMENT, 0, 1,
&mc_source_sv[plane]);
dec->base.context->bind_sampler_states(dec->base.context, dec->base.context->bind_sampler_states(dec->base.context,
PIPE_SHADER_FRAGMENT, PIPE_SHADER_FRAGMENT,
0, 1, &dec->sampler_ycbcr); 0, 1, &dec->sampler_ycbcr);

View file

@ -578,7 +578,8 @@ vl_zscan_render(struct vl_zscan *zscan, struct vl_zscan_buffer *buffer, unsigned
0, 3, zscan->samplers); 0, 3, zscan->samplers);
zscan->pipe->set_framebuffer_state(zscan->pipe, &buffer->fb_state); zscan->pipe->set_framebuffer_state(zscan->pipe, &buffer->fb_state);
zscan->pipe->set_viewport_states(zscan->pipe, 0, 1, &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->set_sampler_views(zscan->pipe, PIPE_SHADER_FRAGMENT,
0, 3, &buffer->src);
zscan->pipe->bind_vs_state(zscan->pipe, zscan->vs); zscan->pipe->bind_vs_state(zscan->pipe, zscan->vs);
zscan->pipe->bind_fs_state(zscan->pipe, zscan->fs); zscan->pipe->bind_fs_state(zscan->pipe, zscan->fs);
util_draw_arrays_instanced(zscan->pipe, PIPE_PRIM_QUADS, 0, 4, 0, num_instances); util_draw_arrays_instanced(zscan->pipe, PIPE_PRIM_QUADS, 0, 4, 0, num_instances);

View file

@ -343,7 +343,7 @@ PsSetShader -> bind_fs_state
PsSetShaderWithIfaces (D3D11 only) PsSetShaderWithIfaces (D3D11 only)
- Gallium does not support shader interfaces - Gallium does not support shader interfaces
PsSetShaderResources -> set_fragment_sampler_views PsSetShaderResources -> set_sampler_views
* may want to allow binding subsets instead of all at once * may want to allow binding subsets instead of all at once
QueryBegin -> begin_query QueryBegin -> begin_query
@ -458,5 +458,5 @@ VsSetShader -> bind_vs_state
VsSetShaderWithIfaces (D3D11 only) VsSetShaderWithIfaces (D3D11 only)
- Gallium does not support shader interfaces - Gallium does not support shader interfaces
VsSetShaderResources -> set_fragment_sampler_views VsSetShaderResources -> set_sampler_views
* may want to allow binding subsets instead of all at once * may want to allow binding subsets instead of all at once

View file

@ -104,16 +104,10 @@ The ``first_layer`` and ``last_layer`` fields specify the layer range the
texture is going to be constrained to. Similar to the LOD range, this is added texture is going to be constrained to. Similar to the LOD range, this is added
to the array index which is used for sampling. to the array index which is used for sampling.
* ``set_fragment_sampler_views`` binds an array of sampler views to * ``set_sampler_views`` binds an array of sampler views to a shader stage.
fragment shader stage. Every binding point acquires a reference Every binding point acquires a reference
to a respective sampler view and releases a reference to the previous to a respective sampler view and releases a reference to the previous
sampler view. If M is the maximum number of sampler units and N units sampler view.
is passed to set_fragment_sampler_views, the driver should unbind the
sampler views for units N..M-1.
* ``set_vertex_sampler_views`` binds an array of sampler views to vertex
shader stage. Every binding point acquires a reference to a respective
sampler view and releases a reference to the previous sampler view.
* ``create_sampler_view`` creates a new sampler view. ``texture`` is associated * ``create_sampler_view`` creates a new sampler view. ``texture`` is associated
with the sampler view which results in sampler view holding a reference with the sampler view which results in sampler view holding a reference
@ -601,5 +595,5 @@ method.
In addition, normal texture sampling is allowed from the compute In addition, normal texture sampling is allowed from the compute
program: ``bind_sampler_states`` may be used to set up texture program: ``bind_sampler_states`` may be used to set up texture
samplers for the compute stage and ``set_compute_sampler_views`` may samplers for the compute stage and ``set_sampler_views`` may
be used to bind a number of sampler views to it. be used to bind a number of sampler views to it.

View file

@ -144,6 +144,24 @@ fd_verttex_set_sampler_views(struct pipe_context *pctx, unsigned nr,
ctx->dirty |= FD_DIRTY_VERTTEX; ctx->dirty |= FD_DIRTY_VERTTEX;
} }
static void
fd_set_sampler_views(struct pipe_context *pctx, unsigned shader,
unsigne start, unsigned nr,
struct pipe_sampler_view **views)
{
assert(start == 0);
switch (shader) {
case PIPE_SHADER_FRAGMENT:
fd_fragtex_set_sampler_views(pctx, nr, views);
break;
case PIPE_SHADER_VERTEX:
fd_verttex_set_sampler_views(pctx, nr, views);
break;
default:
;
}
}
void void
fd_texture_init(struct pipe_context *pctx) fd_texture_init(struct pipe_context *pctx)
{ {
@ -152,7 +170,5 @@ fd_texture_init(struct pipe_context *pctx)
pctx->sampler_view_destroy = fd_sampler_view_destroy; pctx->sampler_view_destroy = fd_sampler_view_destroy;
pctx->bind_sampler_states = fd_sampler_states_bind; pctx->bind_sampler_states = fd_sampler_states_bind;
pctx->set_fragment_sampler_views = fd_fragtex_set_sampler_views; pctx->set_sampler_views = fd_set_sampler_views;
pctx->set_vertex_sampler_views = fd_verttex_set_sampler_views;
} }

View file

@ -519,58 +519,12 @@ galahad_context_set_sampler_views(struct pipe_context *_pipe,
struct galahad_context *glhd_pipe = galahad_context(_pipe); struct galahad_context *glhd_pipe = galahad_context(_pipe);
struct pipe_context *pipe = glhd_pipe->pipe; struct pipe_context *pipe = glhd_pipe->pipe;
struct pipe_sampler_view *unwrapped_views[PIPE_MAX_SAMPLERS]; struct pipe_sampler_view *unwrapped_views[PIPE_MAX_SAMPLERS];
struct pipe_sampler_view **views = NULL;
unsigned i; unsigned i;
if (_views) { for (i = 0; i < num; i++)
for (i = 0; i < num; i++) unwrapped_views[i] = galahad_sampler_view_unwrap(_views[i]);
unwrapped_views[i] = galahad_sampler_view_unwrap(_views[i]);
for (; i < PIPE_MAX_SAMPLERS; i++)
unwrapped_views[i] = NULL;
views = unwrapped_views; pipe->set_sampler_views(pipe, shader, start, num, unwrapped_views);
}
switch (shader) {
case PIPE_SHADER_VERTEX:
pipe->set_vertex_sampler_views(pipe, num, views);
break;
case PIPE_SHADER_FRAGMENT:
pipe->set_fragment_sampler_views(pipe, num, views);
break;
case PIPE_SHADER_GEOMETRY:
pipe->set_geometry_sampler_views(pipe, num, views);
break;
default:
assert(0);
}
}
static void
galahad_context_set_vertex_sampler_views(struct pipe_context *_pipe,
unsigned num,
struct pipe_sampler_view **_views)
{
galahad_context_set_sampler_views(_pipe, PIPE_SHADER_VERTEX,
0, num, _views);
}
static void
galahad_context_set_fragment_sampler_views(struct pipe_context *_pipe,
unsigned num,
struct pipe_sampler_view **_views)
{
galahad_context_set_sampler_views(_pipe, PIPE_SHADER_FRAGMENT,
0, num, _views);
}
static void
galahad_context_set_geometry_sampler_views(struct pipe_context *_pipe,
unsigned num,
struct pipe_sampler_view **_views)
{
galahad_context_set_sampler_views(_pipe, PIPE_SHADER_GEOMETRY,
0, num, _views);
} }
static void static void
@ -1053,10 +1007,7 @@ galahad_context_create(struct pipe_screen *_screen, struct pipe_context *pipe)
GLHD_PIPE_INIT(set_polygon_stipple); GLHD_PIPE_INIT(set_polygon_stipple);
GLHD_PIPE_INIT(set_scissor_states); GLHD_PIPE_INIT(set_scissor_states);
GLHD_PIPE_INIT(set_viewport_states); GLHD_PIPE_INIT(set_viewport_states);
GLHD_PIPE_INIT(set_fragment_sampler_views); GLHD_PIPE_INIT(set_sampler_views);
GLHD_PIPE_INIT(set_vertex_sampler_views);
GLHD_PIPE_INIT(set_geometry_sampler_views);
//GLHD_PIPE_INIT(set_compute_sampler_views);
//GLHD_PIPE_INIT(set_shader_resources); //GLHD_PIPE_INIT(set_shader_resources);
GLHD_PIPE_INIT(set_vertex_buffers); GLHD_PIPE_INIT(set_vertex_buffers);
GLHD_PIPE_INIT(set_index_buffer); GLHD_PIPE_INIT(set_index_buffer);

View file

@ -793,6 +793,25 @@ i915_set_vertex_sampler_views(struct pipe_context *pipe,
} }
static void
i915_set_sampler_views(struct pipe_context *pipe, unsigned shader,
unsigned start, unsigned num,
struct pipe_sampler_view **views)
{
assert(start == 0);
switch (shader) {
case PIPE_SHADER_FRAGMENT:
i915_set_fragment_sampler_views(pipe, num, views);
break;
case PIPE_SHADER_VERTEX:
i915_set_vertex_sampler_views(pipe, num, views);
break;
default:
;
}
}
static struct pipe_sampler_view * static struct pipe_sampler_view *
i915_create_sampler_view(struct pipe_context *pipe, i915_create_sampler_view(struct pipe_context *pipe,
struct pipe_resource *texture, struct pipe_resource *texture,
@ -1076,8 +1095,7 @@ i915_init_state_functions( struct i915_context *i915 )
i915->base.set_polygon_stipple = i915_set_polygon_stipple; i915->base.set_polygon_stipple = i915_set_polygon_stipple;
i915->base.set_scissor_states = i915_set_scissor_states; i915->base.set_scissor_states = i915_set_scissor_states;
i915->base.set_fragment_sampler_views = i915_set_fragment_sampler_views; i915->base.set_sampler_views = i915_set_sampler_views;
i915->base.set_vertex_sampler_views = i915_set_vertex_sampler_views;
i915->base.create_sampler_view = i915_create_sampler_view; i915->base.create_sampler_view = i915_create_sampler_view;
i915->base.sampler_view_destroy = i915_sampler_view_destroy; i915->base.sampler_view_destroy = i915_sampler_view_destroy;
i915->base.set_viewport_states = i915_set_viewport_states; i915->base.set_viewport_states = i915_set_viewport_states;

View file

@ -486,50 +486,12 @@ identity_set_sampler_views(struct pipe_context *_pipe,
struct identity_context *id_pipe = identity_context(_pipe); struct identity_context *id_pipe = identity_context(_pipe);
struct pipe_context *pipe = id_pipe->pipe; struct pipe_context *pipe = id_pipe->pipe;
struct pipe_sampler_view *unwrapped_views[PIPE_MAX_SAMPLERS]; struct pipe_sampler_view *unwrapped_views[PIPE_MAX_SAMPLERS];
struct pipe_sampler_view **views = NULL;
unsigned i; unsigned i;
/* remove this when we have pipe->set_sampler_views(..., start, ...) */ for (i = 0; i < num; i++)
assert(start == 0); unwrapped_views[i] = identity_sampler_view_unwrap(_views[i]);
if (_views) { pipe->set_sampler_views(pipe, shader, start, num, unwrapped_views);
for (i = 0; i < num; i++)
unwrapped_views[i] = identity_sampler_view_unwrap(_views[i]);
for (; i < PIPE_MAX_SAMPLERS; i++)
unwrapped_views[i] = NULL;
views = unwrapped_views;
}
switch (shader) {
case PIPE_SHADER_VERTEX:
pipe->set_vertex_sampler_views(pipe, num, views);
break;
case PIPE_SHADER_GEOMETRY:
pipe->set_geometry_sampler_views(pipe, num, views);
break;
case PIPE_SHADER_FRAGMENT:
pipe->set_fragment_sampler_views(pipe, num, views);
break;
default:
debug_error("Unexpected shader in identity_set_sampler_views()");
}
}
static void
identity_set_fragment_sampler_views(struct pipe_context *_pipe,
unsigned num,
struct pipe_sampler_view **_views)
{
identity_set_sampler_views(_pipe, PIPE_SHADER_FRAGMENT, 0, num, _views);
}
static void
identity_set_vertex_sampler_views(struct pipe_context *_pipe,
unsigned num,
struct pipe_sampler_view **_views)
{
identity_set_sampler_views(_pipe, PIPE_SHADER_VERTEX, 0, num, _views);
} }
static void static void
@ -894,8 +856,7 @@ identity_context_create(struct pipe_screen *_screen, struct pipe_context *pipe)
id_pipe->base.set_polygon_stipple = identity_set_polygon_stipple; id_pipe->base.set_polygon_stipple = identity_set_polygon_stipple;
id_pipe->base.set_scissor_states = identity_set_scissor_states; id_pipe->base.set_scissor_states = identity_set_scissor_states;
id_pipe->base.set_viewport_states = identity_set_viewport_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_sampler_views = identity_set_sampler_views;
id_pipe->base.set_vertex_sampler_views = identity_set_vertex_sampler_views;
id_pipe->base.set_vertex_buffers = identity_set_vertex_buffers; id_pipe->base.set_vertex_buffers = identity_set_vertex_buffers;
id_pipe->base.set_index_buffer = identity_set_index_buffer; id_pipe->base.set_index_buffer = identity_set_index_buffer;
id_pipe->base.resource_copy_region = identity_resource_copy_region; id_pipe->base.resource_copy_region = identity_resource_copy_region;

View file

@ -892,6 +892,28 @@ ilo_set_compute_sampler_views(struct pipe_context *pipe,
ilo->dirty |= ILO_DIRTY_VIEW_CS; ilo->dirty |= ILO_DIRTY_VIEW_CS;
} }
static void
ilo_set_sampler_views2(struct pipe_context *pipe, unsigned shader,
unsigned start_slot, unsigned num_views,
struct pipe_sampler_view **views)
{
switch (shader) {
case PIPE_SHADER_VERTEX:
ilo_set_vertex_sampler_views(pipe, num_views, views);
break;
case PIPE_SHADER_GEOMETRY:
ilo_set_geometry_sampler_views(pipe, num_views, views);
break;
case PIPE_SHADER_FRAGMENT:
ilo_set_fragment_sampler_views(pipe, num_views, views);
break;
case PIPE_SHADER_COMPUTE:
ilo_set_compute_sampler_views(pipe, start_slot, num_views, views);
break;
}
}
static void static void
ilo_set_shader_resources(struct pipe_context *pipe, ilo_set_shader_resources(struct pipe_context *pipe,
unsigned start, unsigned count, unsigned start, unsigned count,
@ -1289,10 +1311,7 @@ ilo_init_state_functions(struct ilo_context *ilo)
ilo->base.set_polygon_stipple = ilo_set_polygon_stipple; ilo->base.set_polygon_stipple = ilo_set_polygon_stipple;
ilo->base.set_scissor_states = ilo_set_scissor_states; ilo->base.set_scissor_states = ilo_set_scissor_states;
ilo->base.set_viewport_states = ilo_set_viewport_states; ilo->base.set_viewport_states = ilo_set_viewport_states;
ilo->base.set_fragment_sampler_views = ilo_set_fragment_sampler_views; ilo->base.set_sampler_views = ilo_set_sampler_views2;
ilo->base.set_vertex_sampler_views = ilo_set_vertex_sampler_views;
ilo->base.set_geometry_sampler_views = ilo_set_geometry_sampler_views;
ilo->base.set_compute_sampler_views = ilo_set_compute_sampler_views;
ilo->base.set_shader_resources = ilo_set_shader_resources; ilo->base.set_shader_resources = ilo_set_shader_resources;
ilo->base.set_vertex_buffers = ilo_set_vertex_buffers; ilo->base.set_vertex_buffers = ilo_set_vertex_buffers;
ilo->base.set_index_buffer = ilo_set_index_buffer; ilo->base.set_index_buffer = ilo_set_index_buffer;

View file

@ -159,32 +159,6 @@ llvmpipe_set_sampler_views(struct pipe_context *pipe,
} }
static void
llvmpipe_set_fragment_sampler_views(struct pipe_context *pipe,
unsigned num,
struct pipe_sampler_view **views)
{
llvmpipe_set_sampler_views(pipe, PIPE_SHADER_FRAGMENT, 0, num, views);
}
static void
llvmpipe_set_vertex_sampler_views(struct pipe_context *pipe,
unsigned num,
struct pipe_sampler_view **views)
{
llvmpipe_set_sampler_views(pipe, PIPE_SHADER_VERTEX, 0, num, views);
}
static void
llvmpipe_set_geometry_sampler_views(struct pipe_context *pipe,
unsigned num,
struct pipe_sampler_view **views)
{
llvmpipe_set_sampler_views(pipe, PIPE_SHADER_GEOMETRY, 0, num, views);
}
static struct pipe_sampler_view * static struct pipe_sampler_view *
llvmpipe_create_sampler_view(struct pipe_context *pipe, llvmpipe_create_sampler_view(struct pipe_context *pipe,
struct pipe_resource *texture, struct pipe_resource *texture,
@ -395,10 +369,8 @@ llvmpipe_init_sampler_funcs(struct llvmpipe_context *llvmpipe)
llvmpipe->pipe.create_sampler_state = llvmpipe_create_sampler_state; llvmpipe->pipe.create_sampler_state = llvmpipe_create_sampler_state;
llvmpipe->pipe.bind_sampler_states = llvmpipe_bind_sampler_states; llvmpipe->pipe.bind_sampler_states = llvmpipe_bind_sampler_states;
llvmpipe->pipe.set_fragment_sampler_views = llvmpipe_set_fragment_sampler_views;
llvmpipe->pipe.set_vertex_sampler_views = llvmpipe_set_vertex_sampler_views;
llvmpipe->pipe.set_geometry_sampler_views = llvmpipe_set_geometry_sampler_views;
llvmpipe->pipe.create_sampler_view = llvmpipe_create_sampler_view; llvmpipe->pipe.create_sampler_view = llvmpipe_create_sampler_view;
llvmpipe->pipe.set_sampler_views = llvmpipe_set_sampler_views;
llvmpipe->pipe.sampler_view_destroy = llvmpipe_sampler_view_destroy; llvmpipe->pipe.sampler_view_destroy = llvmpipe_sampler_view_destroy;
llvmpipe->pipe.delete_sampler_state = llvmpipe_delete_sampler_state; llvmpipe->pipe.delete_sampler_state = llvmpipe_delete_sampler_state;
} }

View file

@ -124,13 +124,9 @@ static struct pipe_surface *noop_create_surface(struct pipe_context *ctx,
return surface; return surface;
} }
static void noop_set_vs_sampler_view(struct pipe_context *ctx, unsigned count, static void noop_set_sampler_views(struct pipe_context *ctx, unsigned shader,
struct pipe_sampler_view **views) unsigned start, unsigned count,
{ struct pipe_sampler_view **views)
}
static void noop_set_ps_sampler_view(struct pipe_context *ctx, unsigned count,
struct pipe_sampler_view **views)
{ {
} }
@ -312,7 +308,7 @@ void noop_init_state_functions(struct pipe_context *ctx)
ctx->set_blend_color = noop_set_blend_color; ctx->set_blend_color = noop_set_blend_color;
ctx->set_clip_state = noop_set_clip_state; ctx->set_clip_state = noop_set_clip_state;
ctx->set_constant_buffer = noop_set_constant_buffer; ctx->set_constant_buffer = noop_set_constant_buffer;
ctx->set_fragment_sampler_views = noop_set_ps_sampler_view; ctx->set_sampler_views = noop_set_sampler_views;
ctx->set_framebuffer_state = noop_set_framebuffer_state; ctx->set_framebuffer_state = noop_set_framebuffer_state;
ctx->set_polygon_stipple = noop_set_polygon_stipple; ctx->set_polygon_stipple = noop_set_polygon_stipple;
ctx->set_sample_mask = noop_set_sample_mask; ctx->set_sample_mask = noop_set_sample_mask;
@ -320,7 +316,6 @@ void noop_init_state_functions(struct pipe_context *ctx)
ctx->set_stencil_ref = noop_set_stencil_ref; ctx->set_stencil_ref = noop_set_stencil_ref;
ctx->set_vertex_buffers = noop_set_vertex_buffers; ctx->set_vertex_buffers = noop_set_vertex_buffers;
ctx->set_index_buffer = noop_set_index_buffer; ctx->set_index_buffer = noop_set_index_buffer;
ctx->set_vertex_sampler_views = noop_set_vs_sampler_view;
ctx->set_viewport_states = noop_set_viewport_states; ctx->set_viewport_states = noop_set_viewport_states;
ctx->sampler_view_destroy = noop_sampler_view_destroy; ctx->sampler_view_destroy = noop_sampler_view_destroy;
ctx->surface_destroy = noop_surface_destroy; ctx->surface_destroy = noop_surface_destroy;

View file

@ -194,6 +194,14 @@ void
nv40_verttex_sampler_states_bind(struct pipe_context *pipe, nv40_verttex_sampler_states_bind(struct pipe_context *pipe,
unsigned nr, void **hwcso); unsigned nr, void **hwcso);
void
nv40_verttex_set_sampler_views(struct pipe_context *pipe, unsigned nr,
struct pipe_sampler_view **views);
void
nv30_fragtex_set_sampler_views(struct pipe_context *pipe,
unsigned nr, struct pipe_sampler_view **views);
void void
nv30_push_vbo(struct nv30_context *nv30, const struct pipe_draw_info *info); nv30_push_vbo(struct nv30_context *nv30, const struct pipe_draw_info *info);

View file

@ -171,7 +171,7 @@ nv30_fragtex_sampler_states_bind(struct pipe_context *pipe,
} }
static void void
nv30_fragtex_set_sampler_views(struct pipe_context *pipe, unsigned nr, nv30_fragtex_set_sampler_views(struct pipe_context *pipe, unsigned nr,
struct pipe_sampler_view **views) struct pipe_sampler_view **views)
{ {
@ -194,8 +194,28 @@ nv30_fragtex_set_sampler_views(struct pipe_context *pipe, unsigned nr,
nv30->dirty |= NV30_NEW_FRAGTEX; nv30->dirty |= NV30_NEW_FRAGTEX;
} }
static void
nv30_set_sampler_views(struct pipe_context *pipe, unsigned shader,
unsigned start, unsigned nr,
struct pipe_sampler_view **views)
{
assert(start == 0);
switch (shader) {
case PIPE_SHADER_FRAGMENT:
nv30_fragtex_set_sampler_views(pipe, nr, views);
break;
case PIPE_SHADER_VERTEX:
nv40_verttex_set_sampler_views(pipe, nr, views);
break;
default:
;
}
}
void void
nv30_fragtex_init(struct pipe_context *pipe) nv30_fragtex_init(struct pipe_context *pipe)
{ {
pipe->set_fragment_sampler_views = nv30_fragtex_set_sampler_views; pipe->set_sampler_views = nv30_set_sampler_views;
} }

View file

@ -69,7 +69,7 @@ nv40_verttex_sampler_states_bind(struct pipe_context *pipe,
} }
static void void
nv40_verttex_set_sampler_views(struct pipe_context *pipe, unsigned nr, nv40_verttex_set_sampler_views(struct pipe_context *pipe, unsigned nr,
struct pipe_sampler_view **views) struct pipe_sampler_view **views)
{ {
@ -95,5 +95,5 @@ nv40_verttex_set_sampler_views(struct pipe_context *pipe, unsigned nr,
void void
nv40_verttex_init(struct pipe_context *pipe) nv40_verttex_init(struct pipe_context *pipe)
{ {
pipe->set_vertex_sampler_views = nv40_verttex_set_sampler_views; /* nothing */
} }

View file

@ -671,28 +671,27 @@ nv50_stage_set_sampler_views(struct nv50_context *nv50, int s,
} }
static void static void
nv50_vp_set_sampler_views(struct pipe_context *pipe, nv50_set_sampler_views(struct pipe_context *pipe, unsigned shader,
unsigned nr, unsigned start, unsigned nr,
struct pipe_sampler_view **views) struct pipe_sampler_view **views)
{ {
nv50_stage_set_sampler_views(nv50_context(pipe), 0, nr, views); assert(start == 0);
switch (shader) {
case PIPE_SHADER_VERTEX:
nv50_stage_set_sampler_views(nv50_context(pipe), 0, nr, views);
break;
case PIPE_SHADER_GEOMETRY:
nv50_stage_set_sampler_views(nv50_context(pipe), 1, nr, views);
break;
case PIPE_SHADER_FRAGMENT:
nv50_stage_set_sampler_views(nv50_context(pipe), 2, nr, views);
break;
default:
;
}
} }
static void
nv50_fp_set_sampler_views(struct pipe_context *pipe,
unsigned nr,
struct pipe_sampler_view **views)
{
nv50_stage_set_sampler_views(nv50_context(pipe), 2, nr, views);
}
static void
nv50_gp_set_sampler_views(struct pipe_context *pipe,
unsigned nr,
struct pipe_sampler_view **views)
{
nv50_stage_set_sampler_views(nv50_context(pipe), 1, nr, views);
}
/* ============================= SHADERS ======================================= /* ============================= SHADERS =======================================
*/ */
@ -1092,9 +1091,7 @@ nv50_init_state_functions(struct nv50_context *nv50)
pipe->create_sampler_view = nv50_create_sampler_view; pipe->create_sampler_view = nv50_create_sampler_view;
pipe->sampler_view_destroy = nv50_sampler_view_destroy; pipe->sampler_view_destroy = nv50_sampler_view_destroy;
pipe->set_vertex_sampler_views = nv50_vp_set_sampler_views; pipe->set_sampler_views = nv50_set_sampler_views;
pipe->set_fragment_sampler_views = nv50_fp_set_sampler_views;
pipe->set_geometry_sampler_views = nv50_gp_set_sampler_views;
pipe->create_vs_state = nv50_vp_state_create; pipe->create_vs_state = nv50_vp_state_create;
pipe->create_fs_state = nv50_fp_state_create; pipe->create_fs_state = nv50_fp_state_create;

View file

@ -587,30 +587,6 @@ nvc0_stage_set_sampler_views(struct nvc0_context *nvc0, int s,
nvc0->dirty |= NVC0_NEW_TEXTURES; nvc0->dirty |= NVC0_NEW_TEXTURES;
} }
static void
nvc0_vp_set_sampler_views(struct pipe_context *pipe,
unsigned nr,
struct pipe_sampler_view **views)
{
nvc0_stage_set_sampler_views(nvc0_context(pipe), 0, nr, views);
}
static void
nvc0_fp_set_sampler_views(struct pipe_context *pipe,
unsigned nr,
struct pipe_sampler_view **views)
{
nvc0_stage_set_sampler_views(nvc0_context(pipe), 4, nr, views);
}
static void
nvc0_gp_set_sampler_views(struct pipe_context *pipe,
unsigned nr,
struct pipe_sampler_view **views)
{
nvc0_stage_set_sampler_views(nvc0_context(pipe), 3, nr, views);
}
static void static void
nvc0_stage_set_sampler_views_range(struct nvc0_context *nvc0, const unsigned s, nvc0_stage_set_sampler_views_range(struct nvc0_context *nvc0, const unsigned s,
unsigned start, unsigned nr, unsigned start, unsigned nr,
@ -662,13 +638,29 @@ nvc0_stage_set_sampler_views_range(struct nvc0_context *nvc0, const unsigned s,
} }
static void static void
nvc0_cp_set_sampler_views(struct pipe_context *pipe, nvc0_set_sampler_views(struct pipe_context *pipe, unsigned shader,
unsigned start, unsigned nr, unsigned start, unsigned nr,
struct pipe_sampler_view **views) struct pipe_sampler_view **views)
{ {
nvc0_stage_set_sampler_views_range(nvc0_context(pipe), 5, start, nr, views); assert(start == 0);
switch (shader) {
nvc0_context(pipe)->dirty_cp |= NVC0_NEW_CP_TEXTURES; case PIPE_SHADER_VERTEX:
nvc0_stage_set_sampler_views(nvc0_context(pipe), 0, nr, views);
break;
case PIPE_SHADER_GEOMETRY:
nvc0_stage_set_sampler_views(nvc0_context(pipe), 3, nr, views);
break;
case PIPE_SHADER_FRAGMENT:
nvc0_stage_set_sampler_views(nvc0_context(pipe), 4, nr, views);
break;
case PIPE_SHADER_COMPUTE:
nvc0_stage_set_sampler_views_range(nvc0_context(pipe), 5,
start, nr, views);
nvc0_context(pipe)->dirty_cp |= NVC0_NEW_CP_TEXTURES;
break;
default:
;
}
} }
@ -1197,10 +1189,7 @@ nvc0_init_state_functions(struct nvc0_context *nvc0)
pipe->create_sampler_view = nvc0_create_sampler_view; pipe->create_sampler_view = nvc0_create_sampler_view;
pipe->sampler_view_destroy = nvc0_sampler_view_destroy; pipe->sampler_view_destroy = nvc0_sampler_view_destroy;
pipe->set_vertex_sampler_views = nvc0_vp_set_sampler_views; pipe->set_sampler_views = nvc0_set_sampler_views;
pipe->set_fragment_sampler_views = nvc0_fp_set_sampler_views;
pipe->set_geometry_sampler_views = nvc0_gp_set_sampler_views;
pipe->set_compute_sampler_views = nvc0_cp_set_sampler_views;
pipe->create_vs_state = nvc0_vp_state_create; pipe->create_vs_state = nvc0_vp_state_create;
pipe->create_fs_state = nvc0_fp_state_create; pipe->create_fs_state = nvc0_fp_state_create;

View file

@ -1576,9 +1576,9 @@ static uint32_t r300_assign_texture_cache_region(unsigned index, unsigned num)
return R300_TX_CACHE(num + index); return R300_TX_CACHE(num + index);
} }
static void r300_set_fragment_sampler_views(struct pipe_context* pipe, static void r300_set_sampler_views(struct pipe_context* pipe, unsigned shader,
unsigned count, unsigned start, unsigned count,
struct pipe_sampler_view** views) struct pipe_sampler_view** views)
{ {
struct r300_context* r300 = r300_context(pipe); struct r300_context* r300 = r300_context(pipe);
struct r300_textures_state* state = struct r300_textures_state* state =
@ -1588,6 +1588,11 @@ static void r300_set_fragment_sampler_views(struct pipe_context* pipe,
unsigned tex_units = r300->screen->caps.num_tex_units; unsigned tex_units = r300->screen->caps.num_tex_units;
boolean dirty_tex = FALSE; boolean dirty_tex = FALSE;
if (shader != PIPE_SHADER_FRAGMENT)
return;
assert(start == 0); /* non-zero not handled yet */
if (count > tex_units) { if (count > tex_units) {
return; return;
} }
@ -2159,7 +2164,7 @@ void r300_init_state_functions(struct r300_context* r300)
r300->context.bind_sampler_states = r300_bind_sampler_states; r300->context.bind_sampler_states = r300_bind_sampler_states;
r300->context.delete_sampler_state = r300_delete_sampler_state; r300->context.delete_sampler_state = r300_delete_sampler_state;
r300->context.set_fragment_sampler_views = r300_set_fragment_sampler_views; r300->context.set_sampler_views = r300_set_sampler_views;
r300->context.create_sampler_view = r300_create_sampler_view; r300->context.create_sampler_view = r300_create_sampler_view;
r300->context.sampler_view_destroy = r300_sampler_view_destroy; r300->context.sampler_view_destroy = r300_sampler_view_destroy;

View file

@ -597,7 +597,7 @@ static void evergreen_set_compute_resources(struct pipe_context * ctx_,
} }
} }
static void evergreen_set_cs_sampler_view(struct pipe_context *ctx_, void evergreen_set_cs_sampler_view(struct pipe_context *ctx_,
unsigned start_slot, unsigned count, unsigned start_slot, unsigned count,
struct pipe_sampler_view **views) struct pipe_sampler_view **views)
{ {
@ -848,7 +848,6 @@ void evergreen_init_compute_state_functions(struct r600_context *ctx)
ctx->b.b.bind_compute_state = evergreen_bind_compute_state; ctx->b.b.bind_compute_state = evergreen_bind_compute_state;
// ctx->context.create_sampler_view = evergreen_compute_create_sampler_view; // ctx->context.create_sampler_view = evergreen_compute_create_sampler_view;
ctx->b.b.set_compute_resources = evergreen_set_compute_resources; ctx->b.b.set_compute_resources = evergreen_set_compute_resources;
ctx->b.b.set_compute_sampler_views = evergreen_set_cs_sampler_view;
ctx->b.b.set_global_binding = evergreen_set_global_binding; ctx->b.b.set_global_binding = evergreen_set_global_binding;
ctx->b.b.launch_grid = evergreen_launch_grid; ctx->b.b.launch_grid = evergreen_launch_grid;

View file

@ -574,6 +574,11 @@ void compute_memory_pool_delete(struct compute_memory_pool* pool);
struct compute_memory_pool* compute_memory_pool_new( struct compute_memory_pool* compute_memory_pool_new(
struct r600_screen *rscreen); struct r600_screen *rscreen);
/* evergreen_compute.c */
void evergreen_set_cs_sampler_view(struct pipe_context *ctx_,
unsigned start_slot, unsigned count,
struct pipe_sampler_view **views);
/* evergreen_state.c */ /* evergreen_state.c */
struct pipe_sampler_view * struct pipe_sampler_view *
evergreen_create_sampler_view_custom(struct pipe_context *ctx, evergreen_create_sampler_view_custom(struct pipe_context *ctx,

View file

@ -578,6 +578,11 @@ static void r600_set_sampler_views(struct pipe_context *pipe, unsigned shader,
assert(start == 0); /* XXX fix below */ assert(start == 0); /* XXX fix below */
if (shader == PIPE_SHADER_COMPUTE) {
evergreen_set_cs_sampler_view(pipe, start, count, views);
return;
}
remaining_mask = dst->views.enabled_mask & disable_mask; remaining_mask = dst->views.enabled_mask & disable_mask;
while (remaining_mask) { while (remaining_mask) {
@ -644,18 +649,6 @@ static void r600_set_sampler_views(struct pipe_context *pipe, unsigned shader,
} }
} }
static void r600_set_vs_sampler_views(struct pipe_context *ctx, unsigned count,
struct pipe_sampler_view **views)
{
r600_set_sampler_views(ctx, PIPE_SHADER_VERTEX, 0, count, views);
}
static void r600_set_ps_sampler_views(struct pipe_context *ctx, unsigned count,
struct pipe_sampler_view **views)
{
r600_set_sampler_views(ctx, PIPE_SHADER_FRAGMENT, 0, count, views);
}
static void r600_set_viewport_states(struct pipe_context *ctx, static void r600_set_viewport_states(struct pipe_context *ctx,
unsigned start_slot, unsigned start_slot,
unsigned num_viewports, unsigned num_viewports,
@ -2100,8 +2093,7 @@ void r600_init_common_state_functions(struct r600_context *rctx)
rctx->b.b.set_viewport_states = r600_set_viewport_states; rctx->b.b.set_viewport_states = r600_set_viewport_states;
rctx->b.b.set_vertex_buffers = r600_set_vertex_buffers; rctx->b.b.set_vertex_buffers = r600_set_vertex_buffers;
rctx->b.b.set_index_buffer = r600_set_index_buffer; rctx->b.b.set_index_buffer = r600_set_index_buffer;
rctx->b.b.set_fragment_sampler_views = r600_set_ps_sampler_views; rctx->b.b.set_sampler_views = r600_set_sampler_views;
rctx->b.b.set_vertex_sampler_views = r600_set_vs_sampler_views;
rctx->b.b.sampler_view_destroy = r600_sampler_view_destroy; rctx->b.b.sampler_view_destroy = r600_sampler_view_destroy;
rctx->b.b.texture_barrier = r600_texture_barrier; rctx->b.b.texture_barrier = r600_texture_barrier;
rctx->b.b.set_stream_output_targets = r600_set_streamout_targets; rctx->b.b.set_stream_output_targets = r600_set_streamout_targets;

View file

@ -2608,14 +2608,21 @@ static void *si_create_sampler_state(struct pipe_context *ctx,
/* XXX consider moving this function to si_descriptors.c for gcc to inline /* XXX consider moving this function to si_descriptors.c for gcc to inline
* the si_set_sampler_view calls. LTO might help too. */ * the si_set_sampler_view calls. LTO might help too. */
static void si_set_sampler_views(struct r600_context *rctx, static void si_set_sampler_views(struct pipe_context *ctx,
unsigned shader, unsigned count, unsigned shader, unsigned start,
unsigned count,
struct pipe_sampler_view **views) struct pipe_sampler_view **views)
{ {
struct r600_context *rctx = (struct r600_context *)ctx;
struct r600_textures_info *samplers = &rctx->samplers[shader]; struct r600_textures_info *samplers = &rctx->samplers[shader];
struct si_pipe_sampler_view **rviews = (struct si_pipe_sampler_view **)views; struct si_pipe_sampler_view **rviews = (struct si_pipe_sampler_view **)views;
int i; int i;
if (shader != PIPE_SHADER_VERTEX && shader != PIPE_SHADER_FRAGMENT)
return;
assert(start == 0);
for (i = 0; i < count; i++) { for (i = 0; i < count; i++) {
if (views[i]) { if (views[i]) {
struct r600_texture *rtex = struct r600_texture *rtex =
@ -2661,22 +2668,6 @@ static void si_set_sampler_views(struct r600_context *rctx,
rctx->b.flags |= R600_CONTEXT_INV_TEX_CACHE; rctx->b.flags |= R600_CONTEXT_INV_TEX_CACHE;
} }
static void si_set_vs_sampler_views(struct pipe_context *ctx, unsigned count,
struct pipe_sampler_view **views)
{
struct r600_context *rctx = (struct r600_context *)ctx;
si_set_sampler_views(rctx, PIPE_SHADER_VERTEX, count, views);
}
static void si_set_ps_sampler_views(struct pipe_context *ctx, unsigned count,
struct pipe_sampler_view **views)
{
struct r600_context *rctx = (struct r600_context *)ctx;
si_set_sampler_views(rctx, PIPE_SHADER_FRAGMENT, count, views);
}
static struct si_pm4_state *si_set_sampler_states(struct r600_context *rctx, unsigned count, static struct si_pm4_state *si_set_sampler_states(struct r600_context *rctx, unsigned count,
void **states, void **states,
struct r600_textures_info *samplers, struct r600_textures_info *samplers,
@ -3033,8 +3024,7 @@ void si_init_state_functions(struct r600_context *rctx)
rctx->b.b.delete_sampler_state = si_delete_sampler_state; rctx->b.b.delete_sampler_state = si_delete_sampler_state;
rctx->b.b.create_sampler_view = si_create_sampler_view; rctx->b.b.create_sampler_view = si_create_sampler_view;
rctx->b.b.set_vertex_sampler_views = si_set_vs_sampler_views; rctx->b.b.set_sampler_views = si_set_sampler_views;
rctx->b.b.set_fragment_sampler_views = si_set_ps_sampler_views;
rctx->b.b.sampler_view_destroy = si_sampler_view_destroy; rctx->b.b.sampler_view_destroy = si_sampler_view_destroy;
rctx->b.b.set_sample_mask = si_set_sample_mask; rctx->b.b.set_sample_mask = si_set_sample_mask;

View file

@ -736,36 +736,11 @@ rbug_set_sampler_views(struct pipe_context *_pipe,
views = unwrapped_views; views = unwrapped_views;
} }
switch (shader) { pipe->set_sampler_views(pipe, shader, start, num, views);
case PIPE_SHADER_VERTEX:
pipe->set_vertex_sampler_views(pipe, num, views);
break;
case PIPE_SHADER_FRAGMENT:
pipe->set_fragment_sampler_views(pipe, num, views);
break;
default:
assert(0);
}
pipe_mutex_unlock(rb_pipe->call_mutex); pipe_mutex_unlock(rb_pipe->call_mutex);
} }
static void
rbug_set_vertex_sampler_views(struct pipe_context *_pipe,
unsigned num,
struct pipe_sampler_view **_views)
{
rbug_set_sampler_views(_pipe, PIPE_SHADER_VERTEX, 0, num, _views);
}
static void
rbug_set_fragment_sampler_views(struct pipe_context *_pipe,
unsigned num,
struct pipe_sampler_view **_views)
{
rbug_set_sampler_views(_pipe, PIPE_SHADER_FRAGMENT, 0, num, _views);
}
static void static void
rbug_set_vertex_buffers(struct pipe_context *_pipe, rbug_set_vertex_buffers(struct pipe_context *_pipe,
unsigned start_slot, unsigned num_buffers, unsigned start_slot, unsigned num_buffers,
@ -1171,8 +1146,7 @@ rbug_context_create(struct pipe_screen *_screen, struct pipe_context *pipe)
rb_pipe->base.set_polygon_stipple = rbug_set_polygon_stipple; rb_pipe->base.set_polygon_stipple = rbug_set_polygon_stipple;
rb_pipe->base.set_scissor_states = rbug_set_scissor_states; rb_pipe->base.set_scissor_states = rbug_set_scissor_states;
rb_pipe->base.set_viewport_states = rbug_set_viewport_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_sampler_views = rbug_set_sampler_views;
rb_pipe->base.set_vertex_sampler_views = rbug_set_vertex_sampler_views;
rb_pipe->base.set_vertex_buffers = rbug_set_vertex_buffers; rb_pipe->base.set_vertex_buffers = rbug_set_vertex_buffers;
rb_pipe->base.set_index_buffer = rbug_set_index_buffer; rb_pipe->base.set_index_buffer = rbug_set_index_buffer;
rb_pipe->base.set_sample_mask = rbug_set_sample_mask; rb_pipe->base.set_sample_mask = rbug_set_sample_mask;

View file

@ -165,33 +165,6 @@ softpipe_set_sampler_views(struct pipe_context *pipe,
} }
static void
softpipe_set_fragment_sampler_views(struct pipe_context *pipe,
unsigned num,
struct pipe_sampler_view **views)
{
softpipe_set_sampler_views(pipe, PIPE_SHADER_FRAGMENT, 0, num, views);
}
static void
softpipe_set_vertex_sampler_views(struct pipe_context *pipe,
unsigned num,
struct pipe_sampler_view **views)
{
softpipe_set_sampler_views(pipe, PIPE_SHADER_VERTEX, 0, num, views);
}
static void
softpipe_set_geometry_sampler_views(struct pipe_context *pipe,
unsigned num,
struct pipe_sampler_view **views)
{
softpipe_set_sampler_views(pipe, PIPE_SHADER_GEOMETRY, 0, num, views);
}
static void static void
softpipe_delete_sampler_state(struct pipe_context *pipe, softpipe_delete_sampler_state(struct pipe_context *pipe,
void *sampler) void *sampler)
@ -207,11 +180,8 @@ softpipe_init_sampler_funcs(struct pipe_context *pipe)
pipe->bind_sampler_states = softpipe_bind_sampler_states; pipe->bind_sampler_states = softpipe_bind_sampler_states;
pipe->delete_sampler_state = softpipe_delete_sampler_state; pipe->delete_sampler_state = softpipe_delete_sampler_state;
pipe->set_fragment_sampler_views = softpipe_set_fragment_sampler_views;
pipe->set_vertex_sampler_views = softpipe_set_vertex_sampler_views;
pipe->set_geometry_sampler_views = softpipe_set_geometry_sampler_views;
pipe->create_sampler_view = softpipe_create_sampler_view; pipe->create_sampler_view = softpipe_create_sampler_view;
pipe->set_sampler_views = softpipe_set_sampler_views;
pipe->sampler_view_destroy = softpipe_sampler_view_destroy; pipe->sampler_view_destroy = softpipe_sampler_view_destroy;
} }

View file

@ -289,21 +289,12 @@ svga_set_sampler_views(struct pipe_context *pipe,
} }
static void
svga_set_fragment_sampler_views(struct pipe_context *pipe,
unsigned num,
struct pipe_sampler_view **views)
{
svga_set_sampler_views(pipe, PIPE_SHADER_FRAGMENT, 0, num, views);
}
void svga_init_sampler_functions( struct svga_context *svga ) void svga_init_sampler_functions( struct svga_context *svga )
{ {
svga->pipe.create_sampler_state = svga_create_sampler_state; svga->pipe.create_sampler_state = svga_create_sampler_state;
svga->pipe.bind_sampler_states = svga_bind_sampler_states; svga->pipe.bind_sampler_states = svga_bind_sampler_states;
svga->pipe.delete_sampler_state = svga_delete_sampler_state; svga->pipe.delete_sampler_state = svga_delete_sampler_state;
svga->pipe.set_fragment_sampler_views = svga_set_fragment_sampler_views; svga->pipe.set_sampler_views = svga_set_sampler_views;
svga->pipe.create_sampler_view = svga_create_sampler_view; svga->pipe.create_sampler_view = svga_create_sampler_view;
svga->pipe.sampler_view_destroy = svga_sampler_view_destroy; svga->pipe.sampler_view_destroy = svga_sampler_view_destroy;
} }

View file

@ -903,70 +903,20 @@ trace_context_set_sampler_views(struct pipe_context *_pipe,
} }
views = unwrapped_views; views = unwrapped_views;
switch (shader) { trace_dump_call_begin("pipe_context", "set_sampler_views");
case PIPE_SHADER_VERTEX:
trace_dump_call_begin("pipe_context", "set_vertex_sampler_views");
break;
case PIPE_SHADER_GEOMETRY:
trace_dump_call_begin("pipe_context", "set_geometry_sampler_views");
break;
case PIPE_SHADER_FRAGMENT:
trace_dump_call_begin("pipe_context", "set_fragment_sampler_views");
break;
default:
debug_error("Unexpected shader in trace_context_set_sampler_views()");
}
trace_dump_arg(ptr, pipe); trace_dump_arg(ptr, pipe);
/*trace_dump_arg(uint, shader);*/ trace_dump_arg(uint, shader);
trace_dump_arg(uint, start);
trace_dump_arg(uint, num); trace_dump_arg(uint, num);
trace_dump_arg_array(ptr, views, num); trace_dump_arg_array(ptr, views, num);
switch (shader) { pipe->set_sampler_views(pipe, shader, start, num, views);
case PIPE_SHADER_VERTEX:
pipe->set_vertex_sampler_views(pipe, num, views);
break;
case PIPE_SHADER_GEOMETRY:
pipe->set_geometry_sampler_views(pipe, num, views);
break;
case PIPE_SHADER_FRAGMENT:
pipe->set_fragment_sampler_views(pipe, num, views);
break;
default:
debug_error("Unexpected shader in trace_context_set_sampler_views()");
}
trace_dump_call_end(); trace_dump_call_end();
} }
static INLINE void
trace_context_set_fragment_sampler_views(struct pipe_context *_pipe,
unsigned num,
struct pipe_sampler_view **views)
{
trace_context_set_sampler_views(_pipe, PIPE_SHADER_FRAGMENT, 0, num, views);
}
static INLINE void
trace_context_set_vertex_sampler_views(struct pipe_context *_pipe,
unsigned num,
struct pipe_sampler_view **views)
{
trace_context_set_sampler_views(_pipe, PIPE_SHADER_VERTEX, 0, num, views);
}
static INLINE void
trace_context_set_geometry_sampler_views(struct pipe_context *_pipe,
unsigned num,
struct pipe_sampler_view **views)
{
trace_context_set_sampler_views(_pipe, PIPE_SHADER_GEOMETRY, 0, num, views);
}
static INLINE void static INLINE void
trace_context_set_vertex_buffers(struct pipe_context *_pipe, trace_context_set_vertex_buffers(struct pipe_context *_pipe,
unsigned start_slot, unsigned num_buffers, unsigned start_slot, unsigned num_buffers,
@ -1556,9 +1506,7 @@ trace_context_create(struct trace_screen *tr_scr,
TR_CTX_INIT(set_polygon_stipple); TR_CTX_INIT(set_polygon_stipple);
TR_CTX_INIT(set_scissor_states); TR_CTX_INIT(set_scissor_states);
TR_CTX_INIT(set_viewport_states); TR_CTX_INIT(set_viewport_states);
TR_CTX_INIT(set_fragment_sampler_views); TR_CTX_INIT(set_sampler_views);
TR_CTX_INIT(set_vertex_sampler_views);
TR_CTX_INIT(set_geometry_sampler_views);
TR_CTX_INIT(create_sampler_view); TR_CTX_INIT(create_sampler_view);
TR_CTX_INIT(sampler_view_destroy); TR_CTX_INIT(sampler_view_destroy);
TR_CTX_INIT(create_surface); TR_CTX_INIT(create_surface);

View file

@ -213,21 +213,9 @@ struct pipe_context {
unsigned num_viewports, unsigned num_viewports,
const struct pipe_viewport_state *); const struct pipe_viewport_state *);
void (*set_fragment_sampler_views)(struct pipe_context *, void (*set_sampler_views)(struct pipe_context *, unsigned shader,
unsigned num_views, unsigned start_slot, unsigned num_views,
struct pipe_sampler_view **); struct pipe_sampler_view **);
void (*set_vertex_sampler_views)(struct pipe_context *,
unsigned num_views,
struct pipe_sampler_view **);
void (*set_geometry_sampler_views)(struct pipe_context *,
unsigned num_views,
struct pipe_sampler_view **);
void (*set_compute_sampler_views)(struct pipe_context *,
unsigned start_slot, unsigned num_views,
struct pipe_sampler_view **);
/** /**
* Bind an array of shader resources that will be used by the * Bind an array of shader resources that will be used by the

View file

@ -352,7 +352,7 @@ static void init_tex( void )
if (sv == NULL) if (sv == NULL)
exit(5); exit(5);
ctx->set_fragment_sampler_views(ctx, 1, &sv); ctx->set_sampler_views(ctx, PIPE_SHADER_FRAGMENT, 0, 1, &sv);
memset(&sampler_desc, 0, sizeof sampler_desc); memset(&sampler_desc, 0, sizeof sampler_desc);

View file

@ -459,7 +459,7 @@ static void init_tex( void )
if (sv == NULL) if (sv == NULL)
exit(5); exit(5);
ctx->set_fragment_sampler_views(ctx, 1, &sv); ctx->set_sampler_views(ctx, PIPE_SHADER_FRAGMENT, 0, 1, &sv);
memset(&sampler_desc, 0, sizeof sampler_desc); memset(&sampler_desc, 0, sizeof sampler_desc);

View file

@ -267,7 +267,7 @@ static void init_tex( void )
if (sv == NULL) if (sv == NULL)
exit(5); exit(5);
ctx->set_fragment_sampler_views(ctx, 1, &sv); ctx->set_sampler_views(ctx, PIPE_SHADER_FRAGMENT, 0, 1, &sv);
memset(&sampler_desc, 0, sizeof sampler_desc); memset(&sampler_desc, 0, sizeof sampler_desc);

View file

@ -167,7 +167,7 @@ static void init_tex( void )
PIPE_FORMAT_B8G8R8A8_UNORM, tex2d); PIPE_FORMAT_B8G8R8A8_UNORM, tex2d);
sv = graw_util_create_simple_sampler_view(&info, texture); sv = graw_util_create_simple_sampler_view(&info, texture);
info.ctx->set_fragment_sampler_views(info.ctx, 1, &sv); info.ctx->set_sampler_views(info.ctx, PIPE_SHADER_FRAGMENT, 0, 1, &sv);
sampler = graw_util_create_simple_sampler(&info, sampler = graw_util_create_simple_sampler(&info,
PIPE_TEX_WRAP_REPEAT, PIPE_TEX_WRAP_REPEAT,

View file

@ -128,11 +128,11 @@ static void draw( void )
info.ctx->clear(info.ctx, PIPE_CLEAR_COLOR, &clear_color, 0, 0); info.ctx->clear(info.ctx, PIPE_CLEAR_COLOR, &clear_color, 0, 0);
info.ctx->set_fragment_sampler_views(info.ctx, 1, &linear_sv); info.ctx->set_sampler_views(info.ctx, PIPE_SHADER_FRAGMENT, 0, 1, &linear_sv);
set_vertices(vertices1, 4); set_vertices(vertices1, 4);
util_draw_arrays(info.ctx, PIPE_PRIM_QUADS, 0, 4); util_draw_arrays(info.ctx, PIPE_PRIM_QUADS, 0, 4);
info.ctx->set_fragment_sampler_views(info.ctx, 1, &srgb_sv); info.ctx->set_sampler_views(info.ctx, PIPE_SHADER_FRAGMENT, 0, 1, &srgb_sv);
set_vertices(vertices2, 4); set_vertices(vertices2, 4);
util_draw_arrays(info.ctx, PIPE_PRIM_QUADS, 0, 4); util_draw_arrays(info.ctx, PIPE_PRIM_QUADS, 0, 4);

View file

@ -146,7 +146,7 @@ init_tex(const unsigned swizzle[4])
if (sv == NULL) if (sv == NULL)
exit(5); exit(5);
info.ctx->set_fragment_sampler_views(info.ctx, 1, &sv); info.ctx->set_sampler_views(info.ctx, PIPE_SHADER_FRAGMENT, 0, 1, &sv);
sampler = graw_util_create_simple_sampler(&info, sampler = graw_util_create_simple_sampler(&info,
PIPE_TEX_WRAP_REPEAT, PIPE_TEX_WRAP_REPEAT,

View file

@ -346,7 +346,7 @@ static void init_tex( void )
if (sv == NULL) if (sv == NULL)
exit(5); exit(5);
ctx->set_fragment_sampler_views(ctx, 1, &sv); ctx->set_sampler_views(ctx, PIPE_SHADER_FRAGMENT, 0, 1, &sv);
memset(&sampler_desc, 0, sizeof sampler_desc); memset(&sampler_desc, 0, sizeof sampler_desc);

View file

@ -312,7 +312,7 @@ static void init_sampler_views(struct context *ctx, const int *slots)
assert(ctx->view[i]); assert(ctx->view[i]);
} }
pipe->set_compute_sampler_views(pipe, 0, i, ctx->view); pipe->set_sampler_views(pipe, PIPE_SHADER_COMPUTE, 0, i, ctx->view);
} }
static void destroy_sampler_views(struct context *ctx) static void destroy_sampler_views(struct context *ctx)
@ -320,7 +320,7 @@ static void destroy_sampler_views(struct context *ctx)
struct pipe_context *pipe = ctx->pipe; struct pipe_context *pipe = ctx->pipe;
int i; int i;
pipe->set_compute_sampler_views(pipe, 0, MAX_RESOURCES, NULL); pipe->set_sampler_views(pipe, PIPE_SHADER_COMPUTE, 0, MAX_RESOURCES, NULL);
for (i = 0; i < MAX_RESOURCES; ++i) { for (i = 0; i < MAX_RESOURCES; ++i) {
if (ctx->view[i]) { if (ctx->view[i]) {

View file

@ -243,9 +243,7 @@ class Context(Dispatcher):
self._state.vs.sampler = [] self._state.vs.sampler = []
self._state.gs.sampler = [] self._state.gs.sampler = []
self._state.fs.sampler = [] self._state.fs.sampler = []
self._state.vs.sampler_views = [] self._state.sampler_views = {}
self._state.gs.sampler_views = []
self._state.fs.sampler_views = []
self._state.vs.constant_buffer = [] self._state.vs.constant_buffer = []
self._state.gs.constant_buffer = [] self._state.gs.constant_buffer = []
self._state.fs.constant_buffer = [] self._state.fs.constant_buffer = []
@ -400,14 +398,8 @@ class Context(Dispatcher):
def sampler_view_destroy(self, view): def sampler_view_destroy(self, view):
pass pass
def set_fragment_sampler_views(self, num, views): def set_sampler_views(self, shader, start, num, views):
self._state.fs.sampler_views = views self._state.sampler_views[shader] = views
def set_geometry_sampler_views(self, num, views):
self._state.gs.sampler_views = views
def set_vertex_sampler_views(self, num, views):
self._state.vs.sampler_views = views
def set_vertex_buffers(self, start_slot, num_buffers, buffers): def set_vertex_buffers(self, start_slot, num_buffers, buffers):
self._update(self._state.vertex_buffers, start_slot, num_buffers, buffers) self._update(self._state.vertex_buffers, start_slot, num_buffers, buffers)