Merge branch 'master' of https://github.com/xenia-project/xenia into canary_experimental
This commit is contained in:
commit
0c782ade8e
|
@ -2163,12 +2163,21 @@ bool D3D12CommandProcessor::IssueDraw(xenos::PrimitiveType primitive_type,
|
|||
draw_util::GetNormalizedDepthControl(regs);
|
||||
|
||||
// Shader modifications.
|
||||
uint32_t ps_param_gen_pos = UINT32_MAX;
|
||||
uint32_t interpolator_mask =
|
||||
pixel_shader ? (vertex_shader->writes_interpolators() &
|
||||
pixel_shader->GetInterpolatorInputMask(
|
||||
regs.Get<reg::SQ_PROGRAM_CNTL>(),
|
||||
regs.Get<reg::SQ_CONTEXT_MISC>(), ps_param_gen_pos))
|
||||
: 0;
|
||||
DxbcShaderTranslator::Modification vertex_shader_modification =
|
||||
pipeline_cache_->GetCurrentVertexShaderModification(
|
||||
*vertex_shader, primitive_processing_result.host_vertex_shader_type);
|
||||
*vertex_shader, primitive_processing_result.host_vertex_shader_type,
|
||||
interpolator_mask);
|
||||
DxbcShaderTranslator::Modification pixel_shader_modification =
|
||||
pixel_shader ? pipeline_cache_->GetCurrentPixelShaderModification(
|
||||
*pixel_shader, normalized_depth_control)
|
||||
*pixel_shader, interpolator_mask, ps_param_gen_pos,
|
||||
normalized_depth_control)
|
||||
: DxbcShaderTranslator::Modification(0);
|
||||
|
||||
// Set up the render targets - this may perform dispatches and draws.
|
||||
|
@ -3234,25 +3243,14 @@ void D3D12CommandProcessor::UpdateSystemConstantValues(
|
|||
if (pa_cl_vte_cntl.vtx_w0_fmt) {
|
||||
flags |= DxbcShaderTranslator::kSysFlag_WNotReciprocal;
|
||||
}
|
||||
// User clip planes (UCP_ENA_#), when not CLIP_DISABLE.
|
||||
if (!pa_cl_clip_cntl.clip_disable) {
|
||||
flags |= (pa_cl_clip_cntl.value & 0b111111)
|
||||
<< DxbcShaderTranslator::kSysFlag_UserClipPlane0_Shift;
|
||||
}
|
||||
// Whether the primitive is polygonal and SV_IsFrontFace matters.
|
||||
if (primitive_polygonal) {
|
||||
flags |= DxbcShaderTranslator::kSysFlag_PrimitivePolygonal;
|
||||
}
|
||||
// Primitive type.
|
||||
if (vgt_draw_initiator.prim_type == xenos::PrimitiveType::kPointList) {
|
||||
flags |= DxbcShaderTranslator::kSysFlag_PrimitivePoint;
|
||||
} else if (draw_util::IsPrimitiveLine(regs)) {
|
||||
if (draw_util::IsPrimitiveLine(regs)) {
|
||||
flags |= DxbcShaderTranslator::kSysFlag_PrimitiveLine;
|
||||
}
|
||||
// Primitive killing condition.
|
||||
if (pa_cl_clip_cntl.vtx_kill_or) {
|
||||
flags |= DxbcShaderTranslator::kSysFlag_KillIfAnyVertexKilled;
|
||||
}
|
||||
// Depth format.
|
||||
if (rb_depth_info.depth_format == xenos::DepthRenderTargetFormat::kD24FS8) {
|
||||
flags |= DxbcShaderTranslator::kSysFlag_DepthFloat24;
|
||||
|
@ -3332,18 +3330,24 @@ void D3D12CommandProcessor::UpdateSystemConstantValues(
|
|||
system_constants_.vertex_index_max = vgt_max_vtx_indx;
|
||||
|
||||
// User clip planes (UCP_ENA_#), when not CLIP_DISABLE.
|
||||
// The shader knows only the total count - tightly packing the user clip
|
||||
// planes that are actually used.
|
||||
if (!pa_cl_clip_cntl.clip_disable) {
|
||||
for (uint32_t i = 0; i < 6; ++i) {
|
||||
if (!(pa_cl_clip_cntl.value & (1 << i))) {
|
||||
continue;
|
||||
}
|
||||
const float* ucp = ®s[XE_GPU_REG_PA_CL_UCP_0_X + i * 4].f32;
|
||||
if (std::memcmp(system_constants_.user_clip_planes[i], ucp,
|
||||
float* user_clip_plane_write_ptr = system_constants_.user_clip_planes[0];
|
||||
uint32_t user_clip_planes_remaining = pa_cl_clip_cntl.ucp_ena;
|
||||
uint32_t user_clip_plane_index;
|
||||
while (xe::bit_scan_forward(user_clip_planes_remaining,
|
||||
&user_clip_plane_index)) {
|
||||
user_clip_planes_remaining &= ~(UINT32_C(1) << user_clip_plane_index);
|
||||
const float* user_clip_plane =
|
||||
®s[XE_GPU_REG_PA_CL_UCP_0_X + user_clip_plane_index * 4].f32;
|
||||
if (std::memcmp(user_clip_plane_write_ptr, user_clip_plane,
|
||||
4 * sizeof(float))) {
|
||||
dirty = true;
|
||||
std::memcpy(system_constants_.user_clip_planes[i], ucp,
|
||||
std::memcpy(user_clip_plane_write_ptr, user_clip_plane,
|
||||
4 * sizeof(float));
|
||||
}
|
||||
user_clip_plane_write_ptr += 4;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3394,22 +3398,6 @@ void D3D12CommandProcessor::UpdateSystemConstantValues(
|
|||
system_constants_.point_screen_diameter_to_ndc_radius[1] =
|
||||
point_screen_diameter_to_ndc_radius_y;
|
||||
|
||||
// Interpolator sampling pattern, centroid or center.
|
||||
uint32_t interpolator_sampling_pattern =
|
||||
xenos::GetInterpolatorSamplingPattern(
|
||||
rb_surface_info.msaa_samples, sq_context_misc.sc_sample_cntl,
|
||||
regs.Get<reg::SQ_INTERPOLATOR_CNTL>().sampling_pattern);
|
||||
dirty |= system_constants_.interpolator_sampling_pattern !=
|
||||
interpolator_sampling_pattern;
|
||||
system_constants_.interpolator_sampling_pattern =
|
||||
interpolator_sampling_pattern;
|
||||
|
||||
// Pixel parameter register.
|
||||
uint32_t ps_param_gen =
|
||||
sq_program_cntl.param_gen ? sq_context_misc.param_gen_pos : UINT_MAX;
|
||||
dirty |= system_constants_.ps_param_gen != ps_param_gen;
|
||||
system_constants_.ps_param_gen = ps_param_gen;
|
||||
|
||||
// Texture signedness / gamma.
|
||||
bool gamma_render_target_as_srgb =
|
||||
render_target_cache_->gamma_render_target_as_srgb();
|
||||
|
|
|
@ -643,8 +643,13 @@ void PipelineCache::InitializeShaderStorage(
|
|||
}
|
||||
GeometryShaderKey pipeline_geometry_shader_key;
|
||||
pipeline_runtime_description.geometry_shader =
|
||||
GetGeometryShaderKey(pipeline_description.geometry_shader,
|
||||
pipeline_geometry_shader_key)
|
||||
GetGeometryShaderKey(
|
||||
pipeline_description.geometry_shader,
|
||||
DxbcShaderTranslator::Modification(
|
||||
pipeline_description.vertex_shader_modification),
|
||||
DxbcShaderTranslator::Modification(
|
||||
pipeline_description.pixel_shader_modification),
|
||||
pipeline_geometry_shader_key)
|
||||
? &GetGeometryShader(pipeline_geometry_shader_key)
|
||||
: nullptr;
|
||||
pipeline_runtime_description.root_signature =
|
||||
|
@ -855,29 +860,71 @@ D3D12Shader* PipelineCache::LoadShader(xenos::ShaderType shader_type,
|
|||
|
||||
DxbcShaderTranslator::Modification
|
||||
PipelineCache::GetCurrentVertexShaderModification(
|
||||
const Shader& shader,
|
||||
Shader::HostVertexShaderType host_vertex_shader_type) const {
|
||||
const Shader& shader, Shader::HostVertexShaderType host_vertex_shader_type,
|
||||
uint32_t interpolator_mask) const {
|
||||
assert_true(shader.type() == xenos::ShaderType::kVertex);
|
||||
assert_true(shader.is_ucode_analyzed());
|
||||
const auto& regs = register_file_;
|
||||
auto sq_program_cntl = regs.Get<reg::SQ_PROGRAM_CNTL>();
|
||||
return DxbcShaderTranslator::Modification(
|
||||
|
||||
DxbcShaderTranslator::Modification modification(
|
||||
shader_translator_->GetDefaultVertexShaderModification(
|
||||
shader.GetDynamicAddressableRegisterCount(sq_program_cntl.vs_num_reg),
|
||||
shader.GetDynamicAddressableRegisterCount(
|
||||
regs.Get<reg::SQ_PROGRAM_CNTL>().vs_num_reg),
|
||||
host_vertex_shader_type));
|
||||
|
||||
modification.vertex.interpolator_mask = interpolator_mask;
|
||||
|
||||
auto pa_cl_clip_cntl = regs.Get<reg::PA_CL_CLIP_CNTL>();
|
||||
uint32_t user_clip_planes =
|
||||
pa_cl_clip_cntl.clip_disable ? 0 : pa_cl_clip_cntl.ucp_ena;
|
||||
modification.vertex.user_clip_plane_count = xe::bit_count(user_clip_planes);
|
||||
modification.vertex.user_clip_plane_cull =
|
||||
uint32_t(user_clip_planes && pa_cl_clip_cntl.ucp_cull_only_ena);
|
||||
modification.vertex.vertex_kill_and =
|
||||
uint32_t((shader.writes_point_size_edge_flag_kill_vertex() & 0b100) &&
|
||||
!pa_cl_clip_cntl.vtx_kill_or);
|
||||
|
||||
modification.vertex.output_point_size =
|
||||
uint32_t((shader.writes_point_size_edge_flag_kill_vertex() & 0b001) &&
|
||||
regs.Get<reg::VGT_DRAW_INITIATOR>().prim_type ==
|
||||
xenos::PrimitiveType::kPointList);
|
||||
|
||||
return modification;
|
||||
}
|
||||
|
||||
DxbcShaderTranslator::Modification
|
||||
PipelineCache::GetCurrentPixelShaderModification(
|
||||
const Shader& shader, reg::RB_DEPTHCONTROL normalized_depth_control) const {
|
||||
const Shader& shader, uint32_t interpolator_mask, uint32_t param_gen_pos,
|
||||
reg::RB_DEPTHCONTROL normalized_depth_control) const {
|
||||
assert_true(shader.type() == xenos::ShaderType::kPixel);
|
||||
assert_true(shader.is_ucode_analyzed());
|
||||
const auto& regs = register_file_;
|
||||
auto sq_program_cntl = regs.Get<reg::SQ_PROGRAM_CNTL>();
|
||||
|
||||
DxbcShaderTranslator::Modification modification(
|
||||
shader_translator_->GetDefaultPixelShaderModification(
|
||||
shader.GetDynamicAddressableRegisterCount(
|
||||
sq_program_cntl.ps_num_reg)));
|
||||
regs.Get<reg::SQ_PROGRAM_CNTL>().ps_num_reg)));
|
||||
|
||||
modification.pixel.interpolator_mask = interpolator_mask;
|
||||
modification.pixel.interpolators_centroid =
|
||||
interpolator_mask &
|
||||
~xenos::GetInterpolatorSamplingPattern(
|
||||
regs.Get<reg::RB_SURFACE_INFO>().msaa_samples,
|
||||
regs.Get<reg::SQ_CONTEXT_MISC>().sc_sample_cntl,
|
||||
regs.Get<reg::SQ_INTERPOLATOR_CNTL>().sampling_pattern);
|
||||
|
||||
if (param_gen_pos < xenos::kMaxInterpolators) {
|
||||
modification.pixel.param_gen_enable = 1;
|
||||
modification.pixel.param_gen_interpolator = param_gen_pos;
|
||||
modification.pixel.param_gen_point =
|
||||
uint32_t(regs.Get<reg::VGT_DRAW_INITIATOR>().prim_type ==
|
||||
xenos::PrimitiveType::kPointList);
|
||||
} else {
|
||||
modification.pixel.param_gen_enable = 0;
|
||||
modification.pixel.param_gen_interpolator = 0;
|
||||
modification.pixel.param_gen_point = 0;
|
||||
}
|
||||
|
||||
if (render_target_cache_.GetPath() ==
|
||||
RenderTargetCache::Path::kHostRenderTargets) {
|
||||
using DepthStencilMode =
|
||||
|
@ -901,6 +948,7 @@ PipelineCache::GetCurrentPixelShaderModification(
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
return modification;
|
||||
}
|
||||
|
||||
|
@ -1086,6 +1134,8 @@ bool PipelineCache::TranslateAnalyzedShader(
|
|||
host_shader_type = "patch-indexed quad domain";
|
||||
break;
|
||||
default:
|
||||
assert(modification.vertex.host_vertex_shader_type ==
|
||||
Shader::HostVertexShaderType::kVertex);
|
||||
host_shader_type = "vertex";
|
||||
}
|
||||
} else {
|
||||
|
@ -1356,7 +1406,12 @@ bool PipelineCache::GetCurrentStateDescription(
|
|||
}
|
||||
GeometryShaderKey geometry_shader_key;
|
||||
runtime_description_out.geometry_shader =
|
||||
GetGeometryShaderKey(description_out.geometry_shader, geometry_shader_key)
|
||||
GetGeometryShaderKey(
|
||||
description_out.geometry_shader,
|
||||
DxbcShaderTranslator::Modification(vertex_shader->modification()),
|
||||
DxbcShaderTranslator::Modification(
|
||||
pixel_shader ? pixel_shader->modification() : 0),
|
||||
geometry_shader_key)
|
||||
? &GetGeometryShader(geometry_shader_key)
|
||||
: nullptr;
|
||||
|
||||
|
@ -1631,20 +1686,26 @@ bool PipelineCache::GetCurrentStateDescription(
|
|||
}
|
||||
|
||||
bool PipelineCache::GetGeometryShaderKey(
|
||||
PipelineGeometryShader geometry_shader_type, GeometryShaderKey& key_out) {
|
||||
PipelineGeometryShader geometry_shader_type,
|
||||
DxbcShaderTranslator::Modification vertex_shader_modification,
|
||||
DxbcShaderTranslator::Modification pixel_shader_modification,
|
||||
GeometryShaderKey& key_out) {
|
||||
if (geometry_shader_type == PipelineGeometryShader::kNone) {
|
||||
return false;
|
||||
}
|
||||
assert_true(vertex_shader_modification.vertex.interpolator_mask ==
|
||||
pixel_shader_modification.pixel.interpolator_mask);
|
||||
GeometryShaderKey key;
|
||||
key.type = geometry_shader_type;
|
||||
// TODO(Triang3l): Make the linkage parameters depend on the real needs of the
|
||||
// vertex and the pixel shader.
|
||||
key.interpolator_count = xenos::kMaxInterpolators;
|
||||
key.user_clip_plane_count = 6;
|
||||
key.user_clip_plane_cull = 0;
|
||||
key.has_vertex_kill_and = 1;
|
||||
key.has_point_size = 1;
|
||||
key.has_point_coordinates = 1;
|
||||
key.interpolator_count =
|
||||
xe::bit_count(vertex_shader_modification.vertex.interpolator_mask);
|
||||
key.user_clip_plane_count =
|
||||
vertex_shader_modification.vertex.user_clip_plane_count;
|
||||
key.user_clip_plane_cull =
|
||||
vertex_shader_modification.vertex.user_clip_plane_cull;
|
||||
key.has_vertex_kill_and = vertex_shader_modification.vertex.vertex_kill_and;
|
||||
key.has_point_size = vertex_shader_modification.vertex.output_point_size;
|
||||
key.has_point_coordinates = pixel_shader_modification.pixel.param_gen_point;
|
||||
key_out = key;
|
||||
return true;
|
||||
}
|
||||
|
@ -1886,16 +1947,15 @@ void PipelineCache::CreateDxbcGeometryShader(
|
|||
uint32_t input_clip_and_cull_distance_count =
|
||||
input_clip_distance_count + input_cull_distance_count;
|
||||
|
||||
// Interpolators, point size, position, clip and cull distances (parameters
|
||||
// containing only clip or cull distances, and also one parameter containing
|
||||
// both if present).
|
||||
// TODO(Triang3l): Reorder as needed when the respective changes are done in
|
||||
// the shader translator.
|
||||
// Interpolators, position, clip and cull distances (parameters containing
|
||||
// only clip or cull distances, and also one parameter containing both if
|
||||
// present), point size.
|
||||
uint32_t isgn_parameter_count =
|
||||
key.interpolator_count + key.has_point_size + 1 +
|
||||
key.interpolator_count + 1 +
|
||||
((input_clip_and_cull_distance_count + 3) / 4) +
|
||||
uint32_t(input_cull_distance_count &&
|
||||
(input_clip_distance_count & 3) != 0);
|
||||
(input_clip_distance_count & 3) != 0) +
|
||||
key.has_point_size;
|
||||
|
||||
// Reserve space for the header and the parameters.
|
||||
shader_out[blob_offset_position_dwords] =
|
||||
|
@ -1910,7 +1970,7 @@ void PipelineCache::CreateDxbcGeometryShader(
|
|||
name_ptr =
|
||||
uint32_t((shader_out.size() - isgn_position_dwords) * sizeof(uint32_t));
|
||||
uint32_t isgn_name_ptr_texcoord = name_ptr;
|
||||
if (key.interpolator_count || key.has_point_size) {
|
||||
if (key.interpolator_count) {
|
||||
name_ptr += dxbc::AppendAlignedString(shader_out, "TEXCOORD");
|
||||
}
|
||||
uint32_t isgn_name_ptr_sv_position = name_ptr;
|
||||
|
@ -1923,12 +1983,16 @@ void PipelineCache::CreateDxbcGeometryShader(
|
|||
if (input_cull_distance_count) {
|
||||
name_ptr += dxbc::AppendAlignedString(shader_out, "SV_CullDistance");
|
||||
}
|
||||
uint32_t isgn_name_ptr_xepsize = name_ptr;
|
||||
if (key.has_point_size) {
|
||||
name_ptr += dxbc::AppendAlignedString(shader_out, "XEPSIZE");
|
||||
}
|
||||
|
||||
// Header and parameters.
|
||||
uint32_t input_register_interpolators = UINT32_MAX;
|
||||
uint32_t input_register_point_size = UINT32_MAX;
|
||||
uint32_t input_register_position;
|
||||
uint32_t input_register_clip_and_cull_distances = UINT32_MAX;
|
||||
uint32_t input_register_point_size = UINT32_MAX;
|
||||
{
|
||||
// Header.
|
||||
auto& isgn_header = *reinterpret_cast<dxbc::Signature*>(
|
||||
|
@ -1960,27 +2024,7 @@ void PipelineCache::CreateDxbcGeometryShader(
|
|||
}
|
||||
}
|
||||
|
||||
// Point size.
|
||||
// TODO(Triang3l): Put the size in X of float1, not in Z of float3, when
|
||||
// linkage via shader modifications is done.
|
||||
// TODO(Triang3l): Rename from TEXCOORD# to XEPSIZE when linkage via shader
|
||||
// modifications is done.
|
||||
if (key.has_point_size) {
|
||||
input_register_point_size = input_register_index;
|
||||
assert_true(isgn_parameter_index < isgn_parameter_count);
|
||||
dxbc::SignatureParameter& isgn_point_size =
|
||||
isgn_parameters[isgn_parameter_index++];
|
||||
isgn_point_size.semantic_name_ptr = isgn_name_ptr_texcoord;
|
||||
isgn_point_size.semantic_index = key.interpolator_count;
|
||||
isgn_point_size.component_type =
|
||||
dxbc::SignatureRegisterComponentType::kFloat32;
|
||||
isgn_point_size.register_index = input_register_index++;
|
||||
isgn_point_size.mask = 0b0111;
|
||||
isgn_point_size.always_reads_mask =
|
||||
key.type == PipelineGeometryShader::kPointList ? 0b0100 : 0;
|
||||
}
|
||||
|
||||
// Position.
|
||||
// Position (SV_Position).
|
||||
input_register_position = input_register_index;
|
||||
assert_true(isgn_parameter_index < isgn_parameter_count);
|
||||
dxbc::SignatureParameter& isgn_sv_position =
|
||||
|
@ -1993,7 +2037,7 @@ void PipelineCache::CreateDxbcGeometryShader(
|
|||
isgn_sv_position.mask = 0b1111;
|
||||
isgn_sv_position.always_reads_mask = 0b1111;
|
||||
|
||||
// Clip and cull distances.
|
||||
// Clip and cull distances (SV_ClipDistance#, SV_CullDistance#).
|
||||
if (input_clip_and_cull_distance_count) {
|
||||
input_register_clip_and_cull_distances = input_register_index;
|
||||
uint32_t isgn_cull_distance_semantic_index = 0;
|
||||
|
@ -2041,6 +2085,21 @@ void PipelineCache::CreateDxbcGeometryShader(
|
|||
}
|
||||
}
|
||||
|
||||
// Point size (XEPSIZE).
|
||||
if (key.has_point_size) {
|
||||
input_register_point_size = input_register_index;
|
||||
assert_true(isgn_parameter_index < isgn_parameter_count);
|
||||
dxbc::SignatureParameter& isgn_point_size =
|
||||
isgn_parameters[isgn_parameter_index++];
|
||||
isgn_point_size.semantic_name_ptr = isgn_name_ptr_xepsize;
|
||||
isgn_point_size.component_type =
|
||||
dxbc::SignatureRegisterComponentType::kFloat32;
|
||||
isgn_point_size.register_index = input_register_index++;
|
||||
isgn_point_size.mask = 0b0001;
|
||||
isgn_point_size.always_reads_mask =
|
||||
key.type == PipelineGeometryShader::kPointList ? 0b0001 : 0;
|
||||
}
|
||||
|
||||
assert_true(isgn_parameter_index == isgn_parameter_count);
|
||||
}
|
||||
|
||||
|
@ -2059,8 +2118,6 @@ void PipelineCache::CreateDxbcGeometryShader(
|
|||
// ***************************************************************************
|
||||
|
||||
// Interpolators, point coordinates, position, clip distances.
|
||||
// TODO(Triang3l): Reorder as needed when the respective changes are done in
|
||||
// the shader translator.
|
||||
uint32_t osgn_parameter_count = key.interpolator_count +
|
||||
key.has_point_coordinates + 1 +
|
||||
((input_clip_distance_count + 3) / 4);
|
||||
|
@ -2078,9 +2135,13 @@ void PipelineCache::CreateDxbcGeometryShader(
|
|||
name_ptr =
|
||||
uint32_t((shader_out.size() - osgn_position_dwords) * sizeof(uint32_t));
|
||||
uint32_t osgn_name_ptr_texcoord = name_ptr;
|
||||
if (key.interpolator_count || key.has_point_coordinates) {
|
||||
if (key.interpolator_count) {
|
||||
name_ptr += dxbc::AppendAlignedString(shader_out, "TEXCOORD");
|
||||
}
|
||||
uint32_t osgn_name_ptr_xespritetexcoord = name_ptr;
|
||||
if (key.has_point_coordinates) {
|
||||
name_ptr += dxbc::AppendAlignedString(shader_out, "XESPRITETEXCOORD");
|
||||
}
|
||||
uint32_t osgn_name_ptr_sv_position = name_ptr;
|
||||
name_ptr += dxbc::AppendAlignedString(shader_out, "SV_Position");
|
||||
uint32_t osgn_name_ptr_sv_clip_distance = name_ptr;
|
||||
|
@ -2123,26 +2184,21 @@ void PipelineCache::CreateDxbcGeometryShader(
|
|||
}
|
||||
}
|
||||
|
||||
// Point coordinates.
|
||||
// TODO(Triang3l): Put the coordinates in XY of float2 when linkage via
|
||||
// shader modifications is done.
|
||||
// TODO(Triang3l): Rename from TEXCOORD# to XESPRITETEXCOORD when linkage
|
||||
// via shader modifications is done.
|
||||
// Point coordinates (XESPRITETEXCOORD).
|
||||
if (key.has_point_coordinates) {
|
||||
output_register_point_coordinates = output_register_index;
|
||||
assert_true(osgn_parameter_index < osgn_parameter_count);
|
||||
dxbc::SignatureParameterForGS& osgn_point_coordinates =
|
||||
osgn_parameters[osgn_parameter_index++];
|
||||
osgn_point_coordinates.semantic_name_ptr = osgn_name_ptr_texcoord;
|
||||
osgn_point_coordinates.semantic_index = key.interpolator_count;
|
||||
osgn_point_coordinates.semantic_name_ptr = osgn_name_ptr_xespritetexcoord;
|
||||
osgn_point_coordinates.component_type =
|
||||
dxbc::SignatureRegisterComponentType::kFloat32;
|
||||
osgn_point_coordinates.register_index = output_register_index++;
|
||||
osgn_point_coordinates.mask = 0b0111;
|
||||
osgn_point_coordinates.mask = 0b0011;
|
||||
osgn_point_coordinates.never_writes_mask = 0b1100;
|
||||
}
|
||||
|
||||
// Position.
|
||||
// Position (SV_Position).
|
||||
output_register_position = output_register_index;
|
||||
assert_true(osgn_parameter_index < osgn_parameter_count);
|
||||
dxbc::SignatureParameterForGS& osgn_sv_position =
|
||||
|
@ -2154,7 +2210,7 @@ void PipelineCache::CreateDxbcGeometryShader(
|
|||
osgn_sv_position.register_index = output_register_index++;
|
||||
osgn_sv_position.mask = 0b1111;
|
||||
|
||||
// Clip distances.
|
||||
// Clip distances (SV_ClipDistance#).
|
||||
if (input_clip_distance_count) {
|
||||
output_register_clip_distances = output_register_index;
|
||||
for (uint32_t i = 0; i < input_clip_distance_count; i += 4) {
|
||||
|
@ -2256,11 +2312,6 @@ void PipelineCache::CreateDxbcGeometryShader(
|
|||
a.OpDclInput(dxbc::Dest::V2D(input_primitive_vertex_count,
|
||||
input_register_interpolators + i));
|
||||
}
|
||||
if (key.has_point_size && key.type == PipelineGeometryShader::kPointList) {
|
||||
assert_true(input_register_point_size != UINT32_MAX);
|
||||
a.OpDclInput(dxbc::Dest::V2D(input_primitive_vertex_count,
|
||||
input_register_point_size, 0b0100));
|
||||
}
|
||||
a.OpDclInputSIV(
|
||||
dxbc::Dest::V2D(input_primitive_vertex_count, input_register_position),
|
||||
dxbc::Name::kPosition);
|
||||
|
@ -2292,6 +2343,11 @@ void PipelineCache::CreateDxbcGeometryShader(
|
|||
cull_distance_mask));
|
||||
}
|
||||
}
|
||||
if (key.has_point_size && key.type == PipelineGeometryShader::kPointList) {
|
||||
assert_true(input_register_point_size != UINT32_MAX);
|
||||
a.OpDclInput(dxbc::Dest::V2D(input_primitive_vertex_count,
|
||||
input_register_point_size, 0b0001));
|
||||
}
|
||||
|
||||
// At least 1 temporary register needed to discard primitives with NaN
|
||||
// position.
|
||||
|
@ -2394,10 +2450,10 @@ void PipelineCache::CreateDxbcGeometryShader(
|
|||
// constant size. The per-vertex diameter is already clamped in the
|
||||
// vertex shader (combined with making it non-negative).
|
||||
a.OpGE(dxbc::Dest::R(0, 0b0001),
|
||||
dxbc::Src::V2D(0, input_register_point_size, dxbc::Src::kZZZZ),
|
||||
dxbc::Src::V2D(0, input_register_point_size, dxbc::Src::kXXXX),
|
||||
dxbc::Src::LF(0.0f));
|
||||
a.OpMovC(dxbc::Dest::R(0, 0b0011), dxbc::Src::R(0, dxbc::Src::kXXXX),
|
||||
dxbc::Src::V2D(0, input_register_point_size, dxbc::Src::kZZZZ),
|
||||
dxbc::Src::V2D(0, input_register_point_size, dxbc::Src::kXXXX),
|
||||
point_size_src);
|
||||
point_size_src = dxbc::Src::R(0, 0b0100);
|
||||
}
|
||||
|
|
|
@ -78,9 +78,10 @@ class PipelineCache {
|
|||
// have microcode analyzed.
|
||||
DxbcShaderTranslator::Modification GetCurrentVertexShaderModification(
|
||||
const Shader& shader,
|
||||
Shader::HostVertexShaderType host_vertex_shader_type) const;
|
||||
Shader::HostVertexShaderType host_vertex_shader_type,
|
||||
uint32_t interpolator_mask) const;
|
||||
DxbcShaderTranslator::Modification GetCurrentPixelShaderModification(
|
||||
const Shader& shader,
|
||||
const Shader& shader, uint32_t interpolator_mask, uint32_t param_gen_pos,
|
||||
reg::RB_DEPTHCONTROL normalized_depth_control) const;
|
||||
|
||||
// If draw_util::IsRasterizationPotentiallyDone is false, the pixel shader
|
||||
|
@ -290,8 +291,11 @@ class PipelineCache {
|
|||
const uint32_t* bound_depth_and_color_render_target_formats,
|
||||
PipelineRuntimeDescription& runtime_description_out);
|
||||
|
||||
static bool GetGeometryShaderKey(PipelineGeometryShader geometry_shader_type,
|
||||
GeometryShaderKey& key_out);
|
||||
static bool GetGeometryShaderKey(
|
||||
PipelineGeometryShader geometry_shader_type,
|
||||
DxbcShaderTranslator::Modification vertex_shader_modification,
|
||||
DxbcShaderTranslator::Modification pixel_shader_modification,
|
||||
GeometryShaderKey& key_out);
|
||||
static void CreateDxbcGeometryShader(GeometryShaderKey key,
|
||||
std::vector<uint32_t>& shader_out);
|
||||
const std::vector<uint32_t>& GetGeometryShader(GeometryShaderKey key);
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -2,7 +2,7 @@
|
|||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2018 Ben Vanik. All rights reserved. *
|
||||
* Copyright 2022 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
@ -55,11 +55,65 @@ class DxbcShaderTranslator : public ShaderTranslator {
|
|||
bool force_emit_source_map = false);
|
||||
~DxbcShaderTranslator() override;
|
||||
|
||||
// Stage linkage ordering and rules (must be respected not only within the
|
||||
// DxbcShaderTranslator, but also by everything else between the VS and the
|
||||
// PS, such as geometry shaders for primitive types, and built-in pixel
|
||||
// shaders for processing the fragment depth when there's no guest pixel
|
||||
// shader):
|
||||
//
|
||||
// Note that VS means the guest VS here - can be VS or DS on the host. RS
|
||||
// means the fixed-function rasterizer.
|
||||
//
|
||||
// The beginning of the parameters must match between the output of the
|
||||
// producing stage and the input of the consuming stage, while the tail can be
|
||||
// stage-specific or cut off.
|
||||
//
|
||||
// - Interpolators (TEXCOORD) - VS > GS > RS > PS, used interpolators are all
|
||||
// unconditionally referenced in all these stages.
|
||||
// - Point coordinates (XESPRITETEXCOORD) - GS > RS > PS, must be present in
|
||||
// none or in all, if drawing points, and PsParamGen is used.
|
||||
// - Position (SV_Position) - VS > GS > RS > PS, used in PS if actually needed
|
||||
// for something (PsParamGen, alpha to coverage when oC0 is written, depth
|
||||
// conversion, ROV render backend), the presence in PS depends on the usage
|
||||
// within the PS, not on linkage, therefore it's the last in PS so it can be
|
||||
// dropped from PS without effect on linkage.
|
||||
// - Clip distances (SV_ClipDistance) - VS > GS > RS.
|
||||
// - Cull distances (SV_CullDistance) - VS > RS or VS > GS.
|
||||
// - Vertex kill AND operator (SV_CullDistance) - VS > RS or VS > GS.
|
||||
// - Point size (XEPSIZE) - VS > GS.
|
||||
//
|
||||
// Therefore, for the direct VS > PS path, the parameters may be the
|
||||
// following:
|
||||
// - Shared between VS and PS:
|
||||
// - Interpolators (TEXCOORD).
|
||||
// - Position (SV_Position).
|
||||
// - VS output only:
|
||||
// - Clip distances (SV_ClipDistance).
|
||||
// - Cull distances (SV_CullDistance).
|
||||
// - Vertex kill AND operator (SV_CullDistance).
|
||||
//
|
||||
// When a GS is also used, the path between the VS and the GS is:
|
||||
// - Shared between VS and GS:
|
||||
// - Interpolators (TEXCOORD).
|
||||
// - Position (SV_Position).
|
||||
// - Clip distances (SV_ClipDistance).
|
||||
// - Cull distances (SV_CullDistance).
|
||||
// - Vertex kill AND operator (SV_CullDistance).
|
||||
// - Point size (XEPSIZE).
|
||||
//
|
||||
// Then, between GS and PS, it's:
|
||||
// - Shared between GS and PS:
|
||||
// - Interpolators (TEXCOORD).
|
||||
// - Point coordinates (XESPRITETEXCOORD).
|
||||
// - Position (SV_Position).
|
||||
// - GS output only:
|
||||
// - Clip distances (SV_ClipDistance).
|
||||
|
||||
union Modification {
|
||||
// If anything in this is structure is changed in a way not compatible with
|
||||
// the previous layout, invalidate the pipeline storages by increasing this
|
||||
// version number (0xYYYYMMDD)!
|
||||
static constexpr uint32_t kVersion = 0x20210425;
|
||||
static constexpr uint32_t kVersion = 0x20220720;
|
||||
|
||||
enum class DepthStencilMode : uint32_t {
|
||||
kNoModifiers,
|
||||
|
@ -89,22 +143,55 @@ class DxbcShaderTranslator : public ShaderTranslator {
|
|||
|
||||
uint64_t value;
|
||||
struct VertexShaderModification {
|
||||
// uint32_t 0.
|
||||
// Interpolators written by the vertex shader and needed by the pixel
|
||||
// shader.
|
||||
uint32_t interpolator_mask : xenos::kMaxInterpolators;
|
||||
uint32_t user_clip_plane_count : 3;
|
||||
uint32_t user_clip_plane_cull : 1;
|
||||
// Whether vertex killing with the "and" operator is used, and one more
|
||||
// SV_CullDistance needs to be written.
|
||||
uint32_t vertex_kill_and : 1;
|
||||
uint32_t output_point_size : 1;
|
||||
// Dynamically indexable register count from SQ_PROGRAM_CNTL.
|
||||
uint32_t dynamic_addressable_register_count : 8;
|
||||
uint32_t : 2;
|
||||
// uint32_t 1.
|
||||
// Pipeline stage and input configuration.
|
||||
Shader::HostVertexShaderType host_vertex_shader_type
|
||||
: Shader::kHostVertexShaderTypeBitCount;
|
||||
} vertex;
|
||||
struct PixelShaderModification {
|
||||
// uint32_t 0.
|
||||
// Interpolators written by the vertex shader and needed by the pixel
|
||||
// shader.
|
||||
uint32_t interpolator_mask : xenos::kMaxInterpolators;
|
||||
uint32_t interpolators_centroid : xenos::kMaxInterpolators;
|
||||
// uint32_t 1.
|
||||
// Dynamically indexable register count from SQ_PROGRAM_CNTL.
|
||||
uint32_t param_gen_enable : 1;
|
||||
uint32_t param_gen_interpolator : 4;
|
||||
// If param_gen_enable is set, this must be set for point primitives, and
|
||||
// must not be set for other primitive types - enables the point sprite
|
||||
// coordinates input, and also effects the flag bits in PsParamGen.
|
||||
uint32_t param_gen_point : 1;
|
||||
uint32_t dynamic_addressable_register_count : 8;
|
||||
// Non-ROV - depth / stencil output mode.
|
||||
DepthStencilMode depth_stencil_mode : 2;
|
||||
} pixel;
|
||||
|
||||
Modification(uint64_t modification_value = 0) : value(modification_value) {
|
||||
explicit Modification(uint64_t modification_value = 0)
|
||||
: value(modification_value) {
|
||||
static_assert_size(*this, sizeof(value));
|
||||
}
|
||||
|
||||
uint32_t GetVertexClipDistanceCount() const {
|
||||
return vertex.user_clip_plane_cull ? 0 : vertex.user_clip_plane_count;
|
||||
}
|
||||
uint32_t GetVertexCullDistanceCount() const {
|
||||
return (vertex.user_clip_plane_cull ? vertex.user_clip_plane_count : 0) +
|
||||
vertex.vertex_kill_and;
|
||||
}
|
||||
};
|
||||
|
||||
// Constant buffer bindings in space 0.
|
||||
|
@ -122,15 +209,7 @@ class DxbcShaderTranslator : public ShaderTranslator {
|
|||
kSysFlag_XYDividedByW_Shift,
|
||||
kSysFlag_ZDividedByW_Shift,
|
||||
kSysFlag_WNotReciprocal_Shift,
|
||||
kSysFlag_UserClipPlane0_Shift,
|
||||
kSysFlag_UserClipPlane1_Shift,
|
||||
kSysFlag_UserClipPlane2_Shift,
|
||||
kSysFlag_UserClipPlane3_Shift,
|
||||
kSysFlag_UserClipPlane4_Shift,
|
||||
kSysFlag_UserClipPlane5_Shift,
|
||||
kSysFlag_KillIfAnyVertexKilled_Shift,
|
||||
kSysFlag_PrimitivePolygonal_Shift,
|
||||
kSysFlag_PrimitivePoint_Shift,
|
||||
kSysFlag_PrimitiveLine_Shift,
|
||||
kSysFlag_DepthFloat24_Shift,
|
||||
kSysFlag_AlphaPassIfLess_Shift,
|
||||
|
@ -167,15 +246,7 @@ class DxbcShaderTranslator : public ShaderTranslator {
|
|||
kSysFlag_XYDividedByW = 1u << kSysFlag_XYDividedByW_Shift,
|
||||
kSysFlag_ZDividedByW = 1u << kSysFlag_ZDividedByW_Shift,
|
||||
kSysFlag_WNotReciprocal = 1u << kSysFlag_WNotReciprocal_Shift,
|
||||
kSysFlag_UserClipPlane0 = 1u << kSysFlag_UserClipPlane0_Shift,
|
||||
kSysFlag_UserClipPlane1 = 1u << kSysFlag_UserClipPlane1_Shift,
|
||||
kSysFlag_UserClipPlane2 = 1u << kSysFlag_UserClipPlane2_Shift,
|
||||
kSysFlag_UserClipPlane3 = 1u << kSysFlag_UserClipPlane3_Shift,
|
||||
kSysFlag_UserClipPlane4 = 1u << kSysFlag_UserClipPlane4_Shift,
|
||||
kSysFlag_UserClipPlane5 = 1u << kSysFlag_UserClipPlane5_Shift,
|
||||
kSysFlag_KillIfAnyVertexKilled = 1u << kSysFlag_KillIfAnyVertexKilled_Shift,
|
||||
kSysFlag_PrimitivePolygonal = 1u << kSysFlag_PrimitivePolygonal_Shift,
|
||||
kSysFlag_PrimitivePoint = 1u << kSysFlag_PrimitivePoint_Shift,
|
||||
kSysFlag_PrimitiveLine = 1u << kSysFlag_PrimitiveLine_Shift,
|
||||
kSysFlag_DepthFloat24 = 1u << kSysFlag_DepthFloat24_Shift,
|
||||
kSysFlag_AlphaPassIfLess = 1u << kSysFlag_AlphaPassIfLess_Shift,
|
||||
|
@ -247,12 +318,6 @@ class DxbcShaderTranslator : public ShaderTranslator {
|
|||
// for the host viewport.
|
||||
float point_screen_diameter_to_ndc_radius[2];
|
||||
|
||||
uint32_t interpolator_sampling_pattern;
|
||||
uint32_t ps_param_gen;
|
||||
// Log2 of X and Y sample size. Used for alpha to mask, and for MSAA with
|
||||
// ROV, this is used for EDRAM address calculation.
|
||||
uint32_t sample_count_log2[2];
|
||||
|
||||
// Each byte contains post-swizzle TextureSign values for each of the needed
|
||||
// components of each of the 32 used texture fetch constants.
|
||||
uint32_t texture_swizzled_signs[8];
|
||||
|
@ -260,12 +325,18 @@ class DxbcShaderTranslator : public ShaderTranslator {
|
|||
// Whether the contents of each texture in fetch constants comes from a
|
||||
// resolve operation.
|
||||
uint32_t textures_resolved;
|
||||
// Log2 of X and Y sample size. Used for alpha to mask, and for MSAA with
|
||||
// ROV, this is used for EDRAM address calculation.
|
||||
uint32_t sample_count_log2[2];
|
||||
float alpha_test_reference;
|
||||
|
||||
// If alpha to mask is disabled, the entire alpha_to_mask value must be 0.
|
||||
// If alpha to mask is enabled, bits 0:7 are sample offsets, and bit 8 must
|
||||
// be 1.
|
||||
uint32_t alpha_to_mask;
|
||||
uint32_t edram_32bpp_tile_pitch_dwords_scaled;
|
||||
uint32_t edram_depth_base_dwords_scaled;
|
||||
uint32_t padding_edram_depth_base_dwords_scaled;
|
||||
|
||||
float color_exp_bias[4];
|
||||
|
||||
|
@ -284,9 +355,6 @@ class DxbcShaderTranslator : public ShaderTranslator {
|
|||
float edram_poly_offset_back[2];
|
||||
};
|
||||
|
||||
uint32_t edram_depth_base_dwords_scaled;
|
||||
uint32_t padding_edram_depth_base_dwords_scaled[3];
|
||||
|
||||
// In stencil function/operations (they match the layout of the
|
||||
// function/operations in RB_DEPTHCONTROL):
|
||||
// 0:2 - comparison function (bit 0 - less, bit 1 - equal, bit 2 - greater).
|
||||
|
@ -360,24 +428,21 @@ class DxbcShaderTranslator : public ShaderTranslator {
|
|||
kPointConstantDiameter,
|
||||
kPointScreenDiameterToNDCRadius,
|
||||
|
||||
kInterpolatorSamplingPattern,
|
||||
kPSParamGen,
|
||||
kSampleCountLog2,
|
||||
|
||||
kTextureSwizzledSigns,
|
||||
|
||||
kTexturesResolved,
|
||||
kSampleCountLog2,
|
||||
kAlphaTestReference,
|
||||
|
||||
kAlphaToMask,
|
||||
kEdram32bppTilePitchDwordsScaled,
|
||||
kEdramDepthBaseDwordsScaled,
|
||||
|
||||
kColorExpBias,
|
||||
|
||||
kEdramPolyOffsetFront,
|
||||
kEdramPolyOffsetBack,
|
||||
|
||||
kEdramDepthBaseDwordsScaled,
|
||||
|
||||
kEdramStencil,
|
||||
|
||||
kEdramRTBaseDwordsScaled,
|
||||
|
@ -579,34 +644,10 @@ class DxbcShaderTranslator : public ShaderTranslator {
|
|||
void ProcessAluInstruction(const ParsedAluInstruction& instr) override;
|
||||
|
||||
private:
|
||||
static constexpr uint32_t kPointParametersTexCoord = xenos::kMaxInterpolators;
|
||||
|
||||
enum class InOutRegister : uint32_t {
|
||||
// IF ANY OF THESE ARE CHANGED, WriteInputSignature and WriteOutputSignature
|
||||
// MUST BE UPDATED!
|
||||
kVSInVertexIndex = 0,
|
||||
|
||||
kDSInControlPointIndex = 0,
|
||||
|
||||
kVSDSOutInterpolators = 0,
|
||||
kVSDSOutPointParameters = kVSDSOutInterpolators + xenos::kMaxInterpolators,
|
||||
kVSDSOutPosition,
|
||||
// Clip and cull distances must be tightly packed in Direct3D!
|
||||
kVSDSOutClipDistance0123,
|
||||
kVSDSOutClipDistance45AndCullDistance,
|
||||
// TODO(Triang3l): Use SV_CullDistance instead for
|
||||
// PA_CL_CLIP_CNTL::UCP_CULL_ONLY_ENA, but can't have more than 8 clip and
|
||||
// cull distances in total. Currently only using SV_CullDistance for vertex
|
||||
// kill.
|
||||
|
||||
kPSInInterpolators = 0,
|
||||
kPSInPointParameters = kPSInInterpolators + xenos::kMaxInterpolators,
|
||||
kPSInPosition,
|
||||
// nointerpolation inputs. SV_IsFrontFace (X) is always present for
|
||||
// ps_param_gen, SV_SampleIndex (Y) is conditional (only for memexport when
|
||||
// sample-rate shading is otherwise needed anyway due to depth conversion).
|
||||
kPSInFrontFaceAndSampleIndex,
|
||||
};
|
||||
// IF ANY OF THESE ARE CHANGED, WriteInputSignature and WriteOutputSignature
|
||||
// MUST BE UPDATED!
|
||||
static constexpr uint32_t kInRegisterVSVertexIndex = 0;
|
||||
static constexpr uint32_t kInRegisterDSControlPointIndex = 0;
|
||||
|
||||
// GetSystemConstantSrc + MarkSystemConstantUsed is for special cases of
|
||||
// building the source unconditionally - in general, LoadSystemConstant must
|
||||
|
@ -664,6 +705,12 @@ class DxbcShaderTranslator : public ShaderTranslator {
|
|||
current_shader().implicit_early_z_write_allowed();
|
||||
}
|
||||
|
||||
uint32_t GetModificationInterpolatorMask() const {
|
||||
Modification modification = GetDxbcShaderModification();
|
||||
return is_vertex_shader() ? modification.vertex.interpolator_mask
|
||||
: modification.pixel.interpolator_mask;
|
||||
}
|
||||
|
||||
// Whether to use switch-case rather than if (pc >= label) for control flow.
|
||||
bool UseSwitchForControlFlow() const;
|
||||
|
||||
|
@ -1042,11 +1089,26 @@ class DxbcShaderTranslator : public ShaderTranslator {
|
|||
// so the remaining ones can be marked as unused in RDEF.
|
||||
uint64_t system_constants_used_;
|
||||
|
||||
uint32_t out_reg_vs_interpolators_;
|
||||
uint32_t out_reg_vs_position_;
|
||||
// Clip and cull distances must be tightly packed in Direct3D.
|
||||
// Up to 6 SV_ClipDistances or SV_CullDistances depending on
|
||||
// user_clip_plane_cull, then one SV_CullDistance if vertex_kill_and is used.
|
||||
uint32_t out_reg_vs_clip_cull_distances_;
|
||||
uint32_t out_reg_vs_point_size_;
|
||||
uint32_t in_reg_ps_interpolators_;
|
||||
uint32_t in_reg_ps_point_coordinates_;
|
||||
uint32_t in_reg_ps_position_;
|
||||
// nointerpolation inputs. SV_IsFrontFace (X) is for non-point PsParamGen,
|
||||
// SV_SampleIndex (Y) is for memexport when sample-rate shading is otherwise
|
||||
// needed anyway due to depth conversion.
|
||||
uint32_t in_reg_ps_front_face_sample_index_;
|
||||
|
||||
// Mask of domain location actually used in the domain shader.
|
||||
uint32_t in_domain_location_used_;
|
||||
// Whether the primitive ID has been used in the domain shader.
|
||||
bool in_primitive_id_used_;
|
||||
// Whether InOutRegister::kDSInControlPointIndex has been used in the shader.
|
||||
// Whether kInRegisterDSControlPointIndex has been used in the shader.
|
||||
bool in_control_point_index_used_;
|
||||
// Mask of the pixel/sample position actually used in the pixel shader.
|
||||
uint32_t in_position_used_;
|
||||
|
|
|
@ -133,9 +133,8 @@ void DxbcShaderTranslator::ExportToMemory() {
|
|||
// because it's the center and is covered with the half-pixel offset too).
|
||||
// Using control_temp.yz as per-axis temporary variables.
|
||||
in_position_used_ |= resolution_scaled_axes;
|
||||
a_.OpFToU(
|
||||
dxbc::Dest::R(control_temp, resolution_scaled_axes << 1),
|
||||
dxbc::Src::V1D(uint32_t(InOutRegister::kPSInPosition), 0b0100 << 2));
|
||||
a_.OpFToU(dxbc::Dest::R(control_temp, resolution_scaled_axes << 1),
|
||||
dxbc::Src::V1D(in_reg_ps_position_, 0b0100 << 2));
|
||||
a_.OpUDiv(dxbc::Dest::Null(),
|
||||
dxbc::Dest::R(control_temp, resolution_scaled_axes << 1),
|
||||
dxbc::Src::R(control_temp, 0b1001 << 2),
|
||||
|
@ -177,8 +176,7 @@ void DxbcShaderTranslator::ExportToMemory() {
|
|||
a_.OpIEq(
|
||||
dxbc::Dest::R(control_temp,
|
||||
inner_condition_provided ? 0b0010 : 0b0001),
|
||||
dxbc::Src::V1D(uint32_t(InOutRegister::kPSInFrontFaceAndSampleIndex),
|
||||
dxbc::Src::kYYYY),
|
||||
dxbc::Src::V1D(in_reg_ps_front_face_sample_index_, dxbc::Src::kYYYY),
|
||||
dxbc::Src::R(control_temp, dxbc::Src::kYYYY));
|
||||
if (inner_condition_provided) {
|
||||
// Merge with the previous condition in control_temp.x.
|
||||
|
|
|
@ -173,7 +173,7 @@ void DxbcShaderTranslator::StartPixelShader_LoadROVParameters() {
|
|||
// system_temp_rov_params_.y = Y host pixel position as uint
|
||||
in_position_used_ |= 0b0011;
|
||||
a_.OpFToU(dxbc::Dest::R(system_temp_rov_params_, 0b0011),
|
||||
dxbc::Src::V1D(uint32_t(InOutRegister::kPSInPosition)));
|
||||
dxbc::Src::V1D(in_reg_ps_position_));
|
||||
// Convert the position from pixels to samples.
|
||||
// system_temp_rov_params_.x = X sample 0 position
|
||||
// system_temp_rov_params_.y = Y sample 0 position
|
||||
|
@ -537,8 +537,8 @@ void DxbcShaderTranslator::ROV_DepthStencilTest() {
|
|||
ROV_DepthTo24Bit(system_temp_depth_stencil_, 0, system_temp_depth_stencil_,
|
||||
0, temp, 0);
|
||||
} else {
|
||||
dxbc::Src in_position_z(dxbc::Src::V1D(
|
||||
uint32_t(InOutRegister::kPSInPosition), dxbc::Src::kZZZZ));
|
||||
dxbc::Src in_position_z(
|
||||
dxbc::Src::V1D(in_reg_ps_position_, dxbc::Src::kZZZZ));
|
||||
// Get the derivatives of the screen-space (but not clamped to the viewport
|
||||
// depth bounds yet - this happens after the pixel shader in Direct3D 11+;
|
||||
// also linear within the triangle - thus constant derivatives along the
|
||||
|
@ -577,9 +577,8 @@ void DxbcShaderTranslator::ROV_DepthStencilTest() {
|
|||
a_.OpMax(temp_z_dest, z_ddx_src.Abs(), z_ddy_src.Abs());
|
||||
// Calculate the depth bias for the needed faceness.
|
||||
in_front_face_used_ = true;
|
||||
a_.OpIf(true, dxbc::Src::V1D(
|
||||
uint32_t(InOutRegister::kPSInFrontFaceAndSampleIndex),
|
||||
dxbc::Src::kXXXX));
|
||||
a_.OpIf(true, dxbc::Src::V1D(in_reg_ps_front_face_sample_index_,
|
||||
dxbc::Src::kXXXX));
|
||||
// temp.x if early = ddx(z)
|
||||
// temp.y if early = ddy(z)
|
||||
// temp.z = front face polygon offset
|
||||
|
@ -881,9 +880,8 @@ void DxbcShaderTranslator::ROV_DepthStencilTest() {
|
|||
{
|
||||
// Check the current face to get the reference and apply the read mask.
|
||||
in_front_face_used_ = true;
|
||||
a_.OpIf(true, dxbc::Src::V1D(
|
||||
uint32_t(InOutRegister::kPSInFrontFaceAndSampleIndex),
|
||||
dxbc::Src::kXXXX));
|
||||
a_.OpIf(true, dxbc::Src::V1D(in_reg_ps_front_face_sample_index_,
|
||||
dxbc::Src::kXXXX));
|
||||
for (uint32_t j = 0; j < 2; ++j) {
|
||||
if (j) {
|
||||
// Go to the back face.
|
||||
|
@ -944,8 +942,7 @@ void DxbcShaderTranslator::ROV_DepthStencilTest() {
|
|||
in_front_face_used_ = true;
|
||||
a_.OpMovC(
|
||||
sample_temp_z_dest,
|
||||
dxbc::Src::V1D(uint32_t(InOutRegister::kPSInFrontFaceAndSampleIndex),
|
||||
dxbc::Src::kXXXX),
|
||||
dxbc::Src::V1D(in_reg_ps_front_face_sample_index_, dxbc::Src::kXXXX),
|
||||
LoadSystemConstant(
|
||||
SystemConstants::Index::kEdramStencil,
|
||||
offsetof(SystemConstants, edram_stencil_front_func_ops),
|
||||
|
@ -1023,9 +1020,8 @@ void DxbcShaderTranslator::ROV_DepthStencilTest() {
|
|||
a_.OpCase(dxbc::Src::LU(uint32_t(xenos::StencilOp::kReplace)));
|
||||
in_front_face_used_ = true;
|
||||
a_.OpMovC(sample_temp_y_dest,
|
||||
dxbc::Src::V1D(
|
||||
uint32_t(InOutRegister::kPSInFrontFaceAndSampleIndex),
|
||||
dxbc::Src::kXXXX),
|
||||
dxbc::Src::V1D(in_reg_ps_front_face_sample_index_,
|
||||
dxbc::Src::kXXXX),
|
||||
LoadSystemConstant(
|
||||
SystemConstants::Index::kEdramStencil,
|
||||
offsetof(SystemConstants, edram_stencil_front_reference),
|
||||
|
@ -1087,8 +1083,7 @@ void DxbcShaderTranslator::ROV_DepthStencilTest() {
|
|||
in_front_face_used_ = true;
|
||||
a_.OpMovC(
|
||||
sample_temp_z_dest,
|
||||
dxbc::Src::V1D(uint32_t(InOutRegister::kPSInFrontFaceAndSampleIndex),
|
||||
dxbc::Src::kXXXX),
|
||||
dxbc::Src::V1D(in_reg_ps_front_face_sample_index_, dxbc::Src::kXXXX),
|
||||
LoadSystemConstant(
|
||||
SystemConstants::Index::kEdramStencil,
|
||||
offsetof(SystemConstants, edram_stencil_front_write_mask),
|
||||
|
@ -1863,8 +1858,7 @@ void DxbcShaderTranslator::CompletePixelShader_DSV_DepthTo24Bit() {
|
|||
temp = PushSystemTemp();
|
||||
in_position_used_ |= 0b0100;
|
||||
a_.OpMul(dxbc::Dest::R(temp, 0b0001),
|
||||
dxbc::Src::V1D(uint32_t(InOutRegister::kPSInPosition),
|
||||
dxbc::Src::kZZZZ),
|
||||
dxbc::Src::V1D(in_reg_ps_position_, dxbc::Src::kZZZZ),
|
||||
dxbc::Src::LF(2.0f), true);
|
||||
}
|
||||
|
||||
|
@ -2006,8 +2000,7 @@ void DxbcShaderTranslator::CompletePixelShader_AlphaToMask() {
|
|||
// preserve the idea of dithering.
|
||||
// temp.x = alpha to coverage offset as float 0.0...3.0.
|
||||
in_position_used_ |= 0b0011;
|
||||
a_.OpFToU(dxbc::Dest::R(temp, 0b0011),
|
||||
dxbc::Src::V1D(uint32_t(InOutRegister::kPSInPosition)));
|
||||
a_.OpFToU(dxbc::Dest::R(temp, 0b0011), dxbc::Src::V1D(in_reg_ps_position_));
|
||||
a_.OpAnd(dxbc::Dest::R(temp, 0b0010), dxbc::Src::R(temp, dxbc::Src::kYYYY),
|
||||
dxbc::Src::LU(1));
|
||||
a_.OpBFI(temp_x_dest, dxbc::Src::LU(1), dxbc::Src::LU(1), temp_x_src,
|
||||
|
|
|
@ -509,6 +509,9 @@ union alignas(uint32_t) PA_CL_CLIP_CNTL {
|
|||
uint32_t z_nan_retain : 1; // +23
|
||||
uint32_t w_nan_retain : 1; // +24
|
||||
};
|
||||
struct {
|
||||
uint32_t ucp_ena : 6;
|
||||
};
|
||||
static constexpr Register register_index = XE_GPU_REG_PA_CL_CLIP_CNTL;
|
||||
};
|
||||
static_assert_size(PA_CL_CLIP_CNTL, sizeof(uint32_t));
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include "xenia/base/byte_order.h"
|
||||
#include "xenia/base/math.h"
|
||||
#include "xenia/base/string_buffer.h"
|
||||
#include "xenia/gpu/registers.h"
|
||||
#include "xenia/gpu/ucode.h"
|
||||
#include "xenia/gpu/xenos.h"
|
||||
|
||||
|
@ -652,11 +653,11 @@ void ParseAluInstruction(const ucode::AluInstruction& op,
|
|||
|
||||
class Shader {
|
||||
public:
|
||||
// Type of the vertex shader in a D3D11-like rendering pipeline - shader
|
||||
// interface depends on in, so it must be known at translation time.
|
||||
// If values are changed, INVALIDATE SHADER STORAGES (increase their version
|
||||
// constexpr) where those are stored! And check bit count where this is
|
||||
// packed. This is : uint32_t for simplicity of packing in bit fields.
|
||||
// Type of the vertex shader on the host - shader interface depends on in, so
|
||||
// it must be known at translation time. If values are changed, INVALIDATE
|
||||
// SHADER STORAGES (increase their version constexpr) where those are stored!
|
||||
// And check bit count where this is packed. This is : uint32_t for simplicity
|
||||
// of packing in bit fields.
|
||||
enum class HostVertexShaderType : uint32_t {
|
||||
kVertex,
|
||||
|
||||
|
@ -668,9 +669,22 @@ class Shader {
|
|||
kQuadDomainCPIndexed,
|
||||
kQuadDomainPatchIndexed,
|
||||
kDomainEnd,
|
||||
|
||||
// For implementation without unconditional support for memory writes from
|
||||
// vertex shaders, vertex shader converted to a compute shader doing only
|
||||
// memory export.
|
||||
kMemexportCompute,
|
||||
|
||||
// 4 host vertices for 1 guest vertex, for implementations without
|
||||
// unconditional geometry shader support.
|
||||
kPointListAsTriangleStrip,
|
||||
// 3 guest vertices processed by the host shader invocation to choose the
|
||||
// strip orientation, for implementations without unconditional geometry
|
||||
// shader support.
|
||||
kRectangleListAsTriangleStrip,
|
||||
};
|
||||
// For packing HostVertexShaderType in bit fields.
|
||||
static constexpr uint32_t kHostVertexShaderTypeBitCount = 3;
|
||||
static constexpr uint32_t kHostVertexShaderTypeBitCount = 4;
|
||||
|
||||
static constexpr bool IsHostVertexShaderTypeDomain(
|
||||
HostVertexShaderType host_vertex_shader_type) {
|
||||
|
@ -932,6 +946,21 @@ class Shader {
|
|||
return uses_texture_fetch_instruction_results_;
|
||||
}
|
||||
|
||||
// Whether each interpolator is written on any execution path.
|
||||
uint32_t writes_interpolators() const { return writes_interpolators_; }
|
||||
|
||||
// Whether the system vertex shader exports are written on any execution path.
|
||||
uint32_t writes_point_size_edge_flag_kill_vertex() const {
|
||||
return writes_point_size_edge_flag_kill_vertex_;
|
||||
}
|
||||
|
||||
// Returns the mask of the interpolators the pixel shader potentially requires
|
||||
// from the vertex shader, and also the PsParamGen destination register, or
|
||||
// UINT32_MAX if it's not needed.
|
||||
uint32_t GetInterpolatorInputMask(reg::SQ_PROGRAM_CNTL sq_program_cntl,
|
||||
reg::SQ_CONTEXT_MISC sq_context_misc,
|
||||
uint32_t& param_gen_pos_out) const;
|
||||
|
||||
// True if the shader overrides the pixel depth.
|
||||
bool writes_depth() const { return writes_depth_; }
|
||||
|
||||
|
@ -1018,11 +1047,13 @@ class Shader {
|
|||
std::set<uint32_t> label_addresses_;
|
||||
uint32_t cf_pair_index_bound_ = 0;
|
||||
uint32_t register_static_address_bound_ = 0;
|
||||
uint32_t writes_interpolators_ = 0;
|
||||
uint32_t writes_point_size_edge_flag_kill_vertex_ = 0;
|
||||
uint32_t writes_color_targets_ = 0b0000;
|
||||
bool uses_register_dynamic_addressing_ = false;
|
||||
bool kills_pixels_ = false;
|
||||
bool uses_texture_fetch_instruction_results_ = false;
|
||||
bool writes_depth_ = false;
|
||||
uint32_t writes_color_targets_ = 0b0000;
|
||||
|
||||
// Modification bits -> translation.
|
||||
std::unordered_map<uint64_t, Translation*> translations_;
|
||||
|
|
|
@ -233,6 +233,26 @@ void Shader::AnalyzeUcode(StringBuffer& ucode_disasm_buffer) {
|
|||
}
|
||||
}
|
||||
|
||||
uint32_t Shader::GetInterpolatorInputMask(reg::SQ_PROGRAM_CNTL sq_program_cntl,
|
||||
reg::SQ_CONTEXT_MISC sq_context_misc,
|
||||
uint32_t& param_gen_pos_out) const {
|
||||
assert_true(type() == xenos::ShaderType::kPixel);
|
||||
uint32_t interpolator_count = std::min(
|
||||
xenos::kMaxInterpolators,
|
||||
std::max(register_static_address_bound(),
|
||||
GetDynamicAddressableRegisterCount(sq_program_cntl.ps_num_reg)));
|
||||
uint32_t interpolator_mask = (UINT32_C(1) << interpolator_count) - 1;
|
||||
if (sq_program_cntl.param_gen &&
|
||||
sq_context_misc.param_gen_pos < interpolator_count) {
|
||||
// Will be overwritten by PsParamGen.
|
||||
interpolator_mask &= ~(UINT32_C(1) << sq_context_misc.param_gen_pos);
|
||||
param_gen_pos_out = sq_context_misc.param_gen_pos;
|
||||
} else {
|
||||
param_gen_pos_out = UINT32_MAX;
|
||||
}
|
||||
return interpolator_mask;
|
||||
}
|
||||
|
||||
void Shader::GatherExecInformation(
|
||||
const ParsedExecInstruction& instr,
|
||||
ucode::VertexFetchInstruction& previous_vfetch_full,
|
||||
|
@ -470,7 +490,8 @@ void Shader::GatherFetchResultInformation(const InstructionResult& result) {
|
|||
|
||||
void Shader::GatherAluResultInformation(
|
||||
const InstructionResult& result, uint32_t memexport_alloc_current_count) {
|
||||
if (!result.GetUsedWriteMask()) {
|
||||
uint32_t used_write_mask = result.GetUsedWriteMask();
|
||||
if (!used_write_mask) {
|
||||
return;
|
||||
}
|
||||
switch (result.storage_target) {
|
||||
|
@ -483,6 +504,12 @@ void Shader::GatherAluResultInformation(
|
|||
uses_register_dynamic_addressing_ = true;
|
||||
}
|
||||
break;
|
||||
case InstructionStorageTarget::kInterpolator:
|
||||
writes_interpolators_ |= uint32_t(1) << result.storage_index;
|
||||
break;
|
||||
case InstructionStorageTarget::kPointSizeEdgeFlagKillVertex:
|
||||
writes_point_size_edge_flag_kill_vertex_ |= used_write_mask;
|
||||
break;
|
||||
case InstructionStorageTarget::kExportData:
|
||||
if (memexport_alloc_current_count > 0 &&
|
||||
memexport_alloc_current_count <= Shader::kMaxMemExports) {
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -21,25 +21,23 @@
|
|||
// float xe_point_vertex_diameter_max;// Offset: 156 Size: 4 [unused]
|
||||
// float2 xe_point_constant_diameter; // Offset: 160 Size: 8 [unused]
|
||||
// float2 xe_point_screen_diameter_to_ndc_radius;// Offset: 168 Size: 8 [unused]
|
||||
// uint xe_interpolator_sampling_pattern;// Offset: 176 Size: 4 [unused]
|
||||
// uint xe_ps_param_gen; // Offset: 180 Size: 4 [unused]
|
||||
// uint2 xe_sample_count_log2; // Offset: 184 Size: 8 [unused]
|
||||
// uint4 xe_texture_swizzled_signs[2];// Offset: 192 Size: 32 [unused]
|
||||
// uint xe_textures_resolved; // Offset: 224 Size: 4 [unused]
|
||||
// float xe_alpha_test_reference; // Offset: 228 Size: 4 [unused]
|
||||
// uint xe_alpha_to_mask; // Offset: 232 Size: 4 [unused]
|
||||
// uint xe_edram_32bpp_tile_pitch_dwords_scaled;// Offset: 236 Size: 4 [unused]
|
||||
// uint4 xe_texture_swizzled_signs[2];// Offset: 176 Size: 32 [unused]
|
||||
// uint xe_textures_resolved; // Offset: 208 Size: 4 [unused]
|
||||
// uint2 xe_sample_count_log2; // Offset: 212 Size: 8 [unused]
|
||||
// float xe_alpha_test_reference; // Offset: 220 Size: 4 [unused]
|
||||
// uint xe_alpha_to_mask; // Offset: 224 Size: 4 [unused]
|
||||
// uint xe_edram_32bpp_tile_pitch_dwords_scaled;// Offset: 228 Size: 4 [unused]
|
||||
// uint xe_edram_depth_base_dwords_scaled;// Offset: 232 Size: 4 [unused]
|
||||
// float4 xe_color_exp_bias; // Offset: 240 Size: 16 [unused]
|
||||
// float2 xe_edram_poly_offset_front; // Offset: 256 Size: 8 [unused]
|
||||
// float2 xe_edram_poly_offset_back; // Offset: 264 Size: 8 [unused]
|
||||
// uint xe_edram_depth_base_dwords_scaled;// Offset: 272 Size: 4 [unused]
|
||||
// uint4 xe_edram_stencil[2]; // Offset: 288 Size: 32 [unused]
|
||||
// uint4 xe_edram_rt_base_dwords_scaled;// Offset: 320 Size: 16 [unused]
|
||||
// uint4 xe_edram_rt_format_flags; // Offset: 336 Size: 16 [unused]
|
||||
// float4 xe_edram_rt_clamp[4]; // Offset: 352 Size: 64 [unused]
|
||||
// uint4 xe_edram_rt_keep_mask[2]; // Offset: 416 Size: 32 [unused]
|
||||
// uint4 xe_edram_rt_blend_factors_ops;// Offset: 448 Size: 16 [unused]
|
||||
// float4 xe_edram_blend_constant; // Offset: 464 Size: 16 [unused]
|
||||
// uint4 xe_edram_stencil[2]; // Offset: 272 Size: 32 [unused]
|
||||
// uint4 xe_edram_rt_base_dwords_scaled;// Offset: 304 Size: 16 [unused]
|
||||
// uint4 xe_edram_rt_format_flags; // Offset: 320 Size: 16 [unused]
|
||||
// float4 xe_edram_rt_clamp[4]; // Offset: 336 Size: 64 [unused]
|
||||
// uint4 xe_edram_rt_keep_mask[2]; // Offset: 400 Size: 32 [unused]
|
||||
// uint4 xe_edram_rt_blend_factors_ops;// Offset: 432 Size: 16 [unused]
|
||||
// float4 xe_edram_blend_constant; // Offset: 448 Size: 16 [unused]
|
||||
//
|
||||
// }
|
||||
//
|
||||
|
@ -112,21 +110,21 @@ ret
|
|||
|
||||
const BYTE continuous_triangle_hs[] =
|
||||
{
|
||||
68, 88, 66, 67, 157, 238,
|
||||
46, 85, 189, 214, 238, 189,
|
||||
170, 130, 106, 213, 101, 223,
|
||||
102, 58, 1, 0, 0, 0,
|
||||
140, 13, 0, 0, 6, 0,
|
||||
68, 88, 66, 67, 40, 16,
|
||||
64, 130, 119, 149, 137, 0,
|
||||
58, 149, 234, 138, 51, 145,
|
||||
29, 76, 1, 0, 0, 0,
|
||||
16, 13, 0, 0, 6, 0,
|
||||
0, 0, 56, 0, 0, 0,
|
||||
232, 10, 0, 0, 28, 11,
|
||||
0, 0, 80, 11, 0, 0,
|
||||
228, 11, 0, 0, 240, 12,
|
||||
108, 10, 0, 0, 160, 10,
|
||||
0, 0, 212, 10, 0, 0,
|
||||
104, 11, 0, 0, 116, 12,
|
||||
0, 0, 82, 68, 69, 70,
|
||||
168, 10, 0, 0, 1, 0,
|
||||
44, 10, 0, 0, 1, 0,
|
||||
0, 0, 120, 0, 0, 0,
|
||||
1, 0, 0, 0, 60, 0,
|
||||
0, 0, 1, 5, 83, 72,
|
||||
0, 5, 0, 0, 126, 10,
|
||||
0, 5, 0, 0, 2, 10,
|
||||
0, 0, 19, 19, 68, 37,
|
||||
60, 0, 0, 0, 24, 0,
|
||||
0, 0, 40, 0, 0, 0,
|
||||
|
@ -143,534 +141,513 @@ const BYTE continuous_triangle_hs[] =
|
|||
121, 115, 116, 101, 109, 95,
|
||||
99, 98, 117, 102, 102, 101,
|
||||
114, 0, 171, 171, 100, 0,
|
||||
0, 0, 32, 0, 0, 0,
|
||||
144, 0, 0, 0, 224, 1,
|
||||
0, 0, 30, 0, 0, 0,
|
||||
144, 0, 0, 0, 208, 1,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 144, 5,
|
||||
0, 0, 0, 0, 64, 5,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
4, 0, 0, 0, 0, 0,
|
||||
0, 0, 160, 5, 0, 0,
|
||||
0, 0, 80, 5, 0, 0,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 196, 5, 0, 0,
|
||||
0, 0, 116, 5, 0, 0,
|
||||
4, 0, 0, 0, 8, 0,
|
||||
0, 0, 2, 0, 0, 0,
|
||||
232, 5, 0, 0, 0, 0,
|
||||
152, 5, 0, 0, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
12, 6, 0, 0, 12, 0,
|
||||
188, 5, 0, 0, 12, 0,
|
||||
0, 0, 4, 0, 0, 0,
|
||||
0, 0, 0, 0, 160, 5,
|
||||
0, 0, 0, 0, 80, 5,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 39, 6,
|
||||
0, 0, 0, 0, 215, 5,
|
||||
0, 0, 16, 0, 0, 0,
|
||||
4, 0, 0, 0, 0, 0,
|
||||
0, 0, 160, 5, 0, 0,
|
||||
0, 0, 80, 5, 0, 0,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 62, 6, 0, 0,
|
||||
0, 0, 238, 5, 0, 0,
|
||||
20, 0, 0, 0, 4, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
160, 5, 0, 0, 0, 0,
|
||||
80, 5, 0, 0, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
85, 6, 0, 0, 24, 0,
|
||||
5, 6, 0, 0, 24, 0,
|
||||
0, 0, 8, 0, 0, 0,
|
||||
0, 0, 0, 0, 116, 6,
|
||||
0, 0, 0, 0, 36, 6,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 152, 6,
|
||||
0, 0, 0, 0, 72, 6,
|
||||
0, 0, 32, 0, 0, 0,
|
||||
96, 0, 0, 0, 0, 0,
|
||||
0, 0, 180, 6, 0, 0,
|
||||
0, 0, 100, 6, 0, 0,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 216, 6, 0, 0,
|
||||
0, 0, 136, 6, 0, 0,
|
||||
128, 0, 0, 0, 12, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
236, 6, 0, 0, 0, 0,
|
||||
156, 6, 0, 0, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
16, 7, 0, 0, 140, 0,
|
||||
192, 6, 0, 0, 140, 0,
|
||||
0, 0, 4, 0, 0, 0,
|
||||
0, 0, 0, 0, 52, 7,
|
||||
0, 0, 0, 0, 228, 6,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 88, 7,
|
||||
0, 0, 0, 0, 8, 7,
|
||||
0, 0, 144, 0, 0, 0,
|
||||
12, 0, 0, 0, 0, 0,
|
||||
0, 0, 236, 6, 0, 0,
|
||||
0, 0, 156, 6, 0, 0,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 102, 7, 0, 0,
|
||||
0, 0, 22, 7, 0, 0,
|
||||
156, 0, 0, 0, 4, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
52, 7, 0, 0, 0, 0,
|
||||
228, 6, 0, 0, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
131, 7, 0, 0, 160, 0,
|
||||
51, 7, 0, 0, 160, 0,
|
||||
0, 0, 8, 0, 0, 0,
|
||||
0, 0, 0, 0, 232, 5,
|
||||
0, 0, 0, 0, 152, 5,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 158, 7,
|
||||
0, 0, 0, 0, 78, 7,
|
||||
0, 0, 168, 0, 0, 0,
|
||||
8, 0, 0, 0, 0, 0,
|
||||
0, 0, 232, 5, 0, 0,
|
||||
0, 0, 152, 5, 0, 0,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 197, 7, 0, 0,
|
||||
176, 0, 0, 0, 4, 0,
|
||||
0, 0, 117, 7, 0, 0,
|
||||
176, 0, 0, 0, 32, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
160, 5, 0, 0, 0, 0,
|
||||
152, 7, 0, 0, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
230, 7, 0, 0, 180, 0,
|
||||
188, 7, 0, 0, 208, 0,
|
||||
0, 0, 4, 0, 0, 0,
|
||||
0, 0, 0, 0, 160, 5,
|
||||
0, 0, 0, 0, 80, 5,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 246, 7,
|
||||
0, 0, 184, 0, 0, 0,
|
||||
0, 0, 0, 0, 209, 7,
|
||||
0, 0, 212, 0, 0, 0,
|
||||
8, 0, 0, 0, 0, 0,
|
||||
0, 0, 116, 6, 0, 0,
|
||||
0, 0, 36, 6, 0, 0,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 11, 8, 0, 0,
|
||||
192, 0, 0, 0, 32, 0,
|
||||
0, 0, 230, 7, 0, 0,
|
||||
220, 0, 0, 0, 4, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
44, 8, 0, 0, 0, 0,
|
||||
228, 6, 0, 0, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
80, 8, 0, 0, 224, 0,
|
||||
254, 7, 0, 0, 224, 0,
|
||||
0, 0, 4, 0, 0, 0,
|
||||
0, 0, 0, 0, 160, 5,
|
||||
0, 0, 0, 0, 80, 5,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 101, 8,
|
||||
0, 0, 0, 0, 15, 8,
|
||||
0, 0, 228, 0, 0, 0,
|
||||
4, 0, 0, 0, 0, 0,
|
||||
0, 0, 52, 7, 0, 0,
|
||||
0, 0, 80, 5, 0, 0,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 125, 8, 0, 0,
|
||||
0, 0, 55, 8, 0, 0,
|
||||
232, 0, 0, 0, 4, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
160, 5, 0, 0, 0, 0,
|
||||
80, 5, 0, 0, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
142, 8, 0, 0, 236, 0,
|
||||
0, 0, 4, 0, 0, 0,
|
||||
0, 0, 0, 0, 160, 5,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 182, 8,
|
||||
0, 0, 240, 0, 0, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
0, 0, 200, 8, 0, 0,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 236, 8, 0, 0,
|
||||
0, 1, 0, 0, 8, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
232, 5, 0, 0, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
7, 9, 0, 0, 8, 1,
|
||||
0, 0, 8, 0, 0, 0,
|
||||
0, 0, 0, 0, 232, 5,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 33, 9,
|
||||
0, 0, 16, 1, 0, 0,
|
||||
4, 0, 0, 0, 0, 0,
|
||||
0, 0, 160, 5, 0, 0,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 67, 9, 0, 0,
|
||||
32, 1, 0, 0, 32, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
84, 9, 0, 0, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
120, 9, 0, 0, 64, 1,
|
||||
89, 8, 0, 0, 240, 0,
|
||||
0, 0, 16, 0, 0, 0,
|
||||
0, 0, 0, 0, 152, 9,
|
||||
0, 0, 0, 0, 108, 8,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 188, 9,
|
||||
0, 0, 80, 1, 0, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
0, 0, 152, 9, 0, 0,
|
||||
0, 0, 0, 0, 144, 8,
|
||||
0, 0, 0, 1, 0, 0,
|
||||
8, 0, 0, 0, 0, 0,
|
||||
0, 0, 152, 5, 0, 0,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 213, 9, 0, 0,
|
||||
96, 1, 0, 0, 64, 0,
|
||||
0, 0, 171, 8, 0, 0,
|
||||
8, 1, 0, 0, 8, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
232, 9, 0, 0, 0, 0,
|
||||
152, 5, 0, 0, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
12, 10, 0, 0, 160, 1,
|
||||
197, 8, 0, 0, 16, 1,
|
||||
0, 0, 32, 0, 0, 0,
|
||||
0, 0, 0, 0, 36, 10,
|
||||
0, 0, 0, 0, 216, 8,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 72, 10,
|
||||
0, 0, 192, 1, 0, 0,
|
||||
0, 0, 0, 0, 252, 8,
|
||||
0, 0, 48, 1, 0, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
0, 0, 152, 9, 0, 0,
|
||||
0, 0, 28, 9, 0, 0,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 102, 10, 0, 0,
|
||||
208, 1, 0, 0, 16, 0,
|
||||
0, 0, 64, 9, 0, 0,
|
||||
64, 1, 0, 0, 16, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
200, 8, 0, 0, 0, 0,
|
||||
28, 9, 0, 0, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
120, 101, 95, 102, 108, 97,
|
||||
103, 115, 0, 100, 119, 111,
|
||||
114, 100, 0, 171, 0, 0,
|
||||
19, 0, 1, 0, 1, 0,
|
||||
89, 9, 0, 0, 80, 1,
|
||||
0, 0, 64, 0, 0, 0,
|
||||
0, 0, 0, 0, 108, 9,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 144, 9,
|
||||
0, 0, 144, 1, 0, 0,
|
||||
32, 0, 0, 0, 0, 0,
|
||||
0, 0, 168, 9, 0, 0,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 204, 9, 0, 0,
|
||||
176, 1, 0, 0, 16, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
28, 9, 0, 0, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
234, 9, 0, 0, 192, 1,
|
||||
0, 0, 16, 0, 0, 0,
|
||||
0, 0, 0, 0, 108, 8,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 120, 101,
|
||||
95, 102, 108, 97, 103, 115,
|
||||
0, 100, 119, 111, 114, 100,
|
||||
0, 171, 0, 0, 19, 0,
|
||||
1, 0, 1, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
153, 5, 0, 0, 120, 101,
|
||||
95, 116, 101, 115, 115, 101,
|
||||
108, 108, 97, 116, 105, 111,
|
||||
110, 95, 102, 97, 99, 116,
|
||||
111, 114, 95, 114, 97, 110,
|
||||
103, 101, 0, 102, 108, 111,
|
||||
97, 116, 50, 0, 1, 0,
|
||||
3, 0, 1, 0, 2, 0,
|
||||
0, 0, 0, 0, 73, 5,
|
||||
0, 0, 120, 101, 95, 116,
|
||||
101, 115, 115, 101, 108, 108,
|
||||
97, 116, 105, 111, 110, 95,
|
||||
102, 97, 99, 116, 111, 114,
|
||||
95, 114, 97, 110, 103, 101,
|
||||
0, 102, 108, 111, 97, 116,
|
||||
50, 0, 1, 0, 3, 0,
|
||||
1, 0, 2, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
225, 5, 0, 0, 120, 101,
|
||||
95, 108, 105, 110, 101, 95,
|
||||
108, 111, 111, 112, 95, 99,
|
||||
108, 111, 115, 105, 110, 103,
|
||||
95, 105, 110, 100, 101, 120,
|
||||
0, 120, 101, 95, 118, 101,
|
||||
114, 116, 101, 120, 95, 105,
|
||||
110, 100, 101, 120, 95, 101,
|
||||
110, 100, 105, 97, 110, 0,
|
||||
120, 101, 95, 118, 101, 114,
|
||||
116, 101, 120, 95, 105, 110,
|
||||
100, 101, 120, 95, 111, 102,
|
||||
102, 115, 101, 116, 0, 120,
|
||||
0, 0, 0, 0, 145, 5,
|
||||
0, 0, 120, 101, 95, 108,
|
||||
105, 110, 101, 95, 108, 111,
|
||||
111, 112, 95, 99, 108, 111,
|
||||
115, 105, 110, 103, 95, 105,
|
||||
110, 100, 101, 120, 0, 120,
|
||||
101, 95, 118, 101, 114, 116,
|
||||
101, 120, 95, 105, 110, 100,
|
||||
101, 120, 95, 109, 105, 110,
|
||||
95, 109, 97, 120, 0, 117,
|
||||
105, 110, 116, 50, 0, 171,
|
||||
1, 0, 19, 0, 1, 0,
|
||||
2, 0, 0, 0, 0, 0,
|
||||
101, 120, 95, 101, 110, 100,
|
||||
105, 97, 110, 0, 120, 101,
|
||||
95, 118, 101, 114, 116, 101,
|
||||
120, 95, 105, 110, 100, 101,
|
||||
120, 95, 111, 102, 102, 115,
|
||||
101, 116, 0, 120, 101, 95,
|
||||
118, 101, 114, 116, 101, 120,
|
||||
95, 105, 110, 100, 101, 120,
|
||||
95, 109, 105, 110, 95, 109,
|
||||
97, 120, 0, 117, 105, 110,
|
||||
116, 50, 0, 171, 1, 0,
|
||||
19, 0, 1, 0, 2, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 109, 6, 0, 0,
|
||||
120, 101, 95, 117, 115, 101,
|
||||
114, 95, 99, 108, 105, 112,
|
||||
95, 112, 108, 97, 110, 101,
|
||||
115, 0, 102, 108, 111, 97,
|
||||
116, 52, 0, 171, 1, 0,
|
||||
3, 0, 1, 0, 4, 0,
|
||||
6, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
29, 6, 0, 0, 120, 101,
|
||||
95, 117, 115, 101, 114, 95,
|
||||
99, 108, 105, 112, 95, 112,
|
||||
108, 97, 110, 101, 115, 0,
|
||||
102, 108, 111, 97, 116, 52,
|
||||
0, 171, 1, 0, 3, 0,
|
||||
1, 0, 4, 0, 6, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
172, 6, 0, 0, 120, 101,
|
||||
95, 110, 100, 99, 95, 115,
|
||||
99, 97, 108, 101, 0, 102,
|
||||
108, 111, 97, 116, 51, 0,
|
||||
1, 0, 3, 0, 1, 0,
|
||||
3, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 92, 6,
|
||||
0, 0, 120, 101, 95, 110,
|
||||
100, 99, 95, 115, 99, 97,
|
||||
108, 101, 0, 102, 108, 111,
|
||||
97, 116, 51, 0, 1, 0,
|
||||
3, 0, 1, 0, 3, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 229, 6, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
149, 6, 0, 0, 120, 101,
|
||||
95, 112, 111, 105, 110, 116,
|
||||
95, 118, 101, 114, 116, 101,
|
||||
120, 95, 100, 105, 97, 109,
|
||||
101, 116, 101, 114, 95, 109,
|
||||
105, 110, 0, 102, 108, 111,
|
||||
97, 116, 0, 171, 0, 0,
|
||||
3, 0, 1, 0, 1, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
221, 6, 0, 0, 120, 101,
|
||||
95, 110, 100, 99, 95, 111,
|
||||
102, 102, 115, 101, 116, 0,
|
||||
120, 101, 95, 112, 111, 105,
|
||||
110, 116, 95, 118, 101, 114,
|
||||
116, 101, 120, 95, 100, 105,
|
||||
97, 109, 101, 116, 101, 114,
|
||||
95, 109, 105, 110, 0, 102,
|
||||
108, 111, 97, 116, 0, 171,
|
||||
0, 0, 3, 0, 1, 0,
|
||||
1, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 45, 7, 0, 0,
|
||||
120, 101, 95, 110, 100, 99,
|
||||
95, 111, 102, 102, 115, 101,
|
||||
116, 0, 120, 101, 95, 112,
|
||||
111, 105, 110, 116, 95, 118,
|
||||
101, 114, 116, 101, 120, 95,
|
||||
95, 109, 97, 120, 0, 120,
|
||||
101, 95, 112, 111, 105, 110,
|
||||
116, 95, 99, 111, 110, 115,
|
||||
116, 97, 110, 116, 95, 100,
|
||||
105, 97, 109, 101, 116, 101,
|
||||
114, 0, 120, 101, 95, 112,
|
||||
111, 105, 110, 116, 95, 115,
|
||||
99, 114, 101, 101, 110, 95,
|
||||
100, 105, 97, 109, 101, 116,
|
||||
101, 114, 95, 109, 97, 120,
|
||||
0, 120, 101, 95, 112, 111,
|
||||
105, 110, 116, 95, 99, 111,
|
||||
110, 115, 116, 97, 110, 116,
|
||||
95, 100, 105, 97, 109, 101,
|
||||
116, 101, 114, 0, 120, 101,
|
||||
95, 112, 111, 105, 110, 116,
|
||||
95, 115, 99, 114, 101, 101,
|
||||
110, 95, 100, 105, 97, 109,
|
||||
101, 116, 101, 114, 95, 116,
|
||||
111, 95, 110, 100, 99, 95,
|
||||
114, 97, 100, 105, 117, 115,
|
||||
0, 120, 101, 95, 105, 110,
|
||||
116, 101, 114, 112, 111, 108,
|
||||
97, 116, 111, 114, 95, 115,
|
||||
97, 109, 112, 108, 105, 110,
|
||||
103, 95, 112, 97, 116, 116,
|
||||
101, 114, 110, 0, 120, 101,
|
||||
95, 112, 115, 95, 112, 97,
|
||||
114, 97, 109, 95, 103, 101,
|
||||
110, 0, 120, 101, 95, 115,
|
||||
97, 109, 112, 108, 101, 95,
|
||||
99, 111, 117, 110, 116, 95,
|
||||
108, 111, 103, 50, 0, 120,
|
||||
101, 114, 95, 116, 111, 95,
|
||||
110, 100, 99, 95, 114, 97,
|
||||
100, 105, 117, 115, 0, 120,
|
||||
101, 95, 116, 101, 120, 116,
|
||||
117, 114, 101, 95, 115, 119,
|
||||
105, 122, 122, 108, 101, 100,
|
||||
95, 115, 105, 103, 110, 115,
|
||||
0, 117, 105, 110, 116, 52,
|
||||
0, 171, 1, 0, 19, 0,
|
||||
1, 0, 4, 0, 2, 0,
|
||||
0, 171, 171, 171, 1, 0,
|
||||
19, 0, 1, 0, 4, 0,
|
||||
2, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 37, 8,
|
||||
0, 0, 120, 101, 95, 116,
|
||||
101, 120, 116, 117, 114, 101,
|
||||
115, 95, 114, 101, 115, 111,
|
||||
108, 118, 101, 100, 0, 120,
|
||||
101, 95, 97, 108, 112, 104,
|
||||
97, 95, 116, 101, 115, 116,
|
||||
95, 114, 101, 102, 101, 114,
|
||||
101, 110, 99, 101, 0, 120,
|
||||
101, 95, 97, 108, 112, 104,
|
||||
97, 95, 116, 111, 95, 109,
|
||||
97, 115, 107, 0, 120, 101,
|
||||
95, 101, 100, 114, 97, 109,
|
||||
95, 51, 50, 98, 112, 112,
|
||||
95, 116, 105, 108, 101, 95,
|
||||
112, 105, 116, 99, 104, 95,
|
||||
100, 119, 111, 114, 100, 115,
|
||||
95, 115, 99, 97, 108, 101,
|
||||
100, 0, 120, 101, 95, 99,
|
||||
111, 108, 111, 114, 95, 101,
|
||||
120, 112, 95, 98, 105, 97,
|
||||
115, 0, 1, 0, 3, 0,
|
||||
1, 0, 4, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 172, 6,
|
||||
0, 0, 120, 101, 95, 101,
|
||||
100, 114, 97, 109, 95, 112,
|
||||
111, 108, 121, 95, 111, 102,
|
||||
102, 115, 101, 116, 95, 102,
|
||||
114, 111, 110, 116, 0, 120,
|
||||
101, 95, 101, 100, 114, 97,
|
||||
109, 95, 112, 111, 108, 121,
|
||||
95, 111, 102, 102, 115, 101,
|
||||
116, 95, 98, 97, 99, 107,
|
||||
143, 7, 0, 0, 120, 101,
|
||||
95, 116, 101, 120, 116, 117,
|
||||
114, 101, 115, 95, 114, 101,
|
||||
115, 111, 108, 118, 101, 100,
|
||||
0, 120, 101, 95, 115, 97,
|
||||
109, 112, 108, 101, 95, 99,
|
||||
111, 117, 110, 116, 95, 108,
|
||||
111, 103, 50, 0, 120, 101,
|
||||
95, 97, 108, 112, 104, 97,
|
||||
95, 116, 101, 115, 116, 95,
|
||||
114, 101, 102, 101, 114, 101,
|
||||
110, 99, 101, 0, 120, 101,
|
||||
95, 97, 108, 112, 104, 97,
|
||||
95, 116, 111, 95, 109, 97,
|
||||
115, 107, 0, 120, 101, 95,
|
||||
101, 100, 114, 97, 109, 95,
|
||||
51, 50, 98, 112, 112, 95,
|
||||
116, 105, 108, 101, 95, 112,
|
||||
105, 116, 99, 104, 95, 100,
|
||||
119, 111, 114, 100, 115, 95,
|
||||
115, 99, 97, 108, 101, 100,
|
||||
0, 120, 101, 95, 101, 100,
|
||||
114, 97, 109, 95, 100, 101,
|
||||
112, 116, 104, 95, 98, 97,
|
||||
115, 101, 95, 100, 119, 111,
|
||||
114, 100, 115, 95, 115, 99,
|
||||
97, 108, 101, 100, 0, 120,
|
||||
101, 95, 99, 111, 108, 111,
|
||||
114, 95, 101, 120, 112, 95,
|
||||
98, 105, 97, 115, 0, 171,
|
||||
1, 0, 3, 0, 1, 0,
|
||||
4, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 92, 6, 0, 0,
|
||||
120, 101, 95, 101, 100, 114,
|
||||
97, 109, 95, 112, 111, 108,
|
||||
121, 95, 111, 102, 102, 115,
|
||||
101, 116, 95, 102, 114, 111,
|
||||
110, 116, 0, 120, 101, 95,
|
||||
101, 100, 114, 97, 109, 95,
|
||||
112, 111, 108, 121, 95, 111,
|
||||
102, 102, 115, 101, 116, 95,
|
||||
98, 97, 99, 107, 0, 120,
|
||||
101, 95, 101, 100, 114, 97,
|
||||
109, 95, 115, 116, 101, 110,
|
||||
99, 105, 108, 0, 1, 0,
|
||||
99, 105, 108, 0, 171, 171,
|
||||
1, 0, 19, 0, 1, 0,
|
||||
4, 0, 2, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 143, 7, 0, 0,
|
||||
120, 101, 95, 101, 100, 114,
|
||||
97, 109, 95, 114, 116, 95,
|
||||
98, 97, 115, 101, 95, 100,
|
||||
119, 111, 114, 100, 115, 95,
|
||||
115, 99, 97, 108, 101, 100,
|
||||
0, 171, 1, 0, 19, 0,
|
||||
1, 0, 4, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 143, 7,
|
||||
0, 0, 120, 101, 95, 101,
|
||||
100, 114, 97, 109, 95, 114,
|
||||
116, 95, 102, 111, 114, 109,
|
||||
97, 116, 95, 102, 108, 97,
|
||||
103, 115, 0, 120, 101, 95,
|
||||
101, 100, 114, 97, 109, 95,
|
||||
114, 116, 95, 99, 108, 97,
|
||||
109, 112, 0, 171, 1, 0,
|
||||
3, 0, 1, 0, 4, 0,
|
||||
4, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
92, 6, 0, 0, 120, 101,
|
||||
95, 101, 100, 114, 97, 109,
|
||||
95, 114, 116, 95, 107, 101,
|
||||
101, 112, 95, 109, 97, 115,
|
||||
107, 0, 171, 171, 1, 0,
|
||||
19, 0, 1, 0, 4, 0,
|
||||
2, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
37, 8, 0, 0, 120, 101,
|
||||
143, 7, 0, 0, 120, 101,
|
||||
95, 101, 100, 114, 97, 109,
|
||||
95, 114, 116, 95, 98, 97,
|
||||
115, 101, 95, 100, 119, 111,
|
||||
114, 100, 115, 95, 115, 99,
|
||||
97, 108, 101, 100, 0, 171,
|
||||
1, 0, 19, 0, 1, 0,
|
||||
4, 0, 0, 0, 0, 0,
|
||||
95, 114, 116, 95, 98, 108,
|
||||
101, 110, 100, 95, 102, 97,
|
||||
99, 116, 111, 114, 115, 95,
|
||||
111, 112, 115, 0, 120, 101,
|
||||
95, 101, 100, 114, 97, 109,
|
||||
95, 98, 108, 101, 110, 100,
|
||||
95, 99, 111, 110, 115, 116,
|
||||
97, 110, 116, 0, 77, 105,
|
||||
99, 114, 111, 115, 111, 102,
|
||||
116, 32, 40, 82, 41, 32,
|
||||
72, 76, 83, 76, 32, 83,
|
||||
104, 97, 100, 101, 114, 32,
|
||||
67, 111, 109, 112, 105, 108,
|
||||
101, 114, 32, 49, 48, 46,
|
||||
49, 0, 171, 171, 73, 83,
|
||||
71, 78, 44, 0, 0, 0,
|
||||
1, 0, 0, 0, 8, 0,
|
||||
0, 0, 32, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 37, 8, 0, 0,
|
||||
120, 101, 95, 101, 100, 114,
|
||||
97, 109, 95, 114, 116, 95,
|
||||
102, 111, 114, 109, 97, 116,
|
||||
95, 102, 108, 97, 103, 115,
|
||||
0, 120, 101, 95, 101, 100,
|
||||
114, 97, 109, 95, 114, 116,
|
||||
95, 99, 108, 97, 109, 112,
|
||||
0, 171, 1, 0, 3, 0,
|
||||
1, 0, 4, 0, 4, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 172, 6,
|
||||
0, 0, 120, 101, 95, 101,
|
||||
100, 114, 97, 109, 95, 114,
|
||||
116, 95, 107, 101, 101, 112,
|
||||
95, 109, 97, 115, 107, 0,
|
||||
171, 171, 1, 0, 19, 0,
|
||||
1, 0, 4, 0, 2, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 37, 8,
|
||||
0, 0, 120, 101, 95, 101,
|
||||
100, 114, 97, 109, 95, 114,
|
||||
116, 95, 98, 108, 101, 110,
|
||||
100, 95, 102, 97, 99, 116,
|
||||
111, 114, 115, 95, 111, 112,
|
||||
115, 0, 120, 101, 95, 101,
|
||||
100, 114, 97, 109, 95, 98,
|
||||
108, 101, 110, 100, 95, 99,
|
||||
111, 110, 115, 116, 97, 110,
|
||||
116, 0, 77, 105, 99, 114,
|
||||
111, 115, 111, 102, 116, 32,
|
||||
40, 82, 41, 32, 72, 76,
|
||||
83, 76, 32, 83, 104, 97,
|
||||
100, 101, 114, 32, 67, 111,
|
||||
109, 112, 105, 108, 101, 114,
|
||||
32, 49, 48, 46, 49, 0,
|
||||
171, 171, 73, 83, 71, 78,
|
||||
0, 0, 3, 0, 0, 0,
|
||||
0, 0, 0, 0, 1, 1,
|
||||
0, 0, 88, 69, 86, 69,
|
||||
82, 84, 69, 88, 73, 68,
|
||||
0, 171, 79, 83, 71, 78,
|
||||
44, 0, 0, 0, 1, 0,
|
||||
0, 0, 8, 0, 0, 0,
|
||||
32, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
3, 0, 0, 0, 0, 0,
|
||||
0, 0, 1, 1, 0, 0,
|
||||
0, 0, 1, 14, 0, 0,
|
||||
88, 69, 86, 69, 82, 84,
|
||||
69, 88, 73, 68, 0, 171,
|
||||
79, 83, 71, 78, 44, 0,
|
||||
80, 67, 83, 71, 140, 0,
|
||||
0, 0, 4, 0, 0, 0,
|
||||
8, 0, 0, 0, 104, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
13, 0, 0, 0, 3, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
1, 14, 0, 0, 104, 0,
|
||||
0, 0, 1, 0, 0, 0,
|
||||
8, 0, 0, 0, 32, 0,
|
||||
13, 0, 0, 0, 3, 0,
|
||||
0, 0, 1, 0, 0, 0,
|
||||
1, 14, 0, 0, 104, 0,
|
||||
0, 0, 2, 0, 0, 0,
|
||||
13, 0, 0, 0, 3, 0,
|
||||
0, 0, 2, 0, 0, 0,
|
||||
1, 14, 0, 0, 118, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 3, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
1, 14, 0, 0, 88, 69,
|
||||
86, 69, 82, 84, 69, 88,
|
||||
73, 68, 0, 171, 80, 67,
|
||||
83, 71, 140, 0, 0, 0,
|
||||
4, 0, 0, 0, 8, 0,
|
||||
0, 0, 104, 0, 0, 0,
|
||||
0, 0, 0, 0, 13, 0,
|
||||
14, 0, 0, 0, 3, 0,
|
||||
0, 0, 3, 0, 0, 0,
|
||||
0, 0, 0, 0, 1, 14,
|
||||
0, 0, 104, 0, 0, 0,
|
||||
1, 0, 0, 0, 13, 0,
|
||||
0, 0, 3, 0, 0, 0,
|
||||
1, 0, 0, 0, 1, 14,
|
||||
0, 0, 104, 0, 0, 0,
|
||||
2, 0, 0, 0, 13, 0,
|
||||
0, 0, 3, 0, 0, 0,
|
||||
2, 0, 0, 0, 1, 14,
|
||||
0, 0, 118, 0, 0, 0,
|
||||
0, 0, 0, 0, 14, 0,
|
||||
0, 0, 3, 0, 0, 0,
|
||||
3, 0, 0, 0, 1, 14,
|
||||
0, 0, 83, 86, 95, 84,
|
||||
101, 115, 115, 70, 97, 99,
|
||||
116, 111, 114, 0, 83, 86,
|
||||
95, 73, 110, 115, 105, 100,
|
||||
101, 84, 101, 115, 115, 70,
|
||||
1, 14, 0, 0, 83, 86,
|
||||
95, 84, 101, 115, 115, 70,
|
||||
97, 99, 116, 111, 114, 0,
|
||||
171, 171, 83, 72, 69, 88,
|
||||
4, 1, 0, 0, 81, 0,
|
||||
3, 0, 65, 0, 0, 0,
|
||||
113, 0, 0, 1, 147, 24,
|
||||
0, 1, 148, 24, 0, 1,
|
||||
149, 16, 0, 1, 150, 32,
|
||||
0, 1, 151, 24, 0, 1,
|
||||
106, 8, 0, 1, 89, 0,
|
||||
0, 7, 70, 142, 48, 0,
|
||||
83, 86, 95, 73, 110, 115,
|
||||
105, 100, 101, 84, 101, 115,
|
||||
115, 70, 97, 99, 116, 111,
|
||||
114, 0, 171, 171, 83, 72,
|
||||
69, 88, 4, 1, 0, 0,
|
||||
81, 0, 3, 0, 65, 0,
|
||||
0, 0, 113, 0, 0, 1,
|
||||
147, 24, 0, 1, 148, 24,
|
||||
0, 1, 149, 16, 0, 1,
|
||||
150, 32, 0, 1, 151, 24,
|
||||
0, 1, 106, 8, 0, 1,
|
||||
89, 0, 0, 7, 70, 142,
|
||||
48, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
1, 0, 0, 0, 0, 0,
|
||||
0, 0, 115, 0, 0, 1,
|
||||
153, 0, 0, 2, 3, 0,
|
||||
0, 0, 95, 0, 0, 2,
|
||||
0, 112, 1, 0, 103, 0,
|
||||
0, 4, 18, 32, 16, 0,
|
||||
0, 0, 0, 0, 17, 0,
|
||||
0, 0, 103, 0, 0, 4,
|
||||
18, 32, 16, 0, 1, 0,
|
||||
0, 0, 18, 0, 0, 0,
|
||||
0, 0, 1, 0, 0, 0,
|
||||
0, 0, 0, 0, 115, 0,
|
||||
0, 1, 153, 0, 0, 2,
|
||||
3, 0, 0, 0, 95, 0,
|
||||
0, 2, 0, 112, 1, 0,
|
||||
103, 0, 0, 4, 18, 32,
|
||||
16, 0, 2, 0, 0, 0,
|
||||
19, 0, 0, 0, 104, 0,
|
||||
0, 2, 1, 0, 0, 0,
|
||||
91, 0, 0, 4, 18, 32,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
3, 0, 0, 0, 54, 0,
|
||||
0, 4, 18, 0, 16, 0,
|
||||
0, 0, 0, 0, 10, 112,
|
||||
1, 0, 54, 0, 0, 8,
|
||||
18, 32, 144, 0, 10, 0,
|
||||
17, 0, 0, 0, 103, 0,
|
||||
0, 4, 18, 32, 16, 0,
|
||||
1, 0, 0, 0, 18, 0,
|
||||
0, 0, 103, 0, 0, 4,
|
||||
18, 32, 16, 0, 2, 0,
|
||||
0, 0, 19, 0, 0, 0,
|
||||
104, 0, 0, 2, 1, 0,
|
||||
0, 0, 91, 0, 0, 4,
|
||||
18, 32, 16, 0, 0, 0,
|
||||
0, 0, 3, 0, 0, 0,
|
||||
54, 0, 0, 4, 18, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
10, 112, 1, 0, 54, 0,
|
||||
0, 8, 18, 32, 144, 0,
|
||||
10, 0, 16, 0, 0, 0,
|
||||
0, 0, 42, 128, 48, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
62, 0, 0, 1, 115, 0,
|
||||
0, 1, 103, 0, 0, 4,
|
||||
18, 32, 16, 0, 3, 0,
|
||||
0, 0, 20, 0, 0, 0,
|
||||
54, 0, 0, 7, 18, 32,
|
||||
16, 0, 3, 0, 0, 0,
|
||||
42, 128, 48, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 62, 0,
|
||||
0, 1, 115, 0, 0, 1,
|
||||
103, 0, 0, 4, 18, 32,
|
||||
16, 0, 3, 0, 0, 0,
|
||||
20, 0, 0, 0, 54, 0,
|
||||
0, 7, 18, 32, 16, 0,
|
||||
3, 0, 0, 0, 42, 128,
|
||||
48, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 62, 0, 0, 1,
|
||||
83, 84, 65, 84, 148, 0,
|
||||
0, 0, 5, 0, 0, 0,
|
||||
1, 0, 0, 0, 0, 0,
|
||||
0, 0, 4, 0, 0, 0,
|
||||
0, 1, 83, 84, 65, 84,
|
||||
148, 0, 0, 0, 5, 0,
|
||||
0, 0, 1, 0, 0, 0,
|
||||
0, 0, 0, 0, 4, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
2, 0, 0, 0, 0, 0,
|
||||
0, 0, 2, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
|
@ -678,16 +655,17 @@ const BYTE continuous_triangle_hs[] =
|
|||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
3, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 10, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 3, 0, 0, 0,
|
||||
3, 0, 0, 0, 4, 0,
|
||||
0, 0, 2, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0
|
||||
0, 0, 0, 0, 0, 0,
|
||||
10, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 3, 0,
|
||||
0, 0, 3, 0, 0, 0,
|
||||
4, 0, 0, 0, 2, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0
|
||||
};
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -21,25 +21,23 @@
|
|||
// float xe_point_vertex_diameter_max;// Offset: 156 Size: 4 [unused]
|
||||
// float2 xe_point_constant_diameter; // Offset: 160 Size: 8 [unused]
|
||||
// float2 xe_point_screen_diameter_to_ndc_radius;// Offset: 168 Size: 8 [unused]
|
||||
// uint xe_interpolator_sampling_pattern;// Offset: 176 Size: 4 [unused]
|
||||
// uint xe_ps_param_gen; // Offset: 180 Size: 4 [unused]
|
||||
// uint2 xe_sample_count_log2; // Offset: 184 Size: 8 [unused]
|
||||
// uint4 xe_texture_swizzled_signs[2];// Offset: 192 Size: 32 [unused]
|
||||
// uint xe_textures_resolved; // Offset: 224 Size: 4 [unused]
|
||||
// float xe_alpha_test_reference; // Offset: 228 Size: 4 [unused]
|
||||
// uint xe_alpha_to_mask; // Offset: 232 Size: 4 [unused]
|
||||
// uint xe_edram_32bpp_tile_pitch_dwords_scaled;// Offset: 236 Size: 4 [unused]
|
||||
// uint4 xe_texture_swizzled_signs[2];// Offset: 176 Size: 32 [unused]
|
||||
// uint xe_textures_resolved; // Offset: 208 Size: 4 [unused]
|
||||
// uint2 xe_sample_count_log2; // Offset: 212 Size: 8 [unused]
|
||||
// float xe_alpha_test_reference; // Offset: 220 Size: 4 [unused]
|
||||
// uint xe_alpha_to_mask; // Offset: 224 Size: 4 [unused]
|
||||
// uint xe_edram_32bpp_tile_pitch_dwords_scaled;// Offset: 228 Size: 4 [unused]
|
||||
// uint xe_edram_depth_base_dwords_scaled;// Offset: 232 Size: 4 [unused]
|
||||
// float4 xe_color_exp_bias; // Offset: 240 Size: 16 [unused]
|
||||
// float2 xe_edram_poly_offset_front; // Offset: 256 Size: 8 [unused]
|
||||
// float2 xe_edram_poly_offset_back; // Offset: 264 Size: 8 [unused]
|
||||
// uint xe_edram_depth_base_dwords_scaled;// Offset: 272 Size: 4 [unused]
|
||||
// uint4 xe_edram_stencil[2]; // Offset: 288 Size: 32 [unused]
|
||||
// uint4 xe_edram_rt_base_dwords_scaled;// Offset: 320 Size: 16 [unused]
|
||||
// uint4 xe_edram_rt_format_flags; // Offset: 336 Size: 16 [unused]
|
||||
// float4 xe_edram_rt_clamp[4]; // Offset: 352 Size: 64 [unused]
|
||||
// uint4 xe_edram_rt_keep_mask[2]; // Offset: 416 Size: 32 [unused]
|
||||
// uint4 xe_edram_rt_blend_factors_ops;// Offset: 448 Size: 16 [unused]
|
||||
// float4 xe_edram_blend_constant; // Offset: 464 Size: 16 [unused]
|
||||
// uint4 xe_edram_stencil[2]; // Offset: 272 Size: 32 [unused]
|
||||
// uint4 xe_edram_rt_base_dwords_scaled;// Offset: 304 Size: 16 [unused]
|
||||
// uint4 xe_edram_rt_format_flags; // Offset: 320 Size: 16 [unused]
|
||||
// float4 xe_edram_rt_clamp[4]; // Offset: 336 Size: 64 [unused]
|
||||
// uint4 xe_edram_rt_keep_mask[2]; // Offset: 400 Size: 32 [unused]
|
||||
// uint4 xe_edram_rt_blend_factors_ops;// Offset: 432 Size: 16 [unused]
|
||||
// float4 xe_edram_blend_constant; // Offset: 448 Size: 16 [unused]
|
||||
//
|
||||
// }
|
||||
//
|
||||
|
@ -112,21 +110,21 @@ ret
|
|||
|
||||
const BYTE discrete_triangle_hs[] =
|
||||
{
|
||||
68, 88, 66, 67, 242, 103,
|
||||
49, 84, 105, 84, 128, 131,
|
||||
50, 149, 249, 84, 224, 173,
|
||||
77, 78, 1, 0, 0, 0,
|
||||
140, 13, 0, 0, 6, 0,
|
||||
68, 88, 66, 67, 159, 101,
|
||||
17, 163, 1, 25, 162, 203,
|
||||
87, 30, 32, 90, 1, 126,
|
||||
212, 108, 1, 0, 0, 0,
|
||||
16, 13, 0, 0, 6, 0,
|
||||
0, 0, 56, 0, 0, 0,
|
||||
232, 10, 0, 0, 28, 11,
|
||||
0, 0, 80, 11, 0, 0,
|
||||
228, 11, 0, 0, 240, 12,
|
||||
108, 10, 0, 0, 160, 10,
|
||||
0, 0, 212, 10, 0, 0,
|
||||
104, 11, 0, 0, 116, 12,
|
||||
0, 0, 82, 68, 69, 70,
|
||||
168, 10, 0, 0, 1, 0,
|
||||
44, 10, 0, 0, 1, 0,
|
||||
0, 0, 120, 0, 0, 0,
|
||||
1, 0, 0, 0, 60, 0,
|
||||
0, 0, 1, 5, 83, 72,
|
||||
0, 5, 0, 0, 126, 10,
|
||||
0, 5, 0, 0, 2, 10,
|
||||
0, 0, 19, 19, 68, 37,
|
||||
60, 0, 0, 0, 24, 0,
|
||||
0, 0, 40, 0, 0, 0,
|
||||
|
@ -143,534 +141,513 @@ const BYTE discrete_triangle_hs[] =
|
|||
121, 115, 116, 101, 109, 95,
|
||||
99, 98, 117, 102, 102, 101,
|
||||
114, 0, 171, 171, 100, 0,
|
||||
0, 0, 32, 0, 0, 0,
|
||||
144, 0, 0, 0, 224, 1,
|
||||
0, 0, 30, 0, 0, 0,
|
||||
144, 0, 0, 0, 208, 1,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 144, 5,
|
||||
0, 0, 0, 0, 64, 5,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
4, 0, 0, 0, 0, 0,
|
||||
0, 0, 160, 5, 0, 0,
|
||||
0, 0, 80, 5, 0, 0,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 196, 5, 0, 0,
|
||||
0, 0, 116, 5, 0, 0,
|
||||
4, 0, 0, 0, 8, 0,
|
||||
0, 0, 2, 0, 0, 0,
|
||||
232, 5, 0, 0, 0, 0,
|
||||
152, 5, 0, 0, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
12, 6, 0, 0, 12, 0,
|
||||
188, 5, 0, 0, 12, 0,
|
||||
0, 0, 4, 0, 0, 0,
|
||||
0, 0, 0, 0, 160, 5,
|
||||
0, 0, 0, 0, 80, 5,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 39, 6,
|
||||
0, 0, 0, 0, 215, 5,
|
||||
0, 0, 16, 0, 0, 0,
|
||||
4, 0, 0, 0, 0, 0,
|
||||
0, 0, 160, 5, 0, 0,
|
||||
0, 0, 80, 5, 0, 0,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 62, 6, 0, 0,
|
||||
0, 0, 238, 5, 0, 0,
|
||||
20, 0, 0, 0, 4, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
160, 5, 0, 0, 0, 0,
|
||||
80, 5, 0, 0, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
85, 6, 0, 0, 24, 0,
|
||||
5, 6, 0, 0, 24, 0,
|
||||
0, 0, 8, 0, 0, 0,
|
||||
0, 0, 0, 0, 116, 6,
|
||||
0, 0, 0, 0, 36, 6,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 152, 6,
|
||||
0, 0, 0, 0, 72, 6,
|
||||
0, 0, 32, 0, 0, 0,
|
||||
96, 0, 0, 0, 0, 0,
|
||||
0, 0, 180, 6, 0, 0,
|
||||
0, 0, 100, 6, 0, 0,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 216, 6, 0, 0,
|
||||
0, 0, 136, 6, 0, 0,
|
||||
128, 0, 0, 0, 12, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
236, 6, 0, 0, 0, 0,
|
||||
156, 6, 0, 0, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
16, 7, 0, 0, 140, 0,
|
||||
192, 6, 0, 0, 140, 0,
|
||||
0, 0, 4, 0, 0, 0,
|
||||
0, 0, 0, 0, 52, 7,
|
||||
0, 0, 0, 0, 228, 6,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 88, 7,
|
||||
0, 0, 0, 0, 8, 7,
|
||||
0, 0, 144, 0, 0, 0,
|
||||
12, 0, 0, 0, 0, 0,
|
||||
0, 0, 236, 6, 0, 0,
|
||||
0, 0, 156, 6, 0, 0,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 102, 7, 0, 0,
|
||||
0, 0, 22, 7, 0, 0,
|
||||
156, 0, 0, 0, 4, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
52, 7, 0, 0, 0, 0,
|
||||
228, 6, 0, 0, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
131, 7, 0, 0, 160, 0,
|
||||
51, 7, 0, 0, 160, 0,
|
||||
0, 0, 8, 0, 0, 0,
|
||||
0, 0, 0, 0, 232, 5,
|
||||
0, 0, 0, 0, 152, 5,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 158, 7,
|
||||
0, 0, 0, 0, 78, 7,
|
||||
0, 0, 168, 0, 0, 0,
|
||||
8, 0, 0, 0, 0, 0,
|
||||
0, 0, 232, 5, 0, 0,
|
||||
0, 0, 152, 5, 0, 0,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 197, 7, 0, 0,
|
||||
176, 0, 0, 0, 4, 0,
|
||||
0, 0, 117, 7, 0, 0,
|
||||
176, 0, 0, 0, 32, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
160, 5, 0, 0, 0, 0,
|
||||
152, 7, 0, 0, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
230, 7, 0, 0, 180, 0,
|
||||
188, 7, 0, 0, 208, 0,
|
||||
0, 0, 4, 0, 0, 0,
|
||||
0, 0, 0, 0, 160, 5,
|
||||
0, 0, 0, 0, 80, 5,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 246, 7,
|
||||
0, 0, 184, 0, 0, 0,
|
||||
0, 0, 0, 0, 209, 7,
|
||||
0, 0, 212, 0, 0, 0,
|
||||
8, 0, 0, 0, 0, 0,
|
||||
0, 0, 116, 6, 0, 0,
|
||||
0, 0, 36, 6, 0, 0,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 11, 8, 0, 0,
|
||||
192, 0, 0, 0, 32, 0,
|
||||
0, 0, 230, 7, 0, 0,
|
||||
220, 0, 0, 0, 4, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
44, 8, 0, 0, 0, 0,
|
||||
228, 6, 0, 0, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
80, 8, 0, 0, 224, 0,
|
||||
254, 7, 0, 0, 224, 0,
|
||||
0, 0, 4, 0, 0, 0,
|
||||
0, 0, 0, 0, 160, 5,
|
||||
0, 0, 0, 0, 80, 5,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 101, 8,
|
||||
0, 0, 0, 0, 15, 8,
|
||||
0, 0, 228, 0, 0, 0,
|
||||
4, 0, 0, 0, 0, 0,
|
||||
0, 0, 52, 7, 0, 0,
|
||||
0, 0, 80, 5, 0, 0,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 125, 8, 0, 0,
|
||||
0, 0, 55, 8, 0, 0,
|
||||
232, 0, 0, 0, 4, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
160, 5, 0, 0, 0, 0,
|
||||
80, 5, 0, 0, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
142, 8, 0, 0, 236, 0,
|
||||
0, 0, 4, 0, 0, 0,
|
||||
0, 0, 0, 0, 160, 5,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 182, 8,
|
||||
0, 0, 240, 0, 0, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
0, 0, 200, 8, 0, 0,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 236, 8, 0, 0,
|
||||
0, 1, 0, 0, 8, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
232, 5, 0, 0, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
7, 9, 0, 0, 8, 1,
|
||||
0, 0, 8, 0, 0, 0,
|
||||
0, 0, 0, 0, 232, 5,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 33, 9,
|
||||
0, 0, 16, 1, 0, 0,
|
||||
4, 0, 0, 0, 0, 0,
|
||||
0, 0, 160, 5, 0, 0,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 67, 9, 0, 0,
|
||||
32, 1, 0, 0, 32, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
84, 9, 0, 0, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
120, 9, 0, 0, 64, 1,
|
||||
89, 8, 0, 0, 240, 0,
|
||||
0, 0, 16, 0, 0, 0,
|
||||
0, 0, 0, 0, 152, 9,
|
||||
0, 0, 0, 0, 108, 8,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 188, 9,
|
||||
0, 0, 80, 1, 0, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
0, 0, 152, 9, 0, 0,
|
||||
0, 0, 0, 0, 144, 8,
|
||||
0, 0, 0, 1, 0, 0,
|
||||
8, 0, 0, 0, 0, 0,
|
||||
0, 0, 152, 5, 0, 0,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 213, 9, 0, 0,
|
||||
96, 1, 0, 0, 64, 0,
|
||||
0, 0, 171, 8, 0, 0,
|
||||
8, 1, 0, 0, 8, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
232, 9, 0, 0, 0, 0,
|
||||
152, 5, 0, 0, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
12, 10, 0, 0, 160, 1,
|
||||
197, 8, 0, 0, 16, 1,
|
||||
0, 0, 32, 0, 0, 0,
|
||||
0, 0, 0, 0, 36, 10,
|
||||
0, 0, 0, 0, 216, 8,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 72, 10,
|
||||
0, 0, 192, 1, 0, 0,
|
||||
0, 0, 0, 0, 252, 8,
|
||||
0, 0, 48, 1, 0, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
0, 0, 152, 9, 0, 0,
|
||||
0, 0, 28, 9, 0, 0,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 102, 10, 0, 0,
|
||||
208, 1, 0, 0, 16, 0,
|
||||
0, 0, 64, 9, 0, 0,
|
||||
64, 1, 0, 0, 16, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
200, 8, 0, 0, 0, 0,
|
||||
28, 9, 0, 0, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
120, 101, 95, 102, 108, 97,
|
||||
103, 115, 0, 100, 119, 111,
|
||||
114, 100, 0, 171, 0, 0,
|
||||
19, 0, 1, 0, 1, 0,
|
||||
89, 9, 0, 0, 80, 1,
|
||||
0, 0, 64, 0, 0, 0,
|
||||
0, 0, 0, 0, 108, 9,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 144, 9,
|
||||
0, 0, 144, 1, 0, 0,
|
||||
32, 0, 0, 0, 0, 0,
|
||||
0, 0, 168, 9, 0, 0,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 204, 9, 0, 0,
|
||||
176, 1, 0, 0, 16, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
28, 9, 0, 0, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
234, 9, 0, 0, 192, 1,
|
||||
0, 0, 16, 0, 0, 0,
|
||||
0, 0, 0, 0, 108, 8,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 120, 101,
|
||||
95, 102, 108, 97, 103, 115,
|
||||
0, 100, 119, 111, 114, 100,
|
||||
0, 171, 0, 0, 19, 0,
|
||||
1, 0, 1, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
153, 5, 0, 0, 120, 101,
|
||||
95, 116, 101, 115, 115, 101,
|
||||
108, 108, 97, 116, 105, 111,
|
||||
110, 95, 102, 97, 99, 116,
|
||||
111, 114, 95, 114, 97, 110,
|
||||
103, 101, 0, 102, 108, 111,
|
||||
97, 116, 50, 0, 1, 0,
|
||||
3, 0, 1, 0, 2, 0,
|
||||
0, 0, 0, 0, 73, 5,
|
||||
0, 0, 120, 101, 95, 116,
|
||||
101, 115, 115, 101, 108, 108,
|
||||
97, 116, 105, 111, 110, 95,
|
||||
102, 97, 99, 116, 111, 114,
|
||||
95, 114, 97, 110, 103, 101,
|
||||
0, 102, 108, 111, 97, 116,
|
||||
50, 0, 1, 0, 3, 0,
|
||||
1, 0, 2, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
225, 5, 0, 0, 120, 101,
|
||||
95, 108, 105, 110, 101, 95,
|
||||
108, 111, 111, 112, 95, 99,
|
||||
108, 111, 115, 105, 110, 103,
|
||||
95, 105, 110, 100, 101, 120,
|
||||
0, 120, 101, 95, 118, 101,
|
||||
114, 116, 101, 120, 95, 105,
|
||||
110, 100, 101, 120, 95, 101,
|
||||
110, 100, 105, 97, 110, 0,
|
||||
120, 101, 95, 118, 101, 114,
|
||||
116, 101, 120, 95, 105, 110,
|
||||
100, 101, 120, 95, 111, 102,
|
||||
102, 115, 101, 116, 0, 120,
|
||||
0, 0, 0, 0, 145, 5,
|
||||
0, 0, 120, 101, 95, 108,
|
||||
105, 110, 101, 95, 108, 111,
|
||||
111, 112, 95, 99, 108, 111,
|
||||
115, 105, 110, 103, 95, 105,
|
||||
110, 100, 101, 120, 0, 120,
|
||||
101, 95, 118, 101, 114, 116,
|
||||
101, 120, 95, 105, 110, 100,
|
||||
101, 120, 95, 109, 105, 110,
|
||||
95, 109, 97, 120, 0, 117,
|
||||
105, 110, 116, 50, 0, 171,
|
||||
1, 0, 19, 0, 1, 0,
|
||||
2, 0, 0, 0, 0, 0,
|
||||
101, 120, 95, 101, 110, 100,
|
||||
105, 97, 110, 0, 120, 101,
|
||||
95, 118, 101, 114, 116, 101,
|
||||
120, 95, 105, 110, 100, 101,
|
||||
120, 95, 111, 102, 102, 115,
|
||||
101, 116, 0, 120, 101, 95,
|
||||
118, 101, 114, 116, 101, 120,
|
||||
95, 105, 110, 100, 101, 120,
|
||||
95, 109, 105, 110, 95, 109,
|
||||
97, 120, 0, 117, 105, 110,
|
||||
116, 50, 0, 171, 1, 0,
|
||||
19, 0, 1, 0, 2, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 109, 6, 0, 0,
|
||||
120, 101, 95, 117, 115, 101,
|
||||
114, 95, 99, 108, 105, 112,
|
||||
95, 112, 108, 97, 110, 101,
|
||||
115, 0, 102, 108, 111, 97,
|
||||
116, 52, 0, 171, 1, 0,
|
||||
3, 0, 1, 0, 4, 0,
|
||||
6, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
29, 6, 0, 0, 120, 101,
|
||||
95, 117, 115, 101, 114, 95,
|
||||
99, 108, 105, 112, 95, 112,
|
||||
108, 97, 110, 101, 115, 0,
|
||||
102, 108, 111, 97, 116, 52,
|
||||
0, 171, 1, 0, 3, 0,
|
||||
1, 0, 4, 0, 6, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
172, 6, 0, 0, 120, 101,
|
||||
95, 110, 100, 99, 95, 115,
|
||||
99, 97, 108, 101, 0, 102,
|
||||
108, 111, 97, 116, 51, 0,
|
||||
1, 0, 3, 0, 1, 0,
|
||||
3, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 92, 6,
|
||||
0, 0, 120, 101, 95, 110,
|
||||
100, 99, 95, 115, 99, 97,
|
||||
108, 101, 0, 102, 108, 111,
|
||||
97, 116, 51, 0, 1, 0,
|
||||
3, 0, 1, 0, 3, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 229, 6, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
149, 6, 0, 0, 120, 101,
|
||||
95, 112, 111, 105, 110, 116,
|
||||
95, 118, 101, 114, 116, 101,
|
||||
120, 95, 100, 105, 97, 109,
|
||||
101, 116, 101, 114, 95, 109,
|
||||
105, 110, 0, 102, 108, 111,
|
||||
97, 116, 0, 171, 0, 0,
|
||||
3, 0, 1, 0, 1, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
221, 6, 0, 0, 120, 101,
|
||||
95, 110, 100, 99, 95, 111,
|
||||
102, 102, 115, 101, 116, 0,
|
||||
120, 101, 95, 112, 111, 105,
|
||||
110, 116, 95, 118, 101, 114,
|
||||
116, 101, 120, 95, 100, 105,
|
||||
97, 109, 101, 116, 101, 114,
|
||||
95, 109, 105, 110, 0, 102,
|
||||
108, 111, 97, 116, 0, 171,
|
||||
0, 0, 3, 0, 1, 0,
|
||||
1, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 45, 7, 0, 0,
|
||||
120, 101, 95, 110, 100, 99,
|
||||
95, 111, 102, 102, 115, 101,
|
||||
116, 0, 120, 101, 95, 112,
|
||||
111, 105, 110, 116, 95, 118,
|
||||
101, 114, 116, 101, 120, 95,
|
||||
95, 109, 97, 120, 0, 120,
|
||||
101, 95, 112, 111, 105, 110,
|
||||
116, 95, 99, 111, 110, 115,
|
||||
116, 97, 110, 116, 95, 100,
|
||||
105, 97, 109, 101, 116, 101,
|
||||
114, 0, 120, 101, 95, 112,
|
||||
111, 105, 110, 116, 95, 115,
|
||||
99, 114, 101, 101, 110, 95,
|
||||
100, 105, 97, 109, 101, 116,
|
||||
101, 114, 95, 109, 97, 120,
|
||||
0, 120, 101, 95, 112, 111,
|
||||
105, 110, 116, 95, 99, 111,
|
||||
110, 115, 116, 97, 110, 116,
|
||||
95, 100, 105, 97, 109, 101,
|
||||
116, 101, 114, 0, 120, 101,
|
||||
95, 112, 111, 105, 110, 116,
|
||||
95, 115, 99, 114, 101, 101,
|
||||
110, 95, 100, 105, 97, 109,
|
||||
101, 116, 101, 114, 95, 116,
|
||||
111, 95, 110, 100, 99, 95,
|
||||
114, 97, 100, 105, 117, 115,
|
||||
0, 120, 101, 95, 105, 110,
|
||||
116, 101, 114, 112, 111, 108,
|
||||
97, 116, 111, 114, 95, 115,
|
||||
97, 109, 112, 108, 105, 110,
|
||||
103, 95, 112, 97, 116, 116,
|
||||
101, 114, 110, 0, 120, 101,
|
||||
95, 112, 115, 95, 112, 97,
|
||||
114, 97, 109, 95, 103, 101,
|
||||
110, 0, 120, 101, 95, 115,
|
||||
97, 109, 112, 108, 101, 95,
|
||||
99, 111, 117, 110, 116, 95,
|
||||
108, 111, 103, 50, 0, 120,
|
||||
101, 114, 95, 116, 111, 95,
|
||||
110, 100, 99, 95, 114, 97,
|
||||
100, 105, 117, 115, 0, 120,
|
||||
101, 95, 116, 101, 120, 116,
|
||||
117, 114, 101, 95, 115, 119,
|
||||
105, 122, 122, 108, 101, 100,
|
||||
95, 115, 105, 103, 110, 115,
|
||||
0, 117, 105, 110, 116, 52,
|
||||
0, 171, 1, 0, 19, 0,
|
||||
1, 0, 4, 0, 2, 0,
|
||||
0, 171, 171, 171, 1, 0,
|
||||
19, 0, 1, 0, 4, 0,
|
||||
2, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 37, 8,
|
||||
0, 0, 120, 101, 95, 116,
|
||||
101, 120, 116, 117, 114, 101,
|
||||
115, 95, 114, 101, 115, 111,
|
||||
108, 118, 101, 100, 0, 120,
|
||||
101, 95, 97, 108, 112, 104,
|
||||
97, 95, 116, 101, 115, 116,
|
||||
95, 114, 101, 102, 101, 114,
|
||||
101, 110, 99, 101, 0, 120,
|
||||
101, 95, 97, 108, 112, 104,
|
||||
97, 95, 116, 111, 95, 109,
|
||||
97, 115, 107, 0, 120, 101,
|
||||
95, 101, 100, 114, 97, 109,
|
||||
95, 51, 50, 98, 112, 112,
|
||||
95, 116, 105, 108, 101, 95,
|
||||
112, 105, 116, 99, 104, 95,
|
||||
100, 119, 111, 114, 100, 115,
|
||||
95, 115, 99, 97, 108, 101,
|
||||
100, 0, 120, 101, 95, 99,
|
||||
111, 108, 111, 114, 95, 101,
|
||||
120, 112, 95, 98, 105, 97,
|
||||
115, 0, 1, 0, 3, 0,
|
||||
1, 0, 4, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 172, 6,
|
||||
0, 0, 120, 101, 95, 101,
|
||||
100, 114, 97, 109, 95, 112,
|
||||
111, 108, 121, 95, 111, 102,
|
||||
102, 115, 101, 116, 95, 102,
|
||||
114, 111, 110, 116, 0, 120,
|
||||
101, 95, 101, 100, 114, 97,
|
||||
109, 95, 112, 111, 108, 121,
|
||||
95, 111, 102, 102, 115, 101,
|
||||
116, 95, 98, 97, 99, 107,
|
||||
143, 7, 0, 0, 120, 101,
|
||||
95, 116, 101, 120, 116, 117,
|
||||
114, 101, 115, 95, 114, 101,
|
||||
115, 111, 108, 118, 101, 100,
|
||||
0, 120, 101, 95, 115, 97,
|
||||
109, 112, 108, 101, 95, 99,
|
||||
111, 117, 110, 116, 95, 108,
|
||||
111, 103, 50, 0, 120, 101,
|
||||
95, 97, 108, 112, 104, 97,
|
||||
95, 116, 101, 115, 116, 95,
|
||||
114, 101, 102, 101, 114, 101,
|
||||
110, 99, 101, 0, 120, 101,
|
||||
95, 97, 108, 112, 104, 97,
|
||||
95, 116, 111, 95, 109, 97,
|
||||
115, 107, 0, 120, 101, 95,
|
||||
101, 100, 114, 97, 109, 95,
|
||||
51, 50, 98, 112, 112, 95,
|
||||
116, 105, 108, 101, 95, 112,
|
||||
105, 116, 99, 104, 95, 100,
|
||||
119, 111, 114, 100, 115, 95,
|
||||
115, 99, 97, 108, 101, 100,
|
||||
0, 120, 101, 95, 101, 100,
|
||||
114, 97, 109, 95, 100, 101,
|
||||
112, 116, 104, 95, 98, 97,
|
||||
115, 101, 95, 100, 119, 111,
|
||||
114, 100, 115, 95, 115, 99,
|
||||
97, 108, 101, 100, 0, 120,
|
||||
101, 95, 99, 111, 108, 111,
|
||||
114, 95, 101, 120, 112, 95,
|
||||
98, 105, 97, 115, 0, 171,
|
||||
1, 0, 3, 0, 1, 0,
|
||||
4, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 92, 6, 0, 0,
|
||||
120, 101, 95, 101, 100, 114,
|
||||
97, 109, 95, 112, 111, 108,
|
||||
121, 95, 111, 102, 102, 115,
|
||||
101, 116, 95, 102, 114, 111,
|
||||
110, 116, 0, 120, 101, 95,
|
||||
101, 100, 114, 97, 109, 95,
|
||||
112, 111, 108, 121, 95, 111,
|
||||
102, 102, 115, 101, 116, 95,
|
||||
98, 97, 99, 107, 0, 120,
|
||||
101, 95, 101, 100, 114, 97,
|
||||
109, 95, 115, 116, 101, 110,
|
||||
99, 105, 108, 0, 1, 0,
|
||||
99, 105, 108, 0, 171, 171,
|
||||
1, 0, 19, 0, 1, 0,
|
||||
4, 0, 2, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 143, 7, 0, 0,
|
||||
120, 101, 95, 101, 100, 114,
|
||||
97, 109, 95, 114, 116, 95,
|
||||
98, 97, 115, 101, 95, 100,
|
||||
119, 111, 114, 100, 115, 95,
|
||||
115, 99, 97, 108, 101, 100,
|
||||
0, 171, 1, 0, 19, 0,
|
||||
1, 0, 4, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 143, 7,
|
||||
0, 0, 120, 101, 95, 101,
|
||||
100, 114, 97, 109, 95, 114,
|
||||
116, 95, 102, 111, 114, 109,
|
||||
97, 116, 95, 102, 108, 97,
|
||||
103, 115, 0, 120, 101, 95,
|
||||
101, 100, 114, 97, 109, 95,
|
||||
114, 116, 95, 99, 108, 97,
|
||||
109, 112, 0, 171, 1, 0,
|
||||
3, 0, 1, 0, 4, 0,
|
||||
4, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
92, 6, 0, 0, 120, 101,
|
||||
95, 101, 100, 114, 97, 109,
|
||||
95, 114, 116, 95, 107, 101,
|
||||
101, 112, 95, 109, 97, 115,
|
||||
107, 0, 171, 171, 1, 0,
|
||||
19, 0, 1, 0, 4, 0,
|
||||
2, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
37, 8, 0, 0, 120, 101,
|
||||
143, 7, 0, 0, 120, 101,
|
||||
95, 101, 100, 114, 97, 109,
|
||||
95, 114, 116, 95, 98, 97,
|
||||
115, 101, 95, 100, 119, 111,
|
||||
114, 100, 115, 95, 115, 99,
|
||||
97, 108, 101, 100, 0, 171,
|
||||
1, 0, 19, 0, 1, 0,
|
||||
4, 0, 0, 0, 0, 0,
|
||||
95, 114, 116, 95, 98, 108,
|
||||
101, 110, 100, 95, 102, 97,
|
||||
99, 116, 111, 114, 115, 95,
|
||||
111, 112, 115, 0, 120, 101,
|
||||
95, 101, 100, 114, 97, 109,
|
||||
95, 98, 108, 101, 110, 100,
|
||||
95, 99, 111, 110, 115, 116,
|
||||
97, 110, 116, 0, 77, 105,
|
||||
99, 114, 111, 115, 111, 102,
|
||||
116, 32, 40, 82, 41, 32,
|
||||
72, 76, 83, 76, 32, 83,
|
||||
104, 97, 100, 101, 114, 32,
|
||||
67, 111, 109, 112, 105, 108,
|
||||
101, 114, 32, 49, 48, 46,
|
||||
49, 0, 171, 171, 73, 83,
|
||||
71, 78, 44, 0, 0, 0,
|
||||
1, 0, 0, 0, 8, 0,
|
||||
0, 0, 32, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 37, 8, 0, 0,
|
||||
120, 101, 95, 101, 100, 114,
|
||||
97, 109, 95, 114, 116, 95,
|
||||
102, 111, 114, 109, 97, 116,
|
||||
95, 102, 108, 97, 103, 115,
|
||||
0, 120, 101, 95, 101, 100,
|
||||
114, 97, 109, 95, 114, 116,
|
||||
95, 99, 108, 97, 109, 112,
|
||||
0, 171, 1, 0, 3, 0,
|
||||
1, 0, 4, 0, 4, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 172, 6,
|
||||
0, 0, 120, 101, 95, 101,
|
||||
100, 114, 97, 109, 95, 114,
|
||||
116, 95, 107, 101, 101, 112,
|
||||
95, 109, 97, 115, 107, 0,
|
||||
171, 171, 1, 0, 19, 0,
|
||||
1, 0, 4, 0, 2, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 37, 8,
|
||||
0, 0, 120, 101, 95, 101,
|
||||
100, 114, 97, 109, 95, 114,
|
||||
116, 95, 98, 108, 101, 110,
|
||||
100, 95, 102, 97, 99, 116,
|
||||
111, 114, 115, 95, 111, 112,
|
||||
115, 0, 120, 101, 95, 101,
|
||||
100, 114, 97, 109, 95, 98,
|
||||
108, 101, 110, 100, 95, 99,
|
||||
111, 110, 115, 116, 97, 110,
|
||||
116, 0, 77, 105, 99, 114,
|
||||
111, 115, 111, 102, 116, 32,
|
||||
40, 82, 41, 32, 72, 76,
|
||||
83, 76, 32, 83, 104, 97,
|
||||
100, 101, 114, 32, 67, 111,
|
||||
109, 112, 105, 108, 101, 114,
|
||||
32, 49, 48, 46, 49, 0,
|
||||
171, 171, 73, 83, 71, 78,
|
||||
0, 0, 3, 0, 0, 0,
|
||||
0, 0, 0, 0, 1, 1,
|
||||
0, 0, 88, 69, 86, 69,
|
||||
82, 84, 69, 88, 73, 68,
|
||||
0, 171, 79, 83, 71, 78,
|
||||
44, 0, 0, 0, 1, 0,
|
||||
0, 0, 8, 0, 0, 0,
|
||||
32, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
3, 0, 0, 0, 0, 0,
|
||||
0, 0, 1, 1, 0, 0,
|
||||
0, 0, 1, 14, 0, 0,
|
||||
88, 69, 86, 69, 82, 84,
|
||||
69, 88, 73, 68, 0, 171,
|
||||
79, 83, 71, 78, 44, 0,
|
||||
80, 67, 83, 71, 140, 0,
|
||||
0, 0, 4, 0, 0, 0,
|
||||
8, 0, 0, 0, 104, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
13, 0, 0, 0, 3, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
1, 14, 0, 0, 104, 0,
|
||||
0, 0, 1, 0, 0, 0,
|
||||
8, 0, 0, 0, 32, 0,
|
||||
13, 0, 0, 0, 3, 0,
|
||||
0, 0, 1, 0, 0, 0,
|
||||
1, 14, 0, 0, 104, 0,
|
||||
0, 0, 2, 0, 0, 0,
|
||||
13, 0, 0, 0, 3, 0,
|
||||
0, 0, 2, 0, 0, 0,
|
||||
1, 14, 0, 0, 118, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 3, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
1, 14, 0, 0, 88, 69,
|
||||
86, 69, 82, 84, 69, 88,
|
||||
73, 68, 0, 171, 80, 67,
|
||||
83, 71, 140, 0, 0, 0,
|
||||
4, 0, 0, 0, 8, 0,
|
||||
0, 0, 104, 0, 0, 0,
|
||||
0, 0, 0, 0, 13, 0,
|
||||
14, 0, 0, 0, 3, 0,
|
||||
0, 0, 3, 0, 0, 0,
|
||||
0, 0, 0, 0, 1, 14,
|
||||
0, 0, 104, 0, 0, 0,
|
||||
1, 0, 0, 0, 13, 0,
|
||||
0, 0, 3, 0, 0, 0,
|
||||
1, 0, 0, 0, 1, 14,
|
||||
0, 0, 104, 0, 0, 0,
|
||||
2, 0, 0, 0, 13, 0,
|
||||
0, 0, 3, 0, 0, 0,
|
||||
2, 0, 0, 0, 1, 14,
|
||||
0, 0, 118, 0, 0, 0,
|
||||
0, 0, 0, 0, 14, 0,
|
||||
0, 0, 3, 0, 0, 0,
|
||||
3, 0, 0, 0, 1, 14,
|
||||
0, 0, 83, 86, 95, 84,
|
||||
101, 115, 115, 70, 97, 99,
|
||||
116, 111, 114, 0, 83, 86,
|
||||
95, 73, 110, 115, 105, 100,
|
||||
101, 84, 101, 115, 115, 70,
|
||||
1, 14, 0, 0, 83, 86,
|
||||
95, 84, 101, 115, 115, 70,
|
||||
97, 99, 116, 111, 114, 0,
|
||||
171, 171, 83, 72, 69, 88,
|
||||
4, 1, 0, 0, 81, 0,
|
||||
3, 0, 65, 0, 0, 0,
|
||||
113, 0, 0, 1, 147, 24,
|
||||
0, 1, 148, 24, 0, 1,
|
||||
149, 16, 0, 1, 150, 8,
|
||||
0, 1, 151, 24, 0, 1,
|
||||
106, 8, 0, 1, 89, 0,
|
||||
0, 7, 70, 142, 48, 0,
|
||||
83, 86, 95, 73, 110, 115,
|
||||
105, 100, 101, 84, 101, 115,
|
||||
115, 70, 97, 99, 116, 111,
|
||||
114, 0, 171, 171, 83, 72,
|
||||
69, 88, 4, 1, 0, 0,
|
||||
81, 0, 3, 0, 65, 0,
|
||||
0, 0, 113, 0, 0, 1,
|
||||
147, 24, 0, 1, 148, 24,
|
||||
0, 1, 149, 16, 0, 1,
|
||||
150, 8, 0, 1, 151, 24,
|
||||
0, 1, 106, 8, 0, 1,
|
||||
89, 0, 0, 7, 70, 142,
|
||||
48, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
1, 0, 0, 0, 0, 0,
|
||||
0, 0, 115, 0, 0, 1,
|
||||
153, 0, 0, 2, 3, 0,
|
||||
0, 0, 95, 0, 0, 2,
|
||||
0, 112, 1, 0, 103, 0,
|
||||
0, 4, 18, 32, 16, 0,
|
||||
0, 0, 0, 0, 17, 0,
|
||||
0, 0, 103, 0, 0, 4,
|
||||
18, 32, 16, 0, 1, 0,
|
||||
0, 0, 18, 0, 0, 0,
|
||||
0, 0, 1, 0, 0, 0,
|
||||
0, 0, 0, 0, 115, 0,
|
||||
0, 1, 153, 0, 0, 2,
|
||||
3, 0, 0, 0, 95, 0,
|
||||
0, 2, 0, 112, 1, 0,
|
||||
103, 0, 0, 4, 18, 32,
|
||||
16, 0, 2, 0, 0, 0,
|
||||
19, 0, 0, 0, 104, 0,
|
||||
0, 2, 1, 0, 0, 0,
|
||||
91, 0, 0, 4, 18, 32,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
3, 0, 0, 0, 54, 0,
|
||||
0, 4, 18, 0, 16, 0,
|
||||
0, 0, 0, 0, 10, 112,
|
||||
1, 0, 54, 0, 0, 8,
|
||||
18, 32, 144, 0, 10, 0,
|
||||
17, 0, 0, 0, 103, 0,
|
||||
0, 4, 18, 32, 16, 0,
|
||||
1, 0, 0, 0, 18, 0,
|
||||
0, 0, 103, 0, 0, 4,
|
||||
18, 32, 16, 0, 2, 0,
|
||||
0, 0, 19, 0, 0, 0,
|
||||
104, 0, 0, 2, 1, 0,
|
||||
0, 0, 91, 0, 0, 4,
|
||||
18, 32, 16, 0, 0, 0,
|
||||
0, 0, 3, 0, 0, 0,
|
||||
54, 0, 0, 4, 18, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
10, 112, 1, 0, 54, 0,
|
||||
0, 8, 18, 32, 144, 0,
|
||||
10, 0, 16, 0, 0, 0,
|
||||
0, 0, 42, 128, 48, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
62, 0, 0, 1, 115, 0,
|
||||
0, 1, 103, 0, 0, 4,
|
||||
18, 32, 16, 0, 3, 0,
|
||||
0, 0, 20, 0, 0, 0,
|
||||
54, 0, 0, 7, 18, 32,
|
||||
16, 0, 3, 0, 0, 0,
|
||||
42, 128, 48, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 62, 0,
|
||||
0, 1, 115, 0, 0, 1,
|
||||
103, 0, 0, 4, 18, 32,
|
||||
16, 0, 3, 0, 0, 0,
|
||||
20, 0, 0, 0, 54, 0,
|
||||
0, 7, 18, 32, 16, 0,
|
||||
3, 0, 0, 0, 42, 128,
|
||||
48, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 62, 0, 0, 1,
|
||||
83, 84, 65, 84, 148, 0,
|
||||
0, 0, 5, 0, 0, 0,
|
||||
1, 0, 0, 0, 0, 0,
|
||||
0, 0, 4, 0, 0, 0,
|
||||
0, 1, 83, 84, 65, 84,
|
||||
148, 0, 0, 0, 5, 0,
|
||||
0, 0, 1, 0, 0, 0,
|
||||
0, 0, 0, 0, 4, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
2, 0, 0, 0, 0, 0,
|
||||
0, 0, 2, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
|
@ -678,16 +655,17 @@ const BYTE discrete_triangle_hs[] =
|
|||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
3, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 10, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 3, 0, 0, 0,
|
||||
3, 0, 0, 0, 1, 0,
|
||||
0, 0, 2, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0
|
||||
0, 0, 0, 0, 0, 0,
|
||||
10, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 3, 0,
|
||||
0, 0, 3, 0, 0, 0,
|
||||
1, 0, 0, 0, 2, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0
|
||||
};
|
||||
|
|
|
@ -21,25 +21,23 @@
|
|||
// float xe_point_vertex_diameter_max;// Offset: 156 Size: 4 [unused]
|
||||
// float2 xe_point_constant_diameter; // Offset: 160 Size: 8 [unused]
|
||||
// float2 xe_point_screen_diameter_to_ndc_radius;// Offset: 168 Size: 8 [unused]
|
||||
// uint xe_interpolator_sampling_pattern;// Offset: 176 Size: 4 [unused]
|
||||
// uint xe_ps_param_gen; // Offset: 180 Size: 4 [unused]
|
||||
// uint2 xe_sample_count_log2; // Offset: 184 Size: 8 [unused]
|
||||
// uint4 xe_texture_swizzled_signs[2];// Offset: 192 Size: 32 [unused]
|
||||
// uint xe_textures_resolved; // Offset: 224 Size: 4 [unused]
|
||||
// float xe_alpha_test_reference; // Offset: 228 Size: 4 [unused]
|
||||
// uint xe_alpha_to_mask; // Offset: 232 Size: 4 [unused]
|
||||
// uint xe_edram_32bpp_tile_pitch_dwords_scaled;// Offset: 236 Size: 4 [unused]
|
||||
// uint4 xe_texture_swizzled_signs[2];// Offset: 176 Size: 32 [unused]
|
||||
// uint xe_textures_resolved; // Offset: 208 Size: 4 [unused]
|
||||
// uint2 xe_sample_count_log2; // Offset: 212 Size: 8 [unused]
|
||||
// float xe_alpha_test_reference; // Offset: 220 Size: 4 [unused]
|
||||
// uint xe_alpha_to_mask; // Offset: 224 Size: 4 [unused]
|
||||
// uint xe_edram_32bpp_tile_pitch_dwords_scaled;// Offset: 228 Size: 4 [unused]
|
||||
// uint xe_edram_depth_base_dwords_scaled;// Offset: 232 Size: 4 [unused]
|
||||
// float4 xe_color_exp_bias; // Offset: 240 Size: 16 [unused]
|
||||
// float2 xe_edram_poly_offset_front; // Offset: 256 Size: 8 [unused]
|
||||
// float2 xe_edram_poly_offset_back; // Offset: 264 Size: 8 [unused]
|
||||
// uint xe_edram_depth_base_dwords_scaled;// Offset: 272 Size: 4 [unused]
|
||||
// uint4 xe_edram_stencil[2]; // Offset: 288 Size: 32 [unused]
|
||||
// uint4 xe_edram_rt_base_dwords_scaled;// Offset: 320 Size: 16 [unused]
|
||||
// uint4 xe_edram_rt_format_flags; // Offset: 336 Size: 16 [unused]
|
||||
// float4 xe_edram_rt_clamp[4]; // Offset: 352 Size: 64 [unused]
|
||||
// uint4 xe_edram_rt_keep_mask[2]; // Offset: 416 Size: 32 [unused]
|
||||
// uint4 xe_edram_rt_blend_factors_ops;// Offset: 448 Size: 16 [unused]
|
||||
// float4 xe_edram_blend_constant; // Offset: 464 Size: 16 [unused]
|
||||
// uint4 xe_edram_stencil[2]; // Offset: 272 Size: 32 [unused]
|
||||
// uint4 xe_edram_rt_base_dwords_scaled;// Offset: 304 Size: 16 [unused]
|
||||
// uint4 xe_edram_rt_format_flags; // Offset: 320 Size: 16 [unused]
|
||||
// float4 xe_edram_rt_clamp[4]; // Offset: 336 Size: 64 [unused]
|
||||
// uint4 xe_edram_rt_keep_mask[2]; // Offset: 400 Size: 32 [unused]
|
||||
// uint4 xe_edram_rt_blend_factors_ops;// Offset: 432 Size: 16 [unused]
|
||||
// float4 xe_edram_blend_constant; // Offset: 448 Size: 16 [unused]
|
||||
//
|
||||
// }
|
||||
//
|
||||
|
@ -94,21 +92,21 @@ ret
|
|||
|
||||
const BYTE tessellation_adaptive_vs[] =
|
||||
{
|
||||
68, 88, 66, 67, 128, 42,
|
||||
162, 230, 93, 182, 94, 173,
|
||||
222, 50, 66, 199, 253, 227,
|
||||
107, 225, 1, 0, 0, 0,
|
||||
240, 13, 0, 0, 5, 0,
|
||||
68, 88, 66, 67, 124, 10,
|
||||
20, 236, 52, 205, 17, 163,
|
||||
29, 96, 4, 68, 69, 43,
|
||||
2, 171, 1, 0, 0, 0,
|
||||
116, 13, 0, 0, 5, 0,
|
||||
0, 0, 52, 0, 0, 0,
|
||||
228, 10, 0, 0, 24, 11,
|
||||
0, 0, 80, 11, 0, 0,
|
||||
84, 13, 0, 0, 82, 68,
|
||||
69, 70, 168, 10, 0, 0,
|
||||
104, 10, 0, 0, 156, 10,
|
||||
0, 0, 212, 10, 0, 0,
|
||||
216, 12, 0, 0, 82, 68,
|
||||
69, 70, 44, 10, 0, 0,
|
||||
1, 0, 0, 0, 120, 0,
|
||||
0, 0, 1, 0, 0, 0,
|
||||
60, 0, 0, 0, 1, 5,
|
||||
254, 255, 0, 5, 0, 0,
|
||||
126, 10, 0, 0, 19, 19,
|
||||
2, 10, 0, 0, 19, 19,
|
||||
68, 37, 60, 0, 0, 0,
|
||||
24, 0, 0, 0, 40, 0,
|
||||
0, 0, 40, 0, 0, 0,
|
||||
|
@ -124,559 +122,539 @@ const BYTE tessellation_adaptive_vs[] =
|
|||
95, 115, 121, 115, 116, 101,
|
||||
109, 95, 99, 98, 117, 102,
|
||||
102, 101, 114, 0, 171, 171,
|
||||
100, 0, 0, 0, 32, 0,
|
||||
100, 0, 0, 0, 30, 0,
|
||||
0, 0, 144, 0, 0, 0,
|
||||
224, 1, 0, 0, 0, 0,
|
||||
208, 1, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
144, 5, 0, 0, 0, 0,
|
||||
64, 5, 0, 0, 0, 0,
|
||||
0, 0, 4, 0, 0, 0,
|
||||
0, 0, 0, 0, 160, 5,
|
||||
0, 0, 0, 0, 80, 5,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 196, 5,
|
||||
0, 0, 0, 0, 116, 5,
|
||||
0, 0, 4, 0, 0, 0,
|
||||
8, 0, 0, 0, 2, 0,
|
||||
0, 0, 232, 5, 0, 0,
|
||||
0, 0, 152, 5, 0, 0,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 12, 6, 0, 0,
|
||||
0, 0, 188, 5, 0, 0,
|
||||
12, 0, 0, 0, 4, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
160, 5, 0, 0, 0, 0,
|
||||
80, 5, 0, 0, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
39, 6, 0, 0, 16, 0,
|
||||
215, 5, 0, 0, 16, 0,
|
||||
0, 0, 4, 0, 0, 0,
|
||||
2, 0, 0, 0, 160, 5,
|
||||
2, 0, 0, 0, 80, 5,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 62, 6,
|
||||
0, 0, 0, 0, 238, 5,
|
||||
0, 0, 20, 0, 0, 0,
|
||||
4, 0, 0, 0, 0, 0,
|
||||
0, 0, 160, 5, 0, 0,
|
||||
0, 0, 80, 5, 0, 0,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 85, 6, 0, 0,
|
||||
0, 0, 5, 6, 0, 0,
|
||||
24, 0, 0, 0, 8, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
116, 6, 0, 0, 0, 0,
|
||||
36, 6, 0, 0, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
152, 6, 0, 0, 32, 0,
|
||||
72, 6, 0, 0, 32, 0,
|
||||
0, 0, 96, 0, 0, 0,
|
||||
0, 0, 0, 0, 180, 6,
|
||||
0, 0, 0, 0, 100, 6,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 216, 6,
|
||||
0, 0, 0, 0, 136, 6,
|
||||
0, 0, 128, 0, 0, 0,
|
||||
12, 0, 0, 0, 0, 0,
|
||||
0, 0, 236, 6, 0, 0,
|
||||
0, 0, 156, 6, 0, 0,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 16, 7, 0, 0,
|
||||
0, 0, 192, 6, 0, 0,
|
||||
140, 0, 0, 0, 4, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
52, 7, 0, 0, 0, 0,
|
||||
228, 6, 0, 0, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
88, 7, 0, 0, 144, 0,
|
||||
8, 7, 0, 0, 144, 0,
|
||||
0, 0, 12, 0, 0, 0,
|
||||
0, 0, 0, 0, 236, 6,
|
||||
0, 0, 0, 0, 156, 6,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 102, 7,
|
||||
0, 0, 0, 0, 22, 7,
|
||||
0, 0, 156, 0, 0, 0,
|
||||
4, 0, 0, 0, 0, 0,
|
||||
0, 0, 52, 7, 0, 0,
|
||||
0, 0, 228, 6, 0, 0,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 131, 7, 0, 0,
|
||||
0, 0, 51, 7, 0, 0,
|
||||
160, 0, 0, 0, 8, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
232, 5, 0, 0, 0, 0,
|
||||
152, 5, 0, 0, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
158, 7, 0, 0, 168, 0,
|
||||
78, 7, 0, 0, 168, 0,
|
||||
0, 0, 8, 0, 0, 0,
|
||||
0, 0, 0, 0, 232, 5,
|
||||
0, 0, 0, 0, 152, 5,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 197, 7,
|
||||
0, 0, 0, 0, 117, 7,
|
||||
0, 0, 176, 0, 0, 0,
|
||||
4, 0, 0, 0, 0, 0,
|
||||
0, 0, 160, 5, 0, 0,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 230, 7, 0, 0,
|
||||
180, 0, 0, 0, 4, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
160, 5, 0, 0, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
246, 7, 0, 0, 184, 0,
|
||||
0, 0, 8, 0, 0, 0,
|
||||
0, 0, 0, 0, 116, 6,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 11, 8,
|
||||
0, 0, 192, 0, 0, 0,
|
||||
32, 0, 0, 0, 0, 0,
|
||||
0, 0, 44, 8, 0, 0,
|
||||
0, 0, 152, 7, 0, 0,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 80, 8, 0, 0,
|
||||
0, 0, 188, 7, 0, 0,
|
||||
208, 0, 0, 0, 4, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
80, 5, 0, 0, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
209, 7, 0, 0, 212, 0,
|
||||
0, 0, 8, 0, 0, 0,
|
||||
0, 0, 0, 0, 36, 6,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 230, 7,
|
||||
0, 0, 220, 0, 0, 0,
|
||||
4, 0, 0, 0, 0, 0,
|
||||
0, 0, 228, 6, 0, 0,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 254, 7, 0, 0,
|
||||
224, 0, 0, 0, 4, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
160, 5, 0, 0, 0, 0,
|
||||
80, 5, 0, 0, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
101, 8, 0, 0, 228, 0,
|
||||
15, 8, 0, 0, 228, 0,
|
||||
0, 0, 4, 0, 0, 0,
|
||||
0, 0, 0, 0, 52, 7,
|
||||
0, 0, 0, 0, 80, 5,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 125, 8,
|
||||
0, 0, 0, 0, 55, 8,
|
||||
0, 0, 232, 0, 0, 0,
|
||||
4, 0, 0, 0, 0, 0,
|
||||
0, 0, 160, 5, 0, 0,
|
||||
0, 0, 80, 5, 0, 0,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 142, 8, 0, 0,
|
||||
236, 0, 0, 0, 4, 0,
|
||||
0, 0, 89, 8, 0, 0,
|
||||
240, 0, 0, 0, 16, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
160, 5, 0, 0, 0, 0,
|
||||
108, 8, 0, 0, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
182, 8, 0, 0, 240, 0,
|
||||
0, 0, 16, 0, 0, 0,
|
||||
0, 0, 0, 0, 200, 8,
|
||||
144, 8, 0, 0, 0, 1,
|
||||
0, 0, 8, 0, 0, 0,
|
||||
0, 0, 0, 0, 152, 5,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 236, 8,
|
||||
0, 0, 0, 1, 0, 0,
|
||||
0, 0, 0, 0, 171, 8,
|
||||
0, 0, 8, 1, 0, 0,
|
||||
8, 0, 0, 0, 0, 0,
|
||||
0, 0, 232, 5, 0, 0,
|
||||
0, 0, 152, 5, 0, 0,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 7, 9, 0, 0,
|
||||
8, 1, 0, 0, 8, 0,
|
||||
0, 0, 197, 8, 0, 0,
|
||||
16, 1, 0, 0, 32, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
232, 5, 0, 0, 0, 0,
|
||||
216, 8, 0, 0, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
33, 9, 0, 0, 16, 1,
|
||||
0, 0, 4, 0, 0, 0,
|
||||
0, 0, 0, 0, 160, 5,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 67, 9,
|
||||
0, 0, 32, 1, 0, 0,
|
||||
32, 0, 0, 0, 0, 0,
|
||||
0, 0, 84, 9, 0, 0,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 120, 9, 0, 0,
|
||||
64, 1, 0, 0, 16, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
152, 9, 0, 0, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
188, 9, 0, 0, 80, 1,
|
||||
252, 8, 0, 0, 48, 1,
|
||||
0, 0, 16, 0, 0, 0,
|
||||
0, 0, 0, 0, 152, 9,
|
||||
0, 0, 0, 0, 28, 9,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 213, 9,
|
||||
0, 0, 96, 1, 0, 0,
|
||||
64, 0, 0, 0, 0, 0,
|
||||
0, 0, 232, 9, 0, 0,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 12, 10, 0, 0,
|
||||
160, 1, 0, 0, 32, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
36, 10, 0, 0, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
72, 10, 0, 0, 192, 1,
|
||||
0, 0, 16, 0, 0, 0,
|
||||
0, 0, 0, 0, 152, 9,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 102, 10,
|
||||
0, 0, 208, 1, 0, 0,
|
||||
0, 0, 0, 0, 64, 9,
|
||||
0, 0, 64, 1, 0, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
0, 0, 200, 8, 0, 0,
|
||||
0, 0, 28, 9, 0, 0,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 120, 101, 95, 102,
|
||||
108, 97, 103, 115, 0, 100,
|
||||
119, 111, 114, 100, 0, 171,
|
||||
0, 0, 19, 0, 1, 0,
|
||||
1, 0, 0, 0, 0, 0,
|
||||
0, 0, 89, 9, 0, 0,
|
||||
80, 1, 0, 0, 64, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
108, 9, 0, 0, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
144, 9, 0, 0, 144, 1,
|
||||
0, 0, 32, 0, 0, 0,
|
||||
0, 0, 0, 0, 168, 9,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 204, 9,
|
||||
0, 0, 176, 1, 0, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
0, 0, 28, 9, 0, 0,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 234, 9, 0, 0,
|
||||
192, 1, 0, 0, 16, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
108, 8, 0, 0, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
120, 101, 95, 102, 108, 97,
|
||||
103, 115, 0, 100, 119, 111,
|
||||
114, 100, 0, 171, 0, 0,
|
||||
19, 0, 1, 0, 1, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 153, 5, 0, 0,
|
||||
120, 101, 95, 116, 101, 115,
|
||||
115, 101, 108, 108, 97, 116,
|
||||
105, 111, 110, 95, 102, 97,
|
||||
99, 116, 111, 114, 95, 114,
|
||||
97, 110, 103, 101, 0, 102,
|
||||
108, 111, 97, 116, 50, 0,
|
||||
1, 0, 3, 0, 1, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
73, 5, 0, 0, 120, 101,
|
||||
95, 116, 101, 115, 115, 101,
|
||||
108, 108, 97, 116, 105, 111,
|
||||
110, 95, 102, 97, 99, 116,
|
||||
111, 114, 95, 114, 97, 110,
|
||||
103, 101, 0, 102, 108, 111,
|
||||
97, 116, 50, 0, 1, 0,
|
||||
3, 0, 1, 0, 2, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
145, 5, 0, 0, 120, 101,
|
||||
95, 108, 105, 110, 101, 95,
|
||||
108, 111, 111, 112, 95, 99,
|
||||
108, 111, 115, 105, 110, 103,
|
||||
95, 105, 110, 100, 101, 120,
|
||||
0, 120, 101, 95, 118, 101,
|
||||
114, 116, 101, 120, 95, 105,
|
||||
110, 100, 101, 120, 95, 101,
|
||||
110, 100, 105, 97, 110, 0,
|
||||
120, 101, 95, 118, 101, 114,
|
||||
116, 101, 120, 95, 105, 110,
|
||||
100, 101, 120, 95, 111, 102,
|
||||
102, 115, 101, 116, 0, 120,
|
||||
101, 95, 118, 101, 114, 116,
|
||||
101, 120, 95, 105, 110, 100,
|
||||
101, 120, 95, 109, 105, 110,
|
||||
95, 109, 97, 120, 0, 117,
|
||||
105, 110, 116, 50, 0, 171,
|
||||
1, 0, 19, 0, 1, 0,
|
||||
2, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 225, 5, 0, 0,
|
||||
120, 101, 95, 108, 105, 110,
|
||||
101, 95, 108, 111, 111, 112,
|
||||
95, 99, 108, 111, 115, 105,
|
||||
110, 103, 95, 105, 110, 100,
|
||||
101, 120, 0, 120, 101, 95,
|
||||
118, 101, 114, 116, 101, 120,
|
||||
95, 105, 110, 100, 101, 120,
|
||||
95, 101, 110, 100, 105, 97,
|
||||
110, 0, 120, 101, 95, 118,
|
||||
101, 114, 116, 101, 120, 95,
|
||||
105, 110, 100, 101, 120, 95,
|
||||
111, 102, 102, 115, 101, 116,
|
||||
0, 120, 101, 95, 118, 101,
|
||||
114, 116, 101, 120, 95, 105,
|
||||
110, 100, 101, 120, 95, 109,
|
||||
105, 110, 95, 109, 97, 120,
|
||||
0, 117, 105, 110, 116, 50,
|
||||
0, 171, 1, 0, 19, 0,
|
||||
1, 0, 2, 0, 0, 0,
|
||||
0, 0, 29, 6, 0, 0,
|
||||
120, 101, 95, 117, 115, 101,
|
||||
114, 95, 99, 108, 105, 112,
|
||||
95, 112, 108, 97, 110, 101,
|
||||
115, 0, 102, 108, 111, 97,
|
||||
116, 52, 0, 171, 1, 0,
|
||||
3, 0, 1, 0, 4, 0,
|
||||
6, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 109, 6,
|
||||
0, 0, 120, 101, 95, 117,
|
||||
115, 101, 114, 95, 99, 108,
|
||||
105, 112, 95, 112, 108, 97,
|
||||
110, 101, 115, 0, 102, 108,
|
||||
111, 97, 116, 52, 0, 171,
|
||||
92, 6, 0, 0, 120, 101,
|
||||
95, 110, 100, 99, 95, 115,
|
||||
99, 97, 108, 101, 0, 102,
|
||||
108, 111, 97, 116, 51, 0,
|
||||
1, 0, 3, 0, 1, 0,
|
||||
4, 0, 6, 0, 0, 0,
|
||||
3, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 172, 6, 0, 0,
|
||||
0, 0, 149, 6, 0, 0,
|
||||
120, 101, 95, 112, 111, 105,
|
||||
110, 116, 95, 118, 101, 114,
|
||||
116, 101, 120, 95, 100, 105,
|
||||
97, 109, 101, 116, 101, 114,
|
||||
95, 109, 105, 110, 0, 102,
|
||||
108, 111, 97, 116, 0, 171,
|
||||
0, 0, 3, 0, 1, 0,
|
||||
1, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 221, 6, 0, 0,
|
||||
120, 101, 95, 110, 100, 99,
|
||||
95, 115, 99, 97, 108, 101,
|
||||
0, 102, 108, 111, 97, 116,
|
||||
51, 0, 1, 0, 3, 0,
|
||||
1, 0, 3, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 229, 6,
|
||||
0, 0, 120, 101, 95, 112,
|
||||
95, 111, 102, 102, 115, 101,
|
||||
116, 0, 120, 101, 95, 112,
|
||||
111, 105, 110, 116, 95, 118,
|
||||
101, 114, 116, 101, 120, 95,
|
||||
100, 105, 97, 109, 101, 116,
|
||||
101, 114, 95, 109, 105, 110,
|
||||
0, 102, 108, 111, 97, 116,
|
||||
0, 171, 0, 0, 3, 0,
|
||||
1, 0, 1, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 45, 7,
|
||||
0, 0, 120, 101, 95, 110,
|
||||
100, 99, 95, 111, 102, 102,
|
||||
115, 101, 116, 0, 120, 101,
|
||||
101, 114, 95, 109, 97, 120,
|
||||
0, 120, 101, 95, 112, 111,
|
||||
105, 110, 116, 95, 99, 111,
|
||||
110, 115, 116, 97, 110, 116,
|
||||
95, 100, 105, 97, 109, 101,
|
||||
116, 101, 114, 0, 120, 101,
|
||||
95, 112, 111, 105, 110, 116,
|
||||
95, 118, 101, 114, 116, 101,
|
||||
120, 95, 100, 105, 97, 109,
|
||||
101, 116, 101, 114, 95, 109,
|
||||
97, 120, 0, 120, 101, 95,
|
||||
112, 111, 105, 110, 116, 95,
|
||||
99, 111, 110, 115, 116, 97,
|
||||
110, 116, 95, 100, 105, 97,
|
||||
109, 101, 116, 101, 114, 0,
|
||||
120, 101, 95, 112, 111, 105,
|
||||
110, 116, 95, 115, 99, 114,
|
||||
101, 101, 110, 95, 100, 105,
|
||||
97, 109, 101, 116, 101, 114,
|
||||
95, 116, 111, 95, 110, 100,
|
||||
99, 95, 114, 97, 100, 105,
|
||||
117, 115, 0, 120, 101, 95,
|
||||
105, 110, 116, 101, 114, 112,
|
||||
111, 108, 97, 116, 111, 114,
|
||||
95, 115, 97, 109, 112, 108,
|
||||
105, 110, 103, 95, 112, 97,
|
||||
116, 116, 101, 114, 110, 0,
|
||||
120, 101, 95, 112, 115, 95,
|
||||
112, 97, 114, 97, 109, 95,
|
||||
103, 101, 110, 0, 120, 101,
|
||||
95, 115, 97, 109, 112, 108,
|
||||
101, 95, 99, 111, 117, 110,
|
||||
116, 95, 108, 111, 103, 50,
|
||||
95, 115, 99, 114, 101, 101,
|
||||
110, 95, 100, 105, 97, 109,
|
||||
101, 116, 101, 114, 95, 116,
|
||||
111, 95, 110, 100, 99, 95,
|
||||
114, 97, 100, 105, 117, 115,
|
||||
0, 120, 101, 95, 116, 101,
|
||||
120, 116, 117, 114, 101, 95,
|
||||
115, 119, 105, 122, 122, 108,
|
||||
101, 100, 95, 115, 105, 103,
|
||||
110, 115, 0, 117, 105, 110,
|
||||
116, 52, 0, 171, 1, 0,
|
||||
19, 0, 1, 0, 4, 0,
|
||||
2, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
37, 8, 0, 0, 120, 101,
|
||||
95, 116, 101, 120, 116, 117,
|
||||
114, 101, 115, 95, 114, 101,
|
||||
115, 111, 108, 118, 101, 100,
|
||||
0, 120, 101, 95, 97, 108,
|
||||
112, 104, 97, 95, 116, 101,
|
||||
115, 116, 95, 114, 101, 102,
|
||||
101, 114, 101, 110, 99, 101,
|
||||
0, 120, 101, 95, 97, 108,
|
||||
112, 104, 97, 95, 116, 111,
|
||||
95, 109, 97, 115, 107, 0,
|
||||
120, 101, 95, 101, 100, 114,
|
||||
97, 109, 95, 51, 50, 98,
|
||||
112, 112, 95, 116, 105, 108,
|
||||
101, 95, 112, 105, 116, 99,
|
||||
104, 95, 100, 119, 111, 114,
|
||||
100, 115, 95, 115, 99, 97,
|
||||
108, 101, 100, 0, 120, 101,
|
||||
95, 99, 111, 108, 111, 114,
|
||||
95, 101, 120, 112, 95, 98,
|
||||
105, 97, 115, 0, 1, 0,
|
||||
3, 0, 1, 0, 4, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
172, 6, 0, 0, 120, 101,
|
||||
95, 101, 100, 114, 97, 109,
|
||||
95, 112, 111, 108, 121, 95,
|
||||
111, 102, 102, 115, 101, 116,
|
||||
95, 102, 114, 111, 110, 116,
|
||||
0, 120, 101, 95, 101, 100,
|
||||
114, 97, 109, 95, 112, 111,
|
||||
108, 121, 95, 111, 102, 102,
|
||||
115, 101, 116, 95, 98, 97,
|
||||
99, 107, 0, 120, 101, 95,
|
||||
101, 100, 114, 97, 109, 95,
|
||||
100, 101, 112, 116, 104, 95,
|
||||
98, 97, 115, 101, 95, 100,
|
||||
119, 111, 114, 100, 115, 95,
|
||||
115, 99, 97, 108, 101, 100,
|
||||
0, 120, 101, 95, 101, 100,
|
||||
114, 97, 109, 95, 115, 116,
|
||||
101, 110, 99, 105, 108, 0,
|
||||
116, 52, 0, 171, 171, 171,
|
||||
1, 0, 19, 0, 1, 0,
|
||||
4, 0, 2, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 37, 8, 0, 0,
|
||||
120, 101, 95, 101, 100, 114,
|
||||
97, 109, 95, 114, 116, 95,
|
||||
0, 0, 143, 7, 0, 0,
|
||||
120, 101, 95, 116, 101, 120,
|
||||
116, 117, 114, 101, 115, 95,
|
||||
114, 101, 115, 111, 108, 118,
|
||||
101, 100, 0, 120, 101, 95,
|
||||
115, 97, 109, 112, 108, 101,
|
||||
95, 99, 111, 117, 110, 116,
|
||||
95, 108, 111, 103, 50, 0,
|
||||
120, 101, 95, 97, 108, 112,
|
||||
104, 97, 95, 116, 101, 115,
|
||||
116, 95, 114, 101, 102, 101,
|
||||
114, 101, 110, 99, 101, 0,
|
||||
120, 101, 95, 97, 108, 112,
|
||||
104, 97, 95, 116, 111, 95,
|
||||
109, 97, 115, 107, 0, 120,
|
||||
101, 95, 101, 100, 114, 97,
|
||||
109, 95, 51, 50, 98, 112,
|
||||
112, 95, 116, 105, 108, 101,
|
||||
95, 112, 105, 116, 99, 104,
|
||||
95, 100, 119, 111, 114, 100,
|
||||
115, 95, 115, 99, 97, 108,
|
||||
101, 100, 0, 120, 101, 95,
|
||||
101, 100, 114, 97, 109, 95,
|
||||
100, 101, 112, 116, 104, 95,
|
||||
98, 97, 115, 101, 95, 100,
|
||||
119, 111, 114, 100, 115, 95,
|
||||
115, 99, 97, 108, 101, 100,
|
||||
0, 171, 1, 0, 19, 0,
|
||||
0, 120, 101, 95, 99, 111,
|
||||
108, 111, 114, 95, 101, 120,
|
||||
112, 95, 98, 105, 97, 115,
|
||||
0, 171, 1, 0, 3, 0,
|
||||
1, 0, 4, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 37, 8,
|
||||
0, 0, 0, 0, 92, 6,
|
||||
0, 0, 120, 101, 95, 101,
|
||||
100, 114, 97, 109, 95, 112,
|
||||
111, 108, 121, 95, 111, 102,
|
||||
102, 115, 101, 116, 95, 102,
|
||||
114, 111, 110, 116, 0, 120,
|
||||
101, 95, 101, 100, 114, 97,
|
||||
109, 95, 112, 111, 108, 121,
|
||||
95, 111, 102, 102, 115, 101,
|
||||
116, 95, 98, 97, 99, 107,
|
||||
0, 120, 101, 95, 101, 100,
|
||||
114, 97, 109, 95, 115, 116,
|
||||
101, 110, 99, 105, 108, 0,
|
||||
171, 171, 1, 0, 19, 0,
|
||||
1, 0, 4, 0, 2, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 143, 7,
|
||||
0, 0, 120, 101, 95, 101,
|
||||
100, 114, 97, 109, 95, 114,
|
||||
116, 95, 102, 111, 114, 109,
|
||||
97, 116, 95, 102, 108, 97,
|
||||
103, 115, 0, 120, 101, 95,
|
||||
101, 100, 114, 97, 109, 95,
|
||||
114, 116, 95, 99, 108, 97,
|
||||
109, 112, 0, 171, 1, 0,
|
||||
3, 0, 1, 0, 4, 0,
|
||||
4, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
172, 6, 0, 0, 120, 101,
|
||||
95, 101, 100, 114, 97, 109,
|
||||
95, 114, 116, 95, 107, 101,
|
||||
101, 112, 95, 109, 97, 115,
|
||||
107, 0, 171, 171, 1, 0,
|
||||
116, 95, 98, 97, 115, 101,
|
||||
95, 100, 119, 111, 114, 100,
|
||||
115, 95, 115, 99, 97, 108,
|
||||
101, 100, 0, 171, 1, 0,
|
||||
19, 0, 1, 0, 4, 0,
|
||||
2, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
37, 8, 0, 0, 120, 101,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
143, 7, 0, 0, 120, 101,
|
||||
95, 101, 100, 114, 97, 109,
|
||||
95, 114, 116, 95, 98, 108,
|
||||
101, 110, 100, 95, 102, 97,
|
||||
99, 116, 111, 114, 115, 95,
|
||||
111, 112, 115, 0, 120, 101,
|
||||
95, 101, 100, 114, 97, 109,
|
||||
95, 98, 108, 101, 110, 100,
|
||||
95, 99, 111, 110, 115, 116,
|
||||
97, 110, 116, 0, 77, 105,
|
||||
99, 114, 111, 115, 111, 102,
|
||||
116, 32, 40, 82, 41, 32,
|
||||
72, 76, 83, 76, 32, 83,
|
||||
104, 97, 100, 101, 114, 32,
|
||||
67, 111, 109, 112, 105, 108,
|
||||
101, 114, 32, 49, 48, 46,
|
||||
49, 0, 171, 171, 73, 83,
|
||||
71, 78, 44, 0, 0, 0,
|
||||
95, 114, 116, 95, 102, 111,
|
||||
114, 109, 97, 116, 95, 102,
|
||||
108, 97, 103, 115, 0, 120,
|
||||
101, 95, 101, 100, 114, 97,
|
||||
109, 95, 114, 116, 95, 99,
|
||||
108, 97, 109, 112, 0, 171,
|
||||
1, 0, 3, 0, 1, 0,
|
||||
4, 0, 4, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 92, 6, 0, 0,
|
||||
120, 101, 95, 101, 100, 114,
|
||||
97, 109, 95, 114, 116, 95,
|
||||
107, 101, 101, 112, 95, 109,
|
||||
97, 115, 107, 0, 171, 171,
|
||||
1, 0, 19, 0, 1, 0,
|
||||
4, 0, 2, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 143, 7, 0, 0,
|
||||
120, 101, 95, 101, 100, 114,
|
||||
97, 109, 95, 114, 116, 95,
|
||||
98, 108, 101, 110, 100, 95,
|
||||
102, 97, 99, 116, 111, 114,
|
||||
115, 95, 111, 112, 115, 0,
|
||||
120, 101, 95, 101, 100, 114,
|
||||
97, 109, 95, 98, 108, 101,
|
||||
110, 100, 95, 99, 111, 110,
|
||||
115, 116, 97, 110, 116, 0,
|
||||
77, 105, 99, 114, 111, 115,
|
||||
111, 102, 116, 32, 40, 82,
|
||||
41, 32, 72, 76, 83, 76,
|
||||
32, 83, 104, 97, 100, 101,
|
||||
114, 32, 67, 111, 109, 112,
|
||||
105, 108, 101, 114, 32, 49,
|
||||
48, 46, 49, 0, 171, 171,
|
||||
73, 83, 71, 78, 44, 0,
|
||||
0, 0, 1, 0, 0, 0,
|
||||
8, 0, 0, 0, 32, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
6, 0, 0, 0, 1, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
1, 1, 0, 0, 83, 86,
|
||||
95, 86, 101, 114, 116, 101,
|
||||
120, 73, 68, 0, 79, 83,
|
||||
71, 78, 48, 0, 0, 0,
|
||||
1, 0, 0, 0, 8, 0,
|
||||
0, 0, 32, 0, 0, 0,
|
||||
0, 0, 0, 0, 6, 0,
|
||||
0, 0, 1, 0, 0, 0,
|
||||
0, 0, 0, 0, 1, 1,
|
||||
0, 0, 83, 86, 95, 86,
|
||||
101, 114, 116, 101, 120, 73,
|
||||
68, 0, 79, 83, 71, 78,
|
||||
48, 0, 0, 0, 1, 0,
|
||||
0, 0, 8, 0, 0, 0,
|
||||
32, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
3, 0, 0, 0, 0, 0,
|
||||
0, 0, 1, 14, 0, 0,
|
||||
88, 69, 84, 69, 83, 83,
|
||||
70, 65, 67, 84, 79, 82,
|
||||
0, 171, 171, 171, 83, 72,
|
||||
69, 88, 252, 1, 0, 0,
|
||||
81, 0, 1, 0, 127, 0,
|
||||
0, 0, 106, 8, 0, 1,
|
||||
89, 0, 0, 7, 70, 142,
|
||||
48, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 2, 0, 0, 0,
|
||||
0, 0, 0, 0, 96, 0,
|
||||
0, 4, 18, 16, 16, 0,
|
||||
0, 0, 0, 0, 6, 0,
|
||||
0, 0, 101, 0, 0, 3,
|
||||
18, 32, 16, 0, 0, 0,
|
||||
0, 0, 104, 0, 0, 2,
|
||||
1, 0, 0, 0, 32, 0,
|
||||
0, 12, 114, 0, 16, 0,
|
||||
0, 0, 0, 0, 6, 128,
|
||||
48, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 1, 0,
|
||||
0, 0, 2, 64, 0, 0,
|
||||
1, 0, 0, 0, 2, 0,
|
||||
0, 0, 3, 0, 0, 0,
|
||||
0, 0, 0, 0, 60, 0,
|
||||
0, 7, 50, 0, 16, 0,
|
||||
0, 0, 0, 0, 150, 5,
|
||||
0, 0, 0, 0, 1, 14,
|
||||
0, 0, 88, 69, 84, 69,
|
||||
83, 83, 70, 65, 67, 84,
|
||||
79, 82, 0, 171, 171, 171,
|
||||
83, 72, 69, 88, 252, 1,
|
||||
0, 0, 81, 0, 1, 0,
|
||||
127, 0, 0, 0, 106, 8,
|
||||
0, 1, 89, 0, 0, 7,
|
||||
70, 142, 48, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 2, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
96, 0, 0, 4, 18, 16,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
70, 0, 16, 0, 0, 0,
|
||||
0, 0, 31, 0, 4, 3,
|
||||
10, 0, 16, 0, 0, 0,
|
||||
0, 0, 41, 0, 0, 7,
|
||||
18, 0, 16, 0, 0, 0,
|
||||
6, 0, 0, 0, 101, 0,
|
||||
0, 3, 18, 32, 16, 0,
|
||||
0, 0, 0, 0, 104, 0,
|
||||
0, 2, 1, 0, 0, 0,
|
||||
32, 0, 0, 12, 114, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
6, 128, 48, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
1, 0, 0, 0, 2, 64,
|
||||
0, 0, 1, 0, 0, 0,
|
||||
2, 0, 0, 0, 3, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
60, 0, 0, 7, 50, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
150, 5, 16, 0, 0, 0,
|
||||
0, 0, 70, 0, 16, 0,
|
||||
0, 0, 0, 0, 31, 0,
|
||||
4, 3, 10, 0, 16, 0,
|
||||
0, 0, 0, 0, 41, 0,
|
||||
0, 7, 18, 0, 16, 0,
|
||||
0, 0, 0, 0, 10, 16,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
1, 64, 0, 0, 8, 0,
|
||||
0, 0, 85, 0, 0, 7,
|
||||
66, 0, 16, 0, 0, 0,
|
||||
0, 0, 10, 16, 16, 0,
|
||||
0, 0, 0, 0, 1, 64,
|
||||
0, 0, 8, 0, 0, 0,
|
||||
85, 0, 0, 7, 66, 0,
|
||||
1, 0, 0, 10, 82, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
6, 2, 16, 0, 0, 0,
|
||||
0, 0, 2, 64, 0, 0,
|
||||
0, 255, 0, 255, 0, 0,
|
||||
0, 0, 255, 0, 255, 0,
|
||||
0, 0, 0, 0, 30, 0,
|
||||
0, 7, 18, 0, 16, 0,
|
||||
0, 0, 0, 0, 42, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
10, 0, 16, 0, 0, 0,
|
||||
0, 0, 18, 0, 0, 1,
|
||||
54, 0, 0, 5, 18, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
10, 16, 16, 0, 0, 0,
|
||||
0, 0, 1, 64, 0, 0,
|
||||
8, 0, 0, 0, 1, 0,
|
||||
0, 10, 82, 0, 16, 0,
|
||||
0, 0, 0, 0, 6, 2,
|
||||
0, 0, 21, 0, 0, 1,
|
||||
31, 0, 4, 3, 26, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
2, 64, 0, 0, 0, 255,
|
||||
0, 255, 0, 0, 0, 0,
|
||||
255, 0, 255, 0, 0, 0,
|
||||
0, 0, 30, 0, 0, 7,
|
||||
18, 0, 16, 0, 0, 0,
|
||||
0, 0, 42, 0, 16, 0,
|
||||
0, 0, 0, 0, 10, 0,
|
||||
85, 0, 0, 7, 34, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
18, 0, 0, 1, 54, 0,
|
||||
0, 5, 18, 0, 16, 0,
|
||||
0, 0, 0, 0, 10, 16,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
21, 0, 0, 1, 31, 0,
|
||||
4, 3, 26, 0, 16, 0,
|
||||
0, 0, 0, 0, 85, 0,
|
||||
0, 7, 34, 0, 16, 0,
|
||||
0, 0, 0, 0, 10, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
1, 64, 0, 0, 16, 0,
|
||||
0, 0, 140, 0, 0, 11,
|
||||
18, 0, 16, 0, 0, 0,
|
||||
0, 0, 1, 64, 0, 0,
|
||||
16, 0, 0, 0, 1, 64,
|
||||
0, 0, 16, 0, 0, 0,
|
||||
10, 0, 16, 0, 0, 0,
|
||||
0, 0, 26, 0, 16, 0,
|
||||
0, 0, 0, 0, 21, 0,
|
||||
0, 1, 0, 0, 0, 7,
|
||||
0, 0, 1, 64, 0, 0,
|
||||
16, 0, 0, 0, 140, 0,
|
||||
0, 11, 18, 0, 16, 0,
|
||||
0, 0, 0, 0, 1, 64,
|
||||
0, 0, 16, 0, 0, 0,
|
||||
1, 64, 0, 0, 16, 0,
|
||||
0, 0, 10, 0, 16, 0,
|
||||
0, 0, 0, 0, 26, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
21, 0, 0, 1, 0, 0,
|
||||
0, 7, 18, 0, 16, 0,
|
||||
0, 0, 0, 0, 10, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
1, 64, 0, 0, 0, 0,
|
||||
128, 63, 52, 0, 0, 9,
|
||||
18, 0, 16, 0, 0, 0,
|
||||
0, 0, 10, 0, 16, 0,
|
||||
0, 0, 0, 0, 1, 64,
|
||||
0, 0, 0, 0, 128, 63,
|
||||
52, 0, 0, 9, 18, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
10, 0, 16, 0, 0, 0,
|
||||
0, 0, 26, 128, 48, 0,
|
||||
0, 0, 0, 0, 26, 128,
|
||||
48, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 51, 0, 0, 9,
|
||||
18, 32, 16, 0, 0, 0,
|
||||
0, 0, 10, 0, 16, 0,
|
||||
0, 0, 0, 0, 42, 128,
|
||||
48, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
51, 0, 0, 9, 18, 32,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
10, 0, 16, 0, 0, 0,
|
||||
0, 0, 42, 128, 48, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
62, 0, 0, 1, 83, 84,
|
||||
65, 84, 148, 0, 0, 0,
|
||||
18, 0, 0, 0, 1, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
2, 0, 0, 0, 3, 0,
|
||||
0, 0, 3, 0, 0, 0,
|
||||
4, 0, 0, 0, 2, 0,
|
||||
0, 0, 62, 0, 0, 1,
|
||||
83, 84, 65, 84, 148, 0,
|
||||
0, 0, 18, 0, 0, 0,
|
||||
1, 0, 0, 0, 0, 0,
|
||||
0, 0, 2, 0, 0, 0,
|
||||
3, 0, 0, 0, 3, 0,
|
||||
0, 0, 4, 0, 0, 0,
|
||||
2, 0, 0, 0, 2, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 1, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
1, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
|
@ -687,6 +665,5 @@ const BYTE tessellation_adaptive_vs[] =
|
|||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0
|
||||
0, 0, 0, 0, 0, 0
|
||||
};
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -21,24 +21,21 @@ cbuffer xe_system_cbuffer : register(b0) {
|
|||
float2 xe_point_constant_diameter;
|
||||
float2 xe_point_screen_diameter_to_ndc_radius;
|
||||
|
||||
uint xe_interpolator_sampling_pattern;
|
||||
uint xe_ps_param_gen;
|
||||
uint2 xe_sample_count_log2;
|
||||
|
||||
uint4 xe_texture_swizzled_signs[2];
|
||||
|
||||
uint xe_textures_resolved;
|
||||
uint2 xe_sample_count_log2;
|
||||
float xe_alpha_test_reference;
|
||||
|
||||
uint xe_alpha_to_mask;
|
||||
uint xe_edram_32bpp_tile_pitch_dwords_scaled;
|
||||
uint xe_edram_depth_base_dwords_scaled;
|
||||
|
||||
float4 xe_color_exp_bias;
|
||||
|
||||
float2 xe_edram_poly_offset_front;
|
||||
float2 xe_edram_poly_offset_back;
|
||||
|
||||
uint xe_edram_depth_base_dwords_scaled;
|
||||
|
||||
uint4 xe_edram_stencil[2];
|
||||
|
||||
uint4 xe_edram_rt_base_dwords_scaled;
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
#include "third_party/fmt/include/fmt/format.h"
|
||||
#include "third_party/glslang/SPIRV/GLSL.std.450.h"
|
||||
#include "xenia/base/assert.h"
|
||||
#include "xenia/base/math.h"
|
||||
|
@ -105,6 +106,8 @@ void SpirvShaderTranslator::Reset() {
|
|||
|
||||
input_fragment_coord_ = spv::NoResult;
|
||||
input_front_facing_ = spv::NoResult;
|
||||
std::fill(input_output_interpolators_.begin(),
|
||||
input_output_interpolators_.end(), spv::NoResult);
|
||||
|
||||
sampler_bindings_.clear();
|
||||
texture_bindings_.clear();
|
||||
|
@ -161,8 +164,6 @@ void SpirvShaderTranslator::StartTranslation() {
|
|||
type_float2_ = builder_->makeVectorType(type_float_, 2);
|
||||
type_float3_ = builder_->makeVectorType(type_float_, 3);
|
||||
type_float4_ = builder_->makeVectorType(type_float_, 4);
|
||||
type_interpolators_ = builder_->makeArrayType(
|
||||
type_float4_, builder_->makeUintConstant(xenos::kMaxInterpolators), 0);
|
||||
|
||||
const_int_0_ = builder_->makeIntConstant(0);
|
||||
id_vector_temp_.clear();
|
||||
|
@ -449,22 +450,12 @@ void SpirvShaderTranslator::StartTranslation() {
|
|||
var_main_tfetch_gradients_v_ = builder_->createVariable(
|
||||
spv::NoPrecision, spv::StorageClassFunction, type_float3_,
|
||||
"xe_var_tfetch_gradients_v", const_float3_0_);
|
||||
uint32_t register_array_size = register_count();
|
||||
if (register_array_size) {
|
||||
id_vector_temp_.clear();
|
||||
id_vector_temp_.reserve(register_array_size);
|
||||
// TODO(Triang3l): In PS, only need to initialize starting from the
|
||||
// interpolators, probably manually. But likely not very important - the
|
||||
// compiler in the driver will likely eliminate that write.
|
||||
for (uint32_t i = 0; i < register_array_size; ++i) {
|
||||
id_vector_temp_.push_back(const_float4_0_);
|
||||
}
|
||||
if (register_count()) {
|
||||
spv::Id type_register_array = builder_->makeArrayType(
|
||||
type_float4_, builder_->makeUintConstant(register_array_size), 0);
|
||||
var_main_registers_ = builder_->createVariable(
|
||||
spv::NoPrecision, spv::StorageClassFunction, type_register_array,
|
||||
"xe_var_registers",
|
||||
builder_->makeCompositeConstant(type_register_array, id_vector_temp_));
|
||||
type_float4_, builder_->makeUintConstant(register_count()), 0);
|
||||
var_main_registers_ =
|
||||
builder_->createVariable(spv::NoPrecision, spv::StorageClassFunction,
|
||||
type_register_array, "xe_var_registers");
|
||||
}
|
||||
|
||||
// Write the execution model-specific prologue with access to variables in the
|
||||
|
@ -1068,15 +1059,24 @@ void SpirvShaderTranslator::StartVertexOrTessEvalShaderBeforeMain() {
|
|||
main_interface_.push_back(input_vertex_index_);
|
||||
}
|
||||
|
||||
// Create the interpolator output.
|
||||
input_output_interpolators_ =
|
||||
builder_->createVariable(spv::NoPrecision, spv::StorageClassOutput,
|
||||
type_interpolators_, "xe_out_interpolators");
|
||||
builder_->addDecoration(input_output_interpolators_, spv::DecorationLocation,
|
||||
0);
|
||||
builder_->addDecoration(input_output_interpolators_,
|
||||
spv::DecorationInvariant);
|
||||
main_interface_.push_back(input_output_interpolators_);
|
||||
// Create the interpolator outputs.
|
||||
{
|
||||
uint32_t interpolator_location = 0;
|
||||
uint32_t interpolators_remaining = GetModificationInterpolatorMask();
|
||||
uint32_t interpolator_index;
|
||||
while (xe::bit_scan_forward(interpolators_remaining, &interpolator_index)) {
|
||||
interpolators_remaining &= ~(UINT32_C(1) << interpolator_index);
|
||||
spv::Id interpolator = builder_->createVariable(
|
||||
spv::NoPrecision, spv::StorageClassOutput, type_float4_,
|
||||
fmt::format("xe_out_interpolator_{}", interpolator_index).c_str());
|
||||
input_output_interpolators_[interpolator_index] = interpolator;
|
||||
builder_->addDecoration(interpolator, spv::DecorationLocation,
|
||||
int(interpolator_location));
|
||||
builder_->addDecoration(interpolator, spv::DecorationInvariant);
|
||||
main_interface_.push_back(interpolator);
|
||||
++interpolator_location;
|
||||
}
|
||||
}
|
||||
|
||||
// Create the gl_PerVertex output for used system outputs.
|
||||
std::vector<spv::Id> struct_per_vertex_members;
|
||||
|
@ -1103,14 +1103,26 @@ void SpirvShaderTranslator::StartVertexOrTessEvalShaderInMain() {
|
|||
spv::NoPrecision, spv::StorageClassFunction, type_float3_,
|
||||
"xe_var_point_size_edge_flag_kill_vertex");
|
||||
|
||||
// Zero the interpolators.
|
||||
for (uint32_t i = 0; i < xenos::kMaxInterpolators; ++i) {
|
||||
// Zero general-purpose registers to prevent crashes when the game
|
||||
// references them after only initializing them conditionally.
|
||||
for (uint32_t i = 0; i < register_count(); ++i) {
|
||||
id_vector_temp_.clear();
|
||||
id_vector_temp_.push_back(builder_->makeIntConstant(int(i)));
|
||||
builder_->createStore(const_float4_0_,
|
||||
builder_->createAccessChain(
|
||||
spv::StorageClassOutput,
|
||||
input_output_interpolators_, id_vector_temp_));
|
||||
builder_->createStore(
|
||||
const_float4_0_,
|
||||
builder_->createAccessChain(spv::StorageClassFunction,
|
||||
var_main_registers_, id_vector_temp_));
|
||||
}
|
||||
|
||||
// Zero the interpolators.
|
||||
{
|
||||
uint32_t interpolators_remaining = GetModificationInterpolatorMask();
|
||||
uint32_t interpolator_index;
|
||||
while (xe::bit_scan_forward(interpolators_remaining, &interpolator_index)) {
|
||||
interpolators_remaining &= ~(UINT32_C(1) << interpolator_index);
|
||||
builder_->createStore(const_float4_0_,
|
||||
input_output_interpolators_[interpolator_index]);
|
||||
}
|
||||
}
|
||||
|
||||
// Load the vertex index or the tessellation parameters.
|
||||
|
@ -1284,13 +1296,28 @@ void SpirvShaderTranslator::CompleteVertexOrTessEvalShaderInMain() {
|
|||
}
|
||||
|
||||
void SpirvShaderTranslator::StartFragmentShaderBeforeMain() {
|
||||
// Interpolator input.
|
||||
input_output_interpolators_ =
|
||||
builder_->createVariable(spv::NoPrecision, spv::StorageClassInput,
|
||||
type_interpolators_, "xe_in_interpolators");
|
||||
builder_->addDecoration(input_output_interpolators_, spv::DecorationLocation,
|
||||
0);
|
||||
main_interface_.push_back(input_output_interpolators_);
|
||||
// Interpolator inputs.
|
||||
Modification shader_modification = GetSpirvShaderModification();
|
||||
{
|
||||
uint32_t interpolator_location = 0;
|
||||
uint32_t interpolators_remaining = GetModificationInterpolatorMask();
|
||||
uint32_t interpolator_index;
|
||||
while (xe::bit_scan_forward(interpolators_remaining, &interpolator_index)) {
|
||||
interpolators_remaining &= ~(UINT32_C(1) << interpolator_index);
|
||||
spv::Id interpolator = builder_->createVariable(
|
||||
spv::NoPrecision, spv::StorageClassInput, type_float4_,
|
||||
fmt::format("xe_in_interpolator_{}", interpolator_index).c_str());
|
||||
input_output_interpolators_[interpolator_index] = interpolator;
|
||||
builder_->addDecoration(interpolator, spv::DecorationLocation,
|
||||
int(interpolator_location));
|
||||
if (shader_modification.pixel.interpolators_centroid &
|
||||
(UINT32_C(1) << interpolator_index)) {
|
||||
builder_->addDecoration(interpolator, spv::DecorationCentroid);
|
||||
}
|
||||
main_interface_.push_back(interpolator);
|
||||
++interpolator_location;
|
||||
}
|
||||
}
|
||||
|
||||
bool param_gen_needed = GetPsParamGenInterpolator() != UINT32_MAX;
|
||||
|
||||
|
@ -1346,22 +1373,22 @@ void SpirvShaderTranslator::StartFragmentShaderBeforeMain() {
|
|||
void SpirvShaderTranslator::StartFragmentShaderInMain() {
|
||||
uint32_t param_gen_interpolator = GetPsParamGenInterpolator();
|
||||
|
||||
// Copy the interpolators to general-purpose registers.
|
||||
// TODO(Triang3l): Centroid.
|
||||
uint32_t interpolator_count =
|
||||
std::min(xenos::kMaxInterpolators, register_count());
|
||||
for (uint32_t i = 0; i < interpolator_count; ++i) {
|
||||
// Zero general-purpose registers to prevent crashes when the game
|
||||
// references them after only initializing them conditionally, and copy
|
||||
// interpolants to GPRs.
|
||||
uint32_t interpolator_mask = GetModificationInterpolatorMask();
|
||||
for (uint32_t i = 0; i < register_count(); ++i) {
|
||||
if (i == param_gen_interpolator) {
|
||||
continue;
|
||||
}
|
||||
id_vector_temp_.clear();
|
||||
// Register array element.
|
||||
id_vector_temp_.push_back(builder_->makeIntConstant(int(i)));
|
||||
builder_->createStore(
|
||||
builder_->createLoad(builder_->createAccessChain(
|
||||
spv::StorageClassInput,
|
||||
input_output_interpolators_, id_vector_temp_),
|
||||
spv::NoPrecision),
|
||||
(i < xenos::kMaxInterpolators &&
|
||||
(interpolator_mask & (UINT32_C(1) << i)))
|
||||
? builder_->createLoad(input_output_interpolators_[i],
|
||||
spv::NoPrecision)
|
||||
: const_float4_0_,
|
||||
builder_->createAccessChain(spv::StorageClassFunction,
|
||||
var_main_registers_, id_vector_temp_));
|
||||
}
|
||||
|
@ -1836,15 +1863,11 @@ void SpirvShaderTranslator::StoreResult(const InstructionResult& result,
|
|||
target_pointer = builder_->createAccessChain(
|
||||
spv::StorageClassFunction, var_main_registers_, id_vector_temp_util_);
|
||||
} break;
|
||||
case InstructionStorageTarget::kInterpolator:
|
||||
case InstructionStorageTarget::kInterpolator: {
|
||||
assert_true(is_vertex_shader());
|
||||
id_vector_temp_util_.clear();
|
||||
id_vector_temp_util_.push_back(
|
||||
builder_->makeIntConstant(int(result.storage_index)));
|
||||
target_pointer = builder_->createAccessChain(spv::StorageClassOutput,
|
||||
input_output_interpolators_,
|
||||
id_vector_temp_util_);
|
||||
break;
|
||||
target_pointer = input_output_interpolators_[result.storage_index];
|
||||
// Unused interpolators are spv::NoResult in input_output_interpolators_.
|
||||
} break;
|
||||
case InstructionStorageTarget::kPosition:
|
||||
assert_true(is_vertex_shader());
|
||||
id_vector_temp_util_.clear();
|
||||
|
|
|
@ -34,7 +34,7 @@ class SpirvShaderTranslator : public ShaderTranslator {
|
|||
// TODO(Triang3l): Change to 0xYYYYMMDD once it's out of the rapid
|
||||
// prototyping stage (easier to do small granular updates with an
|
||||
// incremental counter).
|
||||
static constexpr uint32_t kVersion = 4;
|
||||
static constexpr uint32_t kVersion = 5;
|
||||
|
||||
enum class DepthStencilMode : uint32_t {
|
||||
kNoModifiers,
|
||||
|
@ -46,6 +46,10 @@ class SpirvShaderTranslator : public ShaderTranslator {
|
|||
};
|
||||
|
||||
struct {
|
||||
// uint32_t 0.
|
||||
// Interpolators written by the vertex shader and needed by the pixel
|
||||
// shader.
|
||||
uint32_t interpolator_mask : xenos::kMaxInterpolators;
|
||||
// Dynamically indexable register count from SQ_PROGRAM_CNTL.
|
||||
uint32_t dynamic_addressable_register_count : 8;
|
||||
// Pipeline stage and input configuration.
|
||||
|
@ -53,6 +57,12 @@ class SpirvShaderTranslator : public ShaderTranslator {
|
|||
: Shader::kHostVertexShaderTypeBitCount;
|
||||
} vertex;
|
||||
struct PixelShaderModification {
|
||||
// uint32_t 0.
|
||||
// Interpolators written by the vertex shader and needed by the pixel
|
||||
// shader.
|
||||
uint32_t interpolator_mask : xenos::kMaxInterpolators;
|
||||
uint32_t interpolators_centroid : xenos::kMaxInterpolators;
|
||||
// uint32_t 1.
|
||||
// Dynamically indexable register count from SQ_PROGRAM_CNTL.
|
||||
uint32_t dynamic_addressable_register_count : 8;
|
||||
uint32_t param_gen_enable : 1;
|
||||
|
@ -66,7 +76,10 @@ class SpirvShaderTranslator : public ShaderTranslator {
|
|||
} pixel;
|
||||
uint64_t value = 0;
|
||||
|
||||
Modification(uint64_t modification_value = 0) : value(modification_value) {}
|
||||
explicit Modification(uint64_t modification_value = 0)
|
||||
: value(modification_value) {
|
||||
static_assert_size(*this, sizeof(value));
|
||||
}
|
||||
};
|
||||
|
||||
enum : uint32_t {
|
||||
|
@ -346,6 +359,12 @@ class SpirvShaderTranslator : public ShaderTranslator {
|
|||
current_shader().implicit_early_z_write_allowed();
|
||||
}
|
||||
|
||||
uint32_t GetModificationInterpolatorMask() const {
|
||||
Modification modification = GetSpirvShaderModification();
|
||||
return is_vertex_shader() ? modification.vertex.interpolator_mask
|
||||
: modification.pixel.interpolator_mask;
|
||||
}
|
||||
|
||||
// Returns UINT32_MAX if PsParamGen doesn't need to be written.
|
||||
uint32_t GetPsParamGenInterpolator() const;
|
||||
|
||||
|
@ -529,8 +548,6 @@ class SpirvShaderTranslator : public ShaderTranslator {
|
|||
spv::Id type_float_vectors_[4];
|
||||
};
|
||||
|
||||
spv::Id type_interpolators_;
|
||||
|
||||
spv::Id const_int_0_;
|
||||
spv::Id const_int4_0_;
|
||||
spv::Id const_uint_0_;
|
||||
|
@ -591,12 +608,16 @@ class SpirvShaderTranslator : public ShaderTranslator {
|
|||
// PS, only when needed - bool.
|
||||
spv::Id input_front_facing_;
|
||||
|
||||
// VS output or PS input, only when needed - type_interpolators_.
|
||||
// The Qualcomm Adreno driver has strict requirements for stage linkage - if
|
||||
// this is an array in one stage, it must be an array in the other (in case of
|
||||
// Xenia, including geometry shaders); it must not be an array in one and just
|
||||
// elements in consecutive locations in another.
|
||||
spv::Id input_output_interpolators_;
|
||||
// VS output or PS input, only the ones that are needed (spv::NoResult for the
|
||||
// unneeded interpolators), indexed by the guest interpolator index - float4.
|
||||
// The Qualcomm Adreno driver has strict requirements for stage linkage - as
|
||||
// Xenia uses separate variables, not an array (so the interpolation
|
||||
// qualifiers can be applied to each element separately), the interpolators
|
||||
// must also be separate variables in the other stage, including the geometry
|
||||
// shader (not just an array assuming that consecutive locations will be
|
||||
// linked as consecutive array elements, on Qualcomm, they won't be linked at
|
||||
// all).
|
||||
std::array<spv::Id, xenos::kMaxInterpolators> input_output_interpolators_;
|
||||
|
||||
enum OutputPerVertexMember : unsigned int {
|
||||
kOutputPerVertexMemberPosition,
|
||||
|
|
|
@ -2135,11 +2135,12 @@ bool VulkanCommandProcessor::IssueDraw(xenos::PrimitiveType prim_type,
|
|||
}
|
||||
// TODO(Triang3l): Memory export.
|
||||
|
||||
reg::RB_DEPTHCONTROL normalized_depth_control =
|
||||
draw_util::GetNormalizedDepthControl(regs);
|
||||
uint32_t normalized_color_mask =
|
||||
pixel_shader ? draw_util::GetNormalizedColorMask(
|
||||
regs, pixel_shader->writes_color_targets())
|
||||
uint32_t ps_param_gen_pos = UINT32_MAX;
|
||||
uint32_t interpolator_mask =
|
||||
pixel_shader ? (vertex_shader->writes_interpolators() &
|
||||
pixel_shader->GetInterpolatorInputMask(
|
||||
regs.Get<reg::SQ_PROGRAM_CNTL>(),
|
||||
regs.Get<reg::SQ_CONTEXT_MISC>(), ps_param_gen_pos))
|
||||
: 0;
|
||||
|
||||
PrimitiveProcessor::ProcessingResult primitive_processing_result;
|
||||
|
@ -2177,11 +2178,11 @@ bool VulkanCommandProcessor::IssueDraw(xenos::PrimitiveType prim_type,
|
|||
// Shader modifications.
|
||||
vertex_shader_modification =
|
||||
pipeline_cache_->GetCurrentVertexShaderModification(
|
||||
*vertex_shader,
|
||||
primitive_processing_result.host_vertex_shader_type);
|
||||
*vertex_shader, primitive_processing_result.host_vertex_shader_type,
|
||||
interpolator_mask);
|
||||
pixel_shader_modification =
|
||||
pixel_shader ? pipeline_cache_->GetCurrentPixelShaderModification(
|
||||
*pixel_shader, normalized_color_mask)
|
||||
*pixel_shader, interpolator_mask, ps_param_gen_pos)
|
||||
: SpirvShaderTranslator::Modification(0);
|
||||
|
||||
// Translate the shaders now to obtain the sampler bindings.
|
||||
|
@ -2270,6 +2271,12 @@ bool VulkanCommandProcessor::IssueDraw(xenos::PrimitiveType prim_type,
|
|||
}
|
||||
|
||||
// Set up the render targets - this may perform dispatches and draws.
|
||||
reg::RB_DEPTHCONTROL normalized_depth_control =
|
||||
draw_util::GetNormalizedDepthControl(regs);
|
||||
uint32_t normalized_color_mask =
|
||||
pixel_shader ? draw_util::GetNormalizedColorMask(
|
||||
regs, pixel_shader->writes_color_targets())
|
||||
: 0;
|
||||
if (!render_target_cache_->Update(is_rasterization_done,
|
||||
normalized_depth_control,
|
||||
normalized_color_mask, *vertex_shader)) {
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
#include <memory>
|
||||
#include <utility>
|
||||
|
||||
#include "third_party/fmt/include/fmt/format.h"
|
||||
#include "third_party/glslang/SPIRV/SpvBuilder.h"
|
||||
#include "xenia/base/assert.h"
|
||||
#include "xenia/base/logging.h"
|
||||
|
@ -116,43 +117,56 @@ VulkanShader* VulkanPipelineCache::LoadShader(xenos::ShaderType shader_type,
|
|||
|
||||
SpirvShaderTranslator::Modification
|
||||
VulkanPipelineCache::GetCurrentVertexShaderModification(
|
||||
const Shader& shader,
|
||||
Shader::HostVertexShaderType host_vertex_shader_type) const {
|
||||
const Shader& shader, Shader::HostVertexShaderType host_vertex_shader_type,
|
||||
uint32_t interpolator_mask) const {
|
||||
assert_true(shader.type() == xenos::ShaderType::kVertex);
|
||||
assert_true(shader.is_ucode_analyzed());
|
||||
const auto& regs = register_file_;
|
||||
|
||||
auto sq_program_cntl = regs.Get<reg::SQ_PROGRAM_CNTL>();
|
||||
return SpirvShaderTranslator::Modification(
|
||||
|
||||
SpirvShaderTranslator::Modification modification(
|
||||
shader_translator_->GetDefaultVertexShaderModification(
|
||||
shader.GetDynamicAddressableRegisterCount(sq_program_cntl.vs_num_reg),
|
||||
shader.GetDynamicAddressableRegisterCount(
|
||||
regs.Get<reg::SQ_PROGRAM_CNTL>().vs_num_reg),
|
||||
host_vertex_shader_type));
|
||||
|
||||
modification.vertex.interpolator_mask = interpolator_mask;
|
||||
|
||||
return modification;
|
||||
}
|
||||
|
||||
SpirvShaderTranslator::Modification
|
||||
VulkanPipelineCache::GetCurrentPixelShaderModification(
|
||||
const Shader& shader, uint32_t normalized_color_mask) const {
|
||||
const Shader& shader, uint32_t interpolator_mask,
|
||||
uint32_t param_gen_pos) const {
|
||||
assert_true(shader.type() == xenos::ShaderType::kPixel);
|
||||
assert_true(shader.is_ucode_analyzed());
|
||||
const auto& regs = register_file_;
|
||||
auto sq_program_cntl = regs.Get<reg::SQ_PROGRAM_CNTL>();
|
||||
|
||||
SpirvShaderTranslator::Modification modification(
|
||||
shader_translator_->GetDefaultPixelShaderModification(
|
||||
shader.GetDynamicAddressableRegisterCount(
|
||||
sq_program_cntl.ps_num_reg)));
|
||||
regs.Get<reg::SQ_PROGRAM_CNTL>().ps_num_reg)));
|
||||
|
||||
if (sq_program_cntl.param_gen) {
|
||||
auto sq_context_misc = regs.Get<reg::SQ_CONTEXT_MISC>();
|
||||
if (sq_context_misc.param_gen_pos <
|
||||
std::min(std::max(modification.pixel.dynamic_addressable_register_count,
|
||||
shader.register_static_address_bound()),
|
||||
xenos::kMaxInterpolators)) {
|
||||
modification.pixel.param_gen_enable = 1;
|
||||
modification.pixel.param_gen_interpolator = sq_context_misc.param_gen_pos;
|
||||
auto vgt_draw_initiator = regs.Get<reg::VGT_DRAW_INITIATOR>();
|
||||
modification.pixel.param_gen_point = uint32_t(
|
||||
vgt_draw_initiator.prim_type == xenos::PrimitiveType::kPointList);
|
||||
}
|
||||
modification.pixel.interpolator_mask = interpolator_mask;
|
||||
modification.pixel.interpolators_centroid =
|
||||
interpolator_mask &
|
||||
~xenos::GetInterpolatorSamplingPattern(
|
||||
regs.Get<reg::RB_SURFACE_INFO>().msaa_samples,
|
||||
regs.Get<reg::SQ_CONTEXT_MISC>().sc_sample_cntl,
|
||||
regs.Get<reg::SQ_INTERPOLATOR_CNTL>().sampling_pattern);
|
||||
|
||||
if (param_gen_pos < xenos::kMaxInterpolators) {
|
||||
modification.pixel.param_gen_enable = 1;
|
||||
modification.pixel.param_gen_interpolator = param_gen_pos;
|
||||
modification.pixel.param_gen_point =
|
||||
uint32_t(regs.Get<reg::VGT_DRAW_INITIATOR>().prim_type ==
|
||||
xenos::PrimitiveType::kPointList);
|
||||
} else {
|
||||
modification.pixel.param_gen_enable = 0;
|
||||
modification.pixel.param_gen_interpolator = 0;
|
||||
modification.pixel.param_gen_point = 0;
|
||||
}
|
||||
|
||||
using DepthStencilMode =
|
||||
|
@ -267,7 +281,10 @@ bool VulkanPipelineCache::ConfigurePipeline(
|
|||
}
|
||||
VkShaderModule geometry_shader = VK_NULL_HANDLE;
|
||||
GeometryShaderKey geometry_shader_key;
|
||||
if (GetGeometryShaderKey(description.geometry_shader, geometry_shader_key)) {
|
||||
if (GetGeometryShaderKey(
|
||||
description.geometry_shader,
|
||||
SpirvShaderTranslator::Modification(vertex_shader->modification()),
|
||||
geometry_shader_key)) {
|
||||
geometry_shader = GetGeometryShader(geometry_shader_key);
|
||||
if (geometry_shader == VK_NULL_HANDLE) {
|
||||
return false;
|
||||
|
@ -796,20 +813,28 @@ bool VulkanPipelineCache::ArePipelineRequirementsMet(
|
|||
}
|
||||
|
||||
bool VulkanPipelineCache::GetGeometryShaderKey(
|
||||
PipelineGeometryShader geometry_shader_type, GeometryShaderKey& key_out) {
|
||||
PipelineGeometryShader geometry_shader_type,
|
||||
SpirvShaderTranslator::Modification vertex_shader_modification,
|
||||
GeometryShaderKey& key_out) {
|
||||
if (geometry_shader_type == PipelineGeometryShader::kNone) {
|
||||
return false;
|
||||
}
|
||||
GeometryShaderKey key;
|
||||
key.type = geometry_shader_type;
|
||||
// TODO(Triang3l): Make the linkage parameters depend on the real needs of the
|
||||
// vertex and the pixel shader.
|
||||
key.interpolator_count = xenos::kMaxInterpolators;
|
||||
key.user_clip_plane_count = /* 6 */ 0;
|
||||
key.user_clip_plane_cull = 0;
|
||||
key.has_vertex_kill_and = /* 1 */ 0;
|
||||
key.has_point_size = /* 1 */ 0;
|
||||
key.has_point_coordinates = /* 1 */ 0;
|
||||
// TODO(Triang3l): Once all needed inputs and outputs are added, uncomment the
|
||||
// real counts here.
|
||||
key.interpolator_count =
|
||||
xe::bit_count(vertex_shader_modification.vertex.interpolator_mask);
|
||||
key.user_clip_plane_count =
|
||||
/* vertex_shader_modification.vertex.user_clip_plane_count */ 0;
|
||||
key.user_clip_plane_cull =
|
||||
/* vertex_shader_modification.vertex.user_clip_plane_cull */ 0;
|
||||
key.has_vertex_kill_and =
|
||||
/* vertex_shader_modification.vertex.vertex_kill_and */ 0;
|
||||
key.has_point_size =
|
||||
/* vertex_shader_modification.vertex.output_point_size */ 0;
|
||||
key.has_point_coordinates =
|
||||
/* pixel_shader_modification.pixel.param_gen_point */ 0;
|
||||
key_out = key;
|
||||
return true;
|
||||
}
|
||||
|
@ -887,12 +912,6 @@ VkShaderModule VulkanPipelineCache::GetGeometryShader(GeometryShaderKey key) {
|
|||
? builder.makeArrayType(
|
||||
type_float, builder.makeUintConstant(cull_distance_count), 0)
|
||||
: spv::NoType;
|
||||
spv::Id type_interpolators =
|
||||
key.interpolator_count
|
||||
? builder.makeArrayType(
|
||||
type_float4, builder.makeUintConstant(key.interpolator_count),
|
||||
0)
|
||||
: spv::NoType;
|
||||
spv::Id type_point_coordinates = key.has_point_coordinates
|
||||
? builder.makeVectorType(type_float, 2)
|
||||
: spv::NoType;
|
||||
|
@ -958,15 +977,16 @@ VkShaderModule VulkanPipelineCache::GetGeometryShader(GeometryShaderKey key) {
|
|||
type_array_in_gl_per_vertex, "gl_in");
|
||||
main_interface.push_back(in_gl_per_vertex);
|
||||
|
||||
// Interpolators output.
|
||||
spv::Id out_interpolators = spv::NoResult;
|
||||
if (key.interpolator_count) {
|
||||
out_interpolators =
|
||||
builder.createVariable(spv::NoPrecision, spv::StorageClassOutput,
|
||||
type_interpolators, "xe_out_interpolators");
|
||||
builder.addDecoration(out_interpolators, spv::DecorationLocation, 0);
|
||||
builder.addDecoration(out_interpolators, spv::DecorationInvariant);
|
||||
main_interface.push_back(out_interpolators);
|
||||
// Interpolators outputs.
|
||||
std::array<spv::Id, xenos::kMaxInterpolators> out_interpolators;
|
||||
for (uint32_t i = 0; i < key.interpolator_count; ++i) {
|
||||
spv::Id out_interpolator = builder.createVariable(
|
||||
spv::NoPrecision, spv::StorageClassOutput, type_float4,
|
||||
fmt::format("xe_out_interpolator_{}", i).c_str());
|
||||
out_interpolators[i] = out_interpolator;
|
||||
builder.addDecoration(out_interpolator, spv::DecorationLocation, i);
|
||||
builder.addDecoration(out_interpolator, spv::DecorationInvariant);
|
||||
main_interface.push_back(out_interpolator);
|
||||
}
|
||||
|
||||
// Point coordinate output.
|
||||
|
@ -981,16 +1001,17 @@ VkShaderModule VulkanPipelineCache::GetGeometryShader(GeometryShaderKey key) {
|
|||
main_interface.push_back(out_point_coordinates);
|
||||
}
|
||||
|
||||
// Interpolator input.
|
||||
spv::Id in_interpolators = spv::NoResult;
|
||||
if (key.interpolator_count) {
|
||||
in_interpolators = builder.createVariable(
|
||||
// Interpolator inputs.
|
||||
std::array<spv::Id, xenos::kMaxInterpolators> in_interpolators;
|
||||
for (uint32_t i = 0; i < key.interpolator_count; ++i) {
|
||||
spv::Id in_interpolator = builder.createVariable(
|
||||
spv::NoPrecision, spv::StorageClassInput,
|
||||
builder.makeArrayType(type_interpolators,
|
||||
const_input_primitive_vertex_count, 0),
|
||||
"xe_in_interpolators");
|
||||
builder.addDecoration(in_interpolators, spv::DecorationLocation, 0);
|
||||
main_interface.push_back(in_interpolators);
|
||||
builder.makeArrayType(type_float4, const_input_primitive_vertex_count,
|
||||
0),
|
||||
fmt::format("xe_in_interpolator_{}", i).c_str());
|
||||
in_interpolators[i] = in_interpolator;
|
||||
builder.addDecoration(in_interpolator, spv::DecorationLocation, i);
|
||||
main_interface.push_back(in_interpolator);
|
||||
}
|
||||
|
||||
// Point size input.
|
||||
|
@ -1295,15 +1316,15 @@ VkShaderModule VulkanPipelineCache::GetGeometryShader(GeometryShaderKey key) {
|
|||
for (uint32_t i = 0; i < 3; ++i) {
|
||||
spv::Id vertex_index = vertex_indices[i];
|
||||
// Interpolators.
|
||||
if (key.interpolator_count) {
|
||||
id_vector_temp.clear();
|
||||
id_vector_temp.push_back(vertex_index);
|
||||
id_vector_temp.clear();
|
||||
id_vector_temp.push_back(vertex_index);
|
||||
for (uint32_t j = 0; j < key.interpolator_count; ++j) {
|
||||
builder.createStore(
|
||||
builder.createLoad(
|
||||
builder.createAccessChain(spv::StorageClassInput,
|
||||
in_interpolators, id_vector_temp),
|
||||
spv::NoPrecision),
|
||||
out_interpolators);
|
||||
builder.createLoad(builder.createAccessChain(
|
||||
spv::StorageClassInput,
|
||||
in_interpolators[j], id_vector_temp),
|
||||
spv::NoPrecision),
|
||||
out_interpolators[j]);
|
||||
}
|
||||
// Point coordinates.
|
||||
if (key.has_point_coordinates) {
|
||||
|
@ -1350,13 +1371,11 @@ VkShaderModule VulkanPipelineCache::GetGeometryShader(GeometryShaderKey key) {
|
|||
// Construct the fourth vertex.
|
||||
// Interpolators.
|
||||
for (uint32_t i = 0; i < key.interpolator_count; ++i) {
|
||||
spv::Id const_int_i = builder.makeIntConstant(int32_t(i));
|
||||
spv::Id in_interpolator = in_interpolators[i];
|
||||
id_vector_temp.clear();
|
||||
id_vector_temp.reserve(2);
|
||||
id_vector_temp.push_back(vertex_indices[0]);
|
||||
id_vector_temp.push_back(const_int_i);
|
||||
spv::Id vertex_interpolator_v0 = builder.createLoad(
|
||||
builder.createAccessChain(spv::StorageClassInput, in_interpolators,
|
||||
builder.createAccessChain(spv::StorageClassInput, in_interpolator,
|
||||
id_vector_temp),
|
||||
spv::NoPrecision);
|
||||
id_vector_temp[0] = vertex_indices[1];
|
||||
|
@ -1364,7 +1383,7 @@ VkShaderModule VulkanPipelineCache::GetGeometryShader(GeometryShaderKey key) {
|
|||
spv::OpFSub, type_float4,
|
||||
builder.createLoad(
|
||||
builder.createAccessChain(spv::StorageClassInput,
|
||||
in_interpolators, id_vector_temp),
|
||||
in_interpolator, id_vector_temp),
|
||||
spv::NoPrecision),
|
||||
vertex_interpolator_v0);
|
||||
builder.addDecoration(vertex_interpolator_v01,
|
||||
|
@ -1374,16 +1393,11 @@ VkShaderModule VulkanPipelineCache::GetGeometryShader(GeometryShaderKey key) {
|
|||
spv::OpFAdd, type_float4, vertex_interpolator_v01,
|
||||
builder.createLoad(
|
||||
builder.createAccessChain(spv::StorageClassInput,
|
||||
in_interpolators, id_vector_temp),
|
||||
in_interpolator, id_vector_temp),
|
||||
spv::NoPrecision));
|
||||
builder.addDecoration(vertex_interpolator_v3,
|
||||
spv::DecorationNoContraction);
|
||||
id_vector_temp.clear();
|
||||
id_vector_temp.push_back(const_int_i);
|
||||
builder.createStore(
|
||||
vertex_interpolator_v3,
|
||||
builder.createAccessChain(spv::StorageClassOutput,
|
||||
out_interpolators, id_vector_temp));
|
||||
builder.createStore(vertex_interpolator_v3, out_interpolators[i]);
|
||||
}
|
||||
// Point coordinates.
|
||||
if (key.has_point_coordinates) {
|
||||
|
@ -1489,15 +1503,15 @@ VkShaderModule VulkanPipelineCache::GetGeometryShader(GeometryShaderKey key) {
|
|||
spv::Id const_vertex_index =
|
||||
builder.makeIntConstant(int32_t(i ^ (i >> 1)));
|
||||
// Interpolators.
|
||||
if (key.interpolator_count) {
|
||||
id_vector_temp.clear();
|
||||
id_vector_temp.push_back(const_vertex_index);
|
||||
id_vector_temp.clear();
|
||||
id_vector_temp.push_back(const_vertex_index);
|
||||
for (uint32_t j = 0; j < key.interpolator_count; ++j) {
|
||||
builder.createStore(
|
||||
builder.createLoad(
|
||||
builder.createAccessChain(spv::StorageClassInput,
|
||||
in_interpolators, id_vector_temp),
|
||||
spv::NoPrecision),
|
||||
out_interpolators);
|
||||
builder.createLoad(builder.createAccessChain(
|
||||
spv::StorageClassInput,
|
||||
in_interpolators[j], id_vector_temp),
|
||||
spv::NoPrecision),
|
||||
out_interpolators[j]);
|
||||
}
|
||||
// Point coordinates.
|
||||
if (key.has_point_coordinates) {
|
||||
|
|
|
@ -70,9 +70,11 @@ class VulkanPipelineCache {
|
|||
// have microcode analyzed.
|
||||
SpirvShaderTranslator::Modification GetCurrentVertexShaderModification(
|
||||
const Shader& shader,
|
||||
Shader::HostVertexShaderType host_vertex_shader_type) const;
|
||||
Shader::HostVertexShaderType host_vertex_shader_type,
|
||||
uint32_t interpolator_mask) const;
|
||||
SpirvShaderTranslator::Modification GetCurrentPixelShaderModification(
|
||||
const Shader& shader, uint32_t normalized_color_mask) const;
|
||||
const Shader& shader, uint32_t interpolator_mask,
|
||||
uint32_t param_gen_pos) const;
|
||||
|
||||
bool EnsureShadersTranslated(VulkanShader::VulkanTranslation* vertex_shader,
|
||||
VulkanShader::VulkanTranslation* pixel_shader);
|
||||
|
@ -262,8 +264,10 @@ class VulkanPipelineCache {
|
|||
// Whether the pipeline for the given description is supported by the device.
|
||||
bool ArePipelineRequirementsMet(const PipelineDescription& description) const;
|
||||
|
||||
static bool GetGeometryShaderKey(PipelineGeometryShader geometry_shader_type,
|
||||
GeometryShaderKey& key_out);
|
||||
static bool GetGeometryShaderKey(
|
||||
PipelineGeometryShader geometry_shader_type,
|
||||
SpirvShaderTranslator::Modification vertex_shader_modification,
|
||||
GeometryShaderKey& key_out);
|
||||
VkShaderModule GetGeometryShader(GeometryShaderKey key);
|
||||
|
||||
// Can be called from creation threads - all needed data must be fully set up
|
||||
|
|
19
xb.bat
19
xb.bat
|
@ -1,5 +1,5 @@
|
|||
@ECHO OFF
|
||||
REM Copyright 2015 Ben Vanik. All Rights Reserved.
|
||||
REM Copyright 2022 Ben Vanik. All Rights Reserved.
|
||||
|
||||
SET "DIR=%~dp0"
|
||||
|
||||
|
@ -7,10 +7,12 @@ REM ============================================================================
|
|||
REM Environment Validation
|
||||
REM ============================================================================
|
||||
|
||||
SET "PYTHON_MINIMUM_VERSION[0]=3"
|
||||
SET "PYTHON_MINIMUM_VERSION[1]=6"
|
||||
CALL :check_python
|
||||
IF %_RESULT% NEQ 0 (
|
||||
ECHO.
|
||||
ECHO Python 3.6+ must be installed and on PATH:
|
||||
ECHO Python %PYTHON_MINIMUM_VERSION[0]%.%PYTHON_MINIMUM_VERSION[1]%+ must be installed and on PATH:
|
||||
ECHO https://www.python.org/
|
||||
GOTO :eof
|
||||
)
|
||||
|
@ -33,9 +35,12 @@ SETLOCAL ENABLEDELAYEDEXPANSION
|
|||
|
||||
SET FOUND_PATH=""
|
||||
|
||||
SET "CANDIDATE_PATHS[0]=C:\python37\python.exe"
|
||||
SET "CANDIDATE_PATHS[1]=C:\python36\python.exe"
|
||||
SET OUTPUT_INDEX=2
|
||||
SET "CANDIDATE_PATHS[0]=C:\python310\python.exe"
|
||||
SET "CANDIDATE_PATHS[1]=C:\python39\python.exe"
|
||||
SET "CANDIDATE_PATHS[2]=C:\python38\python.exe"
|
||||
SET "CANDIDATE_PATHS[3]=C:\python37\python.exe"
|
||||
SET "CANDIDATE_PATHS[4]=C:\python%PYTHON_MINIMUM_VERSION[0]%%PYTHON_MINIMUM_VERSION[1]%\python.exe"
|
||||
SET OUTPUT_INDEX=5
|
||||
|
||||
FOR /F "usebackq delims=" %%L IN (`2^>NUL where python3`) DO (
|
||||
IF %%~zL NEQ 0 (
|
||||
|
@ -70,9 +75,9 @@ IF "%FOUND_PATH%"=="" (
|
|||
GOTO :eof
|
||||
)
|
||||
|
||||
CMD /C ""%FOUND_PATH%" -c "import sys; sys.exit(1 if not sys.version_info[:2] ^>= (3, 6) else 0)"
|
||||
CMD /C ""%FOUND_PATH%" -c "import sys; sys.exit(1 if not sys.version_info[:2] ^>= (%PYTHON_MINIMUM_VERSION[0]%, %PYTHON_MINIMUM_VERSION[1]%) else 0)"
|
||||
IF %ERRORLEVEL% NEQ 0 (
|
||||
ECHO ERROR: Python version mismatch, not at least 3.6.
|
||||
ECHO ERROR: Python version mismatch, not at least %PYTHON_MINIMUM_VERSION[0]%.%PYTHON_MINIMUM_VERSION[1]%.
|
||||
ECHO Found Python executable was "%FOUND_PATH%".
|
||||
ENDLOCAL & SET _RESULT=1
|
||||
GOTO :eof
|
||||
|
|
23
xb.ps1
23
xb.ps1
|
@ -5,20 +5,23 @@ function Write-FatalError($message) {
|
|||
Exit 1
|
||||
}
|
||||
|
||||
$pythonPath = Get-Command python | Select-Object -ExpandProperty Definition
|
||||
|
||||
# Check for 'python3' if 'python' isn't found
|
||||
if ([string]::IsNullOrEmpty($pythonPath)) {
|
||||
$pythonPath = Get-Command python3 | Select-Object -ExpandProperty Definition
|
||||
$pythonExecutables = 'python', 'python3'
|
||||
foreach ($pythonExecutable in $pythonExecutables) {
|
||||
if (!$pythonPath) {
|
||||
$pythonPath = powershell -NoLogo -NonInteractive "(Get-Command -ErrorAction SilentlyContinue $pythonexecutable).Definition" # Hack to not give command suggestion
|
||||
} else {
|
||||
break
|
||||
}
|
||||
}
|
||||
# Neither found, error and exit
|
||||
if ([string]::IsNullOrEmpty($pythonPath)) {
|
||||
Write-FatalError "ERROR: no Python executable found on PATH.`nMake sure you can run 'python' or 'python3' in a Command Prompt."
|
||||
$pythonMinimumVer = 3,6
|
||||
if (!$pythonPath) {
|
||||
Write-FatalError "ERROR: Python $($pythonMinimumVer[0]).$($pythonMinimumVer[1])+ must be installed and on PATH:`nhttps://www.python.org/"
|
||||
}
|
||||
|
||||
python -c "import sys; sys.exit(1 if not sys.version_info[:2] >= (3, 4) else 0)"
|
||||
& $pythonPath -c "import sys; sys.exit(1 if not sys.version_info[:2] >= ($($pythonMinimumVer[0]), $($pythonMinimumVer[1])) else 0)"
|
||||
if ($LASTEXITCODE -gt 0) {
|
||||
Write-FatalError "ERROR: Python version mismatch, not at least 3.4.`nFound Python executable was $($pythonPath)"
|
||||
Write-FatalError "ERROR: Python version mismatch, not at least $($pythonMinimumVer[0]).$($pythonMinimumVer[1]).`nFound Python executable was `"$($pythonPath)`"."
|
||||
}
|
||||
|
||||
python "$($PSScriptRoot)/xenia-build" $args
|
||||
& $pythonPath "$($PSScriptRoot)/xenia-build" $args
|
||||
|
|
|
@ -134,8 +134,9 @@ def main():
|
|||
print('')
|
||||
|
||||
# Check python version.
|
||||
if not sys.version_info[:2] >= (3, 6):
|
||||
print('ERROR: Python 3.6+ must be installed and on PATH')
|
||||
python_minimum_ver=3,6
|
||||
if not sys.version_info[:2] >= (python_minimum_ver[0], python_minimum_ver[1]):
|
||||
print('ERROR: Python ', python_minimum_ver[0], '.', python_minimum_ver[1], '+ must be installed and on PATH', sep='')
|
||||
sys.exit(1)
|
||||
|
||||
# Grab Visual Studio version and execute shell to set up environment.
|
||||
|
@ -1830,4 +1831,3 @@ class DevenvCommand(Command):
|
|||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
||||
|
|
Loading…
Reference in New Issue