mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-23 22:00:13 +01:00
gallium: add initial support for conservative rasterization
Signed-off-by: Rhys Perry <pendingchaos02@gmail.com> Reviewed-by: Brian Paul <brianp@vmware.com> Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
parent
4580617509
commit
fffe5e2d14
21 changed files with 243 additions and 2 deletions
|
|
@ -340,3 +340,26 @@ clip_plane_enable
|
|||
If any clip distance output is written, those half-spaces for which no
|
||||
clip distance is written count as disabled; i.e. user clip planes and
|
||||
shader clip distances cannot be mixed, and clip distances take precedence.
|
||||
|
||||
conservative_raster_mode
|
||||
The conservative rasterization mode. For PIPE_CONSERVATIVE_RASTER_OFF,
|
||||
conservative rasterization is disabled. For IPE_CONSERVATIVE_RASTER_POST_SNAP
|
||||
or PIPE_CONSERVATIVE_RASTER_PRE_SNAP, conservative rasterization is nabled.
|
||||
When conservative rasterization is enabled, the polygon smooth, line mooth,
|
||||
point smooth and line stipple settings are ignored.
|
||||
With the post-snap mode, unlike the pre-snap mode, fragments are never
|
||||
generated for degenerate primitives. Degenerate primitives, when rasterized,
|
||||
are considered back-facing and the vertex attributes and depth are that of
|
||||
the provoking vertex.
|
||||
If the post-snap mode is used with an unsupported primitive, the pre-snap
|
||||
mode is used, if supported. Behavior is similar for the pre-snap mode.
|
||||
If the pre-snap mode is used, fragments are generated with respect to the primitive
|
||||
before vertex snapping.
|
||||
|
||||
conservative_raster_dilate
|
||||
The amount of dilation during conservative rasterization.
|
||||
|
||||
subpixel_precision_x
|
||||
A bias added to the horizontal subpixel precision during conservative rasterization.
|
||||
subpixel_precision_y
|
||||
A bias added to the vertical subpixel precision during conservative rasterization.
|
||||
|
|
|
|||
|
|
@ -420,6 +420,18 @@ The integer capabilities:
|
|||
by the driver, and the driver can throw assertion failures.
|
||||
* ``PIPE_CAP_PACKED_UNIFORMS``: True if the driver supports packed uniforms
|
||||
as opposed to padding to vec4s.
|
||||
* ``PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_TRIANGLES``: Whether the
|
||||
PIPE_CONSERVATIVE_RASTER_POST_SNAP mode is supported for triangles.
|
||||
* ``PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_POINTS_LINES``: Whether the
|
||||
PIPE_CONSERVATIVE_RASTER_POST_SNAP mode is supported for points and lines.
|
||||
* ``PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_TRIANGLES``: Whether the
|
||||
PIPE_CONSERVATIVE_RASTER_PRE_SNAP mode is supported for triangles.
|
||||
* ``PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_POINTS_LINES``: Whether the
|
||||
PIPE_CONSERVATIVE_RASTER_PRE_SNAP mode is supported for points and lines.
|
||||
* ``PIPE_CAP_CONSERVATIVE_RASTER_POST_DEPTH_COVERAGE``: Whether PIPE_CAP_POST_DEPTH_COVERAGE
|
||||
works with conservative rasterization.
|
||||
* ``PIPE_CAP_MAX_CONSERVATIVE_RASTER_SUBPIXEL_PRECISION_BIAS``: The maximum
|
||||
subpixel precision bias in bits during conservative rasterization.
|
||||
|
||||
|
||||
.. _pipe_capf:
|
||||
|
|
@ -437,6 +449,12 @@ The floating-point capabilities are:
|
|||
applied to anisotropically filtered textures.
|
||||
* ``PIPE_CAPF_MAX_TEXTURE_LOD_BIAS``: The maximum :term:`LOD` bias that may be applied
|
||||
to filtered textures.
|
||||
* ``PIPE_CAPF_MIN_CONSERVATIVE_RASTER_DILATE``: The minimum conservative rasterization
|
||||
dilation.
|
||||
* ``PIPE_CAPF_MAX_CONSERVATIVE_RASTER_DILATE``: The maximum conservative rasterization
|
||||
dilation.
|
||||
* ``PIPE_CAPF_CONSERVATIVE_RASTER_DILATE_GRANULARITY``: The conservative rasterization
|
||||
dilation granularity for values relative to the minimum dilation.
|
||||
|
||||
|
||||
.. _pipe_shader_cap:
|
||||
|
|
|
|||
|
|
@ -273,6 +273,12 @@ etna_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
|||
case PIPE_CAP_CONTEXT_PRIORITY_MASK:
|
||||
case PIPE_CAP_FENCE_SIGNAL:
|
||||
case PIPE_CAP_CONSTBUF0_FLAGS:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_TRIANGLES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_POINTS_LINES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_TRIANGLES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_POINTS_LINES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_DEPTH_COVERAGE:
|
||||
case PIPE_CAP_MAX_CONSERVATIVE_RASTER_SUBPIXEL_PRECISION_BIAS:
|
||||
case PIPE_CAP_PACKED_UNIFORMS:
|
||||
return 0;
|
||||
|
||||
|
|
@ -374,6 +380,10 @@ etna_screen_get_paramf(struct pipe_screen *pscreen, enum pipe_capf param)
|
|||
return 16.0f;
|
||||
case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS:
|
||||
return util_last_bit(screen->specs.max_texture_size);
|
||||
case PIPE_CAPF_MIN_CONSERVATIVE_RASTER_DILATE:
|
||||
case PIPE_CAPF_MAX_CONSERVATIVE_RASTER_DILATE:
|
||||
case PIPE_CAPF_CONSERVATIVE_RASTER_DILATE_GRANULARITY:
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
debug_printf("unknown paramf %d", param);
|
||||
|
|
|
|||
|
|
@ -340,6 +340,12 @@ fd_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
|||
case PIPE_CAP_FENCE_SIGNAL:
|
||||
case PIPE_CAP_CONSTBUF0_FLAGS:
|
||||
case PIPE_CAP_PACKED_UNIFORMS:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_TRIANGLES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_POINTS_LINES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_TRIANGLES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_POINTS_LINES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_DEPTH_COVERAGE:
|
||||
case PIPE_CAP_MAX_CONSERVATIVE_RASTER_SUBPIXEL_PRECISION_BIAS:
|
||||
return 0;
|
||||
|
||||
case PIPE_CAP_CONTEXT_PRIORITY_MASK:
|
||||
|
|
@ -479,6 +485,10 @@ fd_screen_get_paramf(struct pipe_screen *pscreen, enum pipe_capf param)
|
|||
return 16.0f;
|
||||
case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS:
|
||||
return 15.0f;
|
||||
case PIPE_CAPF_MIN_CONSERVATIVE_RASTER_DILATE:
|
||||
case PIPE_CAPF_MAX_CONSERVATIVE_RASTER_DILATE:
|
||||
case PIPE_CAPF_CONSERVATIVE_RASTER_DILATE_GRANULARITY:
|
||||
return 0.0f;
|
||||
}
|
||||
debug_printf("unknown paramf %d\n", param);
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -283,6 +283,12 @@ i915_get_param(struct pipe_screen *screen, enum pipe_cap cap)
|
|||
case PIPE_CAP_TGSI_ARRAY_COMPONENTS:
|
||||
case PIPE_CAP_POLYGON_MODE_FILL_RECTANGLE:
|
||||
case PIPE_CAP_POST_DEPTH_COVERAGE:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_TRIANGLES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_POINTS_LINES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_TRIANGLES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_POINTS_LINES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_DEPTH_COVERAGE:
|
||||
case PIPE_CAP_MAX_CONSERVATIVE_RASTER_SUBPIXEL_PRECISION_BIAS:
|
||||
return 0;
|
||||
|
||||
case PIPE_CAP_MAX_DUAL_SOURCE_RENDER_TARGETS:
|
||||
|
|
@ -435,6 +441,13 @@ i915_get_paramf(struct pipe_screen *screen, enum pipe_capf cap)
|
|||
case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS:
|
||||
return 16.0;
|
||||
|
||||
case PIPE_CAPF_MIN_CONSERVTIVE_RASTER_DILATE:
|
||||
/* fall-through */
|
||||
case PIPE_CAPF_MAX_CONSERVATIVE_RASTER_DILATE:
|
||||
/* fall-through */
|
||||
case PIPE_CAPF_CONSERVATIVE_RASTER_DILATE_GRANULARITY:
|
||||
return 0.0f;
|
||||
|
||||
default:
|
||||
debug_printf("%s: Unknown cap %u.\n", __FUNCTION__, cap);
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -362,6 +362,12 @@ llvmpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
|
|||
case PIPE_CAP_FENCE_SIGNAL:
|
||||
case PIPE_CAP_CONSTBUF0_FLAGS:
|
||||
case PIPE_CAP_PACKED_UNIFORMS:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_TRIANGLES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_POINTS_LINES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_TRIANGLES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_POINTS_LINES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_DEPTH_COVERAGE:
|
||||
case PIPE_CAP_MAX_CONSERVATIVE_RASTER_SUBPIXEL_PRECISION_BIAS:
|
||||
return 0;
|
||||
}
|
||||
/* should only get here on unhandled cases */
|
||||
|
|
@ -422,6 +428,12 @@ llvmpipe_get_paramf(struct pipe_screen *screen, enum pipe_capf param)
|
|||
return 16.0; /* not actually signficant at this time */
|
||||
case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS:
|
||||
return 16.0; /* arbitrary */
|
||||
case PIPE_CAPF_MIN_CONSERVATIVE_RASTER_DILATE:
|
||||
return 0.0;
|
||||
case PIPE_CAPF_MAX_CONSERVATIVE_RASTER_DILATE:
|
||||
return 0.0;
|
||||
case PIPE_CAPF_CONSERVATIVE_RASTER_DILATE_GRANULARITY:
|
||||
return 0.0;
|
||||
}
|
||||
/* should only get here on unhandled cases */
|
||||
debug_printf("Unexpected PIPE_CAP %d query\n", param);
|
||||
|
|
|
|||
|
|
@ -229,6 +229,12 @@ nv30_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
|||
case PIPE_CAP_FENCE_SIGNAL:
|
||||
case PIPE_CAP_CONSTBUF0_FLAGS:
|
||||
case PIPE_CAP_PACKED_UNIFORMS:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_TRIANGLES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_POINTS_LINES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_TRIANGLES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_POINTS_LINES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_DEPTH_COVERAGE:
|
||||
case PIPE_CAP_MAX_CONSERVATIVE_RASTER_SUBPIXEL_PRECISION_BIAS:
|
||||
return 0;
|
||||
|
||||
case PIPE_CAP_VENDOR_ID:
|
||||
|
|
@ -270,6 +276,10 @@ nv30_screen_get_paramf(struct pipe_screen *pscreen, enum pipe_capf param)
|
|||
return (eng3d->oclass >= NV40_3D_CLASS) ? 16.0 : 8.0;
|
||||
case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS:
|
||||
return 15.0;
|
||||
case PIPE_CAPF_MIN_CONSERVATIVE_RASTER_DILATE:
|
||||
case PIPE_CAPF_MAX_CONSERVATIVE_RASTER_DILATE:
|
||||
case PIPE_CAPF_CONSERVATIVE_RASTER_DILATE_GRANULARITY:
|
||||
return 0.0;
|
||||
default:
|
||||
debug_printf("unknown paramf %d\n", param);
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -281,6 +281,12 @@ nv50_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
|||
case PIPE_CAP_FENCE_SIGNAL:
|
||||
case PIPE_CAP_CONSTBUF0_FLAGS:
|
||||
case PIPE_CAP_PACKED_UNIFORMS:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_TRIANGLES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_POINTS_LINES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_TRIANGLES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_POINTS_LINES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_DEPTH_COVERAGE:
|
||||
case PIPE_CAP_MAX_CONSERVATIVE_RASTER_SUBPIXEL_PRECISION_BIAS:
|
||||
return 0;
|
||||
|
||||
case PIPE_CAP_VENDOR_ID:
|
||||
|
|
@ -398,6 +404,10 @@ nv50_screen_get_paramf(struct pipe_screen *pscreen, enum pipe_capf param)
|
|||
return 16.0f;
|
||||
case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS:
|
||||
return 4.0f;
|
||||
case PIPE_CAPF_MIN_CONSERVATIVE_RASTER_DILATE:
|
||||
case PIPE_CAPF_MAX_CONSERVATIVE_RASTER_DILATE:
|
||||
case PIPE_CAPF_CONSERVATIVE_RASTER_DILATE_GRANULARITY:
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
NOUVEAU_ERR("unknown PIPE_CAPF %d\n", param);
|
||||
|
|
|
|||
|
|
@ -309,6 +309,12 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
|||
case PIPE_CAP_FENCE_SIGNAL:
|
||||
case PIPE_CAP_CONSTBUF0_FLAGS:
|
||||
case PIPE_CAP_PACKED_UNIFORMS:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_TRIANGLES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_POINTS_LINES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_TRIANGLES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_POINTS_LINES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_DEPTH_COVERAGE:
|
||||
case PIPE_CAP_MAX_CONSERVATIVE_RASTER_SUBPIXEL_PRECISION_BIAS:
|
||||
return 0;
|
||||
|
||||
case PIPE_CAP_VENDOR_ID:
|
||||
|
|
@ -450,6 +456,10 @@ nvc0_screen_get_paramf(struct pipe_screen *pscreen, enum pipe_capf param)
|
|||
return 16.0f;
|
||||
case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS:
|
||||
return 15.0f;
|
||||
case PIPE_CAPF_MIN_CONSERVATIVE_RASTER_DILATE:
|
||||
case PIPE_CAPF_MAX_CONSERVATIVE_RASTER_DILATE:
|
||||
case PIPE_CAPF_CONSERVATIVE_RASTER_DILATE_GRANULARITY:
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
NOUVEAU_ERR("unknown PIPE_CAPF %d\n", param);
|
||||
|
|
|
|||
|
|
@ -251,6 +251,12 @@ static int r300_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
|
|||
case PIPE_CAP_FENCE_SIGNAL:
|
||||
case PIPE_CAP_CONSTBUF0_FLAGS:
|
||||
case PIPE_CAP_PACKED_UNIFORMS:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_TRIANGLES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_POINTS_LINES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_TRIANGLES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_POINTS_LINES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_DEPTH_COVERAGE:
|
||||
case PIPE_CAP_MAX_CONSERVATIVE_RASTER_SUBPIXEL_PRECISION_BIAS:
|
||||
return 0;
|
||||
|
||||
/* SWTCL-only features. */
|
||||
|
|
@ -475,6 +481,10 @@ static float r300_get_paramf(struct pipe_screen* pscreen,
|
|||
return 16.0f;
|
||||
case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS:
|
||||
return 16.0f;
|
||||
case PIPE_CAPF_MIN_CONSERVATIVE_RASTER_DILATE:
|
||||
case PIPE_CAPF_MAX_CONSERVATIVE_RASTER_DILATE:
|
||||
case PIPE_CAPF_CONSERVATIVE_RASTER_DILATE_GRANULARITY:
|
||||
return 0.0f;
|
||||
default:
|
||||
debug_printf("r300: Warning: Unknown CAP %d in get_paramf.\n",
|
||||
param);
|
||||
|
|
|
|||
|
|
@ -415,6 +415,12 @@ static int r600_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
|
|||
case PIPE_CAP_FENCE_SIGNAL:
|
||||
case PIPE_CAP_CONSTBUF0_FLAGS:
|
||||
case PIPE_CAP_PACKED_UNIFORMS:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_TRIANGLES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_POINTS_LINES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_TRIANGLES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_POINTS_LINES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_DEPTH_COVERAGE:
|
||||
case PIPE_CAP_MAX_CONSERVATIVE_RASTER_SUBPIXEL_PRECISION_BIAS:
|
||||
return 0;
|
||||
|
||||
case PIPE_CAP_DOUBLES:
|
||||
|
|
|
|||
|
|
@ -910,6 +910,10 @@ static float r600_get_paramf(struct pipe_screen* pscreen,
|
|||
return 16.0f;
|
||||
case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS:
|
||||
return 16.0f;
|
||||
case PIPE_CAPF_MIN_CONSERVATIVE_RASTER_DILATE:
|
||||
case PIPE_CAPF_MAX_CONSERVATIVE_RASTER_DILATE:
|
||||
case PIPE_CAPF_CONSERVATIVE_RASTER_DILATE_GRANULARITY:
|
||||
return 0.0f;
|
||||
}
|
||||
return 0.0f;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -277,6 +277,12 @@ static int si_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
|||
case PIPE_CAP_TILE_RASTER_ORDER:
|
||||
case PIPE_CAP_MAX_COMBINED_SHADER_OUTPUT_RESOURCES:
|
||||
case PIPE_CAP_CONTEXT_PRIORITY_MASK:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_TRIANGLES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_POINTS_LINES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_TRIANGLES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_POINTS_LINES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_DEPTH_COVERAGE:
|
||||
case PIPE_CAP_MAX_CONSERVATIVE_RASTER_SUBPIXEL_PRECISION_BIAS:
|
||||
return 0;
|
||||
|
||||
case PIPE_CAP_FENCE_SIGNAL:
|
||||
|
|
@ -376,6 +382,10 @@ static float si_get_paramf(struct pipe_screen* pscreen, enum pipe_capf param)
|
|||
return 16.0f;
|
||||
case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS:
|
||||
return 16.0f;
|
||||
case PIPE_CAPF_MIN_CONSERVATIVE_RASTER_DILATE:
|
||||
case PIPE_CAPF_MAX_CONSERVATIVE_RASTER_DILATE:
|
||||
case PIPE_CAPF_CONSERVATIVE_RASTER_DILATE_GRANULARITY:
|
||||
return 0.0f;
|
||||
}
|
||||
return 0.0f;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -314,6 +314,12 @@ softpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
|
|||
case PIPE_CAP_FENCE_SIGNAL:
|
||||
case PIPE_CAP_CONSTBUF0_FLAGS:
|
||||
case PIPE_CAP_PACKED_UNIFORMS:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_TRIANGLES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_POINTS_LINES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_TRIANGLES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_POINTS_LINES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_DEPTH_COVERAGE:
|
||||
case PIPE_CAP_MAX_CONSERVATIVE_RASTER_SUBPIXEL_PRECISION_BIAS:
|
||||
return 0;
|
||||
case PIPE_CAP_SHADER_BUFFER_OFFSET_ALIGNMENT:
|
||||
return 4;
|
||||
|
|
@ -362,6 +368,12 @@ softpipe_get_paramf(struct pipe_screen *screen, enum pipe_capf param)
|
|||
return 16.0;
|
||||
case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS:
|
||||
return 16.0; /* arbitrary */
|
||||
case PIPE_CAPF_MIN_CONSERVATIVE_RASTER_DILATE:
|
||||
return 0.0;
|
||||
case PIPE_CAPF_MAX_CONSERVATIVE_RASTER_DILATE:
|
||||
return 0.0;
|
||||
case PIPE_CAPF_CONSERVATIVE_RASTER_DILATE_GRANULARITY:
|
||||
return 0.0;
|
||||
}
|
||||
/* should only get here on unhandled cases */
|
||||
debug_printf("Unexpected PIPE_CAPF %d query\n", param);
|
||||
|
|
|
|||
|
|
@ -167,6 +167,13 @@ svga_get_paramf(struct pipe_screen *screen, enum pipe_capf param)
|
|||
case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS:
|
||||
return 15.0;
|
||||
|
||||
case PIPE_CAPF_MIN_CONSERVATIVE_RASTER_DILATE:
|
||||
/* fall-through */
|
||||
case PIPE_CAPF_MAX_CONSERVATIVE_RASTER_DILATE:
|
||||
/* fall-through */
|
||||
case PIPE_CAPF_CONSERVATIVE_RASTER_DILATE_GRANULARITY:
|
||||
return 0.0f;
|
||||
|
||||
}
|
||||
|
||||
debug_printf("Unexpected PIPE_CAPF_ query %u\n", param);
|
||||
|
|
@ -373,6 +380,12 @@ svga_get_param(struct pipe_screen *screen, enum pipe_cap param)
|
|||
case PIPE_CAP_PCI_DEVICE:
|
||||
case PIPE_CAP_PCI_FUNCTION:
|
||||
case PIPE_CAP_ROBUST_BUFFER_ACCESS_BEHAVIOR:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_TRIANGLES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_POINTS_LINES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_TRIANGLES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_POINTS_LINES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_DEPTH_COVERAGE:
|
||||
case PIPE_CAP_MAX_CONSERVATIVE_RASTER_SUBPIXEL_PRECISION_BIAS:
|
||||
return 0;
|
||||
case PIPE_CAP_MIN_MAP_BUFFER_ALIGNMENT:
|
||||
return 64;
|
||||
|
|
|
|||
|
|
@ -347,6 +347,12 @@ swr_get_param(struct pipe_screen *screen, enum pipe_cap param)
|
|||
case PIPE_CAP_FENCE_SIGNAL:
|
||||
case PIPE_CAP_CONSTBUF0_FLAGS:
|
||||
case PIPE_CAP_PACKED_UNIFORMS:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_TRIANGLES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_POINTS_LINES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_TRIANGLES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_POINTS_LINES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_DEPTH_COVERAGE:
|
||||
case PIPE_CAP_MAX_CONSERVATIVE_RASTER_SUBPIXEL_PRECISION_BIAS:
|
||||
return 0;
|
||||
|
||||
case PIPE_CAP_VENDOR_ID:
|
||||
|
|
@ -400,6 +406,10 @@ swr_get_paramf(struct pipe_screen *screen, enum pipe_capf param)
|
|||
return 0.0;
|
||||
case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS:
|
||||
return 16.0; /* arbitrary */
|
||||
case PIPE_CAPF_MIN_CONSERVATIVE_RASTER_DILATE:
|
||||
case PIPE_CAPF_MAX_CONSERVATIVE_RASTER_DILATE:
|
||||
case PIPE_CAPF_CONSERVATIVE_RASTER_DILATE_GRANULARITY:
|
||||
return 0.0f;
|
||||
}
|
||||
/* should only get here on unhandled cases */
|
||||
debug_printf("Unexpected PIPE_CAPF %d query\n", param);
|
||||
|
|
|
|||
|
|
@ -288,6 +288,12 @@ vc4_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
|||
case PIPE_CAP_CONTEXT_PRIORITY_MASK:
|
||||
case PIPE_CAP_FENCE_SIGNAL:
|
||||
case PIPE_CAP_CONSTBUF0_FLAGS:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_TRIANGLES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_POINTS_LINES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_TRIANGLES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_POINTS_LINES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_DEPTH_COVERAGE:
|
||||
case PIPE_CAP_MAX_CONSERVATIVE_RASTER_SUBPIXEL_PRECISION_BIAS:
|
||||
case PIPE_CAP_PACKED_UNIFORMS:
|
||||
return 0;
|
||||
|
||||
|
|
@ -375,6 +381,11 @@ vc4_screen_get_paramf(struct pipe_screen *pscreen, enum pipe_capf param)
|
|||
return 0.0f;
|
||||
case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS:
|
||||
return 0.0f;
|
||||
|
||||
case PIPE_CAPF_MIN_CONSERVATIVE_RASTER_DILATE:
|
||||
case PIPE_CAPF_MAX_CONSERVATIVE_RASTER_DILATE:
|
||||
case PIPE_CAPF_CONSERVATIVE_RASTER_DILATE_GRANULARITY:
|
||||
return 0.0f;
|
||||
default:
|
||||
fprintf(stderr, "unknown paramf %d\n", param);
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -260,6 +260,12 @@ vc5_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
|||
case PIPE_CAP_MAX_COMBINED_SHADER_OUTPUT_RESOURCES:
|
||||
case PIPE_CAP_CONTEXT_PRIORITY_MASK:
|
||||
case PIPE_CAP_CONSTBUF0_FLAGS:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_TRIANGLES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_POINTS_LINES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_TRIANGLES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_POINTS_LINES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_DEPTH_COVERAGE:
|
||||
case PIPE_CAP_MAX_CONSERVATIVE_RASTER_SUBPIXEL_PRECISION_BIAS:
|
||||
case PIPE_CAP_PACKED_UNIFORMS:
|
||||
return 0;
|
||||
|
||||
|
|
@ -333,6 +339,11 @@ vc5_screen_get_paramf(struct pipe_screen *pscreen, enum pipe_capf param)
|
|||
return 0.0f;
|
||||
case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS:
|
||||
return 16.0f;
|
||||
|
||||
case PIPE_CAPF_MIN_CONSERVATIVE_RASTER_DILATE:
|
||||
case PIPE_CAPF_MAX_CONSERVATIVE_RASTER_DILATE:
|
||||
case PIPE_CAPF_CONSERVATIVE_RASTER_DILATE_GRANULARITY:
|
||||
return 0.0f;
|
||||
default:
|
||||
fprintf(stderr, "unknown paramf %d\n", param);
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -276,6 +276,12 @@ virgl_get_param(struct pipe_screen *screen, enum pipe_cap param)
|
|||
case PIPE_CAP_FENCE_SIGNAL:
|
||||
case PIPE_CAP_CONSTBUF0_FLAGS:
|
||||
case PIPE_CAP_PACKED_UNIFORMS:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_TRIANGLES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_POINTS_LINES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_TRIANGLES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_POINTS_LINES:
|
||||
case PIPE_CAP_CONSERVATIVE_RASTER_POST_DEPTH_COVERAGE:
|
||||
case PIPE_CAP_MAX_CONSERVATIVE_RASTER_SUBPIXEL_PRECISION_BIAS:
|
||||
return 0;
|
||||
case PIPE_CAP_VENDOR_ID:
|
||||
return 0x1af4;
|
||||
|
|
@ -373,6 +379,10 @@ virgl_get_paramf(struct pipe_screen *screen, enum pipe_capf param)
|
|||
return 16.0;
|
||||
case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS:
|
||||
return vscreen->caps.caps.v2.max_texture_lod_bias;
|
||||
case PIPE_CAPF_MIN_CONSERVATIVE_RASTER_DILATE:
|
||||
case PIPE_CAPF_MAX_CONSERVATIVE_RASTER_DILATE:
|
||||
case PIPE_CAPF_CONSERVATIVE_RASTER_DILATE_GRANULARITY:
|
||||
return 0.0f;
|
||||
}
|
||||
/* should only get here on unhandled cases */
|
||||
debug_printf("Unexpected PIPE_CAPF %d query\n", param);
|
||||
|
|
|
|||
|
|
@ -606,6 +606,17 @@ enum pipe_reset_status
|
|||
};
|
||||
|
||||
|
||||
/**
|
||||
* Conservative rasterization modes.
|
||||
*/
|
||||
enum pipe_conservative_raster_mode
|
||||
{
|
||||
PIPE_CONSERVATIVE_RASTER_OFF,
|
||||
PIPE_CONSERVATIVE_RASTER_POST_SNAP,
|
||||
PIPE_CONSERVATIVE_RASTER_PRE_SNAP,
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* resource_get_handle flags.
|
||||
*/
|
||||
|
|
@ -795,6 +806,12 @@ enum pipe_cap
|
|||
PIPE_CAP_FENCE_SIGNAL,
|
||||
PIPE_CAP_CONSTBUF0_FLAGS,
|
||||
PIPE_CAP_PACKED_UNIFORMS,
|
||||
PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_TRIANGLES,
|
||||
PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_POINTS_LINES,
|
||||
PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_TRIANGLES,
|
||||
PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_POINTS_LINES,
|
||||
PIPE_CAP_MAX_CONSERVATIVE_RASTER_SUBPIXEL_PRECISION_BIAS,
|
||||
PIPE_CAP_CONSERVATIVE_RASTER_POST_DEPTH_COVERAGE,
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -834,6 +851,9 @@ enum pipe_capf
|
|||
PIPE_CAPF_MAX_POINT_WIDTH_AA,
|
||||
PIPE_CAPF_MAX_TEXTURE_ANISOTROPY,
|
||||
PIPE_CAPF_MAX_TEXTURE_LOD_BIAS,
|
||||
PIPE_CAPF_MIN_CONSERVATIVE_RASTER_DILATE,
|
||||
PIPE_CAPF_MAX_CONSERVATIVE_RASTER_DILATE,
|
||||
PIPE_CAPF_CONSERVATIVE_RASTER_DILATE_GRANULARITY,
|
||||
};
|
||||
|
||||
/** Shader caps not specific to any single stage */
|
||||
|
|
|
|||
|
|
@ -113,6 +113,7 @@ struct pipe_rasterizer_state
|
|||
unsigned line_smooth:1;
|
||||
unsigned line_stipple_enable:1;
|
||||
unsigned line_last_pixel:1;
|
||||
unsigned conservative_raster_mode:2; /**< PIPE_CONSERVATIVE_RASTER_x */
|
||||
|
||||
/**
|
||||
* Use the first vertex of a primitive as the provoking vertex for
|
||||
|
|
@ -123,6 +124,12 @@ struct pipe_rasterizer_state
|
|||
unsigned half_pixel_center:1;
|
||||
unsigned bottom_edge_rule:1;
|
||||
|
||||
/*
|
||||
* Conservative rasterization subpixel precision bias in bits
|
||||
*/
|
||||
unsigned subpixel_precision_x:4;
|
||||
unsigned subpixel_precision_y:4;
|
||||
|
||||
/**
|
||||
* When true, rasterization is disabled and no pixels are written.
|
||||
* This only makes sense with the Stream Out functionality.
|
||||
|
|
@ -186,6 +193,7 @@ struct pipe_rasterizer_state
|
|||
float offset_units;
|
||||
float offset_scale;
|
||||
float offset_clamp;
|
||||
float conservative_raster_dilate;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue