Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

rayqueryExt pass-by-reference issues #3808

Open
wuhuandi opened this issue Dec 12, 2024 · 0 comments
Open

rayqueryExt pass-by-reference issues #3808

wuhuandi opened this issue Dec 12, 2024 · 0 comments

Comments

@wuhuandi
Copy link

wuhuandi commented Dec 12, 2024

I'm trying to use shader like this, with rayQueryExt as the argument to the 2D array function. But I think the spv converted from glsang does not generate Opload for rayQueryExt as OpFunctionParameter. Is this reasonable? %9 is a OpFunctionParameter, %7 is a OpTypePointer, I think We should use OpAccessChain to repalce %9 in OpRayQueryInitializeKHR.

#version 460
#extension GL_EXT_ray_query : require
#extension GL_EXT_nonuniform_qualifier : enable
#extension GL_EXT_ray_tracing_position_fetch:require
layout(set = 0, binding = 0) uniform accelerationStructureEXT rqTopLevelAS;
layout (location = 0) in vec4 position;
layout (location = 1) in vec3 normal;
layout (location = 0) out vec4 vs_color;
layout (location = 1) out vec4 vs_normal;
layout (location = 2) out vec3 vs_pos1[3];
layout (location = 5) out vec3 vs_pos2[3];
void funcInRQ(rayQueryEXT rq) {
    vec3 origin = vec3(position.xy, 1.0);
    float tmin = 0.0;
    float tmax = 100000.0;
    vec3 direct = vec3(0.0, 0.0, -1.0);
    rayQueryInitializeEXT(rq, rqTopLevelAS, gl_RayFlagsNoneEXT, 0xFF, origin, tmin, direct, tmax);
}

