mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-09-12 22:28:32 +09:00
[Fix] (MG_Util/ShaderTranspiler): keep GL shaders off Vulkan macro path
This commit is contained in:
@@ -108,6 +108,35 @@ void main() {
|
|||||||
fragColor = vec4(OutColor, float(intVal));
|
fragColor = vec4(OutColor, float(intVal));
|
||||||
})";
|
})";
|
||||||
|
|
||||||
|
const char* sodiumStylePushConstantVs = R"(#version 460 core
|
||||||
|
|
||||||
|
layout(location = 0) in vec3 Position;
|
||||||
|
|
||||||
|
#ifdef VULKAN
|
||||||
|
layout(push_constant) uniform PC {
|
||||||
|
vec3 u_RegionOffset;
|
||||||
|
int u_CurrentTime;
|
||||||
|
uint u_RegionID;
|
||||||
|
};
|
||||||
|
#else
|
||||||
|
uniform vec3 u_RegionOffset;
|
||||||
|
uniform int u_CurrentTime;
|
||||||
|
uniform uint u_RegionID;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
vec3 offset = u_RegionOffset + vec3(float(u_CurrentTime) * 0.0 + float(u_RegionID) * 0.0);
|
||||||
|
gl_Position = vec4(Position + offset, 1.0);
|
||||||
|
})";
|
||||||
|
|
||||||
|
const char* sodiumStylePushConstantFs = R"(#version 460 core
|
||||||
|
|
||||||
|
out vec4 fragColor;
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
fragColor = vec4(1.0);
|
||||||
|
})";
|
||||||
|
|
||||||
TEST_F(ProgramTest, CompileVertex) {
|
TEST_F(ProgramTest, CompileVertex) {
|
||||||
GLuint vs = CreateShader(GL_VERTEX_SHADER);
|
GLuint vs = CreateShader(GL_VERTEX_SHADER);
|
||||||
ShaderSource(vs, 1, &vsSrc, NULL);
|
ShaderSource(vs, 1, &vsSrc, NULL);
|
||||||
@@ -457,6 +486,58 @@ TEST_F(ProgramTest, CompileAndLink) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(ProgramTest, SodiumStyleVulkanMacroShaderUsesPlainUniforms) {
|
||||||
|
char infoLog[1024] = "";
|
||||||
|
|
||||||
|
GLuint vs = CreateShader(GL_VERTEX_SHADER);
|
||||||
|
ShaderSource(vs, 1, &sodiumStylePushConstantVs, NULL);
|
||||||
|
CompileShader(vs);
|
||||||
|
GLint vsStatus = GL_FALSE;
|
||||||
|
GetShaderiv(vs, GL_COMPILE_STATUS, &vsStatus);
|
||||||
|
GetShaderInfoLog(vs, sizeof(infoLog), nullptr, infoLog);
|
||||||
|
ASSERT_EQ(vsStatus, GL_TRUE) << infoLog;
|
||||||
|
|
||||||
|
GLuint fs = CreateShader(GL_FRAGMENT_SHADER);
|
||||||
|
ShaderSource(fs, 1, &sodiumStylePushConstantFs, NULL);
|
||||||
|
CompileShader(fs);
|
||||||
|
GLint fsStatus = GL_FALSE;
|
||||||
|
GetShaderiv(fs, GL_COMPILE_STATUS, &fsStatus);
|
||||||
|
GetShaderInfoLog(fs, sizeof(infoLog), nullptr, infoLog);
|
||||||
|
ASSERT_EQ(fsStatus, GL_TRUE) << infoLog;
|
||||||
|
|
||||||
|
GLuint program = CreateProgram();
|
||||||
|
AttachShader(program, vs);
|
||||||
|
AttachShader(program, fs);
|
||||||
|
LinkProgram(program);
|
||||||
|
GLint linkStatus = GL_FALSE;
|
||||||
|
GetProgramiv(program, GL_LINK_STATUS, &linkStatus);
|
||||||
|
GetProgramInfoLog(program, sizeof(infoLog), nullptr, infoLog);
|
||||||
|
ASSERT_EQ(linkStatus, GL_TRUE) << infoLog;
|
||||||
|
|
||||||
|
const GLint regionOffsetLoc = GetUniformLocation(program, "u_RegionOffset");
|
||||||
|
const GLint currentTimeLoc = GetUniformLocation(program, "u_CurrentTime");
|
||||||
|
const GLint regionIdLoc = GetUniformLocation(program, "u_RegionID");
|
||||||
|
ASSERT_GE(regionOffsetLoc, 0);
|
||||||
|
ASSERT_GE(currentTimeLoc, 0);
|
||||||
|
ASSERT_GE(regionIdLoc, 0);
|
||||||
|
|
||||||
|
auto programObject = MG_State::pGLContext->GetProgramObject(program);
|
||||||
|
ASSERT_NE(programObject, nullptr);
|
||||||
|
ASSERT_GT(programObject->GetUBOSize(), 0u);
|
||||||
|
|
||||||
|
UseProgram(program);
|
||||||
|
Uniform3f(regionOffsetLoc, 1.0f, 2.0f, 3.0f);
|
||||||
|
Uniform1i(currentTimeLoc, 4);
|
||||||
|
Uniform1ui(regionIdLoc, 5u);
|
||||||
|
EXPECT_EQ(GetError(), GL_NO_ERROR);
|
||||||
|
|
||||||
|
GLfloat regionOffset[3] = {};
|
||||||
|
GetUniformfv(program, regionOffsetLoc, regionOffset);
|
||||||
|
EXPECT_EQ(regionOffset[0], 1.0f);
|
||||||
|
EXPECT_EQ(regionOffset[1], 2.0f);
|
||||||
|
EXPECT_EQ(regionOffset[2], 3.0f);
|
||||||
|
}
|
||||||
|
|
||||||
TEST_F(ProgramTest, Uniform1uiStoresUnsignedValue) {
|
TEST_F(ProgramTest, Uniform1uiStoresUnsignedValue) {
|
||||||
char infoLog[1024] = "";
|
char infoLog[1024] = "";
|
||||||
|
|
||||||
|
|||||||
@@ -148,6 +148,7 @@ namespace MobileGL {
|
|||||||
tshader->setStrings(src, 1);
|
tshader->setStrings(src, 1);
|
||||||
tshader->setNanMinMaxClamp(true);
|
tshader->setNanMinMaxClamp(true);
|
||||||
tshader->setInvertY(true);
|
tshader->setInvertY(true);
|
||||||
|
tshader->setPreamble("#undef VULKAN\n");
|
||||||
if (attrib.flags & ShaderCompileBits::CompileForOpenGL) {
|
if (attrib.flags & ShaderCompileBits::CompileForOpenGL) {
|
||||||
tshader->setEnvInput(glslang::EShSourceGlsl, lang, glslang::EShClientVulkan, 450);
|
tshader->setEnvInput(glslang::EShSourceGlsl, lang, glslang::EShClientVulkan, 450);
|
||||||
tshader->setEnvClient(glslang::EShClientOpenGL, glslang::EShTargetOpenGL_450);
|
tshader->setEnvClient(glslang::EShClientOpenGL, glslang::EShTargetOpenGL_450);
|
||||||
|
|||||||
Reference in New Issue
Block a user