From: Andres Gomez Date: Fri, 18 Jan 2019 16:33:10 +0000 (+0200) Subject: glsl/linker: simplify xfb_offset vs xfb_stride overflow check X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=422882e78f2cf0ab69ff4a58f3c9465fcb5fef0d;p=mesa.git 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: 2fab85aaea5 ("glsl: add xfb_stride link time validation") Cc: Timothy Arceri Signed-off-by: Andres Gomez Reviewed-by: Timothy Arceri --- diff --git a/src/compiler/glsl/link_varyings.cpp b/src/compiler/glsl/link_varyings.cpp index ff225dbcfcc..bf5d7f86f80 100644 --- a/src/compiler/glsl/link_varyings.cpp +++ b/src/compiler/glsl/link_varyings.cpp @@ -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);