[D3D12] Split the tessellation VS into indexed and adaptive

This commit is contained in:
Triang3l
2021-05-16 18:27:41 +03:00
parent 9f8a432479
commit 3a5752fcb6
35 changed files with 667 additions and 882 deletions

View File

@@ -73,7 +73,8 @@ namespace d3d12 {
#include "xenia/gpu/d3d12/shaders/dxbc/primitive_point_list_gs.h"
#include "xenia/gpu/d3d12/shaders/dxbc/primitive_quad_list_gs.h"
#include "xenia/gpu/d3d12/shaders/dxbc/primitive_rectangle_list_gs.h"
#include "xenia/gpu/d3d12/shaders/dxbc/tessellation_vs.h"
#include "xenia/gpu/d3d12/shaders/dxbc/tessellation_adaptive_vs.h"
#include "xenia/gpu/d3d12/shaders/dxbc/tessellation_indexed_vs.h"
PipelineCache::PipelineCache(D3D12CommandProcessor& command_processor,
const RegisterFile& register_file,
@@ -1841,11 +1842,16 @@ ID3D12PipelineState* PipelineCache::CreateD3D12Pipeline(
break;
}
} else {
state_desc.VS.pShaderBytecode = tessellation_vs;
state_desc.VS.BytecodeLength = sizeof(tessellation_vs);
state_desc.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_PATCH;
xenos::TessellationMode tessellation_mode = xenos::TessellationMode(
description.primitive_topology_type_or_tessellation_mode);
if (tessellation_mode == xenos::TessellationMode::kAdaptive) {
state_desc.VS.pShaderBytecode = tessellation_adaptive_vs;
state_desc.VS.BytecodeLength = sizeof(tessellation_adaptive_vs);
} else {
state_desc.VS.pShaderBytecode = tessellation_indexed_vs;
state_desc.VS.BytecodeLength = sizeof(tessellation_indexed_vs);
}
switch (tessellation_mode) {
case xenos::TessellationMode::kDiscrete:
switch (host_vertex_shader_type) {