/* Each config has a few properties: * - library version * - hw name * * We need to be able to enumerate the list of possiblities for hw * names given a version, and vice-versa. Ideally the list of hw names * across versions will be the same, but it doesn't have to match up * exactly. * * Unfortunately JavaScript doesn't allow arbitrary keys on maps, only * strings. Since we'll almost never need to access along both * dimensions at once, we'll just have 2 separate maps, indexing by * each dimension, to an array of values. Each config must also know * what it is so that it can be properly filtered. * * The type of context (compat/core/es) is considered to be part of * the library version. */ var VERSIONS = { "Mesa 10.1.0": { "LLVMpipe": "llvmpipe-glxinfo-10.1.js", "Intel(R) 965G / X3000": "gen4-glxinfo-10.1.js", "Intel\u00ae GM45 Express": "gen4.5-glxinfo-10.1.js", "Intel(R) Ironlake": "gen5-glxinfo-10.1.js", "Intel(R) Sandybridge (HD 2000/3000)": "snb-glxinfo-10.1.js", "Intel(R) Ivybridge (HD 2500 / 4000)": "gen7-ivb-glxinfo-10.1.js", "Intel(R) Haswell (HD 4x00/5000, Iris 5x00)": "gen7.5-glxinfo-10.1.js", "NVIDIA Riva TNT/TNT2": "nv05-glxinfo-10.1.js", "NVIDIA NV4x (GeForce 6, 7)": "nv4c-glxinfo-10.1.js", "NVIDIA G80-G98 (GeForce 8, 9)": "nv96-glxinfo-10.1.js", "NVIDIA GT21x (GeForce 200, 300)": "nva8-glxinfo-10.1.js", "NVIDIA GF1xx (GeForce 400, 500)": "nvc3-glxinfo-10.1.js", "NVIDIA GKxxx (GeForce 600, 700)": "nve7-glxinfo-10.1.js", "ATI R500": "rv570-glxinfo-10.1.js", "AMD R600/R700": "rv770-glxinfo-10.1.js", "AMD Evergreen/Northern Islands": "barts-glxinfo-10.1.js", "AMD Southern/Sea Islands": "tahiti-glxinfo-10.1.js", "Adreno A3xx": "fd330-glxinfo-10.2-devel.js", }, "Mesa 10.2.0": { "LLVMPipe": "llvmpipe-glxinfo-10.2.js", "SoftPipe": "softpipe-glxinfo-10.2.js", "Intel(R) 965G / X3000": "gen4-glxinfo-10.2.js", "Intel\u00ae GM45 Express": "gen4.5-glxinfo-10.2.js", "Intel(R) Ironlake": "gen5-glxinfo-10.2.js", "Intel(R) Sandybridge (HD 2000/3000)": "snb-glxinfo-10.2.js", "Intel(R) Ivybridge (HD 2500 / 4000)": "gen7-glxinfo-10.2.js", "Intel(R) Haswell (HD 4x00/5000, Iris 5x00)": "gen7.5-glxinfo-10.2.js", "NVIDIA Riva TNT/TNT2": "nv05-glxinfo-10.2.js", "NVIDIA GeForce 2, 4MX": "nv17-glxinfo-10.2.js", "NVIDIA NV3x (GeForce FX)": "nv35-glxinfo-10.2.js", "NVIDIA NV4x (GeForce 6, 7)": "nv44-glxinfo-10.2.js", "NVIDIA G80-G98 (GeForce 8, 9)": "nv96-glxinfo-10.2.js", "NVIDIA GT21x (GeForce 200, 300)": "nva3-glxinfo-10.2.js", "NVIDIA GF1xx (GeForce 400, 500)": "nvcx-glxinfo-10.2.js", "NVIDIA GKxxx (GeForce 600, 700)": "nve6-glxinfo-10.2.js", "AMD R600/R700": "rv740-glxinfo-10.2.js", "AMD Evergreen/Northern Islands": "cedar-glxinfo-10.2.js", "AMD Southern/Sea Islands": "bonaire-glxinfo-10.2.js", "Adreno A3xx": "fd320-glxinfo-10.2.js", }, "Mesa 10.3.0": { "LLVMPipe": "llvmpipe-glxinfo-10.3.js", "SoftPipe": "softpipe-glxinfo-10.3.js", "Intel(R) 965G / X3000": "gen4-glxinfo-10.3.js", "Intel\u00ae GM45 Express": "gen4.5-glxinfo-10.3.js", "Intel(R) Ironlake": "gen5-glxinfo-10.3.js", "Intel(R) Sandybridge (HD 2000/3000)": "gen6-glxinfo-10.3.js", "Intel(R) Ivybridge (HD 2500 / 4000)": "gen7-glxinfo-10.3.js", "Intel(R) Haswell (HD 4x00/5000, Iris 5x00)": "gen7.5-glxinfo-10.3.js", //"NVIDIA Riva TNT/TNT2": "nv05-glxinfo-10.3.js", "NVIDIA GeForce 2, 4MX": "nv17-glxinfo-10.3.js", //"NVIDIA NV3x (GeForce FX)": "nv35-glxinfo-10.3.js", //"NVIDIA NV4x (GeForce 6, 7)": "nv44-glxinfo-10.3.js", "NVIDIA G80-G98 (GeForce 8, 9)": "nv92-glxinfo-10.3.js", "NVIDIA GT21x (GeForce 200, 300)": "nva8-glxinfo-10.3.js", "NVIDIA GF1xx (GeForce 400, 500)": "nvc1-glxinfo-10.3.js", "NVIDIA GKxxx (GeForce 600, 700)": "nve7-glxinfo-10.3.js", "AMD R600/R700": "rv770-glxinfo-10.3.js", "AMD Evergreen/Northern Islands": "turks-glxinfo-10.3.js", "AMD Southern/Sea Islands": "kabini-glxinfo-10.3.js", "Adreno A3xx": "fd320-glxinfo-10.3.js", }, "Mesa 10.4.0": { "LLVMPipe": "llvmpipe-glxinfo-10.4.js", "SoftPipe": "softpipe-glxinfo-10.4.js", "Intel(R) 965G / X3000": "gen4-glxinfo-10.4.js", "Intel\u00ae GM45 Express": "gen4.5-glxinfo-10.4.js", "Intel(R) Ironlake": "gen5-glxinfo-10.4.js", "Intel(R) Sandybridge (HD 2000/3000)": "gen6-glxinfo-10.4.js", "Intel(R) Ivybridge (HD 2500 / 4000)": "gen7-glxinfo-10.4.js", "Intel(R) Haswell (HD 4x00/5000, Iris 5x00)": "gen7.5-glxinfo-10.4.js", "Intel(R) Broadwell (HD 5x00/6000, Iris 6x00)": "gen8-glxinfo-10.4.js", //"NVIDIA Riva TNT/TNT2": "nv05-glxinfo-10.3.js", //"NVIDIA GeForce 2, 4MX": "nv17-glxinfo-10.3.js", //"NVIDIA NV3x (GeForce FX)": "nv35-glxinfo-10.3.js", "NVIDIA NV4x (GeForce 6, 7)": "nv4b-glxinfo-10.4.js", "NVIDIA G80-G98 (GeForce 8, 9)": "nv86-glxinfo-10.4.js", "NVIDIA GT21x (GeForce 200, 300)": "nva8-glxinfo-10.4.js", "NVIDIA GF1xx (GeForce 400, 500)": "nvcf-glxinfo-10.4.js", "NVIDIA GKxxx (GeForce 600, 700)": "nve7-glxinfo-10.4.js", "AMD R600/R700": "rv635-glxinfo-10.4.js", "AMD Evergreen/Northern Islands": "cayman-glxinfo-10.4.js", "AMD Southern/Sea Islands": "tahiti-glxinfo-10.4.js", "Adreno A3xx": "fd320-glxinfo-10.4.js", }, "Mesa 10.5.0": { "LLVMPipe": "llvmpipe-glxinfo-10.5.js", "SoftPipe": "softpipe-glxinfo-10.5.js", "Intel(R) 965G / X3000": "gen4-glxinfo-10.5.js", "Intel\u00ae GM45 Express": "gen4.5-glxinfo-10.5.js", "Intel(R) Ironlake": "gen5-glxinfo-10.5.js", "Intel(R) Sandybridge (HD 2000/3000)": "gen6-glxinfo-10.5.js", "Intel(R) Ivybridge (HD 2500 / 4000)": "gen7-glxinfo-10.5.js", "Intel(R) Haswell (HD 4x00/5000, Iris 5x00)": "gen7.5-glxinfo-10.5.js", "Intel(R) Broadwell (HD 5x00/6000, Iris 6x00)": "gen8-glxinfo-10.5.js", "NVIDIA NV4x (GeForce 6, 7)": "nv4b-glxinfo-10.5.js", "NVIDIA G80-G98 (GeForce 8, 9)": "nv96-glxinfo-10.5.js", "NVIDIA GT21x (GeForce 200, 300)": "nva8-glxinfo-10.5.js", "NVIDIA GF1xx (GeForce 400, 500)": "nvc1-glxinfo-10.5.js", "NVIDIA GKxxx (GeForce 600, 700)": "nve7-glxinfo-10.5.js", "AMD R600/R700": "rv770-glxinfo-10.5.js", "AMD Evergreen/Northern Islands": "turks-glxinfo-10.5.js", "AMD Southern/Sea Islands": "kabini-glxinfo-10.5.js", "Adreno A3xx": "fd320-glxinfo-10.5.js", }, "Mesa 10.6.0": { "LLVMPipe": "llvmpipe-glxinfo-10.6.js", "SoftPipe": "softpipe-glxinfo-10.6.js", "Intel(R) 965G / X3000": "gen4-glxinfo-10.6.js", "Intel\u00ae GM45 Express": "gen4.5-glxinfo-10.6.js", "Intel(R) Ironlake": "gen5-glxinfo-10.6.js", "Intel(R) Sandybridge (HD 2000/3000)": "gen6-glxinfo-10.6.js", "Intel(R) Ivybridge (HD 2500 / 4000)": "gen7-glxinfo-10.6.js", "Intel(R) Haswell (HD 4x00/5000, Iris 5x00)": "gen7.5-glxinfo-10.6.js", "Intel(R) Broadwell (HD 5x00/6000, Iris 6x00)": "gen8-glxinfo-10.6.js", "NVIDIA NV4x (GeForce 6, 7)": "nv44-glxinfo-10.6.js", "NVIDIA G80-G98 (GeForce 8, 9)": "nv96-glxinfo-10.6.js", "NVIDIA GT21x (GeForce 200, 300)": "nva5-glxinfo-10.6.js", "NVIDIA GF1xx (GeForce 400, 500)": "nvc1-glxinfo-10.6.js", "NVIDIA GKxxx (GeForce 600, 700)": "nv108-glxinfo-10.6.js", "AMD R600/R700": "rv770-glxinfo-10.6.js", "AMD Evergreen/Northern Islands": "turks-glxinfo-10.6.js", "AMD Southern/Sea Islands": "tahiti-glxinfo-10.6.js", "Adreno A3xx": "a320-glxinfo-10.6.js", "Adreno A4xx": "a420-glxinfo-10.6.js", }, "Mesa 11.0.0": { "LLVMPipe": "llvmpipe-glxinfo-11.0.js", "SoftPipe": "softpipe-glxinfo-11.0.js", "Intel(R) 965G / X3000": "gen4-glxinfo-11.0.js", "Intel\u00ae GM45 Express": "gen4.5-glxinfo-11.0.js", "Intel(R) Ironlake": "gen5-glxinfo-11.0.js", "Intel(R) Sandybridge (HD 2000/3000)": "gen6-glxinfo-11.0.js", "Intel(R) Ivybridge (HD 2500 / 4000)": "gen7-glxinfo-11.0.js", "Intel(R) Haswell (HD 4x00/5000, Iris 5x00)": "gen7.5-glxinfo-11.0.js", "Intel(R) Broadwell (HD 5x00/6000, Iris 6x00)": "gen8-glxinfo-11.0.js", "NVIDIA G80-G98 (GeForce 8, 9)": "nv96-glxinfo-11.0.js", "NVIDIA GT21x (GeForce 200, 300)": "nva3-glxinfo-11.0.js", "NVIDIA GF1xx (GeForce 400, 500)": "nvc1-glxinfo-11.0.js", "NVIDIA GKxxx (GeForce 600, 700)": "nv108-glxinfo-11.0.js", "ATI R200": "r200-glxinfo-11.0.js", "AMD R600/R700": "rv635-glxinfo-11.0.js", "AMD Evergreen/Northern Islands": "cayman-glxinfo-11.0.js", "AMD Southern/Sea Islands": "tahiti-glxinfo-11.0.js", "Adreno A3xx": "a320-glxinfo-11.0.js", "Adreno A4xx": "a420-glxinfo-11.0.js", }, "Mesa 11.1.0": { "LLVMPipe": "llvmpipe-glxinfo-11.1.js", "SoftPipe": "softpipe-glxinfo-11.1.js", "Intel(R) 965G / X3000": "gen4-glxinfo-11.1.js", "Intel\u00ae GM45 Express": "gen4.5-glxinfo-11.1.js", "Intel(R) Ironlake": "gen5-glxinfo-11.1.js", "Intel(R) Sandybridge (HD 2000/3000)": "gen6-glxinfo-11.1.js", "Intel(R) Ivybridge (HD 2500 / 4000)": "gen7-glxinfo-11.1.js", "Intel(R) Haswell (HD 4x00/5000, Iris 5x00)": "gen7.5-glxinfo-11.1.js", "Intel(R) Broadwell (HD 5x00/6000, Iris 6x00)": "gen8-glxinfo-11.1.js", "NVIDIA G80-G98 (GeForce 8, 9)": "nv96-glxinfo-11.1.js", "NVIDIA GT21x (GeForce 200, 300)": "nva3-glxinfo-11.1.js", "NVIDIA GF1xx (GeForce 400, 500)": "nvc1-glxinfo-11.1.js", "NVIDIA GKxxx (GeForce 600, 700)": "nv108-glxinfo-11.1.js", "AMD R600/R700": "rv635-glxinfo-11.1.js", "AMD Evergreen/Northern Islands": "cayman-glxinfo-11.1.js", "AMD Southern/Sea Islands": "tonga-glxinfo-11.1.js", "Adreno A3xx": "a305-glxinfo-11.1.js", "Adreno A4xx": "a420-glxinfo-11.1.js", "Broadcom VC4 V3D 2.1 (Raspberry Pi)": "vc4-v3d-2.1-glxinfo-11.1.js", }, "Mesa 11.2.0": { "LLVMPipe": "llvmpipe-glxinfo-11.2.js", "SoftPipe": "softpipe-glxinfo-11.2.js", "Intel(R) 965G / X3000": "gen4-glxinfo-11.2.js", "Intel\u00ae GM45 Express": "gen4.5-glxinfo-11.2.js", "Intel(R) Ironlake": "gen5-glxinfo-11.2.js", "Intel(R) Sandybridge (HD 2000/3000)": "gen6-glxinfo-11.2.js", "Intel(R) Ivybridge (HD 2500 / 4000)": "gen7-glxinfo-11.2.js", "Intel(R) Haswell (HD 4x00/5000, Iris 5x00)": "gen7.5-glxinfo-11.2.js", "Intel(R) Broadwell (HD 5x00/6000, Iris 6x00)": "gen8-glxinfo-11.2.js", "Intel(R) Skylake (HD 5xx)": "gen9-glxinfo-11.2.js", "NVIDIA G80-G98 (GeForce 8, 9)": "nv96-glxinfo-11.2.js", "NVIDIA GT21x (GeForce 200, 300)": "nva3-glxinfo-11.2.js", "NVIDIA GF1xx (GeForce 400, 500)": "nvc1-glxinfo-11.2.js", "NVIDIA GKxxx (GeForce 600, 700)": "nv108-glxinfo-11.2.js", "NVIDIA GMxxx (GeForce 900)": "gm107-glxinfo-11.2.js", "AMD R600/R700": "rv770-glxinfo-11.2.js", "AMD Evergreen/Northern Islands": "palm-glxinfo-11.2.js", "AMD Southern/Sea Islands": "tahiti-glxinfo-11.2.js", "Adreno A3xx": "a320-glxinfo-11.2.js", "Adreno A4xx": "a420-glxinfo-11.2.js", }, "Mesa 12.0.0": { "LLVMPipe": "llvmpipe-glxinfo-12.0.js", "SoftPipe": "softpipe-glxinfo-12.0.js", "Intel(R) 965G / X3000": "gen4-glxinfo-12.0.js", "Intel\u00ae GM45 Express": "gen4.5-glxinfo-12.0.js", "Intel(R) Ironlake": "gen5-glxinfo-12.0.js", "Intel(R) Sandybridge (HD 2000/3000)": "gen6-glxinfo-12.0.js", "Intel(R) Ivybridge (HD 2500 / 4000)": "gen7-glxinfo-12.0.js", "Intel(R) Haswell (HD 4x00/5000, Iris 5x00)": "gen7.5-glxinfo-12.0.js", "Intel(R) Broadwell (HD 5x00/6000, Iris 6x00)": "gen8-glxinfo-12.0.js", "Intel(R) Skylake (HD 5xx)": "gen9-glxinfo-12.0.js", "NVIDIA NV3x (GeForce FX)": "nv34-glxinfo-12.0.js", "NVIDIA G80-G98 (GeForce 8, 9)": "nv96-glxinfo-12.0.js", "NVIDIA GT21x (GeForce 200, 300)": "nva3-glxinfo-12.0.js", "NVIDIA GF1xx (GeForce 400, 500)": "nvd9-glxinfo-12.0.js", "NVIDIA GKxxx (GeForce 600, 700)": "nv106-glxinfo-12.0.js", "NVIDIA GMxxx (GeForce 900)": "gm107-glxinfo-12.0.js", "AMD R600/R700": "rv770-glxinfo-12.0.js", "AMD Evergreen/Northern Islands": "redwood-glxinfo-12.0.js", "AMD Southern/Sea Islands": "kaveri-glxinfo-12.0.js", "Adreno A3xx": "a320-glxinfo-12.0.js", "Adreno A4xx": "a420-glxinfo-12.0.js", }, "Mesa 13.0.0": { "LLVMPipe": "llvmpipe-glxinfo-13.0.js", "SoftPipe": "softpipe-glxinfo-13.0.js", "Intel(R) 965G / X3000": "gen4-glxinfo-13.0.js", "Intel\u00ae GM45 Express": "gen4.5-glxinfo-13.0.js", "Intel(R) Ironlake": "gen5-glxinfo-13.0.js", "Intel(R) Sandybridge (HD 2000/3000)": "gen6-glxinfo-13.0.js", "Intel(R) Ivybridge (HD 2500 / 4000)": "gen7-glxinfo-13.0.js", //"Intel(R) Haswell (HD 4x00/5000, Iris 5x00)": "gen7.5-glxinfo-12.0.js", //"Intel(R) Broadwell (HD 5x00/6000, Iris 6x00)": "gen8-glxinfo-12.0.js", "Intel(R) Skylake (HD 5xx)": "gen9-glxinfo-13.0.js", "NVIDIA NV3x (GeForce FX)": "nv34-glxinfo-13.0.js", "NVIDIA G80-G98 (GeForce 8, 9)": "nv96-glxinfo-13.0.js", "NVIDIA GT21x (GeForce 200, 300)": "nva5-glxinfo-13.0.js", "NVIDIA GF1xx (GeForce 400, 500)": "nvc1-glxinfo-13.0.js", "NVIDIA GKxxx (GeForce 600, 700)": "nv106-glxinfo-13.0.js", "NVIDIA GMxxx (GeForce 900)": "gm107-glxinfo-13.0.js", "AMD R600/R700": "rv770-glxinfo-13.0.js", //"AMD Evergreen/Northern Islands": "redwood-glxinfo-12.0.js", "AMD Southern/Sea Islands": "tonga-glxinfo-13.0.js", //"Adreno A3xx": "a320-glxinfo-12.0.js", //"Adreno A4xx": "a420-glxinfo-12.0.js", }, "Vendor": { "Intel(R) Sandybridge (HD 2000/3000)": "snb-glxinfo-windows.js", "AMD Southern/Sea Islands": "hd7900-fglrx-14.20-glxinfo.js", "AMD Evergreen/Northern Islands": "hd5670-fglrx-14.20-glxinfo.js", "NVIDIA G80-G98 (GeForce 8, 9)": "gt8400m-nvidia-337.25-glxinfo.js", "NVIDIA GT21x (GeForce 200, 300)": "gt210-nvidia-337.25-glxinfo.js", "NVIDIA GF1xx (GeForce 400, 500)": "gtx560-nvidia-349.16-glxinfo.js", "NVIDIA GKxxx (GeForce 600, 700)": "gt720-nvidia-358.09-glxinfo.js", "NVIDIA GMxxx (GeForce 900)": "gtx960-nvidia-361.28-glxinfo.js", "Adreno A3xx": "a320-qcom-45.js", "Adreno A4xx": "a420-qcom-127.js", }, "Apple": { "Intel(R) Haswell (HD 4x00/5000, Iris 5x00)": "hsw-apple-10.11-glxinfo.js", }, }; var HWS = [ ["Software", ["LLVMPipe", "SoftPipe"]], ["Intel", [ "Intel(R) 965G / X3000", "Intel\u00ae GM45 Express", "Intel(R) Ironlake", "Intel(R) Sandybridge (HD 2000/3000)", "Intel(R) Ivybridge (HD 2500 / 4000)", "Intel(R) Haswell (HD 4x00/5000, Iris 5x00)", "Intel(R) Broadwell (HD 5x00/6000, Iris 6x00)", "Intel(R) Skylake (HD 5xx)", ]], ["NVIDIA", [ "NVIDIA Riva TNT/TNT2", "NVIDIA GeForce 2, 4MX", "NVIDIA NV3x (GeForce FX)", "NVIDIA NV4x (GeForce 6, 7)", "NVIDIA G80-G98 (GeForce 8, 9)", "NVIDIA GT21x (GeForce 200, 300)", "NVIDIA GF1xx (GeForce 400, 500)", "NVIDIA GKxxx (GeForce 600, 700)", "NVIDIA GMxxx (GeForce 900)", ]], ["AMD/ATI", [ "ATI R200", "ATI R500", "AMD R600/R700", "AMD Evergreen/Northern Islands", "AMD Southern/Sea Islands", ]], ["Other", [ "Adreno A3xx", "Adreno A4xx", "Broadcom VC4 V3D 2.1 (Raspberry Pi)", ]], ]; var UNSUPPORTED = { "Intel(R) Broadwell (HD 5x00/6000, Iris 6x00)": [ "GL_ARB_shader_stencil_export", "GL_KHR_texture_compression_astc_hdr", "GL_KHR_texture_compression_astc_ldr", "GL_AMD_shader_stencil_export", ], "Intel(R) Haswell (HD 4x00/5000, Iris 5x00)": [ "GL_ARB_shader_stencil_export", "GL_KHR_texture_compression_astc_hdr", "GL_KHR_texture_compression_astc_ldr", "GL_AMD_shader_stencil_export", ], "Intel(R) Ivybridge (HD 2500 / 4000)": [ "GL_ARB_shader_stencil_export", "GL_KHR_texture_compression_astc_hdr", "GL_KHR_texture_compression_astc_ldr", "GL_AMD_shader_stencil_export", ], "Intel(R) Sandybridge (HD 2000/3000)": [ "GL_ARB_conservative_depth", "GL_ARB_draw_indirect", "GL_ARB_multi_draw_indirect", "GL_ARB_shader_stencil_export", "GL_ARB_tessellation_shader", "GL_ARB_texture_compression_bptc", "GL_ARB_transform_feedback3", "GL_KHR_texture_compression_astc_hdr", "GL_KHR_texture_compression_astc_ldr", "GL_AMD_conservative_depth", "GL_AMD_shader_stencil_export", ], "Intel(R) Ironlake": [ "GL_ARB_conservative_depth", "GL_ARB_draw_indirect", "GL_ARB_multi_draw_indirect", "GL_ARB_shader_stencil_export", "GL_ARB_tessellation_shader", "GL_ARB_texture_compression_bptc", "GL_ARB_texture_query_lod", "GL_ARB_transform_feedback3", "GL_KHR_texture_compression_astc_hdr", "GL_KHR_texture_compression_astc_ldr", "GL_AMD_conservative_depth", "GL_AMD_shader_stencil_export", ], "Intel\u00ae GM45 Express": [ "GL_ARB_conservative_depth", "GL_ARB_draw_indirect", "GL_ARB_multi_draw_indirect", "GL_ARB_shader_stencil_export", "GL_ARB_tessellation_shader", "GL_ARB_texture_compression_bptc", "GL_ARB_texture_query_lod", "GL_ARB_transform_feedback3", "GL_KHR_texture_compression_astc_hdr", "GL_KHR_texture_compression_astc_ldr", "GL_AMD_conservative_depth", "GL_AMD_shader_stencil_export", ], "Intel(R) 965G / X3000": [ "GL_ARB_conservative_depth", "GL_ARB_draw_indirect", "GL_ARB_multi_draw_indirect", "GL_ARB_shader_stencil_export", "GL_ARB_tessellation_shader", "GL_ARB_texture_compression_bptc", "GL_ARB_texture_query_lod", "GL_ARB_transform_feedback3", "GL_KHR_texture_compression_astc_hdr", "GL_KHR_texture_compression_astc_ldr", "GL_AMD_conservative_depth", "GL_AMD_shader_stencil_export", ], "AMD R600/R700": [ "GL_ARB_ES3_1_compatibility", "GL_ARB_derivative_control", "GL_ARB_shader_texture_image_samples", "GL_ARB_compute_shader", "GL_ARB_multi_draw_indirect", "GL_ARB_shader_atomic_counters", "GL_ARB_shader_image_load_store", "GL_ARB_texture_compression_bptc", "GL_ARB_draw_indirect", "GL_ARB_gpu_shader5", "GL_ARB_tessellation_shader", "GL_ARB_texture_gather", "GL_ARB_texture_query_lod", "GL_ARB_seamless_cubemap_per_texture", "GL_3DFX_texture_compression_FXT1", "GL_AMD_seamless_cubemap_per_texture", "GL_ARB_query_buffer_object", "GL_ARB_shader_storage_buffer_object", "GL_ARB_shader_image_size", "GL_ARB_texture_cube_map_array", "GL_NV_vdpau_interop", ], "AMD Evergreen/Northern Islands": [ "GL_3DFX_texture_compression_FXT1", ], "AMD Southern/Sea Islands": [ "GL_3DFX_texture_compression_FXT1", ], "NVIDIA G80-G98 (GeForce 8, 9)": [ "GL_ARB_texture_query_lod", "GL_ARB_draw_buffers_blend", "GL_ARB_draw_indirect", "GL_ARB_gpu_shader5", "GL_ARB_gpu_shader_fp64", "GL_ARB_sample_shading", "GL_ARB_tessellation_shader", "GL_ARB_texture_buffer_object_rgb32", "GL_ARB_texture_cube_map_array", "GL_ARB_texture_gather", "GL_ARB_transform_feedback2", "GL_ARB_transform_feedback3", "GL_ARB_vertex_attrib_64bit", "GL_ARB_transform_feedback_instanced", "GL_ARB_texture_compression_bptc", "GL_ARB_shader_image_load_store", "GL_ARB_shader_atomic_counters", "GL_ARB_shader_storage_buffer_object", "GL_ARB_shader_image_size", "GL_ARB_compute_shader", "GL_ARB_multi_draw_indirect", "GL_ARB_query_buffer_object", "GL_ARB_ES3_1_compatibility", "GL_ARB_seamless_cubemap_per_texture", "GL_ARB_shader_stencil_export", "GL_3DFX_texture_compression_FXT1", "GL_AMD_draw_buffers_blend", "GL_AMD_seamless_cubemap_per_texture", "GL_AMD_shader_stencil_export", "GL_AMD_vertex_shader_layer", "GL_AMD_vertex_shader_viewport_index", ], "NVIDIA GT21x (GeForce 200, 300)": [ "GL_ARB_draw_indirect", "GL_ARB_gpu_shader5", "GL_ARB_gpu_shader_fp64", "GL_ARB_tessellation_shader", "GL_ARB_texture_buffer_object_rgb32", "GL_ARB_vertex_attrib_64bit", "GL_ARB_texture_compression_bptc", "GL_ARB_shader_image_load_store", "GL_ARB_shader_atomic_counters", "GL_ARB_shader_storage_buffer_object", "GL_ARB_shader_image_size", "GL_ARB_compute_shader", "GL_ARB_multi_draw_indirect", "GL_ARB_query_buffer_object", "GL_ARB_ES3_1_compatibility", "GL_ARB_seamless_cubemap_per_texture", "GL_ARB_shader_stencil_export", "GL_3DFX_texture_compression_FXT1", "GL_AMD_seamless_cubemap_per_texture", "GL_AMD_shader_stencil_export", "GL_AMD_vertex_shader_layer", "GL_AMD_vertex_shader_viewport_index", ], "NVIDIA GF1xx (GeForce 400, 500)": [ "GL_ARB_seamless_cubemap_per_texture", "GL_ARB_shader_stencil_export", "GL_3DFX_texture_compression_FXT1", "GL_AMD_seamless_cubemap_per_texture", "GL_AMD_shader_stencil_export", "GL_AMD_vertex_shader_layer", "GL_AMD_vertex_shader_viewport_index", ], "NVIDIA GKxxx (GeForce 600, 700)": [ "GL_ARB_shader_stencil_export", "GL_3DFX_texture_compression_FXT1", "GL_AMD_shader_stencil_export", "GL_AMD_vertex_shader_layer", "GL_AMD_vertex_shader_viewport_index", ], }; var LOADED = {}; var CONFIGS_BY_HW = {}; var CONFIGS_BY_VERSION = {}; var VERSION; var PROFILE = 'core'; var DEFAULT_VERSION = 'Mesa 13.0.0'; function load_script(name, complete) { if (name in LOADED) { complete(); } else { var script = document.createElement('script'), head = document.head || document.getElementsByTagName('head')[0]; script.src = name; script.async = true; script.onload = function() { LOADED[name] = 1; complete(); }; head.insertBefore(script, head.firstChild); } } function load_scripts(scripts, complete) { var count = 0; $.each(scripts, function() { load_script(this, function() { count++; if (count == scripts.length) complete(); }); }); } function load_version(version, complete) { scripts = []; $.each(VERSIONS[version], function(k, v) { scripts.push(v); }); load_scripts(scripts, complete); } function load_hw(hw, complete) { scripts = []; $.each(VERSIONS, function(k, v) { $.each(v, function(k, v) { if (k == hw) scripts.push(v); })}); load_scripts(scripts, complete); } function add_array(dict, key, val) { if (dict[key]) dict[key].push(val); else dict[key] = [val]; } /* called by scripts */ function register(vendor, renderer, data) { $.each(data, function() { var config = this; config.vendor = vendor; config.renderer = renderer; var extensions = {}; $.each(config.extensions, function() { extensions[this] = 1; }); config.extensions = extensions; var unsupported = UNSUPPORTED[renderer] || {}; config.unsupported = {}; $.each(unsupported, function() { config.unsupported[this] = 1; }); var profile = config.profile; if (!profile) { profile = config.core ? 'core' : 'compat'; config.profile = profile; } var key = config.library + '/' + profile; add_array(CONFIGS_BY_VERSION, key, config); add_array(CONFIGS_BY_HW, config.renderer, config); }); } function keys(obj) { var ret = []; $.each(obj, function(k, v) { ret.push(k); }); return ret; } var EXTORDER = {"ARB": 1, "OES": 1.5, "EXT": 2}; var EXTGROUPS = [ ["OpenGL 4.5", true, [ "GL_ARB_clip_control", "GL_ARB_conditional_render_inverted", "GL_ARB_cull_distance", "GL_ARB_derivative_control", "GL_ARB_direct_state_access", "GL_ARB_ES3_1_compatibility", "GL_ARB_get_texture_sub_image", "GL_KHR_robustness", "GL_ARB_shader_texture_image_samples", "GL_ARB_texture_barrier", "GL_KHR_context_flush_control", ]], ["OpenGL 4.4", true, [ "GL_ARB_buffer_storage", "GL_ARB_clear_texture", "GL_ARB_enhanced_layouts", "GL_ARB_multi_bind", "GL_ARB_query_buffer_object", "GL_ARB_texture_mirror_clamp_to_edge", "GL_ARB_texture_stencil8", "GL_ARB_vertex_type_10f_11f_11f_rev", ]], ["OpenGL 4.3", true, [ "GL_ARB_arrays_of_arrays", "GL_ARB_ES3_compatibility", "GL_ARB_clear_buffer_object", "GL_ARB_compute_shader", "GL_ARB_copy_image", "GL_KHR_debug", "GL_ARB_explicit_uniform_location", "GL_ARB_fragment_layer_viewport", "GL_ARB_framebuffer_no_attachments", "GL_ARB_internalformat_query2", "GL_ARB_invalidate_subdata", "GL_ARB_multi_draw_indirect", "GL_ARB_program_interface_query", "GL_ARB_robust_buffer_access_behavior", "GL_ARB_shader_image_size", "GL_ARB_shader_storage_buffer_object", "GL_ARB_stencil_texturing", "GL_ARB_texture_buffer_range", "GL_ARB_texture_query_levels", "GL_ARB_texture_storage_multisample", "GL_ARB_texture_view", "GL_ARB_vertex_attrib_binding", ]], ["OpenGL 4.2", true, [ "GL_ARB_texture_compression_bptc", "GL_ARB_compressed_texture_pixel_storage", "GL_ARB_shader_atomic_counters", "GL_ARB_texture_storage", "GL_ARB_transform_feedback_instanced", "GL_ARB_base_instance", "GL_ARB_shader_image_load_store", "GL_ARB_conservative_depth", "GL_ARB_shading_language_420pack", "GL_ARB_shading_language_packing", "GL_ARB_internalformat_query", "GL_ARB_map_buffer_alignment", ]], ["OpenGL 4.1", true, [ "GL_ARB_ES2_compatibility", "GL_ARB_get_program_binary", "GL_ARB_separate_shader_objects", "GL_ARB_shader_precision", "GL_ARB_vertex_attrib_64bit", "GL_ARB_viewport_array", ]], ["OpenGL 4.0", true, [ "GL_ARB_texture_query_lod", "GL_ARB_draw_buffers_blend", "GL_ARB_draw_indirect", "GL_ARB_gpu_shader5", "GL_ARB_gpu_shader_fp64", "GL_ARB_sample_shading", "GL_ARB_shader_subroutine", "GL_ARB_tessellation_shader", "GL_ARB_texture_buffer_object_rgb32", "GL_ARB_texture_cube_map_array", "GL_ARB_texture_gather", "GL_ARB_transform_feedback2", "GL_ARB_transform_feedback3", ]], ["OpenGL 3.3", true, [ "GL_ARB_blend_func_extended", "GL_ARB_explicit_attrib_location", "GL_ARB_occlusion_query2", "GL_ARB_sampler_objects", "GL_ARB_shader_bit_encoding", "GL_ARB_texture_rgb10_a2ui", "GL_ARB_texture_swizzle", "GL_ARB_timer_query", "GL_ARB_instanced_arrays", "GL_ARB_vertex_type_2_10_10_10_rev", ]], ["OpenGL 3.2", true, [ "GL_ARB_vertex_array_bgra", "GL_ARB_draw_elements_base_vertex", "GL_ARB_fragment_coord_conventions", "GL_ARB_provoking_vertex", "GL_ARB_seamless_cube_map", "GL_ARB_texture_multisample", "GL_ARB_depth_clamp", "GL_ARB_sync", ]], ["OpenGL 3.1", false, [ "GL_ARB_draw_instanced", "GL_ARB_copy_buffer", "GL_NV_primitive_restart", "GL_ARB_texture_buffer_object", "GL_ARB_texture_rectangle", "GL_ARB_uniform_buffer_object", "GL_EXT_texture_snorm", ]], ["OpenGL 3.0", false, [ "GL_NV_conditional_render", "GL_ARB_map_buffer_range", "GL_ARB_color_buffer_float", "GL_ARB_texture_float", "GL_EXT_packed_float", "GL_EXT_texture_shared_exponent", "GL_ARB_depth_buffer_float", "GL_ARB_framebuffer_object", "GL_ARB_half_float_pixel", "GL_ARB_half_float_vertex", "GL_EXT_texture_integer", "GL_EXT_texture_array", "GL_EXT_draw_buffers2", "GL_ARB_texture_compression_rgtc", "GL_ARB_texture_rg", "GL_EXT_transform_feedback", "GL_ARB_vertex_array_object", "GL_ARB_framebuffer_sRGB", "GL_ARB_shader_texture_lod", ]], ["OpenGL 2.1", false, [ "GL_ARB_pixel_buffer_object", "GL_EXT_texture_sRGB", ]], ["OpenGL 2.0", false, [ "GL_ARB_shading_language_100", "GL_ARB_shader_objects", "GL_ARB_draw_buffers", "GL_ARB_point_sprite", "GL_ARB_vertex_shader", "GL_ARB_fragment_shader", "GL_ARB_texture_non_power_of_two", "GL_EXT_blend_equation_separate", "GL_EXT_stencil_two_side", "GL_ATI_separate_stencil", ]], ["OpenGL 1.5", false, [ "GL_ARB_vertex_buffer_object", "GL_ARB_occlusion_query", "GL_EXT_shadow_funcs", ]], ["OpenGL 1.4", false, [ "GL_ARB_depth_texture", "GL_ARB_point_parameters", "GL_ARB_shadow", "GL_ARB_texture_env_crossbar", "GL_ARB_texture_mirrored_repeat", "GL_ARB_window_pos", "GL_EXT_blend_color", "GL_EXT_blend_func_separate", "GL_EXT_blend_minmax", "GL_EXT_blend_subtract", "GL_EXT_fog_coord", "GL_EXT_multi_draw_arrays", "GL_EXT_secondary_color", "GL_EXT_stencil_wrap", "GL_EXT_texture_lod_bias", "GL_NV_blend_square", "GL_SGIS_generate_mipmap", ]], ["OpenGL 1.3", false, [ "GL_ARB_multisample", "GL_ARB_multitexture", "GL_ARB_texture_border_clamp", "GL_ARB_texture_compression", "GL_ARB_texture_cube_map", "GL_ARB_texture_env_add", "GL_ARB_texture_env_combine", "GL_ARB_texture_env_dot3", "GL_ARB_transpose_matrix", ]], ["OpenGL 1.2", false, [ "GL_EXT_bgra", "GL_EXT_draw_range_elements", "GL_EXT_packed_pixels", "GL_EXT_rescale_normal", "GL_EXT_separate_specular_color", "GL_EXT_texture3D", "GL_SGIS_texture_edge_clamp", "GL_SGIS_texture_lod", ]], ["OpenGL 1.1", false, [ "GL_EXT_copy_texture", "GL_EXT_polygon_offset", "GL_EXT_subtexture", "GL_EXT_texture", "GL_EXT_texture_object", "GL_EXT_vertex_array", ]], ]; function extsort(a, b) { var asplit = a.match(/GL_([A-Z0-9]+)_(.*)/); var bsplit = b.match(/GL_([A-Z0-9]+)_(.*)/); var acmp, bcmp; if (EXTORDER[asplit[1]] && EXTORDER[bsplit[1]] && asplit[1] != bsplit[1]) return EXTORDER[asplit[1]] - EXTORDER[bsplit[1]]; if (EXTORDER[asplit[1]] && !EXTORDER[bsplit[1]]) return -1; if (EXTORDER[bsplit[1]] && !EXTORDER[asplit[1]]) return 1; if (asplit[1] == bsplit[1]) { acmp = asplit[2]; bcmp = bsplit[2]; } else { acmp = asplit[1]; bcmp = bsplit[1]; } return (acmp < bcmp) ? -1 : ((acmp > bcmp) ? 1 : 0); } // Sort strings like "Mesa 9.1" and "Mesa 10.0" the way we'd expect function versort(a, b) { var asplit = a.match(/^[^\d]* ([\d\.]+)(.*)/); var bsplit = b.match(/^[^\d]* ([\d\.]+)(.*)/); if (!asplit || !bsplit) { return (a < b) ? -1 : ((a > b) ? 1 : 0); } var aver = $.map(asplit[1].split("."), function(v) { return parseInt(v, 10); }); var bver = $.map(bsplit[1].split("."), function(v) { return parseInt(v, 10); }); var len = aver.length; if (bver.length > len) len = bver.length; for (var i = 0; i < len; i++) { if (aver[i] === undefined) return -1; if (bver[i] === undefined) return 1; if (aver[i] != bver[i]) return aver[i] - bver[i]; } return 0; } // Compute a class prefix to use for this config, based on the vendor function config_class(config) { if (config.vendor.indexOf("Intel") >= 0) return "intel"; if (config.vendor.indexOf("nouveau") >= 0) return "nouveau"; if (config.vendor.indexOf("NVIDIA") >= 0) return "nouveau"; if (config.vendor.indexOf("radeon") >= 0) return "radeon"; if (config.vendor.indexOf("Advanced Micro Devices") >= 0) return "radeon"; return "sw"; } function config_cell(f, ext, config) { var unsupported = ""; if (ext && ext in config.unsupported) unsupported = " unsupported"; return '