#include "r600_asm.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Valid shader configurations:
+ *
+ * API shaders VS | TCS | TES | GS |pass| PS
+ * are compiled as: | | | |thru|
+ * | | | | |
+ * Only VS & PS: VS | -- | -- | -- | -- | PS
+ * With GS: ES | -- | -- | GS | VS | PS
+ * With Tessel.: LS | HS | VS | -- | -- | PS
+ * With both: LS | HS | ES | GS | VS | PS
+ */
+
struct r600_shader_io {
unsigned name;
unsigned gpr;
int spi_sid;
unsigned interpolate;
unsigned ij_index;
- boolean centroid;
+ unsigned interpolate_location; // TGSI_INTERPOLATE_LOC_CENTER, CENTROID, SAMPLE
unsigned lds_pos; /* for evergreen */
unsigned back_color_input;
unsigned write_mask;
unsigned ninput;
unsigned noutput;
unsigned nlds;
- struct r600_shader_io input[40];
- struct r600_shader_io output[40];
+ struct r600_shader_io input[64];
+ struct r600_shader_io output[64];
boolean uses_kill;
boolean fs_write_all;
boolean two_side;
boolean uses_tex_buffers;
boolean gs_prim_id_input;
- /* geometry shader properties */
- unsigned gs_input_prim;
- unsigned gs_output_prim;
- unsigned gs_max_out_vertices;
- unsigned gs_num_invocations;
- /* size in bytes of a data item in the ring (single vertex data) */
- unsigned ring_item_size;
+ uint8_t ps_conservative_z;
+
+ /* Size in bytes of a data item in the ring(s) (single vertex data).
+ Stages with only one ring items 123 will be set to 0. */
+ unsigned ring_item_sizes[4];
unsigned indirect_files;
unsigned max_arrays;
unsigned num_arrays;
unsigned vs_as_es;
+ unsigned vs_as_ls;
+ unsigned vs_as_gs_a;
+ unsigned tes_as_es;
+ unsigned tcs_prim_mode;
+ unsigned ps_prim_id_input;
struct r600_shader_array * arrays;
+
+ boolean uses_doubles;
};
-struct r600_shader_key {
- unsigned color_two_side:1;
- unsigned alpha_to_one:1;
- unsigned nr_cbufs:4;
- unsigned vs_as_es:1;
+union r600_shader_key {
+ struct {
+ unsigned nr_cbufs:4;
+ unsigned color_two_side:1;
+ unsigned alpha_to_one:1;
+ } ps;
+ struct {
+ unsigned prim_id_out:8;
+ unsigned as_es:1; /* export shader */
+ unsigned as_ls:1; /* local shader */
+ unsigned as_gs_a:1;
+ } vs;
+ struct {
+ unsigned as_es:1;
+ } tes;
+ struct {
+ unsigned prim_mode:3;
+ } tcs;
};
struct r600_shader_array {
unsigned flatshade;
unsigned pa_cl_vs_out_cntl;
unsigned nr_ps_color_outputs;
- struct r600_shader_key key;
+ union r600_shader_key key;
unsigned db_shader_control;
unsigned ps_depth_export;
+ unsigned enabled_stream_buffers_mask;
};
+/* return the table index 0-5 for TGSI_INTERPOLATE_LINEAR/PERSPECTIVE and
+ TGSI_INTERPOLATE_LOC_CENTER/SAMPLE/COUNT. Other input values return -1. */
+int eg_get_interpolator_index(unsigned interpolate, unsigned location);
+
+int r600_get_lds_unique_index(unsigned semantic_name, unsigned index);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+
#endif