Mesa (master): freedreno: Add support for EXT_multisampled_render_to_texture

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Dec 7 01:02:39 UTC 2018


Module: Mesa
Branch: master
Commit: 3e55df4f83962b4dd29d84be57b697dccab5a364
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=3e55df4f83962b4dd29d84be57b697dccab5a364

Author: Kristian H. Kristensen <hoegsberg at chromium.org>
Date:   Mon Nov  5 21:23:27 2018 -0800

freedreno: Add support for EXT_multisampled_render_to_texture

There is not much to do in freedreno - tile layout and multisample
state for gmem renderings is programmed based on the pfb sample count,
while resolve blits take the destination sample count from the resource.

Reviewed-by: Rob Clark <robdclark at gmail.com>
Signed-off-by: Kristian H. Kristensen <hoegsberg at chromium.org>

---

 src/gallium/drivers/freedreno/freedreno_batch_cache.c | 4 +++-
 src/gallium/drivers/freedreno/freedreno_screen.c      | 3 +++
 src/gallium/drivers/freedreno/freedreno_surface.c     | 1 +
 3 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/src/gallium/drivers/freedreno/freedreno_batch_cache.c b/src/gallium/drivers/freedreno/freedreno_batch_cache.c
index 408d48ccdb..45cd9c172d 100644
--- a/src/gallium/drivers/freedreno/freedreno_batch_cache.c
+++ b/src/gallium/drivers/freedreno/freedreno_batch_cache.c
@@ -81,7 +81,8 @@ struct key {
 	struct {
 		struct pipe_resource *texture;
 		union pipe_surface_desc u;
-		uint16_t pos, format;
+		uint8_t pos, samples;
+		uint16_t format;
 	} surf[0];
 };
 
@@ -401,6 +402,7 @@ key_surf(struct key *key, unsigned idx, unsigned pos, struct pipe_surface *psurf
 	key->surf[idx].texture = psurf->texture;
 	key->surf[idx].u = psurf->u;
 	key->surf[idx].pos = pos;
+	key->surf[idx].samples = psurf->nr_samples;
 	key->surf[idx].format = psurf->format;
 }
 
diff --git a/src/gallium/drivers/freedreno/freedreno_screen.c b/src/gallium/drivers/freedreno/freedreno_screen.c
index ab83487aef..03b358782c 100644
--- a/src/gallium/drivers/freedreno/freedreno_screen.c
+++ b/src/gallium/drivers/freedreno/freedreno_screen.c
@@ -225,6 +225,9 @@ fd_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
 	case PIPE_CAP_TEXTURE_MULTISAMPLE:
 		return is_a5xx(screen) || is_a6xx(screen);
 
+	case PIPE_CAP_SURFACE_SAMPLE_COUNT:
+		return is_a6xx(screen);
+
 	case PIPE_CAP_DEPTH_CLIP_DISABLE:
 		return is_a3xx(screen) || is_a4xx(screen);
 
diff --git a/src/gallium/drivers/freedreno/freedreno_surface.c b/src/gallium/drivers/freedreno/freedreno_surface.c
index 6f415f6999..24da54798b 100644
--- a/src/gallium/drivers/freedreno/freedreno_surface.c
+++ b/src/gallium/drivers/freedreno/freedreno_surface.c
@@ -53,6 +53,7 @@ fd_create_surface(struct pipe_context *pctx,
 	psurf->format = surf_tmpl->format;
 	psurf->width = u_minify(ptex->width0, level);
 	psurf->height = u_minify(ptex->height0, level);
+	psurf->nr_samples = surf_tmpl->nr_samples;
 
 	if (ptex->target == PIPE_BUFFER) {
 		psurf->u.buf.first_element = surf_tmpl->u.buf.first_element;




More information about the mesa-commit mailing list