diff --git a/docs/building.md b/docs/building.md index 16430edb8..13e6e1f33 100644 --- a/docs/building.md +++ b/docs/building.md @@ -13,7 +13,7 @@ drivers. * For Visual Studio 2022, MSBuild `v142` must be used due to a compiler bug; See [#2003](https://github.com/xenia-project/xenia/issues/2003). * [Python 3.6+](https://www.python.org/downloads/) * Ensure Python is in PATH. -* Windows 10 SDK version 10.0.19041.0 (for Visual Studio 2019, this or any newer version) +* Windows 11 SDK version 10.0.22000.0 (for Visual Studio 2019, this or any newer version) ``` git clone https://github.com/xenia-project/xenia.git diff --git a/premake5.lua b/premake5.lua index 464502ed4..1b5a8ec9d 100644 --- a/premake5.lua +++ b/premake5.lua @@ -225,8 +225,9 @@ workspace("xenia") platforms({"Windows"}) -- 10.0.15063.0: ID3D12GraphicsCommandList1::SetSamplePositions. -- 10.0.19041.0: D3D12_HEAP_FLAG_CREATE_NOT_ZEROED. + -- 10.0.22000.0: DWMWA_WINDOW_CORNER_PREFERENCE. filter("action:vs2017") - systemversion("10.0.19041.0") + systemversion("10.0.22000.0") filter("action:vs2019") systemversion("10.0") filter({}) diff --git a/src/xenia/gpu/command_processor.cc b/src/xenia/gpu/command_processor.cc index 0fe9d7cbf..f935f22ec 100644 --- a/src/xenia/gpu/command_processor.cc +++ b/src/xenia/gpu/command_processor.cc @@ -12,6 +12,7 @@ #include #include #include +#include #include "third_party/fmt/include/fmt/format.h" #include "xenia/base/byte_stream.h" @@ -49,22 +50,23 @@ CommandProcessor::~CommandProcessor() = default; bool CommandProcessor::Initialize() { // Initialize the gamma ramps to their default (linear) values - taken from - // what games set when starting. + // what games set when starting with the sRGB (return value 1) + // VdGetCurrentDisplayGamma. for (uint32_t i = 0; i < 256; ++i) { - uint32_t value = i * 1023 / 255; - gamma_ramp_.table[i].value = value | (value << 10) | (value << 20); + uint32_t value = i * 0x3FF / 0xFF; + reg::DC_LUT_30_COLOR& gamma_ramp_entry = gamma_ramp_256_entry_table_[i]; + gamma_ramp_entry.color_10_blue = value; + gamma_ramp_entry.color_10_green = value; + gamma_ramp_entry.color_10_red = value; } for (uint32_t i = 0; i < 128; ++i) { - uint32_t value = (i * 65535 / 127) & ~63; - if (i < 127) { - value |= 0x200 << 16; - } + reg::DC_LUT_PWL_DATA gamma_ramp_entry = {}; + gamma_ramp_entry.base = (i * 0xFFFF / 0x7F) & ~UINT32_C(0x3F); + gamma_ramp_entry.delta = i < 0x7F ? 0x200 : 0; for (uint32_t j = 0; j < 3; ++j) { - gamma_ramp_.pwl[i].values[j].value = value; + gamma_ramp_pwl_rgb_[i][j] = gamma_ramp_entry; } } - dirty_gamma_ramp_table_ = true; - dirty_gamma_ramp_pwl_ = true; worker_running_ = true; worker_thread_ = kernel::object_ref( @@ -128,6 +130,46 @@ void CommandProcessor::EndTracing() { trace_writer_.Close(); } +void CommandProcessor::RestoreRegisters(uint32_t first_register, + const uint32_t* register_values, + uint32_t register_count, + bool execute_callbacks) { + if (first_register > RegisterFile::kRegisterCount || + RegisterFile::kRegisterCount - first_register < register_count) { + XELOGW( + "CommandProcessor::RestoreRegisters out of bounds (0x{:X} registers " + "starting with 0x{:X}, while a total of 0x{:X} registers are stored)", + register_count, first_register, RegisterFile::kRegisterCount); + if (first_register > RegisterFile::kRegisterCount) { + return; + } + register_count = + std::min(uint32_t(RegisterFile::kRegisterCount) - first_register, + register_count); + } + if (execute_callbacks) { + for (uint32_t i = 0; i < register_count; ++i) { + WriteRegister(first_register + i, register_values[i]); + } + } else { + std::memcpy(register_file_->values + first_register, register_values, + sizeof(uint32_t) * register_count); + } +} + +void CommandProcessor::RestoreGammaRamp( + const reg::DC_LUT_30_COLOR* new_gamma_ramp_256_entry_table, + const reg::DC_LUT_PWL_DATA* new_gamma_ramp_pwl_rgb, + uint32_t new_gamma_ramp_rw_component) { + std::memcpy(gamma_ramp_256_entry_table_, new_gamma_ramp_256_entry_table, + sizeof(reg::DC_LUT_30_COLOR) * 256); + std::memcpy(gamma_ramp_pwl_rgb_, new_gamma_ramp_pwl_rgb, + sizeof(reg::DC_LUT_PWL_DATA) * 3 * 128); + gamma_ramp_rw_component_ = new_gamma_ramp_rw_component; + OnGammaRamp256EntryTableValueWritten(); + OnGammaRampPWLValueWritten(); +} + void CommandProcessor::CallInThread(std::function fn) { if (pending_fns_.empty() && kernel::XThread::IsInThread(worker_thread_.get())) { @@ -286,68 +328,141 @@ void CommandProcessor::UpdateWritePointer(uint32_t value) { } void CommandProcessor::WriteRegister(uint32_t index, uint32_t value) { - RegisterFile* regs = register_file_; + RegisterFile& regs = *register_file_; if (index >= RegisterFile::kRegisterCount) { XELOGW("CommandProcessor::WriteRegister index out of bounds: {}", index); return; } - regs->values[index].u32 = value; - if (!regs->GetRegisterInfo(index)) { + regs.values[index].u32 = value; + if (!regs.GetRegisterInfo(index)) { XELOGW("GPU: Write to unknown register ({:04X} = {:08X})", index, value); } - // If this is a COHER register, set the dirty flag. - // This will block the command processor the next time it WAIT_MEM_REGs and - // allow us to synchronize the memory. - if (index == XE_GPU_REG_COHER_STATUS_HOST) { - regs->values[index].u32 |= 0x80000000ul; - } - // Scratch register writeback. if (index >= XE_GPU_REG_SCRATCH_REG0 && index <= XE_GPU_REG_SCRATCH_REG7) { uint32_t scratch_reg = index - XE_GPU_REG_SCRATCH_REG0; - if ((1 << scratch_reg) & regs->values[XE_GPU_REG_SCRATCH_UMSK].u32) { + if ((1 << scratch_reg) & regs.values[XE_GPU_REG_SCRATCH_UMSK].u32) { // Enabled - write to address. - uint32_t scratch_addr = regs->values[XE_GPU_REG_SCRATCH_ADDR].u32; + uint32_t scratch_addr = regs.values[XE_GPU_REG_SCRATCH_ADDR].u32; uint32_t mem_addr = scratch_addr + (scratch_reg * 4); xe::store_and_swap(memory_->TranslatePhysical(mem_addr), value); } - } -} + } else { + switch (index) { + // If this is a COHER register, set the dirty flag. + // This will block the command processor the next time it WAIT_MEM_REGs + // and allow us to synchronize the memory. + case XE_GPU_REG_COHER_STATUS_HOST: { + regs.values[index].u32 |= UINT32_C(0x80000000); + } break; -void CommandProcessor::UpdateGammaRampValue(GammaRampType type, - uint32_t value) { - RegisterFile* regs = register_file_; + case XE_GPU_REG_DC_LUT_RW_INDEX: { + // Reset the sequential read / write component index (see the M56 + // DC_LUT_SEQ_COLOR documentation). + gamma_ramp_rw_component_ = 0; + } break; - auto index = regs->values[XE_GPU_REG_DC_LUT_RW_INDEX].u32; + case XE_GPU_REG_DC_LUT_SEQ_COLOR: { + // Should be in the 256-entry table writing mode. + assert_zero(regs[XE_GPU_REG_DC_LUT_RW_MODE].u32 & 0b1); + auto& gamma_ramp_rw_index = regs.Get(); + // DC_LUT_SEQ_COLOR is in the red, green, blue order, but the write + // enable mask is blue, green, red. + bool write_gamma_ramp_component = + (regs[XE_GPU_REG_DC_LUT_WRITE_EN_MASK].u32 & + (UINT32_C(1) << (2 - gamma_ramp_rw_component_))) != 0; + if (write_gamma_ramp_component) { + reg::DC_LUT_30_COLOR& gamma_ramp_entry = + gamma_ramp_256_entry_table_[gamma_ramp_rw_index.rw_index]; + // Bits 0:5 are hardwired to zero. + uint32_t gamma_ramp_seq_color = + regs.Get().seq_color >> 6; + switch (gamma_ramp_rw_component_) { + case 0: + gamma_ramp_entry.color_10_red = gamma_ramp_seq_color; + break; + case 1: + gamma_ramp_entry.color_10_green = gamma_ramp_seq_color; + break; + case 2: + gamma_ramp_entry.color_10_blue = gamma_ramp_seq_color; + break; + } + } + if (++gamma_ramp_rw_component_ >= 3) { + gamma_ramp_rw_component_ = 0; + ++gamma_ramp_rw_index.rw_index; + } + if (write_gamma_ramp_component) { + OnGammaRamp256EntryTableValueWritten(); + } + } break; - auto mask = regs->values[XE_GPU_REG_DC_LUT_WRITE_EN_MASK].u32; - auto mask_lo = (mask >> 0) & 0x7; - auto mask_hi = (mask >> 3) & 0x7; + case XE_GPU_REG_DC_LUT_PWL_DATA: { + // Should be in the PWL writing mode. + assert_not_zero(regs[XE_GPU_REG_DC_LUT_RW_MODE].u32 & 0b1); + auto& gamma_ramp_rw_index = regs.Get(); + // Bit 7 of the index is ignored for PWL. + uint32_t gamma_ramp_rw_index_pwl = gamma_ramp_rw_index.rw_index & 0x7F; + // DC_LUT_PWL_DATA is likely in the red, green, blue order because + // DC_LUT_SEQ_COLOR is, but the write enable mask is blue, green, red. + bool write_gamma_ramp_component = + (regs[XE_GPU_REG_DC_LUT_WRITE_EN_MASK].u32 & + (UINT32_C(1) << (2 - gamma_ramp_rw_component_))) != 0; + if (write_gamma_ramp_component) { + reg::DC_LUT_PWL_DATA& gamma_ramp_entry = + gamma_ramp_pwl_rgb_[gamma_ramp_rw_index_pwl] + [gamma_ramp_rw_component_]; + auto gamma_ramp_value = regs.Get(); + // Bits 0:5 are hardwired to zero. + gamma_ramp_entry.base = gamma_ramp_value.base & ~UINT32_C(0x3F); + gamma_ramp_entry.delta = gamma_ramp_value.delta & ~UINT32_C(0x3F); + } + if (++gamma_ramp_rw_component_ >= 3) { + gamma_ramp_rw_component_ = 0; + // TODO(Triang3l): Should this increase beyond 7 bits for PWL? + // Direct3D 9 explicitly sets rw_index to 0x80 after writing the last + // PWL entry. However, the DC_LUT_RW_INDEX documentation says that for + // PWL, the bit 7 is ignored. + gamma_ramp_rw_index.rw_index = + (gamma_ramp_rw_index.rw_index & ~UINT32_C(0x7F)) | + ((gamma_ramp_rw_index_pwl + 1) & 0x7F); + } + if (write_gamma_ramp_component) { + OnGammaRampPWLValueWritten(); + } + } break; - // If games update individual components we're going to have a problem. - assert_true(mask_lo == 0 || mask_lo == 7); - assert_true(mask_hi == 0); - - if (mask_lo) { - switch (type) { - case GammaRampType::kTable: - assert_true(regs->values[XE_GPU_REG_DC_LUT_RW_MODE].u32 == 0); - gamma_ramp_.table[index].value = value; - dirty_gamma_ramp_table_ = true; - break; - case GammaRampType::kPWL: - assert_true(regs->values[XE_GPU_REG_DC_LUT_RW_MODE].u32 == 1); - // The lower 6 bits are hardwired to 0. - // https://developer.amd.com/wordpress/media/2012/10/RRG-216M56-03oOEM.pdf - gamma_ramp_.pwl[index].values[gamma_ramp_rw_subindex_].value = - value & ~(uint32_t(63) | (uint32_t(63) << 16)); - gamma_ramp_rw_subindex_ = (gamma_ramp_rw_subindex_ + 1) % 3; - dirty_gamma_ramp_pwl_ = true; - break; - default: - assert_unhandled_case(type); + case XE_GPU_REG_DC_LUT_30_COLOR: { + // Should be in the 256-entry table writing mode. + assert_zero(regs[XE_GPU_REG_DC_LUT_RW_MODE].u32 & 0b1); + auto& gamma_ramp_rw_index = regs.Get(); + uint32_t gamma_ramp_write_enable_mask = + regs[XE_GPU_REG_DC_LUT_WRITE_EN_MASK].u32 & 0b111; + if (gamma_ramp_write_enable_mask) { + reg::DC_LUT_30_COLOR& gamma_ramp_entry = + gamma_ramp_256_entry_table_[gamma_ramp_rw_index.rw_index]; + auto gamma_ramp_value = regs.Get(); + if (gamma_ramp_write_enable_mask & 0b001) { + gamma_ramp_entry.color_10_blue = gamma_ramp_value.color_10_blue; + } + if (gamma_ramp_write_enable_mask & 0b010) { + gamma_ramp_entry.color_10_green = gamma_ramp_value.color_10_green; + } + if (gamma_ramp_write_enable_mask & 0b100) { + gamma_ramp_entry.color_10_red = gamma_ramp_value.color_10_red; + } + } + ++gamma_ramp_rw_index.rw_index; + // TODO(Triang3l): Should this reset the component write index? If this + // increase is assumed to behave like a full DC_LUT_RW_INDEX write, it + // probably should. + gamma_ramp_rw_component_ = 0; + if (gamma_ramp_write_enable_mask) { + OnGammaRamp256EntryTableValueWritten(); + } + } break; } } } @@ -1493,5 +1608,17 @@ bool CommandProcessor::ExecutePacketType3_VIZ_QUERY(RingBuffer* reader, return true; } +void CommandProcessor::InitializeTrace() { + // Write the initial register values, to be loaded directly into the + // RegisterFile since all registers, including those that may have side + // effects on setting, will be saved. + trace_writer_.WriteRegisters( + 0, reinterpret_cast(register_file_->values), + RegisterFile::kRegisterCount, false); + + trace_writer_.WriteGammaRamp(gamma_ramp_256_entry_table(), + gamma_ramp_pwl_rgb(), gamma_ramp_rw_component_); +} + } // namespace gpu } // namespace xe diff --git a/src/xenia/gpu/command_processor.h b/src/xenia/gpu/command_processor.h index caa49e300..367ed9ee2 100644 --- a/src/xenia/gpu/command_processor.h +++ b/src/xenia/gpu/command_processor.h @@ -22,6 +22,7 @@ #include "xenia/base/ring_buffer.h" #include "xenia/base/threading.h" #include "xenia/gpu/register_file.h" +#include "xenia/gpu/registers.h" #include "xenia/gpu/trace_writer.h" #include "xenia/gpu/xenos.h" #include "xenia/kernel/xthread.h" @@ -64,61 +65,6 @@ enum class GammaRampType { kPWL, }; -struct GammaRamp { - // A lot of gamma ramp (DC_LUT) documentation: - // https://developer.amd.com/wordpress/media/2012/10/RRG-216M56-03oOEM.pdf - // The ramps entries are BGR, not RGB. - // For the 256-entry table (used by Direct3D 9 for a 8bpc front buffer), - // 535107D4 has in-game settings allowing separate configuration. - // The component order of the PWL table is untested, however, it's likely BGR - // too, since DC_LUTA/B registers have values for blue first, and for red - // last. - struct TableEntry { - union { - uint32_t value; - struct { - uint32_t b : 10; - uint32_t g : 10; - uint32_t r : 10; - uint32_t : 2; - }; - }; - }; - - struct PWLValue { - union { - uint32_t value; - struct { - // The lower 6 bits are always zero (these are 10-bit in the upper bits - // thus, not fully 16-bit). - // See DC_LUTA/B_CONTROL for information about the way they should be - // interpreted (`output = base + (multiplier * delta) / 2^increment`, - // where the increment is the value specified in DC_LUTA/B_CONTROL for - // the specific color channel, the base is 7 bits of the front buffer - // value above `increment` bits, the multiplier is the lower `increment` - // bits of it; the increment is nonzero, otherwise the 256-entry table - // should be used instead). - uint16_t base; - uint16_t delta; - }; - }; - }; - - struct PWLEntry { - union { - PWLValue values[3]; - struct { - PWLValue b; - PWLValue g; - PWLValue r; - }; - }; - }; - - TableEntry table[256]; - PWLEntry pwl[128]; -}; - class CommandProcessor { public: enum class SwapPostEffect { @@ -170,6 +116,13 @@ class CommandProcessor { virtual void TracePlaybackWroteMemory(uint32_t base_ptr, uint32_t length) = 0; + void RestoreRegisters(uint32_t first_register, + const uint32_t* register_values, + uint32_t register_count, bool execute_callbacks); + void RestoreGammaRamp( + const reg::DC_LUT_30_COLOR* new_gamma_ramp_256_entry_table, + const reg::DC_LUT_PWL_DATA* new_gamma_ramp_pwl_rgb, + uint32_t new_gamma_ramp_rw_component); virtual void RestoreEdramSnapshot(const void* snapshot) = 0; void InitializeRingBuffer(uint32_t ptr, uint32_t size_log2); @@ -201,7 +154,14 @@ class CommandProcessor { virtual void WriteRegister(uint32_t index, uint32_t value); - void UpdateGammaRampValue(GammaRampType type, uint32_t value); + const reg::DC_LUT_30_COLOR* gamma_ramp_256_entry_table() const { + return gamma_ramp_256_entry_table_; + } + const reg::DC_LUT_PWL_DATA* gamma_ramp_pwl_rgb() const { + return gamma_ramp_pwl_rgb_[0]; + } + virtual void OnGammaRamp256EntryTableValueWritten() {} + virtual void OnGammaRampPWLValueWritten() {} virtual void MakeCoherent(); virtual void PrepareForWait(); @@ -285,9 +245,7 @@ class CommandProcessor { return swap_post_effect_actual_; } - // TODO(Triang3l): Write the gamma ramp (including the display controller - // write pointers) in the common code. - virtual void InitializeTrace() = 0; + virtual void InitializeTrace(); Memory* memory_ = nullptr; kernel::KernelState* kernel_state_ = nullptr; @@ -334,15 +292,15 @@ class CommandProcessor { bool paused_ = false; - GammaRamp gamma_ramp_ = {}; - int gamma_ramp_rw_subindex_ = 0; - bool dirty_gamma_ramp_table_ = true; - bool dirty_gamma_ramp_pwl_ = true; - // By default (such as for tools), post-processing is disabled. // "Desired" is for the external thread managing the post-processing effect. SwapPostEffect swap_post_effect_desired_ = SwapPostEffect::kNone; SwapPostEffect swap_post_effect_actual_ = SwapPostEffect::kNone; + + private: + reg::DC_LUT_30_COLOR gamma_ramp_256_entry_table_[256] = {}; + reg::DC_LUT_PWL_DATA gamma_ramp_pwl_rgb_[128][3] = {}; + uint32_t gamma_ramp_rw_component_ = 0; }; } // namespace gpu diff --git a/src/xenia/gpu/d3d12/d3d12_command_processor.cc b/src/xenia/gpu/d3d12/d3d12_command_processor.cc index fa0fd4ab6..ebfbbe986 100644 --- a/src/xenia/gpu/d3d12/d3d12_command_processor.cc +++ b/src/xenia/gpu/d3d12/d3d12_command_processor.cc @@ -13,6 +13,7 @@ #include #include "xenia/base/assert.h" +#include "xenia/base/byte_order.h" #include "xenia/base/cvar.h" #include "xenia/base/logging.h" #include "xenia/base/math.h" @@ -1161,8 +1162,8 @@ bool D3D12CommandProcessor::SetupContext() { provider.GetHeapFlagCreateNotZeroed(); // Create gamma ramp resources. - dirty_gamma_ramp_table_ = true; - dirty_gamma_ramp_pwl_ = true; + gamma_ramp_256_entry_table_up_to_date_ = false; + gamma_ramp_pwl_up_to_date_ = false; D3D12_RESOURCE_DESC gamma_ramp_buffer_desc; ui::d3d12::util::FillBufferResourceDesc( gamma_ramp_buffer_desc, (256 + 128 * 3) * 4, D3D12_RESOURCE_FLAG_NONE); @@ -1699,15 +1700,17 @@ void D3D12CommandProcessor::WriteRegister(uint32_t index, uint32_t value) { texture_cache_->TextureFetchConstantWritten( (index - XE_GPU_REG_SHADER_CONSTANT_FETCH_00_0) / 6); } - } else if (index == XE_GPU_REG_DC_LUT_PWL_DATA) { - UpdateGammaRampValue(GammaRampType::kPWL, value); - } else if (index == XE_GPU_REG_DC_LUT_30_COLOR) { - UpdateGammaRampValue(GammaRampType::kTable, value); - } else if (index == XE_GPU_REG_DC_LUT_RW_MODE) { - gamma_ramp_rw_subindex_ = 0; } } +void D3D12CommandProcessor::OnGammaRamp256EntryTableValueWritten() { + gamma_ramp_256_entry_table_up_to_date_ = false; +} + +void D3D12CommandProcessor::OnGammaRampPWLValueWritten() { + gamma_ramp_pwl_up_to_date_ = false; +} + void D3D12CommandProcessor::IssueSwap(uint32_t frontbuffer_ptr, uint32_t frontbuffer_width, uint32_t frontbuffer_height) { @@ -1801,6 +1804,9 @@ void D3D12CommandProcessor::IssueSwap(uint32_t frontbuffer_ptr, // This is according to D3D::InitializePresentationParameters from a // game executable, which initializes the 256-entry table gamma ramp for // 8_8_8_8 output and the PWL gamma ramp for 2_10_10_10. + // TODO(Triang3l): Choose between the table and PWL based on + // DC_LUTA_CONTROL, support both for all formats (and also different + // increments for PWL). bool use_pwl_gamma_ramp = frontbuffer_format == xenos::TextureFormat::k_2_10_10_10 || frontbuffer_format == @@ -1811,20 +1817,43 @@ void D3D12CommandProcessor::IssueSwap(uint32_t frontbuffer_ptr, // Upload the new gamma ramp, using the upload buffer for the current // frame (will close the frame after this anyway, so can't write // multiple times per frame). - if (use_pwl_gamma_ramp ? dirty_gamma_ramp_pwl_ - : dirty_gamma_ramp_table_) { + if (!(use_pwl_gamma_ramp ? gamma_ramp_pwl_up_to_date_ + : gamma_ramp_256_entry_table_up_to_date_)) { uint32_t gamma_ramp_offset_bytes = use_pwl_gamma_ramp ? 256 * 4 : 0; uint32_t gamma_ramp_upload_offset_bytes = uint32_t(frame_current_ % kQueueFrames) * ((256 + 128 * 3) * 4) + gamma_ramp_offset_bytes; uint32_t gamma_ramp_size_bytes = (use_pwl_gamma_ramp ? 128 * 3 : 256) * 4; - std::memcpy(gamma_ramp_upload_buffer_mapping_ + - gamma_ramp_upload_offset_bytes, - use_pwl_gamma_ramp - ? static_cast(gamma_ramp_.pwl) - : static_cast(gamma_ramp_.table), - gamma_ramp_size_bytes); + if (std::endian::native != std::endian::little && + use_pwl_gamma_ramp) { + // R16G16 is first R16, where the shader expects the base, and + // second G16, where the delta should be, but gamma_ramp_pwl_rgb() + // is an array of 32-bit DC_LUT_PWL_DATA registers - swap 16 bits in + // each 32. + auto gamma_ramp_pwl_upload_buffer = + reinterpret_cast( + gamma_ramp_upload_buffer_mapping_ + + gamma_ramp_upload_offset_bytes); + const reg::DC_LUT_PWL_DATA* gamma_ramp_pwl = gamma_ramp_pwl_rgb(); + for (size_t i = 0; i < 128 * 3; ++i) { + reg::DC_LUT_PWL_DATA& gamma_ramp_pwl_upload_buffer_entry = + gamma_ramp_pwl_upload_buffer[i]; + reg::DC_LUT_PWL_DATA gamma_ramp_pwl_entry = gamma_ramp_pwl[i]; + gamma_ramp_pwl_upload_buffer_entry.base = + gamma_ramp_pwl_entry.delta; + gamma_ramp_pwl_upload_buffer_entry.delta = + gamma_ramp_pwl_entry.base; + } + } else { + std::memcpy( + gamma_ramp_upload_buffer_mapping_ + + gamma_ramp_upload_offset_bytes, + use_pwl_gamma_ramp + ? static_cast(gamma_ramp_pwl_rgb()) + : static_cast(gamma_ramp_256_entry_table()), + gamma_ramp_size_bytes); + } PushTransitionBarrier(gamma_ramp_buffer_.Get(), gamma_ramp_buffer_state_, D3D12_RESOURCE_STATE_COPY_DEST); @@ -1834,8 +1863,8 @@ void D3D12CommandProcessor::IssueSwap(uint32_t frontbuffer_ptr, gamma_ramp_buffer_.Get(), gamma_ramp_offset_bytes, gamma_ramp_upload_buffer_.Get(), gamma_ramp_upload_offset_bytes, gamma_ramp_size_bytes); - (use_pwl_gamma_ramp ? dirty_gamma_ramp_pwl_ - : dirty_gamma_ramp_table_) = false; + (use_pwl_gamma_ramp ? gamma_ramp_pwl_up_to_date_ + : gamma_ramp_256_entry_table_up_to_date_) = true; } // Destination, source, and if bindful, gamma ramp. @@ -2589,6 +2618,8 @@ bool D3D12CommandProcessor::IssueDraw(xenos::PrimitiveType primitive_type, } void D3D12CommandProcessor::InitializeTrace() { + CommandProcessor::InitializeTrace(); + if (!BeginSubmission(false)) { return; } @@ -3330,32 +3361,39 @@ void D3D12CommandProcessor::UpdateSystemConstantValues( float(pa_su_point_minmax.min_size) * (2.0f / 16.0f); float point_vertex_diameter_max = float(pa_su_point_minmax.max_size) * (2.0f / 16.0f); - float point_constant_radius_x = - float(pa_su_point_size.width) * (1.0f / 16.0f); - float point_constant_radius_y = - float(pa_su_point_size.height) * (1.0f / 16.0f); + float point_constant_diameter_x = + float(pa_su_point_size.width) * (2.0f / 16.0f); + float point_constant_diameter_y = + float(pa_su_point_size.height) * (2.0f / 16.0f); dirty |= system_constants_.point_vertex_diameter_min != point_vertex_diameter_min; dirty |= system_constants_.point_vertex_diameter_max != point_vertex_diameter_max; dirty |= - system_constants_.point_constant_radius[0] != point_constant_radius_x; + system_constants_.point_constant_diameter[0] != point_constant_diameter_x; dirty |= - system_constants_.point_constant_radius[1] != point_constant_radius_y; + system_constants_.point_constant_diameter[1] != point_constant_diameter_y; system_constants_.point_vertex_diameter_min = point_vertex_diameter_min; system_constants_.point_vertex_diameter_max = point_vertex_diameter_max; - system_constants_.point_constant_radius[0] = point_constant_radius_x; - system_constants_.point_constant_radius[1] = point_constant_radius_y; - float point_screen_to_ndc_x = + system_constants_.point_constant_diameter[0] = point_constant_diameter_x; + system_constants_.point_constant_diameter[1] = point_constant_diameter_y; + // 2 because 1 in the NDC is half of the viewport's axis, 0.5 for diameter to + // radius conversion to avoid multiplying the per-vertex diameter by an + // additional constant in the shader. + float point_screen_diameter_to_ndc_radius_x = (/* 0.5f * 2.0f * */ float(resolution_scale_x)) / std::max(viewport_info.xy_extent[0], uint32_t(1)); - float point_screen_to_ndc_y = + float point_screen_diameter_to_ndc_radius_y = (/* 0.5f * 2.0f * */ float(resolution_scale_y)) / std::max(viewport_info.xy_extent[1], uint32_t(1)); - dirty |= system_constants_.point_screen_to_ndc[0] != point_screen_to_ndc_x; - dirty |= system_constants_.point_screen_to_ndc[1] != point_screen_to_ndc_y; - system_constants_.point_screen_to_ndc[0] = point_screen_to_ndc_x; - system_constants_.point_screen_to_ndc[1] = point_screen_to_ndc_y; + dirty |= system_constants_.point_screen_diameter_to_ndc_radius[0] != + point_screen_diameter_to_ndc_radius_x; + dirty |= system_constants_.point_screen_diameter_to_ndc_radius[1] != + point_screen_diameter_to_ndc_radius_y; + system_constants_.point_screen_diameter_to_ndc_radius[0] = + point_screen_diameter_to_ndc_radius_x; + 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 = diff --git a/src/xenia/gpu/d3d12/d3d12_command_processor.h b/src/xenia/gpu/d3d12/d3d12_command_processor.h index a3b9f8577..2bb7a1c84 100644 --- a/src/xenia/gpu/d3d12/d3d12_command_processor.h +++ b/src/xenia/gpu/d3d12/d3d12_command_processor.h @@ -209,6 +209,9 @@ class D3D12CommandProcessor : public CommandProcessor { void WriteRegister(uint32_t index, uint32_t value) override; + void OnGammaRamp256EntryTableValueWritten() override; + void OnGammaRampPWLValueWritten() override; + void IssueSwap(uint32_t frontbuffer_ptr, uint32_t frontbuffer_width, uint32_t frontbuffer_height) override; @@ -496,17 +499,18 @@ class D3D12CommandProcessor : public CommandProcessor { std::unique_ptr texture_cache_; - // Bytes 0x0...0x3FF - 256-entry R10G10B10X2 gamma ramp (red and blue must be - // read as swapped - 535107D4 has settings allowing separate configuration). + // Bytes 0x0...0x3FF - 256-entry gamma ramp table with B10G10R10X2 data (read + // as R10G10B10X2 with swizzle). // Bytes 0x400...0x9FF - 128-entry PWL R16G16 gamma ramp (R - base, G - delta, // low 6 bits of each are zero, 3 elements per entry). - // https://www.x.org/docs/AMD/old/42590_m76_rrg_1.01o.pdf Microsoft::WRL::ComPtr gamma_ramp_buffer_; D3D12_RESOURCE_STATES gamma_ramp_buffer_state_; // Upload buffer for an image that is the same as gamma_ramp_, but with // kQueueFrames array layers. Microsoft::WRL::ComPtr gamma_ramp_upload_buffer_; uint8_t* gamma_ramp_upload_buffer_mapping_ = nullptr; + bool gamma_ramp_256_entry_table_up_to_date_ = false; + bool gamma_ramp_pwl_up_to_date_ = false; struct ApplyGammaConstants { uint32_t size[2]; diff --git a/src/xenia/gpu/d3d12/d3d12_render_target_cache.cc b/src/xenia/gpu/d3d12/d3d12_render_target_cache.cc index 45454f4fb..510669dbc 100644 --- a/src/xenia/gpu/d3d12/d3d12_render_target_cache.cc +++ b/src/xenia/gpu/d3d12/d3d12_render_target_cache.cc @@ -2943,10 +2943,10 @@ D3D12RenderTargetCache::GetOrCreateTransferPipelines(TransferShaderKey key) { kTransferSRVRegisterHostDepth)); } a.OpDclInputPSSIV(dxbc::InterpolationMode::kLinearNoPerspective, - dxbc::Dest::V(kInputRegisterPosition, 0b0011), + dxbc::Dest::V1D(kInputRegisterPosition, 0b0011), dxbc::Name::kPosition); if (key.dest_msaa_samples != xenos::MsaaSamples::k1X) { - a.OpDclInputPSSGV(dxbc::Dest::V(kInputRegisterSampleIndex, 0b0001), + a.OpDclInputPSSGV(dxbc::Dest::V1D(kInputRegisterSampleIndex, 0b0001), dxbc::Name::kSampleIndex); } if (osgn_parameter_index_sv_target != UINT32_MAX) { @@ -2971,7 +2971,7 @@ D3D12RenderTargetCache::GetOrCreateTransferPipelines(TransferShaderKey key) { // Split the destination pixel index into 32bpp tile in r0.z and // 32bpp-tile-relative pixel index in r0.xy. // r0.xy = pixel XY as uint - a.OpFToU(dxbc::Dest::R(0, 0b0011), dxbc::Src::V(kInputRegisterPosition)); + a.OpFToU(dxbc::Dest::R(0, 0b0011), dxbc::Src::V1D(kInputRegisterPosition)); uint32_t dest_sample_width_log2 = uint32_t(dest_is_64bpp) + uint32_t(key.dest_msaa_samples >= xenos::MsaaSamples::k4X); @@ -3057,7 +3057,7 @@ D3D12RenderTargetCache::GetOrCreateTransferPipelines(TransferShaderKey key) { // If 64bpp -> 32bpp, also the needed half in r0.w. dxbc::Src dest_sample( - dxbc::Src::V(kInputRegisterSampleIndex, dxbc::Src::kXXXX)); + dxbc::Src::V1D(kInputRegisterSampleIndex, dxbc::Src::kXXXX)); dxbc::Src source_sample(dest_sample); uint32_t source_tile_pixel_x_reg = 0; uint32_t source_tile_pixel_y_reg = 0; @@ -3086,7 +3086,7 @@ D3D12RenderTargetCache::GetOrCreateTransferPipelines(TransferShaderKey key) { source_sample = dxbc::Src::R(1, dxbc::Src::kZZZZ); a.OpBFI(dxbc::Dest::R(1, 0b0001), dxbc::Src::LU(31), dxbc::Src::LU(1), dxbc::Src::R(0, dxbc::Src::kXXXX), - dxbc::Src::V(kInputRegisterSampleIndex, dxbc::Src::kXXXX)); + dxbc::Src::V1D(kInputRegisterSampleIndex, dxbc::Src::kXXXX)); source_tile_pixel_x_reg = 1; } else if (key.dest_msaa_samples == xenos::MsaaSamples::k2X) { // 32bpp -> 64bpp, 4x -> 2x. @@ -3128,7 +3128,7 @@ D3D12RenderTargetCache::GetOrCreateTransferPipelines(TransferShaderKey key) { a.OpIShL(dxbc::Dest::R(1, 0b0001), dxbc::Src::R(0, dxbc::Src::kXXXX), dxbc::Src::LU(2)); a.OpBFI(dxbc::Dest::R(1, 0b0001), dxbc::Src::LU(1), dxbc::Src::LU(1), - dxbc::Src::V(kInputRegisterSampleIndex, dxbc::Src::kXXXX), + dxbc::Src::V1D(kInputRegisterSampleIndex, dxbc::Src::kXXXX), dxbc::Src::R(1, dxbc::Src::kXXXX)); source_tile_pixel_x_reg = 1; // Y is handled by common code. diff --git a/src/xenia/gpu/d3d12/pipeline_cache.cc b/src/xenia/gpu/d3d12/pipeline_cache.cc index cf5e3c948..1ae7bef55 100644 --- a/src/xenia/gpu/d3d12/pipeline_cache.cc +++ b/src/xenia/gpu/d3d12/pipeline_cache.cc @@ -20,6 +20,7 @@ #include #include +#include "third_party/dxbc/DXBCChecksum.h" #include "third_party/fmt/include/fmt/format.h" #include "xenia/base/assert.h" #include "xenia/base/byte_order.h" @@ -35,6 +36,8 @@ #include "xenia/gpu/d3d12/d3d12_command_processor.h" #include "xenia/gpu/d3d12/d3d12_render_target_cache.h" #include "xenia/gpu/draw_util.h" +#include "xenia/gpu/dxbc.h" +#include "xenia/gpu/dxbc_shader_translator.h" #include "xenia/gpu/gpu_flags.h" #include "xenia/gpu/registers.h" #include "xenia/gpu/xenos.h" @@ -73,9 +76,6 @@ namespace shaders { #include "xenia/gpu/shaders/bytecode/d3d12_5_1/discrete_triangle_hs.h" #include "xenia/gpu/shaders/bytecode/d3d12_5_1/float24_round_ps.h" #include "xenia/gpu/shaders/bytecode/d3d12_5_1/float24_truncate_ps.h" -#include "xenia/gpu/shaders/bytecode/d3d12_5_1/primitive_point_list_gs.h" -#include "xenia/gpu/shaders/bytecode/d3d12_5_1/primitive_quad_list_gs.h" -#include "xenia/gpu/shaders/bytecode/d3d12_5_1/primitive_rectangle_list_gs.h" #include "xenia/gpu/shaders/bytecode/d3d12_5_1/tessellation_adaptive_vs.h" #include "xenia/gpu/shaders/bytecode/d3d12_5_1/tessellation_indexed_vs.h" } // namespace shaders @@ -676,6 +676,12 @@ void PipelineCache::InitializeShaderStorage( pixel_shader = nullptr; pipeline_runtime_description.pixel_shader = nullptr; } + GeometryShaderKey pipeline_geometry_shader_key; + pipeline_runtime_description.geometry_shader = + GetGeometryShaderKey(pipeline_description.geometry_shader, + pipeline_geometry_shader_key) + ? &GetGeometryShader(pipeline_geometry_shader_key) + : nullptr; pipeline_runtime_description.root_signature = command_processor_.GetRootSignature( vertex_shader, pixel_shader, @@ -1390,6 +1396,11 @@ bool PipelineCache::GetCurrentStateDescription( break; } } + GeometryShaderKey geometry_shader_key; + runtime_description_out.geometry_shader = + GetGeometryShaderKey(description_out.geometry_shader, geometry_shader_key) + ? &GetGeometryShader(geometry_shader_key) + : nullptr; // The rest doesn't matter when rasterization is disabled (thus no writing to // anywhere from post-geometry stages and no samples are counted). @@ -1669,6 +1680,1113 @@ bool PipelineCache::GetCurrentStateDescription( return true; } +bool PipelineCache::GetGeometryShaderKey( + PipelineGeometryShader geometry_shader_type, 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; + key.user_clip_plane_cull = 0; + key.has_vertex_kill_and = 1; + key.has_point_size = 1; + key.has_point_coordinates = 1; + key_out = key; + return true; +} + +void PipelineCache::CreateDxbcGeometryShader( + GeometryShaderKey key, std::vector& shader_out) { + shader_out.clear(); + + // RDEF, ISGN, OSG5, SHEX, STAT. + constexpr uint32_t kBlobCount = 5; + + // Allocate space for the container header and the blob offsets. + shader_out.resize(sizeof(dxbc::ContainerHeader) / sizeof(uint32_t) + + kBlobCount); + uint32_t blob_offset_position_dwords = + sizeof(dxbc::ContainerHeader) / sizeof(uint32_t); + uint32_t blob_position_dwords = uint32_t(shader_out.size()); + constexpr uint32_t kBlobHeaderSizeDwords = + sizeof(dxbc::BlobHeader) / sizeof(uint32_t); + + uint32_t name_ptr; + + // *************************************************************************** + // Resource definition + // *************************************************************************** + + shader_out[blob_offset_position_dwords] = + uint32_t(blob_position_dwords * sizeof(uint32_t)); + uint32_t rdef_position_dwords = blob_position_dwords + kBlobHeaderSizeDwords; + // Not needed, as the next operation done is resize, to allocate the space for + // both the blob header and the resource definition header. + // shader_out.resize(rdef_position_dwords); + + // RDEF header - the actual definitions will be written if needed. + shader_out.resize(rdef_position_dwords + + sizeof(dxbc::RdefHeader) / sizeof(uint32_t)); + // Generator name. + dxbc::AppendAlignedString(shader_out, "Xenia"); + { + auto& rdef_header = *reinterpret_cast( + shader_out.data() + rdef_position_dwords); + rdef_header.shader_model = dxbc::RdefShaderModel::kGeometryShader5_1; + rdef_header.compile_flags = + dxbc::kCompileFlagNoPreshader | dxbc::kCompileFlagPreferFlowControl | + dxbc::kCompileFlagIeeeStrictness | dxbc::kCompileFlagAllResourcesBound; + // Generator name is right after the header. + rdef_header.generator_name_ptr = sizeof(dxbc::RdefHeader); + rdef_header.fourcc = dxbc::RdefHeader::FourCC::k5_1; + rdef_header.InitializeSizes(); + } + + uint32_t system_cbuffer_size_vector_aligned_bytes = 0; + + if (key.type == PipelineGeometryShader::kPointList) { + // Need point parameters from the system constants. + + // Constant types - float2 only. + // Names. + name_ptr = + uint32_t((shader_out.size() - rdef_position_dwords) * sizeof(uint32_t)); + uint32_t rdef_name_ptr_float2 = name_ptr; + name_ptr += dxbc::AppendAlignedString(shader_out, "float2"); + // Types. + uint32_t rdef_type_float2_position_dwords = uint32_t(shader_out.size()); + uint32_t rdef_type_float2_ptr = + uint32_t((rdef_type_float2_position_dwords - rdef_position_dwords) * + sizeof(uint32_t)); + shader_out.resize(rdef_type_float2_position_dwords + + sizeof(dxbc::RdefType) / sizeof(uint32_t)); + { + auto& rdef_type_float2 = *reinterpret_cast( + shader_out.data() + rdef_type_float2_position_dwords); + rdef_type_float2.variable_class = dxbc::RdefVariableClass::kVector; + rdef_type_float2.variable_type = dxbc::RdefVariableType::kFloat; + rdef_type_float2.row_count = 1; + rdef_type_float2.column_count = 2; + rdef_type_float2.name_ptr = rdef_name_ptr_float2; + } + + // Constants: + // - float2 xe_point_constant_diameter + // - float2 xe_point_screen_diameter_to_ndc_radius + enum PointConstant : uint32_t { + kPointConstantConstantDiameter, + kPointConstantScreenDiameterToNDCRadius, + kPointConstantCount, + }; + // Names. + name_ptr = + uint32_t((shader_out.size() - rdef_position_dwords) * sizeof(uint32_t)); + uint32_t rdef_name_ptr_xe_point_constant_diameter = name_ptr; + name_ptr += + dxbc::AppendAlignedString(shader_out, "xe_point_constant_diameter"); + uint32_t rdef_name_ptr_xe_point_screen_diameter_to_ndc_radius = name_ptr; + name_ptr += dxbc::AppendAlignedString( + shader_out, "xe_point_screen_diameter_to_ndc_radius"); + // Constants. + uint32_t rdef_constants_position_dwords = uint32_t(shader_out.size()); + uint32_t rdef_constants_ptr = + uint32_t((rdef_constants_position_dwords - rdef_position_dwords) * + sizeof(uint32_t)); + shader_out.resize(rdef_constants_position_dwords + + sizeof(dxbc::RdefVariable) / sizeof(uint32_t) * + kPointConstantCount); + { + auto rdef_constants = reinterpret_cast( + shader_out.data() + rdef_constants_position_dwords); + // float2 xe_point_constant_diameter + static_assert( + sizeof(DxbcShaderTranslator::SystemConstants :: + point_constant_diameter) == sizeof(float) * 2, + "DxbcShaderTranslator point_constant_diameter system constant size " + "differs between the shader translator and geometry shader " + "generation"); + static_assert_size( + DxbcShaderTranslator::SystemConstants::point_constant_diameter, + sizeof(float) * 2); + dxbc::RdefVariable& rdef_constant_point_constant_diameter = + rdef_constants[kPointConstantConstantDiameter]; + rdef_constant_point_constant_diameter.name_ptr = + rdef_name_ptr_xe_point_constant_diameter; + rdef_constant_point_constant_diameter.start_offset_bytes = offsetof( + DxbcShaderTranslator::SystemConstants, point_constant_diameter); + rdef_constant_point_constant_diameter.size_bytes = sizeof(float) * 2; + rdef_constant_point_constant_diameter.flags = dxbc::kRdefVariableFlagUsed; + rdef_constant_point_constant_diameter.type_ptr = rdef_type_float2_ptr; + rdef_constant_point_constant_diameter.start_texture = UINT32_MAX; + rdef_constant_point_constant_diameter.start_sampler = UINT32_MAX; + // float2 xe_point_screen_diameter_to_ndc_radius + static_assert( + sizeof(DxbcShaderTranslator::SystemConstants :: + point_screen_diameter_to_ndc_radius) == sizeof(float) * 2, + "DxbcShaderTranslator point_screen_diameter_to_ndc_radius system " + "constant size differs between the shader translator and geometry " + "shader generation"); + dxbc::RdefVariable& rdef_constant_point_screen_diameter_to_ndc_radius = + rdef_constants[kPointConstantScreenDiameterToNDCRadius]; + rdef_constant_point_screen_diameter_to_ndc_radius.name_ptr = + rdef_name_ptr_xe_point_screen_diameter_to_ndc_radius; + rdef_constant_point_screen_diameter_to_ndc_radius.start_offset_bytes = + offsetof(DxbcShaderTranslator::SystemConstants, + point_screen_diameter_to_ndc_radius); + rdef_constant_point_screen_diameter_to_ndc_radius.size_bytes = + sizeof(float) * 2; + rdef_constant_point_screen_diameter_to_ndc_radius.flags = + dxbc::kRdefVariableFlagUsed; + rdef_constant_point_screen_diameter_to_ndc_radius.type_ptr = + rdef_type_float2_ptr; + rdef_constant_point_screen_diameter_to_ndc_radius.start_texture = + UINT32_MAX; + rdef_constant_point_screen_diameter_to_ndc_radius.start_sampler = + UINT32_MAX; + } + + // Constant buffers - xe_system_cbuffer only. + + // Names. + name_ptr = + uint32_t((shader_out.size() - rdef_position_dwords) * sizeof(uint32_t)); + uint32_t rdef_name_ptr_xe_system_cbuffer = name_ptr; + name_ptr += dxbc::AppendAlignedString(shader_out, "xe_system_cbuffer"); + // Constant buffers. + uint32_t rdef_cbuffer_position_dwords = uint32_t(shader_out.size()); + shader_out.resize(rdef_cbuffer_position_dwords + + sizeof(dxbc::RdefCbuffer) / sizeof(uint32_t)); + { + auto& rdef_cbuffer_system = *reinterpret_cast( + shader_out.data() + rdef_cbuffer_position_dwords); + rdef_cbuffer_system.name_ptr = rdef_name_ptr_xe_system_cbuffer; + rdef_cbuffer_system.variable_count = kPointConstantCount; + rdef_cbuffer_system.variables_ptr = rdef_constants_ptr; + auto rdef_constants = reinterpret_cast( + shader_out.data() + rdef_constants_position_dwords); + for (uint32_t i = 0; i < kPointConstantCount; ++i) { + system_cbuffer_size_vector_aligned_bytes = + std::max(system_cbuffer_size_vector_aligned_bytes, + rdef_constants[i].start_offset_bytes + + rdef_constants[i].size_bytes); + } + system_cbuffer_size_vector_aligned_bytes = + xe::align(system_cbuffer_size_vector_aligned_bytes, + uint32_t(sizeof(uint32_t) * 4)); + rdef_cbuffer_system.size_vector_aligned_bytes = + system_cbuffer_size_vector_aligned_bytes; + } + + // Bindings - xe_system_cbuffer only. + uint32_t rdef_binding_position_dwords = uint32_t(shader_out.size()); + shader_out.resize(rdef_binding_position_dwords + + sizeof(dxbc::RdefInputBind) / sizeof(uint32_t)); + { + auto& rdef_binding_cbuffer_system = + *reinterpret_cast(shader_out.data() + + rdef_binding_position_dwords); + rdef_binding_cbuffer_system.name_ptr = rdef_name_ptr_xe_system_cbuffer; + rdef_binding_cbuffer_system.type = dxbc::RdefInputType::kCbuffer; + rdef_binding_cbuffer_system.bind_point = + uint32_t(DxbcShaderTranslator::CbufferRegister::kSystemConstants); + rdef_binding_cbuffer_system.bind_count = 1; + rdef_binding_cbuffer_system.flags = dxbc::kRdefInputFlagUserPacked; + } + + // Pointers in the header. + { + auto& rdef_header = *reinterpret_cast( + shader_out.data() + rdef_position_dwords); + rdef_header.cbuffer_count = 1; + rdef_header.cbuffers_ptr = + uint32_t((rdef_cbuffer_position_dwords - rdef_position_dwords) * + sizeof(uint32_t)); + rdef_header.input_bind_count = 1; + rdef_header.input_binds_ptr = + uint32_t((rdef_binding_position_dwords - rdef_position_dwords) * + sizeof(uint32_t)); + } + } + + { + auto& blob_header = *reinterpret_cast( + shader_out.data() + blob_position_dwords); + blob_header.fourcc = dxbc::BlobHeader::FourCC::kResourceDefinition; + blob_position_dwords = uint32_t(shader_out.size()); + blob_header.size_bytes = + (blob_position_dwords - kBlobHeaderSizeDwords) * sizeof(uint32_t) - + shader_out[blob_offset_position_dwords++]; + } + + // *************************************************************************** + // Input signature + // *************************************************************************** + + // Clip and cull distances are tightly packed together into registers, but + // have separate signature parameters with each being a vec4-aligned window. + uint32_t input_clip_distance_count = + key.user_clip_plane_cull ? 0 : key.user_clip_plane_count; + uint32_t input_cull_distance_count = + (key.user_clip_plane_cull ? key.user_clip_plane_count : 0) + + key.has_vertex_kill_and; + 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. + uint32_t isgn_parameter_count = + key.interpolator_count + key.has_point_size + 1 + + ((input_clip_and_cull_distance_count + 3) / 4) + + uint32_t(input_cull_distance_count && + (input_clip_distance_count & 3) != 0); + + // Reserve space for the header and the parameters. + shader_out[blob_offset_position_dwords] = + uint32_t(blob_position_dwords * sizeof(uint32_t)); + uint32_t isgn_position_dwords = blob_position_dwords + kBlobHeaderSizeDwords; + shader_out.resize(isgn_position_dwords + + sizeof(dxbc::Signature) / sizeof(uint32_t) + + sizeof(dxbc::SignatureParameter) / sizeof(uint32_t) * + isgn_parameter_count); + + // Names (after the parameters). + 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) { + name_ptr += dxbc::AppendAlignedString(shader_out, "TEXCOORD"); + } + uint32_t isgn_name_ptr_sv_position = name_ptr; + name_ptr += dxbc::AppendAlignedString(shader_out, "SV_Position"); + uint32_t isgn_name_ptr_sv_clip_distance = name_ptr; + if (input_clip_distance_count) { + name_ptr += dxbc::AppendAlignedString(shader_out, "SV_ClipDistance"); + } + uint32_t isgn_name_ptr_sv_cull_distance = name_ptr; + if (input_cull_distance_count) { + name_ptr += dxbc::AppendAlignedString(shader_out, "SV_CullDistance"); + } + + // 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; + { + // Header. + auto& isgn_header = *reinterpret_cast( + shader_out.data() + isgn_position_dwords); + isgn_header.parameter_count = isgn_parameter_count; + isgn_header.parameter_info_ptr = sizeof(dxbc::Signature); + + // Parameters. + auto isgn_parameters = reinterpret_cast( + shader_out.data() + isgn_position_dwords + + sizeof(dxbc::Signature) / sizeof(uint32_t)); + uint32_t isgn_parameter_index = 0; + uint32_t input_register_index = 0; + + // Interpolators (TEXCOORD#). + if (key.interpolator_count) { + input_register_interpolators = input_register_index; + for (uint32_t i = 0; i < key.interpolator_count; ++i) { + assert_true(isgn_parameter_index < isgn_parameter_count); + dxbc::SignatureParameter& isgn_interpolator = + isgn_parameters[isgn_parameter_index++]; + isgn_interpolator.semantic_name_ptr = isgn_name_ptr_texcoord; + isgn_interpolator.semantic_index = i; + isgn_interpolator.component_type = + dxbc::SignatureRegisterComponentType::kFloat32; + isgn_interpolator.register_index = input_register_index++; + isgn_interpolator.mask = 0b1111; + isgn_interpolator.always_reads_mask = 0b1111; + } + } + + // 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. + input_register_position = input_register_index; + assert_true(isgn_parameter_index < isgn_parameter_count); + dxbc::SignatureParameter& isgn_sv_position = + isgn_parameters[isgn_parameter_index++]; + isgn_sv_position.semantic_name_ptr = isgn_name_ptr_sv_position; + isgn_sv_position.system_value = dxbc::Name::kPosition; + isgn_sv_position.component_type = + dxbc::SignatureRegisterComponentType::kFloat32; + isgn_sv_position.register_index = input_register_index++; + isgn_sv_position.mask = 0b1111; + isgn_sv_position.always_reads_mask = 0b1111; + + // Clip and cull distances. + if (input_clip_and_cull_distance_count) { + input_register_clip_and_cull_distances = input_register_index; + uint32_t isgn_cull_distance_semantic_index = 0; + for (uint32_t i = 0; i < input_clip_and_cull_distance_count; i += 4) { + if (i < input_clip_distance_count) { + dxbc::SignatureParameter& isgn_sv_clip_distance = + isgn_parameters[isgn_parameter_index++]; + isgn_sv_clip_distance.semantic_name_ptr = + isgn_name_ptr_sv_clip_distance; + isgn_sv_clip_distance.semantic_index = i / 4; + isgn_sv_clip_distance.system_value = dxbc::Name::kClipDistance; + isgn_sv_clip_distance.component_type = + dxbc::SignatureRegisterComponentType::kFloat32; + isgn_sv_clip_distance.register_index = input_register_index; + uint8_t isgn_sv_clip_distance_mask = + (UINT8_C(1) << std::min(input_clip_distance_count - i, + UINT32_C(4))) - + 1; + isgn_sv_clip_distance.mask = isgn_sv_clip_distance_mask; + isgn_sv_clip_distance.always_reads_mask = isgn_sv_clip_distance_mask; + } + if (input_cull_distance_count && i + 4 > input_clip_distance_count) { + dxbc::SignatureParameter& isgn_sv_cull_distance = + isgn_parameters[isgn_parameter_index++]; + isgn_sv_cull_distance.semantic_name_ptr = + isgn_name_ptr_sv_cull_distance; + isgn_sv_cull_distance.semantic_index = + isgn_cull_distance_semantic_index++; + isgn_sv_cull_distance.system_value = dxbc::Name::kCullDistance; + isgn_sv_cull_distance.component_type = + dxbc::SignatureRegisterComponentType::kFloat32; + isgn_sv_cull_distance.register_index = input_register_index; + uint8_t isgn_sv_cull_distance_mask = + (UINT8_C(1) << std::min(input_clip_and_cull_distance_count - i, + UINT32_C(4))) - + 1; + if (i < input_clip_distance_count) { + isgn_sv_cull_distance_mask &= + ~((UINT8_C(1) << (input_clip_distance_count - i)) - 1); + } + isgn_sv_cull_distance.mask = isgn_sv_cull_distance_mask; + isgn_sv_cull_distance.always_reads_mask = isgn_sv_cull_distance_mask; + } + ++input_register_index; + } + } + + assert_true(isgn_parameter_index == isgn_parameter_count); + } + + { + auto& blob_header = *reinterpret_cast( + shader_out.data() + blob_position_dwords); + blob_header.fourcc = dxbc::BlobHeader::FourCC::kInputSignature; + blob_position_dwords = uint32_t(shader_out.size()); + blob_header.size_bytes = + (blob_position_dwords - kBlobHeaderSizeDwords) * sizeof(uint32_t) - + shader_out[blob_offset_position_dwords++]; + } + + // *************************************************************************** + // Output signature + // *************************************************************************** + + // 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); + + // Reserve space for the header and the parameters. + shader_out[blob_offset_position_dwords] = + uint32_t(blob_position_dwords * sizeof(uint32_t)); + uint32_t osgn_position_dwords = blob_position_dwords + kBlobHeaderSizeDwords; + shader_out.resize(osgn_position_dwords + + sizeof(dxbc::Signature) / sizeof(uint32_t) + + sizeof(dxbc::SignatureParameterForGS) / sizeof(uint32_t) * + osgn_parameter_count); + + // Names (after the parameters). + 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) { + name_ptr += dxbc::AppendAlignedString(shader_out, "TEXCOORD"); + } + 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; + if (input_clip_distance_count) { + name_ptr += dxbc::AppendAlignedString(shader_out, "SV_ClipDistance"); + } + + // Header and parameters. + uint32_t output_register_interpolators = UINT32_MAX; + uint32_t output_register_point_coordinates = UINT32_MAX; + uint32_t output_register_position; + uint32_t output_register_clip_distances = UINT32_MAX; + { + // Header. + auto& osgn_header = *reinterpret_cast( + shader_out.data() + osgn_position_dwords); + osgn_header.parameter_count = osgn_parameter_count; + osgn_header.parameter_info_ptr = sizeof(dxbc::Signature); + + // Parameters. + auto osgn_parameters = reinterpret_cast( + shader_out.data() + osgn_position_dwords + + sizeof(dxbc::Signature) / sizeof(uint32_t)); + uint32_t osgn_parameter_index = 0; + uint32_t output_register_index = 0; + + // Interpolators (TEXCOORD#). + if (key.interpolator_count) { + output_register_interpolators = output_register_index; + for (uint32_t i = 0; i < key.interpolator_count; ++i) { + assert_true(osgn_parameter_index < osgn_parameter_count); + dxbc::SignatureParameterForGS& osgn_interpolator = + osgn_parameters[osgn_parameter_index++]; + osgn_interpolator.semantic_name_ptr = osgn_name_ptr_texcoord; + osgn_interpolator.semantic_index = i; + osgn_interpolator.component_type = + dxbc::SignatureRegisterComponentType::kFloat32; + osgn_interpolator.register_index = output_register_index++; + osgn_interpolator.mask = 0b1111; + } + } + + // 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. + 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.component_type = + dxbc::SignatureRegisterComponentType::kFloat32; + osgn_point_coordinates.register_index = output_register_index++; + osgn_point_coordinates.mask = 0b0111; + osgn_point_coordinates.never_writes_mask = 0b1100; + } + + // Position. + output_register_position = output_register_index; + assert_true(osgn_parameter_index < osgn_parameter_count); + dxbc::SignatureParameterForGS& osgn_sv_position = + osgn_parameters[osgn_parameter_index++]; + osgn_sv_position.semantic_name_ptr = osgn_name_ptr_sv_position; + osgn_sv_position.system_value = dxbc::Name::kPosition; + osgn_sv_position.component_type = + dxbc::SignatureRegisterComponentType::kFloat32; + osgn_sv_position.register_index = output_register_index++; + osgn_sv_position.mask = 0b1111; + + // Clip distances. + if (input_clip_distance_count) { + output_register_clip_distances = output_register_index; + for (uint32_t i = 0; i < input_clip_distance_count; i += 4) { + dxbc::SignatureParameterForGS& osgn_sv_clip_distance = + osgn_parameters[osgn_parameter_index++]; + osgn_sv_clip_distance.semantic_name_ptr = + osgn_name_ptr_sv_clip_distance; + osgn_sv_clip_distance.semantic_index = i / 4; + osgn_sv_clip_distance.system_value = dxbc::Name::kClipDistance; + osgn_sv_clip_distance.component_type = + dxbc::SignatureRegisterComponentType::kFloat32; + osgn_sv_clip_distance.register_index = output_register_index++; + uint8_t osgn_sv_clip_distance_mask = + (UINT8_C(1) << std::min(input_clip_distance_count - i, + UINT32_C(4))) - + 1; + osgn_sv_clip_distance.mask = osgn_sv_clip_distance_mask; + osgn_sv_clip_distance.never_writes_mask = + osgn_sv_clip_distance_mask ^ 0b1111; + } + } + + assert_true(osgn_parameter_index == osgn_parameter_count); + } + + { + auto& blob_header = *reinterpret_cast( + shader_out.data() + blob_position_dwords); + blob_header.fourcc = dxbc::BlobHeader::FourCC::kOutputSignatureForGS; + blob_position_dwords = uint32_t(shader_out.size()); + blob_header.size_bytes = + (blob_position_dwords - kBlobHeaderSizeDwords) * sizeof(uint32_t) - + shader_out[blob_offset_position_dwords++]; + } + + // *************************************************************************** + // Shader program + // *************************************************************************** + + shader_out[blob_offset_position_dwords] = + uint32_t(blob_position_dwords * sizeof(uint32_t)); + uint32_t shex_position_dwords = blob_position_dwords + kBlobHeaderSizeDwords; + shader_out.resize(shex_position_dwords); + + shader_out.push_back( + dxbc::VersionToken(dxbc::ProgramType::kGeometryShader, 5, 1)); + // Reserve space for the length token. + shader_out.push_back(0); + + dxbc::Statistics stat; + std::memset(&stat, 0, sizeof(dxbc::Statistics)); + dxbc::Assembler a(shader_out, stat); + + a.OpDclGlobalFlags(dxbc::kGlobalFlagAllResourcesBound); + + if (system_cbuffer_size_vector_aligned_bytes) { + a.OpDclConstantBuffer( + dxbc::Src::CB( + dxbc::Src::Dcl, 0, + uint32_t(DxbcShaderTranslator::CbufferRegister::kSystemConstants), + uint32_t(DxbcShaderTranslator::CbufferRegister::kSystemConstants)), + system_cbuffer_size_vector_aligned_bytes / (sizeof(uint32_t) * 4)); + } + + dxbc::Primitive input_primitive = dxbc::Primitive::kUndefined; + uint32_t input_primitive_vertex_count = 0; + dxbc::PrimitiveTopology output_primitive_topology = + dxbc::PrimitiveTopology::kUndefined; + uint32_t max_output_vertex_count = 0; + switch (key.type) { + case PipelineGeometryShader::kPointList: + // Point to a strip of 2 triangles. + input_primitive = dxbc::Primitive::kPoint; + input_primitive_vertex_count = 1; + output_primitive_topology = dxbc::PrimitiveTopology::kTriangleStrip; + max_output_vertex_count = 4; + break; + case PipelineGeometryShader::kRectangleList: + // Triangle to a strip of 2 triangles. + input_primitive = dxbc::Primitive::kTriangle; + input_primitive_vertex_count = 3; + output_primitive_topology = dxbc::PrimitiveTopology::kTriangleStrip; + max_output_vertex_count = 4; + break; + case PipelineGeometryShader::kQuadList: + // 4 vertices passed via kLineWithAdjacency to a strip of 2 triangles. + input_primitive = dxbc::Primitive::kLineWithAdjacency; + input_primitive_vertex_count = 4; + output_primitive_topology = dxbc::PrimitiveTopology::kTriangleStrip; + max_output_vertex_count = 4; + break; + default: + assert_unhandled_case(key.type); + } + + assert_false(key.interpolator_count && + input_register_interpolators == UINT32_MAX); + for (uint32_t i = 0; i < key.interpolator_count; ++i) { + 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); + // Clip and cull plane declarations are separate in FXC-generated code even + // for a single register. + assert_false(input_clip_and_cull_distance_count && + input_register_clip_and_cull_distances == UINT32_MAX); + for (uint32_t i = 0; i < input_clip_and_cull_distance_count; i += 4) { + if (i < input_clip_distance_count) { + a.OpDclInput( + dxbc::Dest::V2D(input_primitive_vertex_count, + input_register_clip_and_cull_distances + (i >> 2), + (UINT32_C(1) << std::min( + input_clip_distance_count - i, UINT32_C(4))) - + 1)); + } + if (input_cull_distance_count && i + 4 > input_clip_distance_count) { + uint32_t cull_distance_mask = + (UINT32_C(1) << std::min(input_clip_and_cull_distance_count - i, + UINT32_C(4))) - + 1; + if (i < input_clip_distance_count) { + cull_distance_mask &= + ~((UINT32_C(1) << (input_clip_distance_count - i)) - 1); + } + a.OpDclInput( + dxbc::Dest::V2D(input_primitive_vertex_count, + input_register_clip_and_cull_distances + (i >> 2), + cull_distance_mask)); + } + } + + // At least 1 temporary register needed to discard primitives with NaN + // position. + size_t dcl_temps_count_position_dwords = a.OpDclTemps(1); + + a.OpDclInputPrimitive(input_primitive); + dxbc::Dest stream(dxbc::Dest::M(0)); + a.OpDclStream(stream); + a.OpDclOutputTopology(output_primitive_topology); + + assert_false(key.interpolator_count && + output_register_interpolators == UINT32_MAX); + for (uint32_t i = 0; i < key.interpolator_count; ++i) { + a.OpDclOutput(dxbc::Dest::O(output_register_interpolators + i)); + } + if (key.has_point_coordinates) { + assert_true(output_register_point_coordinates != UINT32_MAX); + a.OpDclOutput(dxbc::Dest::O(output_register_point_coordinates, 0b0011)); + } + a.OpDclOutputSIV(dxbc::Dest::O(output_register_position), + dxbc::Name::kPosition); + assert_false(input_clip_distance_count && + output_register_clip_distances == UINT32_MAX); + for (uint32_t i = 0; i < input_clip_distance_count; i += 4) { + a.OpDclOutputSIV( + dxbc::Dest::O(output_register_clip_distances + (i >> 2), + (UINT32_C(1) << std::min(input_clip_distance_count - i, + UINT32_C(4))) - + 1), + dxbc::Name::kClipDistance); + } + + a.OpDclMaxOutputVertexCount(max_output_vertex_count); + + // Note that after every emit, all o# become initialized and must be written + // to again. + // Also, FXC generates only movs (from statically or dynamically indexed + // v[#][#], from r#, or from a literal) to o# for some reason. + + // Discard the whole primitive if any vertex has a NaN position (may also be + // set to NaN for emulation of vertex killing with the OR operator). + for (uint32_t i = 0; i < input_primitive_vertex_count; ++i) { + a.OpNE(dxbc::Dest::R(0), dxbc::Src::V2D(i, input_register_position), + dxbc::Src::V2D(i, input_register_position)); + a.OpOr(dxbc::Dest::R(0, 0b0011), dxbc::Src::R(0, 0b0100), + dxbc::Src::R(0, 0b1110)); + a.OpOr(dxbc::Dest::R(0, 0b0001), dxbc::Src::R(0, dxbc::Src::kXXXX), + dxbc::Src::R(0, dxbc::Src::kYYYY)); + a.OpRetC(true, dxbc::Src::R(0, dxbc::Src::kXXXX)); + } + + // Cull the whole primitive if any cull distance for all vertices in the + // primitive is < 0. + // TODO(Triang3l): For points, handle ps_ucp_mode (transform the host clip + // space to the guest one, calculate the distances to the user clip planes, + // cull using the distance from the center for modes 0, 1 and 2, cull and clip + // per-vertex for modes 2 and 3) - except for the vertex kill flag. + if (input_cull_distance_count) { + for (uint32_t i = 0; i < input_cull_distance_count; ++i) { + uint32_t cull_distance_register = input_register_clip_and_cull_distances + + ((input_clip_distance_count + i) >> 2); + uint32_t cull_distance_component = (input_clip_distance_count + i) & 3; + a.OpLT(dxbc::Dest::R(0, 0b0001), + dxbc::Src::V2D(0, cull_distance_register) + .Select(cull_distance_component), + dxbc::Src::LF(0.0f)); + for (uint32_t j = 1; j < input_primitive_vertex_count; ++j) { + a.OpLT(dxbc::Dest::R(0, 0b0010), + dxbc::Src::V2D(j, cull_distance_register) + .Select(cull_distance_component), + dxbc::Src::LF(0.0f)); + a.OpAnd(dxbc::Dest::R(0, 0b0001), dxbc::Src::R(0, dxbc::Src::kXXXX), + dxbc::Src::R(0, dxbc::Src::kYYYY)); + } + a.OpRetC(true, dxbc::Src::R(0, dxbc::Src::kXXXX)); + } + } + + switch (key.type) { + case PipelineGeometryShader::kPointList: { + // Expand the point sprite, with left-to-right, top-to-bottom UVs. + dxbc::Src point_size_src(dxbc::Src::CB( + 0, uint32_t(DxbcShaderTranslator::CbufferRegister::kSystemConstants), + offsetof(DxbcShaderTranslator::SystemConstants, + point_constant_diameter) >> + 4, + ((offsetof(DxbcShaderTranslator::SystemConstants, + point_constant_diameter[0]) >> + 2) & + 3) | + (((offsetof(DxbcShaderTranslator::SystemConstants, + point_constant_diameter[1]) >> + 2) & + 3) + << 2))); + if (key.has_point_size) { + // The vertex shader's header writes -1.0 to point_size by default, so + // any non-negative value means that it was overwritten by the + // translated vertex shader, and needs to be used instead of the + // 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::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), + point_size_src); + point_size_src = dxbc::Src::R(0, 0b0100); + } + // 4D5307F1 has zero-size snowflakes, drop them quicker, and also drop + // points with a constant size of zero since point lists may also be used + // as just "compute" with memexport. + // XY may contain the point size with the per-vertex override applied, use + // Z as temporary. + for (uint32_t i = 0; i < 2; ++i) { + a.OpLT(dxbc::Dest::R(0, 0b0100), dxbc::Src::LF(0.0f), + point_size_src.SelectFromSwizzled(i)); + a.OpRetC(false, dxbc::Src::R(0, dxbc::Src::kZZZZ)); + } + // Transform the diameter in the guest screen coordinates to radius in the + // normalized device coordinates, and then to the clip space by + // multiplying by W. + a.OpMul( + dxbc::Dest::R(0, 0b0011), point_size_src, + dxbc::Src::CB( + 0, + uint32_t(DxbcShaderTranslator::CbufferRegister::kSystemConstants), + offsetof(DxbcShaderTranslator::SystemConstants, + point_screen_diameter_to_ndc_radius) >> + 4, + ((offsetof(DxbcShaderTranslator::SystemConstants, + point_screen_diameter_to_ndc_radius[0]) >> + 2) & + 3) | + (((offsetof(DxbcShaderTranslator::SystemConstants, + point_screen_diameter_to_ndc_radius[1]) >> + 2) & + 3) + << 2))); + point_size_src = dxbc::Src::R(0, 0b0100); + a.OpMul(dxbc::Dest::R(0, 0b0011), point_size_src, + dxbc::Src::V2D(0, input_register_position, dxbc::Src::kWWWW)); + dxbc::Src point_radius_x_src(point_size_src.SelectFromSwizzled(0)); + dxbc::Src point_radius_y_src(point_size_src.SelectFromSwizzled(1)); + + for (uint32_t i = 0; i < 4; ++i) { + // Same interpolators for the entire sprite. + for (uint32_t j = 0; j < key.interpolator_count; ++j) { + a.OpMov(dxbc::Dest::O(output_register_interpolators + j), + dxbc::Src::V2D(0, input_register_interpolators + j)); + } + // Top-left, top-right, bottom-left, bottom-right order (chosen + // arbitrarily, simply based on clockwise meaning front with + // FrontCounterClockwise = FALSE, but faceness is ignored for + // non-polygon primitive types). + // Bottom is -Y in Direct3D NDC, +V in point sprite coordinates. + if (key.has_point_coordinates) { + a.OpMov(dxbc::Dest::O(output_register_point_coordinates, 0b0011), + dxbc::Src::LF(float(i & 1), float(i >> 1), 0.0f, 0.0f)); + } + // FXC generates only `mov`s for o#, use temporary registers (r0.zw, as + // r0.xy already used for the point size) for calculations. + a.OpAdd(dxbc::Dest::R(0, 0b0100), + dxbc::Src::V2D(0, input_register_position, dxbc::Src::kXXXX), + (i & 1) ? point_radius_x_src : -point_radius_x_src); + a.OpAdd(dxbc::Dest::R(0, 0b1000), + dxbc::Src::V2D(0, input_register_position, dxbc::Src::kYYYY), + (i >> 1) ? -point_radius_y_src : point_radius_y_src); + a.OpMov(dxbc::Dest::O(output_register_position, 0b0011), + dxbc::Src::R(0, 0b1110)); + a.OpMov(dxbc::Dest::O(output_register_position, 0b1100), + dxbc::Src::V2D(0, input_register_position)); + // TODO(Triang3l): Handle ps_ucp_mode properly, clip expanded points if + // needed. + for (uint32_t j = 0; j < input_clip_distance_count; j += 4) { + a.OpMov( + dxbc::Dest::O(output_register_clip_distances + (j >> 2), + (UINT32_C(1) << std::min( + input_clip_distance_count - j, UINT32_C(4))) - + 1), + dxbc::Src::V2D( + 0, input_register_clip_and_cull_distances + (j >> 2))); + } + if (i < 3) { + a.OpEmitStream(stream); + } + } + a.OpEmitThenCutStream(stream); + } break; + + case PipelineGeometryShader::kRectangleList: { + // Construct a strip with the fourth vertex generated by mirroring a + // vertex across the longest edge (the diagonal). + // + // Possible options: + // + // 0---1 + // | /| + // | / | - 12 is the longest edge, strip 0123 (most commonly used) + // |/ | v3 = v0 + (v1 - v0) + (v2 - v0), or v3 = -v0 + v1 + v2 + // 2--[3] + // + // 1---2 + // | /| + // | / | - 20 is the longest edge, strip 1203 + // |/ | + // 0--[3] + // + // 2---0 + // | /| + // | / | - 01 is the longest edge, strip 2013 + // |/ | + // 1--[3] + // + // Input vertices are implicitly indexable, dcl_indexRange is not needed + // for the first dimension of a v[#][#] index. + + // Get squares of edge lengths into r0.xyz to choose the longest edge. + // r0.x = ||12||^2 + a.OpAdd(dxbc::Dest::R(0, 0b0011), + dxbc::Src::V2D(2, input_register_position, 0b0100), + -dxbc::Src::V2D(1, input_register_position, 0b0100)); + a.OpDP2(dxbc::Dest::R(0, 0b0001), dxbc::Src::R(0, 0b0100), + dxbc::Src::R(0, 0b0100)); + // r0.y = ||20||^2 + a.OpAdd(dxbc::Dest::R(0, 0b0110), + dxbc::Src::V2D(0, input_register_position, 0b0100 << 2), + -dxbc::Src::V2D(2, input_register_position, 0b0100 << 2)); + a.OpDP2(dxbc::Dest::R(0, 0b0010), dxbc::Src::R(0, 0b1001), + dxbc::Src::R(0, 0b1001)); + // r0.z = ||01||^2 + a.OpAdd(dxbc::Dest::R(0, 0b1100), + dxbc::Src::V2D(1, input_register_position, 0b0100 << 4), + -dxbc::Src::V2D(0, input_register_position, 0b0100 << 4)); + a.OpDP2(dxbc::Dest::R(0, 0b0100), dxbc::Src::R(0, 0b1110), + dxbc::Src::R(0, 0b1110)); + + // Find the longest edge, and select the strip vertex indices into r0.xyz. + // r0.w = 12 > 20 + a.OpLT(dxbc::Dest::R(0, 0b1000), dxbc::Src::R(0, dxbc::Src::kYYYY), + dxbc::Src::R(0, dxbc::Src::kXXXX)); + // r0.x = 12 > 01 + a.OpLT(dxbc::Dest::R(0, 0b0001), dxbc::Src::R(0, dxbc::Src::kZZZZ), + dxbc::Src::R(0, dxbc::Src::kXXXX)); + // r0.x = 12 > 20 && 12 > 01 + a.OpAnd(dxbc::Dest::R(0, 0b0001), dxbc::Src::R(0, dxbc::Src::kWWWW), + dxbc::Src::R(0, dxbc::Src::kXXXX)); + a.OpIf(true, dxbc::Src::R(0, dxbc::Src::kXXXX)); + { + // 12 is the longest edge, the first triangle in the strip is 012. + a.OpMov(dxbc::Dest::R(0, 0b0111), dxbc::Src::LU(0, 1, 2, 0)); + } + a.OpElse(); + { + // r0.x = 20 > 01 + a.OpLT(dxbc::Dest::R(0, 0b0001), dxbc::Src::R(0, dxbc::Src::kZZZZ), + dxbc::Src::R(0, dxbc::Src::kYYYY)); + // If 20 is the longest edge, the first triangle in the strip is 120. + // Otherwise, it's 201. + a.OpMovC(dxbc::Dest::R(0, 0b0111), dxbc::Src::R(0, dxbc::Src::kXXXX), + dxbc::Src::LU(1, 2, 0, 0), dxbc::Src::LU(2, 0, 1, 0)); + } + a.OpEndIf(); + + // Emit the triangle in the strip that consists of the original vertices. + for (uint32_t i = 0; i < 3; ++i) { + dxbc::Index input_vertex_index(0, i); + for (uint32_t j = 0; j < key.interpolator_count; ++j) { + a.OpMov(dxbc::Dest::O(output_register_interpolators + j), + dxbc::Src::V2D(input_vertex_index, + input_register_interpolators + j)); + } + if (key.has_point_coordinates) { + a.OpMov(dxbc::Dest::O(output_register_point_coordinates, 0b0011), + dxbc::Src::LF(0.0f)); + } + a.OpMov(dxbc::Dest::O(output_register_position), + dxbc::Src::V2D(input_vertex_index, input_register_position)); + for (uint32_t j = 0; j < input_clip_distance_count; j += 4) { + a.OpMov( + dxbc::Dest::O(output_register_clip_distances + (j >> 2), + (UINT32_C(1) << std::min( + input_clip_distance_count - j, UINT32_C(4))) - + 1), + dxbc::Src::V2D( + input_vertex_index, + input_register_clip_and_cull_distances + (j >> 2))); + } + a.OpEmitStream(stream); + } + + // Construct the fourth vertex using r1 as temporary storage, including + // for the final operation as FXC generates only `mov`s for o#. + stat.temp_register_count = + std::max(UINT32_C(2), stat.temp_register_count); + for (uint32_t j = 0; j < key.interpolator_count; ++j) { + uint32_t input_register_interpolator = input_register_interpolators + j; + a.OpAdd(dxbc::Dest::R(1), + -dxbc::Src::V2D(dxbc::Index(0, 0), input_register_interpolator), + dxbc::Src::V2D(dxbc::Index(0, 1), input_register_interpolator)); + a.OpAdd(dxbc::Dest::R(1), dxbc::Src::R(1), + dxbc::Src::V2D(dxbc::Index(0, 2), input_register_interpolator)); + a.OpMov(dxbc::Dest::O(output_register_interpolators + j), + dxbc::Src::R(1)); + } + if (key.has_point_coordinates) { + a.OpMov(dxbc::Dest::O(output_register_point_coordinates, 0b0011), + dxbc::Src::LF(0.0f)); + } + a.OpAdd(dxbc::Dest::R(1), + -dxbc::Src::V2D(dxbc::Index(0, 0), input_register_position), + dxbc::Src::V2D(dxbc::Index(0, 1), input_register_position)); + a.OpAdd(dxbc::Dest::R(1), dxbc::Src::R(1), + dxbc::Src::V2D(dxbc::Index(0, 2), input_register_position)); + a.OpMov(dxbc::Dest::O(output_register_position), dxbc::Src::R(1)); + for (uint32_t j = 0; j < input_clip_distance_count; j += 4) { + uint32_t clip_distance_mask = + (UINT32_C(1) << std::min(input_clip_distance_count - j, + UINT32_C(4))) - + 1; + uint32_t input_register_clip_distance = + input_register_clip_and_cull_distances + (j >> 2); + a.OpAdd( + dxbc::Dest::R(1, clip_distance_mask), + -dxbc::Src::V2D(dxbc::Index(0, 0), input_register_clip_distance), + dxbc::Src::V2D(dxbc::Index(0, 1), input_register_clip_distance)); + a.OpAdd( + dxbc::Dest::R(1, clip_distance_mask), dxbc::Src::R(1), + dxbc::Src::V2D(dxbc::Index(0, 2), input_register_clip_distance)); + a.OpMov(dxbc::Dest::O(output_register_clip_distances + (j >> 2), + clip_distance_mask), + dxbc::Src::R(1)); + } + a.OpEmitThenCutStream(stream); + } break; + + case PipelineGeometryShader::kQuadList: { + // Build the triangle strip from the original quad vertices in the + // 0, 1, 3, 2 order (like specified for GL_QUAD_STRIP). + // TODO(Triang3l): Find the correct decomposition of quads into triangles + // on the real hardware. + for (uint32_t i = 0; i < 4; ++i) { + uint32_t input_vertex_index = i ^ (i >> 1); + for (uint32_t j = 0; j < key.interpolator_count; ++j) { + a.OpMov(dxbc::Dest::O(output_register_interpolators + j), + dxbc::Src::V2D(input_vertex_index, + input_register_interpolators + j)); + } + if (key.has_point_coordinates) { + a.OpMov(dxbc::Dest::O(output_register_point_coordinates, 0b0011), + dxbc::Src::LF(0.0f)); + } + a.OpMov(dxbc::Dest::O(output_register_position), + dxbc::Src::V2D(input_vertex_index, input_register_position)); + for (uint32_t j = 0; j < input_clip_distance_count; j += 4) { + a.OpMov( + dxbc::Dest::O(output_register_clip_distances + (j >> 2), + (UINT32_C(1) << std::min( + input_clip_distance_count - j, UINT32_C(4))) - + 1), + dxbc::Src::V2D( + input_vertex_index, + input_register_clip_and_cull_distances + (j >> 2))); + } + if (i < 3) { + a.OpEmitStream(stream); + } + } + a.OpEmitThenCutStream(stream); + } break; + + default: + assert_unhandled_case(key.type); + } + + a.OpRet(); + + // Write the actual number of temporary registers used. + shader_out[dcl_temps_count_position_dwords] = stat.temp_register_count; + + // Write the shader program length in dwords. + shader_out[shex_position_dwords + 1] = + uint32_t(shader_out.size()) - shex_position_dwords; + + { + auto& blob_header = *reinterpret_cast( + shader_out.data() + blob_position_dwords); + blob_header.fourcc = dxbc::BlobHeader::FourCC::kShaderEx; + blob_position_dwords = uint32_t(shader_out.size()); + blob_header.size_bytes = + (blob_position_dwords - kBlobHeaderSizeDwords) * sizeof(uint32_t) - + shader_out[blob_offset_position_dwords++]; + } + + // *************************************************************************** + // Statistics + // *************************************************************************** + + shader_out[blob_offset_position_dwords] = + uint32_t(blob_position_dwords * sizeof(uint32_t)); + uint32_t stat_position_dwords = blob_position_dwords + kBlobHeaderSizeDwords; + shader_out.resize(stat_position_dwords + + sizeof(dxbc::Statistics) / sizeof(uint32_t)); + std::memcpy(shader_out.data() + stat_position_dwords, &stat, + sizeof(dxbc::Statistics)); + + { + auto& blob_header = *reinterpret_cast( + shader_out.data() + blob_position_dwords); + blob_header.fourcc = dxbc::BlobHeader::FourCC::kStatistics; + blob_position_dwords = uint32_t(shader_out.size()); + blob_header.size_bytes = + (blob_position_dwords - kBlobHeaderSizeDwords) * sizeof(uint32_t) - + shader_out[blob_offset_position_dwords++]; + } + + // *************************************************************************** + // Container header + // *************************************************************************** + + uint32_t shader_size_bytes = uint32_t(shader_out.size() * sizeof(uint32_t)); + { + auto& container_header = + *reinterpret_cast(shader_out.data()); + container_header.InitializeIdentification(); + container_header.size_bytes = shader_size_bytes; + container_header.blob_count = kBlobCount; + CalculateDXBCChecksum( + reinterpret_cast(shader_out.data()), + static_cast(shader_size_bytes), + reinterpret_cast(&container_header.hash)); + } +} + +const std::vector& PipelineCache::GetGeometryShader( + GeometryShaderKey key) { + auto it = geometry_shaders_.find(key); + if (it != geometry_shaders_.end()) { + return it->second; + } + std::vector shader; + CreateDxbcGeometryShader(key, shader); + return geometry_shaders_.emplace(key, std::move(shader)).first->second; +} + ID3D12PipelineState* PipelineCache::CreateD3D12Pipeline( const PipelineRuntimeDescription& runtime_description) { const PipelineDescription& description = runtime_description.description; @@ -1739,23 +2857,6 @@ ID3D12PipelineState* PipelineCache::CreateD3D12Pipeline( assert_unhandled_case(primitive_topology_type); return nullptr; } - switch (description.geometry_shader) { - case PipelineGeometryShader::kPointList: - state_desc.GS.pShaderBytecode = shaders::primitive_point_list_gs; - state_desc.GS.BytecodeLength = sizeof(shaders::primitive_point_list_gs); - break; - case PipelineGeometryShader::kRectangleList: - state_desc.GS.pShaderBytecode = shaders::primitive_rectangle_list_gs; - state_desc.GS.BytecodeLength = - sizeof(shaders::primitive_rectangle_list_gs); - break; - case PipelineGeometryShader::kQuadList: - state_desc.GS.pShaderBytecode = shaders::primitive_quad_list_gs; - state_desc.GS.BytecodeLength = sizeof(shaders::primitive_quad_list_gs); - break; - default: - break; - } } else { state_desc.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_PATCH; xenos::TessellationMode tessellation_mode = xenos::TessellationMode( @@ -1864,6 +2965,14 @@ ID3D12PipelineState* PipelineCache::CreateD3D12Pipeline( } } + // Geometry shader. + if (runtime_description.geometry_shader != nullptr) { + state_desc.GS.pShaderBytecode = runtime_description.geometry_shader->data(); + state_desc.GS.BytecodeLength = + sizeof(*runtime_description.geometry_shader->data()) * + runtime_description.geometry_shader->size(); + } + // Rasterizer state. state_desc.RasterizerState.FillMode = description.fill_mode_wireframe ? D3D12_FILL_MODE_WIREFRAME diff --git a/src/xenia/gpu/d3d12/pipeline_cache.h b/src/xenia/gpu/d3d12/pipeline_cache.h index 74ea0c9e0..f60dff1f6 100644 --- a/src/xenia/gpu/d3d12/pipeline_cache.h +++ b/src/xenia/gpu/d3d12/pipeline_cache.h @@ -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. * ****************************************************************************** */ @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -21,6 +22,7 @@ #include #include +#include "xenia/base/assert.h" #include "xenia/base/hash.h" #include "xenia/base/platform.h" #include "xenia/base/string_buffer.h" @@ -230,9 +232,37 @@ class PipelineCache { ID3D12RootSignature* root_signature; D3D12Shader::D3D12Translation* vertex_shader; D3D12Shader::D3D12Translation* pixel_shader; + const std::vector* geometry_shader; PipelineDescription description; }; + union GeometryShaderKey { + uint32_t key; + struct { + PipelineGeometryShader type : 2; + uint32_t interpolator_count : 5; + uint32_t user_clip_plane_count : 3; + uint32_t user_clip_plane_cull : 1; + uint32_t has_vertex_kill_and : 1; + uint32_t has_point_size : 1; + uint32_t has_point_coordinates : 1; + }; + + GeometryShaderKey() : key(0) { static_assert_size(*this, sizeof(key)); } + + struct Hasher { + size_t operator()(const GeometryShaderKey& key) const { + return std::hash{}(key.key); + } + }; + bool operator==(const GeometryShaderKey& other_key) const { + return key == other_key.key; + } + bool operator!=(const GeometryShaderKey& other_key) const { + return !(*this == other_key); + } + }; + D3D12Shader* LoadShader(xenos::ShaderType shader_type, const uint32_t* host_address, uint32_t dword_count, uint64_t data_hash); @@ -257,6 +287,12 @@ 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 void CreateDxbcGeometryShader(GeometryShaderKey key, + std::vector& shader_out); + const std::vector& GetGeometryShader(GeometryShaderKey key); + ID3D12PipelineState* CreateD3D12Pipeline( const PipelineRuntimeDescription& runtime_description); @@ -302,6 +338,11 @@ class PipelineCache { xe::hash::IdentityHasher> bindless_sampler_layout_map_; + // Geometry shaders for Xenos primitive types not supported by Direct3D 12. + std::unordered_map, + GeometryShaderKey::Hasher> + geometry_shaders_; + // Empty depth-only pixel shader for writing to depth buffer via ROV when no // Xenos pixel shader provided. std::vector depth_only_pixel_shader_; diff --git a/src/xenia/gpu/dxbc.h b/src/xenia/gpu/dxbc.h index e0c0efb85..2c9f5eeab 100644 --- a/src/xenia/gpu/dxbc.h +++ b/src/xenia/gpu/dxbc.h @@ -166,8 +166,11 @@ struct alignas(uint32_t) BlobHeader { // In order of appearance in a container. kResourceDefinition = MakeFourCC('R', 'D', 'E', 'F'), kInputSignature = MakeFourCC('I', 'S', 'G', 'N'), + kInputSignature_11_1 = MakeFourCC('I', 'S', 'G', '1'), kPatchConstantSignature = MakeFourCC('P', 'C', 'S', 'G'), kOutputSignature = MakeFourCC('O', 'S', 'G', 'N'), + kOutputSignatureForGS = MakeFourCC('O', 'S', 'G', '5'), + kOutputSignature_11_1 = MakeFourCC('O', 'S', 'G', '1'), kShaderEx = MakeFourCC('S', 'H', 'E', 'X'), kShaderFeatureInfo = MakeFourCC('S', 'F', 'I', '0'), kStatistics = MakeFourCC('S', 'T', 'A', 'T'), @@ -320,6 +323,7 @@ enum RdefInputFlags : uint32_t { enum class RdefShaderModel : uint32_t { kPixelShader5_1 = 0xFFFF0501u, kVertexShader5_1 = 0xFFFE0501u, + kGeometryShader5_1 = 0x47530501u, kDomainShader5_1 = 0x44530501u, kComputeShader5_1 = 0x43530501u, }; @@ -467,8 +471,7 @@ enum class SignatureRegisterComponentType : uint32_t { }; // D3D_MIN_PRECISION -// uint8_t as it's used as one byte in SignatureParameter. -enum class MinPrecision : uint8_t { +enum class MinPrecision : uint32_t { kDefault, kFloat16, kFloat2_8, @@ -478,7 +481,7 @@ enum class MinPrecision : uint8_t { kAny10, }; -// D3D11_INTERNALSHADER_PARAMETER_11_1 +// D3D10_INTERNALSHADER_PARAMETER struct alignas(uint32_t) SignatureParameter { uint32_t semantic_name_ptr; uint32_t semantic_index; @@ -496,10 +499,45 @@ struct alignas(uint32_t) SignatureParameter { // For an input signature. uint8_t always_reads_mask; }; - MinPrecision min_precision; }; static_assert_size(SignatureParameter, sizeof(uint32_t) * 6); +// D3D11_INTERNALSHADER_PARAMETER_FOR_GS +// Extends SignatureParameter, see it for more information. +struct alignas(uint32_t) SignatureParameterForGS { + // Stream index (parameters must appear in non-decreasing stream order). + uint32_t stream; + uint32_t semantic_name_ptr; + uint32_t semantic_index; + Name system_value; + SignatureRegisterComponentType component_type; + uint32_t register_index; + uint8_t mask; + union { + uint8_t never_writes_mask; + uint8_t always_reads_mask; + }; +}; +static_assert_size(SignatureParameterForGS, sizeof(uint32_t) * 7); + +// D3D11_INTERNALSHADER_PARAMETER_11_1 +// Extends SignatureParameterForGS, see it for more information. +struct alignas(uint32_t) SignatureParameter_11_1 { + uint32_t stream; + uint32_t semantic_name_ptr; + uint32_t semantic_index; + Name system_value; + SignatureRegisterComponentType component_type; + uint32_t register_index; + uint8_t mask; + union { + uint8_t never_writes_mask; + uint8_t always_reads_mask; + }; + MinPrecision min_precision; +}; +static_assert_size(SignatureParameter_11_1, sizeof(uint32_t) * 8); + // D3D10_INTERNALSHADER_SIGNATURE struct alignas(uint32_t) Signature { uint32_t parameter_count; @@ -543,6 +581,62 @@ enum class TessellatorDomain : uint32_t { kQuad, }; +// D3D10_SB_PRIMITIVE_TOPOLOGY +enum class PrimitiveTopology : uint32_t { + kUndefined = 0, + kPointList = 1, + kLineList = 2, + kLineStrip = 3, + kTriangleList = 4, + kTriangleStrip = 5, + kLineListWithAdjacency = 10, + kLineStripWithAdjacency = 11, + kTriangleListWithAdjacency = 12, + kTriangleStripWithAdjacency = 13, +}; + +// D3D10_SB_PRIMITIVE +enum class Primitive : uint32_t { + kUndefined = 0, + kPoint = 1, + kLine = 2, + kTriangle = 3, + kLineWithAdjacency = 6, + kTriangleWithAdjacency = 7, + k1ControlPointPatch = 8, + k2ControlPointPatch = 9, + k3ControlPointPatch = 10, + k4ControlPointPatch = 11, + k5ControlPointPatch = 12, + k6ControlPointPatch = 13, + k7ControlPointPatch = 14, + k8ControlPointPatch = 15, + k9ControlPointPatch = 16, + k10ControlPointPatch = 17, + k11ControlPointPatch = 18, + k12ControlPointPatch = 19, + k13ControlPointPatch = 20, + k14ControlPointPatch = 21, + k15ControlPointPatch = 22, + k16ControlPointPatch = 23, + k17ControlPointPatch = 24, + k18ControlPointPatch = 25, + k19ControlPointPatch = 26, + k20ControlPointPatch = 27, + k21ControlPointPatch = 28, + k22ControlPointPatch = 29, + k23ControlPointPatch = 30, + k24ControlPointPatch = 31, + k25ControlPointPatch = 32, + k26ControlPointPatch = 33, + k27ControlPointPatch = 34, + k28ControlPointPatch = 35, + k29ControlPointPatch = 36, + k30ControlPointPatch = 37, + k31ControlPointPatch = 38, + k32ControlPointPatch = 39, +}; + // The STAT blob (based on Wine d3dcompiler_parse_stat). struct alignas(uint32_t) Statistics { // Not increased by declarations and labels. @@ -576,11 +670,11 @@ struct alignas(uint32_t) Statistics { uint32_t movc_instruction_count; // +50 uint32_t conversion_instruction_count; // +54 // Unknown in Wine. - uint32_t unknown_22; // +58 - uint32_t input_primitive; // +5C - uint32_t gs_output_topology; // +60 - uint32_t gs_max_output_vertex_count; // +64 - uint32_t unknown_26; // +68 + uint32_t unknown_22; // +58 + Primitive input_primitive; // +5C + PrimitiveTopology gs_output_topology; // +60 + uint32_t gs_max_output_vertex_count; // +64 + uint32_t unknown_26; // +68 // Unknown in Wine, but confirmed by testing. uint32_t lod_instructions; // +6C uint32_t unknown_28; // +70 @@ -644,6 +738,7 @@ enum class OperandType : uint32_t { kOutputDepth = 12, kNull = 13, kOutputCoverageMask = 15, + kStream = 16, kInputControlPoint = 25, kInputDomainPoint = 28, kUnorderedAccessView = 30, @@ -655,33 +750,6 @@ enum class OperandType : uint32_t { kOutputStencilRef = 41, }; -// D3D10_SB_OPERAND_INDEX_DIMENSION -constexpr uint32_t GetOperandIndexDimension(OperandType type, - bool in_dcl = false) { - switch (type) { - case OperandType::kTemp: - case OperandType::kInput: - // FIXME(Triang3l): kInput has a dimensionality of 2 in the control point - // phase of hull shaders, however, currently the translator isn't used to - // emit them - if code where this matters is emitted by Xenia, the actual - // dimensionality will need to be stored in OperandAddress itself. - case OperandType::kOutput: - case OperandType::kLabel: - return 1; - case OperandType::kIndexableTemp: - case OperandType::kInputControlPoint: - return 2; - case OperandType::kSampler: - case OperandType::kResource: - case OperandType::kUnorderedAccessView: - return in_dcl ? 3 : 2; - case OperandType::kConstantBuffer: - return 3; - default: - return 0; - } -} - // D3D10_SB_OPERAND_NUM_COMPONENTS enum class OperandDimension : uint32_t { kNoData, // D3D10_SB_OPERAND_0_COMPONENT @@ -696,6 +764,7 @@ constexpr OperandDimension GetOperandDimension(OperandType type, return in_dcl ? OperandDimension::kVector : OperandDimension::kNoData; case OperandType::kLabel: case OperandType::kNull: + case OperandType::kStream: return OperandDimension::kNoData; case OperandType::kInputPrimitiveID: case OperandType::kOutputDepth: @@ -766,11 +835,22 @@ struct Index { struct OperandAddress { OperandType type_; + uint32_t index_dimension_; Index index_1d_, index_2d_, index_3d_; - explicit OperandAddress(OperandType type, Index index_1d = Index(), - Index index_2d = Index(), Index index_3d = Index()) + explicit OperandAddress(OperandType type) + : type_(type), index_dimension_(0) {} + explicit OperandAddress(OperandType type, Index index_1d) + : type_(type), index_dimension_(1), index_1d_(index_1d) {} + explicit OperandAddress(OperandType type, Index index_1d, Index index_2d) : type_(type), + index_dimension_(2), + index_1d_(index_1d), + index_2d_(index_2d) {} + explicit OperandAddress(OperandType type, Index index_1d, Index index_2d, + Index index_3d) + : type_(type), + index_dimension_(3), index_1d_(index_1d), index_2d_(index_2d), index_3d_(index_3d) {} @@ -778,44 +858,38 @@ struct OperandAddress { OperandDimension GetDimension(bool in_dcl = false) const { return GetOperandDimension(type_, in_dcl); } - uint32_t GetIndexDimension(bool in_dcl = false) const { - return GetOperandIndexDimension(type_, in_dcl); - } - uint32_t GetOperandTokenTypeAndIndex(bool in_dcl = false) const { - uint32_t index_dimension = GetIndexDimension(in_dcl); - uint32_t operand_token = (uint32_t(type_) << 12) | (index_dimension << 20); - if (index_dimension > 0) { + uint32_t GetOperandTokenTypeAndIndex() const { + uint32_t operand_token = (uint32_t(type_) << 12) | (index_dimension_ << 20); + if (index_dimension_ > 0) { operand_token |= uint32_t(index_1d_.GetRepresentation()) << 22; - if (index_dimension > 1) { + if (index_dimension_ > 1) { operand_token |= uint32_t(index_2d_.GetRepresentation()) << 25; - if (index_dimension > 2) { + if (index_dimension_ > 2) { operand_token |= uint32_t(index_3d_.GetRepresentation()) << 28; } } } return operand_token; } - uint32_t GetLength(bool in_dcl = false) const { + uint32_t GetLength() const { uint32_t length = 0; - uint32_t index_dimension = GetIndexDimension(in_dcl); - if (index_dimension > 0) { + if (index_dimension_ > 0) { length += index_1d_.GetLength(); - if (index_dimension > 1) { + if (index_dimension_ > 1) { length += index_2d_.GetLength(); - if (index_dimension > 2) { + if (index_dimension_ > 2) { length += index_3d_.GetLength(); } } } return length; } - void Write(std::vector& code, bool in_dcl = false) const { - uint32_t index_dimension = GetIndexDimension(in_dcl); - if (index_dimension > 0) { + void Write(std::vector& code) const { + if (index_dimension_ > 0) { index_1d_.Write(code); - if (index_dimension > 1) { + if (index_dimension_ > 1) { index_2d_.Write(code); - if (index_dimension > 2) { + if (index_dimension_ > 2) { index_3d_.Write(code); } } @@ -845,18 +919,28 @@ struct Dest : OperandAddress { // declarations use read masks instead of swizzle (resource declarations still // use swizzle when they're vector, however). - explicit Dest(OperandType type, uint32_t write_mask = 0b1111, - Index index_1d = Index(), Index index_2d = Index(), - Index index_3d = Index()) + explicit Dest(OperandType type, uint32_t write_mask) + : OperandAddress(type), write_mask_(write_mask) {} + explicit Dest(OperandType type, uint32_t write_mask, Index index_1d) + : OperandAddress(type, index_1d), write_mask_(write_mask) {} + explicit Dest(OperandType type, uint32_t write_mask, Index index_1d, + Index index_2d) + : OperandAddress(type, index_1d, index_2d), write_mask_(write_mask) {} + explicit Dest(OperandType type, uint32_t write_mask, Index index_1d, + Index index_2d, Index index_3d) : OperandAddress(type, index_1d, index_2d, index_3d), write_mask_(write_mask) {} static Dest R(uint32_t index, uint32_t write_mask = 0b1111) { return Dest(OperandType::kTemp, write_mask, index); } - static Dest V(uint32_t index, uint32_t read_mask = 0b1111) { + static Dest V1D(uint32_t index, uint32_t read_mask = 0b1111) { return Dest(OperandType::kInput, read_mask, index); } + static Dest V2D(uint32_t index_1d, uint32_t index_2d, + uint32_t read_mask = 0b1111) { + return Dest(OperandType::kInput, read_mask, index_1d, index_2d); + } static Dest O(Index index, uint32_t write_mask = 0b1111) { return Dest(OperandType::kOutput, write_mask, index); } @@ -868,6 +952,9 @@ struct Dest : OperandAddress { static Dest ODepth() { return Dest(OperandType::kOutputDepth, 0b0001); } static Dest Null() { return Dest(OperandType::kNull, 0b0000); } static Dest OMask() { return Dest(OperandType::kOutputCoverageMask, 0b0001); } + static Dest M(uint32_t index) { + return Dest(OperandType::kStream, 0b0000, index); + } static Dest VICP(uint32_t control_point_count, uint32_t element, uint32_t read_mask = 0b1111) { return Dest(OperandType::kInputControlPoint, read_mask, control_point_count, @@ -915,11 +1002,14 @@ struct Dest : OperandAddress { } } [[nodiscard]] Dest Mask(uint32_t write_mask) const { - return Dest(type_, write_mask, index_1d_, index_2d_, index_3d_); + Dest new_dest(*this); + new_dest.write_mask_ = write_mask; + return new_dest; } [[nodiscard]] Dest MaskMasked(uint32_t write_mask) const { - return Dest(type_, write_mask_ & write_mask, index_1d_, index_2d_, - index_3d_); + Dest new_dest(*this); + new_dest.write_mask_ &= write_mask; + return new_dest; } static uint32_t GetMaskSingleComponent(uint32_t write_mask) { uint32_t component; @@ -934,11 +1024,9 @@ struct Dest : OperandAddress { return GetMaskSingleComponent(GetMask(in_dcl)); } - uint32_t GetLength(bool in_dcl = false) const { - return 1 + OperandAddress::GetLength(in_dcl); - } + uint32_t GetLength() const { return 1 + OperandAddress::GetLength(); } void Write(std::vector& code, bool in_dcl = false) const { - uint32_t operand_token = GetOperandTokenTypeAndIndex(in_dcl); + uint32_t operand_token = GetOperandTokenTypeAndIndex(); OperandDimension dimension = GetDimension(in_dcl); operand_token |= uint32_t(dimension); if (dimension == OperandDimension::kVector) { @@ -947,7 +1035,7 @@ struct Dest : OperandAddress { (uint32_t(ComponentSelection::kMask) << 2) | (write_mask_ << 4); } code.push_back(operand_token); - OperandAddress::Write(code, in_dcl); + OperandAddress::Write(code); } }; @@ -962,18 +1050,21 @@ struct Src : OperandAddress { // Ignored for 0-component and 1-component operand types. uint32_t swizzle_; - bool absolute_; - bool negate_; + bool absolute_ = false; + bool negate_ = false; // Only valid for OperandType::kImmediate32. uint32_t immediate_[4]; - explicit Src(OperandType type, uint32_t swizzle = kXYZW, - Index index_1d = Index(), Index index_2d = Index(), - Index index_3d = Index()) - : OperandAddress(type, index_1d, index_2d, index_3d), - swizzle_(swizzle), - absolute_(false), - negate_(false) {} + explicit Src(OperandType type, uint32_t swizzle) + : OperandAddress(type), swizzle_(swizzle) {} + explicit Src(OperandType type, uint32_t swizzle, Index index_1d) + : OperandAddress(type, index_1d), swizzle_(swizzle) {} + explicit Src(OperandType type, uint32_t swizzle, Index index_1d, + Index index_2d) + : OperandAddress(type, index_1d, index_2d), swizzle_(swizzle) {} + explicit Src(OperandType type, uint32_t swizzle, Index index_1d, + Index index_2d, Index index_3d) + : OperandAddress(type, index_1d, index_2d, index_3d), swizzle_(swizzle) {} // For creating instances for use in declarations. struct DclT {}; @@ -982,9 +1073,12 @@ struct Src : OperandAddress { static Src R(uint32_t index, uint32_t swizzle = kXYZW) { return Src(OperandType::kTemp, swizzle, index); } - static Src V(Index index, uint32_t swizzle = kXYZW) { + static Src V1D(Index index, uint32_t swizzle = kXYZW) { return Src(OperandType::kInput, swizzle, index); } + static Src V2D(Index index_1d, Index index_2d, uint32_t swizzle = kXYZW) { + return Src(OperandType::kInput, swizzle, index_1d, index_2d); + } static Src X(uint32_t index_1d, Index index_2d, uint32_t swizzle = kXYZW) { return Src(OperandType::kIndexableTemp, swizzle, index_1d, index_2d); } @@ -1108,15 +1202,14 @@ struct Src : OperandAddress { return new_src; } - uint32_t GetLength(uint32_t mask, bool force_vector = false, - bool in_dcl = false) const { + uint32_t GetLength(uint32_t mask, bool force_vector = false) const { bool is_vector = force_vector || (mask != 0b0000 && Dest::GetMaskSingleComponent(mask) == UINT32_MAX); if (type_ == OperandType::kImmediate32) { return is_vector ? 5 : 2; } - return ((absolute_ || negate_) ? 2 : 1) + OperandAddress::GetLength(in_dcl); + return ((absolute_ || negate_) ? 2 : 1) + OperandAddress::GetLength(); } static constexpr uint32_t GetModifiedImmediate(uint32_t value, bool is_integer, bool absolute, @@ -1147,7 +1240,7 @@ struct Src : OperandAddress { } void Write(std::vector& code, bool is_integer, uint32_t mask, bool force_vector = false, bool in_dcl = false) const { - uint32_t operand_token = GetOperandTokenTypeAndIndex(in_dcl); + uint32_t operand_token = GetOperandTokenTypeAndIndex(); uint32_t mask_single_component = Dest::GetMaskSingleComponent(mask); uint32_t select_component = mask_single_component != UINT32_MAX ? mask_single_component : 0; @@ -1220,7 +1313,7 @@ struct Src : OperandAddress { code.push_back(uint32_t(ExtendedOperandType::kModifier) | (uint32_t(modifier) << 6)); } - OperandAddress::Write(code, in_dcl); + OperandAddress::Write(code); } } }; @@ -1372,8 +1465,12 @@ enum class Opcode : uint32_t { kDclResource = 88, kDclConstantBuffer = 89, kDclSampler = 90, + kDclOutputTopology = 92, + kDclInputPrimitive = 93, + kDclMaxOutputVertexCount = 94, kDclInput = 95, kDclInputSGV = 96, + kDclInputSIV = 97, kDclInputPS = 98, kDclInputPSSGV = 99, kDclInputPSSIV = 100, @@ -1383,6 +1480,9 @@ enum class Opcode : uint32_t { kDclIndexableTemp = 105, kDclGlobalFlags = 106, kLOD = 108, + kEmitStream = 117, + kCutStream = 118, + kEmitThenCutStream = 119, kDerivRTXCoarse = 122, kDerivRTXFine = 123, kDerivRTYCoarse = 124, @@ -1396,6 +1496,7 @@ enum class Opcode : uint32_t { kIBFE = 139, kBFI = 140, kBFRev = 141, + kDclStream = 143, kDclInputControlPointCount = 147, kDclTessDomain = 149, kDclThreadGroup = 155, @@ -1426,6 +1527,10 @@ constexpr uint32_t OpcodeToken(Opcode opcode, uint32_t operands_length, (extended_opcode_count ? (uint32_t(1) << 31) : 0); } +constexpr uint32_t GetOpcodeTokenInstructionLength(uint32_t opcode_token) { + return (opcode_token >> 24) & ((UINT32_C(1) << 7) - 1); +} + constexpr uint32_t SampleControlsExtendedOpcodeToken(int32_t aoffimmi_u, int32_t aoffimmi_v, int32_t aoffimmi_w, @@ -1915,7 +2020,7 @@ class Assembler { } void OpDclResource(ResourceDimension dimension, uint32_t return_type_token, const Src& operand, uint32_t space = 0) { - uint32_t operands_length = operand.GetLength(0b1111, false, true); + uint32_t operands_length = operand.GetLength(0b1111, false); code_.reserve(code_.size() + 3 + operands_length); code_.push_back(OpcodeToken(Opcode::kDclResource, 2 + operands_length) | (uint32_t(dimension) << 11)); @@ -1929,7 +2034,7 @@ class Assembler { ConstantBufferAccessPattern access_pattern = ConstantBufferAccessPattern::kImmediateIndexed, uint32_t space = 0) { - uint32_t operands_length = operand.GetLength(0b1111, false, true); + uint32_t operands_length = operand.GetLength(0b1111, false); code_.reserve(code_.size() + 3 + operands_length); code_.push_back( OpcodeToken(Opcode::kDclConstantBuffer, 2 + operands_length) | @@ -1941,30 +2046,60 @@ class Assembler { void OpDclSampler(const Src& operand, SamplerMode mode = SamplerMode::kDefault, uint32_t space = 0) { - uint32_t operands_length = operand.GetLength(0b1111, false, true); + uint32_t operands_length = operand.GetLength(0b1111, false); code_.reserve(code_.size() + 2 + operands_length); code_.push_back(OpcodeToken(Opcode::kDclSampler, 1 + operands_length) | (uint32_t(mode) << 11)); operand.Write(code_, false, 0b1111, false, true); code_.push_back(space); } + // In geometry shaders, only kPointList, kLineStrip and kTriangleStrip are + // allowed. + void OpDclOutputTopology(PrimitiveTopology output_topology) { + code_.push_back(OpcodeToken(Opcode::kDclOutputTopology, 0) | + (uint32_t(output_topology) << 11)); + stat_.gs_output_topology = output_topology; + } + // In geometry shaders, only kPoint, kLine, kTriangle, kLineWithAdjacency and + // kTriangleWithAdjacency are allowed. + void OpDclInputPrimitive(Primitive input_primitive) { + code_.push_back(OpcodeToken(Opcode::kDclInputPrimitive, 0) | + (uint32_t(input_primitive) << 11)); + stat_.input_primitive = input_primitive; + } + // Returns the index of the count written in the code_ vector. + size_t OpDclMaxOutputVertexCount(uint32_t count) { + code_.reserve(code_.size() + 2); + code_.push_back(OpcodeToken(Opcode::kDclMaxOutputVertexCount, 1)); + code_.push_back(count); + stat_.gs_max_output_vertex_count = count; + return code_.size() - 1; + } void OpDclInput(const Dest& operand) { - uint32_t operands_length = operand.GetLength(true); + uint32_t operands_length = operand.GetLength(); code_.reserve(code_.size() + 1 + operands_length); code_.push_back(OpcodeToken(Opcode::kDclInput, operands_length)); operand.Write(code_, true); ++stat_.dcl_count; } void OpDclInputSGV(const Dest& operand, Name name) { - uint32_t operands_length = operand.GetLength(true); + uint32_t operands_length = operand.GetLength(); code_.reserve(code_.size() + 2 + operands_length); code_.push_back(OpcodeToken(Opcode::kDclInputSGV, 1 + operands_length)); operand.Write(code_, true); code_.push_back(uint32_t(name)); ++stat_.dcl_count; } + void OpDclInputSIV(const Dest& operand, Name name) { + uint32_t operands_length = operand.GetLength(); + code_.reserve(code_.size() + 2 + operands_length); + code_.push_back(OpcodeToken(Opcode::kDclInputSIV, 1 + operands_length)); + operand.Write(code_, true); + code_.push_back(uint32_t(name)); + ++stat_.dcl_count; + } void OpDclInputPS(InterpolationMode interpolation_mode, const Dest& operand) { - uint32_t operands_length = operand.GetLength(true); + uint32_t operands_length = operand.GetLength(); code_.reserve(code_.size() + 1 + operands_length); code_.push_back(OpcodeToken(Opcode::kDclInputPS, operands_length) | (uint32_t(interpolation_mode) << 11)); @@ -1972,7 +2107,7 @@ class Assembler { ++stat_.dcl_count; } void OpDclInputPSSGV(const Dest& operand, Name name) { - uint32_t operands_length = operand.GetLength(true); + uint32_t operands_length = operand.GetLength(); code_.reserve(code_.size() + 2 + operands_length); // Constant interpolation mode is set in FXC output at least for // SV_IsFrontFace, despite the comment in d3d12TokenizedProgramFormat.hpp @@ -1985,7 +2120,7 @@ class Assembler { } void OpDclInputPSSIV(InterpolationMode interpolation_mode, const Dest& operand, Name name) { - uint32_t operands_length = operand.GetLength(true); + uint32_t operands_length = operand.GetLength(); code_.reserve(code_.size() + 2 + operands_length); code_.push_back(OpcodeToken(Opcode::kDclInputPSSIV, 1 + operands_length) | (uint32_t(interpolation_mode) << 11)); @@ -1994,14 +2129,14 @@ class Assembler { ++stat_.dcl_count; } void OpDclOutput(const Dest& operand) { - uint32_t operands_length = operand.GetLength(true); + uint32_t operands_length = operand.GetLength(); code_.reserve(code_.size() + 1 + operands_length); code_.push_back(OpcodeToken(Opcode::kDclOutput, operands_length)); operand.Write(code_, true); ++stat_.dcl_count; } void OpDclOutputSIV(const Dest& operand, Name name) { - uint32_t operands_length = operand.GetLength(true); + uint32_t operands_length = operand.GetLength(); code_.reserve(code_.size() + 2 + operands_length); code_.push_back(OpcodeToken(Opcode::kDclOutputSIV, 1 + operands_length)); operand.Write(code_, true); @@ -2045,6 +2180,34 @@ class Assembler { ++stat_.instruction_count; ++stat_.lod_instructions; } + void OpEmitStream(const Dest& stream) { + uint32_t operands_length = stream.GetLength(); + code_.reserve(code_.size() + 1 + operands_length); + code_.push_back(OpcodeToken(Opcode::kEmitStream, operands_length)); + stream.Write(code_); + ++stat_.instruction_count; + ++stat_.emit_instruction_count; + } + void OpCutStream(const Dest& stream) { + uint32_t operands_length = stream.GetLength(); + code_.reserve(code_.size() + 1 + operands_length); + code_.push_back(OpcodeToken(Opcode::kCutStream, operands_length)); + stream.Write(code_); + ++stat_.instruction_count; + ++stat_.cut_instruction_count; + } + void OpEmitThenCutStream(const Dest& stream) { + uint32_t operands_length = stream.GetLength(); + code_.reserve(code_.size() + 1 + operands_length); + code_.push_back(OpcodeToken(Opcode::kEmitThenCutStream, operands_length)); + stream.Write(code_); + ++stat_.instruction_count; + // TODO(Triang3l): Verify if the instruction counts should be incremented + // this way (haven't been able to obtain this from FXC because it generates + // separate emit_stream and cut_stream, at least for Shader Model 5.1). + ++stat_.emit_instruction_count; + ++stat_.cut_instruction_count; + } void OpDerivRTXCoarse(const Dest& dest, const Src& src, bool saturate = false) { EmitAluOp(Opcode::kDerivRTXCoarse, 0b0, dest, src, saturate); @@ -2102,6 +2265,12 @@ class Assembler { EmitAluOp(Opcode::kBFRev, 0b1, dest, src); ++stat_.uint_instruction_count; } + void OpDclStream(const Dest& stream) { + uint32_t operands_length = stream.GetLength(); + code_.reserve(code_.size() + 1 + operands_length); + code_.push_back(OpcodeToken(Opcode::kDclStream, operands_length)); + stream.Write(code_, true); + } void OpDclInputControlPointCount(uint32_t count) { code_.push_back(OpcodeToken(Opcode::kDclInputControlPointCount, 0) | (count << 11)); @@ -2124,7 +2293,7 @@ class Assembler { void OpDclUnorderedAccessViewTyped(ResourceDimension dimension, uint32_t flags, uint32_t return_type_token, const Src& operand, uint32_t space = 0) { - uint32_t operands_length = operand.GetLength(0b1111, false, true); + uint32_t operands_length = operand.GetLength(0b1111, false); code_.reserve(code_.size() + 3 + operands_length); code_.push_back( OpcodeToken(Opcode::kDclUnorderedAccessViewTyped, 2 + operands_length) | @@ -2137,7 +2306,7 @@ class Assembler { // kUAVFlagRasterizerOrderedAccess. void OpDclUnorderedAccessViewRaw(uint32_t flags, const Src& operand, uint32_t space = 0) { - uint32_t operands_length = operand.GetLength(0b1111, false, true); + uint32_t operands_length = operand.GetLength(0b1111, false); code_.reserve(code_.size() + 2 + operands_length); code_.push_back( OpcodeToken(Opcode::kDclUnorderedAccessViewRaw, 1 + operands_length) | @@ -2146,7 +2315,7 @@ class Assembler { code_.push_back(space); } void OpDclResourceRaw(const Src& operand, uint32_t space = 0) { - uint32_t operands_length = operand.GetLength(0b1111, false, true); + uint32_t operands_length = operand.GetLength(0b1111, false); code_.reserve(code_.size() + 2 + operands_length); code_.push_back(OpcodeToken(Opcode::kDclResourceRaw, 1 + operands_length)); operand.Write(code_, true, 0b1111, false, true); diff --git a/src/xenia/gpu/dxbc_shader_translator.cc b/src/xenia/gpu/dxbc_shader_translator.cc index c2a4d8540..b99e9cbe8 100644 --- a/src/xenia/gpu/dxbc_shader_translator.cc +++ b/src/xenia/gpu/dxbc_shader_translator.cc @@ -326,16 +326,17 @@ void DxbcShaderTranslator::StartVertexShader_LoadVertexIndex() { // Check if the closing vertex of a non-indexed line loop is being processed. a_.OpINE( index_dest, - dxbc::Src::V(uint32_t(InOutRegister::kVSInVertexIndex), dxbc::Src::kXXXX), + dxbc::Src::V1D(uint32_t(InOutRegister::kVSInVertexIndex), + dxbc::Src::kXXXX), LoadSystemConstant(SystemConstants::Index::kLineLoopClosingIndex, offsetof(SystemConstants, line_loop_closing_index), dxbc::Src::kXXXX)); // Zero the index if processing the closing vertex of a line loop, or do // nothing (replace 0 with 0) if not needed. - a_.OpAnd( - index_dest, - dxbc::Src::V(uint32_t(InOutRegister::kVSInVertexIndex), dxbc::Src::kXXXX), - index_src); + a_.OpAnd(index_dest, + dxbc::Src::V1D(uint32_t(InOutRegister::kVSInVertexIndex), + dxbc::Src::kXXXX), + index_src); { // Swap the vertex index's endianness. @@ -590,7 +591,7 @@ void DxbcShaderTranslator::StartPixelShader() { // system_temp_depth_stencil_ before any return statement is possibly // reached. assert_true(system_temp_depth_stencil_ != UINT32_MAX); - dxbc::Src in_position_z(dxbc::Src::V( + dxbc::Src in_position_z(dxbc::Src::V1D( uint32_t(InOutRegister::kPSInPosition), dxbc::Src::kZZZZ)); in_position_used_ |= 0b0100; a_.OpDerivRTXCoarse(dxbc::Dest::R(system_temp_depth_stencil_, 0b0001), @@ -633,14 +634,14 @@ void DxbcShaderTranslator::StartPixelShader() { // At center. a_.OpMov(uses_register_dynamic_addressing ? dxbc::Dest::X(0, i) : dxbc::Dest::R(i), - dxbc::Src::V(uint32_t(InOutRegister::kPSInInterpolators) + i)); + dxbc::Src::V1D(uint32_t(InOutRegister::kPSInInterpolators) + i)); a_.OpElse(); // At centroid. Not really important that 2x MSAA is emulated using // ForcedSampleCount 4 - what matters is that the sample position will // be within the primitive, and the value will not be extrapolated. a_.OpEvalCentroid( dxbc::Dest::R(centroid_register), - dxbc::Src::V(uint32_t(InOutRegister::kPSInInterpolators) + i)); + dxbc::Src::V1D(uint32_t(InOutRegister::kPSInInterpolators) + i)); if (uses_register_dynamic_addressing) { a_.OpMov(dxbc::Dest::X(0, i), dxbc::Src::R(centroid_register)); } @@ -677,7 +678,7 @@ void DxbcShaderTranslator::StartPixelShader() { // have correct derivative magnitude and LODs. in_position_used_ |= 0b0011; a_.OpRoundNI(dxbc::Dest::R(param_gen_temp, 0b0011), - dxbc::Src::V(uint32_t(InOutRegister::kPSInPosition))); + dxbc::Src::V1D(uint32_t(InOutRegister::kPSInPosition))); uint32_t resolution_scaled_axes = uint32_t(draw_resolution_scale_x_ > 1) | (uint32_t(draw_resolution_scale_y_ > 1) << 1); @@ -701,20 +702,20 @@ void DxbcShaderTranslator::StartPixelShader() { // Negate modifier flips the sign bit even for 0 - set it to minus for // backfaces. in_front_face_used_ = true; - a_.OpMovC( - dxbc::Dest::R(param_gen_temp, 0b0001), - dxbc::Src::V(uint32_t(InOutRegister::kPSInFrontFaceAndSampleIndex), - dxbc::Src::kXXXX), - dxbc::Src::R(param_gen_temp, dxbc::Src::kXXXX), - -dxbc::Src::R(param_gen_temp, dxbc::Src::kXXXX)); + a_.OpMovC(dxbc::Dest::R(param_gen_temp, 0b0001), + dxbc::Src::V1D( + uint32_t(InOutRegister::kPSInFrontFaceAndSampleIndex), + dxbc::Src::kXXXX), + dxbc::Src::R(param_gen_temp, dxbc::Src::kXXXX), + -dxbc::Src::R(param_gen_temp, dxbc::Src::kXXXX)); } a_.OpEndIf(); // Point sprite coordinates. // Saturate to avoid negative point coordinates if the center of the pixel // is not covered, and extrapolation is done. a_.OpMov(dxbc::Dest::R(param_gen_temp, 0b1100), - dxbc::Src::V(uint32_t(InOutRegister::kPSInPointParameters), - 0b0100 << 4), + dxbc::Src::V1D(uint32_t(InOutRegister::kPSInPointParameters), + 0b0100 << 4), true); // Primitive type. { @@ -1814,12 +1815,26 @@ void DxbcShaderTranslator::ProcessLoopStartInstruction( 2 + (instr.loop_constant_index >> 2)) .Select(instr.loop_constant_index & 3)); - // Push the count to the loop count stack - move XYZ to YZW and set X to this - // loop count. - a_.OpMov(dxbc::Dest::R(system_temp_loop_count_, 0b1110), - dxbc::Src::R(system_temp_loop_count_, 0b10010000)); - a_.OpAnd(dxbc::Dest::R(system_temp_loop_count_, 0b0001), loop_constant_src, - dxbc::Src::LU(UINT8_MAX)); + { + uint32_t loop_count_temp = PushSystemTemp(); + a_.OpAnd(dxbc::Dest::R(loop_count_temp, 0b0001), loop_constant_src, + dxbc::Src::LU(UINT8_MAX)); + + // Skip the loop without pushing if the count is zero from the beginning. + a_.OpIf(false, dxbc::Src::R(loop_count_temp, dxbc::Src::kXXXX)); + JumpToLabel(instr.loop_skip_address); + a_.OpEndIf(); + + // Push the count to the loop count stack - move XYZ to YZW and set X to the + // new loop count. + a_.OpMov(dxbc::Dest::R(system_temp_loop_count_, 0b1110), + dxbc::Src::R(system_temp_loop_count_, 0b10010000)); + a_.OpMov(dxbc::Dest::R(system_temp_loop_count_, 0b0001), + dxbc::Src::R(loop_count_temp, dxbc::Src::kXXXX)); + + // Release loop_count_temp. + PopSystemTemp(); + } // Push aL - keep the same value as in the previous loop if repeating, or the // new one otherwise. @@ -1829,13 +1844,6 @@ void DxbcShaderTranslator::ProcessLoopStartInstruction( a_.OpUBFE(dxbc::Dest::R(system_temp_aL_, 0b0001), dxbc::Src::LU(8), dxbc::Src::LU(8), loop_constant_src); } - - // Break if the loop counter is 0 (since the condition is checked in the end). - // TODO(Triang3l): Move this before pushing and address loading. This won't - // pop if the counter is 0. - a_.OpIf(false, dxbc::Src::R(system_temp_loop_count_, dxbc::Src::kXXXX)); - JumpToLabel(instr.loop_skip_address); - a_.OpEndIf(); } void DxbcShaderTranslator::ProcessLoopEndInstruction( @@ -2040,9 +2048,9 @@ const DxbcShaderTranslator::SystemConstantRdef {"xe_point_vertex_diameter_max", ShaderRdefTypeIndex::kFloat, sizeof(float)}, - {"xe_point_constant_radius", ShaderRdefTypeIndex::kFloat2, + {"xe_point_constant_diameter", ShaderRdefTypeIndex::kFloat2, sizeof(float) * 2}, - {"xe_point_screen_to_ndc", ShaderRdefTypeIndex::kFloat2, + {"xe_point_screen_diameter_to_ndc_radius", ShaderRdefTypeIndex::kFloat2, sizeof(float) * 2}, {"xe_interpolator_sampling_pattern", ShaderRdefTypeIndex::kUint, @@ -3492,7 +3500,7 @@ void DxbcShaderTranslator::WriteShaderCode() { if (register_count()) { // Unswapped vertex index input (only X component). ao_.OpDclInputSGV( - dxbc::Dest::V(uint32_t(InOutRegister::kVSInVertexIndex), 0b0001), + dxbc::Dest::V1D(uint32_t(InOutRegister::kVSInVertexIndex), 0b0001), dxbc::Name::kVertexID); } } @@ -3530,14 +3538,14 @@ void DxbcShaderTranslator::WriteShaderCode() { for (uint32_t i = 0; i < interpolator_count; ++i) { ao_.OpDclInputPS( dxbc::InterpolationMode::kLinear, - dxbc::Dest::V(uint32_t(InOutRegister::kPSInInterpolators) + i)); + dxbc::Dest::V1D(uint32_t(InOutRegister::kPSInInterpolators) + i)); } if (register_count()) { // Point parameters input (only coordinates, not size, needed). ao_.OpDclInputPS( dxbc::InterpolationMode::kLinear, - dxbc::Dest::V(uint32_t(InOutRegister::kPSInPointParameters), - 0b0011)); + dxbc::Dest::V1D(uint32_t(InOutRegister::kPSInPointParameters), + 0b0011)); } } if (in_position_used_) { @@ -3553,8 +3561,8 @@ void DxbcShaderTranslator::WriteShaderCode() { (is_writing_float24_depth && !shader_writes_depth) ? dxbc::InterpolationMode::kLinearNoPerspectiveSample : dxbc::InterpolationMode::kLinearNoPerspective, - dxbc::Dest::V(uint32_t(InOutRegister::kPSInPosition), - in_position_used_), + dxbc::Dest::V1D(uint32_t(InOutRegister::kPSInPosition), + in_position_used_), dxbc::Name::kPosition); } bool sample_rate_memexport = @@ -3568,8 +3576,8 @@ void DxbcShaderTranslator::WriteShaderCode() { if (front_face_and_sample_index_mask) { // Is front face, sample index. ao_.OpDclInputPSSGV( - dxbc::Dest::V(uint32_t(InOutRegister::kPSInFrontFaceAndSampleIndex), - front_face_and_sample_index_mask), + dxbc::Dest::V1D(uint32_t(InOutRegister::kPSInFrontFaceAndSampleIndex), + front_face_and_sample_index_mask), dxbc::Name::kIsFrontFace); } if (edram_rov_used_) { diff --git a/src/xenia/gpu/dxbc_shader_translator.h b/src/xenia/gpu/dxbc_shader_translator.h index f2fae6cc6..e8009c210 100644 --- a/src/xenia/gpu/dxbc_shader_translator.h +++ b/src/xenia/gpu/dxbc_shader_translator.h @@ -242,9 +242,10 @@ class DxbcShaderTranslator : public ShaderTranslator { float ndc_offset[3]; float point_vertex_diameter_max; - float point_constant_radius[2]; - // Screen point size * 2 (but not supersampled) -> size in NDC. - float point_screen_to_ndc[2]; + float point_constant_diameter[2]; + // Diameter in guest screen coordinates > radius (0.5 * diameter) in the NDC + // for the host viewport. + float point_screen_diameter_to_ndc_radius[2]; uint32_t interpolator_sampling_pattern; uint32_t ps_param_gen; @@ -356,8 +357,8 @@ class DxbcShaderTranslator : public ShaderTranslator { kNDCOffset, kPointVertexDiameterMax, - kPointConstantRadius, - kPointScreenToNDC, + kPointConstantDiameter, + kPointScreenDiameterToNDCRadius, kInterpolatorSamplingPattern, kPSParamGen, diff --git a/src/xenia/gpu/dxbc_shader_translator_memexport.cc b/src/xenia/gpu/dxbc_shader_translator_memexport.cc index f9d09fc7d..e2f65e66f 100644 --- a/src/xenia/gpu/dxbc_shader_translator_memexport.cc +++ b/src/xenia/gpu/dxbc_shader_translator_memexport.cc @@ -139,7 +139,7 @@ void DxbcShaderTranslator::ExportToMemory() { in_position_used_ |= resolution_scaled_axes; a_.OpFToU( dxbc::Dest::R(control_temp, resolution_scaled_axes << 1), - dxbc::Src::V(uint32_t(InOutRegister::kPSInPosition), 0b0100 << 2)); + dxbc::Src::V1D(uint32_t(InOutRegister::kPSInPosition), 0b0100 << 2)); dxbc::Dest resolution_scaling_temp_dest( dxbc::Dest::R(control_temp, 0b1000)); dxbc::Src resolution_scaling_temp_src( @@ -201,8 +201,8 @@ void DxbcShaderTranslator::ExportToMemory() { a_.OpIEq( dxbc::Dest::R(control_temp, inner_condition_provided ? 0b0010 : 0b0001), - dxbc::Src::V(uint32_t(InOutRegister::kPSInFrontFaceAndSampleIndex), - dxbc::Src::kYYYY), + dxbc::Src::V1D(uint32_t(InOutRegister::kPSInFrontFaceAndSampleIndex), + dxbc::Src::kYYYY), dxbc::Src::R(control_temp, dxbc::Src::kYYYY)); if (inner_condition_provided) { // Merge with the previous condition in control_temp.x. diff --git a/src/xenia/gpu/dxbc_shader_translator_om.cc b/src/xenia/gpu/dxbc_shader_translator_om.cc index 6c90c42e8..164ac07fb 100644 --- a/src/xenia/gpu/dxbc_shader_translator_om.cc +++ b/src/xenia/gpu/dxbc_shader_translator_om.cc @@ -172,7 +172,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::V(uint32_t(InOutRegister::kPSInPosition))); + dxbc::Src::V1D(uint32_t(InOutRegister::kPSInPosition))); // 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 @@ -605,8 +605,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::V(uint32_t(InOutRegister::kPSInPosition), dxbc::Src::kZZZZ)); + dxbc::Src in_position_z(dxbc::Src::V1D( + uint32_t(InOutRegister::kPSInPosition), 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 @@ -645,9 +645,9 @@ 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::V(uint32_t(InOutRegister::kPSInFrontFaceAndSampleIndex), - dxbc::Src::kXXXX)); + a_.OpIf(true, dxbc::Src::V1D( + uint32_t(InOutRegister::kPSInFrontFaceAndSampleIndex), + dxbc::Src::kXXXX)); // temp.x if early = ddx(z) // temp.y if early = ddy(z) // temp.z = front face polygon offset @@ -949,7 +949,7 @@ 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::V( + a_.OpIf(true, dxbc::Src::V1D( uint32_t(InOutRegister::kPSInFrontFaceAndSampleIndex), dxbc::Src::kXXXX)); for (uint32_t j = 0; j < 2; ++j) { @@ -1012,8 +1012,8 @@ void DxbcShaderTranslator::ROV_DepthStencilTest() { in_front_face_used_ = true; a_.OpMovC( sample_temp_z_dest, - dxbc::Src::V(uint32_t(InOutRegister::kPSInFrontFaceAndSampleIndex), - dxbc::Src::kXXXX), + dxbc::Src::V1D(uint32_t(InOutRegister::kPSInFrontFaceAndSampleIndex), + dxbc::Src::kXXXX), LoadSystemConstant( SystemConstants::Index::kEdramStencil, offsetof(SystemConstants, edram_stencil_front_func_ops), @@ -1090,18 +1090,18 @@ void DxbcShaderTranslator::ROV_DepthStencilTest() { // Replace. a_.OpCase(dxbc::Src::LU(uint32_t(xenos::StencilOp::kReplace))); in_front_face_used_ = true; - a_.OpMovC( - sample_temp_y_dest, - dxbc::Src::V(uint32_t(InOutRegister::kPSInFrontFaceAndSampleIndex), - dxbc::Src::kXXXX), - LoadSystemConstant( - SystemConstants::Index::kEdramStencil, - offsetof(SystemConstants, edram_stencil_front_reference), - dxbc::Src::kXXXX), - LoadSystemConstant( - SystemConstants::Index::kEdramStencil, - offsetof(SystemConstants, edram_stencil_back_reference), - dxbc::Src::kXXXX)); + a_.OpMovC(sample_temp_y_dest, + dxbc::Src::V1D( + uint32_t(InOutRegister::kPSInFrontFaceAndSampleIndex), + dxbc::Src::kXXXX), + LoadSystemConstant( + SystemConstants::Index::kEdramStencil, + offsetof(SystemConstants, edram_stencil_front_reference), + dxbc::Src::kXXXX), + LoadSystemConstant( + SystemConstants::Index::kEdramStencil, + offsetof(SystemConstants, edram_stencil_back_reference), + dxbc::Src::kXXXX)); a_.OpBreak(); // Increment and clamp. a_.OpCase(dxbc::Src::LU(uint32_t(xenos::StencilOp::kIncrementClamp))); @@ -1155,8 +1155,8 @@ void DxbcShaderTranslator::ROV_DepthStencilTest() { in_front_face_used_ = true; a_.OpMovC( sample_temp_z_dest, - dxbc::Src::V(uint32_t(InOutRegister::kPSInFrontFaceAndSampleIndex), - dxbc::Src::kXXXX), + dxbc::Src::V1D(uint32_t(InOutRegister::kPSInFrontFaceAndSampleIndex), + dxbc::Src::kXXXX), LoadSystemConstant( SystemConstants::Index::kEdramStencil, offsetof(SystemConstants, edram_stencil_front_write_mask), @@ -1924,10 +1924,10 @@ void DxbcShaderTranslator::CompletePixelShader_DSV_DepthTo24Bit() { // assumption of it being clamped while working with the bit representation. temp = PushSystemTemp(); in_position_used_ |= 0b0100; - a_.OpMul( - dxbc::Dest::R(temp, 0b0001), - dxbc::Src::V(uint32_t(InOutRegister::kPSInPosition), dxbc::Src::kZZZZ), - dxbc::Src::LF(2.0f), true); + a_.OpMul(dxbc::Dest::R(temp, 0b0001), + dxbc::Src::V1D(uint32_t(InOutRegister::kPSInPosition), + dxbc::Src::kZZZZ), + dxbc::Src::LF(2.0f), true); } dxbc::Dest temp_x_dest(dxbc::Dest::R(temp, 0b0001)); @@ -2068,7 +2068,7 @@ void DxbcShaderTranslator::CompletePixelShader_AlphaToMask() { // 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::V(uint32_t(InOutRegister::kPSInPosition))); + dxbc::Src::V1D(uint32_t(InOutRegister::kPSInPosition))); 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, diff --git a/src/xenia/gpu/register_file.h b/src/xenia/gpu/register_file.h index ae26f2cb9..e9a4f1137 100644 --- a/src/xenia/gpu/register_file.h +++ b/src/xenia/gpu/register_file.h @@ -33,7 +33,7 @@ class RegisterFile { static const RegisterInfo* GetRegisterInfo(uint32_t index); - static const size_t kRegisterCount = 0x5003; + static constexpr size_t kRegisterCount = 0x5003; union RegisterValue { uint32_t u32; float f32; diff --git a/src/xenia/gpu/register_table.inc b/src/xenia/gpu/register_table.inc index 8da898a5a..aa22558eb 100644 --- a/src/xenia/gpu/register_table.inc +++ b/src/xenia/gpu/register_table.inc @@ -275,14 +275,183 @@ XE_GPU_REGISTER(0x1844, kDword, D1GRPH_PRIMARY_SURFACE_ADDRESS) XE_GPU_REGISTER(0x1852, kDword, D1GRPH_FLIP_CONTROL) -XE_GPU_REGISTER(0x1921, kDword, DC_LUT_RW_MODE) -XE_GPU_REGISTER(0x1922, kDword, DC_LUT_RW_INDEX) +// In 4B4F07FE, the 256-entry gamma ramp for the 8bpc framebuffer is set to +// different values in multiple places in the game. For VdGetCurrentDisplayGamma +// returning 1 (sRGB), it's set up in the beginning as: +// DC_LUTA_CONTROL = 0x00000000 (256-entry unsigned fixed-point) +// DC_LUT_RW_MODE = 0x00000000 +// DC_LUT_RW_INDEX = 0x00000000 +// DC_LUT_WRITE_EN_MASK = 0x00000007 +// DC_LUT_30_COLOR = 0x00000000 +// DC_LUT_RW_INDEX = 0x00000001 +// DC_LUT_30_COLOR = 0x04812048 +// DC_LUT_RW_INDEX = 0x00000002 +// DC_LUT_30_COLOR = 0x05916459 +// DC_LUT_RW_INDEX = 0x00000003 +// DC_LUT_30_COLOR = 0x06519465 +// ... +// DC_LUT_RW_INDEX = 0x000000FE +// DC_LUT_30_COLOR = 0x3FBFEFFB +// DC_LUT_RW_INDEX = 0x000000FF +// DC_LUT_30_COLOR = 0x3FFFFFFF +// DC_LUT_RW_INDEX = 0x00000100 +// +// One another possible setup in 4B4F07FE is: +// DC_LUTA_CONTROL = 0x00000000 (256-entry unsigned fixed-point) +// DC_LUT_RW_MODE = 0x00000000 +// DC_LUT_RW_INDEX = 0x00000000 +// DC_LUT_WRITE_EN_MASK = 0x00000007 +// DC_LUT_30_COLOR = 0x00000000 +// DC_LUT_RW_INDEX = 0x00000001 +// DC_LUT_30_COLOR = 0x01A0681A +// DC_LUT_RW_INDEX = 0x00000002 +// DC_LUT_30_COLOR = 0x02709C27 +// ... +// DC_LUT_RW_INDEX = 0x000000FE +// DC_LUT_30_COLOR = 0x3FBFEFFB +// DC_LUT_RW_INDEX = 0x000000FF +// DC_LUT_30_COLOR = 0x3FFFFFFF +// DC_LUT_RW_INDEX = 0x00000100 +// +// In 4D5307E6, the 128-entry PWL gamma ramp for the 10bpc framebuffer, for +// VdGetCurrentDisplayGamma returning 1 (sRGB), is set up right after launching +// the game as: +// DC_LUTA_CONTROL = 0x00000003 (8-increment unsigned fixed-point) +// DC_LUT_RW_MODE = 0x00000001 +// DC_LUT_RW_INDEX = 0x00000000 +// DC_LUT_WRITE_EN_MASK = 0x00000007 +// DC_LUT_PWL_DATA = 0x02000000 +// DC_LUT_PWL_DATA = 0x02000000 +// DC_LUT_PWL_DATA = 0x02000000 +// DC_LUT_RW_INDEX = 0x00000001 +// DC_LUT_PWL_DATA = 0x02000200 +// DC_LUT_PWL_DATA = 0x02000200 +// DC_LUT_PWL_DATA = 0x02000200 +// DC_LUT_RW_INDEX = 0x00000001 +// DC_LUT_PWL_DATA = 0x02000400 +// DC_LUT_PWL_DATA = 0x02000400 +// DC_LUT_PWL_DATA = 0x02000400 +// ... +// DC_LUT_RW_INDEX = 0x0000007D +// DC_LUT_PWL_DATA = 0x0200FBC0 +// DC_LUT_PWL_DATA = 0x0200FBC0 +// DC_LUT_PWL_DATA = 0x0200FBC0 +// DC_LUT_RW_INDEX = 0x0000007E +// DC_LUT_PWL_DATA = 0x0200FDC0 +// DC_LUT_PWL_DATA = 0x0200FDC0 +// DC_LUT_PWL_DATA = 0x0200FDC0 +// DC_LUT_RW_INDEX = 0x0000007F +// DC_LUT_PWL_DATA = 0x0000FFC0 +// DC_LUT_PWL_DATA = 0x0000FFC0 +// DC_LUT_PWL_DATA = 0x0000FFC0 +// DC_LUT_RW_INDEX = 0x00000080 +// +// Later in 4D5307E6, for the game itself (apparently for conversion of the bit +// representation of 7e3 floating-point data in the front buffer to 10-bit fixed +// point, as the game draws the final passes to a 7e3 framebuffer), with +// VdGetCurrentDisplayGamma returning 1 (sRGB) and the normal brightness in the +// game settings, it's: +// DC_LUTA_CONTROL = 0x00000003 (8-increment unsigned fixed-point) +// DC_LUT_RW_MODE = 0x00000001 +// DC_LUT_RW_INDEX = 0x00000000 +// DC_LUT_WRITE_EN_MASK = 0x00000007 +// DC_LUT_PWL_DATA = 0x05000000 +// DC_LUT_PWL_DATA = 0x05000000 +// DC_LUT_PWL_DATA = 0x05000000 +// DC_LUT_RW_INDEX = 0x00000001 +// DC_LUT_PWL_DATA = 0x02000500 +// DC_LUT_PWL_DATA = 0x02000500 +// DC_LUT_PWL_DATA = 0x02000500 +// DC_LUT_RW_INDEX = 0x00000001 +// DC_LUT_PWL_DATA = 0x01800740 +// DC_LUT_PWL_DATA = 0x01800740 +// DC_LUT_PWL_DATA = 0x01800740 +// ... +// DC_LUT_RW_INDEX = 0x0000007D +// DC_LUT_PWL_DATA = 0x0440F340 +// DC_LUT_PWL_DATA = 0x0440F340 +// DC_LUT_PWL_DATA = 0x0440F340 +// DC_LUT_RW_INDEX = 0x0000007E +// DC_LUT_PWL_DATA = 0x0400F780 +// DC_LUT_PWL_DATA = 0x0400F780 +// DC_LUT_PWL_DATA = 0x0400F780 +// DC_LUT_RW_INDEX = 0x0000007F +// DC_LUT_PWL_DATA = 0x0400FBC0 +// DC_LUT_PWL_DATA = 0x0400FBC0 +// DC_LUT_PWL_DATA = 0x0400FBC0 +// DC_LUT_RW_INDEX = 0x00000080 +// +// In 535107D4, the 256-entry gamma ramp for the 8bpc framebuffer is +// configurable from the game's settings menu for each channel independently. +// For VdGetCurrentDisplayGamma returning 1 (sRGB), when in the settings, the +// red gamma is at the maximum of 5.56, green is at 1.00, and blue is at the +// minimum of 0.17, the setup is done as: +// DC_LUT_RW_MODE = 0x00000000 +// DC_LUT_RW_INDEX = 0x00000000 +// DC_LUT_WRITE_EN_MASK = 0x00000007 +// DC_LUT_30_COLOR = 0x00000000 +// DC_LUT_RW_INDEX = 0x00000001 +// DC_LUT_30_COLOR = 0x17901000 +// DC_LUT_RW_INDEX = 0x00000002 +// DC_LUT_30_COLOR = 0x1AB02000 +// ... +// DC_LUT_RW_INDEX = 0x000000FE +// DC_LUT_30_COLOR = 0x3FEFE3D2 +// DC_LUT_RW_INDEX = 0x000000FF +// DC_LUT_30_COLOR = 0x3FFFF3E9 +// DC_LUT_RW_INDEX = 0x00000100 +// Read / write mode in bit 0: 0 - 256-entry table, 1 - PWL. +// Default: 0x00000000. +XE_GPU_REGISTER(0x1921, kDword, DC_LUT_RW_MODE) +// Read / write index. No lower and upper halves on the Xenos apparently, for +// the 256-entry table, the bits 0:7 are the index directly (unlike on the M56, +// not split into the index in 1:7 and the lower or upper 10 bits selection in +// 0:0, instead, on the Xenos, the index in 0:7 is just increased +// monotonically). For some reason though Direct3D 9 writes an index that +// overflows by one (0x100 for the 256-entry table, 0x80 for the 128-entry PWL +// gamma ramp) after setting up all the values. However, the index is 8-bit, and +// for PWL, according to the M56 documentation, the bit 7 is not used. +// Default: 0x00000000. +XE_GPU_REGISTER(0x1922, kDword, DC_LUT_RW_INDEX) +// Sequential 10-bit R, G, B host read / write for the 256-entry table. After +// reset or writing DC_LUT_RW_INDEX, the first access is for the red component, +// the second is for green, the third is for blue, and after blue is accessed, +// the LUT index is increased by 1 (without having to explicitly change +// DC_LUT_RW_INDEX). Bits 0:5 are hardwired to zero. +// Default: 0x00000000. +XE_GPU_REGISTER(0x1923, kDword, DC_LUT_SEQ_COLOR) +// Read / write, 0:15 - base, 16:31 - delta. Bits 0:5 of both the base and the +// delta are hardwired to zero. The LUT index is increased by 1 when +// DC_LUT_PWL_DATA is accessed, though three DC_LUT_PWL_DATA writes are done for +// one entry (the order is likely R, G, B, similar to DC_LUT_SEQ_COLOR, but this +// hasn't been verified yet as no games using the PWL gamma ramp with separate +// settings for each channel have been found yet). +// Default: 0x00000000. XE_GPU_REGISTER(0x1924, kDword, DC_LUT_PWL_DATA) +// Read / write, 0:9 - blue, 10:19 - green, 20:29 - red. The LUT index is +// increased by 1 when DC_LUT_30_COLOR is accessed. +// Default: 0x00000000. XE_GPU_REGISTER(0x1925, kDword, DC_LUT_30_COLOR) +// Only LUT pipe 1 on the Xenos apparently (Direct3D 9 sets DC_LUT_WRITE_EN_MASK +// to 0b111 before writing the gamma ramp), 3 bits set, rather than 6 on the +// M56. +// Bit 0 - blue write enable mask. +// Bit 1 - green write enable mask. +// Bit 2 - red write enable mask. +// Default: 0x00000007 (though 0x0000003F on the M56 where there are two pipes). XE_GPU_REGISTER(0x1927, kDword, DC_LUT_WRITE_EN_MASK) +// Single set of parameters for all channels apparently unlike on the M56 +// (4D5307E6 sets DC_LUTA_CONTROL to 0x00000003 for the data increment of 8 in +// the 128-entry PWL gamma ramp for a 10bpc framebuffer). Also set not only +// during setup, but also apparently during every swap by Direct3D 9, though not +// directly in all games (happens in 4B4F07FE and 4D5307E6 even without proper +// VdSwap emulation, but in 535107D4, with a fake VdSwap packet rather than the +// real ones, the register is not set at all, though the expected behavior is +// that of the value of 0x00000000). +// Default: 0x00000000. XE_GPU_REGISTER(0x1930, kDword, DC_LUTA_CONTROL) XE_GPU_REGISTER(0x1961, kDword, AVIVO_D1MODE_VIEWPORT_SIZE) diff --git a/src/xenia/gpu/registers.h b/src/xenia/gpu/registers.h index 7c1020bd9..ec2017185 100644 --- a/src/xenia/gpu/registers.h +++ b/src/xenia/gpu/registers.h @@ -130,16 +130,16 @@ union alignas(uint32_t) SQ_CONTEXT_MISC { uint32_t sc_output_screen_xy : 1; // +1 xenos::SampleControl sc_sample_cntl : 2; // +2 uint32_t : 4; // +4 - // Pixel shader interpolator (according to the XNA microcode compiler - + // Pixel shader interpolator (according to the XNA microcode validator - // limited to the interpolator count, 16, not the total register count of // 64) index to write pixel parameters to. // See https://portal.unifiedpatents.com/ptab/case/IPR2015-00325 Exhibit // 2039 R400 Sequencer Specification 2.11 (a significantly early version of // the specification, however) section 19.2 "Sprites/ XY screen coordinates/ // FB information" for additional details. - // * |XY| - position on screen (vPos - the XNA microcode compiler translates - // ps_3_0 vPos directly to this, so at least in Direct3D 9 pixel center - // mode, this contains 0, 1, 2, not 0.5, 1.5, 2.5). flto also said in the + // * |XY| - position on screen (vPos - the XNA assembler translates ps_3_0 + // vPos directly to this, so at least in Direct3D 9 pixel center mode, + // this contains 0, 1, 2, not 0.5, 1.5, 2.5). flto also said in the // Freedreno IRC that it's .0 even in OpenGL: // https://dri.freedesktop.org/~cbrill/dri-log/?channel=freedreno&date=2020-04-19 // According to the actual usage, in the final version of the hardware, @@ -825,6 +825,68 @@ union alignas(uint32_t) RB_COPY_DEST_PITCH { }; static_assert_size(RB_COPY_DEST_PITCH, sizeof(uint32_t)); +/******************************************************************************* + ___ ___ ___ ___ _ ___ __ + | \_ _/ __| _ \ | /_\ \ / / + | |) | |\__ \ _/ |__ / _ \ V / + |___/___|___/_| |____/_/ \_\_| + + ___ ___ _ _ _____ ___ ___ _ _ ___ ___ + / __/ _ \| \| |_ _| _ \/ _ \| | | | | __| _ \ + | (_| (_) | .` | | | | / (_) | |__| |__| _|| / + \___\___/|_|\_| |_| |_|_\\___/|____|____|___|_|_\ + +*******************************************************************************/ + +union alignas(uint32_t) DC_LUT_RW_INDEX { + uint32_t value; + struct { + // Unlike in the M56 documentation, for the 256-table entry, this is the + // absolute index, without the lower or upper 10 bits selection in the + // bit 0. For PWL, the bit 7 is ignored. + uint32_t rw_index : 8; // +0 + }; + static constexpr Register register_index = XE_GPU_REG_DC_LUT_RW_INDEX; +}; +static_assert_size(DC_LUT_RW_INDEX, sizeof(uint32_t)); + +union alignas(uint32_t) DC_LUT_SEQ_COLOR { + uint32_t value; + struct { + uint32_t seq_color : 16; // +0, bits 0:5 are hardwired to zero + }; + static constexpr Register register_index = XE_GPU_REG_DC_LUT_SEQ_COLOR; +}; +static_assert_size(DC_LUT_SEQ_COLOR, sizeof(uint32_t)); + +union alignas(uint32_t) DC_LUT_PWL_DATA { + uint32_t value; + struct { + // See the M56 DC_LUTA_CONTROL for information about the way these should be + // interpreted (`output = base + (multiplier * delta) / 2^increment`, where + // the increment is the value specified in DC_LUTA_CONTROL for the specific + // color channel, the base is 7 bits of the front buffer value above + // `increment` bits, the multiplier is the lower `increment` bits of it; the + // increment is nonzero, otherwise the 256-entry table should be used + // instead). + uint32_t base : 16; // +0, bits 0:5 are hardwired to zero + uint32_t delta : 16; // +16, bits 0:5 are hardwired to zero + }; + static constexpr Register register_index = XE_GPU_REG_DC_LUT_PWL_DATA; +}; +static_assert_size(DC_LUT_PWL_DATA, sizeof(uint32_t)); + +union alignas(uint32_t) DC_LUT_30_COLOR { + uint32_t value; + struct { + uint32_t color_10_blue : 10; // +0 + uint32_t color_10_green : 10; // +10 + uint32_t color_10_red : 10; // +20 + }; + static constexpr Register register_index = XE_GPU_REG_DC_LUT_30_COLOR; +}; +static_assert_size(DC_LUT_30_COLOR, sizeof(uint32_t)); + } // namespace reg } // namespace gpu diff --git a/src/xenia/gpu/shader_interpreter.cc b/src/xenia/gpu/shader_interpreter.cc index 566bade43..9e1084397 100644 --- a/src/xenia/gpu/shader_interpreter.cc +++ b/src/xenia/gpu/shader_interpreter.cc @@ -9,6 +9,7 @@ #include "xenia/gpu/shader_interpreter.h" +#include #include #include diff --git a/src/xenia/gpu/shaders/apply_gamma_pwl.hlsli b/src/xenia/gpu/shaders/apply_gamma_pwl.hlsli index a77c85460..7cae461e4 100644 --- a/src/xenia/gpu/shaders/apply_gamma_pwl.hlsli +++ b/src/xenia/gpu/shaders/apply_gamma_pwl.hlsli @@ -32,10 +32,9 @@ void main(uint3 xe_thread_id : SV_DispatchThreadID) { } // UNORM conversion according to the Direct3D 10+ rules. uint3 input = uint3(xe_apply_gamma_source[xe_thread_id.xy] * 1023.0f + 0.5f); - // The ramp is BGR, not RGB. - float3 output = float3(XeApplyPWLGamma(input.r, 2u), + float3 output = float3(XeApplyPWLGamma(input.r, 0u), XeApplyPWLGamma(input.g, 1u), - XeApplyPWLGamma(input.b, 0u)); + XeApplyPWLGamma(input.b, 2u)); xe_apply_gamma_dest[xe_thread_id.xy] = float4(output, XeApplyGammaGetAlpha(output)); } diff --git a/src/xenia/gpu/shaders/apply_gamma_table.hlsli b/src/xenia/gpu/shaders/apply_gamma_table.hlsli index 7f43a9567..c3786ee47 100644 --- a/src/xenia/gpu/shaders/apply_gamma_table.hlsli +++ b/src/xenia/gpu/shaders/apply_gamma_table.hlsli @@ -14,7 +14,8 @@ void main(uint3 xe_thread_id : SV_DispatchThreadID) { } // UNORM conversion according to the Direct3D 10+ rules. uint3 input = uint3(xe_apply_gamma_source[xe_thread_id.xy] * 255.0f + 0.5f); - // The ramp is BGR, not RGB. + // The ramp has blue in bits 0:9, green in 10:19, red in 20:29 - BGR passed as + // an R10G10B10A2 buffer. float3 output = float3(xe_apply_gamma_ramp[input.r].b, xe_apply_gamma_ramp[input.g].g, xe_apply_gamma_ramp[input.b].r); diff --git a/src/xenia/gpu/shaders/bytecode/d3d12_5_1/apply_gamma_pwl_cs.h b/src/xenia/gpu/shaders/bytecode/d3d12_5_1/apply_gamma_pwl_cs.h index 727d15384..01cb7de40 100644 --- a/src/xenia/gpu/shaders/bytecode/d3d12_5_1/apply_gamma_pwl_cs.h +++ b/src/xenia/gpu/shaders/bytecode/d3d12_5_1/apply_gamma_pwl_cs.h @@ -55,17 +55,17 @@ ld r0.xyz, r0.xyzw, T0[0].xyzw mad r0.xyz, r0.xyzx, l(1023.000000, 1023.000000, 1023.000000, 0.000000), l(0.500000, 0.500000, 0.500000, 0.000000) ftou r0.xyz, r0.xyzx ushr r1.xyz, r0.xyzx, l(3, 3, 3, 0) -imul null, r0.w, r1.z, l(3) -imad r1.xy, r1.xyxx, l(3, 3, 0, 0), l(2, 1, 0, 0) -ld r1.xz, r1.xxxx, T1[1].xzyw -utof r1.x, r1.x +imul null, r0.w, r1.x, l(3) +ld r1.xw, r0.wwww, T1[1].xzwy +utof r0.w, r1.x and r0.xyz, r0.xyzx, l(7, 7, 7, 0) -imul null, r0.x, r1.z, r0.x +imul null, r0.x, r1.w, r0.x utof r0.x, r0.x -mad r0.x, r0.x, l(0.125000), r1.x +mad r0.x, r0.x, l(0.125000), r0.w mul r0.x, r0.x, l(0.000015) min r2.x, r0.x, l(1.000000) -ld r1.xy, r1.yyyy, T1[1].xyzw +imad r0.xw, r1.yyyz, l(3, 0, 0, 3), l(1, 0, 0, 2) +ld r1.xy, r0.xxxx, T1[1].xyzw utof r0.x, r1.x imul null, r0.y, r0.y, r1.y utof r0.y, r0.y @@ -86,10 +86,10 @@ ret const BYTE apply_gamma_pwl_cs[] = { - 68, 88, 66, 67, 180, 180, - 222, 28, 4, 138, 188, 113, - 52, 97, 214, 88, 116, 106, - 105, 240, 1, 0, 0, 0, + 68, 88, 66, 67, 134, 193, + 189, 188, 150, 246, 151, 78, + 29, 10, 33, 117, 212, 145, + 204, 130, 1, 0, 0, 0, 128, 7, 0, 0, 5, 0, 0, 0, 52, 0, 0, 0, 24, 2, 0, 0, 40, 2, @@ -257,26 +257,16 @@ const BYTE apply_gamma_pwl_cs[] = 0, 0, 0, 0, 38, 0, 0, 8, 0, 208, 0, 0, 130, 0, 16, 0, 0, 0, - 0, 0, 42, 0, 16, 0, + 0, 0, 10, 0, 16, 0, 1, 0, 0, 0, 1, 64, 0, 0, 3, 0, 0, 0, - 35, 0, 0, 15, 50, 0, + 45, 0, 0, 8, 146, 0, 16, 0, 1, 0, 0, 0, - 70, 0, 16, 0, 1, 0, - 0, 0, 2, 64, 0, 0, - 3, 0, 0, 0, 3, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2, 64, - 0, 0, 2, 0, 0, 0, - 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 45, 0, 0, 8, 82, 0, - 16, 0, 1, 0, 0, 0, - 6, 0, 16, 0, 1, 0, - 0, 0, 134, 125, 32, 0, + 246, 15, 16, 0, 0, 0, + 0, 0, 134, 119, 32, 0, 1, 0, 0, 0, 1, 0, 0, 0, 86, 0, 0, 5, - 18, 0, 16, 0, 1, 0, + 130, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 0, 1, 0, 0, 0, 1, 0, 0, 10, 114, 0, 16, 0, @@ -288,7 +278,7 @@ const BYTE apply_gamma_pwl_cs[] = 0, 0, 38, 0, 0, 8, 0, 208, 0, 0, 18, 0, 16, 0, 0, 0, 0, 0, - 42, 0, 16, 0, 1, 0, + 58, 0, 16, 0, 1, 0, 0, 0, 10, 0, 16, 0, 0, 0, 0, 0, 86, 0, 0, 5, 18, 0, 16, 0, @@ -298,8 +288,8 @@ const BYTE apply_gamma_pwl_cs[] = 16, 0, 0, 0, 0, 0, 10, 0, 16, 0, 0, 0, 0, 0, 1, 64, 0, 0, - 0, 0, 0, 62, 10, 0, - 16, 0, 1, 0, 0, 0, + 0, 0, 0, 62, 58, 0, + 16, 0, 0, 0, 0, 0, 56, 0, 0, 7, 18, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 0, 0, 0, @@ -309,10 +299,20 @@ const BYTE apply_gamma_pwl_cs[] = 2, 0, 0, 0, 10, 0, 16, 0, 0, 0, 0, 0, 1, 64, 0, 0, 0, 0, - 128, 63, 45, 0, 0, 8, + 128, 63, 35, 0, 0, 15, + 146, 0, 16, 0, 0, 0, + 0, 0, 86, 9, 16, 0, + 1, 0, 0, 0, 2, 64, + 0, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 3, 0, 0, 0, + 2, 64, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 45, 0, 0, 8, 50, 0, 16, 0, 1, 0, - 0, 0, 86, 5, 16, 0, - 1, 0, 0, 0, 70, 126, + 0, 0, 6, 0, 16, 0, + 0, 0, 0, 0, 70, 126, 32, 0, 1, 0, 0, 0, 1, 0, 0, 0, 86, 0, 0, 5, 18, 0, 16, 0, diff --git a/src/xenia/gpu/shaders/bytecode/d3d12_5_1/apply_gamma_pwl_fxaa_luma_cs.h b/src/xenia/gpu/shaders/bytecode/d3d12_5_1/apply_gamma_pwl_fxaa_luma_cs.h index ed86b4d4a..a4dd510d2 100644 --- a/src/xenia/gpu/shaders/bytecode/d3d12_5_1/apply_gamma_pwl_fxaa_luma_cs.h +++ b/src/xenia/gpu/shaders/bytecode/d3d12_5_1/apply_gamma_pwl_fxaa_luma_cs.h @@ -55,17 +55,17 @@ ld r0.xyz, r0.xyzw, T0[0].xyzw mad r0.xyz, r0.xyzx, l(1023.000000, 1023.000000, 1023.000000, 0.000000), l(0.500000, 0.500000, 0.500000, 0.000000) ftou r0.xyz, r0.xyzx ushr r1.xyz, r0.xyzx, l(3, 3, 3, 0) -imul null, r0.w, r1.z, l(3) -imad r1.xy, r1.xyxx, l(3, 3, 0, 0), l(2, 1, 0, 0) -ld r1.xz, r1.xxxx, T1[1].xzyw -utof r1.x, r1.x +imul null, r0.w, r1.x, l(3) +ld r1.xw, r0.wwww, T1[1].xzwy +utof r0.w, r1.x and r0.xyz, r0.xyzx, l(7, 7, 7, 0) -imul null, r0.x, r1.z, r0.x +imul null, r0.x, r1.w, r0.x utof r0.x, r0.x -mad r0.x, r0.x, l(0.125000), r1.x +mad r0.x, r0.x, l(0.125000), r0.w mul r0.x, r0.x, l(0.000015) min r2.x, r0.x, l(1.000000) -ld r1.xy, r1.yyyy, T1[1].xyzw +imad r0.xw, r1.yyyz, l(3, 0, 0, 3), l(1, 0, 0, 2) +ld r1.xy, r0.xxxx, T1[1].xyzw utof r0.x, r1.x imul null, r0.y, r0.y, r1.y utof r0.y, r0.y @@ -86,10 +86,10 @@ ret const BYTE apply_gamma_pwl_fxaa_luma_cs[] = { - 68, 88, 66, 67, 165, 122, - 242, 36, 160, 218, 193, 67, - 37, 43, 138, 45, 109, 219, - 226, 109, 1, 0, 0, 0, + 68, 88, 66, 67, 115, 68, + 69, 234, 116, 212, 118, 193, + 71, 10, 44, 165, 244, 209, + 63, 198, 1, 0, 0, 0, 148, 7, 0, 0, 5, 0, 0, 0, 52, 0, 0, 0, 24, 2, 0, 0, 40, 2, @@ -257,26 +257,16 @@ const BYTE apply_gamma_pwl_fxaa_luma_cs[] = 0, 0, 0, 0, 38, 0, 0, 8, 0, 208, 0, 0, 130, 0, 16, 0, 0, 0, - 0, 0, 42, 0, 16, 0, + 0, 0, 10, 0, 16, 0, 1, 0, 0, 0, 1, 64, 0, 0, 3, 0, 0, 0, - 35, 0, 0, 15, 50, 0, + 45, 0, 0, 8, 146, 0, 16, 0, 1, 0, 0, 0, - 70, 0, 16, 0, 1, 0, - 0, 0, 2, 64, 0, 0, - 3, 0, 0, 0, 3, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2, 64, - 0, 0, 2, 0, 0, 0, - 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 45, 0, 0, 8, 82, 0, - 16, 0, 1, 0, 0, 0, - 6, 0, 16, 0, 1, 0, - 0, 0, 134, 125, 32, 0, + 246, 15, 16, 0, 0, 0, + 0, 0, 134, 119, 32, 0, 1, 0, 0, 0, 1, 0, 0, 0, 86, 0, 0, 5, - 18, 0, 16, 0, 1, 0, + 130, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 0, 1, 0, 0, 0, 1, 0, 0, 10, 114, 0, 16, 0, @@ -288,7 +278,7 @@ const BYTE apply_gamma_pwl_fxaa_luma_cs[] = 0, 0, 38, 0, 0, 8, 0, 208, 0, 0, 18, 0, 16, 0, 0, 0, 0, 0, - 42, 0, 16, 0, 1, 0, + 58, 0, 16, 0, 1, 0, 0, 0, 10, 0, 16, 0, 0, 0, 0, 0, 86, 0, 0, 5, 18, 0, 16, 0, @@ -298,8 +288,8 @@ const BYTE apply_gamma_pwl_fxaa_luma_cs[] = 16, 0, 0, 0, 0, 0, 10, 0, 16, 0, 0, 0, 0, 0, 1, 64, 0, 0, - 0, 0, 0, 62, 10, 0, - 16, 0, 1, 0, 0, 0, + 0, 0, 0, 62, 58, 0, + 16, 0, 0, 0, 0, 0, 56, 0, 0, 7, 18, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 0, 0, 0, @@ -309,10 +299,20 @@ const BYTE apply_gamma_pwl_fxaa_luma_cs[] = 2, 0, 0, 0, 10, 0, 16, 0, 0, 0, 0, 0, 1, 64, 0, 0, 0, 0, - 128, 63, 45, 0, 0, 8, + 128, 63, 35, 0, 0, 15, + 146, 0, 16, 0, 0, 0, + 0, 0, 86, 9, 16, 0, + 1, 0, 0, 0, 2, 64, + 0, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 3, 0, 0, 0, + 2, 64, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 45, 0, 0, 8, 50, 0, 16, 0, 1, 0, - 0, 0, 86, 5, 16, 0, - 1, 0, 0, 0, 70, 126, + 0, 0, 6, 0, 16, 0, + 0, 0, 0, 0, 70, 126, 32, 0, 1, 0, 0, 0, 1, 0, 0, 0, 86, 0, 0, 5, 18, 0, 16, 0, diff --git a/src/xenia/gpu/shaders/bytecode/d3d12_5_1/continuous_quad_hs.h b/src/xenia/gpu/shaders/bytecode/d3d12_5_1/continuous_quad_hs.h index 18faf5d6a..6ad9c3f3e 100644 --- a/src/xenia/gpu/shaders/bytecode/d3d12_5_1/continuous_quad_hs.h +++ b/src/xenia/gpu/shaders/bytecode/d3d12_5_1/continuous_quad_hs.h @@ -19,8 +19,8 @@ // float xe_point_vertex_diameter_min;// Offset: 140 Size: 4 [unused] // float3 xe_ndc_offset; // Offset: 144 Size: 12 [unused] // float xe_point_vertex_diameter_max;// Offset: 156 Size: 4 [unused] -// float2 xe_point_constant_radius; // Offset: 160 Size: 8 [unused] -// float2 xe_point_screen_to_ndc; // Offset: 168 Size: 8 [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] @@ -121,21 +121,21 @@ ret const BYTE continuous_quad_hs[] = { - 68, 88, 66, 67, 41, 61, - 68, 236, 233, 38, 162, 138, - 209, 48, 160, 247, 155, 238, - 65, 82, 1, 0, 0, 0, - 12, 14, 0, 0, 6, 0, + 68, 88, 66, 67, 56, 101, + 228, 239, 192, 85, 186, 185, + 211, 32, 109, 84, 115, 240, + 153, 130, 1, 0, 0, 0, + 28, 14, 0, 0, 6, 0, 0, 0, 56, 0, 0, 0, - 216, 10, 0, 0, 12, 11, - 0, 0, 64, 11, 0, 0, - 4, 12, 0, 0, 112, 13, + 232, 10, 0, 0, 28, 11, + 0, 0, 80, 11, 0, 0, + 20, 12, 0, 0, 128, 13, 0, 0, 82, 68, 69, 70, - 152, 10, 0, 0, 1, 0, + 168, 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, 110, 10, + 0, 5, 0, 0, 126, 10, 0, 0, 19, 19, 68, 37, 60, 0, 0, 0, 24, 0, 0, 0, 40, 0, 0, 0, @@ -235,137 +235,137 @@ const BYTE continuous_quad_hs[] = 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 156, 7, + 0, 0, 0, 0, 158, 7, 0, 0, 168, 0, 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, 179, 7, 0, 0, + 0, 0, 197, 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, - 212, 7, 0, 0, 180, 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, 228, 7, + 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, 249, 7, 0, 0, + 0, 0, 11, 8, 0, 0, 192, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, - 28, 8, 0, 0, 0, 0, + 44, 8, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, - 64, 8, 0, 0, 224, 0, + 80, 8, 0, 0, 224, 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, 85, 8, + 0, 0, 0, 0, 101, 8, 0, 0, 228, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 52, 7, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, - 0, 0, 109, 8, 0, 0, + 0, 0, 125, 8, 0, 0, 232, 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, - 126, 8, 0, 0, 236, 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, 166, 8, + 0, 0, 0, 0, 182, 8, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 0, 0, - 0, 0, 184, 8, 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, 220, 8, 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, - 247, 8, 0, 0, 8, 1, + 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, 17, 9, + 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, 51, 9, 0, 0, + 0, 0, 67, 9, 0, 0, 32, 1, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, - 68, 9, 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, - 104, 9, 0, 0, 64, 1, + 120, 9, 0, 0, 64, 1, 0, 0, 16, 0, 0, 0, - 0, 0, 0, 0, 136, 9, + 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, 172, 9, + 0, 0, 0, 0, 188, 9, 0, 0, 80, 1, 0, 0, 16, 0, 0, 0, 0, 0, - 0, 0, 136, 9, 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, 197, 9, 0, 0, + 0, 0, 213, 9, 0, 0, 96, 1, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, - 216, 9, 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, - 252, 9, 0, 0, 160, 1, + 12, 10, 0, 0, 160, 1, 0, 0, 32, 0, 0, 0, - 0, 0, 0, 0, 20, 10, + 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, 56, 10, + 0, 0, 0, 0, 72, 10, 0, 0, 192, 1, 0, 0, 16, 0, 0, 0, 0, 0, - 0, 0, 136, 9, 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, 86, 10, 0, 0, + 0, 0, 102, 10, 0, 0, 208, 1, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, - 184, 8, 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, @@ -455,11 +455,14 @@ const BYTE continuous_quad_hs[] = 0, 120, 101, 95, 112, 111, 105, 110, 116, 95, 99, 111, 110, 115, 116, 97, 110, 116, - 95, 114, 97, 100, 105, 117, - 115, 0, 120, 101, 95, 112, - 111, 105, 110, 116, 95, 115, - 99, 114, 101, 101, 110, 95, - 116, 111, 95, 110, 100, 99, + 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, @@ -477,230 +480,230 @@ const BYTE continuous_quad_hs[] = 105, 122, 122, 108, 101, 100, 95, 115, 105, 103, 110, 115, 0, 117, 105, 110, 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, - 19, 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, - 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, 19, 8, 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, 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, 19, 8, + 0, 0, 0, 0, 172, 6, 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, + 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, 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, - 19, 8, 0, 0, 120, 101, + 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, 44, 0, 0, 0, - 1, 0, 0, 0, 8, 0, - 0, 0, 32, 0, 0, 0, + 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, 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, + 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, 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, 14, 0, 0, + 0, 0, 1, 1, 0, 0, 88, 69, 86, 69, 82, 84, 69, 88, 73, 68, 0, 171, - 80, 67, 83, 71, 188, 0, - 0, 0, 6, 0, 0, 0, - 8, 0, 0, 0, 152, 0, - 0, 0, 0, 0, 0, 0, - 11, 0, 0, 0, 3, 0, - 0, 0, 0, 0, 0, 0, - 1, 14, 0, 0, 152, 0, + 79, 83, 71, 78, 44, 0, 0, 0, 1, 0, 0, 0, - 11, 0, 0, 0, 3, 0, - 0, 0, 1, 0, 0, 0, - 1, 14, 0, 0, 152, 0, - 0, 0, 2, 0, 0, 0, - 11, 0, 0, 0, 3, 0, - 0, 0, 2, 0, 0, 0, - 1, 14, 0, 0, 152, 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, + 86, 69, 82, 84, 69, 88, + 73, 68, 0, 171, 80, 67, + 83, 71, 188, 0, 0, 0, + 6, 0, 0, 0, 8, 0, + 0, 0, 152, 0, 0, 0, + 0, 0, 0, 0, 11, 0, 0, 0, 3, 0, 0, 0, - 11, 0, 0, 0, 3, 0, + 0, 0, 0, 0, 1, 14, + 0, 0, 152, 0, 0, 0, + 1, 0, 0, 0, 11, 0, 0, 0, 3, 0, 0, 0, - 1, 14, 0, 0, 166, 0, - 0, 0, 0, 0, 0, 0, - 12, 0, 0, 0, 3, 0, - 0, 0, 4, 0, 0, 0, - 1, 14, 0, 0, 166, 0, - 0, 0, 1, 0, 0, 0, - 12, 0, 0, 0, 3, 0, - 0, 0, 5, 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, 97, 99, 116, 111, - 114, 0, 171, 171, 83, 72, - 69, 88, 100, 1, 0, 0, - 81, 0, 3, 0, 89, 0, - 0, 0, 113, 0, 0, 1, - 147, 32, 0, 1, 148, 32, - 0, 1, 149, 24, 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, 1, 0, 0, 0, - 0, 0, 0, 0, 115, 0, - 0, 1, 153, 0, 0, 2, - 4, 0, 0, 0, 95, 0, - 0, 2, 0, 112, 1, 0, - 103, 0, 0, 4, 18, 32, - 16, 0, 0, 0, 0, 0, - 11, 0, 0, 0, 103, 0, - 0, 4, 18, 32, 16, 0, + 1, 0, 0, 0, 1, 14, + 0, 0, 152, 0, 0, 0, + 2, 0, 0, 0, 11, 0, + 0, 0, 3, 0, 0, 0, + 2, 0, 0, 0, 1, 14, + 0, 0, 152, 0, 0, 0, + 3, 0, 0, 0, 11, 0, + 0, 0, 3, 0, 0, 0, + 3, 0, 0, 0, 1, 14, + 0, 0, 166, 0, 0, 0, + 0, 0, 0, 0, 12, 0, + 0, 0, 3, 0, 0, 0, + 4, 0, 0, 0, 1, 14, + 0, 0, 166, 0, 0, 0, 1, 0, 0, 0, 12, 0, - 0, 0, 103, 0, 0, 4, - 18, 32, 16, 0, 2, 0, - 0, 0, 13, 0, 0, 0, - 103, 0, 0, 4, 18, 32, - 16, 0, 3, 0, 0, 0, - 14, 0, 0, 0, 104, 0, - 0, 2, 1, 0, 0, 0, - 91, 0, 0, 4, 18, 32, - 16, 0, 0, 0, 0, 0, - 4, 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, 3, 0, 0, 0, + 5, 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, + 97, 99, 116, 111, 114, 0, + 171, 171, 83, 72, 69, 88, + 100, 1, 0, 0, 81, 0, + 3, 0, 89, 0, 0, 0, + 113, 0, 0, 1, 147, 32, + 0, 1, 148, 32, 0, 1, + 149, 24, 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, 62, 0, - 0, 1, 115, 0, 0, 1, - 153, 0, 0, 2, 2, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 115, 0, 0, 1, + 153, 0, 0, 2, 4, 0, 0, 0, 95, 0, 0, 2, 0, 112, 1, 0, 103, 0, 0, 4, 18, 32, 16, 0, - 4, 0, 0, 0, 15, 0, + 0, 0, 0, 0, 11, 0, 0, 0, 103, 0, 0, 4, - 18, 32, 16, 0, 5, 0, - 0, 0, 16, 0, 0, 0, - 104, 0, 0, 2, 1, 0, - 0, 0, 91, 0, 0, 4, + 18, 32, 16, 0, 1, 0, + 0, 0, 12, 0, 0, 0, + 103, 0, 0, 4, 18, 32, + 16, 0, 2, 0, 0, 0, + 13, 0, 0, 0, 103, 0, + 0, 4, 18, 32, 16, 0, + 3, 0, 0, 0, 14, 0, + 0, 0, 104, 0, 0, 2, + 1, 0, 0, 0, 91, 0, + 0, 4, 18, 32, 16, 0, + 0, 0, 0, 0, 4, 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, 153, 0, + 0, 2, 2, 0, 0, 0, + 95, 0, 0, 2, 0, 112, + 1, 0, 103, 0, 0, 4, 18, 32, 16, 0, 4, 0, - 0, 0, 2, 0, 0, 0, - 54, 0, 0, 4, 18, 0, - 16, 0, 0, 0, 0, 0, - 10, 112, 1, 0, 54, 0, - 0, 9, 18, 32, 208, 0, - 4, 0, 0, 0, 10, 0, - 16, 0, 0, 0, 0, 0, - 42, 128, 48, 0, 0, 0, + 0, 0, 15, 0, 0, 0, + 103, 0, 0, 4, 18, 32, + 16, 0, 5, 0, 0, 0, + 16, 0, 0, 0, 104, 0, + 0, 2, 1, 0, 0, 0, + 91, 0, 0, 4, 18, 32, + 16, 0, 4, 0, 0, 0, + 2, 0, 0, 0, 54, 0, + 0, 4, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 112, + 1, 0, 54, 0, 0, 9, + 18, 32, 208, 0, 4, 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, 0, 0, 62, 0, - 0, 1, 83, 84, 65, 84, - 148, 0, 0, 0, 6, 0, - 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 5, 0, + 0, 0, 62, 0, 0, 1, + 83, 84, 65, 84, 148, 0, + 0, 0, 6, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, @@ -708,17 +711,16 @@ const BYTE continuous_quad_hs[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 11, 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, 4, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 11, 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, 4, 0, + 3, 0, 0, 0, 4, 0, 0, 0, 3, 0, 0, 0, - 4, 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 }; diff --git a/src/xenia/gpu/shaders/bytecode/d3d12_5_1/continuous_triangle_hs.h b/src/xenia/gpu/shaders/bytecode/d3d12_5_1/continuous_triangle_hs.h index a77c56ffc..bf8d8ac4b 100644 --- a/src/xenia/gpu/shaders/bytecode/d3d12_5_1/continuous_triangle_hs.h +++ b/src/xenia/gpu/shaders/bytecode/d3d12_5_1/continuous_triangle_hs.h @@ -19,8 +19,8 @@ // float xe_point_vertex_diameter_min;// Offset: 140 Size: 4 [unused] // float3 xe_ndc_offset; // Offset: 144 Size: 12 [unused] // float xe_point_vertex_diameter_max;// Offset: 156 Size: 4 [unused] -// float2 xe_point_constant_radius; // Offset: 160 Size: 8 [unused] -// float2 xe_point_screen_to_ndc; // Offset: 168 Size: 8 [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] @@ -112,21 +112,21 @@ ret const BYTE continuous_triangle_hs[] = { - 68, 88, 66, 67, 186, 50, - 224, 20, 247, 162, 237, 207, - 151, 21, 132, 253, 255, 73, - 27, 33, 1, 0, 0, 0, - 124, 13, 0, 0, 6, 0, + 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, 0, 0, 56, 0, 0, 0, - 216, 10, 0, 0, 12, 11, - 0, 0, 64, 11, 0, 0, - 212, 11, 0, 0, 224, 12, + 232, 10, 0, 0, 28, 11, + 0, 0, 80, 11, 0, 0, + 228, 11, 0, 0, 240, 12, 0, 0, 82, 68, 69, 70, - 152, 10, 0, 0, 1, 0, + 168, 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, 110, 10, + 0, 5, 0, 0, 126, 10, 0, 0, 19, 19, 68, 37, 60, 0, 0, 0, 24, 0, 0, 0, 40, 0, 0, 0, @@ -226,137 +226,137 @@ const BYTE continuous_triangle_hs[] = 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 156, 7, + 0, 0, 0, 0, 158, 7, 0, 0, 168, 0, 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, 179, 7, 0, 0, + 0, 0, 197, 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, - 212, 7, 0, 0, 180, 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, 228, 7, + 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, 249, 7, 0, 0, + 0, 0, 11, 8, 0, 0, 192, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, - 28, 8, 0, 0, 0, 0, + 44, 8, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, - 64, 8, 0, 0, 224, 0, + 80, 8, 0, 0, 224, 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, 85, 8, + 0, 0, 0, 0, 101, 8, 0, 0, 228, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 52, 7, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, - 0, 0, 109, 8, 0, 0, + 0, 0, 125, 8, 0, 0, 232, 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, - 126, 8, 0, 0, 236, 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, 166, 8, + 0, 0, 0, 0, 182, 8, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 0, 0, - 0, 0, 184, 8, 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, 220, 8, 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, - 247, 8, 0, 0, 8, 1, + 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, 17, 9, + 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, 51, 9, 0, 0, + 0, 0, 67, 9, 0, 0, 32, 1, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, - 68, 9, 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, - 104, 9, 0, 0, 64, 1, + 120, 9, 0, 0, 64, 1, 0, 0, 16, 0, 0, 0, - 0, 0, 0, 0, 136, 9, + 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, 172, 9, + 0, 0, 0, 0, 188, 9, 0, 0, 80, 1, 0, 0, 16, 0, 0, 0, 0, 0, - 0, 0, 136, 9, 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, 197, 9, 0, 0, + 0, 0, 213, 9, 0, 0, 96, 1, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, - 216, 9, 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, - 252, 9, 0, 0, 160, 1, + 12, 10, 0, 0, 160, 1, 0, 0, 32, 0, 0, 0, - 0, 0, 0, 0, 20, 10, + 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, 56, 10, + 0, 0, 0, 0, 72, 10, 0, 0, 192, 1, 0, 0, 16, 0, 0, 0, 0, 0, - 0, 0, 136, 9, 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, 86, 10, 0, 0, + 0, 0, 102, 10, 0, 0, 208, 1, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, - 184, 8, 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, @@ -446,11 +446,14 @@ const BYTE continuous_triangle_hs[] = 0, 120, 101, 95, 112, 111, 105, 110, 116, 95, 99, 111, 110, 115, 116, 97, 110, 116, - 95, 114, 97, 100, 105, 117, - 115, 0, 120, 101, 95, 112, - 111, 105, 110, 116, 95, 115, - 99, 114, 101, 101, 110, 95, - 116, 111, 95, 110, 100, 99, + 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, @@ -468,224 +471,223 @@ const BYTE continuous_triangle_hs[] = 105, 122, 122, 108, 101, 100, 95, 115, 105, 103, 110, 115, 0, 117, 105, 110, 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, - 19, 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, - 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, 19, 8, 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, 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, 19, 8, + 0, 0, 0, 0, 172, 6, 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, + 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, 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, - 19, 8, 0, 0, 120, 101, + 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, 44, 0, 0, 0, - 1, 0, 0, 0, 8, 0, - 0, 0, 32, 0, 0, 0, + 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, 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, + 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, 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, 14, 0, 0, + 0, 0, 1, 1, 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, 0, 0, 3, 0, - 0, 0, 0, 0, 0, 0, - 1, 14, 0, 0, 104, 0, + 79, 83, 71, 78, 44, 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, + 8, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, - 14, 0, 0, 0, 3, 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, 0, 0, 3, 0, 0, 0, - 1, 14, 0, 0, 83, 86, - 95, 84, 101, 115, 115, 70, + 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, 97, 99, 116, 111, 114, 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, + 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, 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, 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, - 1, 0, 0, 0, 18, 0, + 0, 0, 0, 0, 17, 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, + 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, - 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, 83, 84, 65, 84, - 148, 0, 0, 0, 5, 0, - 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 4, 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, 0, 0, 0, 0, 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, 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, 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, - 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, - 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 }; diff --git a/src/xenia/gpu/shaders/bytecode/d3d12_5_1/discrete_quad_hs.h b/src/xenia/gpu/shaders/bytecode/d3d12_5_1/discrete_quad_hs.h index 4a5b81c9c..dfc49e9d2 100644 --- a/src/xenia/gpu/shaders/bytecode/d3d12_5_1/discrete_quad_hs.h +++ b/src/xenia/gpu/shaders/bytecode/d3d12_5_1/discrete_quad_hs.h @@ -19,8 +19,8 @@ // float xe_point_vertex_diameter_min;// Offset: 140 Size: 4 [unused] // float3 xe_ndc_offset; // Offset: 144 Size: 12 [unused] // float xe_point_vertex_diameter_max;// Offset: 156 Size: 4 [unused] -// float2 xe_point_constant_radius; // Offset: 160 Size: 8 [unused] -// float2 xe_point_screen_to_ndc; // Offset: 168 Size: 8 [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] @@ -121,21 +121,21 @@ ret const BYTE discrete_quad_hs[] = { - 68, 88, 66, 67, 228, 206, - 50, 86, 18, 2, 56, 90, - 135, 194, 252, 60, 37, 181, - 95, 80, 1, 0, 0, 0, - 12, 14, 0, 0, 6, 0, + 68, 88, 66, 67, 12, 3, + 52, 62, 60, 171, 174, 248, + 249, 81, 162, 162, 255, 59, + 137, 143, 1, 0, 0, 0, + 28, 14, 0, 0, 6, 0, 0, 0, 56, 0, 0, 0, - 216, 10, 0, 0, 12, 11, - 0, 0, 64, 11, 0, 0, - 4, 12, 0, 0, 112, 13, + 232, 10, 0, 0, 28, 11, + 0, 0, 80, 11, 0, 0, + 20, 12, 0, 0, 128, 13, 0, 0, 82, 68, 69, 70, - 152, 10, 0, 0, 1, 0, + 168, 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, 110, 10, + 0, 5, 0, 0, 126, 10, 0, 0, 19, 19, 68, 37, 60, 0, 0, 0, 24, 0, 0, 0, 40, 0, 0, 0, @@ -235,137 +235,137 @@ const BYTE discrete_quad_hs[] = 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 156, 7, + 0, 0, 0, 0, 158, 7, 0, 0, 168, 0, 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, 179, 7, 0, 0, + 0, 0, 197, 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, - 212, 7, 0, 0, 180, 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, 228, 7, + 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, 249, 7, 0, 0, + 0, 0, 11, 8, 0, 0, 192, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, - 28, 8, 0, 0, 0, 0, + 44, 8, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, - 64, 8, 0, 0, 224, 0, + 80, 8, 0, 0, 224, 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, 85, 8, + 0, 0, 0, 0, 101, 8, 0, 0, 228, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 52, 7, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, - 0, 0, 109, 8, 0, 0, + 0, 0, 125, 8, 0, 0, 232, 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, - 126, 8, 0, 0, 236, 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, 166, 8, + 0, 0, 0, 0, 182, 8, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 0, 0, - 0, 0, 184, 8, 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, 220, 8, 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, - 247, 8, 0, 0, 8, 1, + 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, 17, 9, + 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, 51, 9, 0, 0, + 0, 0, 67, 9, 0, 0, 32, 1, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, - 68, 9, 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, - 104, 9, 0, 0, 64, 1, + 120, 9, 0, 0, 64, 1, 0, 0, 16, 0, 0, 0, - 0, 0, 0, 0, 136, 9, + 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, 172, 9, + 0, 0, 0, 0, 188, 9, 0, 0, 80, 1, 0, 0, 16, 0, 0, 0, 0, 0, - 0, 0, 136, 9, 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, 197, 9, 0, 0, + 0, 0, 213, 9, 0, 0, 96, 1, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, - 216, 9, 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, - 252, 9, 0, 0, 160, 1, + 12, 10, 0, 0, 160, 1, 0, 0, 32, 0, 0, 0, - 0, 0, 0, 0, 20, 10, + 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, 56, 10, + 0, 0, 0, 0, 72, 10, 0, 0, 192, 1, 0, 0, 16, 0, 0, 0, 0, 0, - 0, 0, 136, 9, 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, 86, 10, 0, 0, + 0, 0, 102, 10, 0, 0, 208, 1, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, - 184, 8, 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, @@ -455,11 +455,14 @@ const BYTE discrete_quad_hs[] = 0, 120, 101, 95, 112, 111, 105, 110, 116, 95, 99, 111, 110, 115, 116, 97, 110, 116, - 95, 114, 97, 100, 105, 117, - 115, 0, 120, 101, 95, 112, - 111, 105, 110, 116, 95, 115, - 99, 114, 101, 101, 110, 95, - 116, 111, 95, 110, 100, 99, + 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, @@ -477,230 +480,230 @@ const BYTE discrete_quad_hs[] = 105, 122, 122, 108, 101, 100, 95, 115, 105, 103, 110, 115, 0, 117, 105, 110, 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, - 19, 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, - 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, 19, 8, 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, 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, 19, 8, + 0, 0, 0, 0, 172, 6, 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, + 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, 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, - 19, 8, 0, 0, 120, 101, + 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, 44, 0, 0, 0, - 1, 0, 0, 0, 8, 0, - 0, 0, 32, 0, 0, 0, + 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, 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, + 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, 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, 14, 0, 0, + 0, 0, 1, 1, 0, 0, 88, 69, 86, 69, 82, 84, 69, 88, 73, 68, 0, 171, - 80, 67, 83, 71, 188, 0, - 0, 0, 6, 0, 0, 0, - 8, 0, 0, 0, 152, 0, - 0, 0, 0, 0, 0, 0, - 11, 0, 0, 0, 3, 0, - 0, 0, 0, 0, 0, 0, - 1, 14, 0, 0, 152, 0, + 79, 83, 71, 78, 44, 0, 0, 0, 1, 0, 0, 0, - 11, 0, 0, 0, 3, 0, - 0, 0, 1, 0, 0, 0, - 1, 14, 0, 0, 152, 0, - 0, 0, 2, 0, 0, 0, - 11, 0, 0, 0, 3, 0, - 0, 0, 2, 0, 0, 0, - 1, 14, 0, 0, 152, 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, + 86, 69, 82, 84, 69, 88, + 73, 68, 0, 171, 80, 67, + 83, 71, 188, 0, 0, 0, + 6, 0, 0, 0, 8, 0, + 0, 0, 152, 0, 0, 0, + 0, 0, 0, 0, 11, 0, 0, 0, 3, 0, 0, 0, - 11, 0, 0, 0, 3, 0, + 0, 0, 0, 0, 1, 14, + 0, 0, 152, 0, 0, 0, + 1, 0, 0, 0, 11, 0, 0, 0, 3, 0, 0, 0, - 1, 14, 0, 0, 166, 0, - 0, 0, 0, 0, 0, 0, - 12, 0, 0, 0, 3, 0, - 0, 0, 4, 0, 0, 0, - 1, 14, 0, 0, 166, 0, - 0, 0, 1, 0, 0, 0, - 12, 0, 0, 0, 3, 0, - 0, 0, 5, 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, 97, 99, 116, 111, - 114, 0, 171, 171, 83, 72, - 69, 88, 100, 1, 0, 0, - 81, 0, 3, 0, 89, 0, - 0, 0, 113, 0, 0, 1, - 147, 32, 0, 1, 148, 32, - 0, 1, 149, 24, 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, 1, 0, 0, 0, - 0, 0, 0, 0, 115, 0, - 0, 1, 153, 0, 0, 2, - 4, 0, 0, 0, 95, 0, - 0, 2, 0, 112, 1, 0, - 103, 0, 0, 4, 18, 32, - 16, 0, 0, 0, 0, 0, - 11, 0, 0, 0, 103, 0, - 0, 4, 18, 32, 16, 0, + 1, 0, 0, 0, 1, 14, + 0, 0, 152, 0, 0, 0, + 2, 0, 0, 0, 11, 0, + 0, 0, 3, 0, 0, 0, + 2, 0, 0, 0, 1, 14, + 0, 0, 152, 0, 0, 0, + 3, 0, 0, 0, 11, 0, + 0, 0, 3, 0, 0, 0, + 3, 0, 0, 0, 1, 14, + 0, 0, 166, 0, 0, 0, + 0, 0, 0, 0, 12, 0, + 0, 0, 3, 0, 0, 0, + 4, 0, 0, 0, 1, 14, + 0, 0, 166, 0, 0, 0, 1, 0, 0, 0, 12, 0, - 0, 0, 103, 0, 0, 4, - 18, 32, 16, 0, 2, 0, - 0, 0, 13, 0, 0, 0, - 103, 0, 0, 4, 18, 32, - 16, 0, 3, 0, 0, 0, - 14, 0, 0, 0, 104, 0, - 0, 2, 1, 0, 0, 0, - 91, 0, 0, 4, 18, 32, - 16, 0, 0, 0, 0, 0, - 4, 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, 3, 0, 0, 0, + 5, 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, + 97, 99, 116, 111, 114, 0, + 171, 171, 83, 72, 69, 88, + 100, 1, 0, 0, 81, 0, + 3, 0, 89, 0, 0, 0, + 113, 0, 0, 1, 147, 32, + 0, 1, 148, 32, 0, 1, + 149, 24, 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, 62, 0, - 0, 1, 115, 0, 0, 1, - 153, 0, 0, 2, 2, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 115, 0, 0, 1, + 153, 0, 0, 2, 4, 0, 0, 0, 95, 0, 0, 2, 0, 112, 1, 0, 103, 0, 0, 4, 18, 32, 16, 0, - 4, 0, 0, 0, 15, 0, + 0, 0, 0, 0, 11, 0, 0, 0, 103, 0, 0, 4, - 18, 32, 16, 0, 5, 0, - 0, 0, 16, 0, 0, 0, - 104, 0, 0, 2, 1, 0, - 0, 0, 91, 0, 0, 4, + 18, 32, 16, 0, 1, 0, + 0, 0, 12, 0, 0, 0, + 103, 0, 0, 4, 18, 32, + 16, 0, 2, 0, 0, 0, + 13, 0, 0, 0, 103, 0, + 0, 4, 18, 32, 16, 0, + 3, 0, 0, 0, 14, 0, + 0, 0, 104, 0, 0, 2, + 1, 0, 0, 0, 91, 0, + 0, 4, 18, 32, 16, 0, + 0, 0, 0, 0, 4, 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, 153, 0, + 0, 2, 2, 0, 0, 0, + 95, 0, 0, 2, 0, 112, + 1, 0, 103, 0, 0, 4, 18, 32, 16, 0, 4, 0, - 0, 0, 2, 0, 0, 0, - 54, 0, 0, 4, 18, 0, - 16, 0, 0, 0, 0, 0, - 10, 112, 1, 0, 54, 0, - 0, 9, 18, 32, 208, 0, - 4, 0, 0, 0, 10, 0, - 16, 0, 0, 0, 0, 0, - 42, 128, 48, 0, 0, 0, + 0, 0, 15, 0, 0, 0, + 103, 0, 0, 4, 18, 32, + 16, 0, 5, 0, 0, 0, + 16, 0, 0, 0, 104, 0, + 0, 2, 1, 0, 0, 0, + 91, 0, 0, 4, 18, 32, + 16, 0, 4, 0, 0, 0, + 2, 0, 0, 0, 54, 0, + 0, 4, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 112, + 1, 0, 54, 0, 0, 9, + 18, 32, 208, 0, 4, 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, 0, 0, 62, 0, - 0, 1, 83, 84, 65, 84, - 148, 0, 0, 0, 6, 0, - 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 5, 0, + 0, 0, 62, 0, 0, 1, + 83, 84, 65, 84, 148, 0, + 0, 0, 6, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, @@ -708,17 +711,16 @@ const BYTE discrete_quad_hs[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 11, 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, 4, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 11, 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, 4, 0, + 3, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, - 1, 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 }; diff --git a/src/xenia/gpu/shaders/bytecode/d3d12_5_1/discrete_triangle_hs.h b/src/xenia/gpu/shaders/bytecode/d3d12_5_1/discrete_triangle_hs.h index 39b97f602..a386d836a 100644 --- a/src/xenia/gpu/shaders/bytecode/d3d12_5_1/discrete_triangle_hs.h +++ b/src/xenia/gpu/shaders/bytecode/d3d12_5_1/discrete_triangle_hs.h @@ -19,8 +19,8 @@ // float xe_point_vertex_diameter_min;// Offset: 140 Size: 4 [unused] // float3 xe_ndc_offset; // Offset: 144 Size: 12 [unused] // float xe_point_vertex_diameter_max;// Offset: 156 Size: 4 [unused] -// float2 xe_point_constant_radius; // Offset: 160 Size: 8 [unused] -// float2 xe_point_screen_to_ndc; // Offset: 168 Size: 8 [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] @@ -112,21 +112,21 @@ ret const BYTE discrete_triangle_hs[] = { - 68, 88, 66, 67, 148, 187, - 8, 94, 203, 120, 121, 120, - 126, 74, 170, 83, 209, 21, - 43, 73, 1, 0, 0, 0, - 124, 13, 0, 0, 6, 0, + 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, 0, 0, 56, 0, 0, 0, - 216, 10, 0, 0, 12, 11, - 0, 0, 64, 11, 0, 0, - 212, 11, 0, 0, 224, 12, + 232, 10, 0, 0, 28, 11, + 0, 0, 80, 11, 0, 0, + 228, 11, 0, 0, 240, 12, 0, 0, 82, 68, 69, 70, - 152, 10, 0, 0, 1, 0, + 168, 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, 110, 10, + 0, 5, 0, 0, 126, 10, 0, 0, 19, 19, 68, 37, 60, 0, 0, 0, 24, 0, 0, 0, 40, 0, 0, 0, @@ -226,137 +226,137 @@ const BYTE discrete_triangle_hs[] = 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 156, 7, + 0, 0, 0, 0, 158, 7, 0, 0, 168, 0, 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, 179, 7, 0, 0, + 0, 0, 197, 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, - 212, 7, 0, 0, 180, 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, 228, 7, + 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, 249, 7, 0, 0, + 0, 0, 11, 8, 0, 0, 192, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, - 28, 8, 0, 0, 0, 0, + 44, 8, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, - 64, 8, 0, 0, 224, 0, + 80, 8, 0, 0, 224, 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, 85, 8, + 0, 0, 0, 0, 101, 8, 0, 0, 228, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 52, 7, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, - 0, 0, 109, 8, 0, 0, + 0, 0, 125, 8, 0, 0, 232, 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, - 126, 8, 0, 0, 236, 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, 166, 8, + 0, 0, 0, 0, 182, 8, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 0, 0, - 0, 0, 184, 8, 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, 220, 8, 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, - 247, 8, 0, 0, 8, 1, + 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, 17, 9, + 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, 51, 9, 0, 0, + 0, 0, 67, 9, 0, 0, 32, 1, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, - 68, 9, 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, - 104, 9, 0, 0, 64, 1, + 120, 9, 0, 0, 64, 1, 0, 0, 16, 0, 0, 0, - 0, 0, 0, 0, 136, 9, + 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, 172, 9, + 0, 0, 0, 0, 188, 9, 0, 0, 80, 1, 0, 0, 16, 0, 0, 0, 0, 0, - 0, 0, 136, 9, 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, 197, 9, 0, 0, + 0, 0, 213, 9, 0, 0, 96, 1, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, - 216, 9, 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, - 252, 9, 0, 0, 160, 1, + 12, 10, 0, 0, 160, 1, 0, 0, 32, 0, 0, 0, - 0, 0, 0, 0, 20, 10, + 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, 56, 10, + 0, 0, 0, 0, 72, 10, 0, 0, 192, 1, 0, 0, 16, 0, 0, 0, 0, 0, - 0, 0, 136, 9, 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, 86, 10, 0, 0, + 0, 0, 102, 10, 0, 0, 208, 1, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, - 184, 8, 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, @@ -446,11 +446,14 @@ const BYTE discrete_triangle_hs[] = 0, 120, 101, 95, 112, 111, 105, 110, 116, 95, 99, 111, 110, 115, 116, 97, 110, 116, - 95, 114, 97, 100, 105, 117, - 115, 0, 120, 101, 95, 112, - 111, 105, 110, 116, 95, 115, - 99, 114, 101, 101, 110, 95, - 116, 111, 95, 110, 100, 99, + 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, @@ -468,224 +471,223 @@ const BYTE discrete_triangle_hs[] = 105, 122, 122, 108, 101, 100, 95, 115, 105, 103, 110, 115, 0, 117, 105, 110, 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, - 19, 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, - 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, 19, 8, 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, 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, 19, 8, + 0, 0, 0, 0, 172, 6, 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, + 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, 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, - 19, 8, 0, 0, 120, 101, + 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, 44, 0, 0, 0, - 1, 0, 0, 0, 8, 0, - 0, 0, 32, 0, 0, 0, + 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, 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, + 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, 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, 14, 0, 0, + 0, 0, 1, 1, 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, 0, 0, 3, 0, - 0, 0, 0, 0, 0, 0, - 1, 14, 0, 0, 104, 0, + 79, 83, 71, 78, 44, 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, + 8, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, - 14, 0, 0, 0, 3, 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, 0, 0, 3, 0, 0, 0, - 1, 14, 0, 0, 83, 86, - 95, 84, 101, 115, 115, 70, + 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, 97, 99, 116, 111, 114, 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, + 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, 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, 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, - 1, 0, 0, 0, 18, 0, + 0, 0, 0, 0, 17, 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, + 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, - 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, 83, 84, 65, 84, - 148, 0, 0, 0, 5, 0, - 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 4, 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, 0, 0, 0, 0, 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, 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, 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, - 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, - 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 }; diff --git a/src/xenia/gpu/shaders/bytecode/d3d12_5_1/primitive_point_list_gs.h b/src/xenia/gpu/shaders/bytecode/d3d12_5_1/primitive_point_list_gs.h deleted file mode 100644 index acbcce87d..000000000 --- a/src/xenia/gpu/shaders/bytecode/d3d12_5_1/primitive_point_list_gs.h +++ /dev/null @@ -1,1549 +0,0 @@ -#if 0 -// -// Generated by Microsoft (R) HLSL Shader Compiler 10.1 -// -// -// Buffer Definitions: -// -// cbuffer xe_system_cbuffer -// { -// -// uint xe_flags; // Offset: 0 Size: 4 [unused] -// float2 xe_tessellation_factor_range;// Offset: 4 Size: 8 [unused] -// uint xe_line_loop_closing_index; // Offset: 12 Size: 4 [unused] -// uint xe_vertex_index_endian; // Offset: 16 Size: 4 [unused] -// uint xe_vertex_index_offset; // Offset: 20 Size: 4 [unused] -// uint2 xe_vertex_index_min_max; // Offset: 24 Size: 8 [unused] -// float4 xe_user_clip_planes[6]; // Offset: 32 Size: 96 [unused] -// float3 xe_ndc_scale; // Offset: 128 Size: 12 [unused] -// float xe_point_vertex_diameter_min;// Offset: 140 Size: 4 [unused] -// float3 xe_ndc_offset; // Offset: 144 Size: 12 [unused] -// float xe_point_vertex_diameter_max;// Offset: 156 Size: 4 [unused] -// float2 xe_point_constant_radius; // Offset: 160 Size: 8 -// float2 xe_point_screen_to_ndc; // Offset: 168 Size: 8 -// 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] -// 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] -// -// } -// -// -// Resource Bindings: -// -// Name Type Format Dim ID HLSL Bind Count -// ------------------------------ ---------- ------- ----------- ------- -------------- ------ -// xe_system_cbuffer cbuffer NA NA CB0 cb0 1 -// -// -// -// Input signature: -// -// Name Index Mask Register SysValue Format Used -// -------------------- ----- ------ -------- -------- ------- ------ -// TEXCOORD 0 xyzw 0 NONE float xyzw -// TEXCOORD 1 xyzw 1 NONE float xyzw -// TEXCOORD 2 xyzw 2 NONE float xyzw -// TEXCOORD 3 xyzw 3 NONE float xyzw -// TEXCOORD 4 xyzw 4 NONE float xyzw -// TEXCOORD 5 xyzw 5 NONE float xyzw -// TEXCOORD 6 xyzw 6 NONE float xyzw -// TEXCOORD 7 xyzw 7 NONE float xyzw -// TEXCOORD 8 xyzw 8 NONE float xyzw -// TEXCOORD 9 xyzw 9 NONE float xyzw -// TEXCOORD 10 xyzw 10 NONE float xyzw -// TEXCOORD 11 xyzw 11 NONE float xyzw -// TEXCOORD 12 xyzw 12 NONE float xyzw -// TEXCOORD 13 xyzw 13 NONE float xyzw -// TEXCOORD 14 xyzw 14 NONE float xyzw -// TEXCOORD 15 xyzw 15 NONE float xyzw -// TEXCOORD 16 xyz 16 NONE float z -// SV_Position 0 xyzw 17 POS float xyzw -// SV_ClipDistance 0 xyzw 18 CLIPDST float xyzw -// SV_ClipDistance 1 xy 19 CLIPDST float xy -// SV_CullDistance 0 z 19 CULLDST float z -// -// -// Output signature: -// -// Name Index Mask Register SysValue Format Used -// -------------------- ----- ------ -------- -------- ------- ------ -// TEXCOORD 0 xyzw 0 NONE float xyzw -// TEXCOORD 1 xyzw 1 NONE float xyzw -// TEXCOORD 2 xyzw 2 NONE float xyzw -// TEXCOORD 3 xyzw 3 NONE float xyzw -// TEXCOORD 4 xyzw 4 NONE float xyzw -// TEXCOORD 5 xyzw 5 NONE float xyzw -// TEXCOORD 6 xyzw 6 NONE float xyzw -// TEXCOORD 7 xyzw 7 NONE float xyzw -// TEXCOORD 8 xyzw 8 NONE float xyzw -// TEXCOORD 9 xyzw 9 NONE float xyzw -// TEXCOORD 10 xyzw 10 NONE float xyzw -// TEXCOORD 11 xyzw 11 NONE float xyzw -// TEXCOORD 12 xyzw 12 NONE float xyzw -// TEXCOORD 13 xyzw 13 NONE float xyzw -// TEXCOORD 14 xyzw 14 NONE float xyzw -// TEXCOORD 15 xyzw 15 NONE float xyzw -// TEXCOORD 16 xyz 16 NONE float xyz -// SV_Position 0 xyzw 17 POS float xyzw -// SV_ClipDistance 0 xyzw 18 CLIPDST float xyzw -// SV_ClipDistance 1 xy 19 CLIPDST float xy -// -gs_5_1 -dcl_globalFlags refactoringAllowed -dcl_constantbuffer CB0[0:0][11], immediateIndexed, space=0 -dcl_input v[1][0].xyzw -dcl_input v[1][1].xyzw -dcl_input v[1][2].xyzw -dcl_input v[1][3].xyzw -dcl_input v[1][4].xyzw -dcl_input v[1][5].xyzw -dcl_input v[1][6].xyzw -dcl_input v[1][7].xyzw -dcl_input v[1][8].xyzw -dcl_input v[1][9].xyzw -dcl_input v[1][10].xyzw -dcl_input v[1][11].xyzw -dcl_input v[1][12].xyzw -dcl_input v[1][13].xyzw -dcl_input v[1][14].xyzw -dcl_input v[1][15].xyzw -dcl_input v[1][16].xyz -dcl_input_siv v[1][17].xyzw, position -dcl_input v[1][18].xyzw -dcl_input v[1][19].xy -dcl_input v[1][19].z -dcl_temps 3 -dcl_inputprimitive point -dcl_stream m0 -dcl_outputtopology trianglestrip -dcl_output o0.xyzw -dcl_output o1.xyzw -dcl_output o2.xyzw -dcl_output o3.xyzw -dcl_output o4.xyzw -dcl_output o5.xyzw -dcl_output o6.xyzw -dcl_output o7.xyzw -dcl_output o8.xyzw -dcl_output o9.xyzw -dcl_output o10.xyzw -dcl_output o11.xyzw -dcl_output o12.xyzw -dcl_output o13.xyzw -dcl_output o14.xyzw -dcl_output o15.xyzw -dcl_output o16.xyz -dcl_output_siv o17.xyzw, position -dcl_output_siv o18.xyzw, clip_distance -dcl_output_siv o19.xy, clip_distance -dcl_maxout 4 -lt [precise(x)] r0.x, v[0][19].z, l(0.000000) -ne [precise] r1.xyzw, v[0][17].xyzw, v[0][17].xyzw -or [precise(yz)] r0.yz, r1.zzwz, r1.xxyx -or [precise(y)] r0.y, r0.z, r0.y -or [precise(x)] r0.x, r0.y, r0.x -if_nz r0.x - ret -endif -ge [precise(x)] r0.x, v[0][16].z, l(0.000000) -if_nz r0.x - mul [precise(xy)] r0.xy, l(0.500000, 0.500000, 0.000000, 0.000000), v[0][16].zzzz -else - mov [precise(xy)] r0.xy, CB0[0][10].xyxx -endif -lt [precise(zw)] r0.zw, l(0.000000, 0.000000, 0.000000, 0.000000), r0.xxxy -and [precise(z)] r0.z, r0.w, r0.z -if_z r0.z - ret -endif -mul [precise(xy)] r0.xy, r0.xyxx, CB0[0][10].zwzz -mul [precise(xy)] r0.xy, r0.xyxx, v[0][17].wwww -mov [precise(xyz)] r1.xyz, -r0.xxyx -mov [precise(w)] r1.w, r0.y -add [precise] r2.xyzw, r1.xwyz, v[0][17].xyxy -mov o0.xyzw, v[0][0].xyzw -mov o1.xyzw, v[0][1].xyzw -mov o2.xyzw, v[0][2].xyzw -mov o3.xyzw, v[0][3].xyzw -mov o4.xyzw, v[0][4].xyzw -mov o5.xyzw, v[0][5].xyzw -mov o6.xyzw, v[0][6].xyzw -mov o7.xyzw, v[0][7].xyzw -mov o8.xyzw, v[0][8].xyzw -mov o9.xyzw, v[0][9].xyzw -mov o10.xyzw, v[0][10].xyzw -mov o11.xyzw, v[0][11].xyzw -mov o12.xyzw, v[0][12].xyzw -mov o13.xyzw, v[0][13].xyzw -mov o14.xyzw, v[0][14].xyzw -mov o15.xyzw, v[0][15].xyzw -mov o16.xy, l(0,0,0,0) -mov o16.z, v[0][16].z -mov o17.xy, r2.xyxx -mov o17.zw, v[0][17].zzzw -mov o18.xyzw, v[0][18].xyzw -mov o19.xy, v[0][19].xyxx -emit_stream m0 -mov o0.xyzw, v[0][0].xyzw -mov o1.xyzw, v[0][1].xyzw -mov o2.xyzw, v[0][2].xyzw -mov o3.xyzw, v[0][3].xyzw -mov o4.xyzw, v[0][4].xyzw -mov o5.xyzw, v[0][5].xyzw -mov o6.xyzw, v[0][6].xyzw -mov o7.xyzw, v[0][7].xyzw -mov o8.xyzw, v[0][8].xyzw -mov o9.xyzw, v[0][9].xyzw -mov o10.xyzw, v[0][10].xyzw -mov o11.xyzw, v[0][11].xyzw -mov o12.xyzw, v[0][12].xyzw -mov o13.xyzw, v[0][13].xyzw -mov o14.xyzw, v[0][14].xyzw -mov o15.xyzw, v[0][15].xyzw -mov o16.xy, l(0,1.000000,0,0) -mov o16.z, v[0][16].z -mov o17.xy, r2.zwzz -mov o17.zw, v[0][17].zzzw -mov o18.xyzw, v[0][18].xyzw -mov o19.xy, v[0][19].xyxx -emit_stream m0 -add [precise(yw)] r0.yw, r0.xxxy, v[0][17].xxxy -mov o0.xyzw, v[0][0].xyzw -mov o1.xyzw, v[0][1].xyzw -mov o2.xyzw, v[0][2].xyzw -mov o3.xyzw, v[0][3].xyzw -mov o4.xyzw, v[0][4].xyzw -mov o5.xyzw, v[0][5].xyzw -mov o6.xyzw, v[0][6].xyzw -mov o7.xyzw, v[0][7].xyzw -mov o8.xyzw, v[0][8].xyzw -mov o9.xyzw, v[0][9].xyzw -mov o10.xyzw, v[0][10].xyzw -mov o11.xyzw, v[0][11].xyzw -mov o12.xyzw, v[0][12].xyzw -mov o13.xyzw, v[0][13].xyzw -mov o14.xyzw, v[0][14].xyzw -mov o15.xyzw, v[0][15].xyzw -mov o16.xy, l(1.000000,0,0,0) -mov o16.z, v[0][16].z -mov o17.xy, r0.ywyy -mov o17.zw, v[0][17].zzzw -mov o18.xyzw, v[0][18].xyzw -mov o19.xy, v[0][19].xyxx -emit_stream m0 -mov [precise(z)] r0.z, r1.z -add [precise(xy)] r0.xy, r0.xzxx, v[0][17].xyxx -mov o0.xyzw, v[0][0].xyzw -mov o1.xyzw, v[0][1].xyzw -mov o2.xyzw, v[0][2].xyzw -mov o3.xyzw, v[0][3].xyzw -mov o4.xyzw, v[0][4].xyzw -mov o5.xyzw, v[0][5].xyzw -mov o6.xyzw, v[0][6].xyzw -mov o7.xyzw, v[0][7].xyzw -mov o8.xyzw, v[0][8].xyzw -mov o9.xyzw, v[0][9].xyzw -mov o10.xyzw, v[0][10].xyzw -mov o11.xyzw, v[0][11].xyzw -mov o12.xyzw, v[0][12].xyzw -mov o13.xyzw, v[0][13].xyzw -mov o14.xyzw, v[0][14].xyzw -mov o15.xyzw, v[0][15].xyzw -mov o16.xy, l(1.000000,1.000000,0,0) -mov o16.z, v[0][16].z -mov o17.xy, r0.xyxx -mov o17.zw, v[0][17].zzzw -mov o18.xyzw, v[0][18].xyzw -mov o19.xy, v[0][19].xyxx -emit_stream m0 -cut_stream m0 -ret -// Approximately 121 instruction slots used -#endif - -const BYTE primitive_point_list_gs[] = -{ - 68, 88, 66, 67, 193, 245, - 77, 40, 213, 43, 129, 142, - 106, 187, 17, 173, 235, 7, - 183, 6, 1, 0, 0, 0, - 176, 29, 0, 0, 5, 0, - 0, 0, 52, 0, 0, 0, - 212, 10, 0, 0, 20, 13, - 0, 0, 124, 15, 0, 0, - 20, 29, 0, 0, 82, 68, - 69, 70, 152, 10, 0, 0, - 1, 0, 0, 0, 120, 0, - 0, 0, 1, 0, 0, 0, - 60, 0, 0, 0, 1, 5, - 83, 71, 0, 5, 0, 0, - 110, 10, 0, 0, 19, 19, - 68, 37, 60, 0, 0, 0, - 24, 0, 0, 0, 40, 0, - 0, 0, 40, 0, 0, 0, - 36, 0, 0, 0, 12, 0, - 0, 0, 0, 0, 0, 0, - 100, 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, 1, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 120, 101, - 95, 115, 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, 0, 0, - 0, 0, 0, 0, 0, 0, - 144, 5, 0, 0, 0, 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, 196, 5, - 0, 0, 4, 0, 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, 12, 6, 0, 0, - 12, 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, - 39, 6, 0, 0, 16, 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, 62, 6, - 0, 0, 20, 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, 85, 6, 0, 0, - 24, 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, - 152, 6, 0, 0, 32, 0, - 0, 0, 96, 0, 0, 0, - 0, 0, 0, 0, 180, 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, 128, 0, 0, 0, - 12, 0, 0, 0, 0, 0, - 0, 0, 236, 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, 0, 0, 4, 0, - 0, 0, 0, 0, 0, 0, - 52, 7, 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, - 0, 0, 12, 0, 0, 0, - 0, 0, 0, 0, 236, 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, 156, 0, 0, 0, - 4, 0, 0, 0, 0, 0, - 0, 0, 52, 7, 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, 0, 0, 8, 0, - 0, 0, 2, 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, - 156, 7, 0, 0, 168, 0, - 0, 0, 8, 0, 0, 0, - 2, 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, 179, 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, 212, 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, - 228, 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, 249, 7, - 0, 0, 192, 0, 0, 0, - 32, 0, 0, 0, 0, 0, - 0, 0, 28, 8, 0, 0, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 64, 8, 0, 0, - 224, 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, - 85, 8, 0, 0, 228, 0, - 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 52, 7, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 109, 8, - 0, 0, 232, 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, 126, 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, - 166, 8, 0, 0, 240, 0, - 0, 0, 16, 0, 0, 0, - 0, 0, 0, 0, 184, 8, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 220, 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, 247, 8, 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, - 17, 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, 51, 9, - 0, 0, 32, 1, 0, 0, - 32, 0, 0, 0, 0, 0, - 0, 0, 68, 9, 0, 0, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 104, 9, 0, 0, - 64, 1, 0, 0, 16, 0, - 0, 0, 0, 0, 0, 0, - 136, 9, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 0, - 172, 9, 0, 0, 80, 1, - 0, 0, 16, 0, 0, 0, - 0, 0, 0, 0, 136, 9, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 197, 9, - 0, 0, 96, 1, 0, 0, - 64, 0, 0, 0, 0, 0, - 0, 0, 216, 9, 0, 0, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 252, 9, 0, 0, - 160, 1, 0, 0, 32, 0, - 0, 0, 0, 0, 0, 0, - 20, 10, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 0, - 56, 10, 0, 0, 192, 1, - 0, 0, 16, 0, 0, 0, - 0, 0, 0, 0, 136, 9, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 86, 10, - 0, 0, 208, 1, 0, 0, - 16, 0, 0, 0, 0, 0, - 0, 0, 184, 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, 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, - 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, 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, 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, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 229, 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, 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, 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, 114, 97, 100, - 105, 117, 115, 0, 120, 101, - 95, 112, 111, 105, 110, 116, - 95, 115, 99, 114, 101, 101, - 110, 95, 116, 111, 95, 110, - 100, 99, 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, 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, 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, 19, 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, 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, 19, 8, - 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, - 19, 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, 19, 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, 56, 2, - 0, 0, 21, 0, 0, 0, - 8, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 0, 0, 0, 0, - 15, 15, 0, 0, 0, 2, - 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 1, 0, 0, 0, - 15, 15, 0, 0, 0, 2, - 0, 0, 2, 0, 0, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 2, 0, 0, 0, - 15, 15, 0, 0, 0, 2, - 0, 0, 3, 0, 0, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 3, 0, 0, 0, - 15, 15, 0, 0, 0, 2, - 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 4, 0, 0, 0, - 15, 15, 0, 0, 0, 2, - 0, 0, 5, 0, 0, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 5, 0, 0, 0, - 15, 15, 0, 0, 0, 2, - 0, 0, 6, 0, 0, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 6, 0, 0, 0, - 15, 15, 0, 0, 0, 2, - 0, 0, 7, 0, 0, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 7, 0, 0, 0, - 15, 15, 0, 0, 0, 2, - 0, 0, 8, 0, 0, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 8, 0, 0, 0, - 15, 15, 0, 0, 0, 2, - 0, 0, 9, 0, 0, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 9, 0, 0, 0, - 15, 15, 0, 0, 0, 2, - 0, 0, 10, 0, 0, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 10, 0, 0, 0, - 15, 15, 0, 0, 0, 2, - 0, 0, 11, 0, 0, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 11, 0, 0, 0, - 15, 15, 0, 0, 0, 2, - 0, 0, 12, 0, 0, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 12, 0, 0, 0, - 15, 15, 0, 0, 0, 2, - 0, 0, 13, 0, 0, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 13, 0, 0, 0, - 15, 15, 0, 0, 0, 2, - 0, 0, 14, 0, 0, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 14, 0, 0, 0, - 15, 15, 0, 0, 0, 2, - 0, 0, 15, 0, 0, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 15, 0, 0, 0, - 15, 15, 0, 0, 0, 2, - 0, 0, 16, 0, 0, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 16, 0, 0, 0, - 7, 4, 0, 0, 9, 2, - 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 3, 0, - 0, 0, 17, 0, 0, 0, - 15, 15, 0, 0, 21, 2, - 0, 0, 0, 0, 0, 0, - 2, 0, 0, 0, 3, 0, - 0, 0, 18, 0, 0, 0, - 15, 15, 0, 0, 21, 2, - 0, 0, 1, 0, 0, 0, - 2, 0, 0, 0, 3, 0, - 0, 0, 19, 0, 0, 0, - 3, 3, 0, 0, 37, 2, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 3, 0, - 0, 0, 19, 0, 0, 0, - 4, 4, 0, 0, 84, 69, - 88, 67, 79, 79, 82, 68, - 0, 83, 86, 95, 80, 111, - 115, 105, 116, 105, 111, 110, - 0, 83, 86, 95, 67, 108, - 105, 112, 68, 105, 115, 116, - 97, 110, 99, 101, 0, 83, - 86, 95, 67, 117, 108, 108, - 68, 105, 115, 116, 97, 110, - 99, 101, 0, 171, 171, 171, - 79, 83, 71, 53, 96, 2, - 0, 0, 20, 0, 0, 0, - 8, 0, 0, 0, 0, 0, - 0, 0, 56, 2, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 0, 0, 0, 0, 15, 0, - 0, 0, 0, 0, 0, 0, - 56, 2, 0, 0, 1, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 1, 0, - 0, 0, 15, 0, 0, 0, - 0, 0, 0, 0, 56, 2, - 0, 0, 2, 0, 0, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 2, 0, 0, 0, - 15, 0, 0, 0, 0, 0, - 0, 0, 56, 2, 0, 0, - 3, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 3, 0, 0, 0, 15, 0, - 0, 0, 0, 0, 0, 0, - 56, 2, 0, 0, 4, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 4, 0, - 0, 0, 15, 0, 0, 0, - 0, 0, 0, 0, 56, 2, - 0, 0, 5, 0, 0, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 5, 0, 0, 0, - 15, 0, 0, 0, 0, 0, - 0, 0, 56, 2, 0, 0, - 6, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 6, 0, 0, 0, 15, 0, - 0, 0, 0, 0, 0, 0, - 56, 2, 0, 0, 7, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 7, 0, - 0, 0, 15, 0, 0, 0, - 0, 0, 0, 0, 56, 2, - 0, 0, 8, 0, 0, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 8, 0, 0, 0, - 15, 0, 0, 0, 0, 0, - 0, 0, 56, 2, 0, 0, - 9, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 9, 0, 0, 0, 15, 0, - 0, 0, 0, 0, 0, 0, - 56, 2, 0, 0, 10, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 10, 0, - 0, 0, 15, 0, 0, 0, - 0, 0, 0, 0, 56, 2, - 0, 0, 11, 0, 0, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 11, 0, 0, 0, - 15, 0, 0, 0, 0, 0, - 0, 0, 56, 2, 0, 0, - 12, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 12, 0, 0, 0, 15, 0, - 0, 0, 0, 0, 0, 0, - 56, 2, 0, 0, 13, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 13, 0, - 0, 0, 15, 0, 0, 0, - 0, 0, 0, 0, 56, 2, - 0, 0, 14, 0, 0, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 14, 0, 0, 0, - 15, 0, 0, 0, 0, 0, - 0, 0, 56, 2, 0, 0, - 15, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 15, 0, 0, 0, 15, 0, - 0, 0, 0, 0, 0, 0, - 56, 2, 0, 0, 16, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 16, 0, - 0, 0, 7, 8, 0, 0, - 0, 0, 0, 0, 65, 2, - 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 3, 0, - 0, 0, 17, 0, 0, 0, - 15, 0, 0, 0, 0, 0, - 0, 0, 77, 2, 0, 0, - 0, 0, 0, 0, 2, 0, - 0, 0, 3, 0, 0, 0, - 18, 0, 0, 0, 15, 0, - 0, 0, 0, 0, 0, 0, - 77, 2, 0, 0, 1, 0, - 0, 0, 2, 0, 0, 0, - 3, 0, 0, 0, 19, 0, - 0, 0, 3, 12, 0, 0, - 84, 69, 88, 67, 79, 79, - 82, 68, 0, 83, 86, 95, - 80, 111, 115, 105, 116, 105, - 111, 110, 0, 83, 86, 95, - 67, 108, 105, 112, 68, 105, - 115, 116, 97, 110, 99, 101, - 0, 171, 171, 171, 83, 72, - 69, 88, 144, 13, 0, 0, - 81, 0, 2, 0, 100, 3, - 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, 11, 0, 0, 0, - 0, 0, 0, 0, 95, 0, - 0, 4, 242, 16, 32, 0, - 1, 0, 0, 0, 0, 0, - 0, 0, 95, 0, 0, 4, - 242, 16, 32, 0, 1, 0, - 0, 0, 1, 0, 0, 0, - 95, 0, 0, 4, 242, 16, - 32, 0, 1, 0, 0, 0, - 2, 0, 0, 0, 95, 0, - 0, 4, 242, 16, 32, 0, - 1, 0, 0, 0, 3, 0, - 0, 0, 95, 0, 0, 4, - 242, 16, 32, 0, 1, 0, - 0, 0, 4, 0, 0, 0, - 95, 0, 0, 4, 242, 16, - 32, 0, 1, 0, 0, 0, - 5, 0, 0, 0, 95, 0, - 0, 4, 242, 16, 32, 0, - 1, 0, 0, 0, 6, 0, - 0, 0, 95, 0, 0, 4, - 242, 16, 32, 0, 1, 0, - 0, 0, 7, 0, 0, 0, - 95, 0, 0, 4, 242, 16, - 32, 0, 1, 0, 0, 0, - 8, 0, 0, 0, 95, 0, - 0, 4, 242, 16, 32, 0, - 1, 0, 0, 0, 9, 0, - 0, 0, 95, 0, 0, 4, - 242, 16, 32, 0, 1, 0, - 0, 0, 10, 0, 0, 0, - 95, 0, 0, 4, 242, 16, - 32, 0, 1, 0, 0, 0, - 11, 0, 0, 0, 95, 0, - 0, 4, 242, 16, 32, 0, - 1, 0, 0, 0, 12, 0, - 0, 0, 95, 0, 0, 4, - 242, 16, 32, 0, 1, 0, - 0, 0, 13, 0, 0, 0, - 95, 0, 0, 4, 242, 16, - 32, 0, 1, 0, 0, 0, - 14, 0, 0, 0, 95, 0, - 0, 4, 242, 16, 32, 0, - 1, 0, 0, 0, 15, 0, - 0, 0, 95, 0, 0, 4, - 114, 16, 32, 0, 1, 0, - 0, 0, 16, 0, 0, 0, - 97, 0, 0, 5, 242, 16, - 32, 0, 1, 0, 0, 0, - 17, 0, 0, 0, 1, 0, - 0, 0, 95, 0, 0, 4, - 242, 16, 32, 0, 1, 0, - 0, 0, 18, 0, 0, 0, - 95, 0, 0, 4, 50, 16, - 32, 0, 1, 0, 0, 0, - 19, 0, 0, 0, 95, 0, - 0, 4, 66, 16, 32, 0, - 1, 0, 0, 0, 19, 0, - 0, 0, 104, 0, 0, 2, - 3, 0, 0, 0, 93, 8, - 0, 1, 143, 0, 0, 3, - 0, 0, 17, 0, 0, 0, - 0, 0, 92, 40, 0, 1, - 101, 0, 0, 3, 242, 32, - 16, 0, 0, 0, 0, 0, - 101, 0, 0, 3, 242, 32, - 16, 0, 1, 0, 0, 0, - 101, 0, 0, 3, 242, 32, - 16, 0, 2, 0, 0, 0, - 101, 0, 0, 3, 242, 32, - 16, 0, 3, 0, 0, 0, - 101, 0, 0, 3, 242, 32, - 16, 0, 4, 0, 0, 0, - 101, 0, 0, 3, 242, 32, - 16, 0, 5, 0, 0, 0, - 101, 0, 0, 3, 242, 32, - 16, 0, 6, 0, 0, 0, - 101, 0, 0, 3, 242, 32, - 16, 0, 7, 0, 0, 0, - 101, 0, 0, 3, 242, 32, - 16, 0, 8, 0, 0, 0, - 101, 0, 0, 3, 242, 32, - 16, 0, 9, 0, 0, 0, - 101, 0, 0, 3, 242, 32, - 16, 0, 10, 0, 0, 0, - 101, 0, 0, 3, 242, 32, - 16, 0, 11, 0, 0, 0, - 101, 0, 0, 3, 242, 32, - 16, 0, 12, 0, 0, 0, - 101, 0, 0, 3, 242, 32, - 16, 0, 13, 0, 0, 0, - 101, 0, 0, 3, 242, 32, - 16, 0, 14, 0, 0, 0, - 101, 0, 0, 3, 242, 32, - 16, 0, 15, 0, 0, 0, - 101, 0, 0, 3, 114, 32, - 16, 0, 16, 0, 0, 0, - 103, 0, 0, 4, 242, 32, - 16, 0, 17, 0, 0, 0, - 1, 0, 0, 0, 103, 0, - 0, 4, 242, 32, 16, 0, - 18, 0, 0, 0, 2, 0, - 0, 0, 103, 0, 0, 4, - 50, 32, 16, 0, 19, 0, - 0, 0, 2, 0, 0, 0, - 94, 0, 0, 2, 4, 0, - 0, 0, 49, 0, 8, 8, - 18, 0, 16, 0, 0, 0, - 0, 0, 42, 16, 32, 0, - 0, 0, 0, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 57, 0, - 120, 9, 242, 0, 16, 0, - 1, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 17, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 17, 0, 0, 0, 60, 0, - 48, 7, 98, 0, 16, 0, - 0, 0, 0, 0, 166, 11, - 16, 0, 1, 0, 0, 0, - 6, 1, 16, 0, 1, 0, - 0, 0, 60, 0, 16, 7, - 34, 0, 16, 0, 0, 0, - 0, 0, 42, 0, 16, 0, - 0, 0, 0, 0, 26, 0, - 16, 0, 0, 0, 0, 0, - 60, 0, 8, 7, 18, 0, - 16, 0, 0, 0, 0, 0, - 26, 0, 16, 0, 0, 0, - 0, 0, 10, 0, 16, 0, - 0, 0, 0, 0, 31, 0, - 4, 3, 10, 0, 16, 0, - 0, 0, 0, 0, 62, 0, - 0, 1, 21, 0, 0, 1, - 29, 0, 8, 8, 18, 0, - 16, 0, 0, 0, 0, 0, - 42, 16, 32, 0, 0, 0, - 0, 0, 16, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 31, 0, 4, 3, - 10, 0, 16, 0, 0, 0, - 0, 0, 56, 0, 24, 11, - 50, 0, 16, 0, 0, 0, - 0, 0, 2, 64, 0, 0, - 0, 0, 0, 63, 0, 0, - 0, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 166, 26, - 32, 0, 0, 0, 0, 0, - 16, 0, 0, 0, 18, 0, - 0, 1, 54, 0, 24, 7, - 50, 0, 16, 0, 0, 0, - 0, 0, 70, 128, 48, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 10, 0, 0, 0, - 21, 0, 0, 1, 49, 0, - 96, 10, 194, 0, 16, 0, - 0, 0, 0, 0, 2, 64, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 6, 4, 16, 0, 0, 0, - 0, 0, 1, 0, 32, 7, - 66, 0, 16, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 0, 0, 0, 0, 42, 0, - 16, 0, 0, 0, 0, 0, - 31, 0, 0, 3, 42, 0, - 16, 0, 0, 0, 0, 0, - 62, 0, 0, 1, 21, 0, - 0, 1, 56, 0, 24, 9, - 50, 0, 16, 0, 0, 0, - 0, 0, 70, 0, 16, 0, - 0, 0, 0, 0, 230, 138, - 48, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 10, 0, - 0, 0, 56, 0, 24, 8, - 50, 0, 16, 0, 0, 0, - 0, 0, 70, 0, 16, 0, - 0, 0, 0, 0, 246, 31, - 32, 0, 0, 0, 0, 0, - 17, 0, 0, 0, 54, 0, - 56, 6, 114, 0, 16, 0, - 1, 0, 0, 0, 6, 1, - 16, 128, 65, 0, 0, 0, - 0, 0, 0, 0, 54, 0, - 64, 5, 130, 0, 16, 0, - 1, 0, 0, 0, 26, 0, - 16, 0, 0, 0, 0, 0, - 0, 0, 120, 8, 242, 0, - 16, 0, 2, 0, 0, 0, - 198, 9, 16, 0, 1, 0, - 0, 0, 70, 20, 32, 0, - 0, 0, 0, 0, 17, 0, - 0, 0, 54, 0, 0, 6, - 242, 32, 16, 0, 0, 0, - 0, 0, 70, 30, 32, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 54, 0, 0, 6, - 242, 32, 16, 0, 1, 0, - 0, 0, 70, 30, 32, 0, - 0, 0, 0, 0, 1, 0, - 0, 0, 54, 0, 0, 6, - 242, 32, 16, 0, 2, 0, - 0, 0, 70, 30, 32, 0, - 0, 0, 0, 0, 2, 0, - 0, 0, 54, 0, 0, 6, - 242, 32, 16, 0, 3, 0, - 0, 0, 70, 30, 32, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 54, 0, 0, 6, - 242, 32, 16, 0, 4, 0, - 0, 0, 70, 30, 32, 0, - 0, 0, 0, 0, 4, 0, - 0, 0, 54, 0, 0, 6, - 242, 32, 16, 0, 5, 0, - 0, 0, 70, 30, 32, 0, - 0, 0, 0, 0, 5, 0, - 0, 0, 54, 0, 0, 6, - 242, 32, 16, 0, 6, 0, - 0, 0, 70, 30, 32, 0, - 0, 0, 0, 0, 6, 0, - 0, 0, 54, 0, 0, 6, - 242, 32, 16, 0, 7, 0, - 0, 0, 70, 30, 32, 0, - 0, 0, 0, 0, 7, 0, - 0, 0, 54, 0, 0, 6, - 242, 32, 16, 0, 8, 0, - 0, 0, 70, 30, 32, 0, - 0, 0, 0, 0, 8, 0, - 0, 0, 54, 0, 0, 6, - 242, 32, 16, 0, 9, 0, - 0, 0, 70, 30, 32, 0, - 0, 0, 0, 0, 9, 0, - 0, 0, 54, 0, 0, 6, - 242, 32, 16, 0, 10, 0, - 0, 0, 70, 30, 32, 0, - 0, 0, 0, 0, 10, 0, - 0, 0, 54, 0, 0, 6, - 242, 32, 16, 0, 11, 0, - 0, 0, 70, 30, 32, 0, - 0, 0, 0, 0, 11, 0, - 0, 0, 54, 0, 0, 6, - 242, 32, 16, 0, 12, 0, - 0, 0, 70, 30, 32, 0, - 0, 0, 0, 0, 12, 0, - 0, 0, 54, 0, 0, 6, - 242, 32, 16, 0, 13, 0, - 0, 0, 70, 30, 32, 0, - 0, 0, 0, 0, 13, 0, - 0, 0, 54, 0, 0, 6, - 242, 32, 16, 0, 14, 0, - 0, 0, 70, 30, 32, 0, - 0, 0, 0, 0, 14, 0, - 0, 0, 54, 0, 0, 6, - 242, 32, 16, 0, 15, 0, - 0, 0, 70, 30, 32, 0, - 0, 0, 0, 0, 15, 0, - 0, 0, 54, 0, 0, 8, - 50, 32, 16, 0, 16, 0, - 0, 0, 2, 64, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 54, 0, - 0, 6, 66, 32, 16, 0, - 16, 0, 0, 0, 42, 16, - 32, 0, 0, 0, 0, 0, - 16, 0, 0, 0, 54, 0, - 0, 5, 50, 32, 16, 0, - 17, 0, 0, 0, 70, 0, - 16, 0, 2, 0, 0, 0, - 54, 0, 0, 6, 194, 32, - 16, 0, 17, 0, 0, 0, - 166, 30, 32, 0, 0, 0, - 0, 0, 17, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 18, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 18, 0, 0, 0, - 54, 0, 0, 6, 50, 32, - 16, 0, 19, 0, 0, 0, - 70, 16, 32, 0, 0, 0, - 0, 0, 19, 0, 0, 0, - 117, 0, 0, 3, 0, 0, - 17, 0, 0, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 0, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 1, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 1, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 2, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 2, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 3, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 4, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 4, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 5, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 5, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 6, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 6, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 7, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 7, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 8, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 8, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 9, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 9, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 10, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 10, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 11, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 11, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 12, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 12, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 13, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 13, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 14, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 14, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 15, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 15, 0, 0, 0, - 54, 0, 0, 8, 50, 32, - 16, 0, 16, 0, 0, 0, - 2, 64, 0, 0, 0, 0, - 0, 0, 0, 0, 128, 63, - 0, 0, 0, 0, 0, 0, - 0, 0, 54, 0, 0, 6, - 66, 32, 16, 0, 16, 0, - 0, 0, 42, 16, 32, 0, - 0, 0, 0, 0, 16, 0, - 0, 0, 54, 0, 0, 5, - 50, 32, 16, 0, 17, 0, - 0, 0, 230, 10, 16, 0, - 2, 0, 0, 0, 54, 0, - 0, 6, 194, 32, 16, 0, - 17, 0, 0, 0, 166, 30, - 32, 0, 0, 0, 0, 0, - 17, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 18, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 18, 0, 0, 0, 54, 0, - 0, 6, 50, 32, 16, 0, - 19, 0, 0, 0, 70, 16, - 32, 0, 0, 0, 0, 0, - 19, 0, 0, 0, 117, 0, - 0, 3, 0, 0, 17, 0, - 0, 0, 0, 0, 0, 0, - 80, 8, 162, 0, 16, 0, - 0, 0, 0, 0, 6, 4, - 16, 0, 0, 0, 0, 0, - 6, 20, 32, 0, 0, 0, - 0, 0, 17, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 0, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 1, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 1, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 2, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 2, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 3, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 4, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 4, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 5, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 5, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 6, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 6, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 7, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 7, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 8, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 8, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 9, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 9, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 10, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 10, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 11, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 11, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 12, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 12, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 13, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 13, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 14, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 14, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 15, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 15, 0, 0, 0, - 54, 0, 0, 8, 50, 32, - 16, 0, 16, 0, 0, 0, - 2, 64, 0, 0, 0, 0, - 128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 54, 0, 0, 6, - 66, 32, 16, 0, 16, 0, - 0, 0, 42, 16, 32, 0, - 0, 0, 0, 0, 16, 0, - 0, 0, 54, 0, 0, 5, - 50, 32, 16, 0, 17, 0, - 0, 0, 214, 5, 16, 0, - 0, 0, 0, 0, 54, 0, - 0, 6, 194, 32, 16, 0, - 17, 0, 0, 0, 166, 30, - 32, 0, 0, 0, 0, 0, - 17, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 18, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 18, 0, 0, 0, 54, 0, - 0, 6, 50, 32, 16, 0, - 19, 0, 0, 0, 70, 16, - 32, 0, 0, 0, 0, 0, - 19, 0, 0, 0, 117, 0, - 0, 3, 0, 0, 17, 0, - 0, 0, 0, 0, 54, 0, - 32, 5, 66, 0, 16, 0, - 0, 0, 0, 0, 42, 0, - 16, 0, 1, 0, 0, 0, - 0, 0, 24, 8, 50, 0, - 16, 0, 0, 0, 0, 0, - 134, 0, 16, 0, 0, 0, - 0, 0, 70, 16, 32, 0, - 0, 0, 0, 0, 17, 0, - 0, 0, 54, 0, 0, 6, - 242, 32, 16, 0, 0, 0, - 0, 0, 70, 30, 32, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 54, 0, 0, 6, - 242, 32, 16, 0, 1, 0, - 0, 0, 70, 30, 32, 0, - 0, 0, 0, 0, 1, 0, - 0, 0, 54, 0, 0, 6, - 242, 32, 16, 0, 2, 0, - 0, 0, 70, 30, 32, 0, - 0, 0, 0, 0, 2, 0, - 0, 0, 54, 0, 0, 6, - 242, 32, 16, 0, 3, 0, - 0, 0, 70, 30, 32, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 54, 0, 0, 6, - 242, 32, 16, 0, 4, 0, - 0, 0, 70, 30, 32, 0, - 0, 0, 0, 0, 4, 0, - 0, 0, 54, 0, 0, 6, - 242, 32, 16, 0, 5, 0, - 0, 0, 70, 30, 32, 0, - 0, 0, 0, 0, 5, 0, - 0, 0, 54, 0, 0, 6, - 242, 32, 16, 0, 6, 0, - 0, 0, 70, 30, 32, 0, - 0, 0, 0, 0, 6, 0, - 0, 0, 54, 0, 0, 6, - 242, 32, 16, 0, 7, 0, - 0, 0, 70, 30, 32, 0, - 0, 0, 0, 0, 7, 0, - 0, 0, 54, 0, 0, 6, - 242, 32, 16, 0, 8, 0, - 0, 0, 70, 30, 32, 0, - 0, 0, 0, 0, 8, 0, - 0, 0, 54, 0, 0, 6, - 242, 32, 16, 0, 9, 0, - 0, 0, 70, 30, 32, 0, - 0, 0, 0, 0, 9, 0, - 0, 0, 54, 0, 0, 6, - 242, 32, 16, 0, 10, 0, - 0, 0, 70, 30, 32, 0, - 0, 0, 0, 0, 10, 0, - 0, 0, 54, 0, 0, 6, - 242, 32, 16, 0, 11, 0, - 0, 0, 70, 30, 32, 0, - 0, 0, 0, 0, 11, 0, - 0, 0, 54, 0, 0, 6, - 242, 32, 16, 0, 12, 0, - 0, 0, 70, 30, 32, 0, - 0, 0, 0, 0, 12, 0, - 0, 0, 54, 0, 0, 6, - 242, 32, 16, 0, 13, 0, - 0, 0, 70, 30, 32, 0, - 0, 0, 0, 0, 13, 0, - 0, 0, 54, 0, 0, 6, - 242, 32, 16, 0, 14, 0, - 0, 0, 70, 30, 32, 0, - 0, 0, 0, 0, 14, 0, - 0, 0, 54, 0, 0, 6, - 242, 32, 16, 0, 15, 0, - 0, 0, 70, 30, 32, 0, - 0, 0, 0, 0, 15, 0, - 0, 0, 54, 0, 0, 8, - 50, 32, 16, 0, 16, 0, - 0, 0, 2, 64, 0, 0, - 0, 0, 128, 63, 0, 0, - 128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 54, 0, - 0, 6, 66, 32, 16, 0, - 16, 0, 0, 0, 42, 16, - 32, 0, 0, 0, 0, 0, - 16, 0, 0, 0, 54, 0, - 0, 5, 50, 32, 16, 0, - 17, 0, 0, 0, 70, 0, - 16, 0, 0, 0, 0, 0, - 54, 0, 0, 6, 194, 32, - 16, 0, 17, 0, 0, 0, - 166, 30, 32, 0, 0, 0, - 0, 0, 17, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 18, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 18, 0, 0, 0, - 54, 0, 0, 6, 50, 32, - 16, 0, 19, 0, 0, 0, - 70, 16, 32, 0, 0, 0, - 0, 0, 19, 0, 0, 0, - 117, 0, 0, 3, 0, 0, - 17, 0, 0, 0, 0, 0, - 118, 0, 0, 3, 0, 0, - 17, 0, 0, 0, 0, 0, - 62, 0, 0, 1, 83, 84, - 65, 84, 148, 0, 0, 0, - 121, 0, 0, 0, 3, 0, - 0, 0, 0, 0, 0, 0, - 41, 0, 0, 0, 11, 0, - 0, 0, 0, 0, 0, 0, - 4, 0, 0, 0, 4, 0, - 0, 0, 3, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 1, 0, 0, 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, 3, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, - 5, 0, 0, 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, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0 -}; diff --git a/src/xenia/gpu/shaders/bytecode/d3d12_5_1/primitive_quad_list_gs.h b/src/xenia/gpu/shaders/bytecode/d3d12_5_1/primitive_quad_list_gs.h deleted file mode 100644 index e349a4f47..000000000 --- a/src/xenia/gpu/shaders/bytecode/d3d12_5_1/primitive_quad_list_gs.h +++ /dev/null @@ -1,886 +0,0 @@ -#if 0 -// -// Generated by Microsoft (R) HLSL Shader Compiler 10.1 -// -// -// -// Input signature: -// -// Name Index Mask Register SysValue Format Used -// -------------------- ----- ------ -------- -------- ------- ------ -// TEXCOORD 0 xyzw 0 NONE float xyzw -// TEXCOORD 1 xyzw 1 NONE float xyzw -// TEXCOORD 2 xyzw 2 NONE float xyzw -// TEXCOORD 3 xyzw 3 NONE float xyzw -// TEXCOORD 4 xyzw 4 NONE float xyzw -// TEXCOORD 5 xyzw 5 NONE float xyzw -// TEXCOORD 6 xyzw 6 NONE float xyzw -// TEXCOORD 7 xyzw 7 NONE float xyzw -// TEXCOORD 8 xyzw 8 NONE float xyzw -// TEXCOORD 9 xyzw 9 NONE float xyzw -// TEXCOORD 10 xyzw 10 NONE float xyzw -// TEXCOORD 11 xyzw 11 NONE float xyzw -// TEXCOORD 12 xyzw 12 NONE float xyzw -// TEXCOORD 13 xyzw 13 NONE float xyzw -// TEXCOORD 14 xyzw 14 NONE float xyzw -// TEXCOORD 15 xyzw 15 NONE float xyzw -// TEXCOORD 16 xyz 16 NONE float xyz -// SV_Position 0 xyzw 17 POS float xyzw -// SV_ClipDistance 0 xyzw 18 CLIPDST float xyzw -// SV_ClipDistance 1 xy 19 CLIPDST float xy -// SV_CullDistance 0 z 19 CULLDST float -// -// -// Output signature: -// -// Name Index Mask Register SysValue Format Used -// -------------------- ----- ------ -------- -------- ------- ------ -// TEXCOORD 0 xyzw 0 NONE float xyzw -// TEXCOORD 1 xyzw 1 NONE float xyzw -// TEXCOORD 2 xyzw 2 NONE float xyzw -// TEXCOORD 3 xyzw 3 NONE float xyzw -// TEXCOORD 4 xyzw 4 NONE float xyzw -// TEXCOORD 5 xyzw 5 NONE float xyzw -// TEXCOORD 6 xyzw 6 NONE float xyzw -// TEXCOORD 7 xyzw 7 NONE float xyzw -// TEXCOORD 8 xyzw 8 NONE float xyzw -// TEXCOORD 9 xyzw 9 NONE float xyzw -// TEXCOORD 10 xyzw 10 NONE float xyzw -// TEXCOORD 11 xyzw 11 NONE float xyzw -// TEXCOORD 12 xyzw 12 NONE float xyzw -// TEXCOORD 13 xyzw 13 NONE float xyzw -// TEXCOORD 14 xyzw 14 NONE float xyzw -// TEXCOORD 15 xyzw 15 NONE float xyzw -// TEXCOORD 16 xyz 16 NONE float xyz -// SV_Position 0 xyzw 17 POS float xyzw -// SV_ClipDistance 0 xyzw 18 CLIPDST float xyzw -// SV_ClipDistance 1 xy 19 CLIPDST float xy -// -gs_5_1 -dcl_globalFlags refactoringAllowed -dcl_input v[4][0].xyzw -dcl_input v[4][1].xyzw -dcl_input v[4][2].xyzw -dcl_input v[4][3].xyzw -dcl_input v[4][4].xyzw -dcl_input v[4][5].xyzw -dcl_input v[4][6].xyzw -dcl_input v[4][7].xyzw -dcl_input v[4][8].xyzw -dcl_input v[4][9].xyzw -dcl_input v[4][10].xyzw -dcl_input v[4][11].xyzw -dcl_input v[4][12].xyzw -dcl_input v[4][13].xyzw -dcl_input v[4][14].xyzw -dcl_input v[4][15].xyzw -dcl_input v[4][16].xyz -dcl_input_siv v[4][17].xyzw, position -dcl_input v[4][18].xyzw -dcl_input v[4][19].xy -dcl_input v[4][19].z -dcl_inputprimitive lineadj -dcl_stream m0 -dcl_outputtopology trianglestrip -dcl_output o0.xyzw -dcl_output o1.xyzw -dcl_output o2.xyzw -dcl_output o3.xyzw -dcl_output o4.xyzw -dcl_output o5.xyzw -dcl_output o6.xyzw -dcl_output o7.xyzw -dcl_output o8.xyzw -dcl_output o9.xyzw -dcl_output o10.xyzw -dcl_output o11.xyzw -dcl_output o12.xyzw -dcl_output o13.xyzw -dcl_output o14.xyzw -dcl_output o15.xyzw -dcl_output o16.xyz -dcl_output_siv o17.xyzw, position -dcl_output_siv o18.xyzw, clip_distance -dcl_output_siv o19.xy, clip_distance -dcl_maxout 4 -mov o0.xyzw, v[0][0].xyzw -mov o1.xyzw, v[0][1].xyzw -mov o2.xyzw, v[0][2].xyzw -mov o3.xyzw, v[0][3].xyzw -mov o4.xyzw, v[0][4].xyzw -mov o5.xyzw, v[0][5].xyzw -mov o6.xyzw, v[0][6].xyzw -mov o7.xyzw, v[0][7].xyzw -mov o8.xyzw, v[0][8].xyzw -mov o9.xyzw, v[0][9].xyzw -mov o10.xyzw, v[0][10].xyzw -mov o11.xyzw, v[0][11].xyzw -mov o12.xyzw, v[0][12].xyzw -mov o13.xyzw, v[0][13].xyzw -mov o14.xyzw, v[0][14].xyzw -mov o15.xyzw, v[0][15].xyzw -mov o16.xyz, v[0][16].xyzx -mov o17.xyzw, v[0][17].xyzw -mov o18.xyzw, v[0][18].xyzw -mov o19.xy, v[0][19].xyxx -emit_stream m0 -mov o0.xyzw, v[1][0].xyzw -mov o1.xyzw, v[1][1].xyzw -mov o2.xyzw, v[1][2].xyzw -mov o3.xyzw, v[1][3].xyzw -mov o4.xyzw, v[1][4].xyzw -mov o5.xyzw, v[1][5].xyzw -mov o6.xyzw, v[1][6].xyzw -mov o7.xyzw, v[1][7].xyzw -mov o8.xyzw, v[1][8].xyzw -mov o9.xyzw, v[1][9].xyzw -mov o10.xyzw, v[1][10].xyzw -mov o11.xyzw, v[1][11].xyzw -mov o12.xyzw, v[1][12].xyzw -mov o13.xyzw, v[1][13].xyzw -mov o14.xyzw, v[1][14].xyzw -mov o15.xyzw, v[1][15].xyzw -mov o16.xyz, v[1][16].xyzx -mov o17.xyzw, v[1][17].xyzw -mov o18.xyzw, v[1][18].xyzw -mov o19.xy, v[1][19].xyxx -emit_stream m0 -mov o0.xyzw, v[3][0].xyzw -mov o1.xyzw, v[3][1].xyzw -mov o2.xyzw, v[3][2].xyzw -mov o3.xyzw, v[3][3].xyzw -mov o4.xyzw, v[3][4].xyzw -mov o5.xyzw, v[3][5].xyzw -mov o6.xyzw, v[3][6].xyzw -mov o7.xyzw, v[3][7].xyzw -mov o8.xyzw, v[3][8].xyzw -mov o9.xyzw, v[3][9].xyzw -mov o10.xyzw, v[3][10].xyzw -mov o11.xyzw, v[3][11].xyzw -mov o12.xyzw, v[3][12].xyzw -mov o13.xyzw, v[3][13].xyzw -mov o14.xyzw, v[3][14].xyzw -mov o15.xyzw, v[3][15].xyzw -mov o16.xyz, v[3][16].xyzx -mov o17.xyzw, v[3][17].xyzw -mov o18.xyzw, v[3][18].xyzw -mov o19.xy, v[3][19].xyxx -emit_stream m0 -mov o0.xyzw, v[2][0].xyzw -mov o1.xyzw, v[2][1].xyzw -mov o2.xyzw, v[2][2].xyzw -mov o3.xyzw, v[2][3].xyzw -mov o4.xyzw, v[2][4].xyzw -mov o5.xyzw, v[2][5].xyzw -mov o6.xyzw, v[2][6].xyzw -mov o7.xyzw, v[2][7].xyzw -mov o8.xyzw, v[2][8].xyzw -mov o9.xyzw, v[2][9].xyzw -mov o10.xyzw, v[2][10].xyzw -mov o11.xyzw, v[2][11].xyzw -mov o12.xyzw, v[2][12].xyzw -mov o13.xyzw, v[2][13].xyzw -mov o14.xyzw, v[2][14].xyzw -mov o15.xyzw, v[2][15].xyzw -mov o16.xyz, v[2][16].xyzx -mov o17.xyzw, v[2][17].xyzw -mov o18.xyzw, v[2][18].xyzw -mov o19.xy, v[2][19].xyxx -emit_stream m0 -cut_stream m0 -ret -// Approximately 86 instruction slots used -#endif - -const BYTE primitive_quad_list_gs[] = -{ - 68, 88, 66, 67, 26, 143, - 179, 72, 238, 147, 43, 130, - 37, 11, 116, 191, 138, 68, - 255, 76, 1, 0, 0, 0, - 36, 16, 0, 0, 5, 0, - 0, 0, 52, 0, 0, 0, - 160, 0, 0, 0, 224, 2, - 0, 0, 72, 5, 0, 0, - 136, 15, 0, 0, 82, 68, - 69, 70, 100, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 60, 0, 0, 0, 1, 5, - 83, 71, 0, 5, 0, 0, - 60, 0, 0, 0, 19, 19, - 68, 37, 60, 0, 0, 0, - 24, 0, 0, 0, 40, 0, - 0, 0, 40, 0, 0, 0, - 36, 0, 0, 0, 12, 0, - 0, 0, 0, 0, 0, 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, 73, 83, - 71, 78, 56, 2, 0, 0, - 21, 0, 0, 0, 8, 0, - 0, 0, 0, 2, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 0, 0, 0, 0, 15, 15, - 0, 0, 0, 2, 0, 0, - 1, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 1, 0, 0, 0, 15, 15, - 0, 0, 0, 2, 0, 0, - 2, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 2, 0, 0, 0, 15, 15, - 0, 0, 0, 2, 0, 0, - 3, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 3, 0, 0, 0, 15, 15, - 0, 0, 0, 2, 0, 0, - 4, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 4, 0, 0, 0, 15, 15, - 0, 0, 0, 2, 0, 0, - 5, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 5, 0, 0, 0, 15, 15, - 0, 0, 0, 2, 0, 0, - 6, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 6, 0, 0, 0, 15, 15, - 0, 0, 0, 2, 0, 0, - 7, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 7, 0, 0, 0, 15, 15, - 0, 0, 0, 2, 0, 0, - 8, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 8, 0, 0, 0, 15, 15, - 0, 0, 0, 2, 0, 0, - 9, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 9, 0, 0, 0, 15, 15, - 0, 0, 0, 2, 0, 0, - 10, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 10, 0, 0, 0, 15, 15, - 0, 0, 0, 2, 0, 0, - 11, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 11, 0, 0, 0, 15, 15, - 0, 0, 0, 2, 0, 0, - 12, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 12, 0, 0, 0, 15, 15, - 0, 0, 0, 2, 0, 0, - 13, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 13, 0, 0, 0, 15, 15, - 0, 0, 0, 2, 0, 0, - 14, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 14, 0, 0, 0, 15, 15, - 0, 0, 0, 2, 0, 0, - 15, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 15, 0, 0, 0, 15, 15, - 0, 0, 0, 2, 0, 0, - 16, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 16, 0, 0, 0, 7, 7, - 0, 0, 9, 2, 0, 0, - 0, 0, 0, 0, 1, 0, - 0, 0, 3, 0, 0, 0, - 17, 0, 0, 0, 15, 15, - 0, 0, 21, 2, 0, 0, - 0, 0, 0, 0, 2, 0, - 0, 0, 3, 0, 0, 0, - 18, 0, 0, 0, 15, 15, - 0, 0, 21, 2, 0, 0, - 1, 0, 0, 0, 2, 0, - 0, 0, 3, 0, 0, 0, - 19, 0, 0, 0, 3, 3, - 0, 0, 37, 2, 0, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 3, 0, 0, 0, - 19, 0, 0, 0, 4, 0, - 0, 0, 84, 69, 88, 67, - 79, 79, 82, 68, 0, 83, - 86, 95, 80, 111, 115, 105, - 116, 105, 111, 110, 0, 83, - 86, 95, 67, 108, 105, 112, - 68, 105, 115, 116, 97, 110, - 99, 101, 0, 83, 86, 95, - 67, 117, 108, 108, 68, 105, - 115, 116, 97, 110, 99, 101, - 0, 171, 171, 171, 79, 83, - 71, 53, 96, 2, 0, 0, - 20, 0, 0, 0, 8, 0, - 0, 0, 0, 0, 0, 0, - 56, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 0, 0, - 0, 0, 15, 0, 0, 0, - 0, 0, 0, 0, 56, 2, - 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 1, 0, 0, 0, - 15, 0, 0, 0, 0, 0, - 0, 0, 56, 2, 0, 0, - 2, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 2, 0, 0, 0, 15, 0, - 0, 0, 0, 0, 0, 0, - 56, 2, 0, 0, 3, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 3, 0, - 0, 0, 15, 0, 0, 0, - 0, 0, 0, 0, 56, 2, - 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 4, 0, 0, 0, - 15, 0, 0, 0, 0, 0, - 0, 0, 56, 2, 0, 0, - 5, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 5, 0, 0, 0, 15, 0, - 0, 0, 0, 0, 0, 0, - 56, 2, 0, 0, 6, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 6, 0, - 0, 0, 15, 0, 0, 0, - 0, 0, 0, 0, 56, 2, - 0, 0, 7, 0, 0, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 7, 0, 0, 0, - 15, 0, 0, 0, 0, 0, - 0, 0, 56, 2, 0, 0, - 8, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 8, 0, 0, 0, 15, 0, - 0, 0, 0, 0, 0, 0, - 56, 2, 0, 0, 9, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 9, 0, - 0, 0, 15, 0, 0, 0, - 0, 0, 0, 0, 56, 2, - 0, 0, 10, 0, 0, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 10, 0, 0, 0, - 15, 0, 0, 0, 0, 0, - 0, 0, 56, 2, 0, 0, - 11, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 11, 0, 0, 0, 15, 0, - 0, 0, 0, 0, 0, 0, - 56, 2, 0, 0, 12, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 12, 0, - 0, 0, 15, 0, 0, 0, - 0, 0, 0, 0, 56, 2, - 0, 0, 13, 0, 0, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 13, 0, 0, 0, - 15, 0, 0, 0, 0, 0, - 0, 0, 56, 2, 0, 0, - 14, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 14, 0, 0, 0, 15, 0, - 0, 0, 0, 0, 0, 0, - 56, 2, 0, 0, 15, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 15, 0, - 0, 0, 15, 0, 0, 0, - 0, 0, 0, 0, 56, 2, - 0, 0, 16, 0, 0, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 16, 0, 0, 0, - 7, 8, 0, 0, 0, 0, - 0, 0, 65, 2, 0, 0, - 0, 0, 0, 0, 1, 0, - 0, 0, 3, 0, 0, 0, - 17, 0, 0, 0, 15, 0, - 0, 0, 0, 0, 0, 0, - 77, 2, 0, 0, 0, 0, - 0, 0, 2, 0, 0, 0, - 3, 0, 0, 0, 18, 0, - 0, 0, 15, 0, 0, 0, - 0, 0, 0, 0, 77, 2, - 0, 0, 1, 0, 0, 0, - 2, 0, 0, 0, 3, 0, - 0, 0, 19, 0, 0, 0, - 3, 12, 0, 0, 84, 69, - 88, 67, 79, 79, 82, 68, - 0, 83, 86, 95, 80, 111, - 115, 105, 116, 105, 111, 110, - 0, 83, 86, 95, 67, 108, - 105, 112, 68, 105, 115, 116, - 97, 110, 99, 101, 0, 171, - 171, 171, 83, 72, 69, 88, - 56, 10, 0, 0, 81, 0, - 2, 0, 142, 2, 0, 0, - 106, 8, 0, 1, 95, 0, - 0, 4, 242, 16, 32, 0, - 4, 0, 0, 0, 0, 0, - 0, 0, 95, 0, 0, 4, - 242, 16, 32, 0, 4, 0, - 0, 0, 1, 0, 0, 0, - 95, 0, 0, 4, 242, 16, - 32, 0, 4, 0, 0, 0, - 2, 0, 0, 0, 95, 0, - 0, 4, 242, 16, 32, 0, - 4, 0, 0, 0, 3, 0, - 0, 0, 95, 0, 0, 4, - 242, 16, 32, 0, 4, 0, - 0, 0, 4, 0, 0, 0, - 95, 0, 0, 4, 242, 16, - 32, 0, 4, 0, 0, 0, - 5, 0, 0, 0, 95, 0, - 0, 4, 242, 16, 32, 0, - 4, 0, 0, 0, 6, 0, - 0, 0, 95, 0, 0, 4, - 242, 16, 32, 0, 4, 0, - 0, 0, 7, 0, 0, 0, - 95, 0, 0, 4, 242, 16, - 32, 0, 4, 0, 0, 0, - 8, 0, 0, 0, 95, 0, - 0, 4, 242, 16, 32, 0, - 4, 0, 0, 0, 9, 0, - 0, 0, 95, 0, 0, 4, - 242, 16, 32, 0, 4, 0, - 0, 0, 10, 0, 0, 0, - 95, 0, 0, 4, 242, 16, - 32, 0, 4, 0, 0, 0, - 11, 0, 0, 0, 95, 0, - 0, 4, 242, 16, 32, 0, - 4, 0, 0, 0, 12, 0, - 0, 0, 95, 0, 0, 4, - 242, 16, 32, 0, 4, 0, - 0, 0, 13, 0, 0, 0, - 95, 0, 0, 4, 242, 16, - 32, 0, 4, 0, 0, 0, - 14, 0, 0, 0, 95, 0, - 0, 4, 242, 16, 32, 0, - 4, 0, 0, 0, 15, 0, - 0, 0, 95, 0, 0, 4, - 114, 16, 32, 0, 4, 0, - 0, 0, 16, 0, 0, 0, - 97, 0, 0, 5, 242, 16, - 32, 0, 4, 0, 0, 0, - 17, 0, 0, 0, 1, 0, - 0, 0, 95, 0, 0, 4, - 242, 16, 32, 0, 4, 0, - 0, 0, 18, 0, 0, 0, - 95, 0, 0, 4, 50, 16, - 32, 0, 4, 0, 0, 0, - 19, 0, 0, 0, 95, 0, - 0, 4, 66, 16, 32, 0, - 4, 0, 0, 0, 19, 0, - 0, 0, 93, 48, 0, 1, - 143, 0, 0, 3, 0, 0, - 17, 0, 0, 0, 0, 0, - 92, 40, 0, 1, 101, 0, - 0, 3, 242, 32, 16, 0, - 0, 0, 0, 0, 101, 0, - 0, 3, 242, 32, 16, 0, - 1, 0, 0, 0, 101, 0, - 0, 3, 242, 32, 16, 0, - 2, 0, 0, 0, 101, 0, - 0, 3, 242, 32, 16, 0, - 3, 0, 0, 0, 101, 0, - 0, 3, 242, 32, 16, 0, - 4, 0, 0, 0, 101, 0, - 0, 3, 242, 32, 16, 0, - 5, 0, 0, 0, 101, 0, - 0, 3, 242, 32, 16, 0, - 6, 0, 0, 0, 101, 0, - 0, 3, 242, 32, 16, 0, - 7, 0, 0, 0, 101, 0, - 0, 3, 242, 32, 16, 0, - 8, 0, 0, 0, 101, 0, - 0, 3, 242, 32, 16, 0, - 9, 0, 0, 0, 101, 0, - 0, 3, 242, 32, 16, 0, - 10, 0, 0, 0, 101, 0, - 0, 3, 242, 32, 16, 0, - 11, 0, 0, 0, 101, 0, - 0, 3, 242, 32, 16, 0, - 12, 0, 0, 0, 101, 0, - 0, 3, 242, 32, 16, 0, - 13, 0, 0, 0, 101, 0, - 0, 3, 242, 32, 16, 0, - 14, 0, 0, 0, 101, 0, - 0, 3, 242, 32, 16, 0, - 15, 0, 0, 0, 101, 0, - 0, 3, 114, 32, 16, 0, - 16, 0, 0, 0, 103, 0, - 0, 4, 242, 32, 16, 0, - 17, 0, 0, 0, 1, 0, - 0, 0, 103, 0, 0, 4, - 242, 32, 16, 0, 18, 0, - 0, 0, 2, 0, 0, 0, - 103, 0, 0, 4, 50, 32, - 16, 0, 19, 0, 0, 0, - 2, 0, 0, 0, 94, 0, - 0, 2, 4, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 0, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 1, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 1, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 2, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 2, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 3, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 4, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 4, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 5, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 5, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 6, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 6, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 7, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 7, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 8, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 8, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 9, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 9, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 10, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 10, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 11, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 11, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 12, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 12, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 13, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 13, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 14, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 14, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 15, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 15, 0, 0, 0, - 54, 0, 0, 6, 114, 32, - 16, 0, 16, 0, 0, 0, - 70, 18, 32, 0, 0, 0, - 0, 0, 16, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 17, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 17, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 18, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 18, 0, 0, 0, - 54, 0, 0, 6, 50, 32, - 16, 0, 19, 0, 0, 0, - 70, 16, 32, 0, 0, 0, - 0, 0, 19, 0, 0, 0, - 117, 0, 0, 3, 0, 0, - 17, 0, 0, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 0, 0, 0, 0, - 70, 30, 32, 0, 1, 0, - 0, 0, 0, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 1, 0, 0, 0, - 70, 30, 32, 0, 1, 0, - 0, 0, 1, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 2, 0, 0, 0, - 70, 30, 32, 0, 1, 0, - 0, 0, 2, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 3, 0, 0, 0, - 70, 30, 32, 0, 1, 0, - 0, 0, 3, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 4, 0, 0, 0, - 70, 30, 32, 0, 1, 0, - 0, 0, 4, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 5, 0, 0, 0, - 70, 30, 32, 0, 1, 0, - 0, 0, 5, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 6, 0, 0, 0, - 70, 30, 32, 0, 1, 0, - 0, 0, 6, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 7, 0, 0, 0, - 70, 30, 32, 0, 1, 0, - 0, 0, 7, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 8, 0, 0, 0, - 70, 30, 32, 0, 1, 0, - 0, 0, 8, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 9, 0, 0, 0, - 70, 30, 32, 0, 1, 0, - 0, 0, 9, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 10, 0, 0, 0, - 70, 30, 32, 0, 1, 0, - 0, 0, 10, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 11, 0, 0, 0, - 70, 30, 32, 0, 1, 0, - 0, 0, 11, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 12, 0, 0, 0, - 70, 30, 32, 0, 1, 0, - 0, 0, 12, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 13, 0, 0, 0, - 70, 30, 32, 0, 1, 0, - 0, 0, 13, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 14, 0, 0, 0, - 70, 30, 32, 0, 1, 0, - 0, 0, 14, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 15, 0, 0, 0, - 70, 30, 32, 0, 1, 0, - 0, 0, 15, 0, 0, 0, - 54, 0, 0, 6, 114, 32, - 16, 0, 16, 0, 0, 0, - 70, 18, 32, 0, 1, 0, - 0, 0, 16, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 17, 0, 0, 0, - 70, 30, 32, 0, 1, 0, - 0, 0, 17, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 18, 0, 0, 0, - 70, 30, 32, 0, 1, 0, - 0, 0, 18, 0, 0, 0, - 54, 0, 0, 6, 50, 32, - 16, 0, 19, 0, 0, 0, - 70, 16, 32, 0, 1, 0, - 0, 0, 19, 0, 0, 0, - 117, 0, 0, 3, 0, 0, - 17, 0, 0, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 0, 0, 0, 0, - 70, 30, 32, 0, 3, 0, - 0, 0, 0, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 1, 0, 0, 0, - 70, 30, 32, 0, 3, 0, - 0, 0, 1, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 2, 0, 0, 0, - 70, 30, 32, 0, 3, 0, - 0, 0, 2, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 3, 0, 0, 0, - 70, 30, 32, 0, 3, 0, - 0, 0, 3, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 4, 0, 0, 0, - 70, 30, 32, 0, 3, 0, - 0, 0, 4, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 5, 0, 0, 0, - 70, 30, 32, 0, 3, 0, - 0, 0, 5, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 6, 0, 0, 0, - 70, 30, 32, 0, 3, 0, - 0, 0, 6, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 7, 0, 0, 0, - 70, 30, 32, 0, 3, 0, - 0, 0, 7, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 8, 0, 0, 0, - 70, 30, 32, 0, 3, 0, - 0, 0, 8, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 9, 0, 0, 0, - 70, 30, 32, 0, 3, 0, - 0, 0, 9, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 10, 0, 0, 0, - 70, 30, 32, 0, 3, 0, - 0, 0, 10, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 11, 0, 0, 0, - 70, 30, 32, 0, 3, 0, - 0, 0, 11, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 12, 0, 0, 0, - 70, 30, 32, 0, 3, 0, - 0, 0, 12, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 13, 0, 0, 0, - 70, 30, 32, 0, 3, 0, - 0, 0, 13, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 14, 0, 0, 0, - 70, 30, 32, 0, 3, 0, - 0, 0, 14, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 15, 0, 0, 0, - 70, 30, 32, 0, 3, 0, - 0, 0, 15, 0, 0, 0, - 54, 0, 0, 6, 114, 32, - 16, 0, 16, 0, 0, 0, - 70, 18, 32, 0, 3, 0, - 0, 0, 16, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 17, 0, 0, 0, - 70, 30, 32, 0, 3, 0, - 0, 0, 17, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 18, 0, 0, 0, - 70, 30, 32, 0, 3, 0, - 0, 0, 18, 0, 0, 0, - 54, 0, 0, 6, 50, 32, - 16, 0, 19, 0, 0, 0, - 70, 16, 32, 0, 3, 0, - 0, 0, 19, 0, 0, 0, - 117, 0, 0, 3, 0, 0, - 17, 0, 0, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 0, 0, 0, 0, - 70, 30, 32, 0, 2, 0, - 0, 0, 0, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 1, 0, 0, 0, - 70, 30, 32, 0, 2, 0, - 0, 0, 1, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 2, 0, 0, 0, - 70, 30, 32, 0, 2, 0, - 0, 0, 2, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 3, 0, 0, 0, - 70, 30, 32, 0, 2, 0, - 0, 0, 3, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 4, 0, 0, 0, - 70, 30, 32, 0, 2, 0, - 0, 0, 4, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 5, 0, 0, 0, - 70, 30, 32, 0, 2, 0, - 0, 0, 5, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 6, 0, 0, 0, - 70, 30, 32, 0, 2, 0, - 0, 0, 6, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 7, 0, 0, 0, - 70, 30, 32, 0, 2, 0, - 0, 0, 7, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 8, 0, 0, 0, - 70, 30, 32, 0, 2, 0, - 0, 0, 8, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 9, 0, 0, 0, - 70, 30, 32, 0, 2, 0, - 0, 0, 9, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 10, 0, 0, 0, - 70, 30, 32, 0, 2, 0, - 0, 0, 10, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 11, 0, 0, 0, - 70, 30, 32, 0, 2, 0, - 0, 0, 11, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 12, 0, 0, 0, - 70, 30, 32, 0, 2, 0, - 0, 0, 12, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 13, 0, 0, 0, - 70, 30, 32, 0, 2, 0, - 0, 0, 13, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 14, 0, 0, 0, - 70, 30, 32, 0, 2, 0, - 0, 0, 14, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 15, 0, 0, 0, - 70, 30, 32, 0, 2, 0, - 0, 0, 15, 0, 0, 0, - 54, 0, 0, 6, 114, 32, - 16, 0, 16, 0, 0, 0, - 70, 18, 32, 0, 2, 0, - 0, 0, 16, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 17, 0, 0, 0, - 70, 30, 32, 0, 2, 0, - 0, 0, 17, 0, 0, 0, - 54, 0, 0, 6, 242, 32, - 16, 0, 18, 0, 0, 0, - 70, 30, 32, 0, 2, 0, - 0, 0, 18, 0, 0, 0, - 54, 0, 0, 6, 50, 32, - 16, 0, 19, 0, 0, 0, - 70, 16, 32, 0, 2, 0, - 0, 0, 19, 0, 0, 0, - 117, 0, 0, 3, 0, 0, - 17, 0, 0, 0, 0, 0, - 118, 0, 0, 3, 0, 0, - 17, 0, 0, 0, 0, 0, - 62, 0, 0, 1, 83, 84, - 65, 84, 148, 0, 0, 0, - 86, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 41, 0, 0, 0, 0, 0, - 0, 0, 0, 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, - 1, 0, 0, 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, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 6, 0, 0, 0, - 5, 0, 0, 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, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0 -}; diff --git a/src/xenia/gpu/shaders/bytecode/d3d12_5_1/primitive_rectangle_list_gs.h b/src/xenia/gpu/shaders/bytecode/d3d12_5_1/primitive_rectangle_list_gs.h deleted file mode 100644 index 4c078e6ed..000000000 --- a/src/xenia/gpu/shaders/bytecode/d3d12_5_1/primitive_rectangle_list_gs.h +++ /dev/null @@ -1,2145 +0,0 @@ -#if 0 -// -// Generated by Microsoft (R) HLSL Shader Compiler 10.1 -// -// -// -// Input signature: -// -// Name Index Mask Register SysValue Format Used -// -------------------- ----- ------ -------- -------- ------- ------ -// TEXCOORD 0 xyzw 0 NONE float xyzw -// TEXCOORD 1 xyzw 1 NONE float xyzw -// TEXCOORD 2 xyzw 2 NONE float xyzw -// TEXCOORD 3 xyzw 3 NONE float xyzw -// TEXCOORD 4 xyzw 4 NONE float xyzw -// TEXCOORD 5 xyzw 5 NONE float xyzw -// TEXCOORD 6 xyzw 6 NONE float xyzw -// TEXCOORD 7 xyzw 7 NONE float xyzw -// TEXCOORD 8 xyzw 8 NONE float xyzw -// TEXCOORD 9 xyzw 9 NONE float xyzw -// TEXCOORD 10 xyzw 10 NONE float xyzw -// TEXCOORD 11 xyzw 11 NONE float xyzw -// TEXCOORD 12 xyzw 12 NONE float xyzw -// TEXCOORD 13 xyzw 13 NONE float xyzw -// TEXCOORD 14 xyzw 14 NONE float xyzw -// TEXCOORD 15 xyzw 15 NONE float xyzw -// TEXCOORD 16 xyz 16 NONE float xyz -// SV_Position 0 xyzw 17 POS float xyzw -// SV_ClipDistance 0 xyzw 18 CLIPDST float xyzw -// SV_ClipDistance 1 xy 19 CLIPDST float xy -// SV_CullDistance 0 z 19 CULLDST float z -// -// -// Output signature: -// -// Name Index Mask Register SysValue Format Used -// -------------------- ----- ------ -------- -------- ------- ------ -// TEXCOORD 0 xyzw 0 NONE float xyzw -// TEXCOORD 1 xyzw 1 NONE float xyzw -// TEXCOORD 2 xyzw 2 NONE float xyzw -// TEXCOORD 3 xyzw 3 NONE float xyzw -// TEXCOORD 4 xyzw 4 NONE float xyzw -// TEXCOORD 5 xyzw 5 NONE float xyzw -// TEXCOORD 6 xyzw 6 NONE float xyzw -// TEXCOORD 7 xyzw 7 NONE float xyzw -// TEXCOORD 8 xyzw 8 NONE float xyzw -// TEXCOORD 9 xyzw 9 NONE float xyzw -// TEXCOORD 10 xyzw 10 NONE float xyzw -// TEXCOORD 11 xyzw 11 NONE float xyzw -// TEXCOORD 12 xyzw 12 NONE float xyzw -// TEXCOORD 13 xyzw 13 NONE float xyzw -// TEXCOORD 14 xyzw 14 NONE float xyzw -// TEXCOORD 15 xyzw 15 NONE float xyzw -// TEXCOORD 16 xyz 16 NONE float xyz -// SV_Position 0 xyzw 17 POS float xyzw -// SV_ClipDistance 0 xyzw 18 CLIPDST float xyzw -// SV_ClipDistance 1 xy 19 CLIPDST float xy -// -gs_5_1 -dcl_globalFlags refactoringAllowed -dcl_input v[3][0].xyzw -dcl_input v[3][1].xyzw -dcl_input v[3][2].xyzw -dcl_input v[3][3].xyzw -dcl_input v[3][4].xyzw -dcl_input v[3][5].xyzw -dcl_input v[3][6].xyzw -dcl_input v[3][7].xyzw -dcl_input v[3][8].xyzw -dcl_input v[3][9].xyzw -dcl_input v[3][10].xyzw -dcl_input v[3][11].xyzw -dcl_input v[3][12].xyzw -dcl_input v[3][13].xyzw -dcl_input v[3][14].xyzw -dcl_input v[3][15].xyzw -dcl_input v[3][16].xyz -dcl_input_siv v[3][17].xyzw, position -dcl_input v[3][18].xyzw -dcl_input v[3][19].xy -dcl_input v[3][19].z -dcl_temps 20 -dcl_inputprimitive triangle -dcl_stream m0 -dcl_outputtopology trianglestrip -dcl_output o0.xyzw -dcl_output o1.xyzw -dcl_output o2.xyzw -dcl_output o3.xyzw -dcl_output o4.xyzw -dcl_output o5.xyzw -dcl_output o6.xyzw -dcl_output o7.xyzw -dcl_output o8.xyzw -dcl_output o9.xyzw -dcl_output o10.xyzw -dcl_output o11.xyzw -dcl_output o12.xyzw -dcl_output o13.xyzw -dcl_output o14.xyzw -dcl_output o15.xyzw -dcl_output o16.xyz -dcl_output_siv o17.xyzw, position -dcl_output_siv o18.xyzw, clip_distance -dcl_output_siv o19.xy, clip_distance -dcl_maxout 6 -max [precise(x)] r0.x, v[1][19].z, v[0][19].z -max [precise(x)] r0.x, r0.x, v[2][19].z -lt [precise(x)] r0.x, r0.x, l(0.000000) -ne [precise] r1.xyzw, v[0][17].xyzw, v[0][17].xyzw -or [precise(yz)] r0.yz, r1.zzwz, r1.xxyx -or [precise(y)] r0.y, r0.z, r0.y -or [precise(x)] r0.x, r0.y, r0.x -ne [precise] r1.xyzw, v[1][17].xyzw, v[1][17].xyzw -or [precise(yz)] r0.yz, r1.zzwz, r1.xxyx -or [precise(y)] r0.y, r0.z, r0.y -or [precise(x)] r0.x, r0.y, r0.x -ne [precise] r1.xyzw, v[2][17].xyzw, v[2][17].xyzw -or [precise(yz)] r0.yz, r1.zzwz, r1.xxyx -or [precise(y)] r0.y, r0.z, r0.y -or [precise(x)] r0.x, r0.y, r0.x -if_nz r0.x - ret -endif -mov o0.xyzw, v[0][0].xyzw -mov o1.xyzw, v[0][1].xyzw -mov o2.xyzw, v[0][2].xyzw -mov o3.xyzw, v[0][3].xyzw -mov o4.xyzw, v[0][4].xyzw -mov o5.xyzw, v[0][5].xyzw -mov o6.xyzw, v[0][6].xyzw -mov o7.xyzw, v[0][7].xyzw -mov o8.xyzw, v[0][8].xyzw -mov o9.xyzw, v[0][9].xyzw -mov o10.xyzw, v[0][10].xyzw -mov o11.xyzw, v[0][11].xyzw -mov o12.xyzw, v[0][12].xyzw -mov o13.xyzw, v[0][13].xyzw -mov o14.xyzw, v[0][14].xyzw -mov o15.xyzw, v[0][15].xyzw -mov o16.xyz, v[0][16].xyzx -mov o17.xyzw, v[0][17].xyzw -mov o18.xyzw, v[0][18].xyzw -mov o19.xy, v[0][19].xyxx -emit_stream m0 -mov o0.xyzw, v[1][0].xyzw -mov o1.xyzw, v[1][1].xyzw -mov o2.xyzw, v[1][2].xyzw -mov o3.xyzw, v[1][3].xyzw -mov o4.xyzw, v[1][4].xyzw -mov o5.xyzw, v[1][5].xyzw -mov o6.xyzw, v[1][6].xyzw -mov o7.xyzw, v[1][7].xyzw -mov o8.xyzw, v[1][8].xyzw -mov o9.xyzw, v[1][9].xyzw -mov o10.xyzw, v[1][10].xyzw -mov o11.xyzw, v[1][11].xyzw -mov o12.xyzw, v[1][12].xyzw -mov o13.xyzw, v[1][13].xyzw -mov o14.xyzw, v[1][14].xyzw -mov o15.xyzw, v[1][15].xyzw -mov o16.xyz, v[1][16].xyzx -mov o17.xyzw, v[1][17].xyzw -mov o18.xyzw, v[1][18].xyzw -mov o19.xy, v[1][19].xyxx -emit_stream m0 -mov o0.xyzw, v[2][0].xyzw -mov o1.xyzw, v[2][1].xyzw -mov o2.xyzw, v[2][2].xyzw -mov o3.xyzw, v[2][3].xyzw -mov o4.xyzw, v[2][4].xyzw -mov o5.xyzw, v[2][5].xyzw -mov o6.xyzw, v[2][6].xyzw -mov o7.xyzw, v[2][7].xyzw -mov o8.xyzw, v[2][8].xyzw -mov o9.xyzw, v[2][9].xyzw -mov o10.xyzw, v[2][10].xyzw -mov o11.xyzw, v[2][11].xyzw -mov o12.xyzw, v[2][12].xyzw -mov o13.xyzw, v[2][13].xyzw -mov o14.xyzw, v[2][14].xyzw -mov o15.xyzw, v[2][15].xyzw -mov o16.xyz, v[2][16].xyzx -mov o17.xyzw, v[2][17].xyzw -mov o18.xyzw, v[2][18].xyzw -mov o19.xy, v[2][19].xyxx -emit_stream m0 -cut_stream m0 -add [precise(xyz)] r0.xyz, -v[0][17].xyzx, v[1][17].xyzx -add [precise(xyz)] r1.xyz, -v[0][17].xyzx, v[2][17].xyzx -add [precise(xyz)] r2.xyz, -v[1][17].xyzx, v[2][17].xyzx -dp3 [precise(x)] r0.x, r0.xyzx, r0.xyzx -dp3 [precise(y)] r0.y, r1.xyzx, r1.xyzx -dp3 [precise(z)] r0.z, r2.xyzx, r2.xyzx -lt [precise(w)] r0.w, r0.x, r0.z -lt [precise(x)] r1.x, r0.y, r0.z -and [precise(w)] r0.w, r0.w, r1.x -if_nz r0.w - mov o0.xyzw, v[2][0].xyzw - mov o1.xyzw, v[2][1].xyzw - mov o2.xyzw, v[2][2].xyzw - mov o3.xyzw, v[2][3].xyzw - mov o4.xyzw, v[2][4].xyzw - mov o5.xyzw, v[2][5].xyzw - mov o6.xyzw, v[2][6].xyzw - mov o7.xyzw, v[2][7].xyzw - mov o8.xyzw, v[2][8].xyzw - mov o9.xyzw, v[2][9].xyzw - mov o10.xyzw, v[2][10].xyzw - mov o11.xyzw, v[2][11].xyzw - mov o12.xyzw, v[2][12].xyzw - mov o13.xyzw, v[2][13].xyzw - mov o14.xyzw, v[2][14].xyzw - mov o15.xyzw, v[2][15].xyzw - mov o16.xyz, v[2][16].xyzx - mov o17.xyzw, v[2][17].xyzw - mov o18.xyzw, v[2][18].xyzw - mov o19.xy, v[2][19].xyxx - emit_stream m0 - mov o0.xyzw, v[1][0].xyzw - mov o1.xyzw, v[1][1].xyzw - mov o2.xyzw, v[1][2].xyzw - mov o3.xyzw, v[1][3].xyzw - mov o4.xyzw, v[1][4].xyzw - mov o5.xyzw, v[1][5].xyzw - mov o6.xyzw, v[1][6].xyzw - mov o7.xyzw, v[1][7].xyzw - mov o8.xyzw, v[1][8].xyzw - mov o9.xyzw, v[1][9].xyzw - mov o10.xyzw, v[1][10].xyzw - mov o11.xyzw, v[1][11].xyzw - mov o12.xyzw, v[1][12].xyzw - mov o13.xyzw, v[1][13].xyzw - mov o14.xyzw, v[1][14].xyzw - mov o15.xyzw, v[1][15].xyzw - mov o16.xyz, v[1][16].xyzx - mov o17.xyzw, v[1][17].xyzw - mov o18.xyzw, v[1][18].xyzw - mov o19.xy, v[1][19].xyxx - emit_stream m0 - mov [precise(xyz)] r0.xyz, l(1.000000,1.000000,-1.000000,0) -else - lt [precise(x)] r0.x, r0.x, r0.y - lt [precise(y)] r0.y, r0.z, r0.y - and [precise(x)] r0.x, r0.y, r0.x - if_nz r0.x - mov o0.xyzw, v[0][0].xyzw - mov o1.xyzw, v[0][1].xyzw - mov o2.xyzw, v[0][2].xyzw - mov o3.xyzw, v[0][3].xyzw - mov o4.xyzw, v[0][4].xyzw - mov o5.xyzw, v[0][5].xyzw - mov o6.xyzw, v[0][6].xyzw - mov o7.xyzw, v[0][7].xyzw - mov o8.xyzw, v[0][8].xyzw - mov o9.xyzw, v[0][9].xyzw - mov o10.xyzw, v[0][10].xyzw - mov o11.xyzw, v[0][11].xyzw - mov o12.xyzw, v[0][12].xyzw - mov o13.xyzw, v[0][13].xyzw - mov o14.xyzw, v[0][14].xyzw - mov o15.xyzw, v[0][15].xyzw - mov o16.xyz, v[0][16].xyzx - mov o17.xyzw, v[0][17].xyzw - mov o18.xyzw, v[0][18].xyzw - mov o19.xy, v[0][19].xyxx - emit_stream m0 - mov o0.xyzw, v[2][0].xyzw - mov o1.xyzw, v[2][1].xyzw - mov o2.xyzw, v[2][2].xyzw - mov o3.xyzw, v[2][3].xyzw - mov o4.xyzw, v[2][4].xyzw - mov o5.xyzw, v[2][5].xyzw - mov o6.xyzw, v[2][6].xyzw - mov o7.xyzw, v[2][7].xyzw - mov o8.xyzw, v[2][8].xyzw - mov o9.xyzw, v[2][9].xyzw - mov o10.xyzw, v[2][10].xyzw - mov o11.xyzw, v[2][11].xyzw - mov o12.xyzw, v[2][12].xyzw - mov o13.xyzw, v[2][13].xyzw - mov o14.xyzw, v[2][14].xyzw - mov o15.xyzw, v[2][15].xyzw - mov o16.xyz, v[2][16].xyzx - mov o17.xyzw, v[2][17].xyzw - mov o18.xyzw, v[2][18].xyzw - mov o19.xy, v[2][19].xyxx - emit_stream m0 - mov [precise(xy)] r0.xy, l(-1.000000,1.000000,0,0) - else - mov o0.xyzw, v[1][0].xyzw - mov o1.xyzw, v[1][1].xyzw - mov o2.xyzw, v[1][2].xyzw - mov o3.xyzw, v[1][3].xyzw - mov o4.xyzw, v[1][4].xyzw - mov o5.xyzw, v[1][5].xyzw - mov o6.xyzw, v[1][6].xyzw - mov o7.xyzw, v[1][7].xyzw - mov o8.xyzw, v[1][8].xyzw - mov o9.xyzw, v[1][9].xyzw - mov o10.xyzw, v[1][10].xyzw - mov o11.xyzw, v[1][11].xyzw - mov o12.xyzw, v[1][12].xyzw - mov o13.xyzw, v[1][13].xyzw - mov o14.xyzw, v[1][14].xyzw - mov o15.xyzw, v[1][15].xyzw - mov o16.xyz, v[1][16].xyzx - mov o17.xyzw, v[1][17].xyzw - mov o18.xyzw, v[1][18].xyzw - mov o19.xy, v[1][19].xyxx - emit_stream m0 - mov o0.xyzw, v[0][0].xyzw - mov o1.xyzw, v[0][1].xyzw - mov o2.xyzw, v[0][2].xyzw - mov o3.xyzw, v[0][3].xyzw - mov o4.xyzw, v[0][4].xyzw - mov o5.xyzw, v[0][5].xyzw - mov o6.xyzw, v[0][6].xyzw - mov o7.xyzw, v[0][7].xyzw - mov o8.xyzw, v[0][8].xyzw - mov o9.xyzw, v[0][9].xyzw - mov o10.xyzw, v[0][10].xyzw - mov o11.xyzw, v[0][11].xyzw - mov o12.xyzw, v[0][12].xyzw - mov o13.xyzw, v[0][13].xyzw - mov o14.xyzw, v[0][14].xyzw - mov o15.xyzw, v[0][15].xyzw - mov o16.xyz, v[0][16].xyzx - mov o17.xyzw, v[0][17].xyzw - mov o18.xyzw, v[0][18].xyzw - mov o19.xy, v[0][19].xyxx - emit_stream m0 - mov [precise(xy)] r0.xy, l(1.000000,-1.000000,0,0) - endif - mov [precise(z)] r0.z, l(1.000000) -endif -mul r1.xyzw, r0.xxxx, v[1][0].xyzw -mad r1.xyzw, r0.zzzz, v[0][0].xyzw, r1.xyzw -mad r1.xyzw, r0.yyyy, v[2][0].xyzw, r1.xyzw -mul r2.xyzw, r0.xxxx, v[1][1].xyzw -mad r2.xyzw, r0.zzzz, v[0][1].xyzw, r2.xyzw -mad r2.xyzw, r0.yyyy, v[2][1].xyzw, r2.xyzw -mul r3.xyzw, r0.xxxx, v[1][2].xyzw -mad r3.xyzw, r0.zzzz, v[0][2].xyzw, r3.xyzw -mad r3.xyzw, r0.yyyy, v[2][2].xyzw, r3.xyzw -mul r4.xyzw, r0.xxxx, v[1][3].xyzw -mad r4.xyzw, r0.zzzz, v[0][3].xyzw, r4.xyzw -mad r4.xyzw, r0.yyyy, v[2][3].xyzw, r4.xyzw -mul r5.xyzw, r0.xxxx, v[1][4].xyzw -mad r5.xyzw, r0.zzzz, v[0][4].xyzw, r5.xyzw -mad r5.xyzw, r0.yyyy, v[2][4].xyzw, r5.xyzw -mul r6.xyzw, r0.xxxx, v[1][5].xyzw -mad r6.xyzw, r0.zzzz, v[0][5].xyzw, r6.xyzw -mad r6.xyzw, r0.yyyy, v[2][5].xyzw, r6.xyzw -mul r7.xyzw, r0.xxxx, v[1][6].xyzw -mad r7.xyzw, r0.zzzz, v[0][6].xyzw, r7.xyzw -mad r7.xyzw, r0.yyyy, v[2][6].xyzw, r7.xyzw -mul r8.xyzw, r0.xxxx, v[1][7].xyzw -mad r8.xyzw, r0.zzzz, v[0][7].xyzw, r8.xyzw -mad r8.xyzw, r0.yyyy, v[2][7].xyzw, r8.xyzw -mul r9.xyzw, r0.xxxx, v[1][8].xyzw -mad r9.xyzw, r0.zzzz, v[0][8].xyzw, r9.xyzw -mad r9.xyzw, r0.yyyy, v[2][8].xyzw, r9.xyzw -mul r10.xyzw, r0.xxxx, v[1][9].xyzw -mad r10.xyzw, r0.zzzz, v[0][9].xyzw, r10.xyzw -mad r10.xyzw, r0.yyyy, v[2][9].xyzw, r10.xyzw -mul r11.xyzw, r0.xxxx, v[1][10].xyzw -mad r11.xyzw, r0.zzzz, v[0][10].xyzw, r11.xyzw -mad r11.xyzw, r0.yyyy, v[2][10].xyzw, r11.xyzw -mul r12.xyzw, r0.xxxx, v[1][11].xyzw -mad r12.xyzw, r0.zzzz, v[0][11].xyzw, r12.xyzw -mad r12.xyzw, r0.yyyy, v[2][11].xyzw, r12.xyzw -mul r13.xyzw, r0.xxxx, v[1][12].xyzw -mad r13.xyzw, r0.zzzz, v[0][12].xyzw, r13.xyzw -mad r13.xyzw, r0.yyyy, v[2][12].xyzw, r13.xyzw -mul r14.xyzw, r0.xxxx, v[1][13].xyzw -mad r14.xyzw, r0.zzzz, v[0][13].xyzw, r14.xyzw -mad r14.xyzw, r0.yyyy, v[2][13].xyzw, r14.xyzw -mul r15.xyzw, r0.xxxx, v[1][14].xyzw -mad r15.xyzw, r0.zzzz, v[0][14].xyzw, r15.xyzw -mad r15.xyzw, r0.yyyy, v[2][14].xyzw, r15.xyzw -mul r16.xyzw, r0.xxxx, v[1][15].xyzw -mad r16.xyzw, r0.zzzz, v[0][15].xyzw, r16.xyzw -mad r16.xyzw, r0.yyyy, v[2][15].xyzw, r16.xyzw -mul r17.xyz, r0.xxxx, v[1][16].xyzx -mad r17.xyz, r0.zzzz, v[0][16].xyzx, r17.xyzx -mad r17.xyz, r0.yyyy, v[2][16].xyzx, r17.xyzx -mul [precise] r18.xyzw, r0.zzzz, v[0][17].xyzw -mul [precise] r19.xyzw, r0.xxxx, v[1][17].xyzw -add [precise] r18.xyzw, r18.xyzw, r19.xyzw -mul [precise] r19.xyzw, r0.yyyy, v[2][17].xyzw -add [precise] r18.xyzw, r18.xyzw, r19.xyzw -mul r19.xyzw, r0.xxxx, v[1][18].xyzw -mad r19.xyzw, r0.zzzz, v[0][18].xyzw, r19.xyzw -mad r19.xyzw, r0.yyyy, v[2][18].xyzw, r19.xyzw -mul r0.xw, r0.xxxx, v[1][19].xxxy -mad r0.xz, r0.zzzz, v[0][19].xxyx, r0.xxwx -mad r0.xy, r0.yyyy, v[2][19].xyxx, r0.xzxx -mov o0.xyzw, r1.xyzw -mov o1.xyzw, r2.xyzw -mov o2.xyzw, r3.xyzw -mov o3.xyzw, r4.xyzw -mov o4.xyzw, r5.xyzw -mov o5.xyzw, r6.xyzw -mov o6.xyzw, r7.xyzw -mov o7.xyzw, r8.xyzw -mov o8.xyzw, r9.xyzw -mov o9.xyzw, r10.xyzw -mov o10.xyzw, r11.xyzw -mov o11.xyzw, r12.xyzw -mov o12.xyzw, r13.xyzw -mov o13.xyzw, r14.xyzw -mov o14.xyzw, r15.xyzw -mov o15.xyzw, r16.xyzw -mov o16.xyz, r17.xyzx -mov o17.xyzw, r18.xyzw -mov o18.xyzw, r19.xyzw -mov o19.xy, r0.xyxx -emit_stream m0 -cut_stream m0 -ret -// Approximately 315 instruction slots used -#endif - -const BYTE primitive_rectangle_list_gs[] = -{ - 68, 88, 66, 67, 84, 207, - 1, 11, 213, 109, 28, 213, - 94, 110, 135, 167, 112, 243, - 154, 30, 1, 0, 0, 0, - 68, 40, 0, 0, 5, 0, - 0, 0, 52, 0, 0, 0, - 160, 0, 0, 0, 224, 2, - 0, 0, 72, 5, 0, 0, - 168, 39, 0, 0, 82, 68, - 69, 70, 100, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 60, 0, 0, 0, 1, 5, - 83, 71, 0, 5, 0, 0, - 60, 0, 0, 0, 19, 19, - 68, 37, 60, 0, 0, 0, - 24, 0, 0, 0, 40, 0, - 0, 0, 40, 0, 0, 0, - 36, 0, 0, 0, 12, 0, - 0, 0, 0, 0, 0, 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, 73, 83, - 71, 78, 56, 2, 0, 0, - 21, 0, 0, 0, 8, 0, - 0, 0, 0, 2, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 0, 0, 0, 0, 15, 15, - 0, 0, 0, 2, 0, 0, - 1, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 1, 0, 0, 0, 15, 15, - 0, 0, 0, 2, 0, 0, - 2, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 2, 0, 0, 0, 15, 15, - 0, 0, 0, 2, 0, 0, - 3, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 3, 0, 0, 0, 15, 15, - 0, 0, 0, 2, 0, 0, - 4, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 4, 0, 0, 0, 15, 15, - 0, 0, 0, 2, 0, 0, - 5, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 5, 0, 0, 0, 15, 15, - 0, 0, 0, 2, 0, 0, - 6, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 6, 0, 0, 0, 15, 15, - 0, 0, 0, 2, 0, 0, - 7, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 7, 0, 0, 0, 15, 15, - 0, 0, 0, 2, 0, 0, - 8, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 8, 0, 0, 0, 15, 15, - 0, 0, 0, 2, 0, 0, - 9, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 9, 0, 0, 0, 15, 15, - 0, 0, 0, 2, 0, 0, - 10, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 10, 0, 0, 0, 15, 15, - 0, 0, 0, 2, 0, 0, - 11, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 11, 0, 0, 0, 15, 15, - 0, 0, 0, 2, 0, 0, - 12, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 12, 0, 0, 0, 15, 15, - 0, 0, 0, 2, 0, 0, - 13, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 13, 0, 0, 0, 15, 15, - 0, 0, 0, 2, 0, 0, - 14, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 14, 0, 0, 0, 15, 15, - 0, 0, 0, 2, 0, 0, - 15, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 15, 0, 0, 0, 15, 15, - 0, 0, 0, 2, 0, 0, - 16, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 16, 0, 0, 0, 7, 7, - 0, 0, 9, 2, 0, 0, - 0, 0, 0, 0, 1, 0, - 0, 0, 3, 0, 0, 0, - 17, 0, 0, 0, 15, 15, - 0, 0, 21, 2, 0, 0, - 0, 0, 0, 0, 2, 0, - 0, 0, 3, 0, 0, 0, - 18, 0, 0, 0, 15, 15, - 0, 0, 21, 2, 0, 0, - 1, 0, 0, 0, 2, 0, - 0, 0, 3, 0, 0, 0, - 19, 0, 0, 0, 3, 3, - 0, 0, 37, 2, 0, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 3, 0, 0, 0, - 19, 0, 0, 0, 4, 4, - 0, 0, 84, 69, 88, 67, - 79, 79, 82, 68, 0, 83, - 86, 95, 80, 111, 115, 105, - 116, 105, 111, 110, 0, 83, - 86, 95, 67, 108, 105, 112, - 68, 105, 115, 116, 97, 110, - 99, 101, 0, 83, 86, 95, - 67, 117, 108, 108, 68, 105, - 115, 116, 97, 110, 99, 101, - 0, 171, 171, 171, 79, 83, - 71, 53, 96, 2, 0, 0, - 20, 0, 0, 0, 8, 0, - 0, 0, 0, 0, 0, 0, - 56, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 0, 0, - 0, 0, 15, 0, 0, 0, - 0, 0, 0, 0, 56, 2, - 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 1, 0, 0, 0, - 15, 0, 0, 0, 0, 0, - 0, 0, 56, 2, 0, 0, - 2, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 2, 0, 0, 0, 15, 0, - 0, 0, 0, 0, 0, 0, - 56, 2, 0, 0, 3, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 3, 0, - 0, 0, 15, 0, 0, 0, - 0, 0, 0, 0, 56, 2, - 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 4, 0, 0, 0, - 15, 0, 0, 0, 0, 0, - 0, 0, 56, 2, 0, 0, - 5, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 5, 0, 0, 0, 15, 0, - 0, 0, 0, 0, 0, 0, - 56, 2, 0, 0, 6, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 6, 0, - 0, 0, 15, 0, 0, 0, - 0, 0, 0, 0, 56, 2, - 0, 0, 7, 0, 0, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 7, 0, 0, 0, - 15, 0, 0, 0, 0, 0, - 0, 0, 56, 2, 0, 0, - 8, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 8, 0, 0, 0, 15, 0, - 0, 0, 0, 0, 0, 0, - 56, 2, 0, 0, 9, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 9, 0, - 0, 0, 15, 0, 0, 0, - 0, 0, 0, 0, 56, 2, - 0, 0, 10, 0, 0, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 10, 0, 0, 0, - 15, 0, 0, 0, 0, 0, - 0, 0, 56, 2, 0, 0, - 11, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 11, 0, 0, 0, 15, 0, - 0, 0, 0, 0, 0, 0, - 56, 2, 0, 0, 12, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 12, 0, - 0, 0, 15, 0, 0, 0, - 0, 0, 0, 0, 56, 2, - 0, 0, 13, 0, 0, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 13, 0, 0, 0, - 15, 0, 0, 0, 0, 0, - 0, 0, 56, 2, 0, 0, - 14, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 14, 0, 0, 0, 15, 0, - 0, 0, 0, 0, 0, 0, - 56, 2, 0, 0, 15, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 15, 0, - 0, 0, 15, 0, 0, 0, - 0, 0, 0, 0, 56, 2, - 0, 0, 16, 0, 0, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 16, 0, 0, 0, - 7, 8, 0, 0, 0, 0, - 0, 0, 65, 2, 0, 0, - 0, 0, 0, 0, 1, 0, - 0, 0, 3, 0, 0, 0, - 17, 0, 0, 0, 15, 0, - 0, 0, 0, 0, 0, 0, - 77, 2, 0, 0, 0, 0, - 0, 0, 2, 0, 0, 0, - 3, 0, 0, 0, 18, 0, - 0, 0, 15, 0, 0, 0, - 0, 0, 0, 0, 77, 2, - 0, 0, 1, 0, 0, 0, - 2, 0, 0, 0, 3, 0, - 0, 0, 19, 0, 0, 0, - 3, 12, 0, 0, 84, 69, - 88, 67, 79, 79, 82, 68, - 0, 83, 86, 95, 80, 111, - 115, 105, 116, 105, 111, 110, - 0, 83, 86, 95, 67, 108, - 105, 112, 68, 105, 115, 116, - 97, 110, 99, 101, 0, 171, - 171, 171, 83, 72, 69, 88, - 88, 34, 0, 0, 81, 0, - 2, 0, 150, 8, 0, 0, - 106, 8, 0, 1, 95, 0, - 0, 4, 242, 16, 32, 0, - 3, 0, 0, 0, 0, 0, - 0, 0, 95, 0, 0, 4, - 242, 16, 32, 0, 3, 0, - 0, 0, 1, 0, 0, 0, - 95, 0, 0, 4, 242, 16, - 32, 0, 3, 0, 0, 0, - 2, 0, 0, 0, 95, 0, - 0, 4, 242, 16, 32, 0, - 3, 0, 0, 0, 3, 0, - 0, 0, 95, 0, 0, 4, - 242, 16, 32, 0, 3, 0, - 0, 0, 4, 0, 0, 0, - 95, 0, 0, 4, 242, 16, - 32, 0, 3, 0, 0, 0, - 5, 0, 0, 0, 95, 0, - 0, 4, 242, 16, 32, 0, - 3, 0, 0, 0, 6, 0, - 0, 0, 95, 0, 0, 4, - 242, 16, 32, 0, 3, 0, - 0, 0, 7, 0, 0, 0, - 95, 0, 0, 4, 242, 16, - 32, 0, 3, 0, 0, 0, - 8, 0, 0, 0, 95, 0, - 0, 4, 242, 16, 32, 0, - 3, 0, 0, 0, 9, 0, - 0, 0, 95, 0, 0, 4, - 242, 16, 32, 0, 3, 0, - 0, 0, 10, 0, 0, 0, - 95, 0, 0, 4, 242, 16, - 32, 0, 3, 0, 0, 0, - 11, 0, 0, 0, 95, 0, - 0, 4, 242, 16, 32, 0, - 3, 0, 0, 0, 12, 0, - 0, 0, 95, 0, 0, 4, - 242, 16, 32, 0, 3, 0, - 0, 0, 13, 0, 0, 0, - 95, 0, 0, 4, 242, 16, - 32, 0, 3, 0, 0, 0, - 14, 0, 0, 0, 95, 0, - 0, 4, 242, 16, 32, 0, - 3, 0, 0, 0, 15, 0, - 0, 0, 95, 0, 0, 4, - 114, 16, 32, 0, 3, 0, - 0, 0, 16, 0, 0, 0, - 97, 0, 0, 5, 242, 16, - 32, 0, 3, 0, 0, 0, - 17, 0, 0, 0, 1, 0, - 0, 0, 95, 0, 0, 4, - 242, 16, 32, 0, 3, 0, - 0, 0, 18, 0, 0, 0, - 95, 0, 0, 4, 50, 16, - 32, 0, 3, 0, 0, 0, - 19, 0, 0, 0, 95, 0, - 0, 4, 66, 16, 32, 0, - 3, 0, 0, 0, 19, 0, - 0, 0, 104, 0, 0, 2, - 20, 0, 0, 0, 93, 24, - 0, 1, 143, 0, 0, 3, - 0, 0, 17, 0, 0, 0, - 0, 0, 92, 40, 0, 1, - 101, 0, 0, 3, 242, 32, - 16, 0, 0, 0, 0, 0, - 101, 0, 0, 3, 242, 32, - 16, 0, 1, 0, 0, 0, - 101, 0, 0, 3, 242, 32, - 16, 0, 2, 0, 0, 0, - 101, 0, 0, 3, 242, 32, - 16, 0, 3, 0, 0, 0, - 101, 0, 0, 3, 242, 32, - 16, 0, 4, 0, 0, 0, - 101, 0, 0, 3, 242, 32, - 16, 0, 5, 0, 0, 0, - 101, 0, 0, 3, 242, 32, - 16, 0, 6, 0, 0, 0, - 101, 0, 0, 3, 242, 32, - 16, 0, 7, 0, 0, 0, - 101, 0, 0, 3, 242, 32, - 16, 0, 8, 0, 0, 0, - 101, 0, 0, 3, 242, 32, - 16, 0, 9, 0, 0, 0, - 101, 0, 0, 3, 242, 32, - 16, 0, 10, 0, 0, 0, - 101, 0, 0, 3, 242, 32, - 16, 0, 11, 0, 0, 0, - 101, 0, 0, 3, 242, 32, - 16, 0, 12, 0, 0, 0, - 101, 0, 0, 3, 242, 32, - 16, 0, 13, 0, 0, 0, - 101, 0, 0, 3, 242, 32, - 16, 0, 14, 0, 0, 0, - 101, 0, 0, 3, 242, 32, - 16, 0, 15, 0, 0, 0, - 101, 0, 0, 3, 114, 32, - 16, 0, 16, 0, 0, 0, - 103, 0, 0, 4, 242, 32, - 16, 0, 17, 0, 0, 0, - 1, 0, 0, 0, 103, 0, - 0, 4, 242, 32, 16, 0, - 18, 0, 0, 0, 2, 0, - 0, 0, 103, 0, 0, 4, - 50, 32, 16, 0, 19, 0, - 0, 0, 2, 0, 0, 0, - 94, 0, 0, 2, 6, 0, - 0, 0, 52, 0, 8, 9, - 18, 0, 16, 0, 0, 0, - 0, 0, 42, 16, 32, 0, - 1, 0, 0, 0, 19, 0, - 0, 0, 42, 16, 32, 0, - 0, 0, 0, 0, 19, 0, - 0, 0, 52, 0, 8, 8, - 18, 0, 16, 0, 0, 0, - 0, 0, 10, 0, 16, 0, - 0, 0, 0, 0, 42, 16, - 32, 0, 2, 0, 0, 0, - 19, 0, 0, 0, 49, 0, - 8, 7, 18, 0, 16, 0, - 0, 0, 0, 0, 10, 0, - 16, 0, 0, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 57, 0, 120, 9, - 242, 0, 16, 0, 1, 0, - 0, 0, 70, 30, 32, 0, - 0, 0, 0, 0, 17, 0, - 0, 0, 70, 30, 32, 0, - 0, 0, 0, 0, 17, 0, - 0, 0, 60, 0, 48, 7, - 98, 0, 16, 0, 0, 0, - 0, 0, 166, 11, 16, 0, - 1, 0, 0, 0, 6, 1, - 16, 0, 1, 0, 0, 0, - 60, 0, 16, 7, 34, 0, - 16, 0, 0, 0, 0, 0, - 42, 0, 16, 0, 0, 0, - 0, 0, 26, 0, 16, 0, - 0, 0, 0, 0, 60, 0, - 8, 7, 18, 0, 16, 0, - 0, 0, 0, 0, 26, 0, - 16, 0, 0, 0, 0, 0, - 10, 0, 16, 0, 0, 0, - 0, 0, 57, 0, 120, 9, - 242, 0, 16, 0, 1, 0, - 0, 0, 70, 30, 32, 0, - 1, 0, 0, 0, 17, 0, - 0, 0, 70, 30, 32, 0, - 1, 0, 0, 0, 17, 0, - 0, 0, 60, 0, 48, 7, - 98, 0, 16, 0, 0, 0, - 0, 0, 166, 11, 16, 0, - 1, 0, 0, 0, 6, 1, - 16, 0, 1, 0, 0, 0, - 60, 0, 16, 7, 34, 0, - 16, 0, 0, 0, 0, 0, - 42, 0, 16, 0, 0, 0, - 0, 0, 26, 0, 16, 0, - 0, 0, 0, 0, 60, 0, - 8, 7, 18, 0, 16, 0, - 0, 0, 0, 0, 26, 0, - 16, 0, 0, 0, 0, 0, - 10, 0, 16, 0, 0, 0, - 0, 0, 57, 0, 120, 9, - 242, 0, 16, 0, 1, 0, - 0, 0, 70, 30, 32, 0, - 2, 0, 0, 0, 17, 0, - 0, 0, 70, 30, 32, 0, - 2, 0, 0, 0, 17, 0, - 0, 0, 60, 0, 48, 7, - 98, 0, 16, 0, 0, 0, - 0, 0, 166, 11, 16, 0, - 1, 0, 0, 0, 6, 1, - 16, 0, 1, 0, 0, 0, - 60, 0, 16, 7, 34, 0, - 16, 0, 0, 0, 0, 0, - 42, 0, 16, 0, 0, 0, - 0, 0, 26, 0, 16, 0, - 0, 0, 0, 0, 60, 0, - 8, 7, 18, 0, 16, 0, - 0, 0, 0, 0, 26, 0, - 16, 0, 0, 0, 0, 0, - 10, 0, 16, 0, 0, 0, - 0, 0, 31, 0, 4, 3, - 10, 0, 16, 0, 0, 0, - 0, 0, 62, 0, 0, 1, - 21, 0, 0, 1, 54, 0, - 0, 6, 242, 32, 16, 0, - 0, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 1, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 2, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 2, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 3, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 4, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 4, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 5, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 5, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 6, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 6, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 7, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 7, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 8, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 8, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 9, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 9, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 10, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 10, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 11, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 11, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 12, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 12, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 13, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 13, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 14, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 14, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 15, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 15, 0, 0, 0, 54, 0, - 0, 6, 114, 32, 16, 0, - 16, 0, 0, 0, 70, 18, - 32, 0, 0, 0, 0, 0, - 16, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 17, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 17, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 18, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 18, 0, 0, 0, 54, 0, - 0, 6, 50, 32, 16, 0, - 19, 0, 0, 0, 70, 16, - 32, 0, 0, 0, 0, 0, - 19, 0, 0, 0, 117, 0, - 0, 3, 0, 0, 17, 0, - 0, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 0, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 1, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 1, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 2, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 2, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 3, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 3, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 4, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 4, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 5, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 5, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 6, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 6, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 7, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 7, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 8, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 8, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 9, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 9, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 10, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 10, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 11, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 11, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 12, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 12, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 13, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 13, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 14, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 14, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 15, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 15, 0, 0, 0, 54, 0, - 0, 6, 114, 32, 16, 0, - 16, 0, 0, 0, 70, 18, - 32, 0, 1, 0, 0, 0, - 16, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 17, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 17, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 18, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 18, 0, 0, 0, 54, 0, - 0, 6, 50, 32, 16, 0, - 19, 0, 0, 0, 70, 16, - 32, 0, 1, 0, 0, 0, - 19, 0, 0, 0, 117, 0, - 0, 3, 0, 0, 17, 0, - 0, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 0, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 0, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 1, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 1, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 2, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 2, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 3, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 3, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 4, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 4, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 5, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 5, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 6, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 6, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 7, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 7, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 8, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 8, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 9, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 9, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 10, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 10, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 11, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 11, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 12, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 12, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 13, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 13, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 14, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 14, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 15, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 15, 0, 0, 0, 54, 0, - 0, 6, 114, 32, 16, 0, - 16, 0, 0, 0, 70, 18, - 32, 0, 2, 0, 0, 0, - 16, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 17, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 17, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 18, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 18, 0, 0, 0, 54, 0, - 0, 6, 50, 32, 16, 0, - 19, 0, 0, 0, 70, 16, - 32, 0, 2, 0, 0, 0, - 19, 0, 0, 0, 117, 0, - 0, 3, 0, 0, 17, 0, - 0, 0, 0, 0, 118, 0, - 0, 3, 0, 0, 17, 0, - 0, 0, 0, 0, 0, 0, - 56, 10, 114, 0, 16, 0, - 0, 0, 0, 0, 70, 18, - 32, 128, 65, 0, 0, 0, - 0, 0, 0, 0, 17, 0, - 0, 0, 70, 18, 32, 0, - 1, 0, 0, 0, 17, 0, - 0, 0, 0, 0, 56, 10, - 114, 0, 16, 0, 1, 0, - 0, 0, 70, 18, 32, 128, - 65, 0, 0, 0, 0, 0, - 0, 0, 17, 0, 0, 0, - 70, 18, 32, 0, 2, 0, - 0, 0, 17, 0, 0, 0, - 0, 0, 56, 10, 114, 0, - 16, 0, 2, 0, 0, 0, - 70, 18, 32, 128, 65, 0, - 0, 0, 1, 0, 0, 0, - 17, 0, 0, 0, 70, 18, - 32, 0, 2, 0, 0, 0, - 17, 0, 0, 0, 16, 0, - 8, 7, 18, 0, 16, 0, - 0, 0, 0, 0, 70, 2, - 16, 0, 0, 0, 0, 0, - 70, 2, 16, 0, 0, 0, - 0, 0, 16, 0, 16, 7, - 34, 0, 16, 0, 0, 0, - 0, 0, 70, 2, 16, 0, - 1, 0, 0, 0, 70, 2, - 16, 0, 1, 0, 0, 0, - 16, 0, 32, 7, 66, 0, - 16, 0, 0, 0, 0, 0, - 70, 2, 16, 0, 2, 0, - 0, 0, 70, 2, 16, 0, - 2, 0, 0, 0, 49, 0, - 64, 7, 130, 0, 16, 0, - 0, 0, 0, 0, 10, 0, - 16, 0, 0, 0, 0, 0, - 42, 0, 16, 0, 0, 0, - 0, 0, 49, 0, 8, 7, - 18, 0, 16, 0, 1, 0, - 0, 0, 26, 0, 16, 0, - 0, 0, 0, 0, 42, 0, - 16, 0, 0, 0, 0, 0, - 1, 0, 64, 7, 130, 0, - 16, 0, 0, 0, 0, 0, - 58, 0, 16, 0, 0, 0, - 0, 0, 10, 0, 16, 0, - 1, 0, 0, 0, 31, 0, - 4, 3, 58, 0, 16, 0, - 0, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 0, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 0, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 1, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 1, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 2, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 2, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 3, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 3, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 4, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 4, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 5, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 5, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 6, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 6, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 7, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 7, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 8, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 8, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 9, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 9, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 10, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 10, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 11, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 11, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 12, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 12, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 13, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 13, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 14, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 14, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 15, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 15, 0, 0, 0, 54, 0, - 0, 6, 114, 32, 16, 0, - 16, 0, 0, 0, 70, 18, - 32, 0, 2, 0, 0, 0, - 16, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 17, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 17, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 18, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 18, 0, 0, 0, 54, 0, - 0, 6, 50, 32, 16, 0, - 19, 0, 0, 0, 70, 16, - 32, 0, 2, 0, 0, 0, - 19, 0, 0, 0, 117, 0, - 0, 3, 0, 0, 17, 0, - 0, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 0, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 1, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 1, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 2, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 2, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 3, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 3, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 4, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 4, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 5, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 5, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 6, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 6, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 7, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 7, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 8, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 8, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 9, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 9, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 10, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 10, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 11, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 11, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 12, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 12, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 13, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 13, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 14, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 14, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 15, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 15, 0, 0, 0, 54, 0, - 0, 6, 114, 32, 16, 0, - 16, 0, 0, 0, 70, 18, - 32, 0, 1, 0, 0, 0, - 16, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 17, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 17, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 18, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 18, 0, 0, 0, 54, 0, - 0, 6, 50, 32, 16, 0, - 19, 0, 0, 0, 70, 16, - 32, 0, 1, 0, 0, 0, - 19, 0, 0, 0, 117, 0, - 0, 3, 0, 0, 17, 0, - 0, 0, 0, 0, 54, 0, - 56, 8, 114, 0, 16, 0, - 0, 0, 0, 0, 2, 64, - 0, 0, 0, 0, 128, 63, - 0, 0, 128, 63, 0, 0, - 128, 191, 0, 0, 0, 0, - 18, 0, 0, 1, 49, 0, - 8, 7, 18, 0, 16, 0, - 0, 0, 0, 0, 10, 0, - 16, 0, 0, 0, 0, 0, - 26, 0, 16, 0, 0, 0, - 0, 0, 49, 0, 16, 7, - 34, 0, 16, 0, 0, 0, - 0, 0, 42, 0, 16, 0, - 0, 0, 0, 0, 26, 0, - 16, 0, 0, 0, 0, 0, - 1, 0, 8, 7, 18, 0, - 16, 0, 0, 0, 0, 0, - 26, 0, 16, 0, 0, 0, - 0, 0, 10, 0, 16, 0, - 0, 0, 0, 0, 31, 0, - 4, 3, 10, 0, 16, 0, - 0, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 0, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 1, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 2, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 2, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 3, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 4, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 4, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 5, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 5, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 6, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 6, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 7, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 7, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 8, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 8, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 9, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 9, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 10, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 10, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 11, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 11, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 12, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 12, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 13, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 13, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 14, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 14, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 15, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 15, 0, 0, 0, 54, 0, - 0, 6, 114, 32, 16, 0, - 16, 0, 0, 0, 70, 18, - 32, 0, 0, 0, 0, 0, - 16, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 17, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 17, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 18, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 18, 0, 0, 0, 54, 0, - 0, 6, 50, 32, 16, 0, - 19, 0, 0, 0, 70, 16, - 32, 0, 0, 0, 0, 0, - 19, 0, 0, 0, 117, 0, - 0, 3, 0, 0, 17, 0, - 0, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 0, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 0, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 1, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 1, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 2, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 2, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 3, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 3, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 4, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 4, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 5, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 5, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 6, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 6, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 7, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 7, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 8, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 8, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 9, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 9, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 10, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 10, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 11, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 11, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 12, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 12, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 13, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 13, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 14, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 14, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 15, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 15, 0, 0, 0, 54, 0, - 0, 6, 114, 32, 16, 0, - 16, 0, 0, 0, 70, 18, - 32, 0, 2, 0, 0, 0, - 16, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 17, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 17, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 18, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 18, 0, 0, 0, 54, 0, - 0, 6, 50, 32, 16, 0, - 19, 0, 0, 0, 70, 16, - 32, 0, 2, 0, 0, 0, - 19, 0, 0, 0, 117, 0, - 0, 3, 0, 0, 17, 0, - 0, 0, 0, 0, 54, 0, - 24, 8, 50, 0, 16, 0, - 0, 0, 0, 0, 2, 64, - 0, 0, 0, 0, 128, 191, - 0, 0, 128, 63, 0, 0, - 0, 0, 0, 0, 0, 0, - 18, 0, 0, 1, 54, 0, - 0, 6, 242, 32, 16, 0, - 0, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 1, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 1, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 2, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 2, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 3, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 3, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 4, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 4, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 5, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 5, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 6, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 6, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 7, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 7, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 8, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 8, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 9, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 9, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 10, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 10, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 11, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 11, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 12, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 12, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 13, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 13, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 14, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 14, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 15, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 15, 0, 0, 0, 54, 0, - 0, 6, 114, 32, 16, 0, - 16, 0, 0, 0, 70, 18, - 32, 0, 1, 0, 0, 0, - 16, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 17, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 17, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 18, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 18, 0, 0, 0, 54, 0, - 0, 6, 50, 32, 16, 0, - 19, 0, 0, 0, 70, 16, - 32, 0, 1, 0, 0, 0, - 19, 0, 0, 0, 117, 0, - 0, 3, 0, 0, 17, 0, - 0, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 0, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 1, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 2, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 2, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 3, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 4, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 4, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 5, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 5, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 6, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 6, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 7, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 7, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 8, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 8, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 9, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 9, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 10, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 10, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 11, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 11, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 12, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 12, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 13, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 13, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 14, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 14, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 15, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 15, 0, 0, 0, 54, 0, - 0, 6, 114, 32, 16, 0, - 16, 0, 0, 0, 70, 18, - 32, 0, 0, 0, 0, 0, - 16, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 17, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 17, 0, 0, 0, 54, 0, - 0, 6, 242, 32, 16, 0, - 18, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 18, 0, 0, 0, 54, 0, - 0, 6, 50, 32, 16, 0, - 19, 0, 0, 0, 70, 16, - 32, 0, 0, 0, 0, 0, - 19, 0, 0, 0, 117, 0, - 0, 3, 0, 0, 17, 0, - 0, 0, 0, 0, 54, 0, - 24, 8, 50, 0, 16, 0, - 0, 0, 0, 0, 2, 64, - 0, 0, 0, 0, 128, 63, - 0, 0, 128, 191, 0, 0, - 0, 0, 0, 0, 0, 0, - 21, 0, 0, 1, 54, 0, - 32, 5, 66, 0, 16, 0, - 0, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 128, 63, - 21, 0, 0, 1, 56, 0, - 0, 8, 242, 0, 16, 0, - 1, 0, 0, 0, 6, 0, - 16, 0, 0, 0, 0, 0, - 70, 30, 32, 0, 1, 0, - 0, 0, 0, 0, 0, 0, - 50, 0, 0, 10, 242, 0, - 16, 0, 1, 0, 0, 0, - 166, 10, 16, 0, 0, 0, - 0, 0, 70, 30, 32, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 70, 14, 16, 0, - 1, 0, 0, 0, 50, 0, - 0, 10, 242, 0, 16, 0, - 1, 0, 0, 0, 86, 5, - 16, 0, 0, 0, 0, 0, - 70, 30, 32, 0, 2, 0, - 0, 0, 0, 0, 0, 0, - 70, 14, 16, 0, 1, 0, - 0, 0, 56, 0, 0, 8, - 242, 0, 16, 0, 2, 0, - 0, 0, 6, 0, 16, 0, - 0, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 1, 0, 0, 0, 50, 0, - 0, 10, 242, 0, 16, 0, - 2, 0, 0, 0, 166, 10, - 16, 0, 0, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 1, 0, 0, 0, - 70, 14, 16, 0, 2, 0, - 0, 0, 50, 0, 0, 10, - 242, 0, 16, 0, 2, 0, - 0, 0, 86, 5, 16, 0, - 0, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 1, 0, 0, 0, 70, 14, - 16, 0, 2, 0, 0, 0, - 56, 0, 0, 8, 242, 0, - 16, 0, 3, 0, 0, 0, - 6, 0, 16, 0, 0, 0, - 0, 0, 70, 30, 32, 0, - 1, 0, 0, 0, 2, 0, - 0, 0, 50, 0, 0, 10, - 242, 0, 16, 0, 3, 0, - 0, 0, 166, 10, 16, 0, - 0, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 2, 0, 0, 0, 70, 14, - 16, 0, 3, 0, 0, 0, - 50, 0, 0, 10, 242, 0, - 16, 0, 3, 0, 0, 0, - 86, 5, 16, 0, 0, 0, - 0, 0, 70, 30, 32, 0, - 2, 0, 0, 0, 2, 0, - 0, 0, 70, 14, 16, 0, - 3, 0, 0, 0, 56, 0, - 0, 8, 242, 0, 16, 0, - 4, 0, 0, 0, 6, 0, - 16, 0, 0, 0, 0, 0, - 70, 30, 32, 0, 1, 0, - 0, 0, 3, 0, 0, 0, - 50, 0, 0, 10, 242, 0, - 16, 0, 4, 0, 0, 0, - 166, 10, 16, 0, 0, 0, - 0, 0, 70, 30, 32, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 70, 14, 16, 0, - 4, 0, 0, 0, 50, 0, - 0, 10, 242, 0, 16, 0, - 4, 0, 0, 0, 86, 5, - 16, 0, 0, 0, 0, 0, - 70, 30, 32, 0, 2, 0, - 0, 0, 3, 0, 0, 0, - 70, 14, 16, 0, 4, 0, - 0, 0, 56, 0, 0, 8, - 242, 0, 16, 0, 5, 0, - 0, 0, 6, 0, 16, 0, - 0, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 4, 0, 0, 0, 50, 0, - 0, 10, 242, 0, 16, 0, - 5, 0, 0, 0, 166, 10, - 16, 0, 0, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 4, 0, 0, 0, - 70, 14, 16, 0, 5, 0, - 0, 0, 50, 0, 0, 10, - 242, 0, 16, 0, 5, 0, - 0, 0, 86, 5, 16, 0, - 0, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 4, 0, 0, 0, 70, 14, - 16, 0, 5, 0, 0, 0, - 56, 0, 0, 8, 242, 0, - 16, 0, 6, 0, 0, 0, - 6, 0, 16, 0, 0, 0, - 0, 0, 70, 30, 32, 0, - 1, 0, 0, 0, 5, 0, - 0, 0, 50, 0, 0, 10, - 242, 0, 16, 0, 6, 0, - 0, 0, 166, 10, 16, 0, - 0, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 5, 0, 0, 0, 70, 14, - 16, 0, 6, 0, 0, 0, - 50, 0, 0, 10, 242, 0, - 16, 0, 6, 0, 0, 0, - 86, 5, 16, 0, 0, 0, - 0, 0, 70, 30, 32, 0, - 2, 0, 0, 0, 5, 0, - 0, 0, 70, 14, 16, 0, - 6, 0, 0, 0, 56, 0, - 0, 8, 242, 0, 16, 0, - 7, 0, 0, 0, 6, 0, - 16, 0, 0, 0, 0, 0, - 70, 30, 32, 0, 1, 0, - 0, 0, 6, 0, 0, 0, - 50, 0, 0, 10, 242, 0, - 16, 0, 7, 0, 0, 0, - 166, 10, 16, 0, 0, 0, - 0, 0, 70, 30, 32, 0, - 0, 0, 0, 0, 6, 0, - 0, 0, 70, 14, 16, 0, - 7, 0, 0, 0, 50, 0, - 0, 10, 242, 0, 16, 0, - 7, 0, 0, 0, 86, 5, - 16, 0, 0, 0, 0, 0, - 70, 30, 32, 0, 2, 0, - 0, 0, 6, 0, 0, 0, - 70, 14, 16, 0, 7, 0, - 0, 0, 56, 0, 0, 8, - 242, 0, 16, 0, 8, 0, - 0, 0, 6, 0, 16, 0, - 0, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 7, 0, 0, 0, 50, 0, - 0, 10, 242, 0, 16, 0, - 8, 0, 0, 0, 166, 10, - 16, 0, 0, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 7, 0, 0, 0, - 70, 14, 16, 0, 8, 0, - 0, 0, 50, 0, 0, 10, - 242, 0, 16, 0, 8, 0, - 0, 0, 86, 5, 16, 0, - 0, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 7, 0, 0, 0, 70, 14, - 16, 0, 8, 0, 0, 0, - 56, 0, 0, 8, 242, 0, - 16, 0, 9, 0, 0, 0, - 6, 0, 16, 0, 0, 0, - 0, 0, 70, 30, 32, 0, - 1, 0, 0, 0, 8, 0, - 0, 0, 50, 0, 0, 10, - 242, 0, 16, 0, 9, 0, - 0, 0, 166, 10, 16, 0, - 0, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 8, 0, 0, 0, 70, 14, - 16, 0, 9, 0, 0, 0, - 50, 0, 0, 10, 242, 0, - 16, 0, 9, 0, 0, 0, - 86, 5, 16, 0, 0, 0, - 0, 0, 70, 30, 32, 0, - 2, 0, 0, 0, 8, 0, - 0, 0, 70, 14, 16, 0, - 9, 0, 0, 0, 56, 0, - 0, 8, 242, 0, 16, 0, - 10, 0, 0, 0, 6, 0, - 16, 0, 0, 0, 0, 0, - 70, 30, 32, 0, 1, 0, - 0, 0, 9, 0, 0, 0, - 50, 0, 0, 10, 242, 0, - 16, 0, 10, 0, 0, 0, - 166, 10, 16, 0, 0, 0, - 0, 0, 70, 30, 32, 0, - 0, 0, 0, 0, 9, 0, - 0, 0, 70, 14, 16, 0, - 10, 0, 0, 0, 50, 0, - 0, 10, 242, 0, 16, 0, - 10, 0, 0, 0, 86, 5, - 16, 0, 0, 0, 0, 0, - 70, 30, 32, 0, 2, 0, - 0, 0, 9, 0, 0, 0, - 70, 14, 16, 0, 10, 0, - 0, 0, 56, 0, 0, 8, - 242, 0, 16, 0, 11, 0, - 0, 0, 6, 0, 16, 0, - 0, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 10, 0, 0, 0, 50, 0, - 0, 10, 242, 0, 16, 0, - 11, 0, 0, 0, 166, 10, - 16, 0, 0, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 10, 0, 0, 0, - 70, 14, 16, 0, 11, 0, - 0, 0, 50, 0, 0, 10, - 242, 0, 16, 0, 11, 0, - 0, 0, 86, 5, 16, 0, - 0, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 10, 0, 0, 0, 70, 14, - 16, 0, 11, 0, 0, 0, - 56, 0, 0, 8, 242, 0, - 16, 0, 12, 0, 0, 0, - 6, 0, 16, 0, 0, 0, - 0, 0, 70, 30, 32, 0, - 1, 0, 0, 0, 11, 0, - 0, 0, 50, 0, 0, 10, - 242, 0, 16, 0, 12, 0, - 0, 0, 166, 10, 16, 0, - 0, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 11, 0, 0, 0, 70, 14, - 16, 0, 12, 0, 0, 0, - 50, 0, 0, 10, 242, 0, - 16, 0, 12, 0, 0, 0, - 86, 5, 16, 0, 0, 0, - 0, 0, 70, 30, 32, 0, - 2, 0, 0, 0, 11, 0, - 0, 0, 70, 14, 16, 0, - 12, 0, 0, 0, 56, 0, - 0, 8, 242, 0, 16, 0, - 13, 0, 0, 0, 6, 0, - 16, 0, 0, 0, 0, 0, - 70, 30, 32, 0, 1, 0, - 0, 0, 12, 0, 0, 0, - 50, 0, 0, 10, 242, 0, - 16, 0, 13, 0, 0, 0, - 166, 10, 16, 0, 0, 0, - 0, 0, 70, 30, 32, 0, - 0, 0, 0, 0, 12, 0, - 0, 0, 70, 14, 16, 0, - 13, 0, 0, 0, 50, 0, - 0, 10, 242, 0, 16, 0, - 13, 0, 0, 0, 86, 5, - 16, 0, 0, 0, 0, 0, - 70, 30, 32, 0, 2, 0, - 0, 0, 12, 0, 0, 0, - 70, 14, 16, 0, 13, 0, - 0, 0, 56, 0, 0, 8, - 242, 0, 16, 0, 14, 0, - 0, 0, 6, 0, 16, 0, - 0, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 13, 0, 0, 0, 50, 0, - 0, 10, 242, 0, 16, 0, - 14, 0, 0, 0, 166, 10, - 16, 0, 0, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 13, 0, 0, 0, - 70, 14, 16, 0, 14, 0, - 0, 0, 50, 0, 0, 10, - 242, 0, 16, 0, 14, 0, - 0, 0, 86, 5, 16, 0, - 0, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 13, 0, 0, 0, 70, 14, - 16, 0, 14, 0, 0, 0, - 56, 0, 0, 8, 242, 0, - 16, 0, 15, 0, 0, 0, - 6, 0, 16, 0, 0, 0, - 0, 0, 70, 30, 32, 0, - 1, 0, 0, 0, 14, 0, - 0, 0, 50, 0, 0, 10, - 242, 0, 16, 0, 15, 0, - 0, 0, 166, 10, 16, 0, - 0, 0, 0, 0, 70, 30, - 32, 0, 0, 0, 0, 0, - 14, 0, 0, 0, 70, 14, - 16, 0, 15, 0, 0, 0, - 50, 0, 0, 10, 242, 0, - 16, 0, 15, 0, 0, 0, - 86, 5, 16, 0, 0, 0, - 0, 0, 70, 30, 32, 0, - 2, 0, 0, 0, 14, 0, - 0, 0, 70, 14, 16, 0, - 15, 0, 0, 0, 56, 0, - 0, 8, 242, 0, 16, 0, - 16, 0, 0, 0, 6, 0, - 16, 0, 0, 0, 0, 0, - 70, 30, 32, 0, 1, 0, - 0, 0, 15, 0, 0, 0, - 50, 0, 0, 10, 242, 0, - 16, 0, 16, 0, 0, 0, - 166, 10, 16, 0, 0, 0, - 0, 0, 70, 30, 32, 0, - 0, 0, 0, 0, 15, 0, - 0, 0, 70, 14, 16, 0, - 16, 0, 0, 0, 50, 0, - 0, 10, 242, 0, 16, 0, - 16, 0, 0, 0, 86, 5, - 16, 0, 0, 0, 0, 0, - 70, 30, 32, 0, 2, 0, - 0, 0, 15, 0, 0, 0, - 70, 14, 16, 0, 16, 0, - 0, 0, 56, 0, 0, 8, - 114, 0, 16, 0, 17, 0, - 0, 0, 6, 0, 16, 0, - 0, 0, 0, 0, 70, 18, - 32, 0, 1, 0, 0, 0, - 16, 0, 0, 0, 50, 0, - 0, 10, 114, 0, 16, 0, - 17, 0, 0, 0, 166, 10, - 16, 0, 0, 0, 0, 0, - 70, 18, 32, 0, 0, 0, - 0, 0, 16, 0, 0, 0, - 70, 2, 16, 0, 17, 0, - 0, 0, 50, 0, 0, 10, - 114, 0, 16, 0, 17, 0, - 0, 0, 86, 5, 16, 0, - 0, 0, 0, 0, 70, 18, - 32, 0, 2, 0, 0, 0, - 16, 0, 0, 0, 70, 2, - 16, 0, 17, 0, 0, 0, - 56, 0, 120, 8, 242, 0, - 16, 0, 18, 0, 0, 0, - 166, 10, 16, 0, 0, 0, - 0, 0, 70, 30, 32, 0, - 0, 0, 0, 0, 17, 0, - 0, 0, 56, 0, 120, 8, - 242, 0, 16, 0, 19, 0, - 0, 0, 6, 0, 16, 0, - 0, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 17, 0, 0, 0, 0, 0, - 120, 7, 242, 0, 16, 0, - 18, 0, 0, 0, 70, 14, - 16, 0, 18, 0, 0, 0, - 70, 14, 16, 0, 19, 0, - 0, 0, 56, 0, 120, 8, - 242, 0, 16, 0, 19, 0, - 0, 0, 86, 5, 16, 0, - 0, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 17, 0, 0, 0, 0, 0, - 120, 7, 242, 0, 16, 0, - 18, 0, 0, 0, 70, 14, - 16, 0, 18, 0, 0, 0, - 70, 14, 16, 0, 19, 0, - 0, 0, 56, 0, 0, 8, - 242, 0, 16, 0, 19, 0, - 0, 0, 6, 0, 16, 0, - 0, 0, 0, 0, 70, 30, - 32, 0, 1, 0, 0, 0, - 18, 0, 0, 0, 50, 0, - 0, 10, 242, 0, 16, 0, - 19, 0, 0, 0, 166, 10, - 16, 0, 0, 0, 0, 0, - 70, 30, 32, 0, 0, 0, - 0, 0, 18, 0, 0, 0, - 70, 14, 16, 0, 19, 0, - 0, 0, 50, 0, 0, 10, - 242, 0, 16, 0, 19, 0, - 0, 0, 86, 5, 16, 0, - 0, 0, 0, 0, 70, 30, - 32, 0, 2, 0, 0, 0, - 18, 0, 0, 0, 70, 14, - 16, 0, 19, 0, 0, 0, - 56, 0, 0, 8, 146, 0, - 16, 0, 0, 0, 0, 0, - 6, 0, 16, 0, 0, 0, - 0, 0, 6, 20, 32, 0, - 1, 0, 0, 0, 19, 0, - 0, 0, 50, 0, 0, 10, - 82, 0, 16, 0, 0, 0, - 0, 0, 166, 10, 16, 0, - 0, 0, 0, 0, 6, 17, - 32, 0, 0, 0, 0, 0, - 19, 0, 0, 0, 6, 3, - 16, 0, 0, 0, 0, 0, - 50, 0, 0, 10, 50, 0, - 16, 0, 0, 0, 0, 0, - 86, 5, 16, 0, 0, 0, - 0, 0, 70, 16, 32, 0, - 2, 0, 0, 0, 19, 0, - 0, 0, 134, 0, 16, 0, - 0, 0, 0, 0, 54, 0, - 0, 5, 242, 32, 16, 0, - 0, 0, 0, 0, 70, 14, - 16, 0, 1, 0, 0, 0, - 54, 0, 0, 5, 242, 32, - 16, 0, 1, 0, 0, 0, - 70, 14, 16, 0, 2, 0, - 0, 0, 54, 0, 0, 5, - 242, 32, 16, 0, 2, 0, - 0, 0, 70, 14, 16, 0, - 3, 0, 0, 0, 54, 0, - 0, 5, 242, 32, 16, 0, - 3, 0, 0, 0, 70, 14, - 16, 0, 4, 0, 0, 0, - 54, 0, 0, 5, 242, 32, - 16, 0, 4, 0, 0, 0, - 70, 14, 16, 0, 5, 0, - 0, 0, 54, 0, 0, 5, - 242, 32, 16, 0, 5, 0, - 0, 0, 70, 14, 16, 0, - 6, 0, 0, 0, 54, 0, - 0, 5, 242, 32, 16, 0, - 6, 0, 0, 0, 70, 14, - 16, 0, 7, 0, 0, 0, - 54, 0, 0, 5, 242, 32, - 16, 0, 7, 0, 0, 0, - 70, 14, 16, 0, 8, 0, - 0, 0, 54, 0, 0, 5, - 242, 32, 16, 0, 8, 0, - 0, 0, 70, 14, 16, 0, - 9, 0, 0, 0, 54, 0, - 0, 5, 242, 32, 16, 0, - 9, 0, 0, 0, 70, 14, - 16, 0, 10, 0, 0, 0, - 54, 0, 0, 5, 242, 32, - 16, 0, 10, 0, 0, 0, - 70, 14, 16, 0, 11, 0, - 0, 0, 54, 0, 0, 5, - 242, 32, 16, 0, 11, 0, - 0, 0, 70, 14, 16, 0, - 12, 0, 0, 0, 54, 0, - 0, 5, 242, 32, 16, 0, - 12, 0, 0, 0, 70, 14, - 16, 0, 13, 0, 0, 0, - 54, 0, 0, 5, 242, 32, - 16, 0, 13, 0, 0, 0, - 70, 14, 16, 0, 14, 0, - 0, 0, 54, 0, 0, 5, - 242, 32, 16, 0, 14, 0, - 0, 0, 70, 14, 16, 0, - 15, 0, 0, 0, 54, 0, - 0, 5, 242, 32, 16, 0, - 15, 0, 0, 0, 70, 14, - 16, 0, 16, 0, 0, 0, - 54, 0, 0, 5, 114, 32, - 16, 0, 16, 0, 0, 0, - 70, 2, 16, 0, 17, 0, - 0, 0, 54, 0, 0, 5, - 242, 32, 16, 0, 17, 0, - 0, 0, 70, 14, 16, 0, - 18, 0, 0, 0, 54, 0, - 0, 5, 242, 32, 16, 0, - 18, 0, 0, 0, 70, 14, - 16, 0, 19, 0, 0, 0, - 54, 0, 0, 5, 50, 32, - 16, 0, 19, 0, 0, 0, - 70, 0, 16, 0, 0, 0, - 0, 0, 117, 0, 0, 3, - 0, 0, 17, 0, 0, 0, - 0, 0, 118, 0, 0, 3, - 0, 0, 17, 0, 0, 0, - 0, 0, 62, 0, 0, 1, - 83, 84, 65, 84, 148, 0, - 0, 0, 59, 1, 0, 0, - 20, 0, 0, 0, 0, 0, - 0, 0, 41, 0, 0, 0, - 78, 0, 0, 0, 0, 0, - 0, 0, 11, 0, 0, 0, - 4, 0, 0, 0, 3, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 2, 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, - 4, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 5, 0, 0, 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, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 -}; diff --git a/src/xenia/gpu/shaders/bytecode/d3d12_5_1/tessellation_adaptive_vs.h b/src/xenia/gpu/shaders/bytecode/d3d12_5_1/tessellation_adaptive_vs.h index 1c27f6b7f..b93e23695 100644 --- a/src/xenia/gpu/shaders/bytecode/d3d12_5_1/tessellation_adaptive_vs.h +++ b/src/xenia/gpu/shaders/bytecode/d3d12_5_1/tessellation_adaptive_vs.h @@ -19,8 +19,8 @@ // float xe_point_vertex_diameter_min;// Offset: 140 Size: 4 [unused] // float3 xe_ndc_offset; // Offset: 144 Size: 12 [unused] // float xe_point_vertex_diameter_max;// Offset: 156 Size: 4 [unused] -// float2 xe_point_constant_radius; // Offset: 160 Size: 8 [unused] -// float2 xe_point_screen_to_ndc; // Offset: 168 Size: 8 [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] @@ -94,21 +94,21 @@ ret const BYTE tessellation_adaptive_vs[] = { - 68, 88, 66, 67, 208, 91, - 167, 102, 8, 237, 14, 199, - 43, 1, 173, 204, 50, 149, - 119, 147, 1, 0, 0, 0, - 224, 13, 0, 0, 5, 0, + 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, 0, 0, 52, 0, 0, 0, - 212, 10, 0, 0, 8, 11, - 0, 0, 64, 11, 0, 0, - 68, 13, 0, 0, 82, 68, - 69, 70, 152, 10, 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, 1, 0, 0, 0, 120, 0, 0, 0, 1, 0, 0, 0, 60, 0, 0, 0, 1, 5, 254, 255, 0, 5, 0, 0, - 110, 10, 0, 0, 19, 19, + 126, 10, 0, 0, 19, 19, 68, 37, 60, 0, 0, 0, 24, 0, 0, 0, 40, 0, 0, 0, 40, 0, 0, 0, @@ -208,136 +208,136 @@ const BYTE tessellation_adaptive_vs[] = 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, - 156, 7, 0, 0, 168, 0, + 158, 7, 0, 0, 168, 0, 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, 179, 7, + 0, 0, 0, 0, 197, 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, 212, 7, 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, - 228, 7, 0, 0, 184, 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, 249, 7, + 0, 0, 0, 0, 11, 8, 0, 0, 192, 0, 0, 0, 32, 0, 0, 0, 0, 0, - 0, 0, 28, 8, 0, 0, + 0, 0, 44, 8, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, - 0, 0, 64, 8, 0, 0, + 0, 0, 80, 8, 0, 0, 224, 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, - 85, 8, 0, 0, 228, 0, + 101, 8, 0, 0, 228, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 52, 7, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 109, 8, + 0, 0, 0, 0, 125, 8, 0, 0, 232, 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, 126, 8, 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, - 166, 8, 0, 0, 240, 0, + 182, 8, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, - 0, 0, 0, 0, 184, 8, + 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, 220, 8, + 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, 247, 8, 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, - 17, 9, 0, 0, 16, 1, + 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, 51, 9, + 0, 0, 0, 0, 67, 9, 0, 0, 32, 1, 0, 0, 32, 0, 0, 0, 0, 0, - 0, 0, 68, 9, 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, 104, 9, 0, 0, + 0, 0, 120, 9, 0, 0, 64, 1, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, - 136, 9, 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, - 172, 9, 0, 0, 80, 1, + 188, 9, 0, 0, 80, 1, 0, 0, 16, 0, 0, 0, - 0, 0, 0, 0, 136, 9, + 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, 197, 9, + 0, 0, 0, 0, 213, 9, 0, 0, 96, 1, 0, 0, 64, 0, 0, 0, 0, 0, - 0, 0, 216, 9, 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, 252, 9, 0, 0, + 0, 0, 12, 10, 0, 0, 160, 1, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, - 20, 10, 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, - 56, 10, 0, 0, 192, 1, + 72, 10, 0, 0, 192, 1, 0, 0, 16, 0, 0, 0, - 0, 0, 0, 0, 136, 9, + 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, 86, 10, + 0, 0, 0, 0, 102, 10, 0, 0, 208, 1, 0, 0, 16, 0, 0, 0, 0, 0, - 0, 0, 184, 8, 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, @@ -427,12 +427,15 @@ const BYTE tessellation_adaptive_vs[] = 97, 120, 0, 120, 101, 95, 112, 111, 105, 110, 116, 95, 99, 111, 110, 115, 116, 97, - 110, 116, 95, 114, 97, 100, - 105, 117, 115, 0, 120, 101, - 95, 112, 111, 105, 110, 116, - 95, 115, 99, 114, 101, 101, - 110, 95, 116, 111, 95, 110, - 100, 99, 0, 120, 101, 95, + 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, @@ -449,232 +452,231 @@ const BYTE tessellation_adaptive_vs[] = 115, 119, 105, 122, 122, 108, 101, 100, 95, 115, 105, 103, 110, 115, 0, 117, 105, 110, - 116, 52, 0, 171, 171, 171, + 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, 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, 19, 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, + 0, 0, 37, 8, 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, 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, - 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, 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, 19, 8, - 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, - 19, 8, 0, 0, 120, 101, + 172, 6, 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, + 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, - 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, 19, 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, 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, + 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, 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, 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, 0, 0, 6, 0, 0, 0, 1, 0, 0, 0, - 2, 0, 0, 0, 3, 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, - 60, 0, 0, 7, 50, 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, 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, + 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, - 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, + 85, 0, 0, 7, 66, 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, + 8, 0, 0, 0, 1, 0, + 0, 10, 82, 0, 16, 0, + 0, 0, 0, 0, 6, 2, 16, 0, 0, 0, 0, 0, - 21, 0, 0, 1, 0, 0, - 0, 7, 18, 0, 16, 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, - 1, 64, 0, 0, 0, 0, - 128, 63, 52, 0, 0, 9, + 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, 18, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 0, - 0, 0, 0, 0, 26, 128, - 48, 0, 0, 0, 0, 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, 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, + 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, 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, 0, 0, - 1, 0, 0, 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, @@ -685,5 +687,6 @@ 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 }; diff --git a/src/xenia/gpu/shaders/bytecode/d3d12_5_1/tessellation_indexed_vs.h b/src/xenia/gpu/shaders/bytecode/d3d12_5_1/tessellation_indexed_vs.h index 6646f5076..d8e448333 100644 --- a/src/xenia/gpu/shaders/bytecode/d3d12_5_1/tessellation_indexed_vs.h +++ b/src/xenia/gpu/shaders/bytecode/d3d12_5_1/tessellation_indexed_vs.h @@ -19,8 +19,8 @@ // float xe_point_vertex_diameter_min;// Offset: 140 Size: 4 [unused] // float3 xe_ndc_offset; // Offset: 144 Size: 12 [unused] // float xe_point_vertex_diameter_max;// Offset: 156 Size: 4 [unused] -// float2 xe_point_constant_radius; // Offset: 160 Size: 8 [unused] -// float2 xe_point_screen_to_ndc; // Offset: 168 Size: 8 [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] @@ -96,21 +96,21 @@ ret const BYTE tessellation_indexed_vs[] = { - 68, 88, 66, 67, 188, 215, - 146, 114, 163, 91, 37, 43, - 43, 60, 196, 54, 82, 23, - 130, 140, 1, 0, 0, 0, - 20, 14, 0, 0, 5, 0, + 68, 88, 66, 67, 147, 89, + 233, 26, 127, 143, 37, 15, + 206, 150, 85, 19, 220, 93, + 185, 243, 1, 0, 0, 0, + 36, 14, 0, 0, 5, 0, 0, 0, 52, 0, 0, 0, - 212, 10, 0, 0, 8, 11, - 0, 0, 60, 11, 0, 0, - 120, 13, 0, 0, 82, 68, - 69, 70, 152, 10, 0, 0, + 228, 10, 0, 0, 24, 11, + 0, 0, 76, 11, 0, 0, + 136, 13, 0, 0, 82, 68, + 69, 70, 168, 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, - 110, 10, 0, 0, 19, 19, + 126, 10, 0, 0, 19, 19, 68, 37, 60, 0, 0, 0, 24, 0, 0, 0, 40, 0, 0, 0, 40, 0, 0, 0, @@ -210,136 +210,136 @@ const BYTE tessellation_indexed_vs[] = 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, - 156, 7, 0, 0, 168, 0, + 158, 7, 0, 0, 168, 0, 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, 179, 7, + 0, 0, 0, 0, 197, 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, 212, 7, 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, - 228, 7, 0, 0, 184, 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, 249, 7, + 0, 0, 0, 0, 11, 8, 0, 0, 192, 0, 0, 0, 32, 0, 0, 0, 0, 0, - 0, 0, 28, 8, 0, 0, + 0, 0, 44, 8, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, - 0, 0, 64, 8, 0, 0, + 0, 0, 80, 8, 0, 0, 224, 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, - 85, 8, 0, 0, 228, 0, + 101, 8, 0, 0, 228, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 52, 7, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 109, 8, + 0, 0, 0, 0, 125, 8, 0, 0, 232, 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, 126, 8, 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, - 166, 8, 0, 0, 240, 0, + 182, 8, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, - 0, 0, 0, 0, 184, 8, + 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, 220, 8, + 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, 247, 8, 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, - 17, 9, 0, 0, 16, 1, + 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, 51, 9, + 0, 0, 0, 0, 67, 9, 0, 0, 32, 1, 0, 0, 32, 0, 0, 0, 0, 0, - 0, 0, 68, 9, 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, 104, 9, 0, 0, + 0, 0, 120, 9, 0, 0, 64, 1, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, - 136, 9, 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, - 172, 9, 0, 0, 80, 1, + 188, 9, 0, 0, 80, 1, 0, 0, 16, 0, 0, 0, - 0, 0, 0, 0, 136, 9, + 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, 197, 9, + 0, 0, 0, 0, 213, 9, 0, 0, 96, 1, 0, 0, 64, 0, 0, 0, 0, 0, - 0, 0, 216, 9, 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, 252, 9, 0, 0, + 0, 0, 12, 10, 0, 0, 160, 1, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, - 20, 10, 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, - 56, 10, 0, 0, 192, 1, + 72, 10, 0, 0, 192, 1, 0, 0, 16, 0, 0, 0, - 0, 0, 0, 0, 136, 9, + 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, 86, 10, + 0, 0, 0, 0, 102, 10, 0, 0, 208, 1, 0, 0, 16, 0, 0, 0, 0, 0, - 0, 0, 184, 8, 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, @@ -429,12 +429,15 @@ const BYTE tessellation_indexed_vs[] = 97, 120, 0, 120, 101, 95, 112, 111, 105, 110, 116, 95, 99, 111, 110, 115, 116, 97, - 110, 116, 95, 114, 97, 100, - 105, 117, 115, 0, 120, 101, - 95, 112, 111, 105, 110, 116, - 95, 115, 99, 114, 101, 101, - 110, 95, 116, 111, 95, 110, - 100, 99, 0, 120, 101, 95, + 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, @@ -451,242 +454,242 @@ const BYTE tessellation_indexed_vs[] = 115, 119, 105, 122, 122, 108, 101, 100, 95, 115, 105, 103, 110, 115, 0, 117, 105, 110, - 116, 52, 0, 171, 171, 171, + 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, 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, 19, 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, + 0, 0, 37, 8, 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, 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, - 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, 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, 19, 8, - 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, - 19, 8, 0, 0, 120, 101, + 172, 6, 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, + 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, - 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, 19, 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, 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, + 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, 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, 14, - 0, 0, 88, 69, 86, 69, - 82, 84, 69, 88, 73, 68, - 0, 171, 83, 72, 69, 88, - 52, 2, 0, 0, 81, 0, - 1, 0, 141, 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, 0, 0, 6, 0, 0, 0, 1, 0, 0, 0, - 2, 64, 0, 0, 1, 0, - 0, 0, 2, 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, + 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, 60, 0, 0, 7, - 50, 0, 16, 0, 0, 0, - 0, 0, 150, 5, 16, 0, - 0, 0, 0, 0, 70, 0, + 0, 0, 1, 14, 0, 0, + 88, 69, 86, 69, 82, 84, + 69, 88, 73, 68, 0, 171, + 83, 72, 69, 88, 52, 2, + 0, 0, 81, 0, 1, 0, + 141, 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, - 31, 0, 4, 3, 10, 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, - 41, 0, 0, 7, 18, 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, - 10, 16, 16, 0, 0, 0, - 0, 0, 1, 64, 0, 0, - 8, 0, 0, 0, 85, 0, - 0, 7, 66, 0, 16, 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, 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, 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, + 66, 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, 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, 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, - 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, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 26, 0, 16, 0, 0, 0, 0, 0, - 26, 0, 16, 0, 0, 0, - 0, 0, 21, 0, 0, 1, - 30, 0, 0, 9, 18, 0, + 21, 0, 0, 1, 30, 0, + 0, 9, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, 16, 0, 0, 0, 0, 0, - 10, 0, 16, 0, 0, 0, - 0, 0, 26, 128, 48, 0, + 26, 128, 48, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 255, 0, 83, 0, 0, 9, + 18, 0, 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, 1, 0, + 0, 0, 84, 0, 0, 9, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 58, 128, + 48, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 86, 0, 0, 5, + 18, 32, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 62, 0, + 0, 1, 83, 84, 65, 84, + 148, 0, 0, 0, 20, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 7, 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, 0, 0, 1, 0, 0, 0, - 1, 0, 0, 7, 18, 0, - 16, 0, 0, 0, 0, 0, - 10, 0, 16, 0, 0, 0, - 0, 0, 1, 64, 0, 0, - 255, 255, 255, 0, 83, 0, - 0, 9, 18, 0, 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, - 1, 0, 0, 0, 84, 0, - 0, 9, 18, 0, 16, 0, - 0, 0, 0, 0, 10, 0, - 16, 0, 0, 0, 0, 0, - 58, 128, 48, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 86, 0, - 0, 5, 18, 32, 16, 0, - 0, 0, 0, 0, 10, 0, - 16, 0, 0, 0, 0, 0, - 62, 0, 0, 1, 83, 84, - 65, 84, 148, 0, 0, 0, - 20, 0, 0, 0, 1, 0, - 0, 0, 0, 0, 0, 0, - 2, 0, 0, 0, 0, 0, - 0, 0, 4, 0, 0, 0, - 7, 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, 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, @@ -696,5 +699,5 @@ const BYTE tessellation_indexed_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 }; diff --git a/src/xenia/gpu/shaders/primitive_point_list.gs.hlsl b/src/xenia/gpu/shaders/primitive_point_list.gs.hlsl deleted file mode 100644 index d5e7cbf14..000000000 --- a/src/xenia/gpu/shaders/primitive_point_list.gs.hlsl +++ /dev/null @@ -1,61 +0,0 @@ -#include "xenos_draw.hlsli" - -// TODO(Triang3l): Figure out how to see which interpolator gets adjusted. - -[maxvertexcount(4)] -void main(point XeVertexPreGS xe_in[1], - inout TriangleStream xe_stream) { - // TODO(Triang3l): Handle ps_ucp_mode. - if (xe_in[0].cull_distance < 0.0 || any(isnan(xe_in[0].post_gs.position))) { - return; - } - - // The vertex shader's header writes -1.0f to point_size by default, so any - // non-negative value means that it was overwritten by the translated vertex - // shader. - float2 point_radius = xe_point_constant_radius; - float point_vertex_diameter = xe_in[0].post_gs.pre_ps.point_params.z; - if (point_vertex_diameter >= 0.0) { - // Already clamped in the vertex shader (combined with making it - // non-negative). - point_radius = point_vertex_diameter * 0.5; - } - if (!all(point_radius > 0.0)) { - // 4D5307F1 has zero-size snowflakes, drop them quicker. - return; - } - point_radius *= xe_point_screen_to_ndc; - point_radius *= xe_in[0].post_gs.position.w; - - XeVertexPostGS xe_out; - xe_out.pre_ps.interpolators = xe_in[0].post_gs.pre_ps.interpolators; - xe_out.pre_ps.point_params.z = xe_in[0].post_gs.pre_ps.point_params.z; - xe_out.position.zw = xe_in[0].post_gs.position.zw; - // TODO(Triang3l): Handle ps_ucp_mode. - xe_out.clip_distance_0123 = xe_in[0].post_gs.clip_distance_0123; - xe_out.clip_distance_45 = xe_in[0].post_gs.clip_distance_45; - - // V = 0 in the top (+Y in Direct3D), 1 in the bottom, according to the - // analysis of Adreno 200 behavior (V = 1 towards -gl_FragCoord.y, the bottom, - // but the top-left rule is used for rasterization, and gl_FragCoord is - // generated from |PsParamGen.xy| via multiply-addition as opposed to just - // addition, so -gl_FragCoord.y is likely positive in screen coordinates, or - // +|PsParamGen.y|). - // TODO(Triang3l): On Vulkan, sign of Y needs to inverted because of the - // upper-left origin. - xe_out.pre_ps.point_params.xy = float2(0.0, 0.0); - xe_out.position.xy = - xe_in[0].post_gs.position.xy + float2(-point_radius.x, point_radius.y); - xe_stream.Append(xe_out); - xe_out.pre_ps.point_params.xy = float2(0.0, 1.0); - xe_out.position.xy = xe_in[0].post_gs.position.xy - point_radius; - xe_stream.Append(xe_out); - xe_out.pre_ps.point_params.xy = float2(1.0, 0.0); - xe_out.position.xy = xe_in[0].post_gs.position.xy + point_radius; - xe_stream.Append(xe_out); - xe_out.pre_ps.point_params.xy = float2(1.0, 1.0); - xe_out.position.xy = - xe_in[0].post_gs.position.xy + float2(point_radius.x, -point_radius.y); - xe_stream.Append(xe_out); - xe_stream.RestartStrip(); -} diff --git a/src/xenia/gpu/shaders/primitive_quad_list.gs.hlsl b/src/xenia/gpu/shaders/primitive_quad_list.gs.hlsl deleted file mode 100644 index 874ee4247..000000000 --- a/src/xenia/gpu/shaders/primitive_quad_list.gs.hlsl +++ /dev/null @@ -1,23 +0,0 @@ -#include "xenos_draw.hlsli" - -[maxvertexcount(4)] -void main(lineadj XeVertexPreGS xe_in[4], - inout TriangleStream xe_stream) { - // Culling should probably be done per-triangle - while there's no - // RETAIN_QUADS on Adreno 2xx, on R6xx it's always disabled for - // non-tessellated quads, so they are always decomposed into triangles. - // Therefore, not doing any cull distance or NaN position checks here. - // TODO(Triang3l): Find whether vertex killing should actually work for each - // triangle or for the entire quad. - // TODO(Triang3l): Find the correct order. - XeVertexPostGS xe_out; - xe_out = xe_in[0].post_gs; - xe_stream.Append(xe_out); - xe_out = xe_in[1].post_gs; - xe_stream.Append(xe_out); - xe_out = xe_in[3].post_gs; - xe_stream.Append(xe_out); - xe_out = xe_in[2].post_gs; - xe_stream.Append(xe_out); - xe_stream.RestartStrip(); -} diff --git a/src/xenia/gpu/shaders/primitive_rectangle_list.gs.hlsl b/src/xenia/gpu/shaders/primitive_rectangle_list.gs.hlsl deleted file mode 100644 index 13d16d60d..000000000 --- a/src/xenia/gpu/shaders/primitive_rectangle_list.gs.hlsl +++ /dev/null @@ -1,103 +0,0 @@ -#include "xenos_draw.hlsli" - -[maxvertexcount(6)] -void main(triangle XeVertexPreGS xe_in[3], - inout TriangleStream xe_stream) { - if (max(max(xe_in[0].cull_distance, xe_in[1].cull_distance), - xe_in[2].cull_distance) < 0.0f || - any(isnan(xe_in[0].post_gs.position)) || - any(isnan(xe_in[1].post_gs.position)) || - any(isnan(xe_in[2].post_gs.position))) { - return; - } - - XeVertexPostGS xe_out; - - xe_out = xe_in[0].post_gs; - xe_stream.Append(xe_out); - xe_out = xe_in[1].post_gs; - xe_stream.Append(xe_out); - xe_out = xe_in[2].post_gs; - xe_stream.Append(xe_out); - xe_stream.RestartStrip(); - - // Find the diagonal (the edge that is longer than both the other two) and - // mirror the other vertex across it. - float3 edge_01 = - xe_in[1].post_gs.position.xyz - xe_in[0].post_gs.position.xyz; - float3 edge_02 = - xe_in[2].post_gs.position.xyz - xe_in[0].post_gs.position.xyz; - float3 edge_12 = - xe_in[2].post_gs.position.xyz - xe_in[1].post_gs.position.xyz; - float3 edge_squares = float3( - dot(edge_01, edge_01), dot(edge_02, edge_02), dot(edge_12, edge_12)); - float3 v3_signs; - if (edge_squares.z > edge_squares.x && edge_squares.z > edge_squares.y) { - // 12 is the diagonal. Most games use this form. - // - // 0 ------ 1 0: -1,-1 - // | - | 1: 1,-1 - // | // | 2: -1, 1 - // | - | 3: [ 1, 1 ] - // 2 ----- [3] - // - // 0 ------ 2 0: -1,-1 - // | - | 1: -1, 1 - // | // | 2: 1,-1 - // | - | 3: [ 1, 1 ] - // 1 ------[3] - xe_out = xe_in[2].post_gs; - xe_stream.Append(xe_out); - xe_out = xe_in[1].post_gs; - xe_stream.Append(xe_out); - v3_signs = float3(-1.0f, 1.0f, 1.0f); - } else if (edge_squares.y > edge_squares.x && - edge_squares.y > edge_squares.z) { - // 02 is the diagonal. - // - // 0 ------ 1 0: -1,-1 - // | - | 1: 1,-1 - // | \\ | 2: 1, 1 - // | - | 3: [-1, 1 ] - // [3] ----- 2 - xe_out = xe_in[0].post_gs; - xe_stream.Append(xe_out); - xe_out = xe_in[2].post_gs; - xe_stream.Append(xe_out); - v3_signs = float3(1.0f, -1.0f, 1.0f); - } else { - // 01 is the diagonal. Not seen in any game so far. - // - // 0 ------ 2 0: -1,-1 - // | - | 1: 1, 1 - // | \\ | 2: 1,-1 - // | - | 3: [-1, 1 ] - // [3] ----- 1 - xe_out = xe_in[1].post_gs; - xe_stream.Append(xe_out); - xe_out = xe_in[0].post_gs; - xe_stream.Append(xe_out); - v3_signs = float3(1.0f, 1.0f, -1.0f); - } - [unroll] for (int i = 0; i < 16; ++i) { - xe_out.pre_ps.interpolators[i] = - v3_signs.x * xe_in[0].post_gs.pre_ps.interpolators[i] + - v3_signs.y * xe_in[1].post_gs.pre_ps.interpolators[i] + - v3_signs.z * xe_in[2].post_gs.pre_ps.interpolators[i]; - } - xe_out.pre_ps.point_params = - v3_signs.x * xe_in[0].post_gs.pre_ps.point_params + - v3_signs.y * xe_in[1].post_gs.pre_ps.point_params + - v3_signs.z * xe_in[2].post_gs.pre_ps.point_params; - xe_out.position = v3_signs.x * xe_in[0].post_gs.position + - v3_signs.y * xe_in[1].post_gs.position + - v3_signs.z * xe_in[2].post_gs.position; - xe_out.clip_distance_0123 = v3_signs.x * xe_in[0].post_gs.clip_distance_0123 + - v3_signs.y * xe_in[1].post_gs.clip_distance_0123 + - v3_signs.z * xe_in[2].post_gs.clip_distance_0123; - xe_out.clip_distance_45 = v3_signs.x * xe_in[0].post_gs.clip_distance_45 + - v3_signs.y * xe_in[1].post_gs.clip_distance_45 + - v3_signs.z * xe_in[2].post_gs.clip_distance_45; - xe_stream.Append(xe_out); - xe_stream.RestartStrip(); -} diff --git a/src/xenia/gpu/shaders/xenos_draw.hlsli b/src/xenia/gpu/shaders/xenos_draw.hlsli index 2087c0f3e..53843e83e 100644 --- a/src/xenia/gpu/shaders/xenos_draw.hlsli +++ b/src/xenia/gpu/shaders/xenos_draw.hlsli @@ -18,8 +18,8 @@ cbuffer xe_system_cbuffer : register(b0) { float3 xe_ndc_offset; float xe_point_vertex_diameter_max; - float2 xe_point_constant_radius; - float2 xe_point_screen_to_ndc; + float2 xe_point_constant_diameter; + float2 xe_point_screen_diameter_to_ndc_radius; uint xe_interpolator_sampling_pattern; uint xe_ps_param_gen; @@ -70,7 +70,7 @@ struct XeHSControlPointOutput { struct XeVertexPrePS { float4 interpolators[16] : TEXCOORD0; - float3 point_params : TEXCOORD16; + float3 point_parameters : TEXCOORD16; }; struct XeVertexPostGS { diff --git a/src/xenia/gpu/trace_player.cc b/src/xenia/gpu/trace_player.cc index a141c9b8d..b1aa8f615 100644 --- a/src/xenia/gpu/trace_player.cc +++ b/src/xenia/gpu/trace_player.cc @@ -9,8 +9,11 @@ #include "xenia/gpu/trace_player.h" +#include + #include "xenia/gpu/command_processor.h" #include "xenia/gpu/graphics_system.h" +#include "xenia/gpu/registers.h" #include "xenia/gpu/xenos.h" #include "xenia/memory.h" @@ -33,8 +36,6 @@ TracePlayer::TracePlayer(GraphicsSystem* graphics_system) assert_not_null(playback_event_); } -TracePlayer::~TracePlayer() { delete[] edram_snapshot_; } - const TraceReader::Frame* TracePlayer::current_frame() const { if (current_frame_index_ >= frame_count()) { return nullptr; @@ -197,13 +198,12 @@ void TracePlayer::PlayTraceOnThread(const uint8_t* trace_data, case TraceCommandType::kEdramSnapshot: { auto cmd = reinterpret_cast(trace_ptr); trace_ptr += sizeof(*cmd); - if (!edram_snapshot_) { - edram_snapshot_ = new uint8_t[xenos::kEdramSizeBytes]; - } + std::unique_ptr edram_snapshot( + new uint8_t[xenos::kEdramSizeBytes]); DecompressMemory(cmd->encoding_format, trace_ptr, cmd->encoded_length, - edram_snapshot_, xenos::kEdramSizeBytes); + edram_snapshot.get(), xenos::kEdramSizeBytes); trace_ptr += cmd->encoded_length; - command_processor->RestoreEdramSnapshot(edram_snapshot_); + command_processor->RestoreEdramSnapshot(edram_snapshot.get()); break; } case TraceCommandType::kEvent: { @@ -219,6 +219,34 @@ void TracePlayer::PlayTraceOnThread(const uint8_t* trace_data, } break; } + case TraceCommandType::kRegisters: { + auto cmd = reinterpret_cast(trace_ptr); + trace_ptr += sizeof(*cmd); + std::unique_ptr register_values( + new uint32_t[cmd->register_count]); + DecompressMemory(cmd->encoding_format, trace_ptr, cmd->encoded_length, + register_values.get(), + sizeof(uint32_t) * cmd->register_count); + trace_ptr += cmd->encoded_length; + command_processor->RestoreRegisters( + cmd->first_register, register_values.get(), cmd->register_count, + cmd->execute_callbacks); + break; + } + case TraceCommandType::kGammaRamp: { + auto cmd = reinterpret_cast(trace_ptr); + trace_ptr += sizeof(*cmd); + std::unique_ptr gamma_ramps(new uint32_t[256 + 3 * 128]); + DecompressMemory(cmd->encoding_format, trace_ptr, cmd->encoded_length, + gamma_ramps.get(), sizeof(uint32_t) * (256 + 3 * 128)); + trace_ptr += cmd->encoded_length; + command_processor->RestoreGammaRamp( + reinterpret_cast(gamma_ramps.get()), + reinterpret_cast(gamma_ramps.get() + + 256), + cmd->rw_component); + break; + } } } diff --git a/src/xenia/gpu/trace_player.h b/src/xenia/gpu/trace_player.h index cfc2702a1..4bb5fdd2c 100644 --- a/src/xenia/gpu/trace_player.h +++ b/src/xenia/gpu/trace_player.h @@ -30,7 +30,6 @@ enum class TracePlaybackMode { class TracePlayer : public TraceReader { public: TracePlayer(GraphicsSystem* graphics_system); - ~TracePlayer() override; GraphicsSystem* graphics_system() const { return graphics_system_; } void SetPresentLastCopy(bool present_last_copy) { @@ -66,7 +65,6 @@ class TracePlayer : public TraceReader { bool playing_trace_ = false; std::atomic playback_percent_ = {0}; std::unique_ptr playback_event_; - uint8_t* edram_snapshot_ = nullptr; }; } // namespace gpu diff --git a/src/xenia/gpu/trace_protocol.h b/src/xenia/gpu/trace_protocol.h index b29ecfb7e..be881ef2b 100644 --- a/src/xenia/gpu/trace_protocol.h +++ b/src/xenia/gpu/trace_protocol.h @@ -53,6 +53,8 @@ enum class TraceCommandType : uint32_t { kMemoryWrite, kEdramSnapshot, kEvent, + kRegisters, + kGammaRamp, }; struct PrimaryBufferStartCommand { @@ -134,6 +136,40 @@ struct EventCommand { Type event_type; }; +// Represents a range of registers. +struct RegistersCommand { + TraceCommandType type; + + uint32_t first_register; + uint32_t register_count; + // Whether to set the registers via WriteRegister, which may have side + // effects, rather than by copying them directly to the register file. + bool execute_callbacks; + + // Encoding format of the values in the trace file. + MemoryEncodingFormat encoding_format; + // Number of bytes the values occupy in the trace file in their encoded form. + // If no encoding is used, this will be sizeof(uint32_t) * register_count. + uint32_t encoded_length; +}; + +// Represents a gamma ramp - encoded 256 DC_LUT_30_COLOR values and 128 +// interleaved RGB DC_LUT_PWL_DATA values. +// Assuming that all other gamma ramp state is saved as plain registers. +struct GammaRampCommand { + TraceCommandType type; + + // The component index (0 = red, 1 = green, 2 = blue) for the next + // DC_LUT_SEQ_COLOR or DC_LUT_PWL_DATA read or write. + uint8_t rw_component; + + // Encoding format of the ramps in the trace file. + MemoryEncodingFormat encoding_format; + // Number of bytes the ramps occupy in the trace file in their encoded form. + // If no encoding is used, this will be sizeof(uint32_t) * (256 + 3 * 128). + uint32_t encoded_length; +}; + } // namespace gpu } // namespace xe diff --git a/src/xenia/gpu/trace_reader.cc b/src/xenia/gpu/trace_reader.cc index 0f25b710a..6c20c79ec 100644 --- a/src/xenia/gpu/trace_reader.cc +++ b/src/xenia/gpu/trace_reader.cc @@ -205,6 +205,16 @@ void TraceReader::ParseTrace() { } break; } + case TraceCommandType::kRegisters: { + auto cmd = reinterpret_cast(trace_ptr); + trace_ptr += sizeof(*cmd) + cmd->encoded_length; + break; + } + case TraceCommandType::kGammaRamp: { + auto cmd = reinterpret_cast(trace_ptr); + trace_ptr += sizeof(*cmd) + cmd->encoded_length; + break; + } default: // Broken trace file? assert_unhandled_case(type); @@ -218,8 +228,8 @@ void TraceReader::ParseTrace() { } bool TraceReader::DecompressMemory(MemoryEncodingFormat encoding_format, - const uint8_t* src, size_t src_size, - uint8_t* dest, size_t dest_size) { + const void* src, size_t src_size, void* dest, + size_t dest_size) { switch (encoding_format) { case MemoryEncodingFormat::kNone: assert_true(src_size == dest_size); diff --git a/src/xenia/gpu/trace_reader.h b/src/xenia/gpu/trace_reader.h index 7480d3e4a..7ee65a283 100644 --- a/src/xenia/gpu/trace_reader.h +++ b/src/xenia/gpu/trace_reader.h @@ -20,36 +20,6 @@ namespace xe { namespace gpu { -// void Foo() { -// auto trace_ptr = trace_data; -// while (trace_ptr < trace_data + trace_size) { -// auto cmd_type = *reinterpret_cast(trace_ptr); -// switch (cmd_type) { -// case TraceCommandType::kPrimaryBufferStart: -// break; -// case TraceCommandType::kPrimaryBufferEnd: -// break; -// case TraceCommandType::kIndirectBufferStart: -// break; -// case TraceCommandType::kIndirectBufferEnd: -// break; -// case TraceCommandType::kPacketStart: -// break; -// case TraceCommandType::kPacketEnd: -// break; -// case TraceCommandType::kMemoryRead: -// break; -// case TraceCommandType::kMemoryWrite: -// break; -// case TraceCommandType::kEvent: -// break; -// } -// /*trace_ptr = graphics_system->PlayTrace( -// trace_ptr, trace_size - (trace_ptr - trace_data), -// GraphicsSystem::TracePlaybackMode::kBreakOnSwap);*/ -// } -//} - class TraceReader { public: struct CommandBuffer { @@ -135,9 +105,8 @@ class TraceReader { protected: void ParseTrace(); - bool DecompressMemory(MemoryEncodingFormat encoding_format, - const uint8_t* src, size_t src_size, uint8_t* dest, - size_t dest_size); + bool DecompressMemory(MemoryEncodingFormat encoding_format, const void* src, + size_t src_size, void* dest, size_t dest_size); std::unique_ptr mmap_; const uint8_t* trace_data_ = nullptr; diff --git a/src/xenia/gpu/trace_viewer.cc b/src/xenia/gpu/trace_viewer.cc index 660f24805..a4733ecbf 100644 --- a/src/xenia/gpu/trace_viewer.cc +++ b/src/xenia/gpu/trace_viewer.cc @@ -408,6 +408,18 @@ void TraceViewer::DrawPacketDisassemblerUI() { } break; } + case TraceCommandType::kRegisters: { + auto cmd = reinterpret_cast(trace_ptr); + trace_ptr += sizeof(*cmd) + cmd->encoded_length; + // ImGui::BulletText("Registers"); + break; + } + case TraceCommandType::kGammaRamp: { + auto cmd = reinterpret_cast(trace_ptr); + trace_ptr += sizeof(*cmd) + cmd->encoded_length; + // ImGui::BulletText("GammaRamp"); + break; + } } } ImGui::EndChild(); diff --git a/src/xenia/gpu/trace_writer.cc b/src/xenia/gpu/trace_writer.cc index 96c287318..b83e21868 100644 --- a/src/xenia/gpu/trace_writer.cc +++ b/src/xenia/gpu/trace_writer.cc @@ -10,6 +10,7 @@ #include "xenia/gpu/trace_writer.h" #include +#include #include "third_party/snappy/snappy-sinksource.h" #include "third_party/snappy/snappy.h" @@ -19,6 +20,7 @@ #include "xenia/base/filesystem.h" #include "xenia/base/logging.h" #include "xenia/base/string.h" +#include "xenia/gpu/registers.h" #include "xenia/gpu/xenos.h" namespace xe { @@ -194,7 +196,7 @@ class SnappySink : public snappy::Sink { void TraceWriter::WriteMemoryCommand(TraceCommandType type, uint32_t base_ptr, size_t length, const void* host_ptr) { - MemoryCommand cmd; + MemoryCommand cmd = {}; cmd.type = type; cmd.base_ptr = base_ptr; cmd.encoding_format = MemoryEncodingFormat::kNone; @@ -232,8 +234,9 @@ void TraceWriter::WriteMemoryCommand(TraceCommandType type, uint32_t base_ptr, } void TraceWriter::WriteEdramSnapshot(const void* snapshot) { - EdramSnapshotCommand cmd; + EdramSnapshotCommand cmd = {}; cmd.type = TraceCommandType::kEdramSnapshot; + if (compress_output_) { // Write the header now so we reserve space in the buffer. long header_position = std::ftell(file_); @@ -272,5 +275,93 @@ void TraceWriter::WriteEvent(EventCommand::Type event_type) { fwrite(&cmd, 1, sizeof(cmd), file_); } +void TraceWriter::WriteRegisters(uint32_t first_register, + const uint32_t* register_values, + uint32_t register_count, + bool execute_callbacks_on_play) { + RegistersCommand cmd = {}; + cmd.type = TraceCommandType::kRegisters; + cmd.first_register = first_register; + cmd.register_count = register_count; + cmd.execute_callbacks = execute_callbacks_on_play; + + uint32_t uncompressed_length = uint32_t(sizeof(uint32_t) * register_count); + if (compress_output_) { + // Write the header now so we reserve space in the buffer. + long header_position = std::ftell(file_); + cmd.encoding_format = MemoryEncodingFormat::kSnappy; + fwrite(&cmd, 1, sizeof(cmd), file_); + + // Stream the content right to the buffer. + snappy::ByteArraySource snappy_source( + reinterpret_cast(register_values), uncompressed_length); + SnappySink snappy_sink(file_); + cmd.encoded_length = + static_cast(snappy::Compress(&snappy_source, &snappy_sink)); + + // Seek back and overwrite the header with our final size. + std::fseek(file_, header_position, SEEK_SET); + fwrite(&cmd, 1, sizeof(cmd), file_); + std::fseek(file_, header_position + sizeof(cmd) + cmd.encoded_length, + SEEK_SET); + } else { + // Uncompressed - write the values directly to the file. + cmd.encoding_format = MemoryEncodingFormat::kNone; + cmd.encoded_length = uncompressed_length; + fwrite(&cmd, 1, sizeof(cmd), file_); + fwrite(register_values, 1, uncompressed_length, file_); + } +} + +void TraceWriter::WriteGammaRamp( + const reg::DC_LUT_30_COLOR* gamma_ramp_256_entry_table, + const reg::DC_LUT_PWL_DATA* gamma_ramp_pwl_rgb, + uint32_t gamma_ramp_rw_component) { + GammaRampCommand cmd = {}; + cmd.type = TraceCommandType::kGammaRamp; + cmd.rw_component = uint8_t(gamma_ramp_rw_component); + + constexpr uint32_t k256EntryTableUncompressedLength = + sizeof(reg::DC_LUT_30_COLOR) * 256; + constexpr uint32_t kPWLUncompressedLength = + sizeof(reg::DC_LUT_PWL_DATA) * 3 * 128; + constexpr uint32_t kUncompressedLength = + k256EntryTableUncompressedLength + kPWLUncompressedLength; + if (compress_output_) { + // Write the header now so we reserve space in the buffer. + long header_position = std::ftell(file_); + cmd.encoding_format = MemoryEncodingFormat::kSnappy; + fwrite(&cmd, 1, sizeof(cmd), file_); + + // Stream the content right to the buffer. + { + std::unique_ptr gamma_ramps(new char[kUncompressedLength]); + std::memcpy(gamma_ramps.get(), gamma_ramp_256_entry_table, + k256EntryTableUncompressedLength); + std::memcpy(gamma_ramps.get() + k256EntryTableUncompressedLength, + gamma_ramp_pwl_rgb, kPWLUncompressedLength); + snappy::ByteArraySource snappy_source(gamma_ramps.get(), + kUncompressedLength); + SnappySink snappy_sink(file_); + cmd.encoded_length = + static_cast(snappy::Compress(&snappy_source, &snappy_sink)); + } + + // Seek back and overwrite the header with our final size. + std::fseek(file_, header_position, SEEK_SET); + fwrite(&cmd, 1, sizeof(cmd), file_); + std::fseek(file_, header_position + sizeof(cmd) + cmd.encoded_length, + SEEK_SET); + } else { + // Uncompressed - write the values directly to the file. + cmd.encoding_format = MemoryEncodingFormat::kNone; + cmd.encoded_length = kUncompressedLength; + fwrite(&cmd, 1, sizeof(cmd), file_); + fwrite(gamma_ramp_256_entry_table, 1, k256EntryTableUncompressedLength, + file_); + fwrite(gamma_ramp_pwl_rgb, 1, kPWLUncompressedLength, file_); + } +} + } // namespace gpu } // namespace xe diff --git a/src/xenia/gpu/trace_writer.h b/src/xenia/gpu/trace_writer.h index 03e30185a..407166068 100644 --- a/src/xenia/gpu/trace_writer.h +++ b/src/xenia/gpu/trace_writer.h @@ -14,6 +14,7 @@ #include #include +#include "xenia/gpu/registers.h" #include "xenia/gpu/trace_protocol.h" namespace xe { @@ -44,6 +45,11 @@ class TraceWriter { const void* host_ptr = nullptr); void WriteEdramSnapshot(const void* snapshot); void WriteEvent(EventCommand::Type event_type); + void WriteRegisters(uint32_t first_register, const uint32_t* register_values, + uint32_t register_count, bool execute_callbacks_on_play); + void WriteGammaRamp(const reg::DC_LUT_30_COLOR* gamma_ramp_256_entry_table, + const reg::DC_LUT_PWL_DATA* gamma_ramp_pwl_rgb, + uint32_t gamma_ramp_rw_component); private: void WriteMemoryCommand(TraceCommandType type, uint32_t base_ptr, diff --git a/src/xenia/gpu/vulkan/vulkan_command_processor.cc b/src/xenia/gpu/vulkan/vulkan_command_processor.cc index f4bbeaade..58e27d997 100644 --- a/src/xenia/gpu/vulkan/vulkan_command_processor.cc +++ b/src/xenia/gpu/vulkan/vulkan_command_processor.cc @@ -1614,6 +1614,8 @@ bool VulkanCommandProcessor::IssueCopy() { } void VulkanCommandProcessor::InitializeTrace() { + CommandProcessor::InitializeTrace(); + if (!BeginSubmission(true)) { return; } diff --git a/src/xenia/ui/file_picker_win.cc b/src/xenia/ui/file_picker_win.cc index 88ce056bc..5cb467ca1 100644 --- a/src/xenia/ui/file_picker_win.cc +++ b/src/xenia/ui/file_picker_win.cc @@ -113,8 +113,6 @@ Win32FilePicker::~Win32FilePicker() = default; bool Win32FilePicker::Show(Window* parent_window) { // TODO(benvanik): FileSaveDialog. assert_true(mode() == Mode::kOpen); - // TODO(benvanik): folder dialogs. - assert_true(type() == Type::kFile); Microsoft::WRL::ComPtr file_dialog; HRESULT hr = @@ -134,37 +132,41 @@ bool Win32FilePicker::Show(Window* parent_window) { if (!SUCCEEDED(hr)) { return false; } - // FOS_PICKFOLDERS // FOS_FILEMUSTEXIST // FOS_PATHMUSTEXIST flags |= FOS_FORCEFILESYSTEM; if (multi_selection()) { flags |= FOS_ALLOWMULTISELECT; } + if (type() == Type::kDirectory) { + flags |= FOS_PICKFOLDERS; + } hr = file_dialog->SetOptions(flags); if (!SUCCEEDED(hr)) { return false; } - // Set the file types to display only. Notice that this is a 1-based array. - std::vector> file_pairs; - std::vector file_types; - for (const auto& extension : this->extensions()) { - const auto& file_pair = - file_pairs.emplace_back(std::move(xe::to_utf16(extension.first)), - std::move(xe::to_utf16(extension.second))); - file_types.push_back( - {(LPCWSTR)file_pair.first.c_str(), (LPCWSTR)file_pair.second.c_str()}); - } - hr = file_dialog->SetFileTypes(static_cast(file_types.size()), - file_types.data()); - if (!SUCCEEDED(hr)) { - return false; - } + if (type() == Type::kFile) { + // Set the file types to display only. Notice that this is a 1-based array. + std::vector> file_pairs; + std::vector file_types; + for (const auto& extension : this->extensions()) { + const auto& file_pair = + file_pairs.emplace_back(std::move(xe::to_utf16(extension.first)), + std::move(xe::to_utf16(extension.second))); + file_types.push_back({(LPCWSTR)file_pair.first.c_str(), + (LPCWSTR)file_pair.second.c_str()}); + } + hr = file_dialog->SetFileTypes(static_cast(file_types.size()), + file_types.data()); + if (!SUCCEEDED(hr)) { + return false; + } - hr = file_dialog->SetFileTypeIndex(1); - if (!SUCCEEDED(hr)) { - return false; + hr = file_dialog->SetFileTypeIndex(1); + if (!SUCCEEDED(hr)) { + return false; + } } // Create an event handling object, and hook it up to the dialog. diff --git a/src/xenia/ui/premake5.lua b/src/xenia/ui/premake5.lua index 3b9e482c4..6aff82bec 100644 --- a/src/xenia/ui/premake5.lua +++ b/src/xenia/ui/premake5.lua @@ -21,5 +21,6 @@ project("xenia-ui") filter("platforms:Windows") links({ - "DXGI", + "dwmapi", + "dxgi", }) diff --git a/src/xenia/ui/window_win.cc b/src/xenia/ui/window_win.cc index f7ab5ff71..f2458b69d 100644 --- a/src/xenia/ui/window_win.cc +++ b/src/xenia/ui/window_win.cc @@ -23,8 +23,8 @@ #include "xenia/ui/virtual_key.h" #include "xenia/ui/windowed_app_context_win.h" -// For per-monitor DPI awareness v1. #include +#include namespace xe { namespace ui { @@ -182,6 +182,14 @@ bool Win32Window::OpenImpl() { } } + // Disable rounded corners starting with Windows 11 (or silently receive and + // ignore E_INVALIDARG on Windows versions before 10.0.22000.0), primarily to + // preserve all pixels of the guest output. + DWM_WINDOW_CORNER_PREFERENCE window_corner_preference = DWMWCP_DONOTROUND; + DwmSetWindowAttribute(hwnd_, DWMWA_WINDOW_CORNER_PREFERENCE, + &window_corner_preference, + sizeof(window_corner_preference)); + // Disable flicks. ATOM atom = GlobalAddAtomW(L"MicrosoftTabletPenServiceProperty"); const DWORD_PTR dwHwndTabletProperty = diff --git a/xenia-build b/xenia-build index d41b9f4b0..543114686 100755 --- a/xenia-build +++ b/xenia-build @@ -920,7 +920,7 @@ class BuildShadersCommand(Command): print('ERROR: could not find 32-bit Program Files') return 1 windows_sdk_bin_path = os.path.join( - program_files_path, 'Windows Kits/10/bin/10.0.19041.0/x64') + program_files_path, 'Windows Kits/10/bin/10.0.22000.0/x64') if not os.path.exists(windows_sdk_bin_path): print('ERROR: could not find Windows 10 SDK binaries') return 1