Esempio n. 1
0
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;

	if (views->views[slot] == view)
		return;

	if (view) {
		struct si_sampler_view *rview =
			(struct si_sampler_view*)view;

		if (rview->resource)
			radeon_add_to_buffer_list(&sctx->b, &sctx->b.gfx,
				rview->resource, RADEON_USAGE_READ,
				r600_get_sampler_view_priority(rview->resource));

		if (rview->dcc_buffer && rview->dcc_buffer != rview->resource)
			radeon_add_to_buffer_list(&sctx->b, &sctx->b.gfx,
				rview->dcc_buffer, RADEON_USAGE_READ,
				RADEON_PRIO_DCC);

		pipe_sampler_view_reference(&views->views[slot], view);
		memcpy(views->desc.list + slot*8, view_desc, 8*4);
		views->desc.enabled_mask |= 1llu << slot;
	} else {
		pipe_sampler_view_reference(&views->views[slot], NULL);
		memcpy(views->desc.list + slot*8, null_descriptor, 8*4);
		views->desc.enabled_mask &= ~(1llu << slot);
	}

	views->desc.list_dirty = true;
}
Esempio n. 2
0
static void si_sampler_view_add_buffer(struct si_context *sctx,
				       struct pipe_resource *resource,
				       enum radeon_bo_usage usage)
{
	struct r600_resource *rres = (struct r600_resource*)resource;

	if (!resource)
		return;

	radeon_add_to_buffer_list(&sctx->b, &sctx->b.gfx, rres, usage,
				  r600_get_sampler_view_priority(rres));
}
Esempio n. 3
0
static void si_sampler_views_begin_new_cs(struct si_context *sctx,
					  struct si_sampler_views *views)
{
	uint64_t mask = views->desc.enabled_mask;

	/* Add buffers to the CS. */
	while (mask) {
		int i = u_bit_scan64(&mask);
		struct si_sampler_view *rview =
			(struct si_sampler_view*)views->views[i];

		if (!rview->resource)
			continue;

		radeon_add_to_buffer_list(&sctx->b, &sctx->b.gfx,
				      rview->resource, RADEON_USAGE_READ,
				      r600_get_sampler_view_priority(rview->resource));
	}

	if (!views->desc.buffer)
		return;
	radeon_add_to_buffer_list(&sctx->b, &sctx->b.gfx, views->desc.buffer,
			      RADEON_USAGE_READWRITE, RADEON_PRIO_DESCRIPTORS);
}