aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gallium/drivers/radeonsi/si_descriptors.c72
-rw-r--r--src/gallium/drivers/radeonsi/si_state.c66
-rw-r--r--src/gallium/drivers/radeonsi/si_state.h3
3 files changed, 68 insertions, 73 deletions
diff --git a/src/gallium/drivers/radeonsi/si_descriptors.c b/src/gallium/drivers/radeonsi/si_descriptors.c
index 01fcec3e13d..aefe9bce2bd 100644
--- a/src/gallium/drivers/radeonsi/si_descriptors.c
+++ b/src/gallium/drivers/radeonsi/si_descriptors.c
@@ -333,9 +333,9 @@ static void si_sampler_views_begin_new_cs(struct si_context *sctx,
si_emit_shader_pointer(sctx, &views->desc);
}
-void si_set_sampler_view(struct si_context *sctx, unsigned shader,
- unsigned slot, struct pipe_sampler_view *view,
- unsigned *view_desc)
+static void si_set_sampler_view(struct si_context *sctx, unsigned shader,
+ unsigned slot, struct pipe_sampler_view *view,
+ unsigned *view_desc)
{
struct si_sampler_views *views = &sctx->samplers[shader].views;
@@ -360,7 +360,70 @@ void si_set_sampler_view(struct si_context *sctx, unsigned shader,
}
views->desc.dirty_mask |= 1 << slot;
- si_update_descriptors(sctx, &views->desc);
+}
+
+static void si_set_sampler_views(struct pipe_context *ctx,
+ unsigned shader, unsigned start,
+ unsigned count,
+ struct pipe_sampler_view **views)
+{
+ struct si_context *sctx = (struct si_context *)ctx;
+ struct si_textures_info *samplers = &sctx->samplers[shader];
+ struct si_pipe_sampler_view **rviews = (struct si_pipe_sampler_view **)views;
+ int i;
+
+ if (shader >= SI_NUM_SHADERS)
+ return;
+
+ assert(start == 0);
+
+ for (i = 0; i < count; i++) {
+ if (!views[i]) {
+ samplers->depth_texture_mask &= ~(1 << i);
+ samplers->compressed_colortex_mask &= ~(1 << i);
+ si_set_sampler_view(sctx, shader, i, NULL, NULL);
+ si_set_sampler_view(sctx, shader, SI_FMASK_TEX_OFFSET + i,
+ NULL, NULL);
+ continue;
+ }
+
+ si_set_sampler_view(sctx, shader, i, views[i], rviews[i]->state);
+
+ if (views[i]->texture->target != PIPE_BUFFER) {
+ struct r600_texture *rtex =
+ (struct r600_texture*)views[i]->texture;
+
+ if (rtex->is_depth && !rtex->is_flushing_texture) {
+ samplers->depth_texture_mask |= 1 << i;
+ } else {
+ samplers->depth_texture_mask &= ~(1 << i);
+ }
+ if (rtex->cmask.size || rtex->fmask.size) {
+ samplers->compressed_colortex_mask |= 1 << i;
+ } else {
+ samplers->compressed_colortex_mask &= ~(1 << i);
+ }
+
+ if (rtex->fmask.size) {
+ si_set_sampler_view(sctx, shader, SI_FMASK_TEX_OFFSET + i,
+ views[i], rviews[i]->fmask_state);
+ } else {
+ si_set_sampler_view(sctx, shader, SI_FMASK_TEX_OFFSET + i,
+ NULL, NULL);
+ }
+ }
+ }
+ for (; i < samplers->n_views; i++) {
+ samplers->depth_texture_mask &= ~(1 << i);
+ samplers->compressed_colortex_mask &= ~(1 << i);
+ si_set_sampler_view(sctx, shader, i, NULL, NULL);
+ si_set_sampler_view(sctx, shader, SI_FMASK_TEX_OFFSET + i,
+ NULL, NULL);
+ }
+
+ samplers->n_views = count;
+ sctx->b.flags |= R600_CONTEXT_INV_TEX_CACHE;
+ si_update_descriptors(sctx, &samplers->views.desc);
}
/* SAMPLER STATES */
@@ -1044,6 +1107,7 @@ void si_init_all_descriptors(struct si_context *sctx)
/* Set pipe_context functions. */
sctx->b.b.set_constant_buffer = si_set_constant_buffer;
+ sctx->b.b.set_sampler_views = si_set_sampler_views;
sctx->b.b.set_stream_output_targets = si_set_streamout_targets;
sctx->b.clear_buffer = si_clear_buffer;
sctx->b.invalidate_buffer = si_invalidate_buffer;
diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c
index 44c1af844fc..604f8d3456e 100644
--- a/src/gallium/drivers/radeonsi/si_state.c
+++ b/src/gallium/drivers/radeonsi/si_state.c
@@ -2673,71 +2673,6 @@ static void *si_create_sampler_state(struct pipe_context *ctx,
return rstate;
}
-/* XXX consider moving this function to si_descriptors.c for gcc to inline
- * the si_set_sampler_view calls. LTO might help too. */
-static void si_set_sampler_views(struct pipe_context *ctx,
- unsigned shader, unsigned start,
- unsigned count,
- struct pipe_sampler_view **views)
-{
- struct si_context *sctx = (struct si_context *)ctx;
- struct si_textures_info *samplers = &sctx->samplers[shader];
- struct si_pipe_sampler_view **rviews = (struct si_pipe_sampler_view **)views;
- int i;
-
- if (shader >= SI_NUM_SHADERS)
- return;
-
- assert(start == 0);
-
- for (i = 0; i < count; i++) {
- if (!views[i]) {
- samplers->depth_texture_mask &= ~(1 << i);
- samplers->compressed_colortex_mask &= ~(1 << i);
- si_set_sampler_view(sctx, shader, i, NULL, NULL);
- si_set_sampler_view(sctx, shader, SI_FMASK_TEX_OFFSET + i,
- NULL, NULL);
- continue;
- }
-
- si_set_sampler_view(sctx, shader, i, views[i], rviews[i]->state);
-
- if (views[i]->texture->target != PIPE_BUFFER) {
- struct r600_texture *rtex =
- (struct r600_texture*)views[i]->texture;
-
- if (rtex->is_depth && !rtex->is_flushing_texture) {
- samplers->depth_texture_mask |= 1 << i;
- } else {
- samplers->depth_texture_mask &= ~(1 << i);
- }
- if (rtex->cmask.size || rtex->fmask.size) {
- samplers->compressed_colortex_mask |= 1 << i;
- } else {
- samplers->compressed_colortex_mask &= ~(1 << i);
- }
-
- if (rtex->fmask.size) {
- si_set_sampler_view(sctx, shader, SI_FMASK_TEX_OFFSET + i,
- views[i], rviews[i]->fmask_state);
- } else {
- si_set_sampler_view(sctx, shader, SI_FMASK_TEX_OFFSET + i,
- NULL, NULL);
- }
- }
- }
- for (; i < samplers->n_views; i++) {
- samplers->depth_texture_mask &= ~(1 << i);
- samplers->compressed_colortex_mask &= ~(1 << i);
- si_set_sampler_view(sctx, shader, i, NULL, NULL);
- si_set_sampler_view(sctx, shader, SI_FMASK_TEX_OFFSET + i,
- NULL, NULL);
- }
-
- samplers->n_views = count;
- sctx->b.flags |= R600_CONTEXT_INV_TEX_CACHE;
-}
-
/* Upload border colors and update the pointers in resource descriptors.
* There can only be 4096 border colors per context.
*
@@ -3001,7 +2936,6 @@ void si_init_state_functions(struct si_context *sctx)
sctx->b.b.delete_sampler_state = si_delete_sampler_state;
sctx->b.b.create_sampler_view = si_create_sampler_view;
- sctx->b.b.set_sampler_views = si_set_sampler_views;
sctx->b.b.sampler_view_destroy = si_sampler_view_destroy;
sctx->b.b.set_sample_mask = si_set_sample_mask;
diff --git a/src/gallium/drivers/radeonsi/si_state.h b/src/gallium/drivers/radeonsi/si_state.h
index 7a0433c1b9d..a765e243ce6 100644
--- a/src/gallium/drivers/radeonsi/si_state.h
+++ b/src/gallium/drivers/radeonsi/si_state.h
@@ -219,9 +219,6 @@ struct si_buffer_resources {
} while(0)
/* si_descriptors.c */
-void si_set_sampler_view(struct si_context *sctx, unsigned shader,
- unsigned slot, struct pipe_sampler_view *view,
- unsigned *view_desc);
void si_set_sampler_descriptors(struct si_context *sctx, unsigned shader,
unsigned start, unsigned count, void **states);
void si_set_ring_buffer(struct pipe_context *ctx, uint shader, uint slot,