mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 17:48:10 +02:00
nir/large_constants: Eliminate out-of-bounds writes to large constants
Out-of-bounds writes could be eliminated per spec: Section 5.11 (Out-of-Bounds Accesses) of the GLSL 4.60 spec says: "In the subsections described above for array, vector, matrix and structure accesses, any out-of-bounds access produced undefined behavior.... Out-of-bounds writes may be discarded or overwrite other variables of the active program." Fixes:1235850522Signed-off-by: Danylo Piliaiev <danylo.piliaiev@globallogic.com> Reviewed-by: Eric Anholt <eric@anholt.net> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6428> (cherry picked from commit0ba82f78a5)
This commit is contained in:
parent
45a937e040
commit
ef29f3758e
2 changed files with 6 additions and 3 deletions
|
|
@ -427,7 +427,7 @@
|
|||
"description": "nir/large_constants: Eliminate out-of-bounds writes to large constants",
|
||||
"nominated": true,
|
||||
"nomination_type": 1,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"master_sha": null,
|
||||
"because_sha": "1235850522cd5e7b07701f7065996430ca1514b6"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -118,8 +118,11 @@ handle_constant_store(void *mem_ctx, struct var_info *info,
|
|||
info->constant_data = rzalloc_size(mem_ctx, var_size);
|
||||
}
|
||||
|
||||
char *dst = (char *)info->constant_data +
|
||||
nir_deref_instr_get_const_offset(deref, size_align);
|
||||
const unsigned offset = nir_deref_instr_get_const_offset(deref, size_align);
|
||||
if (offset >= info->constant_data_size)
|
||||
return;
|
||||
|
||||
char *dst = (char *)info->constant_data + offset;
|
||||
|
||||
for (unsigned i = 0; i < num_components; i++) {
|
||||
if (!(writemask & (1 << i)))
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue