summaryrefslogtreecommitdiffstats
path: root/tests/pipeline/rasterization/get-attribute-at-vertex-struct.slang
blob: a63be1718d70cf708bec68a2b3d96a9014538006 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// get-attribute-at-vertex-struct.slang

// Test GetAttributeAtVertex and SV_Barycentrics on struct members

//TEST:SIMPLE(filecheck=CHECK-SPIRV):-target spirv -entry main -stage fragment -profile glsl_450+GL_EXT_fragment_shader_barycentric
//TEST:SIMPLE(filecheck=CHECK-GLSL):-target glsl -entry main -stage fragment -profile glsl_450+GL_EXT_fragment_shader_barycentric

// CHECK-SPIRV: OpCapability FragmentBarycentricKHR
// CHECK-SPIRV: OpExtension "SPV_KHR_fragment_shader_barycentric"

// CHECK-SPIRV: OpEntryPoint Fragment %main "main"
// CHECK-SPIRV: OpDecorate %{{.*}} BuiltIn BaryCoordKHR
// CHECK-SPIRV: OpDecorate %{{.*}} BuiltIn BaryCoordNoPerspKHR
// CHECK-SPIRV: %{{.*}} = OpAccessChain %_ptr_Input_{{.*}} %{{.*}} %uint_0
// CHECK-SPIRV: %{{.*}} = OpAccessChain %_ptr_Input_{{.*}} %{{.*}} %uint_1
// CHECK-SPIRV: %{{.*}} = OpAccessChain %_ptr_Input_{{.*}} %{{.*}} %uint_2

// CHECK-GLSL: #extension GL_EXT_fragment_shader_barycentric : require
// CHECK-GLSL-DAG: gl_BaryCoordEXT
// CHECK-GLSL-DAG: gl_BaryCoordNoPerspEXT

struct Input
{
    pervertex float4 color : COLOR;
    float3 bary : SV_Barycentrics;
    noperspective float3 baryNoPerspective : SV_Barycentrics;
}

[shader("fragment")]
void main(
    Input input,
    out float4 result : SV_Target)
{
    result = input.bary.x * GetAttributeAtVertex(input.color, 0)
        + input.bary.y * GetAttributeAtVertex(input.color, 1)
        + input.bary.z * GetAttributeAtVertex(input.color, 2)
        + input.baryNoPerspective.x * 0.1f;
}