static struct gl_context * nv10_context_create(struct nouveau_screen *screen, const struct gl_config *visual, struct gl_context *share_ctx) { struct nouveau_context *nctx; struct gl_context *ctx; unsigned celsius_class; int ret; nctx = CALLOC_STRUCT(nouveau_context); if (!nctx) return NULL; ctx = &nctx->base; if (!nouveau_context_init(ctx, screen, visual, share_ctx)) goto fail; driInitExtensions(ctx, nv10_extensions, GL_FALSE); /* GL constants. */ ctx->Const.MaxTextureLevels = 12; ctx->Const.MaxTextureCoordUnits = NV10_TEXTURE_UNITS; ctx->Const.MaxTextureImageUnits = NV10_TEXTURE_UNITS; ctx->Const.MaxTextureUnits = NV10_TEXTURE_UNITS; ctx->Const.MaxTextureMaxAnisotropy = 2; ctx->Const.MaxTextureLodBias = 15; ctx->Driver.Clear = nv10_clear; /* 2D engine. */ ret = nv04_surface_init(ctx); if (!ret) goto fail; /* 3D engine. */ if (context_chipset(ctx) >= 0x17) celsius_class = NV17_3D; else if (context_chipset(ctx) >= 0x11) celsius_class = NV11_3D; else celsius_class = NV10_3D; ret = nouveau_grobj_alloc(context_chan(ctx), 0xbeef0001, celsius_class, &nctx->hw.eng3d); if (ret) goto fail; nv10_hwctx_init(ctx); nv10_vbo_init(ctx); nv10_swtnl_init(ctx); return ctx; fail: nv10_context_destroy(ctx); return NULL; }
static struct gl_context * nv10_context_create(struct nouveau_screen *screen, const struct gl_config *visual, struct gl_context *share_ctx) { struct nouveau_context *nctx; struct gl_context *ctx; unsigned celsius_class; int ret; nctx = CALLOC_STRUCT(nouveau_context); if (!nctx) return NULL; ctx = &nctx->base; if (!nouveau_context_init(ctx, screen, visual, share_ctx)) goto fail; ctx->Extensions.ARB_texture_env_crossbar = true; ctx->Extensions.ARB_texture_env_combine = true; ctx->Extensions.ARB_texture_env_dot3 = true; ctx->Extensions.NV_fog_distance = true; ctx->Extensions.NV_texture_rectangle = true; if (ctx->Mesa_DXTn) { ctx->Extensions.EXT_texture_compression_s3tc = true; ctx->Extensions.ANGLE_texture_compression_dxt = true; } /* GL constants. */ ctx->Const.MaxTextureLevels = 12; ctx->Const.MaxTextureCoordUnits = NV10_TEXTURE_UNITS; ctx->Const.MaxTextureImageUnits = NV10_TEXTURE_UNITS; ctx->Const.MaxTextureUnits = NV10_TEXTURE_UNITS; ctx->Const.MaxTextureMaxAnisotropy = 2; ctx->Const.MaxTextureLodBias = 15; ctx->Driver.Clear = nv10_clear; /* 2D engine. */ ret = nv04_surface_init(ctx); if (!ret) goto fail; /* 3D engine. */ if (context_chipset(ctx) >= 0x17 && context_chipset(ctx) != 0x1a) celsius_class = NV17_3D_CLASS; else if (context_chipset(ctx) >= 0x11) celsius_class = NV15_3D_CLASS; else celsius_class = NV10_3D_CLASS; ret = nouveau_object_new(context_chan(ctx), 0xbeef0001, celsius_class, NULL, 0, &nctx->hw.eng3d); if (ret) goto fail; nv10_hwctx_init(ctx); nv10_vbo_init(ctx); nv10_swtnl_init(ctx); return ctx; fail: nv10_context_destroy(ctx); return NULL; }
static struct gl_context * nv20_context_create(struct nouveau_screen *screen, gl_api api, const struct gl_config *visual, struct gl_context *share_ctx) { struct nouveau_context *nctx; struct gl_context *ctx; unsigned kelvin_class; int ret; nctx = CALLOC_STRUCT(nouveau_context); if (!nctx) return NULL; ctx = &nctx->base; if (!nouveau_context_init(ctx, api, screen, visual, share_ctx)) goto fail; ctx->Extensions.ARB_texture_env_crossbar = true; ctx->Extensions.ARB_texture_env_combine = true; ctx->Extensions.ARB_texture_env_dot3 = true; ctx->Extensions.EXT_texture_env_dot3 = true; ctx->Extensions.NV_fog_distance = true; ctx->Extensions.NV_texture_rectangle = true; ctx->Extensions.EXT_texture_compression_s3tc = true; ctx->Extensions.ANGLE_texture_compression_dxt = true; /* GL constants. */ ctx->Const.MaxTextureCoordUnits = NV20_TEXTURE_UNITS; ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxTextureImageUnits = NV20_TEXTURE_UNITS; ctx->Const.MaxTextureUnits = NV20_TEXTURE_UNITS; ctx->Const.MaxTextureMaxAnisotropy = 8; ctx->Const.MaxTextureLodBias = 15; ctx->Driver.Clear = nv20_clear; /* 2D engine. */ ret = nv04_surface_init(ctx); if (!ret) goto fail; /* 3D engine. */ if (context_chipset(ctx) >= 0x25) kelvin_class = NV25_3D_CLASS; else kelvin_class = NV20_3D_CLASS; ret = nouveau_object_new(context_chan(ctx), 0xbeef0001, kelvin_class, NULL, 0, &nctx->hw.eng3d); if (ret) goto fail; nv20_hwctx_init(ctx); nv20_vbo_init(ctx); nv20_swtnl_init(ctx); return ctx; fail: nv20_context_destroy(ctx); return NULL; }
static struct gl_context * nv04_context_create(struct nouveau_screen *screen, const struct gl_config *visual, struct gl_context *share_ctx) { struct nv04_context *nctx; struct nouveau_hw_state *hw; struct gl_context *ctx; int ret; nctx = CALLOC_STRUCT(nv04_context); if (!nctx) return NULL; ctx = &nctx->base.base; hw = &nctx->base.hw; if (!nouveau_context_init(ctx, screen, visual, share_ctx)) goto fail; /* GL constants. */ ctx->Const.MaxTextureLevels = 11; ctx->Const.MaxTextureCoordUnits = NV04_TEXTURE_UNITS; ctx->Const.MaxTextureImageUnits = NV04_TEXTURE_UNITS; ctx->Const.MaxTextureUnits = NV04_TEXTURE_UNITS; ctx->Const.MaxTextureMaxAnisotropy = 2; ctx->Const.MaxTextureLodBias = 15; /* 2D engine. */ ret = nv04_surface_init(ctx); if (!ret) goto fail; /* 3D engine. */ ret = nouveau_object_new(context_chan(ctx), 0xbeef0001, NV04_TEXTURED_TRIANGLE_CLASS, NULL, 0, &hw->eng3d); if (ret) goto fail; ret = nouveau_object_new(context_chan(ctx), 0xbeef0002, NV04_MULTITEX_TRIANGLE_CLASS, NULL, 0, &hw->eng3dm); if (ret) goto fail; ret = nouveau_object_new(context_chan(ctx), 0xbeef0003, NV04_SURFACE_3D_CLASS, NULL, 0, &hw->surf3d); if (ret) goto fail; init_dummy_texture(ctx); nv04_hwctx_init(ctx); nv04_render_init(ctx); return ctx; fail: nv04_context_destroy(ctx); return NULL; }