void main() 
{
    gl_Position = position;
    vec4 hitValue = vec4(0.5, 0.3, 0.2 ,2.0); 
    vs_normal = vec4(normal.xy, hitValue.y, 1.0);
    vec3 vertexPos1[3] = vec3[3](vec3(0.0), vec3(0.0), vec3(0.0));
    vec3 vertexPos2[3] = vec3[3](vec3(0.0), vec3(0.0), vec3(0.0));
    vs_pos1 = vertexPos1;
    vs_pos2 = vertexPos2;
    rayQueryEXT rq[2][1];
    funcInRQ(rq[1][0]);
    while  (rayQueryProceedEXT(rq[1][0])) {
    }
    vs_color = vec4 (0.4, 0.5, 0.6, 1.0);

};
; SPIR-V
; Version: 1.5
; Generator: Khronos Glslang Reference Front End; 11
; Bound: 104
; Schema: 0
               OpCapability Shader
               OpCapability RayQueryKHR
               OpExtension "SPV_KHR_ray_query"
          %1 = OpExtInstImport "GLSL.std.450"
               OpMemoryModel Logical GLSL450
               OpEntryPoint Vertex %4 "main" %18 %36 %49 %62 %64 %80 %82 %88 %100
               OpSource GLSL 460
               OpSourceExtension "GL_EXT_nonuniform_qualifier"
               OpSourceExtension "GL_EXT_ray_query"
               OpSourceExtension "GL_EXT_ray_tracing_position_fetch"
               OpName %4 "main"
               OpName %10 "funcInRQ(rq1;"
               OpName %9 "rq"
               OpName %15 "origin"
               OpName %18 "position"
               OpName %27 "tmin"
               OpName %29 "tmax"
               OpName %31 "direct"
               OpName %36 "rqTopLevelAS"
               OpName %47 "gl_PerVertex"
               OpMemberName %47 0 "gl_Position"
               OpMemberName %47 1 "gl_PointSize"
               OpMemberName %47 2 "gl_ClipDistance"
               OpMemberName %47 3 "gl_CullDistance"
               OpName %49 ""
               OpName %56 "hitValue"
               OpName %62 "vs_normal"
               OpName %64 "normal"
               OpName %75 "vertexPos1"
               OpName %78 "vertexPos2"
               OpName %80 "vs_pos1"
               OpName %82 "vs_pos2"
               OpName %88 "rq"
               OpName %100 "vs_color"
               OpDecorate %18 Location 0
               OpDecorate %36 DescriptorSet 0
               OpDecorate %36 Binding 0
               OpMemberDecorate %47 0 BuiltIn Position
               OpMemberDecorate %47 1 BuiltIn PointSize
               OpMemberDecorate %47 2 BuiltIn ClipDistance
               OpMemberDecorate %47 3 BuiltIn CullDistance
               OpDecorate %47 Block
               OpDecorate %62 Location 1
               OpDecorate %64 Location 1
               OpDecorate %80 Location 2
               OpDecorate %82 Location 5
               OpDecorate %100 Location 0
          %2 = OpTypeVoid
          %3 = OpTypeFunction %2
          %6 = OpTypeRayQueryKHR
          %7 = OpTypePointer Private %6
          %8 = OpTypeFunction %2 %7
         %12 = OpTypeFloat 32
         %13 = OpTypeVector %12 3
         %14 = OpTypePointer Function %13
         %16 = OpTypeVector %12 4
         %17 = OpTypePointer Input %16
         %18 = OpVariable %17 Input
         %19 = OpTypeVector %12 2
         %22 = OpConstant %12 1
         %26 = OpTypePointer Function %12
         %28 = OpConstant %12 0
         %30 = OpConstant %12 100000
         %32 = OpConstant %12 -1
         %33 = OpConstantComposite %13 %28 %28 %32
         %34 = OpTypeAccelerationStructureKHR
         %35 = OpTypePointer UniformConstant %34
         %36 = OpVariable %35 UniformConstant
         %38 = OpTypeInt 32 0
         %39 = OpConstant %38 0
         %40 = OpConstant %38 255
         %45 = OpConstant %38 1
         %46 = OpTypeArray %12 %45
         %47 = OpTypeStruct %16 %12 %46 %46
         %48 = OpTypePointer Output %47
         %49 = OpVariable %48 Output
         %50 = OpTypeInt 32 1
         %51 = OpConstant %50 0
         %53 = OpTypePointer Output %16
         %55 = OpTypePointer Function %16
         %57 = OpConstant %12 0.5
         %58 = OpConstant %12 0.300000012
         %59 = OpConstant %12 0.200000003
         %60 = OpConstant %12 2
         %61 = OpConstantComposite %16 %57 %58 %59 %60
         %62 = OpVariable %53 Output
         %63 = OpTypePointer Input %13
         %64 = OpVariable %63 Input
         %72 = OpConstant %38 3
         %73 = OpTypeArray %13 %72
         %74 = OpTypePointer Function %73
         %76 = OpConstantComposite %13 %28 %28 %28
         %77 = OpConstantComposite %73 %76 %76 %76
         %79 = OpTypePointer Output %73
         %80 = OpVariable %79 Output
         %82 = OpVariable %79 Output
         %84 = OpTypeArray %6 %45
         %85 = OpConstant %38 2
         %86 = OpTypeArray %84 %85
         %87 = OpTypePointer Private %86
         %88 = OpVariable %87 Private
         %89 = OpConstant %50 1
         %98 = OpTypeBool
        %100 = OpVariable %53 Output
        %101 = OpConstant %12 0.400000006
        %102 = OpConstant %12 0.600000024
        %103 = OpConstantComposite %16 %101 %57 %102 %22
          %4 = OpFunction %2 None %3
          %5 = OpLabel
         %56 = OpVariable %55 Function
         %75 = OpVariable %74 Function
         %78 = OpVariable %74 Function
         %52 = OpLoad %16 %18
         %54 = OpAccessChain %53 %49 %51
               OpStore %54 %52
               OpStore %56 %61
         %65 = OpLoad %13 %64
         %66 = OpVectorShuffle %19 %65 %65 0 1
         %67 = OpAccessChain %26 %56 %45
         %68 = OpLoad %12 %67
         %69 = OpCompositeExtract %12 %66 0
         %70 = OpCompositeExtract %12 %66 1
         %71 = OpCompositeConstruct %16 %69 %70 %68 %22
               OpStore %62 %71
               OpStore %75 %77
               OpStore %78 %77
         %81 = OpLoad %73 %75
               OpStore %80 %81
         %83 = OpLoad %73 %78
               OpStore %82 %83
         %90 = OpAccessChain %7 %88 %89 %51
         %91 = OpFunctionCall %2 %10 %90
               OpBranch %92
         %92 = OpLabel
               OpLoopMerge %94 %95 None
               OpBranch %96
         %96 = OpLabel
         %97 = OpAccessChain %7 %88 %89 %51
         %99 = OpRayQueryProceedKHR %98 %97
               OpBranchConditional %99 %93 %94
         %93 = OpLabel
               OpBranch %95
         %95 = OpLabel
               OpBranch %92
         %94 = OpLabel
               OpStore %100 %103
               OpReturn
               OpFunctionEnd
         %10 = OpFunction %2 None %8
          %9 = OpFunctionParameter %7
         %11 = OpLabel
         %15 = OpVariable %14 Function
         %27 = OpVariable %26 Function
         %29 = OpVariable %26 Function
         %31 = OpVariable %14 Function
         %20 = OpLoad %16 %18
         %21 = OpVectorShuffle %19 %20 %20 0 1
         %23 = OpCompositeExtract %12 %21 0
         %24 = OpCompositeExtract %12 %21 1
         %25 = OpCompositeConstruct %13 %23 %24 %22
               OpStore %15 %25
               OpStore %27 %28
               OpStore %29 %30
               OpStore %31 %33
         %37 = OpLoad %34 %36
         %41 = OpLoad %13 %15
         %42 = OpLoad %12 %27
         %43 = OpLoad %13 %31
         %44 = OpLoad %12 %29
               OpRayQueryInitializeKHR %9 %37 %39 %40 %41 %42 %43 %44
               OpReturn
               OpFunctionEnd
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant