[GPU] Primitive processor with Vulkan 1.0 base cases, 24-bit indices and clamping
This commit is contained in:
@@ -34,6 +34,50 @@ namespace draw_util {
|
||||
// for use with the top-left rasterization rule later.
|
||||
int32_t FloatToD3D11Fixed16p8(float f32);
|
||||
|
||||
// Polygonal primitive types (not including points and lines) are rasterized as
|
||||
// triangles, have front and back faces, and also support face culling and fill
|
||||
// modes (polymode_front_ptype, polymode_back_ptype). Other primitive types are
|
||||
// always "front" (but don't support front face and back face culling, according
|
||||
// to OpenGL and Vulkan specifications - even if glCullFace is
|
||||
// GL_FRONT_AND_BACK, points and lines are still drawn), and may in some cases
|
||||
// use the "para" registers instead of "front" or "back" (for "parallelogram" -
|
||||
// like poly_offset_para_enable).
|
||||
constexpr bool IsPrimitivePolygonal(bool vgt_output_path_is_tessellation_enable,
|
||||
xenos::PrimitiveType type) {
|
||||
if (vgt_output_path_is_tessellation_enable &&
|
||||
(type == xenos::PrimitiveType::kTrianglePatch ||
|
||||
type == xenos::PrimitiveType::kQuadPatch)) {
|
||||
// For patch primitive types, the major mode is always explicit, so just
|
||||
// checking if VGT_OUTPUT_PATH_CNTL::path_select is kTessellationEnable is
|
||||
// enough.
|
||||
return true;
|
||||
}
|
||||
switch (type) {
|
||||
case xenos::PrimitiveType::kTriangleList:
|
||||
case xenos::PrimitiveType::kTriangleFan:
|
||||
case xenos::PrimitiveType::kTriangleStrip:
|
||||
case xenos::PrimitiveType::kTriangleWithWFlags:
|
||||
case xenos::PrimitiveType::kQuadList:
|
||||
case xenos::PrimitiveType::kQuadStrip:
|
||||
case xenos::PrimitiveType::kPolygon:
|
||||
return true;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
// TODO(Triang3l): Investigate how kRectangleList should be treated - possibly
|
||||
// actually drawn as two polygons on the console, however, the current
|
||||
// geometry shader doesn't care about the winding order - allowing backface
|
||||
// culling for rectangles currently breaks Gears of War 2.
|
||||
return false;
|
||||
}
|
||||
|
||||
inline bool IsPrimitivePolygonal(const RegisterFile& regs) {
|
||||
return IsPrimitivePolygonal(
|
||||
regs.Get<reg::VGT_OUTPUT_PATH_CNTL>().path_select ==
|
||||
xenos::VGTOutputPath::kTessellationEnable,
|
||||
regs.Get<reg::VGT_DRAW_INITIATOR>().prim_type);
|
||||
}
|
||||
|
||||
// Whether with the current state, any samples to rasterize (for any reason, not
|
||||
// only to write something to a render target, but also to do sample counting or
|
||||
// pixel shader memexport) can be generated. Finally dropping draw calls can
|
||||
|
||||
Reference in New Issue
Block a user