Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/shaderc
Path: blob/main/glslc/test/option_fauto_map_locations.py
1560 views
1
# Copyright 2018 The Shaderc Authors. All rights reserved.
2
#
3
# Licensed under the Apache License, Version 2.0 (the "License");
4
# you may not use this file except in compliance with the License.
5
# You may obtain a copy of the License at
6
#
7
# http://www.apache.org/licenses/LICENSE-2.0
8
#
9
# Unless required by applicable law or agreed to in writing, software
10
# distributed under the License is distributed on an "AS IS" BASIS,
11
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
# See the License for the specific language governing permissions and
13
# limitations under the License.
14
15
import expect
16
from glslc_test_framework import inside_glslc_testsuite
17
from placeholder import FileShader
18
19
# A GLSL shader with inputs and outputs explicit locations.
20
GLSL_SHADER_IO_WITHOUT_LOCATIONS = """#version 310 es
21
in vec4 m_in;
22
in vec4 m_in1;
23
out vec4 m_out;
24
out vec4 m_out1;
25
void main() {
26
m_out = m_in;
27
m_out1 = m_in1;
28
}"""
29
30
31
# An HLSL fragment shader with inputs and outputs explicit locations.
32
HLSL_SHADER_IO_WITHOUT_LOCATIONS = """
33
float4 Foo(float4 a, float4 b) : COLOR0 {
34
return a + b;
35
}"""
36
37
38
@inside_glslc_testsuite('OptionFAutoMapLocations')
39
class MissingLocationsResultsInError(expect.ErrorMessageSubstr):
40
"""Tests that compilation fails when inputs or outputs have no location."""
41
42
shader = FileShader(GLSL_SHADER_IO_WITHOUT_LOCATIONS, '.vert')
43
glslc_args = ['-S', shader]
44
expected_error_substr = "SPIR-V requires location for user input/output"
45
46
47
@inside_glslc_testsuite('OptionFAutoMapLocations')
48
class FAutoMapLocationsGeneratesLocationsCheckInput(expect.ValidAssemblyFileWithSubstr):
49
"""Tests that the compiler generates locations upon request: Input 0"""
50
51
shader = FileShader(GLSL_SHADER_IO_WITHOUT_LOCATIONS, '.vert')
52
glslc_args = ['-S', shader, '-fauto-map-locations']
53
expected_assembly_substr = "OpDecorate %m_in Location 0"
54
55
56
@inside_glslc_testsuite('OptionFAutoMapLocations')
57
class FAutoMapLocationsGeneratesLocationsCheckOutput0(expect.ValidAssemblyFileWithSubstr):
58
"""Tests that the compiler generates locations upon request: Output 0"""
59
60
shader = FileShader(GLSL_SHADER_IO_WITHOUT_LOCATIONS, '.vert')
61
glslc_args = ['-S', shader, '-fauto-map-locations']
62
expected_assembly_substr = "OpDecorate %m_out Location 0"
63
64
65
# Currently Glslang only generates Location 0.
66
# See https://github.com/KhronosGroup/glslang/issues/1261
67
# TODO(dneto): Write tests that check Location 1 is generated for inputs and
68
# outputs.
69
70
71
# Glslang's HLSL compiler automatically assigns locations inptus and outputs.
72
@inside_glslc_testsuite('OptionFAutoMapLocations')
73
class HLSLCompilerGeneratesLocationsCheckInput0(expect.ValidAssemblyFileWithSubstr):
74
"""Tests that the HLSL compiler generates locations automatically: Input 0."""
75
76
shader = FileShader(HLSL_SHADER_IO_WITHOUT_LOCATIONS, '.hlsl')
77
glslc_args = ['-S', '-fshader-stage=frag', '-fentry-point=Foo', shader]
78
expected_assembly_substr = "OpDecorate %a Location 0"
79
80
81
@inside_glslc_testsuite('OptionFAutoMapLocations')
82
class HLSLCompilerGeneratesLocationsCheckOutput(expect.ValidAssemblyFileWithSubstr):
83
"""Tests that the HLSL compiler generates locations automatically: Output."""
84
85
shader = FileShader(HLSL_SHADER_IO_WITHOUT_LOCATIONS, '.hlsl')
86
glslc_args = ['-S', '-fshader-stage=frag', '-fentry-point=Foo', shader]
87
expected_assembly_substr = "OpDecorate %_entryPointOutput Location 0"
88
89