i965: lower gl_PatchVerticesIn to a uniform
authorIago Toral Quiroga <itoral@igalia.com>
Tue, 9 Jan 2018 08:29:17 +0000 (09:29 +0100)
committerIago Toral Quiroga <itoral@igalia.com>
Wed, 10 Jan 2018 07:21:02 +0000 (08:21 +0100)
We want this here instead of nir_lower_system_values because for
Vulkan we don't want this lowering to take place.

v2: do not try to handle it as a system value directly for the SPIR-V
    path. In GL we rather handle it as a uniform like we do for the
    GLSL path (Jason).

v3: do this also for the TessEval stage (Jason)

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/mesa/drivers/dri/i965/brw_program.c

index 5b168c25e3d74bd50ac452b6871e20dff17fbea5..f6c7e4515c4aee9a6c1c9731ab8df15c5ccb8981 100644 (file)
@@ -88,6 +88,14 @@ brw_create_nir(struct brw_context *brw,
    }
    nir_validate_shader(nir);
 
+   /* Lower PatchVerticesIn from system value to uniform. This needs to
+    * happen before brw_preprocess_nir, since that will lower system values.
+    */
+   if ((stage == MESA_SHADER_TESS_CTRL && brw->screen->devinfo.gen >= 8) ||
+       stage == MESA_SHADER_TESS_EVAL) {
+      brw_nir_lower_patch_vertices_in_to_uniform(nir);
+   }
+
    nir = brw_preprocess_nir(brw->screen->compiler, nir);
 
    if (stage == MESA_SHADER_FRAGMENT) {