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

Author: Mike Blumenkrantz <[email protected]>
Date:   Fri Jul 17 10:48:45 2020 -0400

zink: only run nir_lower_clip_halfz for last vertex processing stage

this lets us remove the calcs to un-convert POS during load

Reviewed-by: Erik Faye-Lund <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8152>

---

 .../drivers/zink/nir_to_spirv/nir_to_spirv.c       | 22 ----------------------
 src/gallium/drivers/zink/zink_compiler.c           | 13 +++++++++----
 2 files changed, 9 insertions(+), 26 deletions(-)

diff --git a/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c 
b/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c
index 6a1b530f42f..956be561c64 100644
--- a/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c
+++ b/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c
@@ -1744,28 +1744,6 @@ emit_load_deref(struct ntv_context *ctx, 
nir_intrinsic_instr *intr)
                                           ptr);
    unsigned num_components = nir_dest_num_components(intr->dest);
    unsigned bit_size = nir_dest_bit_size(intr->dest);
-   if (ctx->stage > MESA_SHADER_VERTEX && ctx->stage <= MESA_SHADER_GEOMETRY &&
-       
(nir_deref_instr_get_variable(nir_src_as_deref(intr->src[0]))->data.location == 
VARYING_SLOT_POS)) {
-      /* we previously transformed opengl gl_Position -> vulkan gl_Position in 
vertex shader,
-       * so now we have to reverse that and construct a new gl_Position:
-
-         gl_Position.z = gl_Position.z * 2 - gl_Position.w
-
-       */
-      SpvId components[4];
-      SpvId f_type = get_fvec_type(ctx, 32, 1);
-      SpvId base_type = get_fvec_type(ctx, 32, 4);
-      for (unsigned c = 0; c < 4; c++) {
-         uint32_t member[] = { c };
-
-         components[c] = spirv_builder_emit_composite_extract(&ctx->builder, 
f_type, result, member, 1);
-      }
-      components[2] = emit_binop(ctx, SpvOpFMul, f_type, components[2], 
emit_float_const(ctx, 32, 2.0));
-      components[2] = emit_binop(ctx, SpvOpFSub, f_type, components[2], 
components[3]);
-
-      result = spirv_builder_emit_composite_construct(&ctx->builder, base_type,
-                                                      components, 4);
-   }
    result = bitcast_to_uvec(ctx, result, bit_size, num_components);
    store_dest(ctx, &intr->dest, result, nir_type_uint);
 }
diff --git a/src/gallium/drivers/zink/zink_compiler.c 
b/src/gallium/drivers/zink/zink_compiler.c
index 004f4ce9ff1..83722e09647 100644
--- a/src/gallium/drivers/zink/zink_compiler.c
+++ b/src/gallium/drivers/zink/zink_compiler.c
@@ -332,13 +332,19 @@ zink_shader_compile(struct zink_screen *screen, struct 
zink_shader *zs, struct z
    nir_shader *nir = zs->nir;
    /* TODO: use a separate mem ctx here for ralloc */
    if (zs->has_geometry_shader) {
-      if (zs->nir->info.stage == MESA_SHADER_GEOMETRY)
+      if (zs->nir->info.stage == MESA_SHADER_GEOMETRY) {
          streamout = &zs->streamout;
+         NIR_PASS_V(nir, nir_lower_clip_halfz);
+      }
    } else if (zs->has_tess_shader) {
-      if (zs->nir->info.stage == MESA_SHADER_TESS_EVAL)
+      if (zs->nir->info.stage == MESA_SHADER_TESS_EVAL) {
          streamout = &zs->streamout;
-   } else
+         NIR_PASS_V(nir, nir_lower_clip_halfz);
+      }
+   } else {
       streamout = &zs->streamout;
+      NIR_PASS_V(nir, nir_lower_clip_halfz);
+   }
    if (!zs->streamout.so_info_slots)
        streamout = NULL;
    if (zs->nir->info.stage == MESA_SHADER_FRAGMENT) {
@@ -403,7 +409,6 @@ zink_shader_create(struct zink_screen *screen, struct 
nir_shader *nir,
     */
    if (nir->num_uniforms)
       NIR_PASS_V(nir, nir_lower_uniforms_to_ubo, 16);
-   NIR_PASS_V(nir, nir_lower_clip_halfz);
    if (nir->info.stage < MESA_SHADER_FRAGMENT)
       have_psiz = check_psiz(nir);
    if (nir->info.stage == MESA_SHADER_GEOMETRY)

_______________________________________________
mesa-commit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to