r600/sfn: Handle LDS output in VS
authorGert Wollny <gert.wollny@collabora.com>
Wed, 15 Apr 2020 14:48:00 +0000 (16:48 +0200)
committerMarge Bot <eric+marge@anholt.net>
Tue, 28 Apr 2020 08:06:33 +0000 (08:06 +0000)
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4714>

src/gallium/drivers/r600/sfn/sfn_shader_base.h
src/gallium/drivers/r600/sfn/sfn_shader_vertex.cpp

index 70062db625836ba68b5500b30c2350b0f806328f..44376471819df40b0c52d880f3f323dbab1ac76c 100644 (file)
@@ -110,17 +110,25 @@ protected:
                              bool as_last = true);
 
    void inc_atomic_file_count();
-   std::bitset<8> m_sv_values;
 
    enum ESlots {
       es_face,
       es_instanceid,
+      es_invocation_id,
+      es_patch_id,
       es_pos,
+      es_rel_patch_id,
       es_sample_mask_in,
       es_sample_id,
+      es_tess_factor_base,
       es_vertexid,
+      es_tess_coord,
+      es_primitive_id,
+      es_last
    };
 
+   std::bitset<es_last> m_sv_values;
+
 private:
    virtual bool allocate_reserved_registers() = 0;
 
index ba8a583d78044f23a6bda30eff6528f505ca0ffc..8337553aec2c2068c0f92271d440dffb8586b15a 100644 (file)
@@ -28,6 +28,7 @@
 #include "pipe/p_defines.h"
 #include "tgsi/tgsi_from_mesa.h"
 #include "sfn_shader_vertex.h"
+#include "sfn_instruction_lds.h"
 
 #include <queue>
 
@@ -133,6 +134,9 @@ bool VertexShaderFromNir::scan_sysvalue_access(nir_instr *instr)
       case nir_intrinsic_load_instance_id:
          m_sv_values.set(es_instanceid);
          break;
+      case nir_intrinsic_load_tcs_rel_patch_id_r600:
+         m_sv_values.set(es_rel_patch_id);
+         break;
       default:
          ;
       }
@@ -148,8 +152,12 @@ bool VertexShaderFromNir::emit_intrinsic_instruction_override(nir_intrinsic_inst
    switch (instr->intrinsic) {
    case nir_intrinsic_load_vertex_id:
       return load_preloaded_value(instr->dest, 0, m_vertex_id);
+   case nir_intrinsic_load_tcs_rel_patch_id_r600:
+      return load_preloaded_value(instr->dest, 0, m_rel_vertex_id);
    case nir_intrinsic_load_instance_id:
       return load_preloaded_value(instr->dest, 0, m_instance_id);
+   case nir_intrinsic_store_local_shared_r600:
+      return emit_store_local_shared(instr);
    default:
       return false;
    }