[GPU] Eliminate unused shader I/O, UCP culling, centroid on Vulkan
For more optimal usage of exports and the parameter cache on the host regardless of how effective the optimizations in the host GPU driver are. Also reserve space for Vulkan/Metal/D3D11-specific HostVertexShaderTypes to use one more bit for the host vertex shader type in the shader modification bits, so that won't have to be done in the future as that would require invalidating shader storages (which are invalidated by this commit) again.
This commit is contained in:
parent
0a94b86cb8
commit
1a95bef8b3
|
@ -2159,12 +2159,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.
|
||||
|
@ -3227,25 +3236,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;
|
||||
|
@ -3325,18 +3323,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;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3387,22 +3391,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
|
||||
|
|
Loading…
Reference in New Issue