Mesa (master): radeonsi: Also export clip distances with geometry shader

Michel Dänzer daenzer at kemper.freedesktop.org
Wed Jan 29 02:46:19 UTC 2014


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

Author: Michel Dänzer <michel.daenzer at amd.com>
Date:   Thu Jan  9 18:18:26 2014 +0900

radeonsi: Also export clip distances with geometry shader

Reviewed-by: Marek Olšák <marek.olsak at amd.com>

---

 src/gallium/drivers/radeonsi/si_shader.c |    1 +
 src/gallium/drivers/radeonsi/si_state.c  |   13 ++++++++-----
 2 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c
index 227d682..7718e91 100644
--- a/src/gallium/drivers/radeonsi/si_shader.c
+++ b/src/gallium/drivers/radeonsi/si_shader.c
@@ -2541,6 +2541,7 @@ int si_pipe_shader_create(
 	if (si_shader_ctx.type == TGSI_PROCESSOR_GEOMETRY) {
 		shader->gs_copy_shader = CALLOC_STRUCT(si_pipe_shader);
 		shader->gs_copy_shader->selector = shader->selector;
+		shader->gs_copy_shader->key = shader->key;
 		si_shader_ctx.shader = shader->gs_copy_shader;
 		if ((r = si_generate_gs_copy_shader(sctx, &si_shader_ctx, dump))) {
 			free(shader->gs_copy_shader);
diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c
index ceeba26..d089fdd 100644
--- a/src/gallium/drivers/radeonsi/si_state.c
+++ b/src/gallium/drivers/radeonsi/si_state.c
@@ -2171,6 +2171,14 @@ static INLINE void si_shader_selector_key(struct pipe_context *ctx,
 	struct si_context *sctx = (struct si_context *)ctx;
 	memset(key, 0, sizeof(*key));
 
+	if ((sel->type == PIPE_SHADER_VERTEX || sel->type == PIPE_SHADER_GEOMETRY) &&
+	    sctx->queued.named.rasterizer) {
+		if (sctx->queued.named.rasterizer->clip_plane_enable & 0xf0)
+			key->vs.ucps_enabled |= 0x2;
+		if (sctx->queued.named.rasterizer->clip_plane_enable & 0xf)
+			key->vs.ucps_enabled |= 0x1;
+	}
+
 	if (sel->type == PIPE_SHADER_VERTEX) {
 		unsigned i;
 		if (!sctx->vertex_elements)
@@ -2179,11 +2187,6 @@ static INLINE void si_shader_selector_key(struct pipe_context *ctx,
 		for (i = 0; i < sctx->vertex_elements->count; ++i)
 			key->vs.instance_divisors[i] = sctx->vertex_elements->elements[i].instance_divisor;
 
-		if (sctx->queued.named.rasterizer->clip_plane_enable & 0xf0)
-			key->vs.ucps_enabled |= 0x2;
-		if (sctx->queued.named.rasterizer->clip_plane_enable & 0xf)
-			key->vs.ucps_enabled |= 0x1;
-
 		key->vs.as_es = sctx->gs_shader != NULL;
 	} else if (sel->type == PIPE_SHADER_FRAGMENT) {
 		if (sel->fs_write_all)




More information about the mesa-commit mailing list