compiler: Add a system value and varying for ViewIndex
authorJason Ekstrand <jason.ekstrand@intel.com>
Tue, 21 Mar 2017 22:22:10 +0000 (15:22 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Wed, 3 May 2017 18:25:46 +0000 (11:25 -0700)
Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
src/compiler/nir/nir.c
src/compiler/nir/nir_intrinsics.h
src/compiler/shader_enums.c
src/compiler/shader_enums.h
src/mesa/program/prog_print.c

index 0abf9b6212e4fd4497a6e62f600b56f406fed357..8f7ed8a50f66b80a5dc1cc18d917a10282945cfc 100644 (file)
@@ -1905,6 +1905,8 @@ nir_intrinsic_from_system_value(gl_system_value val)
       return nir_intrinsic_load_patch_vertices_in;
    case SYSTEM_VALUE_HELPER_INVOCATION:
       return nir_intrinsic_load_helper_invocation;
+   case SYSTEM_VALUE_VIEW_INDEX:
+      return nir_intrinsic_load_view_index;
    default:
       unreachable("system value does not directly correspond to intrinsic");
    }
@@ -1956,6 +1958,8 @@ nir_system_value_from_intrinsic(nir_intrinsic_op intrin)
       return SYSTEM_VALUE_VERTICES_IN;
    case nir_intrinsic_load_helper_invocation:
       return SYSTEM_VALUE_HELPER_INVOCATION;
+   case nir_intrinsic_load_view_index:
+      return SYSTEM_VALUE_VIEW_INDEX;
    default:
       unreachable("intrinsic doesn't produce a system value");
    }
index 3a519a73dddcabadf36113e2e371c6dc03fb3b3c..21e7d904b789d298f0a6429573bf75b068cd642c 100644 (file)
@@ -329,6 +329,7 @@ SYSTEM_VALUE(helper_invocation, 1, 0, xx, xx, xx)
 SYSTEM_VALUE(channel_num, 1, 0, xx, xx, xx)
 SYSTEM_VALUE(alpha_ref_float, 1, 0, xx, xx, xx)
 SYSTEM_VALUE(layer_id, 1, 0, xx, xx, xx)
+SYSTEM_VALUE(view_index, 1, 0, xx, xx, xx)
 
 /* Blend constant color values.  Float values are clamped. */
 SYSTEM_VALUE(blend_const_color_r_float, 1, 0, xx, xx, xx)
index ca62cdaf500bd8bb6ef4f38a587ad646df5bd8ae..b2ca80b49c2281400791da17952c5c87ef0c434a 100644 (file)
@@ -162,6 +162,7 @@ gl_varying_slot_name(gl_varying_slot slot)
       ENUM(VARYING_SLOT_TESS_LEVEL_INNER),
       ENUM(VARYING_SLOT_BOUNDING_BOX0),
       ENUM(VARYING_SLOT_BOUNDING_BOX1),
+      ENUM(VARYING_SLOT_VIEW_INDEX),
       ENUM(VARYING_SLOT_VAR0),
       ENUM(VARYING_SLOT_VAR1),
       ENUM(VARYING_SLOT_VAR2),
@@ -232,6 +233,7 @@ gl_system_value_name(gl_system_value sysval)
      ENUM(SYSTEM_VALUE_GLOBAL_INVOCATION_ID),
      ENUM(SYSTEM_VALUE_WORK_GROUP_ID),
      ENUM(SYSTEM_VALUE_NUM_WORK_GROUPS),
+     ENUM(SYSTEM_VALUE_VIEW_INDEX),
      ENUM(SYSTEM_VALUE_VERTEX_CNT),
    };
    STATIC_ASSERT(ARRAY_SIZE(names) == SYSTEM_VALUE_MAX);
index 930d99748e7c6a137865268db1b17ad6c4d78b30..07db4767f86235d4ce93fff2fb7602c69db17ce8 100644 (file)
@@ -217,6 +217,7 @@ typedef enum
    VARYING_SLOT_TESS_LEVEL_INNER, /* Only appears as TCS output. */
    VARYING_SLOT_BOUNDING_BOX0, /* Only appears as TCS output. */
    VARYING_SLOT_BOUNDING_BOX1, /* Only appears as TCS output. */
+   VARYING_SLOT_VIEW_INDEX,
    VARYING_SLOT_VAR0, /* First generic varying slot */
    /* the remaining are simply for the benefit of gl_varying_slot_name()
     * and not to be construed as an upper bound:
@@ -535,6 +536,9 @@ typedef enum
    SYSTEM_VALUE_LOCAL_GROUP_SIZE,
    /*@}*/
 
+   /** Required for VK_KHX_multiview */
+   SYSTEM_VALUE_VIEW_INDEX,
+
    /**
     * Driver internal vertex-count, used (for example) for drivers to
     * calculate stride for stream-out outputs.  Not externally visible.
index 6d04a382865416143c3d205a00a482eca3a317bb..b32ce150da3c2756ed2eedcb32356d3c4a9c52db 100644 (file)
@@ -153,6 +153,7 @@ arb_input_attrib_string(GLuint index, GLenum progType)
       "fragment.(twenty-seven)", /* VARYING_SLOT_CULL_DIST1 */
       "fragment.(twenty-eight)", /* VARYING_SLOT_BOUNDING_BOX0 */
       "fragment.(twenty-nine)", /* VARYING_SLOT_BOUNDING_BOX1 */
+      "fragment.(thirty)", /* VARYING_SLOT_VIEW_INDEX */
       "fragment.varying[0]",
       "fragment.varying[1]",
       "fragment.varying[2]",
@@ -284,6 +285,7 @@ arb_output_attrib_string(GLuint index, GLenum progType)
       "result.(twenty-seven)", /* VARYING_SLOT_CULL_DIST1 */
       "result.(twenty-eight)", /* VARYING_SLOT_BOUNDING_BOX0 */
       "result.(twenty-nine)", /* VARYING_SLOT_BOUNDING_BOX1 */
+      "result.(thirty)", /* VARYING_SLOT_VIEW_INDEX */
       "result.varying[0]",
       "result.varying[1]",
       "result.varying[2]",