Merge branch 'master' into vulkan

This commit is contained in:
Triang3l 2022-05-10 15:57:50 +03:00
commit b9256fcdbd
48 changed files with 3809 additions and 6711 deletions

View File

@ -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

View File

@ -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({})

View File

@ -12,6 +12,7 @@
#include <algorithm>
#include <cinttypes>
#include <cmath>
#include <cstring>
#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<kernel::XHostThread>(
@ -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<void()> 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<uint32_t>(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;
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;
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<reg::DC_LUT_RW_INDEX>();
// 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<reg::DC_LUT_SEQ_COLOR>().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;
void CommandProcessor::UpdateGammaRampValue(GammaRampType type,
uint32_t value) {
RegisterFile* regs = register_file_;
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<reg::DC_LUT_RW_INDEX>();
// 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<reg::DC_LUT_PWL_DATA>();
// 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;
auto index = regs->values[XE_GPU_REG_DC_LUT_RW_INDEX].u32;
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;
// 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<reg::DC_LUT_RW_INDEX>();
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<reg::DC_LUT_30_COLOR>();
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<const uint32_t*>(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

View File

@ -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

View File

@ -13,6 +13,7 @@
#include <utility>
#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_ +
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<reg::DC_LUT_PWL_DATA*>(
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<const void*>(gamma_ramp_.pwl)
: static_cast<const void*>(gamma_ramp_.table),
? static_cast<const void*>(gamma_ramp_pwl_rgb())
: static_cast<const void*>(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 =

View File

@ -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<TextureCache> 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<ID3D12Resource> 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<ID3D12Resource> 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];

View File

@ -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.

File diff suppressed because it is too large Load Diff

View File

@ -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 <condition_variable>
#include <cstdio>
#include <deque>
#include <functional>
#include <memory>
#include <mutex>
#include <string>
@ -21,6 +22,7 @@
#include <utility>
#include <vector>
#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<uint32_t>* 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<uint32_t>{}(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<uint32_t>& shader_out);
const std::vector<uint32_t>& GetGeometryShader(GeometryShaderKey key);
ID3D12PipelineState* CreateD3D12Pipeline(
const PipelineRuntimeDescription& runtime_description);
@ -302,6 +338,11 @@ class PipelineCache {
xe::hash::IdentityHasher<uint64_t>>
bindless_sampler_layout_map_;
// Geometry shaders for Xenos primitive types not supported by Direct3D 12.
std::unordered_map<GeometryShaderKey, std::vector<uint32_t>,
GeometryShaderKey::Hasher>
geometry_shaders_;
// Empty depth-only pixel shader for writing to depth buffer via ROV when no
// Xenos pixel shader provided.
std::vector<uint8_t> depth_only_pixel_shader_;

View File

@ -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.
@ -577,8 +671,8 @@ struct alignas(uint32_t) Statistics {
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
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.
@ -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<uint32_t>& code, bool in_dcl = false) const {
uint32_t index_dimension = GetIndexDimension(in_dcl);
if (index_dimension > 0) {
void Write(std::vector<uint32_t>& 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<uint32_t>& 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<uint32_t>& 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);

View File

@ -326,15 +326,16 @@ 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),
a_.OpAnd(index_dest,
dxbc::Src::V1D(uint32_t(InOutRegister::kVSInVertexIndex),
dxbc::Src::kXXXX),
index_src);
{
@ -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,9 +702,9 @@ 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),
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));
@ -713,7 +714,7 @@ void DxbcShaderTranslator::StartPixelShader() {
// 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),
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.
{
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_.OpAnd(dxbc::Dest::R(system_temp_loop_count_, 0b0001), loop_constant_src,
dxbc::Src::LU(UINT8_MAX));
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,13 +3538,13 @@ 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),
dxbc::Dest::V1D(uint32_t(InOutRegister::kPSInPointParameters),
0b0011));
}
}
@ -3553,7 +3561,7 @@ void DxbcShaderTranslator::WriteShaderCode() {
(is_writing_float24_depth && !shader_writes_depth)
? dxbc::InterpolationMode::kLinearNoPerspectiveSample
: dxbc::InterpolationMode::kLinearNoPerspective,
dxbc::Dest::V(uint32_t(InOutRegister::kPSInPosition),
dxbc::Dest::V1D(uint32_t(InOutRegister::kPSInPosition),
in_position_used_),
dxbc::Name::kPosition);
}
@ -3568,7 +3576,7 @@ void DxbcShaderTranslator::WriteShaderCode() {
if (front_face_and_sample_index_mask) {
// Is front face, sample index.
ao_.OpDclInputPSSGV(
dxbc::Dest::V(uint32_t(InOutRegister::kPSInFrontFaceAndSampleIndex),
dxbc::Dest::V1D(uint32_t(InOutRegister::kPSInFrontFaceAndSampleIndex),
front_face_and_sample_index_mask),
dxbc::Name::kIsFrontFace);
}

View File

@ -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,

View File

@ -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,7 +201,7 @@ void DxbcShaderTranslator::ExportToMemory() {
a_.OpIEq(
dxbc::Dest::R(control_temp,
inner_condition_provided ? 0b0010 : 0b0001),
dxbc::Src::V(uint32_t(InOutRegister::kPSInFrontFaceAndSampleIndex),
dxbc::Src::V1D(uint32_t(InOutRegister::kPSInFrontFaceAndSampleIndex),
dxbc::Src::kYYYY),
dxbc::Src::R(control_temp, dxbc::Src::kYYYY));
if (inner_condition_provided) {

View File

@ -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,8 +645,8 @@ void DxbcShaderTranslator::ROV_DepthStencilTest() {
a_.OpMax(temp_z_dest, z_ddx_src.Abs(), z_ddy_src.Abs());
// Calculate the depth bias for the needed faceness.
in_front_face_used_ = true;
a_.OpIf(true,
dxbc::Src::V(uint32_t(InOutRegister::kPSInFrontFaceAndSampleIndex),
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)
@ -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,7 +1012,7 @@ void DxbcShaderTranslator::ROV_DepthStencilTest() {
in_front_face_used_ = true;
a_.OpMovC(
sample_temp_z_dest,
dxbc::Src::V(uint32_t(InOutRegister::kPSInFrontFaceAndSampleIndex),
dxbc::Src::V1D(uint32_t(InOutRegister::kPSInFrontFaceAndSampleIndex),
dxbc::Src::kXXXX),
LoadSystemConstant(
SystemConstants::Index::kEdramStencil,
@ -1090,9 +1090,9 @@ 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),
a_.OpMovC(sample_temp_y_dest,
dxbc::Src::V1D(
uint32_t(InOutRegister::kPSInFrontFaceAndSampleIndex),
dxbc::Src::kXXXX),
LoadSystemConstant(
SystemConstants::Index::kEdramStencil,
@ -1155,7 +1155,7 @@ void DxbcShaderTranslator::ROV_DepthStencilTest() {
in_front_face_used_ = true;
a_.OpMovC(
sample_temp_z_dest,
dxbc::Src::V(uint32_t(InOutRegister::kPSInFrontFaceAndSampleIndex),
dxbc::Src::V1D(uint32_t(InOutRegister::kPSInFrontFaceAndSampleIndex),
dxbc::Src::kXXXX),
LoadSystemConstant(
SystemConstants::Index::kEdramStencil,
@ -1924,9 +1924,9 @@ 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),
a_.OpMul(dxbc::Dest::R(temp, 0b0001),
dxbc::Src::V1D(uint32_t(InOutRegister::kPSInPosition),
dxbc::Src::kZZZZ),
dxbc::Src::LF(2.0f), true);
}
@ -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,

View File

@ -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;

View File

@ -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)

View File

@ -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

View File

@ -9,6 +9,7 @@
#include "xenia/gpu/shader_interpreter.h"
#include <cfloat>
#include <cmath>
#include <cstring>

View File

@ -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));
}

View File

@ -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);

View File

@ -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,

View File

@ -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,

View File

@ -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
};

View File

@ -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
};

View File

@ -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
};

View File

@ -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
};

File diff suppressed because it is too large Load Diff

View File

@ -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
};

File diff suppressed because it is too large Load Diff

View File

@ -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
};

View File

@ -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
};

View File

@ -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<XeVertexPostGS> 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();
}

View File

@ -1,23 +0,0 @@
#include "xenos_draw.hlsli"
[maxvertexcount(4)]
void main(lineadj XeVertexPreGS xe_in[4],
inout TriangleStream<XeVertexPostGS> 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();
}

View File

@ -1,103 +0,0 @@
#include "xenos_draw.hlsli"
[maxvertexcount(6)]
void main(triangle XeVertexPreGS xe_in[3],
inout TriangleStream<XeVertexPostGS> 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();
}

View File

@ -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 {

View File

@ -9,8 +9,11 @@
#include "xenia/gpu/trace_player.h"
#include <memory>
#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<const EdramSnapshotCommand*>(trace_ptr);
trace_ptr += sizeof(*cmd);
if (!edram_snapshot_) {
edram_snapshot_ = new uint8_t[xenos::kEdramSizeBytes];
}
std::unique_ptr<uint8_t[]> 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<const RegistersCommand*>(trace_ptr);
trace_ptr += sizeof(*cmd);
std::unique_ptr<uint32_t[]> 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<const GammaRampCommand*>(trace_ptr);
trace_ptr += sizeof(*cmd);
std::unique_ptr<uint32_t[]> 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<const reg::DC_LUT_30_COLOR*>(gamma_ramps.get()),
reinterpret_cast<const reg::DC_LUT_PWL_DATA*>(gamma_ramps.get() +
256),
cmd->rw_component);
break;
}
}
}

View File

@ -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<uint32_t> playback_percent_ = {0};
std::unique_ptr<xe::threading::Event> playback_event_;
uint8_t* edram_snapshot_ = nullptr;
};
} // namespace gpu

View File

@ -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

View File

@ -205,6 +205,16 @@ void TraceReader::ParseTrace() {
}
break;
}
case TraceCommandType::kRegisters: {
auto cmd = reinterpret_cast<const RegistersCommand*>(trace_ptr);
trace_ptr += sizeof(*cmd) + cmd->encoded_length;
break;
}
case TraceCommandType::kGammaRamp: {
auto cmd = reinterpret_cast<const GammaRampCommand*>(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);

View File

@ -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<const TraceCommandType*>(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<MappedMemory> mmap_;
const uint8_t* trace_data_ = nullptr;

View File

@ -408,6 +408,18 @@ void TraceViewer::DrawPacketDisassemblerUI() {
}
break;
}
case TraceCommandType::kRegisters: {
auto cmd = reinterpret_cast<const RegistersCommand*>(trace_ptr);
trace_ptr += sizeof(*cmd) + cmd->encoded_length;
// ImGui::BulletText("Registers");
break;
}
case TraceCommandType::kGammaRamp: {
auto cmd = reinterpret_cast<const GammaRampCommand*>(trace_ptr);
trace_ptr += sizeof(*cmd) + cmd->encoded_length;
// ImGui::BulletText("GammaRamp");
break;
}
}
}
ImGui::EndChild();

