gallivm: fix pow(0, y) to be 0
authorDave Airlie <airlied@redhat.com>
Tue, 29 Sep 2020 18:49:43 +0000 (04:49 +1000)
committerMarge Bot <eric+marge@anholt.net>
Tue, 29 Sep 2020 21:51:22 +0000 (21:51 +0000)
The log2(0) was producing bad results.

Fixes:
piglit pow tests on llvmpipe.

Reviewed-by: Roland Scheidegger <sroland@vmware.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6907>

.gitlab-ci/piglit/quick_shader.txt
.gitlab-ci/traces-llvmpipe.yml
src/gallium/auxiliary/gallivm/lp_bld_arit.c

index 8a6afd4..a4b3a5c 100644 (file)
@@ -302,21 +302,8 @@ spec/arb_shader_ballot/execution/fs-readinvocation-uint: skip
 spec/arb_shader_ballot/execution/fs-readinvocation-uint-uniform: skip
 spec/arb_shader_clock/execution/clock: skip
 spec/arb_shader_clock/execution/clock2x32: skip
-spec/arb_shader_precision/fs-pow-float-float: fail
-spec/arb_shader_precision/fs-pow-vec2-vec2: fail
-spec/arb_shader_precision/fs-pow-vec3-vec3: fail
-spec/arb_shader_precision/fs-pow-vec4-vec4: fail
-spec/arb_shader_precision/gs-pow-float-float: fail
-spec/arb_shader_precision/gs-pow-vec2-vec2: fail
-spec/arb_shader_precision/gs-pow-vec3-vec3: fail
-spec/arb_shader_precision/gs-pow-vec4-vec4: fail
-spec/arb_shader_precision/vs-pow-float-float: fail
-spec/arb_shader_precision/vs-pow-vec2-vec2: fail
-spec/arb_shader_precision/vs-pow-vec3-vec3: fail
-spec/arb_shader_precision/vs-pow-vec4-vec4: fail
 spec/arb_shader_storage_buffer_object/execution/ssbo-atomiccompswap-int: fail
 spec/arb_shader_subroutine/execution/simple-subroutine-dlist: skip
-spec/arb_tessellation_shader/execution/built-in-functions/tcs-pow-float-float: fail
 spec/arb_tessellation_shader/execution/compatibility/tcs-tes-ff-frag: skip
 spec/arb_tessellation_shader/execution/compatibility/tes-clamp-vertex-color: skip
 spec/arb_tessellation_shader/execution/compatibility/tes-clip-vertex-different-from-position: skip
@@ -365,12 +352,9 @@ spec/ext_shader_framebuffer_fetch_non_coherent/execution/gles3/nonuniform-ms8: s
 spec/ext_shader_framebuffer_fetch_non_coherent/execution/gles3/simple-ms16: skip
 spec/ext_shader_framebuffer_fetch_non_coherent/execution/gles3/simple-ms8: skip
 spec/ext_shader_image_load_formatted/execution/image_checkerboard: skip
-spec/glsl-1.10/execution/built-in-functions/fs-pow-float-float: fail
-spec/glsl-1.10/execution/built-in-functions/vs-pow-float-float: fail
 spec/glsl-1.10/preprocessor/extension-defined-test: skip
 spec/glsl-1.10/preprocessor/extension-if-1: skip
 spec/glsl-1.30/execution/fs-texturegrad-miplevels: fail
-spec/glsl-1.50/execution/built-in-functions/gs-pow-float-float: fail
 spec/glsl-1.50/execution/compatibility/clipping/gs-clip-vertex-const-accept: skip
 spec/glsl-1.50/execution/compatibility/clipping/gs-clip-vertex-const-reject: skip
 spec/glsl-1.50/execution/compatibility/clipping/gs-clip-vertex-different-from-position: skip
@@ -491,7 +475,6 @@ spec/glsl-4.00/execution/inout/vs-out-fs-in-s2/2/2-vec3-double: crash
 spec/glsl-4.00/execution/inout/vs-out-fs-in-s2/3-double-float: crash
 spec/glsl-4.00/execution/inout/vs-out-fs-in-s2/3-dvec2-float: crash
 spec/glsl-4.00/execution/inout/vs-out-fs-in-s2/3-dvec3-float: crash
-spec/glsl-4.30/execution/built-in-functions/cs-pow-float-float: fail
 spec/glsl-4.50/execution/ssbo-atomiccompswap-int: fail
 spec/intel_shader_atomic_float_minmax/execution/shared-atomiccompswap-float: skip
 spec/intel_shader_atomic_float_minmax/execution/shared-atomicexchange-float: skip
@@ -586,8 +569,8 @@ spec/nv_viewport_swizzle/viewport_swizzle: skip
 summary:
        name:  results
        ----  --------
-       pass:    15790
-       fail:      100
+       pass:    15807
+       fail:       83
       crash:      170
        skip:      315
     timeout:        0
index acc7e89..73602ef 100644 (file)
@@ -77,7 +77,7 @@ traces:
   - path: bgfx/09-hdr.rdc
     expectations:
       - device: gl-vmware-llvmpipe
-        checksum: 5cb45bd2636213242f9f2088ceb6ed67
+        checksum: 6bd4f501dfbee14fcea6912ced5a068d
   - path: bgfx/10-font.rdc
     expectations:
       - device: gl-vmware-llvmpipe
index dbd526d..717ab14 100644 (file)
@@ -3070,7 +3070,11 @@ lp_build_pow(struct lp_build_context *bld,
                    __FUNCTION__);
    }
 
-   return lp_build_exp2(bld, lp_build_mul(bld, lp_build_log2(bld, x), y));
+   LLVMValueRef cmp = lp_build_cmp(bld, PIPE_FUNC_EQUAL, x, lp_build_const_vec(bld->gallivm, bld->type, 0.0f));
+   LLVMValueRef res = lp_build_exp2(bld, lp_build_mul(bld, lp_build_log2(bld, x), y));
+
+   res = lp_build_select(bld, cmp, lp_build_const_vec(bld->gallivm, bld->type, 0.0f), res);
+   return res;
 }