mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-26 17:10:11 +01:00
spirv: consider bitsize when handling OpSwitch cases
This reverts commit7665383a33and is squashed together with https://patchwork.freedesktop.org/patch/194610/ (spirv: avoid infinite loop / freeze in vtn_cfg_walk_blocks()) which fixes https://bugs.freedesktop.org/show_bug.cgi?id=104359 properly. Fixes:9702fac68e(spirv: consider bitsize when handling OpSwitch cases) Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=104359 Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
This commit is contained in:
parent
e0eaeef3e7
commit
5c5f2eaa08
1 changed files with 11 additions and 3 deletions
|
|
@ -513,13 +513,14 @@ vtn_cfg_walk_blocks(struct vtn_builder *b, struct list_head *cf_list,
|
|||
"Selector of OpSelect must have a type of OpTypeInt");
|
||||
|
||||
bool is_default = true;
|
||||
const uint bitsize = nir_alu_type_get_type_size(cond_type);
|
||||
for (const uint32_t *w = block->branch + 2; w < branch_end;) {
|
||||
uint64_t literal = 0;
|
||||
if (!is_default) {
|
||||
if (nir_alu_type_get_type_size(cond_type) <= 32) {
|
||||
if (bitsize <= 32) {
|
||||
literal = *(w++);
|
||||
} else {
|
||||
assert(nir_alu_type_get_type_size(cond_type) == 64);
|
||||
assert(bitsize == 64);
|
||||
literal = vtn_u64_literal(w);
|
||||
w += 2;
|
||||
}
|
||||
|
|
@ -544,10 +545,17 @@ vtn_cfg_walk_blocks(struct vtn_builder *b, struct list_head *cf_list,
|
|||
/* Finally, we walk over all of the cases one more time and put
|
||||
* them in fall-through order.
|
||||
*/
|
||||
for (const uint32_t *w = block->branch + 2; w < branch_end; w += 2) {
|
||||
for (const uint32_t *w = block->branch + 2; w < branch_end;) {
|
||||
struct vtn_block *case_block =
|
||||
vtn_value(b, *w, vtn_value_type_block)->block;
|
||||
|
||||
if (bitsize <= 32) {
|
||||
w += 2;
|
||||
} else {
|
||||
assert(bitsize == 64);
|
||||
w += 3;
|
||||
}
|
||||
|
||||
if (case_block == break_block)
|
||||
continue;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue