diff --git a/MobileGL/Defines.h b/MobileGL/Defines.h index a123d187..96e1eb0e 100644 --- a/MobileGL/Defines.h +++ b/MobileGL/Defines.h @@ -35,7 +35,7 @@ // ====================== MobileGL configurations ======================= // #ifndef MOBILEGL_LOG_ACTIVE_LEVEL -#define MOBILEGL_LOG_ACTIVE_LEVEL MOBILEGL_LOG_LEVEL_INFO +#define MOBILEGL_LOG_ACTIVE_LEVEL MOBILEGL_LOG_LEVEL_DEBUG #endif #define MOBILEGL_LOG_ENABLE_CONSOLE 0 diff --git a/MobileGL/MG_Impl/GLImpl/Exporting/Definitions.cpp b/MobileGL/MG_Impl/GLImpl/Exporting/Definitions.cpp index 2f11f3fc..088a4ce1 100644 --- a/MobileGL/MG_Impl/GLImpl/Exporting/Definitions.cpp +++ b/MobileGL/MG_Impl/GLImpl/Exporting/Definitions.cpp @@ -1889,20 +1889,20 @@ DECLARE_GL_FUNCTION_HEAD(void, NamedRenderbufferStorageEXT, GLuint renderbuffer, DECLARE_GL_FUNCTION_HEAD(void, GetNamedRenderbufferParameterivEXT, GLuint renderbuffer, GLenum pname, GLint* params) DECLARE_GL_FUNCTION_END_NO_RETURN(void, GetNamedRenderbufferParameteriv, renderbuffer, pname, params) DECLARE_GL_FUNCTION_HEAD(void, NamedRenderbufferStorageMultisampleEXT, GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) DECLARE_GL_FUNCTION_END_NO_RETURN(void, NamedRenderbufferStorageMultisample, renderbuffer, samples, internalformat, width, height) DECLARE_GL_FUNCTION_STUB_HEAD(void, NamedRenderbufferStorageMultisampleCoverageEXT, GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height) DECLARE_GL_FUNCTION_STUB_END_NO_RETURN(void, NamedRenderbufferStorageMultisampleCoverageEXT, renderbuffer, coverageSamples, colorSamples, internalformat, width, height) -DECLARE_GL_FUNCTION_STUB_HEAD(GLenum, CheckNamedFramebufferStatusEXT, GLuint framebuffer, GLenum target) DECLARE_GL_FUNCTION_STUB_END(GLenum, CheckNamedFramebufferStatusEXT, framebuffer, target) -DECLARE_GL_FUNCTION_STUB_HEAD(void, NamedFramebufferTexture1DEXT, GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level) DECLARE_GL_FUNCTION_STUB_END_NO_RETURN(void, NamedFramebufferTexture1DEXT, framebuffer, attachment, textarget, texture, level) -DECLARE_GL_FUNCTION_STUB_HEAD(void, NamedFramebufferTexture2DEXT, GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level) DECLARE_GL_FUNCTION_STUB_END_NO_RETURN(void, NamedFramebufferTexture2DEXT, framebuffer, attachment, textarget, texture, level) -DECLARE_GL_FUNCTION_STUB_HEAD(void, NamedFramebufferTexture3DEXT, GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) DECLARE_GL_FUNCTION_STUB_END_NO_RETURN(void, NamedFramebufferTexture3DEXT, framebuffer, attachment, textarget, texture, level, zoffset) +DECLARE_GL_FUNCTION_HEAD(GLenum, CheckNamedFramebufferStatusEXT, GLuint framebuffer, GLenum target) DECLARE_GL_FUNCTION_END(GLenum, CheckNamedFramebufferStatus, framebuffer, target) +DECLARE_GL_FUNCTION_HEAD(void, NamedFramebufferTexture1DEXT, GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level) DECLARE_GL_FUNCTION_END_NO_RETURN(void, NamedFramebufferTexture1D, framebuffer, attachment, textarget, texture, level) +DECLARE_GL_FUNCTION_HEAD(void, NamedFramebufferTexture2DEXT, GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level) DECLARE_GL_FUNCTION_END_NO_RETURN(void, NamedFramebufferTexture2D, framebuffer, attachment, textarget, texture, level) +DECLARE_GL_FUNCTION_HEAD(void, NamedFramebufferTexture3DEXT, GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) DECLARE_GL_FUNCTION_END_NO_RETURN(void, NamedFramebufferTexture3D, framebuffer, attachment, textarget, texture, level, zoffset) DECLARE_GL_FUNCTION_HEAD(void, NamedFramebufferRenderbufferEXT, GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) DECLARE_GL_FUNCTION_END_NO_RETURN(void, NamedFramebufferRenderbuffer, framebuffer, attachment, renderbuffertarget, renderbuffer) DECLARE_GL_FUNCTION_STUB_HEAD(void, GetNamedFramebufferAttachmentParameterivEXT, GLuint framebuffer, GLenum attachment, GLenum pname, GLint* params) DECLARE_GL_FUNCTION_STUB_END_NO_RETURN(void, GetNamedFramebufferAttachmentParameterivEXT, framebuffer, attachment, pname, params) DECLARE_GL_FUNCTION_HEAD(void, GenerateTextureMipmapEXT, GLuint texture, GLenum target) DECLARE_GL_FUNCTION_END_NO_RETURN(void, GenerateTextureMipmap, texture) DECLARE_GL_FUNCTION_STUB_HEAD(void, GenerateMultiTexMipmapEXT, GLenum texunit, GLenum target) DECLARE_GL_FUNCTION_STUB_END_NO_RETURN(void, GenerateMultiTexMipmapEXT, texunit, target) -DECLARE_GL_FUNCTION_STUB_HEAD(void, FramebufferDrawBufferEXT, GLuint framebuffer, GLenum mode) DECLARE_GL_FUNCTION_STUB_END_NO_RETURN(void, FramebufferDrawBufferEXT, framebuffer, mode) -DECLARE_GL_FUNCTION_STUB_HEAD(void, FramebufferDrawBuffersEXT, GLuint framebuffer, GLsizei n, const GLenum* bufs) DECLARE_GL_FUNCTION_STUB_END_NO_RETURN(void, FramebufferDrawBuffersEXT, framebuffer, n, bufs) -DECLARE_GL_FUNCTION_STUB_HEAD(void, FramebufferReadBufferEXT, GLuint framebuffer, GLenum mode) DECLARE_GL_FUNCTION_STUB_END_NO_RETURN(void, FramebufferReadBufferEXT, framebuffer, mode) +DECLARE_GL_FUNCTION_HEAD(void, FramebufferDrawBufferEXT, GLuint framebuffer, GLenum mode) DECLARE_GL_FUNCTION_END_NO_RETURN(void, NamedFramebufferDrawBuffer, framebuffer, mode) +DECLARE_GL_FUNCTION_HEAD(void, FramebufferDrawBuffersEXT, GLuint framebuffer, GLsizei n, const GLenum* bufs) DECLARE_GL_FUNCTION_END_NO_RETURN(void, NamedFramebufferDrawBuffers, framebuffer, n, bufs) +DECLARE_GL_FUNCTION_HEAD(void, FramebufferReadBufferEXT, GLuint framebuffer, GLenum mode) DECLARE_GL_FUNCTION_END_NO_RETURN(void, NamedFramebufferReadBuffer, framebuffer, mode) DECLARE_GL_FUNCTION_STUB_HEAD(void, NamedCopyBufferSubDataEXT, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size) DECLARE_GL_FUNCTION_STUB_END_NO_RETURN(void, NamedCopyBufferSubDataEXT, readBuffer, writeBuffer, readOffset, writeOffset, size) -DECLARE_GL_FUNCTION_STUB_HEAD(void, NamedFramebufferTextureEXT, GLuint framebuffer, GLenum attachment, GLuint texture, GLint level) DECLARE_GL_FUNCTION_STUB_END_NO_RETURN(void, NamedFramebufferTextureEXT, framebuffer, attachment, texture, level) -DECLARE_GL_FUNCTION_STUB_HEAD(void, NamedFramebufferTextureLayerEXT, GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer) DECLARE_GL_FUNCTION_STUB_END_NO_RETURN(void, NamedFramebufferTextureLayerEXT, framebuffer, attachment, texture, level, layer) +DECLARE_GL_FUNCTION_HEAD(void, NamedFramebufferTextureEXT, GLuint framebuffer, GLenum attachment, GLuint texture, GLint level) DECLARE_GL_FUNCTION_END_NO_RETURN(void, NamedFramebufferTexture, framebuffer, attachment, texture, level) +DECLARE_GL_FUNCTION_HEAD(void, NamedFramebufferTextureLayerEXT, GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer) DECLARE_GL_FUNCTION_END_NO_RETURN(void, NamedFramebufferTextureLayer, framebuffer, attachment, texture, level, layer) DECLARE_GL_FUNCTION_STUB_HEAD(void, NamedFramebufferTextureFaceEXT, GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face) DECLARE_GL_FUNCTION_STUB_END_NO_RETURN(void, NamedFramebufferTextureFaceEXT, framebuffer, attachment, texture, level, face) DECLARE_GL_FUNCTION_STUB_HEAD(void, TextureRenderbufferEXT, GLuint texture, GLenum target, GLuint renderbuffer) DECLARE_GL_FUNCTION_STUB_END_NO_RETURN(void, TextureRenderbufferEXT, texture, target, renderbuffer) DECLARE_GL_FUNCTION_STUB_HEAD(void, MultiTexRenderbufferEXT, GLenum texunit, GLenum target, GLuint renderbuffer) DECLARE_GL_FUNCTION_STUB_END_NO_RETURN(void, MultiTexRenderbufferEXT, texunit, target, renderbuffer) diff --git a/MobileGL/MG_Impl/GLImpl/Framebuffer/GL_Framebuffer.cpp b/MobileGL/MG_Impl/GLImpl/Framebuffer/GL_Framebuffer.cpp index 13b17e0e..ca5a1918 100644 --- a/MobileGL/MG_Impl/GLImpl/Framebuffer/GL_Framebuffer.cpp +++ b/MobileGL/MG_Impl/GLImpl/Framebuffer/GL_Framebuffer.cpp @@ -685,6 +685,102 @@ namespace MobileGL::MG_Impl::GLImpl { framebufferObject->AttachTexture(attachmentType, textureObject, textureUploadTarget, level); } + void NamedFramebufferTextureWithUploadTarget_State(const char* functionName, GLuint framebuffer, GLenum attachment, + GLuint texture, GLint level, + TextureUploadTarget textureUploadTarget) { + if (attachment == GL_DEPTH_STENCIL_ATTACHMENT) { + NamedFramebufferTextureWithUploadTarget_State(functionName, framebuffer, GL_DEPTH_ATTACHMENT, texture, + level, textureUploadTarget); + NamedFramebufferTextureWithUploadTarget_State(functionName, framebuffer, GL_STENCIL_ATTACHMENT, texture, + level, textureUploadTarget); + return; + } + + auto framebufferObject = GetNamedFramebufferObject_State(framebuffer, functionName); + if (!framebufferObject) return; + + const FramebufferAttachmentType attachmentType = MG_Util::ConvertGLEnumToFramebufferAttachmentType(attachment); + if (!FramebufferImpl::ValidateFramebufferAttachmentType(attachmentType)) return; + if (!TextureImpl::ValidateTextureName(texture, true)) return; + + if (texture == 0) { + framebufferObject->Detach(attachmentType); + return; + } + + auto& textureObject = MG_State::pGLContext->GetTextureObject(texture); + if (!textureObject) { + MG_State::pGLContext->RecordError( + ErrorCode::InvalidOperation, + MakeUnique("MG_Impl/GLImpl", functionName, + std::format("Texture object {} is not valid.", texture))); + return; + } + + const auto expectedTextureTarget = MG_Util::ConvertTextureUploadTargetToTextureTarget(textureUploadTarget); + if (expectedTextureTarget == TextureTarget::Unknown || + textureObject->GetTarget() != expectedTextureTarget) { + MG_State::pGLContext->RecordError( + ErrorCode::InvalidOperation, + MakeUnique( + "MG_Impl/GLImpl", functionName, + std::format("Attachment target {} does not match texture {} target {}.", + MG_Util::ConvertTextureUploadTargetToString(textureUploadTarget), + texture, + MG_Util::ConvertTextureTargetToString(textureObject->GetTarget())))); + return; + } + + framebufferObject->AttachTexture(attachmentType, textureObject, textureUploadTarget, level); + } + + void NamedFramebufferTexture1D_State(GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, + GLint level) { + TextureUploadTarget textureUploadTarget = TextureUploadTarget::Texture1D; + if (texture != 0) { + textureUploadTarget = MG_Util::ConvertGLEnumToTextureUploadTarget(textarget); + if (!TextureImpl::ValidateTextureUploadTarget(textureUploadTarget)) return; + } + NamedFramebufferTextureWithUploadTarget_State(__func__, framebuffer, attachment, texture, level, + textureUploadTarget); + } + + void NamedFramebufferTexture2D_State(GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, + GLint level) { + TextureUploadTarget textureUploadTarget = TextureUploadTarget::Texture2D; + if (texture != 0) { + textureUploadTarget = MG_Util::ConvertGLEnumToTextureUploadTarget(textarget); + if (!TextureImpl::ValidateTextureUploadTarget(textureUploadTarget)) return; + } + NamedFramebufferTextureWithUploadTarget_State(__func__, framebuffer, attachment, texture, level, + textureUploadTarget); + } + + void NamedFramebufferTexture3D_State(GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, + GLint level, GLint zoffset) { + static_cast(framebuffer); + static_cast(attachment); + static_cast(textarget); + static_cast(texture); + static_cast(level); + static_cast(zoffset); + RecordUnsupportedFramebufferTextureAttachmentError( + __func__, + "3D framebuffer texture slice attachments are not represented by the current framebuffer attachment model."); + } + + void NamedFramebufferTextureLayer_State(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, + GLint layer) { + static_cast(framebuffer); + static_cast(attachment); + static_cast(texture); + static_cast(level); + static_cast(layer); + RecordUnsupportedFramebufferTextureAttachmentError( + __func__, + "Layered framebuffer texture attachments are not represented by the current framebuffer attachment model."); + } + void FramebufferRenderbuffer_State(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) { if (target == GL_FRAMEBUFFER) { @@ -1569,6 +1665,26 @@ namespace MobileGL::MG_Impl::GLImpl { NamedFramebufferTexture_State(framebuffer, attachment, texture, level); } + void NamedFramebufferTexture1D(GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, + GLint level) { + NamedFramebufferTexture1D_State(framebuffer, attachment, textarget, texture, level); + } + + void NamedFramebufferTexture2D(GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, + GLint level) { + NamedFramebufferTexture2D_State(framebuffer, attachment, textarget, texture, level); + } + + void NamedFramebufferTexture3D(GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, + GLint level, GLint zoffset) { + NamedFramebufferTexture3D_State(framebuffer, attachment, textarget, texture, level, zoffset); + } + + void NamedFramebufferTextureLayer(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, + GLint layer) { + NamedFramebufferTextureLayer_State(framebuffer, attachment, texture, level, layer); + } + void NamedFramebufferDrawBuffer(GLuint framebuffer, GLenum buf) { NamedFramebufferDrawBuffer_State(framebuffer, buf); } diff --git a/MobileGL/MG_Impl/GLImpl/Framebuffer/GL_Framebuffer.h b/MobileGL/MG_Impl/GLImpl/Framebuffer/GL_Framebuffer.h index f7ecb37a..08164f69 100644 --- a/MobileGL/MG_Impl/GLImpl/Framebuffer/GL_Framebuffer.h +++ b/MobileGL/MG_Impl/GLImpl/Framebuffer/GL_Framebuffer.h @@ -46,6 +46,11 @@ namespace MobileGL::MG_Impl::GLImpl { void FramebufferTexture1D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); void FramebufferTexture(GLenum target, GLenum attachment, GLuint texture, GLint level); void NamedFramebufferTexture(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); + void NamedFramebufferTexture1D(GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); + void NamedFramebufferTexture2D(GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); + void NamedFramebufferTexture3D(GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, + GLint zoffset); + void NamedFramebufferTextureLayer(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); void NamedFramebufferDrawBuffer(GLuint framebuffer, GLenum buf); void NamedFramebufferDrawBuffers(GLuint framebuffer, GLsizei n, const GLenum* bufs); void NamedFramebufferReadBuffer(GLuint framebuffer, GLenum src); diff --git a/MobileGL/MG_State/GLState/TextureState/TextureEnum.h b/MobileGL/MG_State/GLState/TextureState/TextureEnum.h index 7bbb50fa..7e777493 100644 --- a/MobileGL/MG_State/GLState/TextureState/TextureEnum.h +++ b/MobileGL/MG_State/GLState/TextureState/TextureEnum.h @@ -111,6 +111,7 @@ namespace MobileGL { RGB10A2UI, RGBA12, RGBA16, + RGBA16Snorm, SRGB8, SRGB8Alpha8, R16F, diff --git a/MobileGL/MG_Test/Program/ProgramUtilTest.cpp b/MobileGL/MG_Test/Program/ProgramUtilTest.cpp index de85927a..291c4514 100644 --- a/MobileGL/MG_Test/Program/ProgramUtilTest.cpp +++ b/MobileGL/MG_Test/Program/ProgramUtilTest.cpp @@ -103,6 +103,37 @@ void main() { } } +TEST_F(ProgramUtilTest, PreprocessFragmentShaderRenamesMin3Max3Helpers) { + using namespace MG_Util::ShaderTranspiler; + + String source = R"(#version 460 core +out vec4 fragColor; + +float min3(float a, float b, float c) { return min(min(a, b), c); } +float max3(float a, float b, float c) { return max(max(a, b), c); } + +void main() { + float dark = min3(0.1, 0.2, 0.3); + float bright = max3(max3(0.1, 0.2, 0.3), 0.4, 0.5); + fragColor = vec4(dark, bright, 0.0, 1.0); +})"; + + PreprocessShaderSource(ShaderStage::Fragment, source); + + EXPECT_NE(source.find("float mg_min3("), String::npos); + EXPECT_NE(source.find("float mg_max3("), String::npos); + EXPECT_NE(source.find("mg_min3(0.1, 0.2, 0.3)"), String::npos); + EXPECT_NE(source.find("mg_max3(mg_max3(0.1, 0.2, 0.3), 0.4, 0.5)"), String::npos); + EXPECT_EQ(source.find("float min3("), String::npos); + EXPECT_EQ(source.find("float max3("), String::npos); + + ShaderAttrib attrib{.shaderType = GL_FRAGMENT_SHADER, .sourceStr = source}; + auto res = ShaderCompiler::CompileShader(attrib); + if (!res) { + FAIL() << "errc: " << res.error().errc << "\nlog: " << res.error().log << "\nsource:\n" << source; + } +} + const char* vs = R"(#version 150 in vec4 Position; diff --git a/MobileGL/MG_Util/Converters/GLToMG/TextureEnumConverter.cpp b/MobileGL/MG_Util/Converters/GLToMG/TextureEnumConverter.cpp index efc32612..f8785806 100644 --- a/MobileGL/MG_Util/Converters/GLToMG/TextureEnumConverter.cpp +++ b/MobileGL/MG_Util/Converters/GLToMG/TextureEnumConverter.cpp @@ -148,6 +148,8 @@ namespace MobileGL { return TextureInternalFormat::RGBA12; case GL_RGBA16: return TextureInternalFormat::RGBA16; + case GL_RGBA16_SNORM: + return TextureInternalFormat::RGBA16Snorm; case GL_SRGB8: return TextureInternalFormat::SRGB8; case GL_SRGB8_ALPHA8: diff --git a/MobileGL/MG_Util/Converters/MGToGL/TextureEnumConverter.cpp b/MobileGL/MG_Util/Converters/MGToGL/TextureEnumConverter.cpp index 882a0206..864cf6de 100644 --- a/MobileGL/MG_Util/Converters/MGToGL/TextureEnumConverter.cpp +++ b/MobileGL/MG_Util/Converters/MGToGL/TextureEnumConverter.cpp @@ -132,6 +132,8 @@ namespace MobileGL { return GL_RGBA12; case TextureInternalFormat::RGBA16: return GL_RGBA16; + case TextureInternalFormat::RGBA16Snorm: + return GL_RGBA16_SNORM; case TextureInternalFormat::SRGB8: return GL_SRGB8; case TextureInternalFormat::SRGB8Alpha8: diff --git a/MobileGL/MG_Util/Converters/MGToMG/TextureEnumConverter.cpp b/MobileGL/MG_Util/Converters/MGToMG/TextureEnumConverter.cpp index 92c2b1fd..62b953fd 100644 --- a/MobileGL/MG_Util/Converters/MGToMG/TextureEnumConverter.cpp +++ b/MobileGL/MG_Util/Converters/MGToMG/TextureEnumConverter.cpp @@ -81,6 +81,7 @@ namespace MobileGL { case TextureInternalFormat::RGB10A2UI: case TextureInternalFormat::RGBA12: case TextureInternalFormat::RGBA16: + case TextureInternalFormat::RGBA16Snorm: case TextureInternalFormat::SRGB8: case TextureInternalFormat::SRGB8Alpha8: case TextureInternalFormat::R16F: @@ -284,6 +285,7 @@ namespace MobileGL { case TextureInternalFormat::RGB10A2UI: case TextureInternalFormat::RGBA12: case TextureInternalFormat::RGBA16: + case TextureInternalFormat::RGBA16Snorm: case TextureInternalFormat::SRGB8Alpha8: case TextureInternalFormat::RGBA16F: case TextureInternalFormat::RGBA32F: @@ -312,4 +314,4 @@ namespace MobileGL { } } } // namespace MG_Util -} // namespace MobileGL \ No newline at end of file +} // namespace MobileGL diff --git a/MobileGL/MG_Util/Converters/MGToStr/TextureEnumConverter.cpp b/MobileGL/MG_Util/Converters/MGToStr/TextureEnumConverter.cpp index 0b2f7efb..e43f6e20 100644 --- a/MobileGL/MG_Util/Converters/MGToStr/TextureEnumConverter.cpp +++ b/MobileGL/MG_Util/Converters/MGToStr/TextureEnumConverter.cpp @@ -132,6 +132,8 @@ namespace MobileGL { return "RGBA12"; case TextureInternalFormat::RGBA16: return "RGBA16"; + case TextureInternalFormat::RGBA16Snorm: + return "RGBA16Snorm"; case TextureInternalFormat::SRGB8: return "SRGB8"; case TextureInternalFormat::SRGB8Alpha8: diff --git a/MobileGL/MG_Util/Converters/MGToVk/TextureEnumConverter.cpp b/MobileGL/MG_Util/Converters/MGToVk/TextureEnumConverter.cpp index 68568525..cb6802d8 100644 --- a/MobileGL/MG_Util/Converters/MGToVk/TextureEnumConverter.cpp +++ b/MobileGL/MG_Util/Converters/MGToVk/TextureEnumConverter.cpp @@ -128,6 +128,8 @@ namespace MobileGL { return VK_FORMAT_A2R10G10B10_UINT_PACK32; case TextureInternalFormat::RGBA16: return VK_FORMAT_R16G16B16A16_UNORM; + case TextureInternalFormat::RGBA16Snorm: + return VK_FORMAT_R16G16B16A16_SNORM; case TextureInternalFormat::SRGB8: return VK_FORMAT_R8G8B8_SRGB; case TextureInternalFormat::SRGB8Alpha8: diff --git a/MobileGL/MG_Util/Metrics/TextureMetrics.cpp b/MobileGL/MG_Util/Metrics/TextureMetrics.cpp index c7e7b7e0..4bf7da45 100644 --- a/MobileGL/MG_Util/Metrics/TextureMetrics.cpp +++ b/MobileGL/MG_Util/Metrics/TextureMetrics.cpp @@ -45,8 +45,6 @@ namespace MobileGL { case TextureInternalFormat::RGB10: case TextureInternalFormat::RGB12: - case TextureInternalFormat::RGB16: - case TextureInternalFormat::RGB16Snorm: case TextureInternalFormat::RGBA2: case TextureInternalFormat::RGBA4: case TextureInternalFormat::RGB5A1: @@ -73,6 +71,8 @@ namespace MobileGL { case TextureInternalFormat::RG16F: return 4; + case TextureInternalFormat::RGB16: + case TextureInternalFormat::RGB16Snorm: case TextureInternalFormat::RGB16F: case TextureInternalFormat::RGB16I: case TextureInternalFormat::RGB16UI: @@ -80,6 +80,7 @@ namespace MobileGL { case TextureInternalFormat::RGBA12: case TextureInternalFormat::RGBA16: + case TextureInternalFormat::RGBA16Snorm: case TextureInternalFormat::RGBA16I: case TextureInternalFormat::RGBA16UI: case TextureInternalFormat::RGBA16F: @@ -208,6 +209,7 @@ namespace MobileGL { case TextureInternalFormat::SRGB8Alpha8: case TextureInternalFormat::RGBA12: case TextureInternalFormat::RGBA16: + case TextureInternalFormat::RGBA16Snorm: case TextureInternalFormat::RGBA16I: case TextureInternalFormat::RGBA16UI: case TextureInternalFormat::RGBA16F: @@ -424,6 +426,7 @@ namespace MobileGL { s.Alpha = 12; break; case TextureInternalFormat::RGBA16: + case TextureInternalFormat::RGBA16Snorm: case TextureInternalFormat::RGBA16I: case TextureInternalFormat::RGBA16UI: case TextureInternalFormat::RGBA16F: diff --git a/MobileGL/MG_Util/ShaderTranspiler/ShaderSourceProcessor.cpp b/MobileGL/MG_Util/ShaderTranspiler/ShaderSourceProcessor.cpp index 900773c2..e75728a7 100644 --- a/MobileGL/MG_Util/ShaderTranspiler/ShaderSourceProcessor.cpp +++ b/MobileGL/MG_Util/ShaderTranspiler/ShaderSourceProcessor.cpp @@ -391,6 +391,8 @@ namespace MobileGL { RenameBuiltinShadowingFunction(source, "round", "mg_round"); RenameBuiltinShadowingFunction(source, "tanh", "mg_tanh"); RenameBuiltinShadowingFunction(source, "fma", "mg_fma"); + RenameBuiltinShadowingFunction(source, "min3", "mg_min3"); + RenameBuiltinShadowingFunction(source, "max3", "mg_max3"); ModernizeLegacyGLSL(stage, source); InjectDepthRangeBuiltinShim(stage, source); }