mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-21 13:18:09 +02:00
spirv: preserve the explicit stride for untyped pointers with matrices
Make sure to cast with the deref type that contains more information
than the returned type because it's valid in SPIR-V.
This fixes dEQP-VK.binding_model.descriptor_heap.graphics.*_vectors and
also the PositiveGpuAV.HeapWithUntypedPointers VVL test.
Cc: mesa-stable
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
(cherry picked from commit 975ae01208)
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/41540>
This commit is contained in:
parent
dcb7739057
commit
4945cf1b44
2 changed files with 13 additions and 2 deletions
|
|
@ -904,7 +904,7 @@
|
|||
"description": "spirv: preserve the explicit stride for untyped pointers with matrices",
|
||||
"nominated": true,
|
||||
"nomination_type": 1,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"main_sha": null,
|
||||
"because_sha": null,
|
||||
"notes": null
|
||||
|
|
|
|||
|
|
@ -2665,9 +2665,20 @@ vtn_cast_pointer(struct vtn_builder *b, struct vtn_pointer *p,
|
|||
vtn_assert(pointed == casted->type->pointed);
|
||||
|
||||
if (p->deref) {
|
||||
const struct glsl_type *deref_type = pointed->type;
|
||||
|
||||
/* Preserve the explicit stride when casting an untyped pointer to a raw
|
||||
* SPIR-V matrix type because the raw type lacks it.
|
||||
*/
|
||||
if (glsl_type_is_matrix(p->deref->type) &&
|
||||
glsl_type_is_matrix(deref_type) &&
|
||||
glsl_get_explicit_stride(p->deref->type) > 0 &&
|
||||
glsl_get_explicit_stride(deref_type) == 0)
|
||||
deref_type = p->deref->type;
|
||||
|
||||
casted->deref = nir_build_deref_cast(&b->nb, &p->deref->def,
|
||||
p->deref->modes,
|
||||
pointed->type, 0);
|
||||
deref_type, 0);
|
||||
} else if (p->desc_index != NULL) {
|
||||
/* Nothing to do for descriptor index pointers. */
|
||||
} else if (p->var != NULL) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue