From: Ian Romanick <ian.d.roman...@intel.com> Specifically, the following extensions are enabled:
GL_ARB_vertex_program GL_EXT_gpu_program_paramaters GL_NV_vertex_program GL_NV_vertex_program1_1 In addition, ctx->Const.MaxCombinedTextureImageUnits is set. This change was kept separate from the other drivers because the Radeon driver has a hardware TNL mode. Additional code was needed to detect enabling a vertex program and fallback to software TNL. No piglit regressions were seen with this patch. The only vertex program related test that fails uniquely on this driver is all_state-01.txt. This test fails because it doesn't check whether GL_ARB_point_parameters is supported, and the driver does not support it. Cc: Alex Deucher <alexdeuc...@gmail.com> Cc: Dave Airlie <airl...@redhat.com> --- .../drivers/dri/radeon/radeon_common_context.h | 1 + src/mesa/drivers/dri/radeon/radeon_context.c | 9 ++++++++- src/mesa/drivers/dri/radeon/radeon_state.c | 10 ++++++++++ 3 files changed, 19 insertions(+), 1 deletions(-) diff --git a/src/mesa/drivers/dri/radeon/radeon_common_context.h b/src/mesa/drivers/dri/radeon/radeon_common_context.h index 3895ab8..f46581b 100644 --- a/src/mesa/drivers/dri/radeon/radeon_common_context.h +++ b/src/mesa/drivers/dri/radeon/radeon_common_context.h @@ -63,6 +63,7 @@ typedef struct radeon_context *radeonContextPtr; #define RADEON_TCL_FALLBACK_TEXGEN_2 0x40 /* texgen, unit 2 */ #define RADEON_TCL_FALLBACK_TCL_DISABLE 0x80 /* user disable */ #define RADEON_TCL_FALLBACK_FOGCOORDSPEC 0x100 /* fogcoord, sep. spec light */ +#define RADEON_TCL_FALLBCAK_SHADER 0x200 /* vertex shader */ /* The blit width for texture uploads */ diff --git a/src/mesa/drivers/dri/radeon/radeon_context.c b/src/mesa/drivers/dri/radeon/radeon_context.c index aac45be..167e248 100644 --- a/src/mesa/drivers/dri/radeon/radeon_context.c +++ b/src/mesa/drivers/dri/radeon/radeon_context.c @@ -83,6 +83,7 @@ static const struct tnl_pipeline_stage *radeon_pipeline[] = { &_tnl_fog_coordinate_stage, &_tnl_texgen_stage, &_tnl_texture_transform_stage, + &_tnl_vertex_program_stage, &_radeon_render_stage, &_tnl_render_stage, /* FALLBACK: */ @@ -238,7 +239,9 @@ r100CreateContext( gl_api api, "texture_units"); ctx->Const.MaxTextureImageUnits = ctx->Const.MaxTextureUnits; ctx->Const.MaxTextureCoordUnits = ctx->Const.MaxTextureUnits; - ctx->Const.MaxCombinedTextureImageUnits = ctx->Const.MaxTextureUnits; + ctx->Const.MaxCombinedTextureImageUnits = + ctx->Const.MaxVertexTextureImageUnits + + ctx->Const.MaxTextureImageUnits; i = driQueryOptioni( &rmesa->radeon.optionCache, "allow_large_textures"); @@ -319,9 +322,11 @@ r100CreateContext( gl_api api, ctx->Extensions.ARB_texture_env_crossbar = true; ctx->Extensions.ARB_texture_env_dot3 = true; ctx->Extensions.ARB_texture_mirrored_repeat = true; + ctx->Extensions.ARB_vertex_program = true; ctx->Extensions.EXT_blend_logic_op = true; ctx->Extensions.EXT_blend_subtract = true; ctx->Extensions.EXT_fog_coord = true; + ctx->Extensions.EXT_gpu_program_parameters = true; ctx->Extensions.EXT_packed_depth_stencil = true; ctx->Extensions.EXT_secondary_color = true; ctx->Extensions.EXT_stencil_wrap = true; @@ -335,6 +340,8 @@ r100CreateContext( gl_api api, ctx->Extensions.ATI_texture_mirror_once = true; ctx->Extensions.MESA_ycbcr_texture = true; ctx->Extensions.NV_blend_square = true; + ctx->Extensions.NV_vertex_program = true; + ctx->Extensions.NV_vertex_program1_1 = true; #if FEATURE_OES_EGL_image ctx->Extensions.OES_EGL_image = true; #endif diff --git a/src/mesa/drivers/dri/radeon/radeon_state.c b/src/mesa/drivers/dri/radeon/radeon_state.c index a93e618..b52565d 100644 --- a/src/mesa/drivers/dri/radeon/radeon_state.c +++ b/src/mesa/drivers/dri/radeon/radeon_state.c @@ -2242,6 +2242,15 @@ static void radeonPolygonStipple( struct gl_context *ctx, const GLubyte *mask ) } +static void radeonBindProgram(struct gl_context *ctx, GLenum target, + struct gl_program *prog) +{ + (void) target; + assert(target == GL_VERTEX_PROGRAM_ARB); + TCL_FALLBACK(ctx, RADEON_TCL_FALLBCAK_SHADER, (prog != NULL)); +} + + /* Initialize the driver's state functions. * Many of the ctx->Driver functions might have been initialized to * software defaults in the earlier _mesa_init_driver_functions() call. @@ -2258,6 +2267,7 @@ void radeonInitStateFuncs( struct gl_context *ctx , GLboolean dri2 ) if (dri2) ctx->Driver.ReadPixels = radeonReadPixels; + ctx->Driver.BindProgram = radeonBindProgram; ctx->Driver.AlphaFunc = radeonAlphaFunc; ctx->Driver.BlendEquationSeparate = radeonBlendEquationSeparate; ctx->Driver.BlendFuncSeparate = radeonBlendFuncSeparate; -- 1.7.4.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev