[Mesa-dev] [PATCH 2/6] radeonsi: move si_set_sampler_views to si_descriptors.c

Marek Olšák maraeo at gmail.com
Sat Jul 12 09:35:33 PDT 2014


From: Marek Olšák <marek.olsak at amd.com>

---
 src/gallium/drivers/radeonsi/si_descriptors.c | 72 +++++++++++++++++++++++++--
 src/gallium/drivers/radeonsi/si_state.c       | 66 ------------------------
 src/gallium/drivers/radeonsi/si_state.h       |  3 --
 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 2edfe2e..991f048 100644
--- a/src/gallium/drivers/radeonsi/si_descriptors.c
+++ b/src/gallium/drivers/radeonsi/si_descriptors.c
@@ -335,9 +335,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;
 
@@ -362,7 +362,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 */
@@ -1046,6 +1109,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 eb63d3e..dc14ab1 100644
--- a/src/gallium/drivers/radeonsi/si_state.c
+++ b/src/gallium/drivers/radeonsi/si_state.c
@@ -2688,71 +2688,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.
  *
@@ -3020,7 +2955,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 7820fcb..53a98ed 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,
-- 
1.9.1



More information about the mesa-dev mailing list