Bug 111734

Summary: Geometry shader with double interpolators fails in LLVM
Product: Mesa Reporter: Baldur Karlsson <baldurk>
Component: Drivers/Vulkan/radeonAssignee: mesa-dev
Status: RESOLVED FIXED QA Contact: mesa-dev
Severity: normal    
Priority: not set    
Version: git   
Hardware: x86-64 (AMD64)   
OS: Linux (All)   
Whiteboard:
i915 platform: i915 features:
Attachments: VkRunner test showing crash

Description Baldur Karlsson 2019-09-18 13:58:57 UTC
Created attachment 145427 [details]
VkRunner test showing crash

When compiling a geometry shader with double inputs and outputs I get an LLVM fatal error:

LLVM ERROR: Cannot select: 0x55de91ee9320: v2i32 = bitcast 0x55de91ee9048
  0x55de91ee9048: f32,ch = BUFFER_LOAD<(dereferenceable load 4 from custom TargetCustom7, align 1, addrspace 4)> 0x55de91dcfbc8, 0x55de91e58860, Constant:i32<0>, 0x55de91ee8a98, Constant:i32<0>, Constant:i32<0>, Constant:i32<1>, Constant:i1<0>
    0x55de91e58860: v4i32,ch = load<(invariant load 16 from %ir.12, addrspace 4)> 0x55de91dcfbc8, 0x55de91e581e0, undef:i64
      0x55de91e581e0: i64 = add 0x55de91e587f8, Constant:i64<32>
        0x55de91e587f8: i64,ch = CopyFromReg 0x55de91dcfbc8, Register:i64 %0
          0x55de91ee8e40: i64 = Register %0
        0x55de91e58318: i64 = Constant<32>
      0x55de91e58380: i64 = undef
    0x55de91ee8b68: i32 = Constant<0>
    0x55de91ee8a98: i32 = add 0x55de91e58e10, Constant:i32<4096>
      0x55de91e58e10: i32 = shl 0x55de91e58998, Constant:i32<2>
        0x55de91e58998: i32,ch = CopyFromReg 0x55de91dcfbc8, Register:i32 %3
          0x55de91e586c0: i32 = Register %3
        0x55de91e58cd8: i32 = Constant<2>
      0x55de91ee8a30: i32 = Constant<4096>
    0x55de91ee8b68: i32 = Constant<0>
    0x55de91ee8b68: i32 = Constant<0>
    0x55de91e58ad0: i32 = Constant<1>
    0x55de91eeb340: i1 = Constant<0>
In function: main

with this geometry shader:

#version 450 core

layout(triangles) in;
layout(triangle_strip, max_vertices = 3) out;

layout(location = 0) in double InDouble[3];
layout(location = 0) out double OutDouble;

void main() {
  gl_Position = vec4(0);
  for(int i = 0; i < 3; i++) {
    OutDouble = InDouble[i];
    EmitVertex();
  }
  EndPrimitive();
}

I've attached a VkRunner test which shows the crash.

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.