Files
Xenia-Canary/src/xenia/gpu/shaders/discrete_triangle_1cp.hs.glsl
Herman S. 83d776fa39 [Vulkan] Add tesselation support
Pretty much just following the D3D12 implementation
2026-02-18 00:02:21 +09:00

45 lines
1.6 KiB
GLSL

/**
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2025. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
#version 460
#extension GL_GOOGLE_include_directive : require
// Tessellation control shader for discrete triangle tessellation with 1 control
// point (patch indexed).
layout(vertices = 1) out;
#include "xenos_draw.glsli"
// Input from vertex shader - vertex index as float.
layout(location = 0) in float in_index[];
// Output to tessellation evaluation shader - vertex index as float.
layout(location = 0) out float out_index[];
void main() {
// Pass through the vertex index.
out_index[gl_InvocationID] = in_index[gl_InvocationID];
// Set tessellation levels (only one invocation for 1cp).
// Xenos creates a uniform grid for triangles, but this can't be reproduced
// using the tessellator on the PC, so just use what has the closest level
// of detail.
// https://www.slideshare.net/blackdevilvikas/next-generation-graphics-programming-on-xbox-360
//
// 1.0 already added to the factor on the CPU, according to the images in
// the slides above.
float factor = xe_tessellation_factor_range.y;
gl_TessLevelOuter[0] = factor;
gl_TessLevelOuter[1] = factor;
gl_TessLevelOuter[2] = factor;
gl_TessLevelInner[0] = factor;
}