freedreno/a6xx: vertex_id is not _zero_based
authorRob Clark <robdclark@gmail.com>
Tue, 26 Feb 2019 13:28:09 +0000 (08:28 -0500)
committerRob Clark <robdclark@gmail.com>
Tue, 26 Feb 2019 18:19:44 +0000 (13:19 -0500)
Fixes dEQP-GLES31.functional.draw_base_vertex.draw_elements_base_vertex.builtin_variable.vertex_id

Signed-off-by: Rob Clark <robdclark@gmail.com>
src/freedreno/ir3/ir3_nir.c
src/gallium/drivers/freedreno/a6xx/fd6_program.c

index 5c568bd75c7050e42ebb258ae04c645534b88bd5..4f5fe5dfd6510d512f5083579cc08aec47191c7e 100644 (file)
@@ -51,9 +51,32 @@ static const nir_shader_compiler_options options = {
                .lower_helper_invocation = true,
 };
 
+/* we don't want to lower vertex_id to _zero_based on newer gpus: */
+static const nir_shader_compiler_options options_a6xx = {
+               .lower_fpow = true,
+               .lower_scmp = true,
+               .lower_flrp32 = true,
+               .lower_flrp64 = true,
+               .lower_ffract = true,
+               .lower_fmod32 = true,
+               .lower_fmod64 = true,
+               .lower_fdiv = true,
+               .lower_isign = true,
+               .lower_ldexp = true,
+               .fuse_ffma = true,
+               .native_integers = true,
+               .vertex_id_zero_based = false,
+               .lower_extract_byte = true,
+               .lower_extract_word = true,
+               .lower_all_io_to_temps = true,
+               .lower_helper_invocation = true,
+};
+
 const nir_shader_compiler_options *
 ir3_get_compiler_options(struct ir3_compiler *compiler)
 {
+       if (compiler->gpu_id >= 600)
+               return &options_a6xx;
        return &options;
 }
 
index 93e2c58b1388f883cff57fc979aeb1ab52889ab9..13c5778e427252d26b4ba8be1c0ec59cd28bd77e 100644 (file)
@@ -305,7 +305,7 @@ setup_stateobj(struct fd_ringbuffer *ring,
 
        pos_regid = ir3_find_output_regid(s[VS].v, VARYING_SLOT_POS);
        psize_regid = ir3_find_output_regid(s[VS].v, VARYING_SLOT_PSIZ);
-       vertex_regid = ir3_find_sysval_regid(s[VS].v, SYSTEM_VALUE_VERTEX_ID_ZERO_BASE);
+       vertex_regid = ir3_find_sysval_regid(s[VS].v, SYSTEM_VALUE_VERTEX_ID);
        instance_regid = ir3_find_sysval_regid(s[VS].v, SYSTEM_VALUE_INSTANCE_ID);
 
        if (s[FS].v->color0_mrt) {