From 3ea184d187735f3de16e1f0ac5f0780fe0bc6226 Mon Sep 17 00:00:00 2001 From: BZLZHH Date: Fri, 4 Apr 2025 09:08:43 +0800 Subject: [PATCH] [Chore] (TEMP_MESA): Delete unused TEMP_MESA. --- MG/MG_GL/TEMP_MESA/MesaEmu.cpp | 140 ------------- MG/MG_GL/TEMP_MESA/MesaEmu.h | 360 --------------------------------- 2 files changed, 500 deletions(-) delete mode 100644 MG/MG_GL/TEMP_MESA/MesaEmu.cpp delete mode 100644 MG/MG_GL/TEMP_MESA/MesaEmu.h diff --git a/MG/MG_GL/TEMP_MESA/MesaEmu.cpp b/MG/MG_GL/TEMP_MESA/MesaEmu.cpp deleted file mode 100644 index f0f006dc..00000000 --- a/MG/MG_GL/TEMP_MESA/MesaEmu.cpp +++ /dev/null @@ -1,140 +0,0 @@ -// -// Created by BZLZHH on 2025/3/15. -// - -#include "MesaEmu.h" - -// Code From DeepSeek - -static thread_local OSMesaContext currentContext = nullptr; -static uint32_t findGraphicsQueueFamily(VkPhysicalDevice physicalDevice) { - uint32_t queueFamilyCount = 0; - vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, &queueFamilyCount, nullptr); - std::vector queueFamilies(queueFamilyCount); - vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, &queueFamilyCount, queueFamilies.data()); - for (uint32_t i = 0; i < queueFamilyCount; ++i) { - if (queueFamilies[i].queueFlags & VK_QUEUE_GRAPHICS_BIT) { - return i; - } - } - throw std::runtime_error("No graphics queue family found"); -} -extern "C" MG_EXPORT OSMesaContext OSMesaCreateContext(GLenum format, OSMesaContext sharelist) { - OSMesaContextData newCtx; - try { - VkInstanceCreateInfo instanceInfo{}; - instanceInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; - if (vkCreateInstance(&instanceInfo, nullptr, &newCtx.instance) != VK_SUCCESS) { - throw std::runtime_error("Failed to create Vulkan instance"); - } - uint32_t deviceCount = 0; - vkEnumeratePhysicalDevices(newCtx.instance, &deviceCount, nullptr); - if (deviceCount == 0) { - throw std::runtime_error("No Vulkan devices found"); - } - - std::vector devices(deviceCount); - vkEnumeratePhysicalDevices(newCtx.instance, &deviceCount, devices.data()); - newCtx.physicalDevice = devices[0]; - newCtx.queueFamilyIndex = findGraphicsQueueFamily(newCtx.physicalDevice); - float queuePriority = 1.0f; - VkDeviceQueueCreateInfo queueCreateInfo{}; - queueCreateInfo.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO; - queueCreateInfo.queueFamilyIndex = newCtx.queueFamilyIndex; - queueCreateInfo.queueCount = 1; - queueCreateInfo.pQueuePriorities = &queuePriority; - VkDeviceCreateInfo deviceInfo{}; - deviceInfo.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO; - deviceInfo.queueCreateInfoCount = 1; - deviceInfo.pQueueCreateInfos = &queueCreateInfo; - if (vkCreateDevice(newCtx.physicalDevice, &deviceInfo, nullptr, &newCtx.device) != VK_SUCCESS) { - throw std::runtime_error("Failed to create logical device"); - } - vkGetDeviceQueue(newCtx.device, newCtx.queueFamilyIndex, 0, &newCtx.graphicsQueue); - VkCommandPoolCreateInfo poolInfo{}; - poolInfo.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO; - poolInfo.queueFamilyIndex = newCtx.queueFamilyIndex; - poolInfo.flags = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT; - if (vkCreateCommandPool(newCtx.device, &poolInfo, nullptr, &newCtx.commandPool) != VK_SUCCESS) { - throw std::runtime_error("Failed to create command pool"); - } - OSMesaContext ctx = reinterpret_cast(new int(0)); - ctxMap[ctx] = newCtx; - return ctx; - } catch (const std::exception& e) { - if (newCtx.device) vkDestroyDevice(newCtx.device, nullptr); - if (newCtx.instance) vkDestroyInstance(newCtx.instance, nullptr); - return nullptr; - } -} -extern "C" MG_EXPORT void OSMesaDestroyContext(OSMesaContext ctx) { - if (ctxMap.find(ctx) != ctxMap.end()) { - auto& data = ctxMap[ctx]; - - if (data.commandPool) { - vkDestroyCommandPool(data.device, data.commandPool, nullptr); - } - if (data.imageView) { - vkDestroyImageView(data.device, data.imageView, nullptr); - } - if (data.targetImage) { - vkDestroyImage(data.device, data.targetImage, nullptr); - } - if (data.device) { - vkDestroyDevice(data.device, nullptr); - } - if (data.instance) { - vkDestroyInstance(data.instance, nullptr); - } - - ctxMap.erase(ctx); - delete reinterpret_cast(ctx); - } -} -extern "C" MG_EXPORT GLboolean OSMesaMakeCurrent(OSMesaContext ctx, void *buffer, GLenum type, - GLsizei width, GLsizei height) { - if (!ctx || !buffer || width <= 0 || height <= 0) return GL_FALSE; - auto& data = ctxMap[ctx]; - data.currentWidth = width; - data.currentHeight = height; - data.frontBuffer = static_cast(buffer); - VkImageCreateInfo imageInfo{}; - imageInfo.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO; - imageInfo.imageType = VK_IMAGE_TYPE_2D; - imageInfo.format = VK_FORMAT_R8G8B8A8_UNORM; - imageInfo.extent = {static_cast(width), static_cast(height), 1}; - imageInfo.mipLevels = 1; - imageInfo.arrayLayers = 1; - imageInfo.samples = VK_SAMPLE_COUNT_1_BIT; - imageInfo.tiling = VK_IMAGE_TILING_LINEAR; - imageInfo.usage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT; - imageInfo.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; - if (vkCreateImage(data.device, &imageInfo, nullptr, &data.targetImage) != VK_SUCCESS) { - return GL_FALSE; - } - VkImageViewCreateInfo viewInfo{}; - viewInfo.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO; - viewInfo.image = data.targetImage; - viewInfo.viewType = VK_IMAGE_VIEW_TYPE_2D; - viewInfo.format = VK_FORMAT_R8G8B8A8_UNORM; - viewInfo.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; - viewInfo.subresourceRange.levelCount = 1; - viewInfo.subresourceRange.layerCount = 1; - if (vkCreateImageView(data.device, &viewInfo, nullptr, &data.imageView) != VK_SUCCESS) { - vkDestroyImage(data.device, data.targetImage, nullptr); - return GL_FALSE; - } - currentContext = ctx; - return GL_TRUE; -} -extern "C" MG_EXPORT OSMesaContext OSMesaGetCurrentContext() { - return currentContext; -} -extern "C" MG_EXPORT void OSMesaPixelStore(GLint pname, GLint value) { - if (pname == GL_PACK_ALIGNMENT && currentContext) { - ctxMap[currentContext].packAlignment = value; - } -} -extern "C" MG_EXPORT OSMESAproc OSMesaGetProcAddress( const char *funcName ) { - return (OSMESAproc)MG_GL::GLX::GetProcAddress(funcName); -} \ No newline at end of file diff --git a/MG/MG_GL/TEMP_MESA/MesaEmu.h b/MG/MG_GL/TEMP_MESA/MesaEmu.h deleted file mode 100644 index e0859707..00000000 --- a/MG/MG_GL/TEMP_MESA/MesaEmu.h +++ /dev/null @@ -1,360 +0,0 @@ -// -// Created by BZLZHH on 2025/3/15. -// - -#ifndef MOBILEGL_MESAEMU_H -#define MOBILEGL_MESAEMU_H - -#include "../../Includes.h" - -/* - * Mesa 3-D graphics library - * - * Copyright (C) 1999-2005 Brian Paul All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - */ - - -/* - * Mesa Off-Screen rendering interface. - * - * This is an operating system and window system independent interface to - * Mesa which allows one to render images into a client-supplied buffer in - * main memory. Such images may manipulated or saved in whatever way the - * client wants. - * - * These are the API functions: - * OSMesaCreateContext - create a new Off-Screen Mesa rendering context - * OSMesaMakeCurrent - bind an OSMesaContext to a client's image buffer - * and make the specified context the current one. - * OSMesaDestroyContext - destroy an OSMesaContext - * OSMesaGetCurrentContext - return thread's current context ID - * OSMesaPixelStore - controls how pixels are stored in image buffer - * OSMesaGetIntegerv - return OSMesa state parameters - * - * - * The limits on the width and height of an image buffer can be retrieved - * via OSMesaGetIntegerv(OSMESA_MAX_WIDTH/OSMESA_MAX_HEIGHT). - */ - - -#ifndef OSMESA_H -#define OSMESA_H - - -#ifdef __cplusplus -extern "C" { -#endif - - -#include - - -#define OSMESA_MAJOR_VERSION 11 -#define OSMESA_MINOR_VERSION 2 -#define OSMESA_PATCH_VERSION 0 - - - -/* - * Values for the format parameter of OSMesaCreateContext() - * New in version 2.0. - */ -#define OSMESA_COLOR_INDEX GL_COLOR_INDEX -#define OSMESA_RGBA GL_RGBA -#define OSMESA_BGRA 0x1 -#define OSMESA_ARGB 0x2 -#define OSMESA_RGB GL_RGB -#define OSMESA_BGR 0x4 -#define OSMESA_RGB_565 0x5 - - -/* - * OSMesaPixelStore() parameters: - * New in version 2.0. - */ -#define OSMESA_ROW_LENGTH 0x10 -#define OSMESA_Y_UP 0x11 - - -/* - * Accepted by OSMesaGetIntegerv: - */ -#define OSMESA_WIDTH 0x20 -#define OSMESA_HEIGHT 0x21 -#define OSMESA_FORMAT 0x22 -#define OSMESA_TYPE 0x23 -#define OSMESA_MAX_WIDTH 0x24 /* new in 4.0 */ -#define OSMESA_MAX_HEIGHT 0x25 /* new in 4.0 */ - -/* - * Accepted in OSMesaCreateContextAttrib's attribute list. - */ -#define OSMESA_DEPTH_BITS 0x30 -#define OSMESA_STENCIL_BITS 0x31 -#define OSMESA_ACCUM_BITS 0x32 -#define OSMESA_PROFILE 0x33 -#define OSMESA_CORE_PROFILE 0x34 -#define OSMESA_COMPAT_PROFILE 0x35 -#define OSMESA_CONTEXT_MAJOR_VERSION 0x36 -#define OSMESA_CONTEXT_MINOR_VERSION 0x37 - - -typedef struct osmesa_context *OSMesaContext; - - -/* - * Create an Off-Screen Mesa rendering context. The only attribute needed is - * an RGBA vs Color-Index mode flag. - * - * Input: format - one of OSMESA_COLOR_INDEX, OSMESA_RGBA, OSMESA_BGRA, - * OSMESA_ARGB, OSMESA_RGB, or OSMESA_BGR. - * sharelist - specifies another OSMesaContext with which to share - * display lists. NULL indicates no sharing. - * Return: an OSMesaContext or 0 if error - */ -GLAPI OSMesaContext GLAPIENTRY -OSMesaCreateContext( GLenum format, OSMesaContext sharelist ); - - - -/* - * Create an Off-Screen Mesa rendering context and specify desired - * size of depth buffer, stencil buffer and accumulation buffer. - * If you specify zero for depthBits, stencilBits, accumBits you - * can save some memory. - * - * New in Mesa 3.5 - */ -GLAPI OSMesaContext GLAPIENTRY -OSMesaCreateContextExt( GLenum format, GLint depthBits, GLint stencilBits, - GLint accumBits, OSMesaContext sharelist); - - -/* - * Create an Off-Screen Mesa rendering context with attribute list. - * The list is composed of (attribute, value) pairs and terminated with - * attribute==0. Supported Attributes: - * - * Attributes Values - * -------------------------------------------------------------------------- - * OSMESA_FORMAT OSMESA_RGBA*, OSMESA_BGRA, OSMESA_ARGB, etc. - * OSMESA_DEPTH_BITS 0*, 16, 24, 32 - * OSMESA_STENCIL_BITS 0*, 8 - * OSMESA_ACCUM_BITS 0*, 16 - * OSMESA_PROFILE OSMESA_COMPAT_PROFILE*, OSMESA_CORE_PROFILE - * OSMESA_CONTEXT_MAJOR_VERSION 1*, 2, 3 - * OSMESA_CONTEXT_MINOR_VERSION 0+ - * - * Note: * = default value - * - * We return a context version >= what's specified by OSMESA_CONTEXT_MAJOR/ - * MINOR_VERSION for the given profile. For example, if you request a GL 1.4 - * compat profile, you might get a GL 3.0 compat profile. - * Otherwise, null is returned if the version/profile is not supported. - * - * New in Mesa 11.2 - */ -GLAPI OSMesaContext GLAPIENTRY -OSMesaCreateContextAttribs( const int *attribList, OSMesaContext sharelist ); - - - -/* - * Destroy an Off-Screen Mesa rendering context. - * - * Input: ctx - the context to destroy - */ -GLAPI void GLAPIENTRY -OSMesaDestroyContext( OSMesaContext ctx ); - - - -/* - * Bind an OSMesaContext to an image buffer. The image buffer is just a - * block of memory which the client provides. Its size must be at least - * as large as width*height*sizeof(type). Its address should be a multiple - * of 4 if using RGBA mode. - * - * Image data is stored in the order of glDrawPixels: row-major order - * with the lower-left image pixel stored in the first array position - * (ie. bottom-to-top). - * - * Since the only type initially supported is GL_UNSIGNED_BYTE, if the - * context is in RGBA mode, each pixel will be stored as a 4-byte RGBA - * value. If the context is in color indexed mode, each pixel will be - * stored as a 1-byte value. - * - * If the context's viewport hasn't been initialized yet, it will now be - * initialized to (0,0,width,height). - * - * Input: ctx - the rendering context - * buffer - the image buffer memory - * type - data type for pixel components, only GL_UNSIGNED_BYTE - * supported now - * width, height - size of image buffer in pixels, at least 1 - * Return: GL_TRUE if success, GL_FALSE if error because of invalid ctx, - * invalid buffer address, type!=GL_UNSIGNED_BYTE, width<1, height<1, - * width>internal limit or height>internal limit. - */ -GLAPI GLboolean GLAPIENTRY -OSMesaMakeCurrent( OSMesaContext ctx, void *buffer, GLenum type, - GLsizei width, GLsizei height ); - - - - -/* - * Return the current Off-Screen Mesa rendering context handle. - */ -GLAPI OSMesaContext GLAPIENTRY -OSMesaGetCurrentContext( void ); - - - -/* - * Set pixel store/packing parameters for the current context. - * This is similar to glPixelStore. - * Input: pname - OSMESA_ROW_LENGTH - * specify actual pixels per row in image buffer - * 0 = same as image width (default) - * OSMESA_Y_UP - * zero = Y coordinates increase downward - * non-zero = Y coordinates increase upward (default) - * value - the value for the parameter pname - * - * New in version 2.0. - */ -GLAPI void GLAPIENTRY -OSMesaPixelStore( GLint pname, GLint value ); - - - -/* - * Return an integer value like glGetIntegerv. - * Input: pname - - * OSMESA_WIDTH return current image width - * OSMESA_HEIGHT return current image height - * OSMESA_FORMAT return image format - * OSMESA_TYPE return color component data type - * OSMESA_ROW_LENGTH return row length in pixels - * OSMESA_Y_UP returns 1 or 0 to indicate Y axis direction - * value - pointer to integer in which to return result. - */ -GLAPI void GLAPIENTRY -OSMesaGetIntegerv( GLint pname, GLint *value ); - - - -/* - * Return the depth buffer associated with an OSMesa context. - * Input: c - the OSMesa context - * Output: width, height - size of buffer in pixels - * bytesPerValue - bytes per depth value (2 or 4) - * buffer - pointer to depth buffer values - * Return: GL_TRUE or GL_FALSE to indicate success or failure. - * - * New in Mesa 2.4. - */ -GLAPI GLboolean GLAPIENTRY -OSMesaGetDepthBuffer( OSMesaContext c, GLint *width, GLint *height, - GLint *bytesPerValue, void **buffer ); - - - -/* - * Return the color buffer associated with an OSMesa context. - * Input: c - the OSMesa context - * Output: width, height - size of buffer in pixels - * format - buffer format (OSMESA_FORMAT) - * buffer - pointer to depth buffer values - * Return: GL_TRUE or GL_FALSE to indicate success or failure. - * - * New in Mesa 3.3. - */ -GLAPI GLboolean GLAPIENTRY -OSMesaGetColorBuffer( OSMesaContext c, GLint *width, GLint *height, - GLint *format, void **buffer ); - - - -/** - * This typedef is new in Mesa 6.3. - */ -typedef void (*OSMESAproc)(); - - -/* - * Return pointer to the named function. - * New in Mesa 4.1 - * Return OSMESAproc in 6.3. - */ -GLAPI OSMESAproc GLAPIENTRY -OSMesaGetProcAddress( const char *funcName ); - - - -/** - * Enable/disable color clamping, off by default. - * New in Mesa 6.4.2 - */ -GLAPI void GLAPIENTRY -OSMesaColorClamp(GLboolean enable); - - -/** - * Enable/disable Gallium post-process filters. - * This should be called after a context is created, but before it is - * made current for the first time. After a context has been made - * current, this function has no effect. - * If the enable_value param is zero, the filter is disabled. Otherwise - * the filter is enabled, and the value may control the filter's quality. - * New in Mesa 10.0 - */ -GLAPI void GLAPIENTRY -OSMesaPostprocess(OSMesaContext osmesa, const char *filter, - unsigned enable_value); - - -#ifdef __cplusplus -} -#endif - - -#endif - -struct OSMesaContextData { - VkInstance instance = VK_NULL_HANDLE; - VkPhysicalDevice physicalDevice = VK_NULL_HANDLE; - VkDevice device = VK_NULL_HANDLE; - VkQueue graphicsQueue = VK_NULL_HANDLE; - VkImage targetImage = VK_NULL_HANDLE; - VkImageView imageView = VK_NULL_HANDLE; - VkCommandPool commandPool = VK_NULL_HANDLE; - GLsizei currentWidth = 0; - GLsizei currentHeight = 0; - GLint packAlignment = 4; - GLubyte* frontBuffer = nullptr; - uint32_t queueFamilyIndex = 0; -}; - -static std::map ctxMap; - -#endif //MOBILEGL_MESAEMU_H \ No newline at end of file