radeonsi: stop using TGSI_PROPERTY_FS_COLOR0_WRITES_ALL_CBUFS
[mesa.git] / src / gallium / drivers / zink / nir_to_spirv / spirv_builder.h
index 2fecaf445f27d44a867078091d1a25a3caea29bc..487d4f79fda153ee2cbfbea7df535e2477524985 100644 (file)
 #include <stdint.h>
 #include <stdlib.h>
 
+struct hash_table;
+
 struct spirv_buffer {
    uint32_t *words;
    size_t num_words, room;
 };
 
 struct spirv_builder {
+   void *mem_ctx;
+
    struct spirv_buffer capabilities;
+   struct spirv_buffer extensions;
    struct spirv_buffer imports;
    struct spirv_buffer memory_model;
    struct spirv_buffer entry_points;
@@ -47,6 +52,7 @@ struct spirv_builder {
 
    struct spirv_buffer types_const_defs;
    struct hash_table *types;
+   struct hash_table *consts;
 
    struct spirv_buffer instructions;
    SpvId prev_id;
@@ -61,6 +67,9 @@ spirv_builder_new_id(struct spirv_builder *b)
 void
 spirv_builder_emit_cap(struct spirv_builder *b, SpvCapability cap);
 
+void
+spirv_builder_emit_extension(struct spirv_builder *b, const char *ext);
+
 void
 spirv_builder_emit_source(struct spirv_builder *b, SpvSourceLanguage lang,
                           uint32_t version);
@@ -90,6 +99,9 @@ void
 spirv_builder_emit_builtin(struct spirv_builder *b, SpvId target,
                            SpvBuiltIn builtin);
 
+void
+spirv_builder_emit_index(struct spirv_builder *b, SpvId target, int index);
+
 void
 spirv_builder_emit_descriptor_set(struct spirv_builder *b, SpvId target,
                                   uint32_t descriptor_set);
@@ -102,6 +114,18 @@ void
 spirv_builder_emit_array_stride(struct spirv_builder *b, SpvId target,
                                 uint32_t stride);
 
+void
+spirv_builder_emit_offset(struct spirv_builder *b, SpvId target,
+                          uint32_t offset);
+
+void
+spirv_builder_emit_xfb_buffer(struct spirv_builder *b, SpvId target,
+                              uint32_t buffer);
+
+void
+spirv_builder_emit_xfb_stride(struct spirv_builder *b, SpvId target,
+                              uint32_t stride);
+
 void
 spirv_builder_emit_member_offset(struct spirv_builder *b, SpvId target,
                                  uint32_t member, uint32_t offset);
@@ -174,7 +198,15 @@ spirv_builder_emit_vector_shuffle(struct spirv_builder *b, SpvId result_type,
                                   SpvId vector_1, SpvId vector_2,
                                   const uint32_t components[],
                                   size_t num_components);
-
+SpvId
+spirv_builder_emit_vector_extract(struct spirv_builder *b, SpvId result_type,
+                                  SpvId vector_1,
+                                  uint32_t component);
+SpvId
+spirv_builder_emit_vector_insert(struct spirv_builder *b, SpvId result_type,
+                                  SpvId vector_1,
+                                  SpvId component,
+                                  uint32_t index);
 void
 spirv_builder_emit_branch(struct spirv_builder *b, SpvId label);
 
@@ -182,6 +214,10 @@ void
 spirv_builder_emit_selection_merge(struct spirv_builder *b, SpvId merge_block,
                                    SpvSelectionControlMask selection_control);
 
+void
+spirv_builder_loop_merge(struct spirv_builder *b, SpvId merge_block,
+                         SpvId cont_target, SpvLoopControlMask loop_control);
+
 void
 spirv_builder_emit_branch_conditional(struct spirv_builder *b, SpvId condition,
                                       SpvId true_label, SpvId false_label);
@@ -194,18 +230,40 @@ void
 spirv_builder_set_phi_operand(struct spirv_builder *b, size_t position,
                               size_t index, SpvId variable, SpvId parent);
 
+void
+spirv_builder_emit_kill(struct spirv_builder *b);
+
 
 SpvId
-spirv_builder_emit_image_sample_implicit_lod(struct spirv_builder *b,
-                                             SpvId result_type,
-                                             SpvId sampled_image,
-                                             SpvId coordinate);
+spirv_builder_emit_image_sample(struct spirv_builder *b,
+                                SpvId result_type,
+                                SpvId sampled_image,
+                                SpvId coordinate,
+                                bool proj,
+                                SpvId lod,
+                                SpvId bias,
+                                SpvId dref,
+                                SpvId dx,
+                                SpvId dy,
+                                SpvId offset);
 
 SpvId
-spirv_builder_emit_image_sample_proj_implicit_lod(struct spirv_builder *b,
-                                                  SpvId result_type,
-                                                  SpvId sampled_image,
-                                                  SpvId coordinate);
+spirv_builder_emit_image(struct spirv_builder *b, SpvId result_type,
+                         SpvId sampled_image);
+
+SpvId
+spirv_builder_emit_image_fetch(struct spirv_builder *b,
+                               SpvId result_type,
+                               SpvId image,
+                               SpvId coordinate,
+                               SpvId lod,
+                               SpvId sample);
+
+SpvId
+spirv_builder_emit_image_query_size(struct spirv_builder *b,
+                                    SpvId result_type,
+                                    SpvId image,
+                                    SpvId lod);
 
 SpvId
 spirv_builder_emit_ext_inst(struct spirv_builder *b, SpvId result_type,
@@ -243,6 +301,10 @@ SpvId
 spirv_builder_type_vector(struct spirv_builder *b, SpvId component_type,
                           unsigned component_count);
 
+SpvId
+spirv_builder_type_matrix(struct spirv_builder *b, SpvId component_type,
+                          unsigned component_count);
+
 SpvId
 spirv_builder_type_array(struct spirv_builder *b, SpvId component_type,
                          SpvId length);