glsl/linker: simplify xfb_offset vs xfb_stride overflow check
Current implementation uses a complicated calculation which relies in
an implicit conversion to check the integral part of 2 division
results.
However, the calculation actually checks that the xfb_offset is
smaller or a multiplier of the xfb_stride. For example, while this is
expected to fail, it actually succeeds:
"
...
layout(xfb_buffer = 2, xfb_stride = 12) out block3 {
layout(xfb_offset = 0) vec3 c;
layout(xfb_offset = 12) vec3 d; // ERROR, requires stride of 24
};
...
"
Fixes: 2fab85aaea
("glsl: add xfb_stride link time validation")
Cc: Timothy Arceri <tarceri@itsqueeze.com>
Signed-off-by: Andres Gomez <agomez@igalia.com>
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
This commit is contained in:
parent
3be05dd267
commit
422882e78f
|
@ -1185,8 +1185,7 @@ tfeedback_decl::store(struct gl_context *ctx, struct gl_shader_program *prog,
|
|||
return false;
|
||||
}
|
||||
|
||||
if ((this->offset / 4) / info->Buffers[buffer].Stride !=
|
||||
(xfb_offset - 1) / info->Buffers[buffer].Stride) {
|
||||
if (xfb_offset > info->Buffers[buffer].Stride) {
|
||||
linker_error(prog, "xfb_offset (%d) overflows xfb_stride (%d) for "
|
||||
"buffer (%d)", xfb_offset * 4,
|
||||
info->Buffers[buffer].Stride * 4, buffer);
|
||||
|
|
Loading…
Reference in New Issue