[Improvement] (...): Optimize code.

This commit is contained in:
BZLZHH
2025-10-31 13:29:48 +08:00
parent 2652a12fdc
commit d982928a23
39 changed files with 284 additions and 775 deletions
+3 -1
View File
@@ -38,18 +38,20 @@ set(SOURCE_FILES
MobileGL/MG_Util/Converters/MGToStr/BufferEnumConverter.cpp MobileGL/MG_Util/Converters/MGToStr/BufferEnumConverter.cpp
MobileGL/MG_Util/Converters/MGToStr/FramebufferEnumConverter.cpp MobileGL/MG_Util/Converters/MGToStr/FramebufferEnumConverter.cpp
MobileGL/MG_Util/Converters/MGToStr/TextureEnumConverter.cpp MobileGL/MG_Util/Converters/MGToStr/TextureEnumConverter.cpp
MobileGL/MG_Util/Converters/GLToGlslang/GLShaderLangConverter.cpp MobileGL/MG_Util/Converters/GLToGlslang/ProgramEnumConverter.cpp
MobileGL/MG_Util/Converters/MGToGL/ErrorCodeConverter.cpp MobileGL/MG_Util/Converters/MGToGL/ErrorCodeConverter.cpp
MobileGL/MG_Util/Converters/MGToGL/BufferEnumConverter.cpp MobileGL/MG_Util/Converters/MGToGL/BufferEnumConverter.cpp
MobileGL/MG_Util/Converters/MGToGL/FramebufferEnumConverter.cpp MobileGL/MG_Util/Converters/MGToGL/FramebufferEnumConverter.cpp
MobileGL/MG_Util/Converters/MGToGL/TextureEnumConverter.cpp MobileGL/MG_Util/Converters/MGToGL/TextureEnumConverter.cpp
MobileGL/MG_Util/Converters/MGToGL/DataTypeConverter.cpp MobileGL/MG_Util/Converters/MGToGL/DataTypeConverter.cpp
MobileGL/MG_Util/Converters/MGToGL/RenderStateEnumConverter.cpp MobileGL/MG_Util/Converters/MGToGL/RenderStateEnumConverter.cpp
MobileGL/MG_Util/Converters/MGToGL/ProgramEnumConverter.cpp
MobileGL/MG_Util/Converters/GLToMG/BufferEnumConverter.cpp MobileGL/MG_Util/Converters/GLToMG/BufferEnumConverter.cpp
MobileGL/MG_Util/Converters/GLToMG/FramebufferEnumConverter.cpp MobileGL/MG_Util/Converters/GLToMG/FramebufferEnumConverter.cpp
MobileGL/MG_Util/Converters/GLToMG/TextureEnumConverter.cpp MobileGL/MG_Util/Converters/GLToMG/TextureEnumConverter.cpp
MobileGL/MG_Util/Converters/GLToMG/DataTypeConverter.cpp MobileGL/MG_Util/Converters/GLToMG/DataTypeConverter.cpp
MobileGL/MG_Util/Converters/GLToMG/RenderStateEnumConverter.cpp MobileGL/MG_Util/Converters/GLToMG/RenderStateEnumConverter.cpp
MobileGL/MG_Util/Converters/GLToMG/ProgramEnumConverter.cpp
MobileGL/MG_Util/Converters/MGToMG/TextureEnumConverter.cpp MobileGL/MG_Util/Converters/MGToMG/TextureEnumConverter.cpp
MobileGL/MG_Util/ShaderTranspiler/ShaderCompiler.cpp MobileGL/MG_Util/ShaderTranspiler/ShaderCompiler.cpp
+15 -15
View File
@@ -245,8 +245,7 @@ namespace MobileGL::MG_Backend::DirectGLES {
} // namespace PrgramImpl } // namespace PrgramImpl
void BindCurrentFBO(FramebufferTarget target) { void BindCurrentFBO(FramebufferTarget target) {
const auto& currentFBO = const auto& currentFBO = MG_State::pGLContext->GetFramebufferBindingSlot(target).GetBoundObject();
MG_State::pGLContext->GetFramebufferBindingSlot(target).GetBoundObject();
if (currentFBO && currentFBO != MG_Impl::GLImpl::FramebufferImpl::pDefaultFramebufferInfo->defaultFBO) { if (currentFBO && currentFBO != MG_Impl::GLImpl::FramebufferImpl::pDefaultFramebufferInfo->defaultFBO) {
const auto& backendFBOIt = FramebufferImpl::g_backendFramebufferObjects.find(currentFBO); const auto& backendFBOIt = FramebufferImpl::g_backendFramebufferObjects.find(currentFBO);
if (backendFBOIt != FramebufferImpl::g_backendFramebufferObjects.end()) { if (backendFBOIt != FramebufferImpl::g_backendFramebufferObjects.end()) {
@@ -300,9 +299,11 @@ namespace MobileGL::MG_Backend::DirectGLES {
const auto& samplerObj = textureObject->GetSamplerObject(); const auto& samplerObj = textureObject->GetSamplerObject();
const auto minfilter = samplerObj->GetMinFilter(); const auto minfilter = samplerObj->GetMinFilter();
MG_External::GLES::glTexParameteri(target, GL_TEXTURE_MIN_FILTER, MG_Util::ConvertSamplerFilterModeToGLEnum(minfilter)); MG_External::GLES::glTexParameteri(target, GL_TEXTURE_MIN_FILTER,
MG_Util::ConvertSamplerFilterModeToGLEnum(minfilter));
const auto magfilter = samplerObj->GetMagFilter(); const auto magfilter = samplerObj->GetMagFilter();
MG_External::GLES::glTexParameteri(target, GL_TEXTURE_MAG_FILTER, MG_Util::ConvertSamplerFilterModeToGLEnum(magfilter)); MG_External::GLES::glTexParameteri(target, GL_TEXTURE_MAG_FILTER,
MG_Util::ConvertSamplerFilterModeToGLEnum(magfilter));
MG_External::GLES::glTexParameterf(target, GL_TEXTURE_MIN_LOD, samplerObj->GetMinLod()); MG_External::GLES::glTexParameterf(target, GL_TEXTURE_MIN_LOD, samplerObj->GetMinLod());
MG_External::GLES::glTexParameterf(target, GL_TEXTURE_MAX_LOD, samplerObj->GetMaxLod()); MG_External::GLES::glTexParameterf(target, GL_TEXTURE_MAX_LOD, samplerObj->GetMaxLod());
} }
@@ -322,11 +323,11 @@ namespace MobileGL::MG_Backend::DirectGLES {
currentProgram->MapUBO()); currentProgram->MapUBO());
MG_External::GLES::glBindBuffer(GL_UNIFORM_BUFFER, 0); MG_External::GLES::glBindBuffer(GL_UNIFORM_BUFFER, 0);
Uint blockIndex = MG_External::GLES::glGetUniformBlockIndex(backendProgramIt->second->GetBackendProgramId(), Uint blockIndex = MG_External::GLES::glGetUniformBlockIndex(
MG_Util::ShaderTranspiler::GLOBAL_UBO_NAME); backendProgramIt->second->GetBackendProgramId(), MG_Util::ShaderTranspiler::GLOBAL_UBO_NAME);
MG_External::GLES::glUniformBlockBinding( MG_External::GLES::glUniformBlockBinding(backendProgramIt->second->GetBackendProgramId(), blockIndex,
backendProgramIt->second->GetBackendProgramId(), blockIndex, 0); 0);
MG_External::GLES::glBindBufferBase(GL_UNIFORM_BUFFER, 0, MG_External::GLES::glBindBufferBase(GL_UNIFORM_BUFFER, 0,
backendProgramIt->second->GetBackendGlobalUBOId()); backendProgramIt->second->GetBackendGlobalUBOId());
@@ -335,10 +336,10 @@ namespace MobileGL::MG_Backend::DirectGLES {
auto maxUniformLoc = currentProgram->GetMaxUniformLocation(); auto maxUniformLoc = currentProgram->GetMaxUniformLocation();
for (int loc = 0; loc < maxUniformLoc; ++loc) { for (int loc = 0; loc < maxUniformLoc; ++loc) {
auto unit = currentProgram->GetUniformSamplerOrImageUnitIndex(loc); auto unit = currentProgram->GetUniformSamplerOrImageUnitIndex(loc);
if (unit == -1) if (unit == -1) continue;
continue;
auto& name = currentProgram->GetUniformName(loc); auto& name = currentProgram->GetUniformName(loc);
auto locAtBackend = MG_External::GLES::glGetUniformLocation(backendProgramIt->second->GetBackendProgramId(), name.c_str()); auto locAtBackend = MG_External::GLES::glGetUniformLocation(
backendProgramIt->second->GetBackendProgramId(), name.c_str());
MG_External::GLES::glUniform1i(locAtBackend, unit); MG_External::GLES::glUniform1i(locAtBackend, unit);
} }
} else { } else {
@@ -383,8 +384,8 @@ namespace MobileGL::MG_Backend::DirectGLES {
} }
} }
void BlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, void BlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1,
GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) { GLint dstY1, GLbitfield mask, GLenum filter) {
TextureImpl::SyncNeccessaryTextures(); TextureImpl::SyncNeccessaryTextures();
FramebufferImpl::SyncCurrentFBO(); FramebufferImpl::SyncCurrentFBO();
RenderStateImpl::SyncRenderState(); RenderStateImpl::SyncRenderState();
@@ -392,8 +393,7 @@ namespace MobileGL::MG_Backend::DirectGLES {
BindCurrentFBO(FramebufferTarget::Draw); BindCurrentFBO(FramebufferTarget::Draw);
BindCurrentFBO(FramebufferTarget::Read); BindCurrentFBO(FramebufferTarget::Read);
MG_External::GLES::glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, MG_External::GLES::glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
dstX1, dstY1, mask, filter);
} }
const GLubyte* GetString(GLenum name) { const GLubyte* GetString(GLenum name) {
+2 -2
View File
@@ -14,7 +14,7 @@ namespace MobileGL::MG_Backend::DirectGLES {
GLsizei drawcount); GLsizei drawcount);
void MultiDrawElementsBaseVertex(GLenum mode, const GLsizei* count, GLenum type, const GLvoid* const* indices, void MultiDrawElementsBaseVertex(GLenum mode, const GLsizei* count, GLenum type, const GLvoid* const* indices,
GLsizei drawcount, const GLint* basevertex); GLsizei drawcount, const GLint* basevertex);
void BlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, void BlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1,
GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); GLint dstY1, GLbitfield mask, GLenum filter);
const GLubyte* GetString(GLenum name); const GLubyte* GetString(GLenum name);
} // namespace MobileGL::MG_Backend::DirectGLES } // namespace MobileGL::MG_Backend::DirectGLES
+11 -12
View File
@@ -9,6 +9,7 @@
#include <MG_Util/Converters/MGToGL/DataTypeConverter.h> #include <MG_Util/Converters/MGToGL/DataTypeConverter.h>
#include <MG_Util/Converters/MGToGL/BufferEnumConverter.h> #include <MG_Util/Converters/MGToGL/BufferEnumConverter.h>
#include <MG_Util/Converters/MGToGL/TextureEnumConverter.h> #include <MG_Util/Converters/MGToGL/TextureEnumConverter.h>
#include <MG_Util/Converters/MGToGL/ProgramEnumConverter.h>
#include <MG_Util/Converters/MGToGL/FramebufferEnumConverter.h> #include <MG_Util/Converters/MGToGL/FramebufferEnumConverter.h>
#include <MG_State/GLState/FramebufferState/FramebufferObject.h> #include <MG_State/GLState/FramebufferState/FramebufferObject.h>
@@ -111,8 +112,7 @@ namespace MobileGL::MG_Backend::DirectGLES {
(invalidate ? GL_MAP_INVALIDATE_BUFFER_BIT : 0) | GL_MAP_WRITE_BIT | GL_MAP_UNSYNCHRONIZED_BIT); (invalidate ? GL_MAP_INVALIDATE_BUFFER_BIT : 0) | GL_MAP_WRITE_BIT | GL_MAP_UNSYNCHRONIZED_BIT);
const void* data = stateBufferObject->GetDataReadOnly()->data(); const void* data = stateBufferObject->GetDataReadOnly()->data();
if (mappedData) { if (mappedData) {
Memcpy(mappedData, ((const char*)(data) + range.start), Memcpy(mappedData, ((const char*)(data) + range.start), range.end - range.start);
range.end - range.start);
MGLOG_D("Mapped buffer data successfully for object with ID: %u", m_backendBufferId); MGLOG_D("Mapped buffer data successfully for object with ID: %u", m_backendBufferId);
MG_External::GLES::glUnmapBuffer(TempBufferTarget); MG_External::GLES::glUnmapBuffer(TempBufferTarget);
} else { } else {
@@ -152,7 +152,7 @@ namespace MobileGL::MG_Backend::DirectGLES {
return; return;
} }
MGLOG_D("Syncing VAO object with ID: %u to backend for state: 0x%p", m_backendVAOId, stateVAOObject.get()); MGLOG_D("Syncing VAO object with ID: %u to backend for state: %p", m_backendVAOId, stateVAOObject.get());
BufferImpl::BackendBufferBindingProtector backendBufferBindingProtector(BufferImpl::TempBufferTarget); BufferImpl::BackendBufferBindingProtector backendBufferBindingProtector(BufferImpl::TempBufferTarget);
BackendVertexArrayBindingProtector backendVAOBindingProtector; BackendVertexArrayBindingProtector backendVAOBindingProtector;
@@ -180,11 +180,10 @@ namespace MobileGL::MG_Backend::DirectGLES {
if (!attrib.IsInteger) { if (!attrib.IsInteger) {
MG_External::GLES::glVertexAttribPointer( MG_External::GLES::glVertexAttribPointer(
attribIndex, attrib.Size, MG_Util::ConvertDataTypeToGLEnum(attrib.Type), attribIndex, attrib.Size, MG_Util::ConvertDataTypeToGLEnum(attrib.Type),
attrib.Normalized ? GL_TRUE : GL_FALSE, attrib.Normalized ? GL_TRUE : GL_FALSE, attrib.Stride, (const void*)attrib.Offset);
attrib.Stride, (const void *)attrib.Offset);
} else { } else {
MG_External::GLES::glVertexAttribIPointer( MG_External::GLES::glVertexAttribIPointer(attribIndex, attrib.Size,
attribIndex, attrib.Size, MG_Util::ConvertDataTypeToGLEnum(attrib.Type), MG_Util::ConvertDataTypeToGLEnum(attrib.Type),
attrib.Stride, (const void*)attrib.Offset); attrib.Stride, (const void*)attrib.Offset);
} }
@@ -234,7 +233,7 @@ namespace MobileGL::MG_Backend::DirectGLES {
return; return;
} }
MGLOG_D("Syncing texture object with ID: %u to backend for state: 0x%p", m_backendTextureId, MGLOG_D("Syncing texture object with ID: %u to backend for state: %p", m_backendTextureId,
stateTextureObject.get()); stateTextureObject.get());
GLenum target = MG_Util::ConvertTextureTargetToGLEnum(stateTextureObject->GetTarget()); GLenum target = MG_Util::ConvertTextureTargetToGLEnum(stateTextureObject->GetTarget());
@@ -356,7 +355,7 @@ namespace MobileGL::MG_Backend::DirectGLES {
return; return;
} }
MGLOG_D("Syncing FBO object with ID: %u to backend for state: 0x%p", m_backendFBOId, stateFBOObject.get()); MGLOG_D("Syncing FBO object with ID: %u to backend for state: %p", m_backendFBOId, stateFBOObject.get());
BackendFramebufferBindingProtector backendFBOBindingProtector(GL_FRAMEBUFFER); BackendFramebufferBindingProtector backendFBOBindingProtector(GL_FRAMEBUFFER);
// TODO: do i really need to bind here? // TODO: do i really need to bind here?
@@ -425,11 +424,11 @@ namespace MobileGL::MG_Backend::DirectGLES {
} }
if (!stateProgramObject->GetLinkStatus()) { if (!stateProgramObject->GetLinkStatus()) {
MGLOG_E("Program object is not linked, skipping backend sync. Program: 0x%p", stateProgramObject.get()); MGLOG_E("Program object is not linked, skipping backend sync. Program: %p", stateProgramObject.get());
return; return;
} }
MGLOG_D("Syncing program to backend. State program: 0x%p, Backend ID: 0x%p", stateProgramObject.get(), MGLOG_D("Syncing program to backend. State program: %p, Backend ID: %p", stateProgramObject.get(),
m_backendProgramId); m_backendProgramId);
// Detach all existing shaders // Detach all existing shaders
@@ -457,7 +456,7 @@ namespace MobileGL::MG_Backend::DirectGLES {
for (int index = 0; index < attachedShaders.size(); ++index) { for (int index = 0; index < attachedShaders.size(); ++index) {
auto& shader = attachedShaders[index]; auto& shader = attachedShaders[index];
GLenum glShaderType = MG_State::GLState::ConvertGLShaderTypeByMGLShaderStage(shader->GetShaderStage()); GLenum glShaderType = MG_Util::ConvertShaderStageToGLEnum(shader->GetShaderStage());
GLuint backendShaderId = MG_External::GLES::glCreateShader(glShaderType); GLuint backendShaderId = MG_External::GLES::glCreateShader(glShaderType);
if (backendShaderId == 0) { if (backendShaderId == 0) {
+1 -1
View File
@@ -23,7 +23,7 @@ namespace MobileGL {
#else #else
MG_Config::RendererInfoPtr = &RendererInfoUnknown; MG_Config::RendererInfoPtr = &RendererInfoUnknown;
#endif #endif
} } // namespace MG_Config
namespace MG_Backend { namespace MG_Backend {
static RendererInfo RendererInfo; static RendererInfo RendererInfo;
@@ -1,71 +1,8 @@
cmake_minimum_required(VERSION 3.24) cmake_minimum_required(VERSION 3.24)
# # Add the directory containing our custom Find modules
# list(APPEND CMAKE_MODULE_PATH "${MGL_ROOT}/buildsystem/cmake")
# # Find the required libraries using our custom Find modules
# find_package(glslang REQUIRED)
# find_package(SPIRVCross REQUIRED)
# find_package(SPIRVTools)
# message(STATUS "glslang_LIBRARIES: ${glslang_LIBRARIES}")
# message(STATUS "SPIRVTools_LIBRARIES: ${SPIRVTools_LIBRARIES}")
# message(STATUS "SPIRVCross_LIBRARIES: ${SPIRVCross_LIBRARIES}")
# # Set the libraries to link against
# set(LINK_LIBRARIES
# ${glslang_LIBRARIES}
# ${SPIRVCross_LIBRARIES}
# )
# if (SPIRVTools_FOUND)
# list(APPEND LINK_LIBRARIES ${SPIRVTools_LIBRARIES})
# endif()
add_executable( add_executable(
ProgramBench ProgramBench
ProgramBench.cpp ProgramBench.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/ProgramState/ProgramObject.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/ProgramState/ShaderObject.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/ProgramState/ProgramState.cpp
# ${MGL_ROOT}/MobileGL/MG_Impl/GLImpl/Program/GL_Program.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/GLToStr/GLEnumConverter.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/GLToGlslang/GLShaderLangConverter.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/ShaderTranspiler/ShaderCompiler.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/ShaderTranspiler/SpvcSession.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/ShaderTranspiler/glslang/UniformTraverser.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/SPIRVCrossToGL/SpvcTypeConverter.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/Core.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/BufferState/BufferState.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/BufferState/BufferObject.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/VertexArrayState/VertexArrayObject.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/VertexArrayState/VertexArrayState.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/TextureState/TextureObject.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/TextureState/TextureUnit.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/TextureState/TextureState.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/ErrorState/Error.cpp
# ${MGL_ROOT}/MobileGL/MG_Impl/GLImpl/Buffer/GL_Buffer.cpp
# ${MGL_ROOT}/MobileGL/MG_Impl/GLImpl/Getter/GL_Getter.cpp
# ${MGL_ROOT}/MobileGL/MG_Impl/GLImpl/Buffer/Validators.cpp
# ${MGL_ROOT}/MobileGL/MG_Impl/GLImpl/VertexArray/Validators.cpp
# ${MGL_ROOT}/MobileGL/MG_Impl/GLImpl/VertexArray/GL_VertexArray.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/GLToStr/GLEnumConverter.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/MGToStr/GLExtensionConverter.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/MGToStr/BufferEnumConverter.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/MGToStr/DataTypeConverter.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/GLToGlslang/GLShaderLangConverter.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/MGToGL/ErrorCodeConverter.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/MGToGL/BufferEnumConverter.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/MGToGL/DataTypeConverter.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/GLToMG/BufferEnumConverter.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/GLToMG/DataTypeConverter.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Metrics/BufferMetrics.cpp
# ${MGL_ROOT}/MobileGL/MG_Backend/Init.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Debug/Log.cpp
) )
target_include_directories(ProgramBench PRIVATE target_include_directories(ProgramBench PRIVATE
@@ -13,8 +13,8 @@ namespace MobileGL {
void BlitFramebuffer_Backend(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, void BlitFramebuffer_Backend(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0,
GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) { GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) {
#if MOBILEGL_BACKEND == MOBILEGL_BACKEND_TYPE_DIRECT_GLES #if MOBILEGL_BACKEND == MOBILEGL_BACKEND_TYPE_DIRECT_GLES
MG_Backend::DirectGLES::BlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, MG_Backend::DirectGLES::BlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask,
dstX1, dstY1, mask, filter); filter);
#endif #endif
} }
+2 -1
View File
@@ -49,7 +49,8 @@ namespace MobileGL {
case GL_RENDERER: { case GL_RENDERER: {
if (rendererString.empty()) { if (rendererString.empty()) {
const char* backendStr = (const char*)GetString_Backend(GL_RENDER); const char* backendStr = (const char*)GetString_Backend(GL_RENDER);
rendererString = std::format("{} ({}) ({})", MG_Config::RendererInfoPtr->RendererName.c_str(), rendererString =
std::format("{} ({}) ({})", MG_Config::RendererInfoPtr->RendererName.c_str(),
MG_Config::CoreName.c_str(), backendStr ? backendStr : "<unknown GPU>"); MG_Config::CoreName.c_str(), backendStr ? backendStr : "<unknown GPU>");
} }
return (const GLubyte*)rendererString.c_str(); return (const GLubyte*)rendererString.c_str();
@@ -1,7 +1,8 @@
#include "GL_Program.h" #include "GL_Program.h"
#include <MG_State/GLState/Core.h>
#include "MG_State/GLState/Core.h" #include <MG_Util/Converters/GLToMG/ProgramEnumConverter.h>
#include "MG_Util/Converters/SPIRVCrossToGL/SpvcTypeConverter.h" #include <MG_Util/Converters/MGToGL/ProgramEnumConverter.h>
#include <MG_Util/Converters/SPIRVCrossToGL/SpvcTypeConverter.h>
namespace MobileGL { namespace MobileGL {
namespace MG_Impl::GLImpl { namespace MG_Impl::GLImpl {
@@ -111,8 +112,7 @@ namespace MobileGL {
} }
GLuint CreateShader_State(GLenum type) { GLuint CreateShader_State(GLenum type) {
auto shaderId = auto shaderId = MG_State::pGLContext->CreateShader(MG_Util::ConvertGLEnumToShaderStage(type));
MG_State::pGLContext->CreateShader(MG_State::GLState::ConvertMGLShaderStageByGLShaderType(type));
if (shaderId == 0) { if (shaderId == 0) {
MG_State::pGLContext->RecordError( MG_State::pGLContext->RecordError(
ErrorCode::InvalidValue, ErrorCode::InvalidValue,
@@ -300,7 +300,7 @@ namespace MobileGL {
switch (pname) { switch (pname) {
case GL_SHADER_TYPE: case GL_SHADER_TYPE:
*params = ConvertGLShaderTypeByMGLShaderStage(shaderObject->GetShaderStage()); *params = MG_Util::ConvertShaderStageToGLEnum(shaderObject->GetShaderStage());
break; break;
case GL_DELETE_STATUS: case GL_DELETE_STATUS:
*params = shaderObject->GetDeleteStatus(); *params = shaderObject->GetDeleteStatus();
+9 -33
View File
@@ -4,46 +4,22 @@
namespace MobileGL { namespace MobileGL {
namespace MG_Impl::GLImpl { namespace MG_Impl::GLImpl {
GLsync FenceSync_Backend(GLenum condition, GLbitfield flags) { GLsync FenceSync_Backend(GLenum condition, GLbitfield flags) {}
} GLenum ClientWaitSync_Backend(GLsync sync, GLbitfield flags, GLuint64 timeout) {}
GLenum ClientWaitSync_Backend(GLsync sync, void DeleteSync_Backend(GLsync sync) {}
GLbitfield flags,
GLuint64 timeout) {
} GLsync FenceSync_State(GLenum condition, GLbitfield flags) {}
void DeleteSync_Backend(GLsync sync) { GLenum ClientWaitSync_State(GLsync sync, GLbitfield flags, GLuint64 timeout) {}
} void DeleteSync_State(GLsync sync) {}
GLsync FenceSync_State(GLenum condition, GLbitfield flags) { GLsync FenceSync(GLenum condition, GLbitfield flags) {}
} GLenum ClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout) {}
GLenum ClientWaitSync_State(GLsync sync, void DeleteSync(GLsync sync) {}
GLbitfield flags,
GLuint64 timeout) {
}
void DeleteSync_State(GLsync sync) {
}
GLsync FenceSync(GLenum condition, GLbitfield flags) {
}
GLenum ClientWaitSync(GLsync sync,
GLbitfield flags,
GLuint64 timeout) {
}
void DeleteSync(GLsync sync) {
}
} // namespace MG_Impl::GLImpl } // namespace MG_Impl::GLImpl
} // namespace MobileGL } // namespace MobileGL
+1 -3
View File
@@ -4,9 +4,7 @@
namespace MobileGL { namespace MobileGL {
namespace MG_Impl::GLImpl { namespace MG_Impl::GLImpl {
GLsync FenceSync(GLenum condition, GLbitfield flags); GLsync FenceSync(GLenum condition, GLbitfield flags);
GLenum ClientWaitSync(GLsync sync, GLenum ClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout);
GLbitfield flags,
GLuint64 timeout);
void DeleteSync(GLsync sync); void DeleteSync(GLsync sync);
} // namespace MG_Impl::GLImpl } // namespace MG_Impl::GLImpl
} // namespace MobileGL } // namespace MobileGL
@@ -65,8 +65,7 @@ namespace MobileGL {
auto& mipmap = textureObject->GetMipmap(level); auto& mipmap = textureObject->GetMipmap(level);
Vector<Uint8>& data = mipmap.data; Vector<Uint8>& data = mipmap.data;
SizeT bytesPerPixel = SizeT bytesPerPixel = MG_Util::GetInputBytesPerPixel(textureInternalFormat, texturePixelDataType);
MG_Util::GetInputBytesPerPixel(textureInternalFormat, texturePixelDataType);
// SizeT rowStride = mipmap.size.x() * bytesPerPixel; // SizeT rowStride = mipmap.size.x() * bytesPerPixel;
const Uint8* srcData = reinterpret_cast<const Uint8*>(pixels); const Uint8* srcData = reinterpret_cast<const Uint8*>(pixels);
@@ -308,10 +307,9 @@ namespace MobileGL {
if (!TextureImpl::ValidateTextureObject(textureObject)) return; if (!TextureImpl::ValidateTextureObject(textureObject)) return;
// ======================= Processing ================================ // ======================= Processing ================================
SizeT imageSize = isProxy ? 0 : SizeT imageSize = isProxy ? 0
MG_Util::CalculateInputTextureImageSize(textureInternalFormat, : MG_Util::CalculateInputTextureImageSize(
texturePixelDataType, textureInternalFormat, texturePixelDataType, {width, height, 1});
{width, height, 1});
Uint8* skippedPixels = (Uint8*)pixels; Uint8* skippedPixels = (Uint8*)pixels;
if (pixels != nullptr) { if (pixels != nullptr) {
@@ -323,7 +321,8 @@ namespace MobileGL {
textureObject->SetInternalFormat(textureInternalFormat); textureObject->SetInternalFormat(textureInternalFormat);
MG_State::GLState::MipmapLevelInput mipmap = MG_State::GLState::MipmapLevelInput( MG_State::GLState::MipmapLevelInput mipmap = MG_State::GLState::MipmapLevelInput(
{width, height, 1}, level, false, 0, {const_cast<void*>(isProxy ? (void*)skippedPixels : nullptr), imageSize}); {width, height, 1}, level, false, 0,
{const_cast<void*>(isProxy ? (void*)skippedPixels : nullptr), imageSize});
textureObject->SetMipmapLevel(mipmap); textureObject->SetMipmapLevel(mipmap);
} }
@@ -1,5 +1,6 @@
#include "ProgramObject.h" #include "ProgramObject.h"
#include <MG_Util/ShaderTranspiler/ShaderCompiler.h> #include <MG_Util/ShaderTranspiler/ShaderCompiler.h>
#include <MG_Util/Converters/MGToGL/ProgramEnumConverter.h>
#include <MG_Util/Converters/SPIRVCrossToGL/SpvcTypeConverter.h> #include <MG_Util/Converters/SPIRVCrossToGL/SpvcTypeConverter.h>
namespace MobileGL { namespace MobileGL {
@@ -25,17 +26,14 @@ namespace MobileGL {
} }
void ProgramObject::Link() { void ProgramObject::Link() {
// PreLink();
Vector<GLenum> shaderTypes(m_shaders.size()); Vector<GLenum> shaderTypes(m_shaders.size());
Vector<SharedPtr<glslang::TShader>> shaders(m_shaders.size()); Vector<SharedPtr<glslang::TShader>> shaders(m_shaders.size());
for (SizeT i = 0; i < m_shaders.size(); i++) { for (SizeT i = 0; i < m_shaders.size(); i++) {
shaderTypes[i] = ConvertGLShaderTypeByMGLShaderStage(m_shaders[i]->GetShaderStage()); shaderTypes[i] = MG_Util::ConvertShaderStageToGLEnum(m_shaders[i]->GetShaderStage());
shaders[i] = m_shaders[i]->GetCompiledShader(); shaders[i] = m_shaders[i]->GetCompiledShader();
} }
MG_Util::ShaderTranspiler::ProgramAttrib attrib{ MG_Util::ShaderTranspiler::ProgramAttrib attrib{
// .shaderTypes = Move(shaderTypes),
.shaders = Move(shaders), .shaders = Move(shaders),
}; };
@@ -48,8 +46,6 @@ namespace MobileGL {
m_infoLog = result.error().log; m_infoLog = result.error().log;
} }
// PostLink();
DoReflection(); DoReflection();
GenerateBinary(); GenerateBinary();
} }
@@ -111,8 +107,7 @@ namespace MobileGL {
for (auto index : unallocatedUniformIndex) { for (auto index : unallocatedUniformIndex) {
auto& uniform = m_program->getUniform(index); auto& uniform = m_program->getUniform(index);
for (; locNeedle <= m_maxUniformLocation; locNeedle++) { for (; locNeedle <= m_maxUniformLocation; locNeedle++) {
if (m_uniformIndexInTProgram[locNeedle] != 4095) if (m_uniformIndexInTProgram[locNeedle] != 4095) continue;
continue;
// Found a vacant location at locNeedle // Found a vacant location at locNeedle
m_uniformIndexInTProgram[locNeedle] = index; m_uniformIndexInTProgram[locNeedle] = index;
m_uniformLocations[uniform.name] = locNeedle; m_uniformLocations[uniform.name] = locNeedle;
@@ -220,7 +215,7 @@ namespace MobileGL {
Vector<SharedPtr<glslang::TShader>> shaders(m_shaders.size()); Vector<SharedPtr<glslang::TShader>> shaders(m_shaders.size());
Vector<GLenum> shaderTypes(m_shaders.size()); Vector<GLenum> shaderTypes(m_shaders.size());
for (SizeT i = 0; i < m_shaders.size(); i++) { for (SizeT i = 0; i < m_shaders.size(); i++) {
auto shaderType = ConvertGLShaderTypeByMGLShaderStage(m_shaders[i]->GetShaderStage()); auto shaderType = MG_Util::ConvertShaderStageToGLEnum(m_shaders[i]->GetShaderStage());
shaderTypes[i] = shaderType; shaderTypes[i] = shaderType;
ShaderAttrib attrib{ ShaderAttrib attrib{
.shaderType = shaderType, .sourceStr = m_shaders[i]->GetShaderSource(), .flags = 0}; .shaderType = shaderType, .sourceStr = m_shaders[i]->GetShaderSource(), .flags = 0};
@@ -255,7 +250,6 @@ namespace MobileGL {
// auto src = srcResult.value(); // auto src = srcResult.value();
// printf("decompiled src: \n%s\n", src.c_str()); // printf("decompiled src: \n%s\n", src.c_str());
auto& meta = session.GetMetadata(); auto& meta = session.GetMetadata();
auto size = meta.uboSize; auto size = meta.uboSize;
m_uboScratch.resize(size); m_uboScratch.resize(size);
@@ -280,100 +274,6 @@ namespace MobileGL {
void ProgramObject::SetExplicitAttribLocation(Uint index, const char* name) { void ProgramObject::SetExplicitAttribLocation(Uint index, const char* name) {
m_explicitAttribLocations[name] = index; m_explicitAttribLocations[name] = index;
} }
// void ProgramObject::PreLink() {
// m_uniforms.clear();
// m_uniformOffsets.clear();
//
// for (const auto& shader : m_shaders) {
// for (const auto& [name, loc] : shader->GetUniformLocations()) {
// // collect all the names to map
// if (loc != 4095 || m_uniforms.find(name) == m_uniforms.end()) {
// m_uniforms[name] = loc;
// }
//
// // set a flag for those who have an explicit location
// if (loc != 4095) {
// if (loc >= m_uniformOffsets.size()) {
// m_uniformOffsets.reserve(std::bit_ceil(loc + 1));
// m_uniformOffsets.resize(loc + 1, 0);
// }
// assert(m_uniformOffsets[loc] == 0);
// m_uniformOffsets[loc] = 1;
// }
// }
// }
//
// // Let's find a location for those who doesn't have one yet
// Uint nextLocation = 0;
//
// // Find first empty location
// for (SizeT i = 0; i < m_uniformOffsets.size(); i++) {
// if (m_uniformOffsets[i] == 0) {
// nextLocation = i;
// break;
// }
// }
//
// for (auto& [name, loc] : m_uniforms) {
// if (loc == 4095) {
// // check if we drained all the holes already
// if (nextLocation >= m_uniformOffsets.size()) {
// loc = nextLocation;
// m_uniformOffsets.push_back(1);
// nextLocation++;
// continue;
// }
//
// // assign an empty location
// loc = nextLocation;
// m_uniformOffsets[loc] = 1;
//
// // Find next empty location
// for (nextLocation++; nextLocation < m_uniformOffsets.size(); nextLocation++) {
// if (m_uniformOffsets[nextLocation] == 0) break;
// }
// }
// }
//
// m_uniformNames.resize(m_uniformOffsets.size());
// for (auto& [name, loc] : m_uniforms) {
// m_uniformNames[loc] = name;
// m_uniformNameMaxLength = std::max(m_uniformNameMaxLength, (Int)name.length());
// }
// }
//
// void ProgramObject::PostLink() {
// if (m_programBinary.empty()) {
// assert(false);
// return;
// }
// MG_Util::ShaderTranspiler::SpvcSession session(m_programBinary[0]);
// const char* src = nullptr; // we don't care the source atm
// auto result = session.Compile(&src);
// if (result != SPVC_SUCCESS) {
// assert(false);
// return;
// }
// m_metadata = session.GetMetadata();
// auto& uniformOffsets = m_metadata.plainUniformOffsetsInUBO;
// for (const auto& [name, offset] : uniformOffsets) {
// assert(m_uniforms.find(name) != m_uniforms.end());
// assert(m_uniforms[name] < m_uniformOffsets.size());
// m_uniformOffsets[m_uniforms[name]] = offset;
// }
// m_uboScratch.resize(m_metadata.uboSize, 0);
//
// auto& types = m_metadata.plainUniformMemberTypes;
//
// assert(types.size() == m_uniformOffsets.size());
// m_uniformTypes.resize(m_uniformOffsets.size());
// for (const auto& [name, type] : types) {
// auto gltype = MG_Util::ConvertSpvcTypeToGLEnum(type);
// auto location = m_uniforms[name];
// m_uniformTypes[location] = gltype;
// }
// }
} // namespace GLState } // namespace GLState
} // namespace MG_State } // namespace MG_State
} // namespace MobileGL } // namespace MobileGL
@@ -25,8 +25,7 @@ namespace MobileGL {
Uint GetMaxUniformLocation() const { return m_maxUniformLocation; } Uint GetMaxUniformLocation() const { return m_maxUniformLocation; }
Int GetUniformLocation(const String& name) { Int GetUniformLocation(const String& name) {
const auto it = m_uniformLocations.find(name); const auto it = m_uniformLocations.find(name);
if (it == m_uniformLocations.end()) if (it == m_uniformLocations.end()) return -1;
return -1;
return (Int)it->second; return (Int)it->second;
} }
@@ -40,9 +39,7 @@ namespace MobileGL {
return uniform.getType(); return uniform.getType();
} }
Bool IsUniformOpaqueAtLocation(Uint location) const { Bool IsUniformOpaqueAtLocation(Uint location) const { return GetUniformTType(location)->isOpaque(); }
return GetUniformTType(location)->isOpaque();
}
const String& GetUniformName(Uint location) const { const String& GetUniformName(Uint location) const {
auto& uniform = m_program->getUniform(m_uniformIndexInTProgram[location]); auto& uniform = m_program->getUniform(m_uniformIndexInTProgram[location]);
@@ -85,9 +82,6 @@ namespace MobileGL {
void DoReflection(); void DoReflection();
void GenerateBinary(); void GenerateBinary();
void WaitUntilGenerationCompleted(); void WaitUntilGenerationCompleted();
// void PreLink();
// void PostLink();
const Uint m_id = 0; const Uint m_id = 0;
Vector<SharedPtr<ShaderObject>> m_shaders; Vector<SharedPtr<ShaderObject>> m_shaders;
@@ -101,8 +95,6 @@ namespace MobileGL {
Vector<GLenum> m_attribTypes; Vector<GLenum> m_attribTypes;
// Uniforms // Uniforms
// MG_Util::ShaderTranspiler::SpvcMetadata m_metadata;
UnorderedMap<String, Uint> m_uniformLocations; UnorderedMap<String, Uint> m_uniformLocations;
// Ordered by location, // Ordered by location,
// aka. m_uniformIndexInTProgram[loc] == "uniform index of TProgram at location `loc`" // aka. m_uniformIndexInTProgram[loc] == "uniform index of TProgram at location `loc`"
@@ -1,5 +1,6 @@
#include "ShaderObject.h" #include "ShaderObject.h"
#include <MG_Util/ShaderTranspiler/ShaderCompiler.h> #include <MG_Util/ShaderTranspiler/ShaderCompiler.h>
#include <MG_Util/Converters/MGToGL/ProgramEnumConverter.h>
#include <MG_Util/ShaderTranspiler/glslang/UniformTraverser.h> #include <MG_Util/ShaderTranspiler/glslang/UniformTraverser.h>
namespace MobileGL { namespace MobileGL {
@@ -14,16 +15,12 @@ namespace MobileGL {
} }
void ShaderObject::Compile() { void ShaderObject::Compile() {
// if (!DoReflection()) {
// return;
// }
using namespace MG_Util::ShaderTranspiler; using namespace MG_Util::ShaderTranspiler;
// Compile for OpenGL here, so that we can do validation and link // Compile for OpenGL here, so that we can do validation and link
// like a real OpenGL driver at linking stage // like a real OpenGL driver at linking stage
// Will compile for other backends later. // Will compile for other backends later.
ShaderAttrib attrib{.shaderType = ConvertGLShaderTypeByMGLShaderStage(m_stage), ShaderAttrib attrib{.shaderType = MG_Util::ConvertShaderStageToGLEnum(m_stage),
.sourceStr = m_source, .sourceStr = m_source,
.flags = ShaderCompileBits::CompileForOpenGL}; .flags = ShaderCompileBits::CompileForOpenGL};
@@ -40,37 +37,6 @@ namespace MobileGL {
void ShaderObject::MarkAsDeleted() { void ShaderObject::MarkAsDeleted() {
m_deleteStatus = true; m_deleteStatus = true;
} }
// bool ShaderObject::DoReflection() {
// using namespace MG_Util::ShaderTranspiler;
// ShaderAttrib attrib{
// .shaderType = GetGLShaderTypeByMGLShaderStage(m_stage),
// .sourceStr = m_source,
// .flags = ShaderCompileBits::CompileForOpenGL
// };
//
// auto result = ShaderCompiler::CompileShader(attrib);
// if (!result) {
// m_compileStatus = false;
// m_infoLog = result.error().log;
//
// const std::string e = std::format("Shader compilation failed: \nerrc: {}\nmsg: {}\n",
// result.error().errc, result.error().log);
// return false;
// }
//
// auto pShader = result.value();
// auto root = pShader->getIntermediate()->getTreeRoot();
// UniformTraverser traverser;
// root->traverse(&traverser);
// auto& symbols = traverser.GetCollectedSymbols();
// for (const auto& symbol : symbols) {
// m_uniforms[symbol->getName().c_str()] = symbol->getQualifier().layoutLocation;
// }
//
// return true;
// }
} // namespace GLState } // namespace GLState
} // namespace MG_State } // namespace MG_State
} // namespace MobileGL } // namespace MobileGL
@@ -2,8 +2,6 @@
#include <Includes.h> #include <Includes.h>
namespace MobileGL { namespace MobileGL {
namespace MG_State {
namespace GLState {
enum class ShaderStage { enum class ShaderStage {
Vertex, Vertex,
TessControl, TessControl,
@@ -14,46 +12,8 @@ namespace MobileGL {
Unknown = -1 Unknown = -1
}; };
inline static GLenum ConvertGLShaderTypeByMGLShaderStage(ShaderStage stage) { namespace MG_State {
switch (stage) { namespace GLState {
case ShaderStage::Vertex:
return GL_VERTEX_SHADER;
case ShaderStage::TessControl:
return GL_TESS_CONTROL_SHADER;
case ShaderStage::TessEval:
return GL_TESS_EVALUATION_SHADER;
case ShaderStage::Geometry:
return GL_GEOMETRY_SHADER;
case ShaderStage::Fragment:
return GL_FRAGMENT_SHADER;
case ShaderStage::Compute:
return GL_COMPUTE_SHADER;
default:
assert(false);
return GL_FALSE;
}
}
inline static ShaderStage ConvertMGLShaderStageByGLShaderType(GLenum type) {
switch (type) {
case GL_VERTEX_SHADER:
return ShaderStage::Vertex;
case GL_TESS_CONTROL_SHADER:
return ShaderStage::TessControl;
case GL_TESS_EVALUATION_SHADER:
return ShaderStage::TessEval;
case GL_GEOMETRY_SHADER:
return ShaderStage::Geometry;
case GL_FRAGMENT_SHADER:
return ShaderStage::Fragment;
case GL_COMPUTE_SHADER:
return ShaderStage::Compute;
default:
assert(false);
return ShaderStage::Unknown;
}
}
class ShaderObject { class ShaderObject {
public: public:
ShaderObject(const ShaderStage stage, const Uint id) : m_stage(stage), m_id(id) {} ShaderObject(const ShaderStage stage, const Uint id) : m_stage(stage), m_id(id) {}
@@ -72,7 +32,6 @@ namespace MobileGL {
Bool GetDeleteStatus() const { return m_deleteStatus; } Bool GetDeleteStatus() const { return m_deleteStatus; }
private: private:
// bool DoReflection();
const Uint m_id = 0; const Uint m_id = 0;
const ShaderStage m_stage; const ShaderStage m_stage;
String m_source; String m_source;
-3
View File
@@ -1,6 +1,3 @@
//
// Created by Swung 0x48 on 2025/7/17.
//
#include <gtest/gtest.h> #include <gtest/gtest.h>
#include "Includes.h" #include "Includes.h"
-36
View File
@@ -3,42 +3,6 @@ cmake_minimum_required(VERSION 3.14)
add_executable( add_executable(
BufferTest BufferTest
BufferTest.cpp BufferTest.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/Core.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/BufferState/BufferState.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/BufferState/BufferObject.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/VertexArrayState/VertexArrayObject.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/VertexArrayState/VertexArrayState.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/TextureState/TextureObject.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/TextureState/TextureUnit.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/TextureState/TextureState.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/ErrorState/Error.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/ProgramState/ProgramObject.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/ProgramState/ShaderObject.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/ProgramState/ProgramState.cpp
# ${MGL_ROOT}/MobileGL/MG_Impl/GLImpl/Program/GL_Program.cpp
# ${MGL_ROOT}/MobileGL/MG_Impl/GLImpl/Buffer/GL_Buffer.cpp
# ${MGL_ROOT}/MobileGL/MG_Impl/GLImpl/Getter/GL_Getter.cpp
# ${MGL_ROOT}/MobileGL/MG_Impl/GLImpl/Buffer/Validators.cpp
# ${MGL_ROOT}/MobileGL/MG_Impl/GLImpl/VertexArray/Validators.cpp
# ${MGL_ROOT}/MobileGL/MG_Impl/GLImpl/VertexArray/GL_VertexArray.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/GLToStr/GLEnumConverter.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/MGToStr/GLExtensionConverter.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/MGToStr/BufferEnumConverter.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/MGToStr/DataTypeConverter.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/GLToGlslang/GLShaderLangConverter.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/MGToGL/ErrorCodeConverter.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/MGToGL/BufferEnumConverter.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/MGToGL/DataTypeConverter.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/GLToMG/BufferEnumConverter.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/GLToMG/DataTypeConverter.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Metrics/BufferMetrics.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/ShaderTranspiler/ShaderCompiler.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/ShaderTranspiler/SpvcSession.cpp
# ${MGL_ROOT}/MobileGL/MG_Backend/Init.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Debug/Log.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/ShaderTranspiler/glslang/UniformTraverser.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/SPIRVCrossToGL/SpvcTypeConverter.cpp
) )
target_include_directories(BufferTest PRIVATE target_include_directories(BufferTest PRIVATE
+1 -42
View File
@@ -5,7 +5,7 @@ add_executable(
ProgramUtilTest.cpp ProgramUtilTest.cpp
${MGL_ROOT}/MobileGL/MG_Util/Converters/GLToStr/GLEnumConverter.cpp ${MGL_ROOT}/MobileGL/MG_Util/Converters/GLToStr/GLEnumConverter.cpp
${MGL_ROOT}/MobileGL/MG_Util/Converters/GLToGlslang/GLShaderLangConverter.cpp ${MGL_ROOT}/MobileGL/MG_Util/Converters/GLToGlslang/ProgramEnumConverter.cpp
${MGL_ROOT}/MobileGL/MG_Util/ShaderTranspiler/ShaderCompiler.cpp ${MGL_ROOT}/MobileGL/MG_Util/ShaderTranspiler/ShaderCompiler.cpp
${MGL_ROOT}/MobileGL/MG_Util/ShaderTranspiler/SpvcSession.cpp ${MGL_ROOT}/MobileGL/MG_Util/ShaderTranspiler/SpvcSession.cpp
${MGL_ROOT}/MobileGL/MG_Util/ShaderTranspiler/glslang/UniformTraverser.cpp ${MGL_ROOT}/MobileGL/MG_Util/ShaderTranspiler/glslang/UniformTraverser.cpp
@@ -25,47 +25,6 @@ target_link_libraries(
add_executable( add_executable(
ProgramTest ProgramTest
ProgramTest.cpp ProgramTest.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/ProgramState/ProgramObject.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/ProgramState/ShaderObject.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/ProgramState/ProgramState.cpp
# ${MGL_ROOT}/MobileGL/MG_Impl/GLImpl/Program/GL_Program.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/GLToStr/GLEnumConverter.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/GLToGlslang/GLShaderLangConverter.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/ShaderTranspiler/ShaderCompiler.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/ShaderTranspiler/SpvcSession.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/ShaderTranspiler/glslang/UniformTraverser.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/SPIRVCrossToGL/SpvcTypeConverter.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/Core.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/BufferState/BufferState.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/BufferState/BufferObject.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/VertexArrayState/VertexArrayObject.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/VertexArrayState/VertexArrayState.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/TextureState/TextureObject.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/TextureState/TextureUnit.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/TextureState/TextureState.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/ErrorState/Error.cpp
# ${MGL_ROOT}/MobileGL/MG_Impl/GLImpl/Buffer/GL_Buffer.cpp
# ${MGL_ROOT}/MobileGL/MG_Impl/GLImpl/Getter/GL_Getter.cpp
# ${MGL_ROOT}/MobileGL/MG_Impl/GLImpl/Buffer/Validators.cpp
# ${MGL_ROOT}/MobileGL/MG_Impl/GLImpl/VertexArray/Validators.cpp
# ${MGL_ROOT}/MobileGL/MG_Impl/GLImpl/VertexArray/GL_VertexArray.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/GLToStr/GLEnumConverter.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/MGToStr/GLExtensionConverter.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/MGToStr/BufferEnumConverter.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/MGToStr/DataTypeConverter.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/GLToGlslang/GLShaderLangConverter.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/MGToGL/ErrorCodeConverter.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/MGToGL/BufferEnumConverter.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/MGToGL/DataTypeConverter.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/GLToMG/BufferEnumConverter.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/GLToMG/DataTypeConverter.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Metrics/BufferMetrics.cpp
# ${MGL_ROOT}/MobileGL/MG_Backend/Init.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Debug/Log.cpp
) )
target_include_directories(ProgramTest PRIVATE target_include_directories(ProgramTest PRIVATE
-1
View File
@@ -688,4 +688,3 @@ TEST_F(ProgramTest, MinecraftBlitScreenLightmap) {
auto programObject = MG_State::pGLContext->GetCurrentProgram(); auto programObject = MG_State::pGLContext->GetCurrentProgram();
ASSERT_GT(programObject->GetUBOSize(), 0); ASSERT_GT(programObject->GetUBOSize(), 0);
} }
+1 -4
View File
@@ -1,14 +1,11 @@
//
// Created by Swung 0x48 on 2025/7/17.
//
#include <gtest/gtest.h> #include <gtest/gtest.h>
#include "Includes.h" #include "Includes.h"
#include <MG_Util/Converters/GLToStr/GLEnumConverter.h> #include <MG_Util/Converters/GLToStr/GLEnumConverter.h>
#include <MG_Util/ShaderTranspiler/ShaderCompiler.h> #include <MG_Util/ShaderTranspiler/ShaderCompiler.h>
#include <MG_Util/ShaderTranspiler/Types.h> #include <MG_Util/ShaderTranspiler/Types.h>
#include <MG_Util/ShaderTranspiler/glslang/UniformTraverser.h>
#include "MG_Util/ShaderTranspiler/glslang/UniformTraverser.h"
using namespace MobileGL; using namespace MobileGL;
class ProgramUtilTest : public ::testing::Test { class ProgramUtilTest : public ::testing::Test {
@@ -3,42 +3,6 @@ cmake_minimum_required(VERSION 3.14)
add_executable( add_executable(
VertexArrayTest VertexArrayTest
VertexArrayTest.cpp VertexArrayTest.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/Core.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/BufferState/BufferState.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/BufferState/BufferObject.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/VertexArrayState/VertexArrayObject.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/VertexArrayState/VertexArrayState.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/TextureState/TextureObject.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/TextureState/TextureUnit.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/TextureState/TextureState.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/ErrorState/Error.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/ProgramState/ProgramObject.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/ProgramState/ShaderObject.cpp
# ${MGL_ROOT}/MobileGL/MG_State/GLState/ProgramState/ProgramState.cpp
# ${MGL_ROOT}/MobileGL/MG_Impl/GLImpl/Program/GL_Program.cpp
# ${MGL_ROOT}/MobileGL/MG_Impl/GLImpl/Buffer/GL_Buffer.cpp
# ${MGL_ROOT}/MobileGL/MG_Impl/GLImpl/Getter/GL_Getter.cpp
# ${MGL_ROOT}/MobileGL/MG_Impl/GLImpl/Buffer/Validators.cpp
# ${MGL_ROOT}/MobileGL/MG_Impl/GLImpl/VertexArray/Validators.cpp
# ${MGL_ROOT}/MobileGL/MG_Impl/GLImpl/VertexArray/GL_VertexArray.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/GLToStr/GLEnumConverter.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/MGToStr/GLExtensionConverter.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/MGToStr/BufferEnumConverter.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/MGToStr/DataTypeConverter.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/GLToGlslang/GLShaderLangConverter.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/MGToGL/ErrorCodeConverter.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/MGToGL/BufferEnumConverter.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/MGToGL/DataTypeConverter.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/GLToMG/BufferEnumConverter.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/GLToMG/DataTypeConverter.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Metrics/BufferMetrics.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/ShaderTranspiler/ShaderCompiler.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/ShaderTranspiler/SpvcSession.cpp
# ${MGL_ROOT}/MobileGL/MG_Backend/Init.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Debug/Log.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/ShaderTranspiler/glslang/UniformTraverser.cpp
# ${MGL_ROOT}/MobileGL/MG_Util/Converters/SPIRVCrossToGL/SpvcTypeConverter.cpp
) )
target_include_directories(VertexArrayTest PRIVATE target_include_directories(VertexArrayTest PRIVATE
@@ -1,4 +1,4 @@
#include "GLShaderLangConverter.h" #include "ProgramEnumConverter.h"
namespace MobileGL { namespace MobileGL {
namespace MG_Util { namespace MG_Util {
@@ -0,0 +1,24 @@
#include "ProgramEnumConverter.h"
namespace MobileGL {
namespace MG_Util {
ShaderStage ConvertGLEnumToShaderStage(GLenum type) {
switch (type) {
case GL_VERTEX_SHADER:
return ShaderStage::Vertex;
case GL_TESS_CONTROL_SHADER:
return ShaderStage::TessControl;
case GL_TESS_EVALUATION_SHADER:
return ShaderStage::TessEval;
case GL_GEOMETRY_SHADER:
return ShaderStage::Geometry;
case GL_FRAGMENT_SHADER:
return ShaderStage::Fragment;
case GL_COMPUTE_SHADER:
return ShaderStage::Compute;
default:
return ShaderStage::Unknown;
}
}
} // namespace MG_Util
} // namespace MobileGL
@@ -0,0 +1,9 @@
#pragma once
#include <Includes.h>
#include <MG_State/GLState/ProgramState/ShaderObject.h>
namespace MobileGL {
namespace MG_Util {
ShaderStage ConvertGLEnumToShaderStage(GLenum type);
}
} // namespace MobileGL
@@ -0,0 +1,24 @@
#include "ProgramEnumConverter.h"
namespace MobileGL {
namespace MG_Util {
GLenum ConvertShaderStageToGLEnum(ShaderStage stage) {
switch (stage) {
case ShaderStage::Vertex:
return GL_VERTEX_SHADER;
case ShaderStage::TessControl:
return GL_TESS_CONTROL_SHADER;
case ShaderStage::TessEval:
return GL_TESS_EVALUATION_SHADER;
case ShaderStage::Geometry:
return GL_GEOMETRY_SHADER;
case ShaderStage::Fragment:
return GL_FRAGMENT_SHADER;
case ShaderStage::Compute:
return GL_COMPUTE_SHADER;
default:
return GL_UNKNOWN_MGL;
}
}
} // namespace MG_Util
} // namespace MobileGL
@@ -0,0 +1,9 @@
#pragma once
#include <Includes.h>
#include <MG_State/GLState/ProgramState/ShaderObject.h>
namespace MobileGL {
namespace MG_Util {
GLenum ConvertShaderStageToGLEnum(ShaderStage stage);
}
} // namespace MobileGL
@@ -1,10 +1,5 @@
//
// Created by Swung0x48 on 2025/8/14.
//
#include "SpvcTypeConverter.h" #include "SpvcTypeConverter.h"
#include <MG_Util/ShaderTranspiler/SpvcSession.h>
#include "MG_Util/ShaderTranspiler/SpvcSession.h"
namespace MobileGL { namespace MobileGL {
namespace MG_Util { namespace MG_Util {
@@ -1,7 +1,6 @@
#pragma once #pragma once
#include <Includes.h> #include <Includes.h>
#include <MG_Util/ShaderTranspiler/SpvcSession.h>
#include "MG_Util/ShaderTranspiler/SpvcSession.h"
namespace MobileGL { namespace MobileGL {
namespace MG_Util { namespace MG_Util {
@@ -1,7 +1,3 @@
//
// Created by Swung0x48 on 2025/8/22.
//
#include "BufferMetrics.h" #include "BufferMetrics.h"
namespace MobileGL { namespace MobileGL {
+1 -9
View File
@@ -1,10 +1,4 @@
// #pragma once
// Created by Swung0x48 on 2025/8/22.
//
#ifndef BUFFERMETRICS_H
#define BUFFERMETRICS_H
#include <Includes.h> #include <Includes.h>
namespace MobileGL { namespace MobileGL {
@@ -12,5 +6,3 @@ namespace MobileGL {
SizeT GetGLTypeSize(GLenum type); SizeT GetGLTypeSize(GLenum type);
} }
} // namespace MobileGL } // namespace MobileGL
#endif // BUFFERMETRICS_H
+3 -6
View File
@@ -198,11 +198,9 @@ namespace MobileGL {
SizeT GetInternalBytesPerPixel(TextureInternalFormat internalformat, TexturePixelDataType type) { SizeT GetInternalBytesPerPixel(TextureInternalFormat internalformat, TexturePixelDataType type) {
SizeT sizedTextureFormatSize = GetSizedInternalFormatSizeInBytes(internalformat); SizeT sizedTextureFormatSize = GetSizedInternalFormatSizeInBytes(internalformat);
if (sizedTextureFormatSize > 0) if (sizedTextureFormatSize > 0) return sizedTextureFormatSize;
return sizedTextureFormatSize;
SizeT sizedPixelFormatSize = GetSizedTexturePixelDataTypeSize(type); SizeT sizedPixelFormatSize = GetSizedTexturePixelDataTypeSize(type);
if (sizedPixelFormatSize > 0) if (sizedPixelFormatSize > 0) return sizedPixelFormatSize;
return sizedPixelFormatSize;
SizeT chCount = GetBaseInternalFormatComponentCount(internalformat); SizeT chCount = GetBaseInternalFormatComponentCount(internalformat);
SizeT bytesPerChannel = GetBaseTexturePixelDataTypeSize(type); SizeT bytesPerChannel = GetBaseTexturePixelDataTypeSize(type);
return chCount * bytesPerChannel; return chCount * bytesPerChannel;
@@ -210,8 +208,7 @@ namespace MobileGL {
SizeT GetInputBytesPerPixel(TextureInternalFormat internalformat, TexturePixelDataType type) { SizeT GetInputBytesPerPixel(TextureInternalFormat internalformat, TexturePixelDataType type) {
SizeT sizedPixelFormatSize = GetSizedTexturePixelDataTypeSize(type); SizeT sizedPixelFormatSize = GetSizedTexturePixelDataTypeSize(type);
if (sizedPixelFormatSize > 0) if (sizedPixelFormatSize > 0) return sizedPixelFormatSize;
return sizedPixelFormatSize;
SizeT bytesPerChannel = GetBaseTexturePixelDataTypeSize(type); SizeT bytesPerChannel = GetBaseTexturePixelDataTypeSize(type);
SizeT chCount = GetBaseInternalFormatComponentCount(internalformat); SizeT chCount = GetBaseInternalFormatComponentCount(internalformat);
return chCount * bytesPerChannel; return chCount * bytesPerChannel;
@@ -1,6 +1,6 @@
#include "ShaderCompiler.h" #include "ShaderCompiler.h"
#include <MG_Util/Converters/GLToStr/GLEnumConverter.h> #include <MG_Util/Converters/GLToStr/GLEnumConverter.h>
#include <MG_Util/Converters/GLToGlslang/GLShaderLangConverter.h> #include <MG_Util/Converters/GLToGlslang/ProgramEnumConverter.h>
namespace MobileGL { namespace MobileGL {
namespace MG_Util { namespace MG_Util {
@@ -117,7 +117,7 @@ namespace MobileGL {
auto shaderType = attrib.shaderType; auto shaderType = attrib.shaderType;
auto& sourceStr = attrib.sourceStr; auto& sourceStr = attrib.sourceStr;
auto lang = GetEShLanguageByShaderType(shaderType); auto lang = MG_Util::ConvertGLEnumToEShLanguage(shaderType);
if (lang == EShLanguage::EShLangCount) { if (lang == EShLanguage::EShLangCount) {
ResultInfo r; ResultInfo r;
r.log += "Error: [Preprocess] Unsupported shader type: " + ConvertGLEnumToString(shaderType); r.log += "Error: [Preprocess] Unsupported shader type: " + ConvertGLEnumToString(shaderType);
@@ -79,8 +79,8 @@ namespace MobileGL {
// Should be called once, and only once, for every SPIR-V binary // Should be called once, and only once, for every SPIR-V binary
spvc_result ParseMetaData(); spvc_result ParseMetaData();
private:
private:
spvc_context context = nullptr; spvc_context context = nullptr;
spvc_parsed_ir ir = nullptr; spvc_parsed_ir ir = nullptr;
spvc_compiler compiler = nullptr; spvc_compiler compiler = nullptr;
+2 -120
View File
@@ -20,7 +20,6 @@ namespace MobileGL {
}; };
struct ProgramAttrib { struct ProgramAttrib {
// Vector<GLenum> shaderTypes;
Vector<SharedPtr<glslang::TShader>> shaders; Vector<SharedPtr<glslang::TShader>> shaders;
}; };
@@ -38,8 +37,8 @@ namespace MobileGL {
using Result = std::expected<T, ResultInfo>; using Result = std::expected<T, ResultInfo>;
struct InterfaceVariable { struct InterfaceVariable {
std::string name; String name;
uint32_t location; Uint32 location;
Bool operator<(const InterfaceVariable& other) const { return location < other.location; } Bool operator<(const InterfaceVariable& other) const { return location < other.location; }
@@ -47,123 +46,6 @@ namespace MobileGL {
return location == other.location && name == other.name; return location == other.location && name == other.name;
} }
}; };
// class SpvcSession {
// public:
// SpvcSession() {}
//
// explicit SpvcSession(const Vector<unsigned int>& spirv) {
// const SpvId *p_spirv = spirv.data();
// size_t word_count = spirv.size();
//
// spvc_context_create(&context);
// spvc_context_parse_spirv(context, p_spirv, word_count, &ir);
// spvc_context_create_compiler(context, SPVC_BACKEND_GLSL, ir, SPVC_CAPTURE_MODE_TAKE_OWNERSHIP,
// &compiler); spvc_compiler_create_shader_resources(compiler, &resources);
// }
//
// SpvcSession(SpvcSession&) = delete;
//
// SpvcSession(SpvcSession&& that) {
// std::swap(this->context, that.context);
// std::swap(this->compiler, that.compiler);
// std::swap(this->ir, that.ir);
// std::swap(this->compiler_options, that.compiler_options);
// std::swap(this->resources, that.resources);
// }
//
// SpvcSession& operator=(SpvcSession& session) = delete;
//
// SpvcSession& operator=(SpvcSession&& that) {
// std::swap(this->context, that.context);
// std::swap(this->compiler, that.compiler);
// std::swap(this->ir, that.ir);
// std::swap(this->compiler_options, that.compiler_options);
// std::swap(this->resources, that.resources);
// return *this;
// }
//
// spvc_result CreateOptions(spvc_compiler_options *options) {
// return spvc_compiler_create_compiler_options(compiler, options);
// }
//
// spvc_result SetOptions(spvc_compiler_options options) {
// compiler_options = options;
// return spvc_compiler_install_compiler_options(compiler, options);
// }
//
// Vector<InterfaceVariable> GetShaderInterface(spvc_resource_type resource_type) const {
// const spvc_reflected_resource *list = nullptr;
// size_t count = 0;
// spvc_resources_get_resource_list_for_type(resources, resource_type, &list, &count);
//
// Vector<InterfaceVariable> variables;
// for (size_t i = 0; i < count; ++i) {
// if (spvc_compiler_has_decoration(compiler, list[i].id, SpvDecorationBuiltIn)) {
// continue;
// }
//
// InterfaceVariable var;
// var.name = list[i].name;
// var.location = spvc_compiler_get_decoration(compiler, list[i].id, SpvDecorationLocation);
// variables.push_back(var);
//
// if (resource_type == SPVC_RESOURCE_TYPE_UNIFORM_BUFFER) {
// spvc_type type = spvc_compiler_get_type_handle(compiler, list[i].base_type_id);
// size_t num_members = spvc_type_get_num_member_types(type);
// printf("uniform %s {\n", var.name.c_str());
// for (size_t j = 0; j < num_members; ++j) {
// const char *memberName = spvc_compiler_get_member_name(compiler,
// list[i].base_type_id, j);
// // auto memberTypeId = spvc_type_get_member_type(type, j);
// // auto memberType = spvc_compiler_get_type_handle(compiler, memberTypeId);
//
// unsigned memberOffset = 0;
// spvc_compiler_type_struct_member_offset(compiler, type, j, &memberOffset);
// printf("\b%s; // %u\n", memberName, memberOffset);
// }
// printf("}\n");
// }
// }
// std::sort(variables.begin(), variables.end());
// return variables;
// }
//
// spvc_result Compile(const char** result) const {
// return spvc_compiler_compile(compiler, result);
// }
//
// const char* GetLastErrorString() const {
// return spvc_context_get_last_error_string(context);
// }
//
// ~SpvcSession() { spvc_context_destroy(context); }
// private:
// spvc_context context = nullptr;
// spvc_parsed_ir ir = nullptr;
// spvc_compiler compiler = nullptr;
// spvc_compiler_options compiler_options = nullptr;
// spvc_resources resources = nullptr;
// };
inline static EShLanguage GetEShLanguageByShaderType(GLenum shaderType) {
switch (shaderType) {
case GL_VERTEX_SHADER:
return EShLanguage::EShLangVertex;
case GL_FRAGMENT_SHADER:
return EShLanguage::EShLangFragment;
case GL_COMPUTE_SHADER:
return EShLanguage::EShLangCompute;
case GL_TESS_CONTROL_SHADER:
return EShLanguage::EShLangTessControl;
case GL_TESS_EVALUATION_SHADER:
return EShLanguage::EShLangTessEvaluation;
case GL_GEOMETRY_SHADER:
return EShLanguage::EShLangGeometry;
default:
return EShLanguage::EShLangCount;
}
}
} // namespace ShaderTranspiler } // namespace ShaderTranspiler
} // namespace MG_Util } // namespace MG_Util
} // namespace MobileGL } // namespace MobileGL
@@ -1,7 +1,3 @@
//
// Created by Swung 0x48 on 2025/7/20.
//
#include "UniformTraverser.h" #include "UniformTraverser.h"
namespace MobileGL { namespace MobileGL {
@@ -16,22 +12,7 @@ namespace MobileGL {
const auto& type = symbol->getType(); const auto& type = symbol->getType();
if (symbol->getQualifier().isUniform() && type.getBasicType() != glslang::EbtSampler) { if (symbol->getQualifier().isUniform() && type.getBasicType() != glslang::EbtSampler) {
m_collectedSymbols.emplace_back(symbol); m_collectedSymbols.emplace_back(symbol);
// auto& name = symbol->getName();
// auto qualifier = symbol->getQualifier();
//
// printf("layout(location = %d) uniform %s\n", qualifier.layoutLocation, name.c_str());
// auto &uniform = uniforms.emplace_back();
// uniform.name = name;
// uniform.storageQualifier = qualifier.storage;
// uniform.layoutLocation = qualifier.layoutLocation;
// uniform.layoutBinding = qualifier.layoutBinding;
// uniform.layoutPacking = qualifier.layoutPacking;
} }
// else if (type.getBasicType() == glslang::EbtSampler) {
// auto &uniform = samplers.emplace_back();
// uniform.name = symbol->getName();
// uniform.sampler = type.getSampler();
// }
} }
} // namespace ShaderTranspiler } // namespace ShaderTranspiler
} // namespace MG_Util } // namespace MG_Util
@@ -1,10 +1,4 @@
// #pragma once
// Created by Swung 0x48 on 2025/7/20.
//
#ifndef MOBILEGL_UNIFORMTRAVERSER_H
#define MOBILEGL_UNIFORMTRAVERSER_H
#include "Includes.h" #include "Includes.h"
namespace MobileGL { namespace MobileGL {
@@ -21,5 +15,3 @@ namespace MobileGL {
} // namespace ShaderTranspiler } // namespace ShaderTranspiler
} // namespace MG_Util } // namespace MG_Util
} // namespace MobileGL } // namespace MobileGL
#endif // MOBILEGL_UNIFORMTRAVERSER_H