diff options
author | Mike Blumenkrantz <michael.blumenkrantz@gmail.com> | 2020-07-15 12:24:35 -0400 |
---|---|---|
committer | Marge Bot <eric+marge@anholt.net> | 2020-10-15 11:48:12 +0000 |
commit | 4231cc2e99a1a8628a62b27963127229e056d227 (patch) | |
tree | 3a46a5d8b92f64e747e216c0be6832ba8faa21cd | |
parent | d75d12f5073fdc92a30f9c2335648f7ea97c7d03 (diff) |
glsl: more accurately handle swizzle in 64bit varying split with no left value
as implied in the surrounding code, left_components can be 0 here, in which
case creating a left swizzle is unnecessary (and triggers an assert)
this moves a failing assert farther down the stack to a more useful location
when trying to pack e.g., struct[3] { dvec3; float; }
ref spec@arb_gpu_shader_fp64@execution@inout@vs-out-fs-in-s1-s2@3-dvec2-float
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7134>
-rw-r--r-- | .gitlab-ci/piglit/quick_shader.txt | 26 | ||||
-rw-r--r-- | src/compiler/glsl/lower_packed_varyings.cpp | 13 |
2 files changed, 14 insertions, 25 deletions
diff --git a/.gitlab-ci/piglit/quick_shader.txt b/.gitlab-ci/piglit/quick_shader.txt index a4b3a5ccc4f..537c9175109 100644 --- a/.gitlab-ci/piglit/quick_shader.txt +++ b/.gitlab-ci/piglit/quick_shader.txt @@ -238,23 +238,15 @@ spec/arb_gpu_shader_fp64/execution/inout/vs-out-fs-in-s2/3-double-float: crash spec/arb_gpu_shader_fp64/execution/inout/vs-out-fs-in-s2/3-dvec2-float: crash spec/arb_gpu_shader_fp64/execution/inout/vs-out-fs-in-s2/3-dvec3-float: crash spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-float-float-float-i64vec2: crash -spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-float-float-float-i64vec3: crash -spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-float-float-float-int64_t: crash +spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-float-float-float-i64vec3: fail spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-float-float-float-u64vec2: crash -spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-float-float-float-u64vec3: crash -spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-float-float-float-uint64_t: crash -spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-float-i64vec2: crash +spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-float-i64vec2: fail spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-float-i64vec3: crash -spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-float-int64_t/3/2: crash -spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-float-u64vec2: crash spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-float-u64vec3: crash -spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-float-uint64_t/3/2: crash +spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-float-uint64_t/3/2: fail spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-float/3-i64vec2: crash -spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-float/3-i64vec3: crash -spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-float/3-int64_t: crash +spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-float/3-i64vec3: fail spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-float/3-u64vec2: crash -spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-float/3-u64vec3: crash -spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-float/3-uint64_t: crash spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-s2/2-s3/2-float-int64_t: crash spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-s2/2-s3/2-float-uint64_t: crash spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-s2/2-s3/2-vec3-int64_t: crash @@ -270,12 +262,8 @@ spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-s2/3-u64vec2-float: cr spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-s2/3-u64vec3-float: crash spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-s2/3-uint64_t-float: crash spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-vec3-i64vec2: crash -spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-vec3-i64vec3: crash -spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-vec3-int64_t: crash spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-vec3-int64_t/3/2: crash spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-vec3-u64vec2: crash -spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-vec3-u64vec3: crash -spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-vec3-uint64_t: crash spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-vec3-uint64_t/3/2: crash spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s2/2-s3/2-float-int64_t: crash spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s2/2-s3/2-float-uint64_t: crash @@ -569,9 +557,9 @@ spec/nv_viewport_swizzle/viewport_swizzle: skip summary: name: results ---- -------- - pass: 15807 - fail: 83 - crash: 170 + pass: 15819 + fail: 87 + crash: 154 skip: 315 timeout: 0 warn: 0 diff --git a/src/compiler/glsl/lower_packed_varyings.cpp b/src/compiler/glsl/lower_packed_varyings.cpp index 9c418ebae63..af9f645ff6d 100644 --- a/src/compiler/glsl/lower_packed_varyings.cpp +++ b/src/compiler/glsl/lower_packed_varyings.cpp @@ -580,20 +580,21 @@ lower_packed_varyings_visitor::lower_rvalue(ir_rvalue *rvalue, right_swizzle_values[i] = i + left_components; right_swizzle_name[i] = "xyzw"[i + left_components]; } - ir_swizzle *left_swizzle = new(this->mem_ctx) - ir_swizzle(rvalue, left_swizzle_values, left_components); + ir_swizzle *right_swizzle = new(this->mem_ctx) ir_swizzle(rvalue->clone(this->mem_ctx, NULL), right_swizzle_values, right_components); - char *left_name - = ralloc_asprintf(this->mem_ctx, "%s.%s", name, left_swizzle_name); char *right_name = ralloc_asprintf(this->mem_ctx, "%s.%s", name, right_swizzle_name); - if (left_components) + if (left_components) { + char *left_name + = ralloc_asprintf(this->mem_ctx, "%s.%s", name, left_swizzle_name); + ir_swizzle *left_swizzle = new(this->mem_ctx) + ir_swizzle(rvalue, left_swizzle_values, left_components); fine_location = this->lower_rvalue(left_swizzle, fine_location, unpacked_var, left_name, false, vertex_index); - else + } else /* Top up the fine location to the next slot */ fine_location++; return this->lower_rvalue(right_swizzle, fine_location, unpacked_var, |