View File

@ -10,6 +10,7 @@
#include "xenia/gpu/trace_writer.h"
#include <cstring>
#include <memory>
#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<const char*>(register_values), uncompressed_length);
SnappySink snappy_sink(file_);
cmd.encoded_length =
static_cast<uint32_t>(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<char[]> 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<uint32_t>(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

View File

@ -14,6 +14,7 @@
#include <set>
#include <string>
#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,

View File

@ -1614,6 +1614,8 @@ bool VulkanCommandProcessor::IssueCopy() {
}
void VulkanCommandProcessor::InitializeTrace() {
CommandProcessor::InitializeTrace();
if (!BeginSubmission(true)) {
return;
}

View File

@ -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<IFileDialog> file_dialog;
HRESULT hr =
@ -134,18 +132,21 @@ 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;
}
if (type() == Type::kFile) {
// Set the file types to display only. Notice that this is a 1-based array.
std::vector<std::pair<std::u16string, std::u16string>> file_pairs;
std::vector<COMDLG_FILTERSPEC> file_types;
@ -153,8 +154,8 @@ bool Win32FilePicker::Show(Window* parent_window) {
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()});
file_types.push_back({(LPCWSTR)file_pair.first.c_str(),
(LPCWSTR)file_pair.second.c_str()});
}
hr = file_dialog->SetFileTypes(static_cast<UINT>(file_types.size()),
file_types.data());
@ -166,6 +167,7 @@ bool Win32FilePicker::Show(Window* parent_window) {
if (!SUCCEEDED(hr)) {
return false;
}
}
// Create an event handling object, and hook it up to the dialog.
Microsoft::WRL::ComPtr<IFileDialogEvents> file_dialog_events;

View File

@ -21,5 +21,6 @@ project("xenia-ui")
filter("platforms:Windows")
links({
"DXGI",
"dwmapi",
"dxgi",
})

View File

@ -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 <ShellScalingApi.h>
#include <dwmapi.h>
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 =

View File

@ -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