i915: Add optional support for ARB_fragment_shader under a driconf option.
Other vendors have enabled ARB_fragment_shader as part of OpenGL 2.0 enablement even on hardware like the 915 with no dynamic branching or dFdx/dFdy support. But for now we'll leave it disabled because we don't do any flattening of ifs or loops, which is rather restrictive. This support is not complete, and may be unstable depending on your shaders. It passes 10/15 of the piglit glsl tests, but hangs on glean glsl1.
This commit is contained in:
@@ -160,6 +160,7 @@ src_vector(struct i915_fragment_program *p,
|
|||||||
case PROGRAM_CONSTANT:
|
case PROGRAM_CONSTANT:
|
||||||
case PROGRAM_STATE_VAR:
|
case PROGRAM_STATE_VAR:
|
||||||
case PROGRAM_NAMED_PARAM:
|
case PROGRAM_NAMED_PARAM:
|
||||||
|
case PROGRAM_UNIFORM:
|
||||||
src =
|
src =
|
||||||
i915_emit_param4fv(p,
|
i915_emit_param4fv(p,
|
||||||
program->Base.Parameters->ParameterValues[source->
|
program->Base.Parameters->ParameterValues[source->
|
||||||
|
@@ -293,7 +293,6 @@ struct intel_context
|
|||||||
|
|
||||||
GLboolean use_texture_tiling;
|
GLboolean use_texture_tiling;
|
||||||
GLboolean use_early_z;
|
GLboolean use_early_z;
|
||||||
|
|
||||||
drm_clip_rect_t fboRect; /**< cliprect for FBO rendering */
|
drm_clip_rect_t fboRect; /**< cliprect for FBO rendering */
|
||||||
|
|
||||||
int perf_boxes;
|
int perf_boxes;
|
||||||
|
@@ -182,6 +182,10 @@ static const struct dri_extension ttm_extensions[] = {
|
|||||||
{ NULL, NULL }
|
{ NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const struct dri_extension fragment_shader_extensions[] = {
|
||||||
|
{ "GL_ARB_fragment_shader", NULL },
|
||||||
|
{ NULL, NULL }
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initializes potential list of extensions if ctx == NULL, or actually enables
|
* Initializes potential list of extensions if ctx == NULL, or actually enables
|
||||||
@@ -205,6 +209,10 @@ intelInitExtensions(GLcontext *ctx, GLboolean enable_imaging)
|
|||||||
driInitExtensions(ctx, brw_extensions, GL_FALSE);
|
driInitExtensions(ctx, brw_extensions, GL_FALSE);
|
||||||
|
|
||||||
if (intel == NULL || IS_915(intel->intelScreen->deviceID)
|
if (intel == NULL || IS_915(intel->intelScreen->deviceID)
|
||||||
|| IS_945(intel->intelScreen->deviceID))
|
|| IS_945(intel->intelScreen->deviceID)) {
|
||||||
driInitExtensions(ctx, i915_extensions, GL_FALSE);
|
driInitExtensions(ctx, i915_extensions, GL_FALSE);
|
||||||
|
|
||||||
|
if (intel == NULL || driQueryOptionb(&intel->optionCache, "fragment_shader"))
|
||||||
|
driInitExtensions(ctx, fragment_shader_extensions, GL_FALSE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -79,6 +79,10 @@ PUBLIC const char __driConfigOptions[] =
|
|||||||
DRI_CONF_DESC(en, "Enable early Z in classic mode (unstable, 945-only).")
|
DRI_CONF_DESC(en, "Enable early Z in classic mode (unstable, 945-only).")
|
||||||
DRI_CONF_OPT_END
|
DRI_CONF_OPT_END
|
||||||
|
|
||||||
|
DRI_CONF_OPT_BEGIN(fragment_shader, bool, false)
|
||||||
|
DRI_CONF_DESC(en, "Enable limited ARB_fragment_shader support on 915/945.")
|
||||||
|
DRI_CONF_OPT_END
|
||||||
|
|
||||||
DRI_CONF_SECTION_END
|
DRI_CONF_SECTION_END
|
||||||
DRI_CONF_SECTION_QUALITY
|
DRI_CONF_SECTION_QUALITY
|
||||||
DRI_CONF_FORCE_S3TC_ENABLE(false)
|
DRI_CONF_FORCE_S3TC_ENABLE(false)
|
||||||
@@ -91,7 +95,7 @@ PUBLIC const char __driConfigOptions[] =
|
|||||||
DRI_CONF_SECTION_END
|
DRI_CONF_SECTION_END
|
||||||
DRI_CONF_END;
|
DRI_CONF_END;
|
||||||
|
|
||||||
const GLuint __driNConfigOptions = 10;
|
const GLuint __driNConfigOptions = 11;
|
||||||
|
|
||||||
#ifdef USE_NEW_INTERFACE
|
#ifdef USE_NEW_INTERFACE
|
||||||
static PFNGLXCREATECONTEXTMODES create_context_modes = NULL;
|
static PFNGLXCREATECONTEXTMODES create_context_modes = NULL;
|
||||||
|
Reference in New Issue
Block a user