packspu_getstring.c revision 41ad43cd9c28c6fcf8021479118be370223894c2
f52596ee352b88100d0a2abd044c8edd3c542bd7vboxsync/* Copyright (c) 2001, Stanford University
f52596ee352b88100d0a2abd044c8edd3c542bd7vboxsync * All rights reserved
f52596ee352b88100d0a2abd044c8edd3c542bd7vboxsync *
f52596ee352b88100d0a2abd044c8edd3c542bd7vboxsync * See the file LICENSE.txt for information on redistributing this software.
f52596ee352b88100d0a2abd044c8edd3c542bd7vboxsync */
f52596ee352b88100d0a2abd044c8edd3c542bd7vboxsync
f52596ee352b88100d0a2abd044c8edd3c542bd7vboxsync#include "packspu.h"
f52596ee352b88100d0a2abd044c8edd3c542bd7vboxsync#include "cr_packfunctions.h"
f52596ee352b88100d0a2abd044c8edd3c542bd7vboxsync#include "state/cr_statefuncs.h"
f52596ee352b88100d0a2abd044c8edd3c542bd7vboxsync#include "cr_string.h"
f52596ee352b88100d0a2abd044c8edd3c542bd7vboxsync#include "packspu_proto.h"
f52596ee352b88100d0a2abd044c8edd3c542bd7vboxsync
08122b11035de1e54ce1e665dff7260fc548db72vboxsyncstatic GLubyte gpszExtensions[10000];
08122b11035de1e54ce1e665dff7260fc548db72vboxsync#ifdef CR_OPENGL_VERSION_2_0
08122b11035de1e54ce1e665dff7260fc548db72vboxsyncstatic GLubyte gpszShadingVersion[255]="";
b5b8f3d0d95893edd81062c1b5d0bc455cc79bc1vboxsync#endif
b5b8f3d0d95893edd81062c1b5d0bc455cc79bc1vboxsync
08122b11035de1e54ce1e665dff7260fc548db72vboxsyncstatic void GetString(GLenum name, GLubyte *pszStr)
08122b11035de1e54ce1e665dff7260fc548db72vboxsync{
08122b11035de1e54ce1e665dff7260fc548db72vboxsync GET_THREAD(thread);
08122b11035de1e54ce1e665dff7260fc548db72vboxsync int writeback = 1;
2561352ae77d8f2f825526a6cbafa34b45f16972vboxsync
2561352ae77d8f2f825526a6cbafa34b45f16972vboxsync if (pack_spu.swap)
08122b11035de1e54ce1e665dff7260fc548db72vboxsync crPackGetStringSWAP(name, pszStr, &writeback);
08122b11035de1e54ce1e665dff7260fc548db72vboxsync else
b5b8f3d0d95893edd81062c1b5d0bc455cc79bc1vboxsync crPackGetString(name, pszStr, &writeback);
b5b8f3d0d95893edd81062c1b5d0bc455cc79bc1vboxsync packspuFlush( (void *) thread );
08122b11035de1e54ce1e665dff7260fc548db72vboxsync
08122b11035de1e54ce1e665dff7260fc548db72vboxsync while (writeback)
a2c132bb887bbbff1490a680748413f8cfc9cd20vboxsync crNetRecv();
08122b11035de1e54ce1e665dff7260fc548db72vboxsync}
08122b11035de1e54ce1e665dff7260fc548db72vboxsync
c65e2fedaf400b449a85ae6db7b84858f2613708vboxsyncstatic GLfloat
c65e2fedaf400b449a85ae6db7b84858f2613708vboxsyncGetVersionString(void)
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync{
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync GLubyte return_value[100];
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync GLfloat version;
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync GetString(GL_VERSION, return_value);
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync CRASSERT(crStrlen((char *)return_value) < 100);
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync version = crStrToFloat((char *) return_value);
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync version = crStateComputeVersion(version);
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync return version;
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync}
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync
aaa80e9df329609078dea844a11f2611443b677avboxsyncstatic const GLubyte *
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsyncGetExtensions(void)
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync{
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync GLubyte return_value[10*1000];
aaa80e9df329609078dea844a11f2611443b677avboxsync const GLubyte *extensions, *ext;
08e715a5fb97536a462b199124a0c6e925cfa76cvboxsync GET_THREAD(thread);
aaa80e9df329609078dea844a11f2611443b677avboxsync int writeback = 1;
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync if (pack_spu.swap)
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync {
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync crPackGetStringSWAP( GL_EXTENSIONS, return_value, &writeback );
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync }
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync else
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync {
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync crPackGetString( GL_EXTENSIONS, return_value, &writeback );
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync }
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync packspuFlush( (void *) thread );
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync while (writeback)
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync crNetRecv();
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync CRASSERT(crStrlen((char *)return_value) < 10*1000);
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync /* OK, we got the result from the server. Now we have to
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync * intersect is with the set of extensions that Chromium understands
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync * and tack on the Chromium-specific extensions.
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync */
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync extensions = return_value;
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync ext = crStateMergeExtensions(1, &extensions);
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync#if 1
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync {
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync const char *addext = "GL_EXT_compiled_vertex_array GL_S3_s3tc ";
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync/*"GL_AMDX_vertex_shader_tessellator GL_AMD_draw_buffers_blend GL_AMD_performance_monitor "
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync"GL_AMD_texture_texture4 GL_ARB_color_buffer_float GL_ARB_copy_buffer GL_ARB_depth_buffer_float "
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync"GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_fragment_program "
8b2f1e9e24bf9cb4340412463a0e75c4e0b035a6vboxsync"GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_framebuffer_object "
aaa80e9df329609078dea844a11f2611443b677avboxsync"GL_ARB_framebuffer_sRGB GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_instanced_arrays "
aaa80e9df329609078dea844a11f2611443b677avboxsync"GL_ARB_map_buffer_range GL_ARB_multisample GL_ARB_multitexture GL_ARB_occlusion_query "
a7f701e8c51193f7c21137cc173ea5f86e53cac2vboxsync"GL_ARB_pixel_buffer_object GL_ARB_point_parameters GL_ARB_point_sprite GL_ARB_shader_objects "
a7f701e8c51193f7c21137cc173ea5f86e53cac2vboxsync"GL_ARB_shader_texture_lod GL_ARB_shading_language_100 GL_ARB_shadow GL_ARB_shadow_ambient "
a7f701e8c51193f7c21137cc173ea5f86e53cac2vboxsync"GL_ARB_texture_border_clamp GL_ARB_texture_buffer_object GL_ARB_texture_compression "
a7f701e8c51193f7c21137cc173ea5f86e53cac2vboxsync"GL_ARB_texture_compression_rgtc GL_ARB_texture_cube_map GL_ARB_texture_env_add "
a7f701e8c51193f7c21137cc173ea5f86e53cac2vboxsync"GL_ARB_texture_env_combine GL_ARB_texture_env_crossbar GL_ARB_texture_env_dot3 "
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync"GL_ARB_texture_float GL_ARB_texture_mirrored_repeat GL_ARB_texture_non_power_of_two "
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync"GL_ARB_texture_rectangle GL_ARB_texture_rg GL_ARB_texture_snorm GL_ARB_transpose_matrix "
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync"GL_ARB_vertex_array_object GL_ARB_vertex_buffer_object GL_ARB_vertex_program GL_ARB_vertex_shader "
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync"GL_ARB_window_pos GL_ATI_draw_buffers GL_ATI_envmap_bumpmap GL_ATI_fragment_shader GL_ATI_meminfo "
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync"GL_ATI_separate_stencil GL_ATI_texture_compression_3dc GL_ATI_texture_env_combine3 "
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync"GL_ATI_texture_float GL_ATI_texture_mirror_once GL_EXT_abgr GL_EXT_bgra GL_EXT_bindable_uniform "
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync"GL_EXT_blend_color GL_EXT_blend_equation_separate GL_EXT_blend_func_separate GL_EXT_blend_minmax "
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync"GL_EXT_blend_subtract GL_EXT_compiled_vertex_array GL_EXT_copy_buffer GL_EXT_copy_texture "
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync"GL_EXT_draw_buffers2 GL_EXT_draw_instanced GL_EXT_draw_range_elements GL_EXT_fog_coord "
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync"GL_EXT_framebuffer_blit GL_EXT_framebuffer_multisample GL_EXT_framebuffer_object "
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync"GL_EXT_framebuffer_sRGB GL_EXT_gpu_program_parameters GL_EXT_gpu_shader4 GL_EXT_multi_draw_arrays "
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync"GL_EXT_packed_depth_stencil GL_EXT_packed_float GL_EXT_packed_pixels GL_EXT_point_parameters "
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync"GL_EXT_rescale_normal GL_EXT_secondary_color GL_EXT_separate_specular_color "
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync"GL_EXT_shadow_funcs GL_EXT_stencil_wrap GL_EXT_subtexture GL_EXT_texgen_reflection "
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync"GL_EXT_texture3D GL_EXT_texture_array GL_EXT_texture_buffer_object "
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync"GL_EXT_texture_compression_latc GL_EXT_texture_compression_rgtc GL_EXT_texture_compression_s3tc "
c2e62d39261f9f69ab4e14b2bbd986bf1b1faaf9vboxsync"GL_EXT_texture_cube_map GL_EXT_texture_edge_clamp GL_EXT_texture_env_add "
5cb8545771849c97101a5ee9bb57d0fdac922c44vboxsync"GL_EXT_texture_env_combine GL_EXT_texture_env_dot3 GL_EXT_texture_filter_anisotropic "
8b2f1e9e24bf9cb4340412463a0e75c4e0b035a6vboxsync"GL_EXT_texture_integer GL_EXT_texture_lod GL_EXT_texture_lod_bias GL_EXT_texture_mirror_clamp "
5cb8545771849c97101a5ee9bb57d0fdac922c44vboxsync"GL_EXT_texture_object GL_EXT_texture_rectangle GL_EXT_texture_sRGB GL_EXT_texture_shared_exponent "
5cb8545771849c97101a5ee9bb57d0fdac922c44vboxsync"GL_EXT_texture_snorm GL_EXT_texture_swizzle GL_EXT_transform_feedback GL_EXT_vertex_array "
5cb8545771849c97101a5ee9bb57d0fdac922c44vboxsync"GL_IBM_texture_mirrored_repeat GL_KTX_buffer_region GL_NV_blend_square GL_NV_conditional_render "
8b2f1e9e24bf9cb4340412463a0e75c4e0b035a6vboxsync"GL_NV_copy_depth_to_color GL_NV_primitive_restart GL_NV_texgen_reflection GL_SGIS_generate_mipmap "
5cb8545771849c97101a5ee9bb57d0fdac922c44vboxsync"GL_SGIS_texture_edge_clamp GL_SGIS_texture_lod GL_SUN_multi_draw_arrays GL_WIN_swap_hint "
5cb8545771849c97101a5ee9bb57d0fdac922c44vboxsync"WGL_EXT_swap_control";*/
5cb8545771849c97101a5ee9bb57d0fdac922c44vboxsync
5cb8545771849c97101a5ee9bb57d0fdac922c44vboxsync sprintf(gpszExtensions, "%s%s", addext, ext);
5cb8545771849c97101a5ee9bb57d0fdac922c44vboxsync }
5cb8545771849c97101a5ee9bb57d0fdac922c44vboxsync#else
5cb8545771849c97101a5ee9bb57d0fdac922c44vboxsync sprintf(gpszExtensions, "%s", ext);
5cb8545771849c97101a5ee9bb57d0fdac922c44vboxsync#endif
5cb8545771849c97101a5ee9bb57d0fdac922c44vboxsync
5cb8545771849c97101a5ee9bb57d0fdac922c44vboxsync return gpszExtensions;
5cb8545771849c97101a5ee9bb57d0fdac922c44vboxsync}
5cb8545771849c97101a5ee9bb57d0fdac922c44vboxsync
5cb8545771849c97101a5ee9bb57d0fdac922c44vboxsync#ifdef WINDOWS
5cb8545771849c97101a5ee9bb57d0fdac922c44vboxsyncstatic bool packspuRunningUnderWine(void)
5cb8545771849c97101a5ee9bb57d0fdac922c44vboxsync{
5cb8545771849c97101a5ee9bb57d0fdac922c44vboxsync return 1;//NULL != GetModuleHandle("wined3d.dll");
5cb8545771849c97101a5ee9bb57d0fdac922c44vboxsync}
5cb8545771849c97101a5ee9bb57d0fdac922c44vboxsync#endif
5cb8545771849c97101a5ee9bb57d0fdac922c44vboxsync
5cb8545771849c97101a5ee9bb57d0fdac922c44vboxsyncconst GLubyte * PACKSPU_APIENTRY packspu_GetString( GLenum name )
5cb8545771849c97101a5ee9bb57d0fdac922c44vboxsync{
08122b11035de1e54ce1e665dff7260fc548db72vboxsync GET_CONTEXT(ctx);
36a0cf44771c76b56b4a6489136e3adf0343df0bvboxsync
08122b11035de1e54ce1e665dff7260fc548db72vboxsync switch(name)
08122b11035de1e54ce1e665dff7260fc548db72vboxsync {
08122b11035de1e54ce1e665dff7260fc548db72vboxsync case GL_EXTENSIONS:
08122b11035de1e54ce1e665dff7260fc548db72vboxsync return GetExtensions();
08122b11035de1e54ce1e665dff7260fc548db72vboxsync case GL_VERSION:
08122b11035de1e54ce1e665dff7260fc548db72vboxsync#ifdef WINDOWS
08122b11035de1e54ce1e665dff7260fc548db72vboxsync if (packspuRunningUnderWine())
08122b11035de1e54ce1e665dff7260fc548db72vboxsync {
08122b11035de1e54ce1e665dff7260fc548db72vboxsync GetString(GL_REAL_VERSION, ctx->pszRealVersion);
08122b11035de1e54ce1e665dff7260fc548db72vboxsync return ctx->pszRealVersion;
08122b11035de1e54ce1e665dff7260fc548db72vboxsync }
08122b11035de1e54ce1e665dff7260fc548db72vboxsync else
7baa1c3bb51b48e79eee63a69e341442e342a18evboxsync#endif
7baa1c3bb51b48e79eee63a69e341442e342a18evboxsync {
7baa1c3bb51b48e79eee63a69e341442e342a18evboxsync float version = GetVersionString();
36a0cf44771c76b56b4a6489136e3adf0343df0bvboxsync sprintf((char*)ctx->glVersion, "%.1f Chromium %s", version, CR_VERSION_STRING);
7baa1c3bb51b48e79eee63a69e341442e342a18evboxsync return ctx->glVersion;
7baa1c3bb51b48e79eee63a69e341442e342a18evboxsync }
7baa1c3bb51b48e79eee63a69e341442e342a18evboxsync case GL_VENDOR:
7baa1c3bb51b48e79eee63a69e341442e342a18evboxsync#ifdef WINDOWS
36a0cf44771c76b56b4a6489136e3adf0343df0bvboxsync if (packspuRunningUnderWine())
7baa1c3bb51b48e79eee63a69e341442e342a18evboxsync {
7baa1c3bb51b48e79eee63a69e341442e342a18evboxsync GetString(GL_REAL_VENDOR, ctx->pszRealVendor);
36a0cf44771c76b56b4a6489136e3adf0343df0bvboxsync return ctx->pszRealVendor;
7baa1c3bb51b48e79eee63a69e341442e342a18evboxsync }
7baa1c3bb51b48e79eee63a69e341442e342a18evboxsync else
7baa1c3bb51b48e79eee63a69e341442e342a18evboxsync#endif
36a0cf44771c76b56b4a6489136e3adf0343df0bvboxsync {
7baa1c3bb51b48e79eee63a69e341442e342a18evboxsync return crStateGetString(name);
7baa1c3bb51b48e79eee63a69e341442e342a18evboxsync }
7baa1c3bb51b48e79eee63a69e341442e342a18evboxsync case GL_RENDERER:
36a0cf44771c76b56b4a6489136e3adf0343df0bvboxsync#ifdef WINDOWS
7baa1c3bb51b48e79eee63a69e341442e342a18evboxsync if (packspuRunningUnderWine())
7baa1c3bb51b48e79eee63a69e341442e342a18evboxsync {
7baa1c3bb51b48e79eee63a69e341442e342a18evboxsync GetString(GL_REAL_RENDERER, ctx->pszRealRenderer);
7baa1c3bb51b48e79eee63a69e341442e342a18evboxsync return ctx->pszRealRenderer;
7baa1c3bb51b48e79eee63a69e341442e342a18evboxsync }
7baa1c3bb51b48e79eee63a69e341442e342a18evboxsync else
7baa1c3bb51b48e79eee63a69e341442e342a18evboxsync#endif
7baa1c3bb51b48e79eee63a69e341442e342a18evboxsync {
36a0cf44771c76b56b4a6489136e3adf0343df0bvboxsync return crStateGetString(name);
08122b11035de1e54ce1e665dff7260fc548db72vboxsync }
08122b11035de1e54ce1e665dff7260fc548db72vboxsync
08122b11035de1e54ce1e665dff7260fc548db72vboxsync#ifdef CR_OPENGL_VERSION_2_0
08122b11035de1e54ce1e665dff7260fc548db72vboxsync case GL_SHADING_LANGUAGE_VERSION:
da570ef57fe454ae2d9d5d88a7bfea214723dbb1vboxsync GetString(GL_SHADING_LANGUAGE_VERSION, gpszShadingVersion);
08122b11035de1e54ce1e665dff7260fc548db72vboxsync return gpszShadingVersion;
08122b11035de1e54ce1e665dff7260fc548db72vboxsync#endif
7baa1c3bb51b48e79eee63a69e341442e342a18evboxsync#ifdef GL_CR_real_vendor_strings
7baa1c3bb51b48e79eee63a69e341442e342a18evboxsync case GL_REAL_VENDOR:
08122b11035de1e54ce1e665dff7260fc548db72vboxsync GetString(GL_REAL_VENDOR, ctx->pszRealVendor);
08122b11035de1e54ce1e665dff7260fc548db72vboxsync return ctx->pszRealVendor;
08122b11035de1e54ce1e665dff7260fc548db72vboxsync case GL_REAL_VERSION:
08122b11035de1e54ce1e665dff7260fc548db72vboxsync GetString(GL_REAL_VERSION, ctx->pszRealVersion);
08122b11035de1e54ce1e665dff7260fc548db72vboxsync return ctx->pszRealVersion;
08122b11035de1e54ce1e665dff7260fc548db72vboxsync case GL_REAL_RENDERER:
08122b11035de1e54ce1e665dff7260fc548db72vboxsync GetString(GL_REAL_RENDERER, ctx->pszRealRenderer);
a23d9b6011c292ab4d858fc7d83a2216843cd54evboxsync return ctx->pszRealRenderer;
a23d9b6011c292ab4d858fc7d83a2216843cd54evboxsync#endif
a23d9b6011c292ab4d858fc7d83a2216843cd54evboxsync default:
a23d9b6011c292ab4d858fc7d83a2216843cd54evboxsync return crStateGetString(name);
8b2f1e9e24bf9cb4340412463a0e75c4e0b035a6vboxsync }
08122b11035de1e54ce1e665dff7260fc548db72vboxsync}
08122b11035de1e54ce1e665dff7260fc548db72vboxsync