#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;
struct spirv_buffer types_const_defs;
struct hash_table *types;
+ struct hash_table *consts;
struct spirv_buffer instructions;
SpvId prev_id;
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);
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);
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);
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);
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);
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,
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);