mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 05:08:08 +02:00
zink: store the tcs_vertices_out spirv word to the spirv_shader struct
Reviewed-by: Dave Airlie <airlied@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14976>
This commit is contained in:
parent
f2baa0638b
commit
cd9b099038
4 changed files with 14 additions and 4 deletions
|
|
@ -4036,7 +4036,8 @@ nir_to_spirv(struct nir_shader *s, const struct zink_shader_info *sinfo, uint32_
|
|||
if (!ret->words)
|
||||
goto fail;
|
||||
|
||||
ret->num_words = spirv_builder_get_words(&ctx.builder, ret->words, num_words, spirv_version);
|
||||
ret->num_words = spirv_builder_get_words(&ctx.builder, ret->words, num_words, spirv_version, &tcs_vertices_out_word);
|
||||
ret->tcs_vertices_out_word = tcs_vertices_out_word;
|
||||
assert(ret->num_words == num_words);
|
||||
|
||||
ralloc_free(ctx.mem_ctx);
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@
|
|||
struct spirv_shader {
|
||||
uint32_t *words;
|
||||
size_t num_words;
|
||||
uint32_t tcs_vertices_out_word;
|
||||
};
|
||||
|
||||
struct nir_shader;
|
||||
|
|
|
|||
|
|
@ -1614,7 +1614,8 @@ spirv_builder_get_num_words(struct spirv_builder *b)
|
|||
|
||||
size_t
|
||||
spirv_builder_get_words(struct spirv_builder *b, uint32_t *words,
|
||||
size_t num_words, uint32_t spirv_version)
|
||||
size_t num_words, uint32_t spirv_version,
|
||||
uint32_t *tcs_vertices_out_word)
|
||||
{
|
||||
assert(num_words >= spirv_builder_get_num_words(b));
|
||||
|
||||
|
|
@ -1644,10 +1645,16 @@ spirv_builder_get_words(struct spirv_builder *b, uint32_t *words,
|
|||
&b->instructions
|
||||
};
|
||||
|
||||
bool find_tcs_vertices_out = *tcs_vertices_out_word > 0;
|
||||
for (int i = 0; i < ARRAY_SIZE(buffers); ++i) {
|
||||
const struct spirv_buffer *buffer = buffers[i];
|
||||
for (int j = 0; j < buffer->num_words; ++j)
|
||||
for (int j = 0; j < buffer->num_words; ++j) {
|
||||
if (find_tcs_vertices_out && buffer == &b->exec_modes && *tcs_vertices_out_word == j) {
|
||||
*tcs_vertices_out_word = written;
|
||||
find_tcs_vertices_out = false;
|
||||
}
|
||||
words[written++] = buffer->words[j];
|
||||
}
|
||||
}
|
||||
|
||||
assert(written == spirv_builder_get_num_words(b));
|
||||
|
|
|
|||
|
|
@ -456,7 +456,8 @@ spirv_builder_get_num_words(struct spirv_builder *b);
|
|||
|
||||
size_t
|
||||
spirv_builder_get_words(struct spirv_builder *b, uint32_t *words,
|
||||
size_t num_words, uint32_t spirv_version);
|
||||
size_t num_words, uint32_t spirv_version,
|
||||
uint32_t *tcs_vertices_out_word);
|
||||
|
||||
void
|
||||
spirv_builder_emit_vertex(struct spirv_builder *b, uint32_t stream);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue