d3d12: Update max input, output, and varying caps

The simple-varyings piglit test attempts to use GL_MAX_VARYING_FLOATS
varyings, PLUS one additional vector for position (which is not used
as input to the PS). "Reserve" that additional position vector by
removing it from the max varyings and max PS inputs.

Reviewed-by: Bill Kristiansen <billkris@microsoft.com>
Reviewed-By: Sil Vilerino <sivileri@microsoft.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14837>
This commit is contained in:
Jesse Natalie 2022-02-01 09:30:11 -08:00 committed by Marge Bot
parent 0044e80b82
commit bcfac68ce9

View file

@ -295,7 +295,8 @@ d3d12_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
return D3D12_REQ_GS_INVOCATION_32BIT_OUTPUT_COMPONENT_LIMIT;
case PIPE_CAP_MAX_VARYINGS:
return D3D12_PS_INPUT_REGISTER_COUNT;
/* Subtract one so that implicit position can be added */
return D3D12_PS_INPUT_REGISTER_COUNT - 1;
case PIPE_CAP_NIR_COMPACT_ARRAYS:
return 1;
@ -389,18 +390,28 @@ d3d12_get_shader_param(struct pipe_screen *pscreen,
return 0;
case PIPE_SHADER_CAP_MAX_INPUTS:
return screen->max_feature_level >= D3D_FEATURE_LEVEL_10_1 ? 32 : 16;
switch (shader) {
case PIPE_SHADER_VERTEX: return D3D12_VS_INPUT_REGISTER_COUNT;
case PIPE_SHADER_FRAGMENT: return D3D12_PS_INPUT_REGISTER_COUNT;
case PIPE_SHADER_GEOMETRY: return D3D12_GS_INPUT_REGISTER_COUNT;
case PIPE_SHADER_TESS_CTRL: return D3D12_HS_CONTROL_POINT_PHASE_INPUT_REGISTER_COUNT;
case PIPE_SHADER_TESS_EVAL: return D3D12_DS_INPUT_CONTROL_POINT_REGISTER_COUNT;
case PIPE_SHADER_COMPUTE: return 0;
default: unreachable("Unexpected shader");
}
break;
case PIPE_SHADER_CAP_MAX_OUTPUTS:
if (shader == PIPE_SHADER_FRAGMENT) {
/* same as max MRTs (not sure if this is correct) */
if (screen->max_feature_level >= D3D_FEATURE_LEVEL_10_0)
return 8;
else if (screen->max_feature_level == D3D_FEATURE_LEVEL_9_3)
return 4;
return 1;
switch (shader) {
case PIPE_SHADER_VERTEX: return D3D12_VS_OUTPUT_REGISTER_COUNT;
case PIPE_SHADER_FRAGMENT: return D3D12_PS_OUTPUT_REGISTER_COUNT;
case PIPE_SHADER_GEOMETRY: return D3D12_GS_OUTPUT_REGISTER_COUNT;
case PIPE_SHADER_TESS_CTRL: return D3D12_HS_CONTROL_POINT_PHASE_OUTPUT_REGISTER_COUNT;
case PIPE_SHADER_TESS_EVAL: return D3D12_DS_OUTPUT_REGISTER_COUNT;
case PIPE_SHADER_COMPUTE: return 0;
default: unreachable("Unexpected shader");
}
return screen->max_feature_level >= D3D_FEATURE_LEVEL_10_1 ? 32 : 16;
break;
case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS:
if (screen->opts.ResourceBindingTier == D3D12_RESOURCE_BINDING_TIER_1)