[Piglit] [PATCH] glsl-1.10 / glsl-1.20: Relax precision requirements of variable indexing tests
Brian Paul
brianp at vmware.com
Thu Aug 22 07:23:12 PDT 2013
On 08/21/2013 09:44 PM, Ian Romanick wrote:
> From: Ian Romanick <ian.d.romanick at intel.com>
>
> Many of these tests fail on older GPU such as Intel i915 due to the
> precision requirement. This is because many GPUs in this class only use
> 24-bit floats. Many also implement many instructions cheaply (with poor
> precision).
>
> Do a couple things to relax the precision requirement. First, use the
> distance squared instead of the distance. This saves an
> inverse-square-root and a multiple. The inverse-square-root has
> notoriously poor precision on old GPUs. Second, pick a precision that
> passes on at least one 24-bit float GPU. I picked 4e-9 because that was
> the smallest bound that would pass on i915.
>
> Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
> ---
> I suspect that r300 GPUs also fail these tests, but I don't have any of
> that hardware around. Could someone test before and after for me? :)
>
> This is also not the full patch. The full patch is ~300kb, so the list
> server would have rejected it. This is just a handful of representitive
> tests and the generator script.
>
> .../fs-temp-array-mat2-col-row-wr.shader_test | 4 +++-
> .../fs-temp-array-mat2-col-wr.shader_test | 4 +++-
> .../fs-temp-array-mat2-index-col-row-wr.shader_test | 4 +++-
> .../fs-temp-array-mat2-index-col-wr.shader_test | 4 +++-
> .../fs-temp-array-mat2-index-row-wr.shader_test | 4 +++-
> .../fs-temp-array-mat2-index-wr.shader_test | 4 +++-
> .../vs-temp-array-mat2-col-row-wr.shader_test | 6 +++---
> .../vs-temp-array-mat2-col-wr.shader_test | 6 +++---
> .../vs-temp-array-mat2-index-col-row-wr.shader_test | 6 +++---
> .../vs-temp-array-mat2-index-col-wr.shader_test | 6 +++---
> .../vs-temp-array-mat2-index-row-wr.shader_test | 6 +++---
> .../vs-temp-array-mat2-index-wr.shader_test | 6 +++---
> tests/spec/glsl-1.10/variable-index-write.sh | 15 +++++++++++++--
> 13 files changed, 49 insertions(+), 26 deletions(-)
>
> diff --git a/tests/spec/glsl-1.10/execution/variable-indexing/fs-temp-array-mat2-col-row-wr.shader_test b/tests/spec/glsl-1.10/execution/variable-indexing/fs-temp-array-mat2-col-row-wr.shader_test
> index 647cc02..ee9e77f 100644
> --- a/tests/spec/glsl-1.10/execution/variable-indexing/fs-temp-array-mat2-col-row-wr.shader_test
> +++ b/tests/spec/glsl-1.10/execution/variable-indexing/fs-temp-array-mat2-col-row-wr.shader_test
> @@ -16,6 +16,8 @@ uniform int row;
> uniform int col;
> uniform float value;
>
> +float distanceSqr(vec a, vec b) { vec diff = a - b; return abs(dot(diff, diff)); }
I believe you can omit the abs(). dot(x,x) will always be >= 0.
-Brian
More information about the Piglit
mailing list