How to have a structure of buffer_reference types in Vulkan GLSL?

203 Views Asked by At

I'm using shaderc that comes VulkanSDK-1.3.224.1. Attempting to compile the following when added to any of my shaders:

#extension GL_EXT_scalar_block_layout: enable
#extension GL_EXT_buffer_reference2 : enable
#extension GL_EXT_shader_explicit_arithmetic_types_int64   : enable
layout(buffer_reference, buffer_reference_align=4, scalar) buffer test_ref_type{
    uint32_t data[];
};
struct RefTest{
    test_ref_type test;
};

RefTest extract_RefTest(){
    return RefTest(test_ref_type(uint64_t(0)));
}

void main(){
    RefTest ref_test = extract_RefTest();
}

results in

shaderc: internal error: compilation succeeded but failed to optimize: ID 108[%108] has not been defined
  %109 = OpConstantComposite %RefTest %108

However, if I first convert to a uint64_t it works fine:

#extension GL_EXT_scalar_block_layout: enable
#extension GL_EXT_buffer_reference2 : enable
#extension GL_EXT_shader_explicit_arithmetic_types_int64   : enable
layout(buffer_reference, buffer_reference_align=4, scalar) buffer test_ref_type{
    uint32_t data[];
};
struct RefTest{
    uint64_t test;
};

RefTest extract_RefTest(){
    return RefTest(uint64_t(test_ref_type(uint64_t(0))));
}

void main(){
    RefTest ref_test = extract_RefTest();
}

How do I have composite structs with buffer_reference types with out explicit uint64_t conversion?

0

There are 0 best solutions below