First Commit
This commit is contained in:
87
3rdparty/shaderc/glslc/test/option_fauto_map_locations.py
vendored
Normal file
87
3rdparty/shaderc/glslc/test/option_fauto_map_locations.py
vendored
Normal file
@@ -0,0 +1,87 @@
|
||||
# Copyright 2018 The Shaderc Authors. All rights reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
import expect
|
||||
from glslc_test_framework import inside_glslc_testsuite
|
||||
from placeholder import FileShader
|
||||
|
||||
# A GLSL shader with inputs and outputs explicit locations.
|
||||
GLSL_SHADER_IO_WITHOUT_LOCATIONS = """#version 310 es
|
||||
in vec4 m_in;
|
||||
in vec4 m_in1;
|
||||
out vec4 m_out;
|
||||
out vec4 m_out1;
|
||||
void main() {
|
||||
m_out = m_in;
|
||||
m_out1 = m_in1;
|
||||
}"""
|
||||
|
||||
|
||||
# An HLSL fragment shader with inputs and outputs explicit locations.
|
||||
HLSL_SHADER_IO_WITHOUT_LOCATIONS = """
|
||||
float4 Foo(float4 a, float4 b) : COLOR0 {
|
||||
return a + b;
|
||||
}"""
|
||||
|
||||
|
||||
@inside_glslc_testsuite('OptionFAutoMapLocations')
|
||||
class MissingLocationsResultsInError(expect.ErrorMessageSubstr):
|
||||
"""Tests that compilation fails when inputs or outputs have no location."""
|
||||
|
||||
shader = FileShader(GLSL_SHADER_IO_WITHOUT_LOCATIONS, '.vert')
|
||||
glslc_args = ['-S', shader]
|
||||
expected_error_substr = "SPIR-V requires location for user input/output"
|
||||
|
||||
|
||||
@inside_glslc_testsuite('OptionFAutoMapLocations')
|
||||
class FAutoMapLocationsGeneratesLocationsCheckInput(expect.ValidAssemblyFileWithSubstr):
|
||||
"""Tests that the compiler generates locations upon request: Input 0"""
|
||||
|
||||
shader = FileShader(GLSL_SHADER_IO_WITHOUT_LOCATIONS, '.vert')
|
||||
glslc_args = ['-S', shader, '-fauto-map-locations']
|
||||
expected_assembly_substr = "OpDecorate %m_in Location 0"
|
||||
|
||||
|
||||
@inside_glslc_testsuite('OptionFAutoMapLocations')
|
||||
class FAutoMapLocationsGeneratesLocationsCheckOutput0(expect.ValidAssemblyFileWithSubstr):
|
||||
"""Tests that the compiler generates locations upon request: Output 0"""
|
||||
|
||||
shader = FileShader(GLSL_SHADER_IO_WITHOUT_LOCATIONS, '.vert')
|
||||
glslc_args = ['-S', shader, '-fauto-map-locations']
|
||||
expected_assembly_substr = "OpDecorate %m_out Location 0"
|
||||
|
||||
|
||||
# Currently Glslang only generates Location 0.
|
||||
# See https://github.com/KhronosGroup/glslang/issues/1261
|
||||
# TODO(dneto): Write tests that check Location 1 is generated for inputs and
|
||||
# outputs.
|
||||
|
||||
|
||||
# Glslang's HLSL compiler automatically assigns locations inptus and outputs.
|
||||
@inside_glslc_testsuite('OptionFAutoMapLocations')
|
||||
class HLSLCompilerGeneratesLocationsCheckInput0(expect.ValidAssemblyFileWithSubstr):
|
||||
"""Tests that the HLSL compiler generates locations automatically: Input 0."""
|
||||
|
||||
shader = FileShader(HLSL_SHADER_IO_WITHOUT_LOCATIONS, '.hlsl')
|
||||
glslc_args = ['-S', '-fshader-stage=frag', '-fentry-point=Foo', shader]
|
||||
expected_assembly_substr = "OpDecorate %a Location 0"
|
||||
|
||||
|
||||
@inside_glslc_testsuite('OptionFAutoMapLocations')
|
||||
class HLSLCompilerGeneratesLocationsCheckOutput(expect.ValidAssemblyFileWithSubstr):
|
||||
"""Tests that the HLSL compiler generates locations automatically: Output."""
|
||||
|
||||
shader = FileShader(HLSL_SHADER_IO_WITHOUT_LOCATIONS, '.hlsl')
|
||||
glslc_args = ['-S', '-fshader-stage=frag', '-fentry-point=Foo', shader]
|
||||
expected_assembly_substr = "OpDecorate %_entryPointOutput Location 0"
|
||||
Reference in New Issue
Block a user