mesa: Implement glGet*(GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED).
Technically, this was introduced with GL 4.4. However, I believe it was intended to be retroactive. As far as I know, AMD has never supported primitive restart with patches, while NVidia and Intel do. This necessitated the need for a query which would allow applications to figure out whether this was usable or not. I decided to expose it everywhere ARB_tessellation_shader is exposed. (It's also in both OES and EXT_tessellation_shader.) Enable this for i965 and Gallium drivers which expose the capability. v2: Fix a bug in the state_tracker code (caught by Ilia Mirkin). Bugzilla: https://cvs.khronos.org/bugzilla/show_bug.cgi?id=10364 Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu> Reviewed-by: Marek Olšák <marek.olsak@amd.com> Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
parent
70048eb1e3
commit
1c1873b93b
|
@ -48,6 +48,7 @@
|
||||||
<enum value="0x8E88" name="TESS_CONTROL_SHADER"/>
|
<enum value="0x8E88" name="TESS_CONTROL_SHADER"/>
|
||||||
<enum value="0x8E89" name="MAX_TESS_CONTROL_UNIFORM_BLOCKS"/>
|
<enum value="0x8E89" name="MAX_TESS_CONTROL_UNIFORM_BLOCKS"/>
|
||||||
<enum value="0x8E8A" name="MAX_TESS_EVALUATION_UNIFORM_BLOCKS"/>
|
<enum value="0x8E8A" name="MAX_TESS_EVALUATION_UNIFORM_BLOCKS"/>
|
||||||
|
<enum value="0x8221" name="PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED"/>
|
||||||
|
|
||||||
<function name="PatchParameteri">
|
<function name="PatchParameteri">
|
||||||
<param name="pname" type="GLenum"/>
|
<param name="pname" type="GLenum"/>
|
||||||
|
|
|
@ -565,6 +565,7 @@ brw_initialize_context_constants(struct brw_context *brw)
|
||||||
ctx->Const.MaxClipPlanes = 8;
|
ctx->Const.MaxClipPlanes = 8;
|
||||||
|
|
||||||
ctx->Const.LowerTessLevel = true;
|
ctx->Const.LowerTessLevel = true;
|
||||||
|
ctx->Const.PrimitiveRestartForPatches = true;
|
||||||
|
|
||||||
ctx->Const.Program[MESA_SHADER_VERTEX].MaxNativeInstructions = 16 * 1024;
|
ctx->Const.Program[MESA_SHADER_VERTEX].MaxNativeInstructions = 16 * 1024;
|
||||||
ctx->Const.Program[MESA_SHADER_VERTEX].MaxAluInstructions = 0;
|
ctx->Const.Program[MESA_SHADER_VERTEX].MaxAluInstructions = 0;
|
||||||
|
|
|
@ -725,6 +725,7 @@ _mesa_init_constants(struct gl_constants *consts, gl_api api)
|
||||||
consts->Program[MESA_SHADER_TESS_EVAL].MaxTextureImageUnits = MAX_TEXTURE_IMAGE_UNITS;
|
consts->Program[MESA_SHADER_TESS_EVAL].MaxTextureImageUnits = MAX_TEXTURE_IMAGE_UNITS;
|
||||||
consts->MaxTessPatchComponents = MAX_TESS_PATCH_COMPONENTS;
|
consts->MaxTessPatchComponents = MAX_TESS_PATCH_COMPONENTS;
|
||||||
consts->MaxTessControlTotalOutputComponents = MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS;
|
consts->MaxTessControlTotalOutputComponents = MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS;
|
||||||
|
consts->PrimitiveRestartForPatches = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -912,6 +912,7 @@ descriptor=[
|
||||||
[ "MAX_TESS_EVALUATION_UNIFORM_BLOCKS", "CONTEXT_INT(Const.Program[MESA_SHADER_TESS_EVAL].MaxUniformBlocks), extra_ARB_tessellation_shader" ],
|
[ "MAX_TESS_EVALUATION_UNIFORM_BLOCKS", "CONTEXT_INT(Const.Program[MESA_SHADER_TESS_EVAL].MaxUniformBlocks), extra_ARB_tessellation_shader" ],
|
||||||
[ "MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS", "CONTEXT_INT(Const.Program[MESA_SHADER_TESS_CTRL].MaxCombinedUniformComponents), extra_ARB_tessellation_shader" ],
|
[ "MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS", "CONTEXT_INT(Const.Program[MESA_SHADER_TESS_CTRL].MaxCombinedUniformComponents), extra_ARB_tessellation_shader" ],
|
||||||
[ "MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS", "CONTEXT_INT(Const.Program[MESA_SHADER_TESS_EVAL].MaxCombinedUniformComponents), extra_ARB_tessellation_shader" ],
|
[ "MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS", "CONTEXT_INT(Const.Program[MESA_SHADER_TESS_EVAL].MaxCombinedUniformComponents), extra_ARB_tessellation_shader" ],
|
||||||
|
[ "PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED", "CONTEXT_BOOL(Const.PrimitiveRestartForPatches), extra_ARB_tessellation_shader" ],
|
||||||
# Dependencies on GL_ARB_tessellation_shader
|
# Dependencies on GL_ARB_tessellation_shader
|
||||||
[ "MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS", "CONTEXT_INT(Const.Program[MESA_SHADER_TESS_CTRL].MaxAtomicBuffers), extra_ARB_shader_atomic_counters_and_tessellation" ],
|
[ "MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS", "CONTEXT_INT(Const.Program[MESA_SHADER_TESS_CTRL].MaxAtomicBuffers), extra_ARB_shader_atomic_counters_and_tessellation" ],
|
||||||
[ "MAX_TESS_CONTROL_ATOMIC_COUNTERS", "CONTEXT_INT(Const.Program[MESA_SHADER_TESS_CTRL].MaxAtomicCounters), extra_ARB_shader_atomic_counters_and_tessellation" ],
|
[ "MAX_TESS_CONTROL_ATOMIC_COUNTERS", "CONTEXT_INT(Const.Program[MESA_SHADER_TESS_CTRL].MaxAtomicCounters), extra_ARB_shader_atomic_counters_and_tessellation" ],
|
||||||
|
|
|
@ -3727,6 +3727,7 @@ struct gl_constants
|
||||||
GLuint MaxTessPatchComponents;
|
GLuint MaxTessPatchComponents;
|
||||||
GLuint MaxTessControlTotalOutputComponents;
|
GLuint MaxTessControlTotalOutputComponents;
|
||||||
bool LowerTessLevel; /**< Lower gl_TessLevel* from float[n] to vecn? */
|
bool LowerTessLevel; /**< Lower gl_TessLevel* from float[n] to vecn? */
|
||||||
|
bool PrimitiveRestartForPatches;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -314,6 +314,8 @@ void st_init_limits(struct pipe_screen *screen,
|
||||||
}
|
}
|
||||||
|
|
||||||
c->LowerTessLevel = true;
|
c->LowerTessLevel = true;
|
||||||
|
c->PrimitiveRestartForPatches =
|
||||||
|
screen->get_param(screen, PIPE_CAP_PRIMITIVE_RESTART_FOR_PATCHES);
|
||||||
|
|
||||||
c->MaxCombinedTextureImageUnits =
|
c->MaxCombinedTextureImageUnits =
|
||||||
_min(c->Program[MESA_SHADER_VERTEX].MaxTextureImageUnits +
|
_min(c->Program[MESA_SHADER_VERTEX].MaxTextureImageUnits +
|
||||||
|
|
Loading…
Reference in New Issue