Merge branch 'master' into vulkan
This commit is contained in:
commit
b88f715140
|
@ -85,6 +85,7 @@ public abstract class WindowedAppActivity extends Activity {
|
|||
}
|
||||
|
||||
// Used from the native WindowedAppContext. May be called from non-UI threads.
|
||||
@SuppressWarnings("UnusedDeclaration")
|
||||
protected void postInvalidateWindowSurface() {
|
||||
if (mWindowSurfaceView == null) {
|
||||
return;
|
||||
|
|
|
@ -0,0 +1,176 @@
|
|||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2022 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef XENIA_BASE_CHRONO_H_
|
||||
#define XENIA_BASE_CHRONO_H_
|
||||
|
||||
#include <chrono>
|
||||
#include <cstdint>
|
||||
|
||||
// https://github.com/HowardHinnant/date/commit/5ba1c1ad8514362dba596f228eb20eb13f63d948#r33275526
|
||||
#define HAS_UNCAUGHT_EXCEPTIONS 1
|
||||
#include "third_party/date/include/date/tz.h"
|
||||
|
||||
#include "xenia/base/clock.h"
|
||||
|
||||
namespace xe {
|
||||
using hundrednano = std::ratio<1, 10000000>;
|
||||
|
||||
namespace chrono {
|
||||
|
||||
using hundrednanoseconds = std::chrono::duration<int64_t, hundrednano>;
|
||||
|
||||
// https://docs.microsoft.com/en-us/windows/win32/sysinfo/converting-a-time-t-value-to-a-file-time
|
||||
// Don't forget the 89 leap days.
|
||||
static constexpr std::chrono::seconds seconds_1601_to_1970 =
|
||||
(396 * 365 + 89) * std::chrono::seconds(60 * 60 * 24);
|
||||
|
||||
// TODO(JoelLinn) define xstead_clock xsystem_clock etc.
|
||||
|
||||
namespace internal {
|
||||
// Trick to reduce code duplication and keep all the chrono template magic
|
||||
// working
|
||||
enum class Domain {
|
||||
// boring host clock:
|
||||
Host,
|
||||
// adheres to guest scaling (differrent speed, changing clock drift etc):
|
||||
Guest
|
||||
};
|
||||
|
||||
template <Domain domain_>
|
||||
struct NtSystemClock {
|
||||
using rep = int64_t;
|
||||
using period = hundrednano;
|
||||
using duration = hundrednanoseconds;
|
||||
using time_point = std::chrono::time_point<NtSystemClock<domain_>>;
|
||||
// This really depends on the context the clock is used in:
|
||||
// static constexpr bool is_steady = false;
|
||||
|
||||
public:
|
||||
// The delta between std::chrono::system_clock (Jan 1 1970) and NT file
|
||||
// time (Jan 1 1601), in seconds. In the spec std::chrono::system_clock's
|
||||
// epoch is undefined, but C++20 cements it as Jan 1 1970.
|
||||
static constexpr std::chrono::seconds unix_epoch_delta() {
|
||||
using std::chrono::steady_clock;
|
||||
auto filetime_epoch = date::year{1601} / date::month{1} / date::day{1};
|
||||
auto system_clock_epoch = date::year{1970} / date::month{1} / date::day{1};
|
||||
auto fp = static_cast<date::sys_seconds>(
|
||||
static_cast<date::sys_days>(filetime_epoch));
|
||||
auto sp = static_cast<date::sys_seconds>(
|
||||
static_cast<date::sys_days>(system_clock_epoch));
|
||||
return fp.time_since_epoch() - sp.time_since_epoch();
|
||||
}
|
||||
|
||||
public:
|
||||
static constexpr uint64_t to_file_time(time_point const& tp) noexcept {
|
||||
return static_cast<uint64_t>(tp.time_since_epoch().count());
|
||||
}
|
||||
|
||||
static constexpr time_point from_file_time(uint64_t const& tp) noexcept {
|
||||
return time_point{duration{tp}};
|
||||
}
|
||||
|
||||
// To convert XSystemClock to sys, do clock_cast<WinSystemTime>(tp) first
|
||||
// SFINAE hack https://stackoverflow.com/a/58813009
|
||||
template <Domain domain_fresh_ = domain_>
|
||||
static constexpr std::enable_if_t<domain_fresh_ == Domain::Host,
|
||||
std::chrono::system_clock::time_point>
|
||||
to_sys(const time_point& tp) {
|
||||
using sys_duration = std::chrono::system_clock::duration;
|
||||
using sys_time = std::chrono::system_clock::time_point;
|
||||
|
||||
auto dp = tp;
|
||||
dp += unix_epoch_delta();
|
||||
auto cdp = std::chrono::time_point_cast<sys_duration>(dp);
|
||||
return sys_time{cdp.time_since_epoch()};
|
||||
}
|
||||
|
||||
template <Domain domain_fresh_ = domain_>
|
||||
static constexpr std::enable_if_t<domain_fresh_ == Domain::Host, time_point>
|
||||
from_sys(const std::chrono::system_clock::time_point& tp) {
|
||||
auto ctp = std::chrono::time_point_cast<duration>(tp);
|
||||
auto dp = time_point{ctp.time_since_epoch()};
|
||||
dp -= unix_epoch_delta();
|
||||
return dp;
|
||||
}
|
||||
|
||||
[[nodiscard]] static time_point now() noexcept {
|
||||
if constexpr (domain_ == Domain::Host) {
|
||||
// QueryHostSystemTime() returns windows epoch times even on POSIX
|
||||
return from_file_time(Clock::QueryHostSystemTime());
|
||||
} else if constexpr (domain_ == Domain::Guest) {
|
||||
return from_file_time(Clock::QueryGuestSystemTime());
|
||||
}
|
||||
}
|
||||
};
|
||||
} // namespace internal
|
||||
|
||||
// Unscaled system clock which can be used for filetime <-> system_clock
|
||||
// conversion
|
||||
using WinSystemClock = internal::NtSystemClock<internal::Domain::Host>;
|
||||
|
||||
// Guest system clock, scaled
|
||||
using XSystemClock = internal::NtSystemClock<internal::Domain::Guest>;
|
||||
|
||||
} // namespace chrono
|
||||
} // namespace xe
|
||||
|
||||
namespace date {
|
||||
|
||||
template <>
|
||||
struct clock_time_conversion<::xe::chrono::WinSystemClock,
|
||||
::xe::chrono::XSystemClock> {
|
||||
using WClock_ = ::xe::chrono::WinSystemClock;
|
||||
using XClock_ = ::xe::chrono::XSystemClock;
|
||||
|
||||
template <typename Duration>
|
||||
typename WClock_::time_point operator()(
|
||||
const std::chrono::time_point<XClock_, Duration>& t) const {
|
||||
// Consult chrono_steady_cast.h for explanation on this:
|
||||
std::atomic_thread_fence(std::memory_order_acq_rel);
|
||||
auto w_now = WClock_::now();
|
||||
auto x_now = XClock_::now();
|
||||
std::atomic_thread_fence(std::memory_order_acq_rel);
|
||||
|
||||
auto delta = (t - x_now);
|
||||
if (!::cvars::clock_no_scaling) {
|
||||
delta = std::chrono::floor<WClock_::duration>(
|
||||
delta * xe::Clock::guest_time_scalar());
|
||||
}
|
||||
return w_now + delta;
|
||||
}
|
||||
};
|
||||
|
||||
template <>
|
||||
struct clock_time_conversion<::xe::chrono::XSystemClock,
|
||||
::xe::chrono::WinSystemClock> {
|
||||
using WClock_ = ::xe::chrono::WinSystemClock;
|
||||
using XClock_ = ::xe::chrono::XSystemClock;
|
||||
|
||||
template <typename Duration>
|
||||
typename XClock_::time_point operator()(
|
||||
const std::chrono::time_point<WClock_, Duration>& t) const {
|
||||
// Consult chrono_steady_cast.h for explanation on this:
|
||||
std::atomic_thread_fence(std::memory_order_acq_rel);
|
||||
auto w_now = WClock_::now();
|
||||
auto x_now = XClock_::now();
|
||||
std::atomic_thread_fence(std::memory_order_acq_rel);
|
||||
|
||||
xe::chrono::hundrednanoseconds delta = (t - w_now);
|
||||
if (!::cvars::clock_no_scaling) {
|
||||
delta = std::chrono::floor<WClock_::duration>(
|
||||
delta / xe::Clock::guest_time_scalar());
|
||||
}
|
||||
return x_now + delta;
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace date
|
||||
|
||||
#endif
|
|
@ -0,0 +1,76 @@
|
|||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2022 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef XENIA_BASE_CHRONO_STEADY_CAST_H_
|
||||
#define XENIA_BASE_CHRONO_STEADY_CAST_H_
|
||||
|
||||
#include <atomic>
|
||||
|
||||
#include "xenia/base/chrono.h"
|
||||
|
||||
// This is in a separate header because casting to and from steady time points
|
||||
// usually doesn't make sense and is imprecise. However, NT uses the FileTime
|
||||
// epoch as a steady clock in waits. In such cases, include this header and use
|
||||
// clock_cast<>().
|
||||
|
||||
namespace date {
|
||||
|
||||
// This conveniently works only for Host time domain because Guest needs
|
||||
// additional scaling. Convert XSystemClock to WinSystemClock first if
|
||||
// necessary.
|
||||
template <>
|
||||
struct clock_time_conversion<::xe::chrono::WinSystemClock,
|
||||
std::chrono::steady_clock> {
|
||||
// using NtSystemClock_ = ::xe::chrono::internal::NtSystemClock<domain_>;
|
||||
using WinSystemClock_ = ::xe::chrono::WinSystemClock;
|
||||
using steady_clock_ = std::chrono::steady_clock;
|
||||
|
||||
template <typename Duration>
|
||||
typename WinSystemClock_::time_point operator()(
|
||||
const std::chrono::time_point<steady_clock_, Duration>& t) const {
|
||||
// Since there is no known epoch for steady_clock and even if, since it can
|
||||
// progress differently than other common clocks (e.g. stopping when the
|
||||
// computer is suspended), we need to use now() which introduces
|
||||
// imprecision.
|
||||
// Memory fences to keep the clock fetches close together to
|
||||
// minimize drift. This pattern was benchmarked to give the lowest
|
||||
// conversion error: error = sty_tpoint -
|
||||
// clock_cast<sty>(clock_cast<nt>(sty_tpoint));
|
||||
std::atomic_thread_fence(std::memory_order_acq_rel);
|
||||
auto steady_now = steady_clock_::now();
|
||||
auto nt_now = WinSystemClock_::now();
|
||||
std::atomic_thread_fence(std::memory_order_acq_rel);
|
||||
|
||||
auto delta = std::chrono::floor<WinSystemClock_::duration>(t - steady_now);
|
||||
return nt_now + delta;
|
||||
}
|
||||
};
|
||||
|
||||
template <>
|
||||
struct clock_time_conversion<std::chrono::steady_clock,
|
||||
::xe::chrono::WinSystemClock> {
|
||||
using WinSystemClock_ = ::xe::chrono::WinSystemClock;
|
||||
using steady_clock_ = std::chrono::steady_clock;
|
||||
|
||||
template <typename Duration>
|
||||
steady_clock_::time_point operator()(
|
||||
const std::chrono::time_point<WinSystemClock_, Duration>& t) const {
|
||||
std::atomic_thread_fence(std::memory_order_acq_rel);
|
||||
auto steady_now = steady_clock_::now();
|
||||
auto nt_now = WinSystemClock_::now();
|
||||
std::atomic_thread_fence(std::memory_order_acq_rel);
|
||||
|
||||
auto delta = t - nt_now;
|
||||
return steady_now + delta;
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace date
|
||||
|
||||
#endif
|
|
@ -2,7 +2,7 @@
|
|||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2019 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. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
@ -10,6 +10,7 @@
|
|||
#ifndef XENIA_BASE_CLOCK_H_
|
||||
#define XENIA_BASE_CLOCK_H_
|
||||
|
||||
#include <chrono>
|
||||
#include <cstdint>
|
||||
|
||||
#include "xenia/base/cvar.h"
|
||||
|
@ -24,6 +25,8 @@ DECLARE_bool(clock_source_raw);
|
|||
|
||||
namespace xe {
|
||||
|
||||
// chrono APIs in xenia/base/chrono.h are preferred
|
||||
|
||||
class Clock {
|
||||
public:
|
||||
// Host ticks-per-second. Generally QueryHostTickFrequency should be used.
|
||||
|
|
|
@ -1,111 +0,0 @@
|
|||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2022 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#include "xenia/base/delay_scheduler.h"
|
||||
#include "xenia/base/assert.h"
|
||||
#include "xenia/base/logging.h"
|
||||
|
||||
namespace xe::internal {
|
||||
|
||||
DelaySchedulerBase::~DelaySchedulerBase() {
|
||||
if (call_on_destruct_) {
|
||||
for (auto& slot : deletion_queue_) {
|
||||
// No thread safety in destructors anyway
|
||||
if (slot.state == State::kWaiting) {
|
||||
callback_(slot.info);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DelaySchedulerBase::Collect() {
|
||||
static_assert(atomic_state_t::is_always_lock_free,
|
||||
"Locks are unsafe to use with thread suspension");
|
||||
|
||||
for (auto& slot : deletion_queue_) {
|
||||
TryCollectOne_impl(slot);
|
||||
}
|
||||
}
|
||||
|
||||
bool DelaySchedulerBase::TryCollectOne_impl(deletion_record_t& slot) {
|
||||
auto now = clock::now();
|
||||
|
||||
auto state = State::kWaiting;
|
||||
// Try to lock the waiting slot for reading the other fields
|
||||
if (slot.state.compare_exchange_strong(state, State::kDeleting,
|
||||
std::memory_order_acq_rel)) {
|
||||
if (now > slot.due) {
|
||||
// Time has passed, call back now
|
||||
callback_(slot.info);
|
||||
slot.info = nullptr;
|
||||
slot.state.store(State::kFree, std::memory_order_release);
|
||||
return true;
|
||||
} else {
|
||||
// Oops it's not yet due
|
||||
slot.state.store(State::kWaiting, std::memory_order_release);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void DelaySchedulerBase::ScheduleAt_impl(
|
||||
void* info, const clock::time_point& timeout_time) {
|
||||
bool first_pass = true;
|
||||
|
||||
if (info == nullptr) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (;;) {
|
||||
if (TryScheduleAt_impl(info, timeout_time)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (first_pass) {
|
||||
first_pass = false;
|
||||
XELOGE(
|
||||
"`DelayScheduler::ScheduleAt(...)` stalled: list is full! Find out "
|
||||
"why or increase `MAX_QUEUE`.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool DelaySchedulerBase::TryScheduleAt_impl(
|
||||
void* info, const clock::time_point& timeout_time) {
|
||||
if (info == nullptr) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for (auto& slot : deletion_queue_) {
|
||||
// Clean up due item
|
||||
TryCollectOne_impl(slot);
|
||||
|
||||
if (TryScheduleAtOne_impl(slot, info, timeout_time)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool DelaySchedulerBase::TryScheduleAtOne_impl(deletion_record_t& slot,
|
||||
void* info,
|
||||
clock::time_point due) {
|
||||
auto state = State::kFree;
|
||||
if (slot.state.compare_exchange_strong(state, State::kInitializing,
|
||||
std::memory_order_acq_rel)) {
|
||||
slot.info = info;
|
||||
slot.due = due;
|
||||
slot.state.store(State::kWaiting, std::memory_order_release);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
} // namespace xe::internal
|
|
@ -1,142 +0,0 @@
|
|||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2022 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef XENIA_BASE_DELAY_SCHEDULER_H_
|
||||
#define XENIA_BASE_DELAY_SCHEDULER_H_
|
||||
|
||||
#include <atomic>
|
||||
#include <chrono>
|
||||
#include <cstddef>
|
||||
#include <functional>
|
||||
#include <vector>
|
||||
|
||||
namespace xe {
|
||||
|
||||
namespace internal {
|
||||
// Put the implementation in a non templated base class to reduce compile time
|
||||
// and code duplication
|
||||
class DelaySchedulerBase {
|
||||
protected: // Types
|
||||
enum class State : uint_least8_t {
|
||||
kFree = 0, // Slot is unsued
|
||||
kInitializing, // Slot is reserved and currently written to by a thread
|
||||
kWaiting, // The slot contains a pointer scheduled for deletion
|
||||
kDeleting // A thread is currently deleting the pointer
|
||||
};
|
||||
using atomic_state_t = std::atomic<State>;
|
||||
using clock = std::chrono::steady_clock;
|
||||
struct deletion_record_t {
|
||||
atomic_state_t state;
|
||||
void* info;
|
||||
clock::time_point due;
|
||||
};
|
||||
using deletion_queue_t = std::vector<deletion_record_t>;
|
||||
using callback_t = std::function<void(void*)>;
|
||||
|
||||
public:
|
||||
/// Check all scheduled items in the queue and free any that are due using
|
||||
/// `callback(info);`. Call this to reliably collect all due wait items in the
|
||||
/// queue.
|
||||
void Collect();
|
||||
|
||||
size_t size() { return deletion_queue_.size(); }
|
||||
|
||||
protected: // Implementation
|
||||
DelaySchedulerBase(size_t queue_size, callback_t callback,
|
||||
bool call_on_destruct)
|
||||
: deletion_queue_(queue_size),
|
||||
callback_(callback),
|
||||
call_on_destruct_(call_on_destruct) {}
|
||||
virtual ~DelaySchedulerBase();
|
||||
|
||||
void ScheduleAt_impl(void* info, const clock::time_point& timeout_time);
|
||||
[[nodiscard]] bool TryScheduleAt_impl(void* info,
|
||||
const clock::time_point& timeout_time);
|
||||
|
||||
/// Checks if the slot is due and if so, call back for it.
|
||||
bool TryCollectOne_impl(deletion_record_t& slot);
|
||||
|
||||
[[nodiscard]] bool TryScheduleAtOne_impl(deletion_record_t& slot, void* info,
|
||||
clock::time_point due);
|
||||
|
||||
private:
|
||||
deletion_queue_t deletion_queue_;
|
||||
callback_t callback_;
|
||||
bool call_on_destruct_;
|
||||
};
|
||||
} // namespace internal
|
||||
|
||||
/// A lazy scheduler/timer.
|
||||
/// Will wait at least the specified duration before invoking the callbacks but
|
||||
/// might wait until it is destructed. Lockless thread-safe, will spinlock
|
||||
/// though if the wait queue is full (except for `Try`... methods). Might use
|
||||
/// any thread that calls any member to invoke callbacks of due wait items.
|
||||
template <typename INFO>
|
||||
class DelayScheduler : internal::DelaySchedulerBase {
|
||||
public:
|
||||
DelayScheduler(size_t queue_size, std::function<void(INFO*)> callback,
|
||||
bool call_on_destruct)
|
||||
: DelaySchedulerBase(
|
||||
queue_size,
|
||||
[callback](void* info) { callback(reinterpret_cast<INFO*>(info)); },
|
||||
call_on_destruct){};
|
||||
DelayScheduler(const DelayScheduler&) = delete;
|
||||
DelayScheduler& operator=(const DelayScheduler&) = delete;
|
||||
virtual ~DelayScheduler() {}
|
||||
|
||||
// From base class:
|
||||
// void Collect();
|
||||
|
||||
/// Schedule an object for deletion at some point after `timeout_time` using
|
||||
/// `callback(info);`. Will collect any wait items it encounters which can be
|
||||
/// 0 or all, use `Collect()` to collect all due wait items. Blocks until a
|
||||
/// free wait slot is found.
|
||||
template <class Clock, class Duration>
|
||||
void ScheduleAt(
|
||||
INFO* info,
|
||||
const std::chrono::time_point<Clock, Duration>& timeout_time) {
|
||||
ScheduleAt(info,
|
||||
std::chrono::time_point_cast<clock::time_point>(timeout_time));
|
||||
}
|
||||
/// Like `ScheduleAt` but does not block on full list.
|
||||
template <class Clock, class Duration>
|
||||
[[nodiscard]] bool TryScheduleAt(
|
||||
INFO* info,
|
||||
const std::chrono::time_point<Clock, Duration>& timeout_time) {
|
||||
return TryScheduleAt(
|
||||
info, std::chrono::time_point_cast<clock::time_point>(timeout_time));
|
||||
}
|
||||
|
||||
void ScheduleAt(INFO* info, const clock::time_point& timeout_time) {
|
||||
ScheduleAt_impl(info, timeout_time);
|
||||
}
|
||||
[[nodiscard]] bool TryScheduleAt(INFO* info,
|
||||
const clock::time_point& timeout_time) {
|
||||
return TryScheduleAt_impl(info, timeout_time);
|
||||
}
|
||||
|
||||
/// Schedule a callback at some point after `rel_time` has passed.
|
||||
template <class Rep, class Period>
|
||||
void ScheduleAfter(INFO* info,
|
||||
const std::chrono::duration<Rep, Period>& rel_time) {
|
||||
ScheduleAt(info,
|
||||
clock::now() + std::chrono::ceil<clock::duration>(rel_time));
|
||||
}
|
||||
/// Like `ScheduleAfter` but does not block.
|
||||
template <class Rep, class Period>
|
||||
[[nodiscard]] bool TryScheduleAfter(
|
||||
INFO* info, const std::chrono::duration<Rep, Period>& rel_time) {
|
||||
return TryScheduleAt(
|
||||
info, clock::now() + std::chrono::ceil<clock::duration>(rel_time));
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace xe
|
||||
|
||||
#endif
|
|
@ -1,69 +0,0 @@
|
|||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2014 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#include "xenia/base/math.h"
|
||||
|
||||
namespace xe {
|
||||
|
||||
// TODO(benvanik): replace with alternate implementation.
|
||||
// XMConvertFloatToHalf
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
uint16_t float_to_half(float value) {
|
||||
uint32_t Result;
|
||||
uint32_t IValue = (reinterpret_cast<uint32_t*>(&value))[0];
|
||||
uint32_t Sign = (IValue & 0x80000000U) >> 16U;
|
||||
IValue = IValue & 0x7FFFFFFFU; // Hack off the sign
|
||||
if (IValue > 0x47FFEFFFU) {
|
||||
// The number is too large to be represented as a half. Saturate to
|
||||
// infinity.
|
||||
Result = 0x7FFFU;
|
||||
} else {
|
||||
if (IValue < 0x38800000U) {
|
||||
// The number is too small to be represented as a normalized half.
|
||||
// Convert it to a denormalized value.
|
||||
uint32_t Shift = 113U - (IValue >> 23U);
|
||||
IValue = (0x800000U | (IValue & 0x7FFFFFU)) >> Shift;
|
||||
} else {
|
||||
// Rebias the exponent to represent the value as a normalized half.
|
||||
IValue += 0xC8000000U;
|
||||
}
|
||||
Result = ((IValue + 0x0FFFU + ((IValue >> 13U) & 1U)) >> 13U) & 0x7FFFU;
|
||||
}
|
||||
return (uint16_t)(Result | Sign);
|
||||
}
|
||||
|
||||
// TODO(benvanik): replace with alternate implementation.
|
||||
// XMConvertHalfToFloat
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
float half_to_float(uint16_t value) {
|
||||
uint32_t Mantissa = (uint32_t)(value & 0x03FF);
|
||||
uint32_t Exponent;
|
||||
if ((value & 0x7C00) != 0) {
|
||||
// The value is normalized
|
||||
Exponent = (uint32_t)((value >> 10) & 0x1F);
|
||||
} else if (Mantissa != 0) {
|
||||
// The value is denormalized
|
||||
// Normalize the value in the resulting float
|
||||
Exponent = 1;
|
||||
do {
|
||||
Exponent--;
|
||||
Mantissa <<= 1;
|
||||
} while ((Mantissa & 0x0400) == 0);
|
||||
Mantissa &= 0x03FF;
|
||||
} else {
|
||||
// The value is zero
|
||||
Exponent = (uint32_t)-112;
|
||||
}
|
||||
uint32_t Result = ((value & 0x8000) << 16) | // Sign
|
||||
((Exponent + 112) << 23) | // Exponent
|
||||
(Mantissa << 13); // Mantissa
|
||||
return *reinterpret_cast<float*>(&Result);
|
||||
}
|
||||
|
||||
} // namespace xe
|
|
@ -378,8 +378,65 @@ int64_t m128_i64(const __m128& v) {
|
|||
}
|
||||
#endif
|
||||
|
||||
uint16_t float_to_half(float value);
|
||||
float half_to_float(uint16_t value);
|
||||
// Similar to the C++ implementation of XMConvertFloatToHalf and
|
||||
// XMConvertHalfToFloat from DirectXMath 3.00 (pre-3.04, which switched from the
|
||||
// Xenos encoding to IEEE 754), with the extended range instead of infinity and
|
||||
// NaN, and optionally with denormalized numbers - as used in vpkd3d128 (no
|
||||
// denormals, rounding towards zero) and on the Xenos (GL_OES_texture_float
|
||||
// alternative encoding).
|
||||
|
||||
inline uint16_t float_to_xenos_half(float value, bool preserve_denormal = false,
|
||||
bool round_to_nearest_even = false) {
|
||||
uint32_t integer_value = *reinterpret_cast<const uint32_t*>(&value);
|
||||
uint32_t abs_value = integer_value & 0x7FFFFFFFu;
|
||||
uint32_t result;
|
||||
if (abs_value >= 0x47FFE000u) {
|
||||
// Saturate.
|
||||
result = 0x7FFFu;
|
||||
} else {
|
||||
if (abs_value < 0x38800000u) {
|
||||
// The number is too small to be represented as a normalized half.
|
||||
if (preserve_denormal) {
|
||||
uint32_t shift =
|
||||
std::min(uint32_t(113u - (abs_value >> 23u)), uint32_t(24u));
|
||||
result = (0x800000u | (abs_value & 0x7FFFFFu)) >> shift;
|
||||
} else {
|
||||
result = 0u;
|
||||
}
|
||||
} else {
|
||||
// Rebias the exponent to represent the value as a normalized half.
|
||||
result = abs_value + 0xC8000000u;
|
||||
}
|
||||
if (round_to_nearest_even) {
|
||||
result += 0xFFFu + ((result >> 13u) & 1u);
|
||||
}
|
||||
result = (result >> 13u) & 0x7FFFu;
|
||||
}
|
||||
return uint16_t(result | ((integer_value & 0x80000000u) >> 16u));
|
||||
}
|
||||
|
||||
inline float xenos_half_to_float(uint16_t value,
|
||||
bool preserve_denormal = false) {
|
||||
uint32_t mantissa = value & 0x3FFu;
|
||||
uint32_t exponent = (value >> 10u) & 0x1Fu;
|
||||
if (!exponent) {
|
||||
if (!preserve_denormal) {
|
||||
mantissa = 0;
|
||||
} else if (mantissa) {
|
||||
// Normalize the value in the resulting float.
|
||||
// do { Exponent--; Mantissa <<= 1; } while ((Mantissa & 0x0400) == 0)
|
||||
uint32_t mantissa_lzcnt = xe::lzcnt(mantissa) - (32u - 11u);
|
||||
exponent = uint32_t(1 - int32_t(mantissa_lzcnt));
|
||||
mantissa = (mantissa << mantissa_lzcnt) & 0x3FFu;
|
||||
}
|
||||
if (!mantissa) {
|
||||
exponent = uint32_t(-112);
|
||||
}
|
||||
}
|
||||
uint32_t result = (uint32_t(value & 0x8000u) << 16u) |
|
||||
((exponent + 112u) << 23u) | (mantissa << 13u);
|
||||
return *reinterpret_cast<const float*>(&result);
|
||||
}
|
||||
|
||||
// https://locklessinc.com/articles/sat_arithmetic/
|
||||
template <typename T>
|
||||
|
|
|
@ -0,0 +1,148 @@
|
|||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2022 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#include "xenia/base/chrono.h"
|
||||
|
||||
#define CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER
|
||||
#include "third_party/catch/include/catch.hpp"
|
||||
|
||||
namespace xe::base::test {
|
||||
|
||||
// If the tests run fast, the time duration may be zero. So we artificially
|
||||
// raise it to allow for some error.
|
||||
template <typename _Rep, typename _Period>
|
||||
auto dur_bound(std::chrono::duration<_Rep, _Period> dur) {
|
||||
using namespace std::chrono_literals;
|
||||
return std::max<std::common_type_t<std::chrono::milliseconds,
|
||||
std::chrono::duration<_Rep, _Period>>>(
|
||||
dur, 1ms);
|
||||
}
|
||||
|
||||
TEST_CASE("WinSystemClock <-> system_clock", "[clock_cast]") {
|
||||
using namespace xe::chrono;
|
||||
using namespace date;
|
||||
using sys_clock = std::chrono::system_clock;
|
||||
|
||||
// First check some assumptions made in chrono.h
|
||||
|
||||
SECTION("C++20 unix epoch") {
|
||||
auto epoch = date::year{1970} / date::month{1} / date::day{1};
|
||||
std::chrono::system_clock::time_point epoch_tp{
|
||||
static_cast<date::sys_days>(epoch)};
|
||||
REQUIRE(epoch_tp.time_since_epoch().count() == 0);
|
||||
}
|
||||
|
||||
SECTION("Epoch delta") {
|
||||
std::chrono::seconds sys_delta = WinSystemClock::unix_epoch_delta();
|
||||
REQUIRE(sys_delta.count() == INT64_C(-11644473600));
|
||||
}
|
||||
|
||||
SECTION("1993/12/21") {
|
||||
static constexpr sys_days sys(1993_y / dec / 21);
|
||||
|
||||
static constexpr auto wsys = WinSystemClock::from_sys(sys);
|
||||
REQUIRE(wsys.time_since_epoch().count() == 124009056000000000);
|
||||
|
||||
REQUIRE(clock_cast<sys_clock>(wsys) == sys);
|
||||
REQUIRE(clock_cast<WinSystemClock>(sys) == wsys);
|
||||
}
|
||||
|
||||
SECTION("2100/3/1") {
|
||||
static constexpr sys_days sys(2100_y / mar / 1);
|
||||
|
||||
static constexpr auto wsys = WinSystemClock::from_sys(sys);
|
||||
REQUIRE(wsys.time_since_epoch().count() == 157520160000000000);
|
||||
|
||||
REQUIRE(clock_cast<sys_clock>(wsys) == sys);
|
||||
REQUIRE(clock_cast<WinSystemClock>(sys) == wsys);
|
||||
}
|
||||
}
|
||||
|
||||
TEST_CASE("WinSystemClock <-> XSystemClock", "[clock_cast]") {
|
||||
using namespace std::chrono_literals;
|
||||
using namespace xe::chrono;
|
||||
using namespace date;
|
||||
using sys_clock = std::chrono::system_clock;
|
||||
|
||||
SECTION("1993/12/21, clock_no_scaling = true") {
|
||||
static constexpr sys_days sys(1993_y / dec / 21);
|
||||
cvars::clock_no_scaling = true;
|
||||
Clock::set_guest_time_scalar(1.0);
|
||||
|
||||
static constexpr auto wsys = WinSystemClock::from_sys(sys);
|
||||
|
||||
auto start = std::chrono::system_clock::now();
|
||||
|
||||
auto xsys = date::clock_cast<XSystemClock>(wsys);
|
||||
auto wxsys = date::clock_cast<WinSystemClock>(xsys);
|
||||
|
||||
auto duration = dur_bound(std::chrono::system_clock::now() - start);
|
||||
|
||||
auto error = wsys.time_since_epoch() - wxsys.time_since_epoch();
|
||||
REQUIRE(error < duration);
|
||||
REQUIRE(error > -duration);
|
||||
}
|
||||
|
||||
SECTION("1993/12/21, clock_no_scaling = false") {
|
||||
static constexpr sys_days sys(1993_y / dec / 21);
|
||||
cvars::clock_no_scaling = false;
|
||||
Clock::set_guest_time_scalar(1.0);
|
||||
|
||||
static constexpr auto wsys = WinSystemClock::from_sys(sys);
|
||||
|
||||
auto start = std::chrono::system_clock::now();
|
||||
|
||||
auto xsys = date::clock_cast<XSystemClock>(wsys);
|
||||
auto wxsys = date::clock_cast<WinSystemClock>(xsys);
|
||||
|
||||
auto duration = dur_bound(std::chrono::system_clock::now() - start);
|
||||
|
||||
auto error1 = wsys.time_since_epoch() - xsys.time_since_epoch();
|
||||
auto error2 = xsys.time_since_epoch() - wxsys.time_since_epoch();
|
||||
auto error3 = wsys - wxsys;
|
||||
|
||||
REQUIRE(error1 < 10ms);
|
||||
REQUIRE(error1 > -10ms);
|
||||
REQUIRE(error2 < 10ms);
|
||||
REQUIRE(error2 > -10ms);
|
||||
REQUIRE(error3 < duration);
|
||||
REQUIRE(error3 > -duration);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace xe::base::test
|
||||
|
||||
// only make these available now
|
||||
#include "xenia/base/chrono_steady_cast.h"
|
||||
|
||||
namespace xe::base::test {
|
||||
|
||||
TEST_CASE("WinSystemClock <-> steady_clock", "[clock_cast]") {
|
||||
using namespace xe::chrono;
|
||||
using namespace date;
|
||||
using sty_clock = std::chrono::steady_clock;
|
||||
|
||||
// steady conversion is mostly used to convert wait times
|
||||
|
||||
SECTION("now") {
|
||||
auto sty = sty_clock::now();
|
||||
|
||||
// Because steady casts are imprecise, we need to allow some margin of error
|
||||
auto start = sty_clock::now();
|
||||
|
||||
auto wsty = clock_cast<WinSystemClock>(sty);
|
||||
auto sty2 = clock_cast<sty_clock>(wsty);
|
||||
|
||||
auto duration = dur_bound(sty_clock::now() - start).count();
|
||||
auto error = std::abs((sty2 - sty).count());
|
||||
REQUIRE(error <= duration);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace xe::base::test
|
|
@ -11,8 +11,11 @@
|
|||
|
||||
#include "xenia/base/threading.h"
|
||||
|
||||
#define CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER
|
||||
#include "third_party/catch/include/catch.hpp"
|
||||
|
||||
#include "third_party/disruptorplus/include/disruptorplus/spin_wait.hpp"
|
||||
|
||||
namespace xe {
|
||||
namespace base {
|
||||
namespace test {
|
||||
|
@ -24,12 +27,12 @@ template <class Clock, class Duration, class Predicate>
|
|||
bool spin_wait_until(
|
||||
const std::chrono::time_point<Clock, Duration>& timeout_time,
|
||||
Predicate stop_waiting) {
|
||||
disruptorplus::spin_wait spinner;
|
||||
while (!stop_waiting()) {
|
||||
if (std::chrono::steady_clock::now() >= timeout_time) {
|
||||
return false;
|
||||
}
|
||||
// Needed for valgrind because it basically runs one thread:
|
||||
MaybeYield();
|
||||
spinner.spin_once();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -42,9 +45,9 @@ bool spin_wait_for(const std::chrono::duration<Rep, Period>& rel_time,
|
|||
|
||||
template <class Predicate>
|
||||
void spin_wait(Predicate stop_waiting) {
|
||||
disruptorplus::spin_wait spinner;
|
||||
while (!stop_waiting()) {
|
||||
// Needed for valgrind because it basically runs one thread:
|
||||
MaybeYield();
|
||||
spinner.spin_once();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -241,8 +244,63 @@ TEST_CASE("HighResolutionTimer") {
|
|||
REQUIRE(counter2 <= ratio2 + 1);
|
||||
}
|
||||
|
||||
// TODO(bwrsandman): Check on which thread callbacks are executed when
|
||||
// spawned from differing threads
|
||||
// Test many timers
|
||||
{
|
||||
const auto interval = 50ms;
|
||||
const size_t timer_count = 128;
|
||||
std::atomic<uint64_t> counter(0);
|
||||
auto cb = [&counter, &timer_thread] {
|
||||
++counter;
|
||||
REQUIRE(Thread::GetCurrentThread() == timer_thread);
|
||||
};
|
||||
std::vector<std::unique_ptr<HighResolutionTimer>> timers;
|
||||
auto start = std::chrono::steady_clock::now();
|
||||
for (size_t i = 0; i < timer_count; i++) {
|
||||
timers.emplace_back(HighResolutionTimer::CreateRepeating(interval, cb));
|
||||
}
|
||||
Sleep(wait_time);
|
||||
timers.clear();
|
||||
auto duration = std::chrono::steady_clock::now() - start;
|
||||
|
||||
REQUIRE(duration.count() >= wait_time.count());
|
||||
auto ratio = static_cast<uint64_t>(timer_count * duration / interval);
|
||||
REQUIRE(counter >= ratio - timer_count);
|
||||
REQUIRE(counter <= ratio + timer_count);
|
||||
}
|
||||
|
||||
// Check timer order
|
||||
{
|
||||
constexpr size_t timer_count = 16;
|
||||
using pair_t = std::pair<std::atomic<uint64_t>,
|
||||
std::chrono::high_resolution_clock::time_point>;
|
||||
std::array<pair_t, timer_count> time_points{};
|
||||
auto start = std::chrono::steady_clock::now();
|
||||
auto gen_callback = [&timer_thread, &time_points](size_t i) {
|
||||
return [&timer_thread, &time_points, i]() {
|
||||
auto& pair = time_points[i];
|
||||
if (pair.first.fetch_add(1) == 1) {
|
||||
pair.second = std::chrono::high_resolution_clock::now();
|
||||
pair.first++;
|
||||
}
|
||||
REQUIRE(Thread::GetCurrentThread() == timer_thread);
|
||||
};
|
||||
};
|
||||
std::vector<std::unique_ptr<HighResolutionTimer>> timers;
|
||||
for (size_t i = 0; i < timer_count; i++) {
|
||||
timers.emplace_back(HighResolutionTimer::CreateRepeating(
|
||||
10ms * (timer_count - i), gen_callback(timer_count - i - 1)));
|
||||
}
|
||||
REQUIRE(spin_wait_for(2s, [&] {
|
||||
return std::all_of(time_points.cbegin(), time_points.cend(),
|
||||
[](auto& pair) { return pair.first >= 3; });
|
||||
}));
|
||||
|
||||
timers.clear();
|
||||
|
||||
REQUIRE(std::is_sorted(
|
||||
time_points.cbegin(), time_points.cend(),
|
||||
[](auto& left, auto& right) { return left.second < right.second; }));
|
||||
}
|
||||
}
|
||||
|
||||
TEST_CASE("Wait on Multiple Handles", "[wait]") {
|
||||
|
@ -731,8 +789,8 @@ TEST_CASE("Wait on Timer", "[timer]") {
|
|||
REQUIRE(timer);
|
||||
result = Wait(timer.get(), false, 1ms);
|
||||
REQUIRE(result == WaitResult::kTimeout);
|
||||
REQUIRE(timer->SetOnce(1ms)); // Signals it
|
||||
result = Wait(timer.get(), false, 2ms);
|
||||
REQUIRE(timer->SetOnceAfter(1ms)); // Signals it
|
||||
result = Wait(timer.get(), false, 20ms);
|
||||
REQUIRE(result == WaitResult::kSuccess);
|
||||
result = Wait(timer.get(), false, 1ms);
|
||||
REQUIRE(result == WaitResult::kSuccess); // Did not reset
|
||||
|
@ -742,21 +800,20 @@ TEST_CASE("Wait on Timer", "[timer]") {
|
|||
REQUIRE(timer);
|
||||
result = Wait(timer.get(), false, 1ms);
|
||||
REQUIRE(result == WaitResult::kTimeout);
|
||||
REQUIRE(timer->SetOnce(1ms)); // Signals it
|
||||
result = Wait(timer.get(), false, 2ms);
|
||||
REQUIRE(timer->SetOnceAfter(1ms)); // Signals it
|
||||
result = Wait(timer.get(), false, 20ms);
|
||||
REQUIRE(result == WaitResult::kSuccess);
|
||||
result = Wait(timer.get(), false, 1ms);
|
||||
REQUIRE(result == WaitResult::kTimeout); // Did reset
|
||||
|
||||
// TODO(bwrsandman): This test unexpectedly fails under windows
|
||||
// Test long due time
|
||||
// timer = Timer::CreateSynchronizationTimer();
|
||||
// REQUIRE(timer->SetOnce(10s));
|
||||
// result = Wait(timer.get(), false, 10ms); // Still signals under windows
|
||||
// REQUIRE(result == WaitResult::kTimeout);
|
||||
timer = Timer::CreateSynchronizationTimer();
|
||||
REQUIRE(timer->SetOnceAfter(10s));
|
||||
result = Wait(timer.get(), false, 10ms);
|
||||
REQUIRE(result == WaitResult::kTimeout);
|
||||
|
||||
// Test Repeating
|
||||
REQUIRE(timer->SetRepeating(1ms, 10ms));
|
||||
REQUIRE(timer->SetRepeatingAfter(1ms, 10ms));
|
||||
for (int i = 0; i < 10; ++i) {
|
||||
result = Wait(timer.get(), false, 20ms);
|
||||
INFO(i);
|
||||
|
@ -777,12 +834,12 @@ TEST_CASE("Wait on Timer", "[timer]") {
|
|||
result = Wait(timer.get(), false, 20ms);
|
||||
REQUIRE(result == WaitResult::kTimeout);
|
||||
// Cancel with SetOnce
|
||||
REQUIRE(timer->SetRepeating(1ms, 10ms));
|
||||
REQUIRE(timer->SetRepeatingAfter(1ms, 10ms));
|
||||
for (int i = 0; i < 10; ++i) {
|
||||
result = Wait(timer.get(), false, 20ms);
|
||||
REQUIRE(result == WaitResult::kSuccess);
|
||||
}
|
||||
REQUIRE(timer->SetOnce(1ms));
|
||||
REQUIRE(timer->SetOnceAfter(1ms));
|
||||
result = Wait(timer.get(), false, 20ms);
|
||||
REQUIRE(result == WaitResult::kSuccess); // Signal from Set Once
|
||||
result = Wait(timer.get(), false, 20ms);
|
||||
|
@ -804,7 +861,7 @@ TEST_CASE("Wait on Multiple Timers", "[timer]") {
|
|||
REQUIRE(any_result.second == 0);
|
||||
|
||||
// Some signaled
|
||||
REQUIRE(timer1->SetOnce(1ms));
|
||||
REQUIRE(timer1->SetOnceAfter(1ms));
|
||||
all_result = WaitAll({timer0.get(), timer1.get()}, false, 100ms);
|
||||
REQUIRE(all_result == WaitResult::kTimeout);
|
||||
any_result = WaitAny({timer0.get(), timer1.get()}, false, 100ms);
|
||||
|
@ -812,11 +869,11 @@ TEST_CASE("Wait on Multiple Timers", "[timer]") {
|
|||
REQUIRE(any_result.second == 1);
|
||||
|
||||
// All signaled
|
||||
REQUIRE(timer0->SetOnce(1ms));
|
||||
REQUIRE(timer0->SetOnceAfter(1ms));
|
||||
all_result = WaitAll({timer0.get(), timer1.get()}, false, 100ms);
|
||||
REQUIRE(all_result == WaitResult::kSuccess);
|
||||
REQUIRE(timer0->SetOnce(1ms));
|
||||
Sleep(1ms);
|
||||
REQUIRE(timer0->SetOnceAfter(1ms));
|
||||
Sleep(2ms);
|
||||
any_result = WaitAny({timer0.get(), timer1.get()}, false, 100ms);
|
||||
REQUIRE(any_result.first == WaitResult::kSuccess);
|
||||
REQUIRE(any_result.second == 0);
|
||||
|
|
|
@ -25,8 +25,10 @@
|
|||
#include <vector>
|
||||
|
||||
#include "xenia/base/assert.h"
|
||||
#include "xenia/base/chrono.h"
|
||||
#include "xenia/base/literals.h"
|
||||
#include "xenia/base/platform.h"
|
||||
#include "xenia/base/threading_timer_queue.h"
|
||||
|
||||
namespace xe {
|
||||
namespace threading {
|
||||
|
@ -141,18 +143,38 @@ bool FreeTlsHandle(TlsHandle handle);
|
|||
uintptr_t GetTlsValue(TlsHandle handle);
|
||||
bool SetTlsValue(TlsHandle handle, uintptr_t value);
|
||||
|
||||
// A high-resolution timer capable of firing at millisecond-precision.
|
||||
// All timers created in this way are executed in the same thread so
|
||||
// callbacks must be kept short or else all timers will be impacted.
|
||||
// A high-resolution timer capable of firing at millisecond-precision. All
|
||||
// timers created in this way are executed in the same thread so callbacks must
|
||||
// be kept short or else all timers will be impacted. This is a simplified
|
||||
// wrapper around QueueTimerRecurring which automatically cancels the timer on
|
||||
// destruction.
|
||||
class HighResolutionTimer {
|
||||
HighResolutionTimer(std::chrono::milliseconds interval,
|
||||
std::function<void()> callback) {
|
||||
assert_not_null(callback);
|
||||
wait_item_ = QueueTimerRecurring(
|
||||
[callback = std::move(callback)](void*) { callback(); }, nullptr,
|
||||
TimerQueueWaitItem::clock::now(), interval);
|
||||
}
|
||||
|
||||
public:
|
||||
virtual ~HighResolutionTimer() = default;
|
||||
~HighResolutionTimer() {
|
||||
if (auto wait_item = wait_item_.lock()) {
|
||||
wait_item->Disarm();
|
||||
}
|
||||
}
|
||||
|
||||
// Creates a new repeating timer with the given period.
|
||||
// The given function will be called back as close to the given period as
|
||||
// possible.
|
||||
static std::unique_ptr<HighResolutionTimer> CreateRepeating(
|
||||
std::chrono::milliseconds period, std::function<void()> callback);
|
||||
std::chrono::milliseconds period, std::function<void()> callback) {
|
||||
return std::unique_ptr<HighResolutionTimer>(
|
||||
new HighResolutionTimer(period, std::move(callback)));
|
||||
}
|
||||
|
||||
private:
|
||||
std::weak_ptr<TimerQueueWaitItem> wait_item_;
|
||||
};
|
||||
|
||||
// Results for a WaitHandle operation.
|
||||
|
@ -317,6 +339,13 @@ class Mutant : public WaitHandle {
|
|||
// https://msdn.microsoft.com/en-us/library/windows/desktop/ms687012(v=vs.85).aspx
|
||||
class Timer : public WaitHandle {
|
||||
public:
|
||||
// Make vtable entries for both so we can defer conversions and only do them
|
||||
// if really necessary (let the calling code what clock it prefers). Windows
|
||||
// kernel sync primitives will work with WinSystemClock while our own
|
||||
// implementation works with steady_clock.
|
||||
using WClock_ = xe::chrono::WinSystemClock;
|
||||
using GClock_ = std::chrono::steady_clock; // generic
|
||||
|
||||
// Creates a timer whose state remains signaled until SetOnce() or
|
||||
// SetRepeating() is called to establish a new due time.
|
||||
static std::unique_ptr<Timer> CreateManualResetTimer();
|
||||
|
@ -329,25 +358,27 @@ class Timer : public WaitHandle {
|
|||
// timer is signaled and the thread that set the timer calls the optional
|
||||
// completion routine.
|
||||
// Returns true on success.
|
||||
virtual bool SetOnce(std::chrono::nanoseconds due_time,
|
||||
std::function<void()> opt_callback = nullptr) = 0;
|
||||
virtual bool SetOnceAfter(xe::chrono::hundrednanoseconds rel_time,
|
||||
std::function<void()> opt_callback = nullptr) = 0;
|
||||
virtual bool SetOnceAt(WClock_::time_point due_time,
|
||||
std::function<void()> opt_callback = nullptr) = 0;
|
||||
virtual bool SetOnceAt(GClock_::time_point due_time,
|
||||
std::function<void()> opt_callback = nullptr) = 0;
|
||||
|
||||
// Activates the specified waitable timer. When the due time arrives, the
|
||||
// timer is signaled and the thread that set the timer calls the optional
|
||||
// completion routine. A periodic timer automatically reactivates each time
|
||||
// the period elapses, until the timer is canceled or reset.
|
||||
// Returns true on success.
|
||||
virtual bool SetRepeating(std::chrono::nanoseconds due_time,
|
||||
std::chrono::milliseconds period,
|
||||
std::function<void()> opt_callback = nullptr) = 0;
|
||||
template <typename Rep, typename Period>
|
||||
bool SetRepeating(std::chrono::nanoseconds due_time,
|
||||
std::chrono::duration<Rep, Period> period,
|
||||
std::function<void()> opt_callback = nullptr) {
|
||||
return SetRepeating(
|
||||
due_time, std::chrono::duration_cast<std::chrono::milliseconds>(period),
|
||||
std::move(opt_callback));
|
||||
}
|
||||
virtual bool SetRepeatingAfter(
|
||||
xe::chrono::hundrednanoseconds rel_time, std::chrono::milliseconds period,
|
||||
std::function<void()> opt_callback = nullptr) = 0;
|
||||
virtual bool SetRepeatingAt(WClock_::time_point due_time,
|
||||
std::chrono::milliseconds period,
|
||||
std::function<void()> opt_callback = nullptr) = 0;
|
||||
virtual bool SetRepeatingAt(GClock_::time_point due_time,
|
||||
std::chrono::milliseconds period,
|
||||
std::function<void()> opt_callback = nullptr) = 0;
|
||||
|
||||
// Stops the timer before it can be set to the signaled state and cancels
|
||||
// outstanding callbacks. Threads performing a wait operation on the timer
|
||||
|
|
|
@ -10,8 +10,9 @@
|
|||
#include "xenia/base/threading.h"
|
||||
|
||||
#include "xenia/base/assert.h"
|
||||
#include "xenia/base/delay_scheduler.h"
|
||||
#include "xenia/base/chrono_steady_cast.h"
|
||||
#include "xenia/base/platform.h"
|
||||
#include "xenia/base/threading_timer_queue.h"
|
||||
|
||||
#include <pthread.h>
|
||||
#include <sched.h>
|
||||
|
@ -78,47 +79,6 @@ void AndroidShutdown() {
|
|||
}
|
||||
#endif
|
||||
|
||||
// This is separately allocated for each (`HighResolution`)`Timer` object. It
|
||||
// will be cleaned up some time (`timers_garbage_collector_delay`) after the
|
||||
// posix timer was canceled because posix `timer_delete(...)` does not remove
|
||||
// pending timer signals.
|
||||
// https://stackoverflow.com/questions/49756114/linux-timer-pending-signal
|
||||
struct timer_callback_info_t {
|
||||
std::atomic_bool disarmed;
|
||||
#if !XE_HAS_SIGEV_THREAD_ID
|
||||
pthread_t target_thread;
|
||||
#endif
|
||||
std::function<void()> callback;
|
||||
void* userdata;
|
||||
|
||||
timer_callback_info_t(std::function<void()> callback)
|
||||
: disarmed(false),
|
||||
#if !XE_HAS_SIGEV_THREAD_ID
|
||||
target_thread(),
|
||||
#endif
|
||||
callback(callback),
|
||||
userdata(nullptr) {
|
||||
}
|
||||
};
|
||||
|
||||
// GC for timer signal info structs:
|
||||
constexpr uint_fast8_t timers_garbage_collector_scale_ =
|
||||
#if XE_HAS_SIGEV_THREAD_ID
|
||||
1;
|
||||
#else
|
||||
2;
|
||||
#endif
|
||||
DelayScheduler<timer_callback_info_t> timers_garbage_collector_(
|
||||
512 * timers_garbage_collector_scale_,
|
||||
[](timer_callback_info_t* info) {
|
||||
assert_not_null(info);
|
||||
delete info;
|
||||
},
|
||||
true);
|
||||
// Delay we have to assume it takes to clear all pending signals (maximum):
|
||||
constexpr auto timers_garbage_collector_delay =
|
||||
std::chrono::milliseconds(100 * timers_garbage_collector_scale_);
|
||||
|
||||
template <typename _Rep, typename _Period>
|
||||
inline timespec DurationToTimeSpec(
|
||||
std::chrono::duration<_Rep, _Period> duration) {
|
||||
|
@ -133,8 +93,6 @@ inline timespec DurationToTimeSpec(
|
|||
// gdb tip, for SIG = SIGRTMIN + SignalType : handle SIG nostop
|
||||
// lldb tip, for SIG = SIGRTMIN + SignalType : process handle SIG -s false
|
||||
enum class SignalType {
|
||||
kHighResolutionTimer,
|
||||
kTimer,
|
||||
kThreadSuspend,
|
||||
kThreadUserCallback,
|
||||
#if XE_PLATFORM_ANDROID
|
||||
|
@ -232,71 +190,6 @@ bool SetTlsValue(TlsHandle handle, uintptr_t value) {
|
|||
reinterpret_cast<void*>(value)) == 0;
|
||||
}
|
||||
|
||||
class PosixHighResolutionTimer : public HighResolutionTimer {
|
||||
public:
|
||||
explicit PosixHighResolutionTimer(std::function<void()> callback)
|
||||
: valid_(false) {
|
||||
callback_info_ = new timer_callback_info_t(std::move(callback));
|
||||
}
|
||||
~PosixHighResolutionTimer() override {
|
||||
if (valid_) {
|
||||
callback_info_->disarmed = true;
|
||||
timer_delete(timerid_);
|
||||
// Deliberately leaks memory when wait queue is full instead of blogs,
|
||||
// check logs
|
||||
static_cast<void>(timers_garbage_collector_.TryScheduleAfter(
|
||||
callback_info_, timers_garbage_collector_delay));
|
||||
} else {
|
||||
delete callback_info_;
|
||||
}
|
||||
}
|
||||
|
||||
bool Initialize(std::chrono::milliseconds period) {
|
||||
if (valid_) {
|
||||
// Double initialization
|
||||
assert_always();
|
||||
return false;
|
||||
}
|
||||
// Create timer
|
||||
sigevent sev{};
|
||||
#if XE_HAS_SIGEV_THREAD_ID
|
||||
sev.sigev_notify = SIGEV_SIGNAL | SIGEV_THREAD_ID;
|
||||
sev.sigev_notify_thread_id = gettid();
|
||||
#else
|
||||
sev.sigev_notify = SIGEV_SIGNAL;
|
||||
callback_info_->target_thread = pthread_self();
|
||||
#endif
|
||||
sev.sigev_signo = GetSystemSignal(SignalType::kHighResolutionTimer);
|
||||
sev.sigev_value.sival_ptr = callback_info_;
|
||||
if (timer_create(CLOCK_MONOTONIC, &sev, &timerid_) == -1) return false;
|
||||
|
||||
// Start timer
|
||||
itimerspec its{};
|
||||
its.it_value = DurationToTimeSpec(period);
|
||||
its.it_interval = its.it_value;
|
||||
valid_ = timer_settime(timerid_, 0, &its, nullptr) != -1;
|
||||
if (!valid_) {
|
||||
timer_delete(timerid_);
|
||||
}
|
||||
return valid_;
|
||||
}
|
||||
|
||||
private:
|
||||
timer_callback_info_t* callback_info_;
|
||||
timer_t timerid_;
|
||||
bool valid_; // all values for timer_t are legal so we need this
|
||||
};
|
||||
|
||||
std::unique_ptr<HighResolutionTimer> HighResolutionTimer::CreateRepeating(
|
||||
std::chrono::milliseconds period, std::function<void()> callback) {
|
||||
install_signal_handler(SignalType::kHighResolutionTimer);
|
||||
auto timer = std::make_unique<PosixHighResolutionTimer>(std::move(callback));
|
||||
if (!timer->Initialize(period)) {
|
||||
return nullptr;
|
||||
}
|
||||
return std::move(timer);
|
||||
}
|
||||
|
||||
class PosixConditionBase {
|
||||
public:
|
||||
virtual bool Signal() = 0;
|
||||
|
@ -495,10 +388,7 @@ template <>
|
|||
class PosixCondition<Timer> : public PosixConditionBase {
|
||||
public:
|
||||
explicit PosixCondition(bool manual_reset)
|
||||
: timer_(nullptr),
|
||||
callback_info_(nullptr),
|
||||
signal_(false),
|
||||
manual_reset_(manual_reset) {}
|
||||
: callback_(nullptr), signal_(false), manual_reset_(manual_reset) {}
|
||||
|
||||
virtual ~PosixCondition() { Cancel(); }
|
||||
|
||||
|
@ -509,58 +399,55 @@ class PosixCondition<Timer> : public PosixConditionBase {
|
|||
return true;
|
||||
}
|
||||
|
||||
// TODO(bwrsandman): due_times of under 1ms deadlock under travis
|
||||
// TODO(joellinn): This is likely due to deadlock on mutex_ if Signal() is
|
||||
// called from signal_handler running in Thread A while thread A was still in
|
||||
// Set(...) routine inside the lock
|
||||
bool Set(std::chrono::nanoseconds due_time, std::chrono::milliseconds period,
|
||||
std::function<void()> opt_callback = nullptr) {
|
||||
void SetOnce(std::chrono::steady_clock::time_point due_time,
|
||||
std::function<void()> opt_callback) {
|
||||
Cancel();
|
||||
|
||||
std::lock_guard<std::mutex> lock(mutex_);
|
||||
callback_info_ = new timer_callback_info_t(std::move(opt_callback));
|
||||
callback_info_->userdata = this;
|
||||
|
||||
callback_ = std::move(opt_callback);
|
||||
signal_ = false;
|
||||
|
||||
// Create timer
|
||||
sigevent sev{};
|
||||
#if XE_HAS_SIGEV_THREAD_ID
|
||||
sev.sigev_notify = SIGEV_SIGNAL | SIGEV_THREAD_ID;
|
||||
sev.sigev_notify_thread_id = gettid();
|
||||
#else
|
||||
sev.sigev_notify = SIGEV_SIGNAL;
|
||||
callback_info_->target_thread = pthread_self();
|
||||
#endif
|
||||
sev.sigev_signo = GetSystemSignal(SignalType::kTimer);
|
||||
sev.sigev_value.sival_ptr = callback_info_;
|
||||
if (timer_create(CLOCK_MONOTONIC, &sev, &timer_) == -1) {
|
||||
delete callback_info_;
|
||||
return false;
|
||||
}
|
||||
|
||||
// Start timer
|
||||
itimerspec its{};
|
||||
its.it_value = DurationToTimeSpec(due_time);
|
||||
its.it_interval = DurationToTimeSpec(period);
|
||||
return timer_settime(timer_, 0, &its, nullptr) == 0;
|
||||
wait_item_ = QueueTimerOnce(&CompletionRoutine, this, due_time);
|
||||
}
|
||||
|
||||
bool Cancel() {
|
||||
void SetRepeating(std::chrono::steady_clock::time_point due_time,
|
||||
std::chrono::milliseconds period,
|
||||
std::function<void()> opt_callback) {
|
||||
Cancel();
|
||||
|
||||
std::lock_guard<std::mutex> lock(mutex_);
|
||||
bool result = true;
|
||||
if (timer_) {
|
||||
callback_info_->disarmed = true;
|
||||
result = timer_delete(timer_) == 0;
|
||||
timer_ = nullptr;
|
||||
static_cast<void>(timers_garbage_collector_.TryScheduleAfter(
|
||||
callback_info_, timers_garbage_collector_delay));
|
||||
callback_info_ = nullptr;
|
||||
|
||||
callback_ = std::move(opt_callback);
|
||||
signal_ = false;
|
||||
wait_item_ =
|
||||
QueueTimerRecurring(&CompletionRoutine, this, due_time, period);
|
||||
}
|
||||
|
||||
void Cancel() {
|
||||
if (auto wait_item = wait_item_.lock()) {
|
||||
wait_item->Disarm();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
void* native_handle() const override {
|
||||
return reinterpret_cast<void*>(timer_);
|
||||
assert_always();
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
private:
|
||||
static void CompletionRoutine(void* userdata) {
|
||||
assert_not_null(userdata);
|
||||
auto timer = reinterpret_cast<PosixCondition<Timer>*>(userdata);
|
||||
timer->Signal();
|
||||
// As the callback may reset the timer, store local.
|
||||
std::function<void()> callback;
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(timer->mutex_);
|
||||
callback = timer->callback_;
|
||||
}
|
||||
if (callback) {
|
||||
callback();
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
|
@ -570,8 +457,8 @@ class PosixCondition<Timer> : public PosixConditionBase {
|
|||
signal_ = false;
|
||||
}
|
||||
}
|
||||
timer_t timer_;
|
||||
timer_callback_info_t* callback_info_;
|
||||
std::weak_ptr<TimerQueueWaitItem> wait_item_;
|
||||
std::function<void()> callback_;
|
||||
volatile bool signal_;
|
||||
const bool manual_reset_;
|
||||
};
|
||||
|
@ -1072,29 +959,57 @@ std::unique_ptr<Mutant> Mutant::Create(bool initial_owner) {
|
|||
}
|
||||
|
||||
class PosixTimer : public PosixConditionHandle<Timer> {
|
||||
using WClock_ = Timer::WClock_;
|
||||
using GClock_ = Timer::GClock_;
|
||||
|
||||
public:
|
||||
explicit PosixTimer(bool manual_reset) : PosixConditionHandle(manual_reset) {}
|
||||
~PosixTimer() override = default;
|
||||
bool SetOnce(std::chrono::nanoseconds due_time,
|
||||
std::function<void()> opt_callback) override {
|
||||
return handle_.Set(due_time, std::chrono::milliseconds::zero(),
|
||||
std::move(opt_callback));
|
||||
|
||||
bool SetOnceAfter(xe::chrono::hundrednanoseconds rel_time,
|
||||
std::function<void()> opt_callback = nullptr) override {
|
||||
return SetOnceAt(GClock_::now() + rel_time, std::move(opt_callback));
|
||||
}
|
||||
bool SetRepeating(std::chrono::nanoseconds due_time,
|
||||
std::chrono::milliseconds period,
|
||||
std::function<void()> opt_callback) override {
|
||||
return handle_.Set(due_time, period, std::move(opt_callback));
|
||||
bool SetOnceAt(WClock_::time_point due_time,
|
||||
std::function<void()> opt_callback = nullptr) override {
|
||||
return SetOnceAt(date::clock_cast<GClock_>(due_time),
|
||||
std::move(opt_callback));
|
||||
};
|
||||
bool SetOnceAt(GClock_::time_point due_time,
|
||||
std::function<void()> opt_callback = nullptr) override {
|
||||
handle_.SetOnce(due_time, std::move(opt_callback));
|
||||
return true;
|
||||
}
|
||||
|
||||
bool SetRepeatingAfter(
|
||||
xe::chrono::hundrednanoseconds rel_time, std::chrono::milliseconds period,
|
||||
std::function<void()> opt_callback = nullptr) override {
|
||||
return SetRepeatingAt(GClock_::now() + rel_time, period,
|
||||
std::move(opt_callback));
|
||||
}
|
||||
bool SetRepeatingAt(WClock_::time_point due_time,
|
||||
std::chrono::milliseconds period,
|
||||
std::function<void()> opt_callback = nullptr) override {
|
||||
return SetRepeatingAt(date::clock_cast<GClock_>(due_time), period,
|
||||
std::move(opt_callback));
|
||||
}
|
||||
bool SetRepeatingAt(GClock_::time_point due_time,
|
||||
std::chrono::milliseconds period,
|
||||
std::function<void()> opt_callback = nullptr) override {
|
||||
handle_.SetRepeating(due_time, period, std::move(opt_callback));
|
||||
return true;
|
||||
}
|
||||
bool Cancel() override {
|
||||
handle_.Cancel();
|
||||
return true;
|
||||
}
|
||||
bool Cancel() override { return handle_.Cancel(); }
|
||||
};
|
||||
|
||||
std::unique_ptr<Timer> Timer::CreateManualResetTimer() {
|
||||
install_signal_handler(SignalType::kTimer);
|
||||
return std::make_unique<PosixTimer>(true);
|
||||
}
|
||||
|
||||
std::unique_ptr<Timer> Timer::CreateSynchronizationTimer() {
|
||||
install_signal_handler(SignalType::kTimer);
|
||||
return std::make_unique<PosixTimer>(false);
|
||||
}
|
||||
|
||||
|
@ -1252,53 +1167,6 @@ void set_name(const std::string_view name) {
|
|||
|
||||
static void signal_handler(int signal, siginfo_t* info, void* /*context*/) {
|
||||
switch (GetSystemSignalType(signal)) {
|
||||
case SignalType::kHighResolutionTimer: {
|
||||
assert_not_null(info->si_value.sival_ptr);
|
||||
auto timer_info =
|
||||
reinterpret_cast<timer_callback_info_t*>(info->si_value.sival_ptr);
|
||||
if (!timer_info->disarmed) {
|
||||
#if XE_HAS_SIGEV_THREAD_ID
|
||||
{
|
||||
#else
|
||||
if (pthread_self() != timer_info->target_thread) {
|
||||
sigval info_inner{};
|
||||
info_inner.sival_ptr = timer_info;
|
||||
const auto queueres = pthread_sigqueue(
|
||||
timer_info->target_thread,
|
||||
GetSystemSignal(SignalType::kHighResolutionTimer), info_inner);
|
||||
assert_zero(queueres);
|
||||
} else {
|
||||
#endif
|
||||
timer_info->callback();
|
||||
}
|
||||
}
|
||||
} break;
|
||||
case SignalType::kTimer: {
|
||||
assert_not_null(info->si_value.sival_ptr);
|
||||
auto timer_info =
|
||||
reinterpret_cast<timer_callback_info_t*>(info->si_value.sival_ptr);
|
||||
if (!timer_info->disarmed) {
|
||||
assert_not_null(timer_info->userdata);
|
||||
auto timer = static_cast<PosixCondition<Timer>*>(timer_info->userdata);
|
||||
#if XE_HAS_SIGEV_THREAD_ID
|
||||
{
|
||||
#else
|
||||
if (pthread_self() != timer_info->target_thread) {
|
||||
sigval info_inner{};
|
||||
info_inner.sival_ptr = timer_info;
|
||||
const auto queueres =
|
||||
pthread_sigqueue(timer_info->target_thread,
|
||||
GetSystemSignal(SignalType::kTimer), info_inner);
|
||||
assert_zero(queueres);
|
||||
} else {
|
||||
#endif
|
||||
timer->Signal();
|
||||
if (timer_info->callback) {
|
||||
timer_info->callback();
|
||||
}
|
||||
}
|
||||
}
|
||||
} break;
|
||||
case SignalType::kThreadSuspend: {
|
||||
assert_not_null(current_thread_);
|
||||
current_thread_->WaitSuspended();
|
||||
|
|
|
@ -0,0 +1,213 @@
|
|||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2022 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#include <algorithm>
|
||||
#include <forward_list>
|
||||
|
||||
#include "third_party/disruptorplus/include/disruptorplus/multi_threaded_claim_strategy.hpp"
|
||||
#include "third_party/disruptorplus/include/disruptorplus/ring_buffer.hpp"
|
||||
#include "third_party/disruptorplus/include/disruptorplus/sequence_barrier.hpp"
|
||||
#include "third_party/disruptorplus/include/disruptorplus/spin_wait.hpp"
|
||||
#include "third_party/disruptorplus/include/disruptorplus/spin_wait_strategy.hpp"
|
||||
|
||||
#include "xenia/base/assert.h"
|
||||
#include "xenia/base/threading.h"
|
||||
#include "xenia/base/threading_timer_queue.h"
|
||||
|
||||
namespace dp = disruptorplus;
|
||||
|
||||
namespace xe {
|
||||
namespace threading {
|
||||
|
||||
using WaitItem = TimerQueueWaitItem;
|
||||
|
||||
class TimerQueue {
|
||||
public:
|
||||
using clock = WaitItem::clock;
|
||||
static_assert(clock::is_steady);
|
||||
|
||||
public:
|
||||
TimerQueue()
|
||||
: buffer_(kWaitCount),
|
||||
wait_strategy_(),
|
||||
claim_strategy_(kWaitCount, wait_strategy_),
|
||||
consumed_(wait_strategy_),
|
||||
shutdown_(false) {
|
||||
claim_strategy_.add_claim_barrier(consumed_);
|
||||
dispatch_thread_ = std::thread(&TimerQueue::TimerThreadMain, this);
|
||||
}
|
||||
|
||||
~TimerQueue() {
|
||||
shutdown_.store(true, std::memory_order_release);
|
||||
|
||||
// Kick dispatch thread to check shutdown flag
|
||||
auto wait_item = std::make_shared<WaitItem>(nullptr, nullptr, this,
|
||||
clock::time_point::min(),
|
||||
clock::duration::zero());
|
||||
wait_item->Disarm();
|
||||
QueueTimer(std::move(wait_item));
|
||||
|
||||
dispatch_thread_.join();
|
||||
}
|
||||
|
||||
void TimerThreadMain() {
|
||||
dp::sequence_t next_sequence = 0;
|
||||
const auto comp = [](const std::shared_ptr<WaitItem>& left,
|
||||
const std::shared_ptr<WaitItem>& right) {
|
||||
return left->due_ < right->due_;
|
||||
};
|
||||
|
||||
xe::threading::set_name("xe::threading::TimerQueue");
|
||||
|
||||
while (!shutdown_.load(std::memory_order_relaxed)) {
|
||||
{
|
||||
// Consume new wait items and add them to sorted wait queue
|
||||
dp::sequence_t available = claim_strategy_.wait_until_published(
|
||||
next_sequence, next_sequence - 1,
|
||||
wait_queue_.empty() ? clock::time_point::max()
|
||||
: wait_queue_.front()->due_);
|
||||
|
||||
// Check for timeout
|
||||
if (available != next_sequence - 1) {
|
||||
std::forward_list<std::shared_ptr<WaitItem>> wait_items;
|
||||
do {
|
||||
wait_items.push_front(std::move(buffer_[next_sequence]));
|
||||
} while (next_sequence++ != available);
|
||||
|
||||
consumed_.publish(available);
|
||||
|
||||
wait_items.sort(comp);
|
||||
wait_queue_.merge(wait_items, comp);
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
// Check wait queue, invoke callbacks and reschedule
|
||||
std::forward_list<std::shared_ptr<WaitItem>> wait_items;
|
||||
while (!wait_queue_.empty() &&
|
||||
wait_queue_.front()->due_ <= clock::now()) {
|
||||
auto wait_item = std::move(wait_queue_.front());
|
||||
wait_queue_.pop_front();
|
||||
|
||||
// Ensure that it isn't disarmed
|
||||
auto state = WaitItem::State::kIdle;
|
||||
if (wait_item->state_.compare_exchange_strong(
|
||||
state, WaitItem::State::kInCallback,
|
||||
std::memory_order_acq_rel)) {
|
||||
// Possibility to dispatch to a thread pool here
|
||||
assert_not_null(wait_item->callback_);
|
||||
wait_item->callback_(wait_item->userdata_);
|
||||
|
||||
if (wait_item->interval_ != clock::duration::zero() &&
|
||||
wait_item->state_.load(std::memory_order_acquire) !=
|
||||
WaitItem::State::kInCallbackSelfDisarmed) {
|
||||
// Item is recurring and didn't self-disarm during callback:
|
||||
wait_item->due_ += wait_item->interval_;
|
||||
wait_item->state_.store(WaitItem::State::kIdle,
|
||||
std::memory_order_release);
|
||||
wait_items.push_front(std::move(wait_item));
|
||||
} else {
|
||||
wait_item->state_.store(WaitItem::State::kDisarmed,
|
||||
std::memory_order_release);
|
||||
}
|
||||
} else {
|
||||
// Specifically, kInCallback is illegal here
|
||||
assert_true(WaitItem::State::kDisarmed == state);
|
||||
}
|
||||
}
|
||||
wait_items.sort(comp);
|
||||
wait_queue_.merge(wait_items, comp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::weak_ptr<WaitItem> QueueTimer(std::shared_ptr<WaitItem> wait_item) {
|
||||
auto wait_item_weak = std::weak_ptr<WaitItem>(wait_item);
|
||||
|
||||
// Mitigate callback flooding
|
||||
wait_item->due_ =
|
||||
std::max(clock::now() - wait_item->interval_, wait_item->due_);
|
||||
|
||||
auto sequence = claim_strategy_.claim_one();
|
||||
buffer_[sequence] = std::move(wait_item);
|
||||
claim_strategy_.publish(sequence);
|
||||
|
||||
return wait_item_weak;
|
||||
}
|
||||
|
||||
const std::thread& dispatch_thread() const { return dispatch_thread_; }
|
||||
|
||||
private:
|
||||
// This ring buffer will be used to introduce timers queued by the public API
|
||||
static constexpr size_t kWaitCount = 512;
|
||||
dp::ring_buffer<std::shared_ptr<WaitItem>> buffer_;
|
||||
dp::spin_wait_strategy wait_strategy_;
|
||||
dp::multi_threaded_claim_strategy<dp::spin_wait_strategy> claim_strategy_;
|
||||
dp::sequence_barrier<dp::spin_wait_strategy> consumed_;
|
||||
|
||||
// This is a _sorted_ (ascending due_) list of active timers managed by a
|
||||
// dedicated thread
|
||||
std::forward_list<std::shared_ptr<WaitItem>> wait_queue_;
|
||||
std::atomic_bool shutdown_;
|
||||
std::thread dispatch_thread_;
|
||||
};
|
||||
|
||||
xe::threading::TimerQueue timer_queue_;
|
||||
|
||||
void TimerQueueWaitItem::Disarm() {
|
||||
State state;
|
||||
|
||||
// Special case for calling from a callback itself
|
||||
if (std::this_thread::get_id() == parent_queue_->dispatch_thread().get_id()) {
|
||||
state = State::kInCallback;
|
||||
if (state_.compare_exchange_strong(state, State::kInCallbackSelfDisarmed,
|
||||
std::memory_order_acq_rel)) {
|
||||
// If we are self disarming from the callback set this special state and
|
||||
// exit
|
||||
return;
|
||||
}
|
||||
// Normal case can handle the rest
|
||||
}
|
||||
|
||||
dp::spin_wait spinner;
|
||||
state = State::kIdle;
|
||||
// Classes which hold WaitItems will often call Disarm() to cancel them during
|
||||
// destruction. This may lead to race conditions when the dispatch thread
|
||||
// executes a callback which accesses memory that is freed simultaneously due
|
||||
// to this. Therefore, we need to guarantee that no callbacks will be running
|
||||
// once Disarm() has returned.
|
||||
while (!state_.compare_exchange_weak(state, State::kDisarmed,
|
||||
std::memory_order_acq_rel)) {
|
||||
if (state == State::kDisarmed) {
|
||||
// Do not break for kInCallbackSelfDisarmed and keep spinning in order to
|
||||
// meet guarantees
|
||||
break;
|
||||
}
|
||||
state = State::kIdle;
|
||||
spinner.spin_once();
|
||||
}
|
||||
}
|
||||
|
||||
std::weak_ptr<WaitItem> QueueTimerOnce(std::function<void(void*)> callback,
|
||||
void* userdata,
|
||||
WaitItem::clock::time_point due) {
|
||||
return timer_queue_.QueueTimer(
|
||||
std::make_shared<WaitItem>(std::move(callback), userdata, &timer_queue_,
|
||||
due, WaitItem::clock::duration::zero()));
|
||||
}
|
||||
|
||||
std::weak_ptr<WaitItem> QueueTimerRecurring(
|
||||
std::function<void(void*)> callback, void* userdata,
|
||||
WaitItem::clock::time_point due, WaitItem::clock::duration interval) {
|
||||
return timer_queue_.QueueTimer(std::make_shared<WaitItem>(
|
||||
std::move(callback), userdata, &timer_queue_, due, interval));
|
||||
}
|
||||
|
||||
} // namespace threading
|
||||
} // namespace xe
|
|
@ -0,0 +1,79 @@
|
|||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2022 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef XENIA_BASE_THREADING_TIMER_QUEUE_H_
|
||||
#define XENIA_BASE_THREADING_TIMER_QUEUE_H_
|
||||
|
||||
#include <atomic>
|
||||
#include <chrono>
|
||||
#include <functional>
|
||||
#include <memory>
|
||||
|
||||
// This is a platform independent implementation of a timer queue similar to
|
||||
// Windows CreateTimerQueueTimer with WT_EXECUTEINTIMERTHREAD.
|
||||
|
||||
namespace xe::threading {
|
||||
|
||||
class TimerQueue;
|
||||
|
||||
struct TimerQueueWaitItem {
|
||||
using clock = std::chrono::steady_clock;
|
||||
|
||||
TimerQueueWaitItem(std::function<void(void*)> callback, void* userdata,
|
||||
TimerQueue* parent_queue, clock::time_point due,
|
||||
clock::duration interval)
|
||||
: callback_(std::move(callback)),
|
||||
userdata_(userdata),
|
||||
parent_queue_(parent_queue),
|
||||
due_(due),
|
||||
interval_(interval),
|
||||
state_(State::kIdle) {}
|
||||
|
||||
// Cancel the pending wait item. No callbacks will be running after this call.
|
||||
// The function blocks if a callback is running and returns only after the
|
||||
// callback has finished (except when called from the corresponding callback
|
||||
// itself, where it will mark the wait item for disarmament and return
|
||||
// immediately). Deadlocks are possible when a lock is held during disamament
|
||||
// and the corresponding callback is running concurrently, trying to acquire
|
||||
// said lock.
|
||||
void Disarm();
|
||||
|
||||
friend TimerQueue;
|
||||
|
||||
private:
|
||||
enum class State : uint_least8_t {
|
||||
kIdle = 0, // Waiting for the due time
|
||||
kInCallback, // Callback is being executed
|
||||
kInCallbackSelfDisarmed, // Callback is being executed and disarmed itself
|
||||
kDisarmed // Disarmed, waiting for destruction
|
||||
};
|
||||
static_assert(std::atomic<State>::is_always_lock_free);
|
||||
|
||||
std::function<void(void*)> callback_;
|
||||
void* userdata_;
|
||||
TimerQueue* parent_queue_;
|
||||
clock::time_point due_;
|
||||
clock::duration interval_; // zero if not recurring
|
||||
std::atomic<State> state_;
|
||||
};
|
||||
|
||||
std::weak_ptr<TimerQueueWaitItem> QueueTimerOnce(
|
||||
std::function<void(void*)> callback, void* userdata,
|
||||
TimerQueueWaitItem::clock::time_point due);
|
||||
|
||||
// Callback is first executed at due, then again repeatedly after interval
|
||||
// passes (unless interval == 0). The first callback will be scheduled at
|
||||
// `max(now() - interval, due)` to mitigate callback flooding.
|
||||
std::weak_ptr<TimerQueueWaitItem> QueueTimerRecurring(
|
||||
std::function<void(void*)> callback, void* userdata,
|
||||
TimerQueueWaitItem::clock::time_point due,
|
||||
TimerQueueWaitItem::clock::duration interval);
|
||||
} // namespace xe::threading
|
||||
|
||||
#endif
|
|
@ -8,9 +8,11 @@
|
|||
*/
|
||||
|
||||
#include "xenia/base/assert.h"
|
||||
#include "xenia/base/chrono_steady_cast.h"
|
||||
#include "xenia/base/logging.h"
|
||||
#include "xenia/base/platform_win.h"
|
||||
#include "xenia/base/threading.h"
|
||||
#include "xenia/base/threading_timer_queue.h"
|
||||
|
||||
#define LOG_LASTERROR() \
|
||||
{ XELOGI("Win32 Error 0x{:08X} in " __FUNCTION__ "(...)", GetLastError()); }
|
||||
|
@ -112,48 +114,6 @@ bool SetTlsValue(TlsHandle handle, uintptr_t value) {
|
|||
return TlsSetValue(handle, reinterpret_cast<void*>(value)) ? true : false;
|
||||
}
|
||||
|
||||
class Win32HighResolutionTimer : public HighResolutionTimer {
|
||||
public:
|
||||
Win32HighResolutionTimer(std::function<void()> callback)
|
||||
: callback_(std::move(callback)) {}
|
||||
~Win32HighResolutionTimer() override {
|
||||
if (valid_) {
|
||||
DeleteTimerQueueTimer(nullptr, handle_, INVALID_HANDLE_VALUE);
|
||||
handle_ = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
bool Initialize(std::chrono::milliseconds period) {
|
||||
if (valid_) {
|
||||
// Double initialization
|
||||
assert_always();
|
||||
return false;
|
||||
}
|
||||
valid_ = !!CreateTimerQueueTimer(
|
||||
&handle_, nullptr,
|
||||
[](PVOID param, BOOLEAN timer_or_wait_fired) {
|
||||
auto timer = reinterpret_cast<Win32HighResolutionTimer*>(param);
|
||||
timer->callback_();
|
||||
},
|
||||
this, 0, DWORD(period.count()), WT_EXECUTEINTIMERTHREAD);
|
||||
return valid_;
|
||||
}
|
||||
|
||||
private:
|
||||
std::function<void()> callback_;
|
||||
HANDLE handle_ = nullptr;
|
||||
bool valid_ = false; // Documentation does not state which HANDLE is invalid
|
||||
};
|
||||
|
||||
std::unique_ptr<HighResolutionTimer> HighResolutionTimer::CreateRepeating(
|
||||
std::chrono::milliseconds period, std::function<void()> callback) {
|
||||
auto timer = std::make_unique<Win32HighResolutionTimer>(std::move(callback));
|
||||
if (!timer->Initialize(period)) {
|
||||
return nullptr;
|
||||
}
|
||||
return std::move(timer);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
class Win32Handle : public T {
|
||||
public:
|
||||
|
@ -317,15 +277,28 @@ std::unique_ptr<Mutant> Mutant::Create(bool initial_owner) {
|
|||
}
|
||||
|
||||
class Win32Timer : public Win32Handle<Timer> {
|
||||
using WClock_ = Timer::WClock_;
|
||||
using GClock_ = Timer::GClock_;
|
||||
|
||||
public:
|
||||
explicit Win32Timer(HANDLE handle) : Win32Handle(handle) {}
|
||||
~Win32Timer() = default;
|
||||
bool SetOnce(std::chrono::nanoseconds due_time,
|
||||
std::function<void()> opt_callback) override {
|
||||
|
||||
bool SetOnceAfter(xe::chrono::hundrednanoseconds rel_time,
|
||||
std::function<void()> opt_callback) override {
|
||||
return SetOnceAt(WClock_::now() + rel_time, std::move(opt_callback));
|
||||
}
|
||||
bool SetOnceAt(GClock_::time_point due_time,
|
||||
std::function<void()> opt_callback) override {
|
||||
return SetOnceAt(date::clock_cast<WClock_>(due_time),
|
||||
std::move(opt_callback));
|
||||
}
|
||||
bool SetOnceAt(WClock_::time_point due_time,
|
||||
std::function<void()> opt_callback) override {
|
||||
std::lock_guard<std::mutex> lock(mutex_);
|
||||
callback_ = std::move(opt_callback);
|
||||
LARGE_INTEGER due_time_li;
|
||||
due_time_li.QuadPart = due_time.count() / 100;
|
||||
due_time_li.QuadPart = WClock_::to_file_time(due_time);
|
||||
auto completion_routine =
|
||||
callback_ ? reinterpret_cast<PTIMERAPCROUTINE>(CompletionRoutine)
|
||||
: NULL;
|
||||
|
@ -334,13 +307,26 @@ class Win32Timer : public Win32Handle<Timer> {
|
|||
? true
|
||||
: false;
|
||||
}
|
||||
bool SetRepeating(std::chrono::nanoseconds due_time,
|
||||
std::chrono::milliseconds period,
|
||||
std::function<void()> opt_callback) override {
|
||||
|
||||
bool SetRepeatingAfter(
|
||||
xe::chrono::hundrednanoseconds rel_time, std::chrono::milliseconds period,
|
||||
std::function<void()> opt_callback = nullptr) override {
|
||||
return SetRepeatingAt(WClock_::now() + rel_time, period,
|
||||
std::move(opt_callback));
|
||||
}
|
||||
bool SetRepeatingAt(GClock_::time_point due_time,
|
||||
std::chrono::milliseconds period,
|
||||
std::function<void()> opt_callback = nullptr) {
|
||||
return SetRepeatingAt(date::clock_cast<WClock_>(due_time), period,
|
||||
std::move(opt_callback));
|
||||
}
|
||||
bool SetRepeatingAt(WClock_::time_point due_time,
|
||||
std::chrono::milliseconds period,
|
||||
std::function<void()> opt_callback) override {
|
||||
std::lock_guard<std::mutex> lock(mutex_);
|
||||
callback_ = std::move(opt_callback);
|
||||
LARGE_INTEGER due_time_li;
|
||||
due_time_li.QuadPart = due_time.count() / 100;
|
||||
due_time_li.QuadPart = WClock_::to_file_time(due_time);
|
||||
auto completion_routine =
|
||||
callback_ ? reinterpret_cast<PTIMERAPCROUTINE>(CompletionRoutine)
|
||||
: NULL;
|
||||
|
@ -349,6 +335,7 @@ class Win32Timer : public Win32Handle<Timer> {
|
|||
? true
|
||||
: false;
|
||||
}
|
||||
|
||||
bool Cancel() override {
|
||||
// Reset the callback immediately so that any completions don't call it.
|
||||
std::lock_guard<std::mutex> lock(mutex_);
|
||||
|
|
|
@ -1574,7 +1574,11 @@ EMITTER_OPCODE_TABLE(OPCODE_EXTRACT, EXTRACT_I8, EXTRACT_I16, EXTRACT_I32);
|
|||
struct SPLAT_I8 : Sequence<SPLAT_I8, I<OPCODE_SPLAT, V128Op, I8Op>> {
|
||||
static void Emit(X64Emitter& e, const EmitArgType& i) {
|
||||
if (i.src1.is_constant) {
|
||||
// TODO(benvanik): faster constant splats.
|
||||
if (e.IsFeatureEnabled(kX64EmitGFNI)) {
|
||||
e.pxor(e.xmm0, e.xmm0);
|
||||
e.gf2p8affineqb(i.dest, e.xmm0, i.src1.constant());
|
||||
return;
|
||||
}
|
||||
e.mov(e.eax, i.src1.constant());
|
||||
e.vmovd(e.xmm0, e.eax);
|
||||
} else {
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include "xenia/gpu/d3d12/d3d12_shader.h"
|
||||
#include "xenia/gpu/draw_util.h"
|
||||
#include "xenia/gpu/gpu_flags.h"
|
||||
#include "xenia/gpu/registers.h"
|
||||
#include "xenia/gpu/xenos.h"
|
||||
#include "xenia/ui/d3d12/d3d12_presenter.h"
|
||||
#include "xenia/ui/d3d12/d3d12_util.h"
|
||||
|
@ -846,7 +847,8 @@ bool D3D12CommandProcessor::SetupContext() {
|
|||
// Initialize the render target cache before configuring binding - need to
|
||||
// know if using rasterizer-ordered views for the bindless root signature.
|
||||
render_target_cache_ = std::make_unique<D3D12RenderTargetCache>(
|
||||
*register_file_, *this, trace_writer_, bindless_resources_used_);
|
||||
*register_file_, *memory_, trace_writer_, *this,
|
||||
bindless_resources_used_);
|
||||
if (!render_target_cache_->Initialize()) {
|
||||
XELOGE("Failed to initialize the render target cache");
|
||||
return false;
|
||||
|
@ -2127,14 +2129,17 @@ bool D3D12CommandProcessor::IssueDraw(xenos::PrimitiveType primitive_type,
|
|||
return true;
|
||||
}
|
||||
|
||||
reg::RB_DEPTHCONTROL normalized_depth_control =
|
||||
draw_util::GetNormalizedDepthControl(regs);
|
||||
|
||||
// Shader modifications.
|
||||
DxbcShaderTranslator::Modification vertex_shader_modification =
|
||||
pipeline_cache_->GetCurrentVertexShaderModification(
|
||||
*vertex_shader, primitive_processing_result.host_vertex_shader_type);
|
||||
DxbcShaderTranslator::Modification pixel_shader_modification =
|
||||
pixel_shader
|
||||
? pipeline_cache_->GetCurrentPixelShaderModification(*pixel_shader)
|
||||
: DxbcShaderTranslator::Modification(0);
|
||||
pixel_shader ? pipeline_cache_->GetCurrentPixelShaderModification(
|
||||
*pixel_shader, normalized_depth_control)
|
||||
: DxbcShaderTranslator::Modification(0);
|
||||
|
||||
// Set up the render targets - this may perform dispatches and draws.
|
||||
uint32_t normalized_color_mask =
|
||||
|
@ -2142,7 +2147,8 @@ bool D3D12CommandProcessor::IssueDraw(xenos::PrimitiveType primitive_type,
|
|||
regs, pixel_shader->writes_color_targets())
|
||||
: 0;
|
||||
if (!render_target_cache_->Update(is_rasterization_done,
|
||||
normalized_color_mask)) {
|
||||
normalized_depth_control,
|
||||
normalized_color_mask, *vertex_shader)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -2173,8 +2179,8 @@ bool D3D12CommandProcessor::IssueDraw(xenos::PrimitiveType primitive_type,
|
|||
ID3D12RootSignature* root_signature;
|
||||
if (!pipeline_cache_->ConfigurePipeline(
|
||||
vertex_shader_translation, pixel_shader_translation,
|
||||
primitive_processing_result, normalized_color_mask,
|
||||
bound_depth_and_color_render_target_bits,
|
||||
primitive_processing_result, normalized_depth_control,
|
||||
normalized_color_mask, bound_depth_and_color_render_target_bits,
|
||||
bound_depth_and_color_render_target_formats, &pipeline_handle,
|
||||
&root_signature)) {
|
||||
return false;
|
||||
|
@ -2206,6 +2212,7 @@ bool D3D12CommandProcessor::IssueDraw(xenos::PrimitiveType primitive_type,
|
|||
draw_util::GetHostViewportInfo(
|
||||
regs, resolution_scale_x, resolution_scale_y, true,
|
||||
D3D12_VIEWPORT_BOUNDS_MAX, D3D12_VIEWPORT_BOUNDS_MAX, false,
|
||||
normalized_depth_control,
|
||||
host_render_targets_used &&
|
||||
(depth_float24_conversion ==
|
||||
RenderTargetCache::DepthFloat24Conversion::kOnOutputTruncating ||
|
||||
|
@ -2221,7 +2228,8 @@ bool D3D12CommandProcessor::IssueDraw(xenos::PrimitiveType primitive_type,
|
|||
scissor.extent[1] *= resolution_scale_y;
|
||||
|
||||
// Update viewport, scissor, blend factor and stencil reference.
|
||||
UpdateFixedFunctionState(viewport_info, scissor, primitive_polygonal);
|
||||
UpdateFixedFunctionState(viewport_info, scissor, primitive_polygonal,
|
||||
normalized_depth_control);
|
||||
|
||||
// Update system constants before uploading them.
|
||||
// TODO(Triang3l): With ROV, pass the disabled render target mask for safety.
|
||||
|
@ -2229,7 +2237,7 @@ bool D3D12CommandProcessor::IssueDraw(xenos::PrimitiveType primitive_type,
|
|||
memexport_used, primitive_polygonal,
|
||||
primitive_processing_result.line_loop_closing_index,
|
||||
primitive_processing_result.host_index_endian, viewport_info,
|
||||
used_texture_mask, normalized_color_mask);
|
||||
used_texture_mask, normalized_depth_control, normalized_color_mask);
|
||||
|
||||
// Update constant buffers, descriptors and root parameters.
|
||||
if (!UpdateBindings(vertex_shader, pixel_shader, root_signature)) {
|
||||
|
@ -3029,7 +3037,8 @@ void D3D12CommandProcessor::ClearCommandAllocatorCache() {
|
|||
|
||||
void D3D12CommandProcessor::UpdateFixedFunctionState(
|
||||
const draw_util::ViewportInfo& viewport_info,
|
||||
const draw_util::Scissor& scissor, bool primitive_polygonal) {
|
||||
const draw_util::Scissor& scissor, bool primitive_polygonal,
|
||||
reg::RB_DEPTHCONTROL normalized_depth_control) {
|
||||
#if XE_UI_D3D12_FINE_GRAINED_DRAW_SCOPES
|
||||
SCOPE_profile_cpu_f("gpu");
|
||||
#endif // XE_UI_D3D12_FINE_GRAINED_DRAW_SCOPES
|
||||
|
@ -3077,8 +3086,7 @@ void D3D12CommandProcessor::UpdateFixedFunctionState(
|
|||
// choose the back face one only if drawing only back faces.
|
||||
Register stencil_ref_mask_reg;
|
||||
auto pa_su_sc_mode_cntl = regs.Get<reg::PA_SU_SC_MODE_CNTL>();
|
||||
if (primitive_polygonal &&
|
||||
draw_util::GetDepthControlForCurrentEdramMode(regs).backface_enable &&
|
||||
if (primitive_polygonal && normalized_depth_control.backface_enable &&
|
||||
pa_su_sc_mode_cntl.cull_front && !pa_su_sc_mode_cntl.cull_back) {
|
||||
stencil_ref_mask_reg = XE_GPU_REG_RB_STENCILREFMASK_BF;
|
||||
} else {
|
||||
|
@ -3099,6 +3107,7 @@ void D3D12CommandProcessor::UpdateSystemConstantValues(
|
|||
bool shared_memory_is_uav, bool primitive_polygonal,
|
||||
uint32_t line_loop_closing_index, xenos::Endian index_endian,
|
||||
const draw_util::ViewportInfo& viewport_info, uint32_t used_texture_mask,
|
||||
reg::RB_DEPTHCONTROL normalized_depth_control,
|
||||
uint32_t normalized_color_mask) {
|
||||
#if XE_UI_D3D12_FINE_GRAINED_DRAW_SCOPES
|
||||
SCOPE_profile_cpu_f("gpu");
|
||||
|
@ -3113,7 +3122,6 @@ void D3D12CommandProcessor::UpdateSystemConstantValues(
|
|||
float rb_alpha_ref = regs[XE_GPU_REG_RB_ALPHA_REF].f32;
|
||||
auto rb_colorcontrol = regs.Get<reg::RB_COLORCONTROL>();
|
||||
auto rb_depth_info = regs.Get<reg::RB_DEPTH_INFO>();
|
||||
auto rb_depthcontrol = draw_util::GetDepthControlForCurrentEdramMode(regs);
|
||||
auto rb_stencilrefmask = regs.Get<reg::RB_STENCILREFMASK>();
|
||||
auto rb_stencilrefmask_bf =
|
||||
regs.Get<reg::RB_STENCILREFMASK>(XE_GPU_REG_RB_STENCILREFMASK_BF);
|
||||
|
@ -3155,8 +3163,8 @@ void D3D12CommandProcessor::UpdateSystemConstantValues(
|
|||
// Disable depth and stencil if it aliases a color render target (for
|
||||
// instance, during the XBLA logo in 58410954, though depth writing is already
|
||||
// disabled there).
|
||||
bool depth_stencil_enabled =
|
||||
rb_depthcontrol.stencil_enable || rb_depthcontrol.z_enable;
|
||||
bool depth_stencil_enabled = normalized_depth_control.stencil_enable ||
|
||||
normalized_depth_control.z_enable;
|
||||
if (edram_rov_used && depth_stencil_enabled) {
|
||||
for (uint32_t i = 0; i < 4; ++i) {
|
||||
if (rb_depth_info.depth_base == color_infos[i].color_base &&
|
||||
|
@ -3229,10 +3237,10 @@ void D3D12CommandProcessor::UpdateSystemConstantValues(
|
|||
}
|
||||
if (edram_rov_used && depth_stencil_enabled) {
|
||||
flags |= DxbcShaderTranslator::kSysFlag_ROVDepthStencil;
|
||||
if (rb_depthcontrol.z_enable) {
|
||||
flags |= uint32_t(rb_depthcontrol.zfunc)
|
||||
if (normalized_depth_control.z_enable) {
|
||||
flags |= uint32_t(normalized_depth_control.zfunc)
|
||||
<< DxbcShaderTranslator::kSysFlag_ROVDepthPassIfLess_Shift;
|
||||
if (rb_depthcontrol.z_write_enable) {
|
||||
if (normalized_depth_control.z_write_enable) {
|
||||
flags |= DxbcShaderTranslator::kSysFlag_ROVDepthWrite;
|
||||
}
|
||||
} else {
|
||||
|
@ -3242,7 +3250,7 @@ void D3D12CommandProcessor::UpdateSystemConstantValues(
|
|||
DxbcShaderTranslator::kSysFlag_ROVDepthPassIfEqual |
|
||||
DxbcShaderTranslator::kSysFlag_ROVDepthPassIfGreater;
|
||||
}
|
||||
if (rb_depthcontrol.stencil_enable) {
|
||||
if (normalized_depth_control.stencil_enable) {
|
||||
flags |= DxbcShaderTranslator::kSysFlag_ROVStencilTest;
|
||||
}
|
||||
// Hint - if not applicable to the shader, will not have effect.
|
||||
|
@ -3526,7 +3534,7 @@ void D3D12CommandProcessor::UpdateSystemConstantValues(
|
|||
poly_offset_back_offset;
|
||||
system_constants_.edram_poly_offset_back_offset = poly_offset_back_offset;
|
||||
|
||||
if (depth_stencil_enabled && rb_depthcontrol.stencil_enable) {
|
||||
if (depth_stencil_enabled && normalized_depth_control.stencil_enable) {
|
||||
dirty |= system_constants_.edram_stencil_front_reference !=
|
||||
rb_stencilrefmask.stencilref;
|
||||
system_constants_.edram_stencil_front_reference =
|
||||
|
@ -3540,12 +3548,12 @@ void D3D12CommandProcessor::UpdateSystemConstantValues(
|
|||
system_constants_.edram_stencil_front_write_mask =
|
||||
rb_stencilrefmask.stencilwritemask;
|
||||
uint32_t stencil_func_ops =
|
||||
(rb_depthcontrol.value >> 8) & ((1 << 12) - 1);
|
||||
(normalized_depth_control.value >> 8) & ((1 << 12) - 1);
|
||||
dirty |=
|
||||
system_constants_.edram_stencil_front_func_ops != stencil_func_ops;
|
||||
system_constants_.edram_stencil_front_func_ops = stencil_func_ops;
|
||||
|
||||
if (primitive_polygonal && rb_depthcontrol.backface_enable) {
|
||||
if (primitive_polygonal && normalized_depth_control.backface_enable) {
|
||||
dirty |= system_constants_.edram_stencil_back_reference !=
|
||||
rb_stencilrefmask_bf.stencilref;
|
||||
system_constants_.edram_stencil_back_reference =
|
||||
|
@ -3559,7 +3567,7 @@ void D3D12CommandProcessor::UpdateSystemConstantValues(
|
|||
system_constants_.edram_stencil_back_write_mask =
|
||||
rb_stencilrefmask_bf.stencilwritemask;
|
||||
uint32_t stencil_func_ops_bf =
|
||||
(rb_depthcontrol.value >> 20) & ((1 << 12) - 1);
|
||||
(normalized_depth_control.value >> 20) & ((1 << 12) - 1);
|
||||
dirty |= system_constants_.edram_stencil_back_func_ops !=
|
||||
stencil_func_ops_bf;
|
||||
system_constants_.edram_stencil_back_func_ops = stencil_func_ops_bf;
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
#include "xenia/gpu/draw_util.h"
|
||||
#include "xenia/gpu/dxbc_shader.h"
|
||||
#include "xenia/gpu/dxbc_shader_translator.h"
|
||||
#include "xenia/gpu/registers.h"
|
||||
#include "xenia/gpu/xenos.h"
|
||||
#include "xenia/kernel/kernel_state.h"
|
||||
#include "xenia/ui/d3d12/d3d12_descriptor_heap_pool.h"
|
||||
|
@ -349,13 +350,15 @@ class D3D12CommandProcessor : public CommandProcessor {
|
|||
|
||||
void UpdateFixedFunctionState(const draw_util::ViewportInfo& viewport_info,
|
||||
const draw_util::Scissor& scissor,
|
||||
bool primitive_polygonal);
|
||||
bool primitive_polygonal,
|
||||
reg::RB_DEPTHCONTROL normalized_depth_control);
|
||||
void UpdateSystemConstantValues(bool shared_memory_is_uav,
|
||||
bool primitive_polygonal,
|
||||
uint32_t line_loop_closing_index,
|
||||
xenos::Endian index_endian,
|
||||
const draw_util::ViewportInfo& viewport_info,
|
||||
uint32_t used_texture_mask,
|
||||
reg::RB_DEPTHCONTROL normalized_depth_control,
|
||||
uint32_t normalized_color_mask);
|
||||
bool UpdateBindings(const D3D12Shader* vertex_shader,
|
||||
const D3D12Shader* pixel_shader,
|
||||
|
|
|
@ -1249,10 +1249,12 @@ void D3D12RenderTargetCache::BeginSubmission() {
|
|||
}
|
||||
}
|
||||
|
||||
bool D3D12RenderTargetCache::Update(bool is_rasterization_done,
|
||||
uint32_t shader_writes_color_targets) {
|
||||
bool D3D12RenderTargetCache::Update(
|
||||
bool is_rasterization_done, reg::RB_DEPTHCONTROL normalized_depth_control,
|
||||
uint32_t shader_writes_color_targets, const Shader& vertex_shader) {
|
||||
if (!RenderTargetCache::Update(is_rasterization_done,
|
||||
shader_writes_color_targets)) {
|
||||
normalized_depth_control,
|
||||
shader_writes_color_targets, vertex_shader)) {
|
||||
return false;
|
||||
}
|
||||
switch (GetPath()) {
|
||||
|
|
|
@ -43,10 +43,10 @@ class D3D12CommandProcessor;
|
|||
class D3D12RenderTargetCache final : public RenderTargetCache {
|
||||
public:
|
||||
D3D12RenderTargetCache(const RegisterFile& register_file,
|
||||
const Memory& memory, TraceWriter& trace_writer,
|
||||
D3D12CommandProcessor& command_processor,
|
||||
TraceWriter& trace_writer,
|
||||
bool bindless_resources_used)
|
||||
: RenderTargetCache(register_file),
|
||||
: RenderTargetCache(register_file, memory, &trace_writer),
|
||||
command_processor_(command_processor),
|
||||
trace_writer_(trace_writer),
|
||||
bindless_resources_used_(bindless_resources_used) {}
|
||||
|
@ -64,7 +64,9 @@ class D3D12RenderTargetCache final : public RenderTargetCache {
|
|||
uint32_t GetResolutionScaleY() const override { return resolution_scale_y_; }
|
||||
|
||||
bool Update(bool is_rasterization_done,
|
||||
uint32_t shader_writes_color_targets) override;
|
||||
reg::RB_DEPTHCONTROL normalized_depth_control,
|
||||
uint32_t shader_writes_color_targets,
|
||||
const Shader& vertex_shader) override;
|
||||
|
||||
void InvalidateCommandListRenderTargets() {
|
||||
are_current_command_list_render_targets_valid_ = false;
|
||||
|
|
|
@ -22,9 +22,12 @@ namespace xe {
|
|||
namespace gpu {
|
||||
namespace d3d12 {
|
||||
|
||||
D3D12Shader::D3D12Shader(xenos::ShaderType shader_type, uint64_t data_hash,
|
||||
const uint32_t* dword_ptr, uint32_t dword_count)
|
||||
: DxbcShader(shader_type, data_hash, dword_ptr, dword_count) {}
|
||||
D3D12Shader::D3D12Shader(xenos::ShaderType shader_type,
|
||||
uint64_t ucode_data_hash, const uint32_t* ucode_dwords,
|
||||
size_t ucode_dword_count,
|
||||
std::endian ucode_source_endian)
|
||||
: DxbcShader(shader_type, ucode_data_hash, ucode_dwords, ucode_dword_count,
|
||||
ucode_source_endian) {}
|
||||
|
||||
void D3D12Shader::D3D12Translation::DisassembleDxbcAndDxil(
|
||||
const ui::d3d12::D3D12Provider& provider, bool disassemble_dxbc,
|
||||
|
|
|
@ -33,8 +33,9 @@ class D3D12Shader : public DxbcShader {
|
|||
IDxcCompiler* dxc_compiler = nullptr);
|
||||
};
|
||||
|
||||
D3D12Shader(xenos::ShaderType shader_type, uint64_t data_hash,
|
||||
const uint32_t* dword_ptr, uint32_t dword_count);
|
||||
D3D12Shader(xenos::ShaderType shader_type, uint64_t ucode_data_hash,
|
||||
const uint32_t* ucode_dwords, size_t ucode_dword_count,
|
||||
std::endian ucode_source_endian = std::endian::big);
|
||||
|
||||
// For owning subsystem like the pipeline cache, accessors for unique
|
||||
// identifiers (used instead of hashes to make sure collisions can't happen)
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
#include "xenia/gpu/d3d12/d3d12_render_target_cache.h"
|
||||
#include "xenia/gpu/draw_util.h"
|
||||
#include "xenia/gpu/gpu_flags.h"
|
||||
#include "xenia/gpu/registers.h"
|
||||
#include "xenia/gpu/xenos.h"
|
||||
#include "xenia/ui/d3d12/d3d12_util.h"
|
||||
|
||||
|
@ -896,7 +897,8 @@ PipelineCache::GetCurrentVertexShaderModification(
|
|||
}
|
||||
|
||||
DxbcShaderTranslator::Modification
|
||||
PipelineCache::GetCurrentPixelShaderModification(const Shader& shader) const {
|
||||
PipelineCache::GetCurrentPixelShaderModification(
|
||||
const Shader& shader, reg::RB_DEPTHCONTROL normalized_depth_control) const {
|
||||
assert_true(shader.type() == xenos::ShaderType::kPixel);
|
||||
assert_true(shader.is_ucode_analyzed());
|
||||
const auto& regs = register_file_;
|
||||
|
@ -915,7 +917,7 @@ PipelineCache::GetCurrentPixelShaderModification(const Shader& shader) const {
|
|||
RenderTargetCache::DepthFloat24Conversion::kOnOutputTruncating ||
|
||||
depth_float24_conversion ==
|
||||
RenderTargetCache::DepthFloat24Conversion::kOnOutputRounding) &&
|
||||
draw_util::GetDepthControlForCurrentEdramMode(regs).z_enable &&
|
||||
normalized_depth_control.z_enable &&
|
||||
regs.Get<reg::RB_DEPTH_INFO>().depth_format ==
|
||||
xenos::DepthRenderTargetFormat::kD24FS8) {
|
||||
modification.pixel.depth_stencil_mode =
|
||||
|
@ -941,6 +943,7 @@ bool PipelineCache::ConfigurePipeline(
|
|||
D3D12Shader::D3D12Translation* vertex_shader,
|
||||
D3D12Shader::D3D12Translation* pixel_shader,
|
||||
const PrimitiveProcessor::ProcessingResult& primitive_processing_result,
|
||||
reg::RB_DEPTHCONTROL normalized_depth_control,
|
||||
uint32_t normalized_color_mask,
|
||||
uint32_t bound_depth_and_color_render_target_bits,
|
||||
const uint32_t* bound_depth_and_color_render_target_formats,
|
||||
|
@ -1013,7 +1016,8 @@ bool PipelineCache::ConfigurePipeline(
|
|||
PipelineRuntimeDescription runtime_description;
|
||||
if (!GetCurrentStateDescription(
|
||||
vertex_shader, pixel_shader, primitive_processing_result,
|
||||
normalized_color_mask, bound_depth_and_color_render_target_bits,
|
||||
normalized_depth_control, normalized_color_mask,
|
||||
bound_depth_and_color_render_target_bits,
|
||||
bound_depth_and_color_render_target_formats, runtime_description)) {
|
||||
return false;
|
||||
}
|
||||
|
@ -1280,6 +1284,7 @@ bool PipelineCache::GetCurrentStateDescription(
|
|||
D3D12Shader::D3D12Translation* vertex_shader,
|
||||
D3D12Shader::D3D12Translation* pixel_shader,
|
||||
const PrimitiveProcessor::ProcessingResult& primitive_processing_result,
|
||||
reg::RB_DEPTHCONTROL normalized_depth_control,
|
||||
uint32_t normalized_color_mask,
|
||||
uint32_t bound_depth_and_color_render_target_bits,
|
||||
const uint32_t* bound_depth_and_color_render_target_formats,
|
||||
|
@ -1483,18 +1488,16 @@ bool PipelineCache::GetCurrentStateDescription(
|
|||
// Depth/stencil. No stencil, always passing depth test and no depth writing
|
||||
// means depth disabled.
|
||||
if (bound_depth_and_color_render_target_bits & 1) {
|
||||
auto rb_depthcontrol =
|
||||
draw_util::GetDepthControlForCurrentEdramMode(regs);
|
||||
if (rb_depthcontrol.z_enable) {
|
||||
description_out.depth_func = rb_depthcontrol.zfunc;
|
||||
description_out.depth_write = rb_depthcontrol.z_write_enable;
|
||||
if (normalized_depth_control.z_enable) {
|
||||
description_out.depth_func = normalized_depth_control.zfunc;
|
||||
description_out.depth_write = normalized_depth_control.z_write_enable;
|
||||
} else {
|
||||
description_out.depth_func = xenos::CompareFunction::kAlways;
|
||||
}
|
||||
if (rb_depthcontrol.stencil_enable) {
|
||||
if (normalized_depth_control.stencil_enable) {
|
||||
description_out.stencil_enable = 1;
|
||||
bool stencil_backface_enable =
|
||||
primitive_polygonal && rb_depthcontrol.backface_enable;
|
||||
primitive_polygonal && normalized_depth_control.backface_enable;
|
||||
// Per-face masks not supported by Direct3D 12, choose the back face
|
||||
// ones only if drawing only back faces.
|
||||
Register stencil_ref_mask_reg;
|
||||
|
@ -1507,18 +1510,23 @@ bool PipelineCache::GetCurrentStateDescription(
|
|||
regs.Get<reg::RB_STENCILREFMASK>(stencil_ref_mask_reg);
|
||||
description_out.stencil_read_mask = stencil_ref_mask.stencilmask;
|
||||
description_out.stencil_write_mask = stencil_ref_mask.stencilwritemask;
|
||||
description_out.stencil_front_fail_op = rb_depthcontrol.stencilfail;
|
||||
description_out.stencil_front_fail_op =
|
||||
normalized_depth_control.stencilfail;
|
||||
description_out.stencil_front_depth_fail_op =
|
||||
rb_depthcontrol.stencilzfail;
|
||||
description_out.stencil_front_pass_op = rb_depthcontrol.stencilzpass;
|
||||
description_out.stencil_front_func = rb_depthcontrol.stencilfunc;
|
||||
normalized_depth_control.stencilzfail;
|
||||
description_out.stencil_front_pass_op =
|
||||
normalized_depth_control.stencilzpass;
|
||||
description_out.stencil_front_func =
|
||||
normalized_depth_control.stencilfunc;
|
||||
if (stencil_backface_enable) {
|
||||
description_out.stencil_back_fail_op = rb_depthcontrol.stencilfail_bf;
|
||||
description_out.stencil_back_fail_op =
|
||||
normalized_depth_control.stencilfail_bf;
|
||||
description_out.stencil_back_depth_fail_op =
|
||||
rb_depthcontrol.stencilzfail_bf;
|
||||
normalized_depth_control.stencilzfail_bf;
|
||||
description_out.stencil_back_pass_op =
|
||||
rb_depthcontrol.stencilzpass_bf;
|
||||
description_out.stencil_back_func = rb_depthcontrol.stencilfunc_bf;
|
||||
normalized_depth_control.stencilzpass_bf;
|
||||
description_out.stencil_back_func =
|
||||
normalized_depth_control.stencilfunc_bf;
|
||||
} else {
|
||||
description_out.stencil_back_fail_op =
|
||||
description_out.stencil_front_fail_op;
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
#include "xenia/gpu/gpu_flags.h"
|
||||
#include "xenia/gpu/primitive_processor.h"
|
||||
#include "xenia/gpu/register_file.h"
|
||||
#include "xenia/gpu/registers.h"
|
||||
#include "xenia/gpu/xenos.h"
|
||||
#include "xenia/ui/d3d12/d3d12_api.h"
|
||||
|
||||
|
@ -74,7 +75,8 @@ class PipelineCache {
|
|||
const Shader& shader,
|
||||
Shader::HostVertexShaderType host_vertex_shader_type) const;
|
||||
DxbcShaderTranslator::Modification GetCurrentPixelShaderModification(
|
||||
const Shader& shader) const;
|
||||
const Shader& shader,
|
||||
reg::RB_DEPTHCONTROL normalized_depth_control) const;
|
||||
|
||||
// If draw_util::IsRasterizationPotentiallyDone is false, the pixel shader
|
||||
// MUST be made nullptr BEFORE calling this!
|
||||
|
@ -82,6 +84,7 @@ class PipelineCache {
|
|||
D3D12Shader::D3D12Translation* vertex_shader,
|
||||
D3D12Shader::D3D12Translation* pixel_shader,
|
||||
const PrimitiveProcessor::ProcessingResult& primitive_processing_result,
|
||||
reg::RB_DEPTHCONTROL normalized_depth_control,
|
||||
uint32_t normalized_color_mask,
|
||||
uint32_t bound_depth_and_color_render_target_bits,
|
||||
const uint32_t* bound_depth_and_color_render_targets_formats,
|
||||
|
@ -248,6 +251,7 @@ class PipelineCache {
|
|||
D3D12Shader::D3D12Translation* vertex_shader,
|
||||
D3D12Shader::D3D12Translation* pixel_shader,
|
||||
const PrimitiveProcessor::ProcessingResult& primitive_processing_result,
|
||||
reg::RB_DEPTHCONTROL normalized_depth_control,
|
||||
uint32_t normalized_color_mask,
|
||||
uint32_t bound_depth_and_color_render_target_bits,
|
||||
const uint32_t* bound_depth_and_color_render_target_formats,
|
||||
|
|
|
@ -0,0 +1,350 @@
|
|||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2022 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#include "xenia/gpu/draw_extent_estimator.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <cfloat>
|
||||
#include <cstdint>
|
||||
|
||||
#include "xenia/base/assert.h"
|
||||
#include "xenia/base/cvar.h"
|
||||
#include "xenia/base/profiling.h"
|
||||
#include "xenia/gpu/registers.h"
|
||||
#include "xenia/gpu/ucode.h"
|
||||
#include "xenia/gpu/xenos.h"
|
||||
#include "xenia/ui/graphics_util.h"
|
||||
|
||||
DEFINE_bool(
|
||||
execute_unclipped_draw_vs_on_cpu, true,
|
||||
"Execute the vertex shader for draws with clipping disabled, primarily "
|
||||
"screen-space draws (such as clears), on the CPU when possible to estimate "
|
||||
"the extent of the EDRAM involved in the draw.\n"
|
||||
"Enabling this may significantly improve GPU performance as otherwise up "
|
||||
"to the entire EDRAM may be considered used in draws without clipping, "
|
||||
"potentially resulting in spurious EDRAM range ownership transfer round "
|
||||
"trips between host render targets.\n"
|
||||
"Also, on hosts where certain render target formats have to be emulated in "
|
||||
"a lossy way (for instance, 16-bit fixed-point via 16-bit floating-point), "
|
||||
"this prevents corruption of other render targets located after the "
|
||||
"current ones in the EDRAM by lossy range ownership transfers done for "
|
||||
"those draws.",
|
||||
"GPU");
|
||||
DEFINE_bool(
|
||||
execute_unclipped_draw_vs_on_cpu_with_scissor, false,
|
||||
"Don't restrict the usage of execute_unclipped_draw_vs_on_cpu to only "
|
||||
"non-scissored draws (with the right and the bottom sides of the scissor "
|
||||
"rectangle at 8192 or beyond) even though if the scissor rectangle is "
|
||||
"present, it's usually sufficient for esimating the height of the render "
|
||||
"target.\n"
|
||||
"Enabling this may cause excessive processing of vertices on the CPU, as "
|
||||
"some games draw rectangles (for their UI, for instance) without clipping, "
|
||||
"but with a proper scissor rectangle.",
|
||||
"GPU");
|
||||
|
||||
namespace xe {
|
||||
namespace gpu {
|
||||
|
||||
void DrawExtentEstimator::PositionYExportSink::Export(
|
||||
ucode::ExportRegister export_register, const float* value,
|
||||
uint32_t value_mask) {
|
||||
if (export_register == ucode::ExportRegister::kVSPosition) {
|
||||
if (value_mask & 0b0010) {
|
||||
position_y_ = value[1];
|
||||
}
|
||||
if (value_mask & 0b1000) {
|
||||
position_w_ = value[3];
|
||||
}
|
||||
} else if (export_register ==
|
||||
ucode::ExportRegister::kVSPointSizeEdgeFlagKillVertex) {
|
||||
if (value_mask & 0b0001) {
|
||||
point_size_ = value[0];
|
||||
}
|
||||
if (value_mask & 0b0100) {
|
||||
vertex_kill_ = *reinterpret_cast<const uint32_t*>(&value[2]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t DrawExtentEstimator::EstimateVertexMaxY(const Shader& vertex_shader) {
|
||||
SCOPE_profile_cpu_f("gpu");
|
||||
|
||||
const RegisterFile& regs = register_file_;
|
||||
|
||||
auto vgt_draw_initiator = regs.Get<reg::VGT_DRAW_INITIATOR>();
|
||||
if (!vgt_draw_initiator.num_indices) {
|
||||
return 0;
|
||||
}
|
||||
if (vgt_draw_initiator.source_select != xenos::SourceSelect::kDMA &&
|
||||
vgt_draw_initiator.source_select != xenos::SourceSelect::kAutoIndex) {
|
||||
// TODO(Triang3l): Support immediate indices.
|
||||
return xenos::kTexture2DCubeMaxWidthHeight;
|
||||
}
|
||||
|
||||
// Not reproducing tessellation.
|
||||
if (xenos::IsMajorModeExplicit(vgt_draw_initiator.major_mode,
|
||||
vgt_draw_initiator.prim_type) &&
|
||||
regs.Get<reg::VGT_OUTPUT_PATH_CNTL>().path_select ==
|
||||
xenos::VGTOutputPath::kTessellationEnable) {
|
||||
return xenos::kTexture2DCubeMaxWidthHeight;
|
||||
}
|
||||
|
||||
assert_true(vertex_shader.type() == xenos::ShaderType::kVertex);
|
||||
assert_true(vertex_shader.is_ucode_analyzed());
|
||||
if (!ShaderInterpreter::CanInterpretShader(vertex_shader)) {
|
||||
return xenos::kTexture2DCubeMaxWidthHeight;
|
||||
}
|
||||
|
||||
auto vgt_dma_size = regs.Get<reg::VGT_DMA_SIZE>();
|
||||
union {
|
||||
const void* index_buffer;
|
||||
const uint16_t* index_buffer_16;
|
||||
const uint32_t* index_buffer_32;
|
||||
};
|
||||
xenos::Endian index_endian = vgt_dma_size.swap_mode;
|
||||
if (vgt_draw_initiator.source_select == xenos::SourceSelect::kDMA) {
|
||||
xenos::IndexFormat index_format = vgt_draw_initiator.index_size;
|
||||
uint32_t index_buffer_base = regs[XE_GPU_REG_VGT_DMA_BASE].u32;
|
||||
uint32_t index_buffer_read_count =
|
||||
std::min(vgt_draw_initiator.num_indices, vgt_dma_size.num_words);
|
||||
if (vgt_draw_initiator.index_size == xenos::IndexFormat::kInt16) {
|
||||
// Handle the index endianness to same way as the PrimitiveProcessor.
|
||||
if (index_endian == xenos::Endian::k8in32) {
|
||||
index_endian = xenos::Endian::k8in16;
|
||||
} else if (index_endian == xenos::Endian::k16in32) {
|
||||
index_endian = xenos::Endian::kNone;
|
||||
}
|
||||
index_buffer_base &= ~uint32_t(sizeof(uint16_t) - 1);
|
||||
if (trace_writer_) {
|
||||
trace_writer_->WriteMemoryRead(
|
||||
index_buffer_base, sizeof(uint16_t) * index_buffer_read_count);
|
||||
}
|
||||
} else {
|
||||
assert_true(vgt_draw_initiator.index_size == xenos::IndexFormat::kInt32);
|
||||
index_buffer_base &= ~uint32_t(sizeof(uint32_t) - 1);
|
||||
if (trace_writer_) {
|
||||
trace_writer_->WriteMemoryRead(
|
||||
index_buffer_base, sizeof(uint32_t) * index_buffer_read_count);
|
||||
}
|
||||
}
|
||||
index_buffer = memory_.TranslatePhysical(index_buffer_base);
|
||||
}
|
||||
auto pa_su_sc_mode_cntl = regs.Get<reg::PA_SU_SC_MODE_CNTL>();
|
||||
uint32_t reset_index =
|
||||
regs.Get<reg::VGT_MULTI_PRIM_IB_RESET_INDX>().reset_indx;
|
||||
uint32_t index_offset = regs.Get<reg::VGT_INDX_OFFSET>().indx_offset;
|
||||
uint32_t min_index = regs.Get<reg::VGT_MIN_VTX_INDX>().min_indx;
|
||||
uint32_t max_index = regs.Get<reg::VGT_MAX_VTX_INDX>().max_indx;
|
||||
|
||||
auto pa_cl_vte_cntl = regs.Get<reg::PA_CL_VTE_CNTL>();
|
||||
float viewport_y_scale = pa_cl_vte_cntl.vport_y_scale_ena
|
||||
? regs[XE_GPU_REG_PA_CL_VPORT_YSCALE].f32
|
||||
: 1.0f;
|
||||
float viewport_y_offset = pa_cl_vte_cntl.vport_y_offset_ena
|
||||
? regs[XE_GPU_REG_PA_CL_VPORT_YOFFSET].f32
|
||||
: 0.0f;
|
||||
|
||||
int32_t point_vertex_min_diameter_float = 0;
|
||||
int32_t point_vertex_max_diameter_float = 0;
|
||||
float point_constant_radius_y = 0.0f;
|
||||
if (vgt_draw_initiator.prim_type == xenos::PrimitiveType::kPointList) {
|
||||
auto pa_su_point_minmax = regs.Get<reg::PA_SU_POINT_MINMAX>();
|
||||
*reinterpret_cast<float*>(&point_vertex_min_diameter_float) =
|
||||
float(pa_su_point_minmax.min_size) * (2.0f / 16.0f);
|
||||
*reinterpret_cast<float*>(&point_vertex_max_diameter_float) =
|
||||
float(pa_su_point_minmax.max_size) * (2.0f / 16.0f);
|
||||
point_constant_radius_y =
|
||||
float(regs.Get<reg::PA_SU_POINT_SIZE>().height) * (1.0f / 16.0f);
|
||||
}
|
||||
|
||||
float max_y = -FLT_MAX;
|
||||
|
||||
shader_interpreter_.SetShader(vertex_shader);
|
||||
|
||||
PositionYExportSink position_y_export_sink;
|
||||
shader_interpreter_.SetExportSink(&position_y_export_sink);
|
||||
for (uint32_t i = 0; i < vgt_draw_initiator.num_indices; ++i) {
|
||||
uint32_t vertex_index;
|
||||
if (vgt_draw_initiator.source_select == xenos::SourceSelect::kDMA) {
|
||||
if (i < vgt_dma_size.num_words) {
|
||||
if (vgt_draw_initiator.index_size == xenos::IndexFormat::kInt16) {
|
||||
vertex_index = index_buffer_16[i];
|
||||
} else {
|
||||
vertex_index = index_buffer_32[i];
|
||||
}
|
||||
// The Xenos only uses 24 bits of the index (reset_indx is 24-bit).
|
||||
vertex_index = xenos::GpuSwap(vertex_index, index_endian) & 0xFFFFFF;
|
||||
} else {
|
||||
vertex_index = 0;
|
||||
}
|
||||
if (pa_su_sc_mode_cntl.multi_prim_ib_ena && vertex_index == reset_index) {
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
assert_true(vgt_draw_initiator.source_select ==
|
||||
xenos::SourceSelect::kAutoIndex);
|
||||
vertex_index = i;
|
||||
}
|
||||
vertex_index =
|
||||
std::min(max_index,
|
||||
std::max(min_index, (vertex_index + index_offset) & 0xFFFFFF));
|
||||
|
||||
position_y_export_sink.Reset();
|
||||
|
||||
shader_interpreter_.temp_registers()[0] = float(vertex_index);
|
||||
shader_interpreter_.Execute();
|
||||
|
||||
if (position_y_export_sink.vertex_kill().has_value() &&
|
||||
(position_y_export_sink.vertex_kill().value() & ~(UINT32_C(1) << 31))) {
|
||||
continue;
|
||||
}
|
||||
if (!position_y_export_sink.position_y().has_value()) {
|
||||
continue;
|
||||
}
|
||||
float vertex_y = position_y_export_sink.position_y().value();
|
||||
if (!pa_cl_vte_cntl.vtx_xy_fmt) {
|
||||
if (!position_y_export_sink.position_w().has_value()) {
|
||||
continue;
|
||||
}
|
||||
vertex_y /= position_y_export_sink.position_w().value();
|
||||
}
|
||||
|
||||
vertex_y = vertex_y * viewport_y_scale + viewport_y_offset;
|
||||
|
||||
if (vgt_draw_initiator.prim_type == xenos::PrimitiveType::kPointList) {
|
||||
float point_radius_y;
|
||||
if (position_y_export_sink.point_size().has_value()) {
|
||||
// Vertex-specified diameter. Clamped effectively as a signed integer in
|
||||
// the hardware, -NaN, -Infinity ... -0 to the minimum, +Infinity, +NaN
|
||||
// to the maximum.
|
||||
point_radius_y = position_y_export_sink.point_size().value();
|
||||
*reinterpret_cast<int32_t*>(&point_radius_y) = std::min(
|
||||
point_vertex_max_diameter_float,
|
||||
std::max(point_vertex_min_diameter_float,
|
||||
*reinterpret_cast<const int32_t*>(&point_radius_y)));
|
||||
point_radius_y *= 0.5f;
|
||||
} else {
|
||||
// Constant radius.
|
||||
point_radius_y = point_constant_radius_y;
|
||||
}
|
||||
vertex_y += point_radius_y;
|
||||
}
|
||||
|
||||
// std::max is `a < b ? b : a`, thus in case of NaN, the first argument is
|
||||
// always returned - max_y, which is initialized to a normalized value.
|
||||
max_y = std::max(max_y, vertex_y);
|
||||
}
|
||||
shader_interpreter_.SetExportSink(nullptr);
|
||||
|
||||
int32_t max_y_24p8 = ui::FloatToD3D11Fixed16p8(max_y);
|
||||
// 16p8 range is -32768 to 32767+255/256, but it's stored as uint32_t here,
|
||||
// as 24p8, so overflowing up to -8388608 to 8388608+255/256 is safe. The
|
||||
// range of the window offset plus the half-pixel offset is -16384 to 16384.5,
|
||||
// so it's safe to add both - adding it will neither move the 16p8 clamping
|
||||
// bounds -32768 and 32767+255/256 into the 0...8192 screen space range, nor
|
||||
// cause 24p8 overflow.
|
||||
if (!regs.Get<reg::PA_SU_VTX_CNTL>().pix_center) {
|
||||
max_y_24p8 += 128;
|
||||
}
|
||||
if (pa_su_sc_mode_cntl.vtx_window_offset_enable) {
|
||||
max_y_24p8 += regs.Get<reg::PA_SC_WINDOW_OFFSET>().window_y_offset * 256;
|
||||
}
|
||||
// Top-left rule - .5 exclusive without MSAA, 1. exclusive with MSAA.
|
||||
auto rb_surface_info = regs.Get<reg::RB_SURFACE_INFO>();
|
||||
return (uint32_t(std::max(int32_t(0), max_y_24p8)) +
|
||||
((rb_surface_info.msaa_samples == xenos::MsaaSamples::k1X) ? 127
|
||||
: 255)) >>
|
||||
8;
|
||||
}
|
||||
|
||||
uint32_t DrawExtentEstimator::EstimateMaxY(bool try_to_estimate_vertex_max_y,
|
||||
const Shader& vertex_shader) {
|
||||
SCOPE_profile_cpu_f("gpu");
|
||||
|
||||
const RegisterFile& regs = register_file_;
|
||||
|
||||
auto pa_sc_window_offset = regs.Get<reg::PA_SC_WINDOW_OFFSET>();
|
||||
int32_t window_y_offset = pa_sc_window_offset.window_y_offset;
|
||||
|
||||
// Scissor.
|
||||
auto pa_sc_window_scissor_br = regs.Get<reg::PA_SC_WINDOW_SCISSOR_BR>();
|
||||
int32_t scissor_bottom = int32_t(pa_sc_window_scissor_br.br_y);
|
||||
bool scissor_window_offset =
|
||||
!regs.Get<reg::PA_SC_WINDOW_SCISSOR_TL>().window_offset_disable;
|
||||
if (scissor_window_offset) {
|
||||
scissor_bottom += window_y_offset;
|
||||
}
|
||||
auto pa_sc_screen_scissor_br = regs.Get<reg::PA_SC_SCREEN_SCISSOR_BR>();
|
||||
scissor_bottom = std::min(scissor_bottom, pa_sc_screen_scissor_br.br_y);
|
||||
uint32_t max_y = uint32_t(std::max(scissor_bottom, int32_t(0)));
|
||||
|
||||
if (regs.Get<reg::PA_CL_CLIP_CNTL>().clip_disable) {
|
||||
// Actual extent from the vertices.
|
||||
if (try_to_estimate_vertex_max_y &&
|
||||
cvars::execute_unclipped_draw_vs_on_cpu) {
|
||||
bool estimate_vertex_max_y;
|
||||
if (cvars::execute_unclipped_draw_vs_on_cpu_with_scissor) {
|
||||
estimate_vertex_max_y = true;
|
||||
} else {
|
||||
estimate_vertex_max_y = false;
|
||||
if (scissor_bottom >= xenos::kTexture2DCubeMaxWidthHeight) {
|
||||
// Handle just the usual special 8192x8192 case in Direct3D 9 - 8192
|
||||
// may be a normal render target height (80x8192 is well within the
|
||||
// EDRAM size, for instance), no need to process the vertices on the
|
||||
// CPU in this case.
|
||||
int32_t scissor_right = int32_t(pa_sc_window_scissor_br.br_x);
|
||||
if (scissor_window_offset) {
|
||||
scissor_right += pa_sc_window_offset.window_x_offset;
|
||||
}
|
||||
scissor_right = std::min(scissor_right, pa_sc_screen_scissor_br.br_x);
|
||||
if (scissor_right >= xenos::kTexture2DCubeMaxWidthHeight) {
|
||||
estimate_vertex_max_y = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (estimate_vertex_max_y) {
|
||||
max_y = std::min(max_y, EstimateVertexMaxY(vertex_shader));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Viewport. Though the Xenos itself doesn't have an implicit viewport
|
||||
// scissor (it's set by Direct3D 9 when a viewport is used), on hosts, it
|
||||
// usually exists and can't be disabled.
|
||||
auto pa_cl_vte_cntl = regs.Get<reg::PA_CL_VTE_CNTL>();
|
||||
float viewport_bottom = 0.0f;
|
||||
// First calculate all the integer.0 or integer.5 offsetting exactly at full
|
||||
// precision.
|
||||
if (regs.Get<reg::PA_SU_SC_MODE_CNTL>().vtx_window_offset_enable) {
|
||||
viewport_bottom += float(window_y_offset);
|
||||
}
|
||||
if (!regs.Get<reg::PA_SU_VTX_CNTL>().pix_center) {
|
||||
viewport_bottom += 0.5f;
|
||||
}
|
||||
// Then apply the floating-point viewport offset.
|
||||
if (pa_cl_vte_cntl.vport_y_offset_ena) {
|
||||
viewport_bottom += regs[XE_GPU_REG_PA_CL_VPORT_YOFFSET].f32;
|
||||
}
|
||||
viewport_bottom += pa_cl_vte_cntl.vport_y_scale_ena
|
||||
? std::abs(regs[XE_GPU_REG_PA_CL_VPORT_YSCALE].f32)
|
||||
: 1.0f;
|
||||
// Using floor, or, rather, truncation (because maxing with zero anyway)
|
||||
// similar to how viewport scissoring behaves on real AMD, Intel and Nvidia
|
||||
// GPUs on Direct3D 12 (but not WARP), also like in
|
||||
// draw_util::GetHostViewportInfo.
|
||||
// max(0.0f, viewport_bottom) to drop NaN and < 0 - max picks the first
|
||||
// argument in the !(a < b) case (always for NaN), min as float (max_y is
|
||||
// well below 2^24) to safely drop very large values.
|
||||
max_y = uint32_t(std::min(float(max_y), std::max(0.0f, viewport_bottom)));
|
||||
}
|
||||
|
||||
return max_y;
|
||||
}
|
||||
|
||||
} // namespace gpu
|
||||
} // namespace xe
|
|
@ -0,0 +1,76 @@
|
|||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2022 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef XENIA_GPU_DRAW_EXTENT_ESTIMATOR_H_
|
||||
#define XENIA_GPU_DRAW_EXTENT_ESTIMATOR_H_
|
||||
|
||||
#include <cstdint>
|
||||
#include <optional>
|
||||
|
||||
#include "xenia/gpu/register_file.h"
|
||||
#include "xenia/gpu/shader.h"
|
||||
#include "xenia/gpu/shader_interpreter.h"
|
||||
#include "xenia/gpu/trace_writer.h"
|
||||
#include "xenia/memory.h"
|
||||
|
||||
namespace xe {
|
||||
namespace gpu {
|
||||
|
||||
class DrawExtentEstimator {
|
||||
public:
|
||||
DrawExtentEstimator(const RegisterFile& register_file, const Memory& memory,
|
||||
TraceWriter* trace_writer)
|
||||
: register_file_(register_file),
|
||||
memory_(memory),
|
||||
trace_writer_(trace_writer),
|
||||
shader_interpreter_(register_file, memory) {
|
||||
shader_interpreter_.SetTraceWriter(trace_writer);
|
||||
}
|
||||
|
||||
// The shader must have its ucode analyzed.
|
||||
uint32_t EstimateVertexMaxY(const Shader& vertex_shader);
|
||||
uint32_t EstimateMaxY(bool try_to_estimate_vertex_max_y,
|
||||
const Shader& vertex_shader);
|
||||
|
||||
private:
|
||||
class PositionYExportSink : public ShaderInterpreter::ExportSink {
|
||||
public:
|
||||
void Export(ucode::ExportRegister export_register, const float* value,
|
||||
uint32_t value_mask) override;
|
||||
|
||||
void Reset() {
|
||||
position_y_.reset();
|
||||
position_w_.reset();
|
||||
point_size_.reset();
|
||||
vertex_kill_.reset();
|
||||
}
|
||||
|
||||
const std::optional<float>& position_y() const { return position_y_; }
|
||||
const std::optional<float>& position_w() const { return position_w_; }
|
||||
const std::optional<float>& point_size() const { return point_size_; }
|
||||
const std::optional<uint32_t>& vertex_kill() const { return vertex_kill_; }
|
||||
|
||||
private:
|
||||
std::optional<float> position_y_;
|
||||
std::optional<float> position_w_;
|
||||
std::optional<float> point_size_;
|
||||
std::optional<uint32_t> vertex_kill_;
|
||||
};
|
||||
|
||||
const RegisterFile& register_file_;
|
||||
const Memory& memory_;
|
||||
TraceWriter* trace_writer_;
|
||||
|
||||
ShaderInterpreter shader_interpreter_;
|
||||
};
|
||||
|
||||
} // namespace gpu
|
||||
} // namespace xe
|
||||
|
||||
#endif // XENIA_GPU_DRAW_EXTENT_ESTIMATOR_H_
|
|
@ -63,6 +63,27 @@ bool IsRasterizationPotentiallyDone(const RegisterFile& regs,
|
|||
return true;
|
||||
}
|
||||
|
||||
reg::RB_DEPTHCONTROL GetNormalizedDepthControl(const RegisterFile& regs) {
|
||||
xenos::ModeControl edram_mode = regs.Get<reg::RB_MODECONTROL>().edram_mode;
|
||||
if (edram_mode != xenos::ModeControl::kColorDepth &&
|
||||
edram_mode != xenos::ModeControl::kDepth) {
|
||||
// Both depth and stencil disabled (EDRAM depth and stencil ignored).
|
||||
reg::RB_DEPTHCONTROL disabled;
|
||||
disabled.value = 0;
|
||||
return disabled;
|
||||
}
|
||||
reg::RB_DEPTHCONTROL depthcontrol = regs.Get<reg::RB_DEPTHCONTROL>();
|
||||
// For more reliable skipping of depth render target management for draws not
|
||||
// requiring depth.
|
||||
if (depthcontrol.z_enable && !depthcontrol.z_write_enable &&
|
||||
depthcontrol.zfunc == xenos::CompareFunction::kAlways) {
|
||||
depthcontrol.z_enable = 0;
|
||||
}
|
||||
// Stencil is more complex and is expected to be usually enabled explicitly
|
||||
// when needed.
|
||||
return depthcontrol;
|
||||
}
|
||||
|
||||
// https://docs.microsoft.com/en-us/windows/win32/api/d3d11/ne-d3d11-d3d11_standard_multisample_quality_levels
|
||||
const int8_t kD3D10StandardSamplePositions2x[2][2] = {{4, 4}, {-4, -4}};
|
||||
const int8_t kD3D10StandardSamplePositions4x[4][2] = {
|
||||
|
@ -148,6 +169,7 @@ bool IsPixelShaderNeededWithRasterization(const Shader& shader,
|
|||
void GetHostViewportInfo(const RegisterFile& regs, uint32_t resolution_scale_x,
|
||||
uint32_t resolution_scale_y, bool origin_bottom_left,
|
||||
uint32_t x_max, uint32_t y_max, bool allow_reverse_z,
|
||||
reg::RB_DEPTHCONTROL normalized_depth_control,
|
||||
bool convert_z_to_float24, bool full_float24_in_0_to_1,
|
||||
bool pixel_shader_writes_depth,
|
||||
ViewportInfo& viewport_info_out) {
|
||||
|
@ -497,7 +519,7 @@ void GetHostViewportInfo(const RegisterFile& regs, uint32_t resolution_scale_x,
|
|||
}
|
||||
}
|
||||
|
||||
if (GetDepthControlForCurrentEdramMode(regs).z_enable &&
|
||||
if (normalized_depth_control.z_enable &&
|
||||
regs.Get<reg::RB_DEPTH_INFO>().depth_format ==
|
||||
xenos::DepthRenderTargetFormat::kD24FS8) {
|
||||
if (convert_z_to_float24) {
|
||||
|
|
|
@ -84,18 +84,7 @@ bool IsRasterizationPotentiallyDone(const RegisterFile& regs,
|
|||
extern const int8_t kD3D10StandardSamplePositions2x[2][2];
|
||||
extern const int8_t kD3D10StandardSamplePositions4x[4][2];
|
||||
|
||||
inline reg::RB_DEPTHCONTROL GetDepthControlForCurrentEdramMode(
|
||||
const RegisterFile& regs) {
|
||||
xenos::ModeControl edram_mode = regs.Get<reg::RB_MODECONTROL>().edram_mode;
|
||||
if (edram_mode != xenos::ModeControl::kColorDepth &&
|
||||
edram_mode != xenos::ModeControl::kDepth) {
|
||||
// Both depth and stencil disabled (EDRAM depth and stencil ignored).
|
||||
reg::RB_DEPTHCONTROL disabled;
|
||||
disabled.value = 0;
|
||||
return disabled;
|
||||
}
|
||||
return regs.Get<reg::RB_DEPTHCONTROL>();
|
||||
}
|
||||
reg::RB_DEPTHCONTROL GetNormalizedDepthControl(const RegisterFile& regs);
|
||||
|
||||
constexpr float GetD3D10PolygonOffsetFactor(
|
||||
xenos::DepthRenderTargetFormat depth_format, bool float24_as_0_to_0_5) {
|
||||
|
@ -183,6 +172,7 @@ struct ViewportInfo {
|
|||
void GetHostViewportInfo(const RegisterFile& regs, uint32_t resolution_scale_x,
|
||||
uint32_t resolution_scale_y, bool origin_bottom_left,
|
||||
uint32_t x_max, uint32_t y_max, bool allow_reverse_z,
|
||||
reg::RB_DEPTHCONTROL normalized_depth_control,
|
||||
bool convert_z_to_float24, bool full_float24_in_0_to_1,
|
||||
bool pixel_shader_writes_depth,
|
||||
ViewportInfo& viewport_info_out);
|
||||
|
|
|
@ -14,9 +14,11 @@
|
|||
namespace xe {
|
||||
namespace gpu {
|
||||
|
||||
DxbcShader::DxbcShader(xenos::ShaderType shader_type, uint64_t data_hash,
|
||||
const uint32_t* dword_ptr, uint32_t dword_count)
|
||||
: Shader(shader_type, data_hash, dword_ptr, dword_count) {}
|
||||
DxbcShader::DxbcShader(xenos::ShaderType shader_type, uint64_t ucode_data_hash,
|
||||
const uint32_t* ucode_dwords, size_t ucode_dword_count,
|
||||
std::endian ucode_source_endian)
|
||||
: Shader(shader_type, ucode_data_hash, ucode_dwords, ucode_dword_count,
|
||||
ucode_source_endian) {}
|
||||
|
||||
Shader::Translation* DxbcShader::CreateTranslationInstance(
|
||||
uint64_t modification) {
|
||||
|
|
|
@ -28,8 +28,9 @@ class DxbcShader : public Shader {
|
|||
: Translation(shader, modification) {}
|
||||
};
|
||||
|
||||
DxbcShader(xenos::ShaderType shader_type, uint64_t data_hash,
|
||||
const uint32_t* dword_ptr, uint32_t dword_count);
|
||||
DxbcShader(xenos::ShaderType shader_type, uint64_t ucode_data_hash,
|
||||
const uint32_t* ucode_dwords, size_t ucode_dword_count,
|
||||
std::endian ucode_source_endian = std::endian::big);
|
||||
|
||||
// Resource bindings are gathered after the successful translation of any
|
||||
// modification for simplicity of translation (and they don't depend on
|
||||
|
|
|
@ -273,6 +273,36 @@ void DxbcShaderTranslator::ConvertPWLGamma(
|
|||
accumulator_src);
|
||||
}
|
||||
|
||||
void DxbcShaderTranslator::RemapAndConvertVertexIndices(
|
||||
uint32_t dest_temp, uint32_t dest_temp_components, const dxbc::Src& src) {
|
||||
dxbc::Dest dest(dxbc::Dest::R(dest_temp, dest_temp_components));
|
||||
dxbc::Src dest_src(dxbc::Src::R(dest_temp));
|
||||
|
||||
// Add the base vertex index.
|
||||
a_.OpIAdd(dest, src,
|
||||
LoadSystemConstant(SystemConstants::Index::kVertexIndexOffset,
|
||||
offsetof(SystemConstants, vertex_index_offset),
|
||||
dxbc::Src::kXXXX));
|
||||
|
||||
// Mask since the GPU only uses the lower 24 bits of the vertex index (tested
|
||||
// on an Adreno 200 phone). `((index & 0xFFFFFF) + offset) & 0xFFFFFF` is the
|
||||
// same as `(index + offset) & 0xFFFFFF`.
|
||||
a_.OpAnd(dest, dest_src, dxbc::Src::LU(xenos::kVertexIndexMask));
|
||||
|
||||
// Clamp after offsetting.
|
||||
a_.OpUMax(dest, dest_src,
|
||||
LoadSystemConstant(SystemConstants::Index::kVertexIndexMinMax,
|
||||
offsetof(SystemConstants, vertex_index_min),
|
||||
dxbc::Src::kXXXX));
|
||||
a_.OpUMin(dest, dest_src,
|
||||
LoadSystemConstant(SystemConstants::Index::kVertexIndexMinMax,
|
||||
offsetof(SystemConstants, vertex_index_max),
|
||||
dxbc::Src::kXXXX));
|
||||
|
||||
// Convert to float.
|
||||
a_.OpUToF(dest, dest_src);
|
||||
}
|
||||
|
||||
void DxbcShaderTranslator::StartVertexShader_LoadVertexIndex() {
|
||||
if (register_count() < 1) {
|
||||
return;
|
||||
|
@ -348,29 +378,9 @@ void DxbcShaderTranslator::StartVertexShader_LoadVertexIndex() {
|
|||
}
|
||||
}
|
||||
|
||||
// Add the base vertex index.
|
||||
a_.OpIAdd(index_dest, index_src,
|
||||
LoadSystemConstant(SystemConstants::Index::kVertexIndexOffset,
|
||||
offsetof(SystemConstants, vertex_index_offset),
|
||||
dxbc::Src::kXXXX));
|
||||
|
||||
// Mask since the GPU only uses the lower 24 bits of the vertex index (tested
|
||||
// on an Adreno 200 phone). `((index & 0xFFFFFF) + offset) & 0xFFFFFF` is the
|
||||
// same as `(index + offset) & 0xFFFFFF`.
|
||||
a_.OpAnd(index_dest, index_src, dxbc::Src::LU(xenos::kVertexIndexMask));
|
||||
|
||||
// Clamp the vertex index after offsetting.
|
||||
a_.OpUMax(index_dest, index_src,
|
||||
LoadSystemConstant(SystemConstants::Index::kVertexIndexMinMax,
|
||||
offsetof(SystemConstants, vertex_index_min),
|
||||
dxbc::Src::kXXXX));
|
||||
a_.OpUMin(index_dest, index_src,
|
||||
LoadSystemConstant(SystemConstants::Index::kVertexIndexMinMax,
|
||||
offsetof(SystemConstants, vertex_index_max),
|
||||
dxbc::Src::kXXXX));
|
||||
|
||||
// Convert to float.
|
||||
a_.OpUToF(index_dest, index_src);
|
||||
// Remap the index to the needed range and convert it to floating-point.
|
||||
RemapAndConvertVertexIndices(index_dest.index_1d_.index_,
|
||||
index_dest.write_mask_, index_src);
|
||||
|
||||
if (uses_register_dynamic_addressing) {
|
||||
// Store to indexed GPR 0 in x0[0].
|
||||
|
@ -435,12 +445,12 @@ void DxbcShaderTranslator::StartVertexOrDomainShader() {
|
|||
: dxbc::Dest::R(0, 0b0111),
|
||||
dxbc::Src::VDomain(0b000110));
|
||||
if (register_count() >= 2) {
|
||||
// Copy the primitive index to r1.x as a float.
|
||||
// Remap and write the primitive index to r1.x as floating-point.
|
||||
uint32_t primitive_id_temp =
|
||||
uses_register_dynamic_addressing ? PushSystemTemp() : 1;
|
||||
in_primitive_id_used_ = true;
|
||||
a_.OpUToF(dxbc::Dest::R(primitive_id_temp, 0b0001),
|
||||
dxbc::Src::VPrim());
|
||||
RemapAndConvertVertexIndices(primitive_id_temp, 0b0001,
|
||||
dxbc::Src::VPrim());
|
||||
if (uses_register_dynamic_addressing) {
|
||||
a_.OpMov(dxbc::Dest::X(0, 1, 0b0001),
|
||||
dxbc::Src::R(primitive_id_temp, dxbc::Src::kXXXX));
|
||||
|
@ -518,11 +528,13 @@ void DxbcShaderTranslator::StartVertexOrDomainShader() {
|
|||
a_.OpMov(uses_register_dynamic_addressing ? dxbc::Dest::X(0, 0, 0b0110)
|
||||
: dxbc::Dest::R(0, 0b0110),
|
||||
dxbc::Src::VDomain(0b010000));
|
||||
// Copy the primitive index to r0.x as a float.
|
||||
// Remap and write the primitive index to r0.x as floating-point.
|
||||
// 4D5307F1 ground quad patches use the primitive index offset.
|
||||
uint32_t primitive_id_temp =
|
||||
uses_register_dynamic_addressing ? PushSystemTemp() : 0;
|
||||
in_primitive_id_used_ = true;
|
||||
a_.OpUToF(dxbc::Dest::R(primitive_id_temp, 0b0001), dxbc::Src::VPrim());
|
||||
RemapAndConvertVertexIndices(primitive_id_temp, 0b0001,
|
||||
dxbc::Src::VPrim());
|
||||
if (uses_register_dynamic_addressing) {
|
||||
a_.OpMov(dxbc::Dest::X(0, 0, 0b0001),
|
||||
dxbc::Src::R(primitive_id_temp, dxbc::Src::kXXXX));
|
||||
|
@ -694,6 +706,12 @@ void DxbcShaderTranslator::StartPixelShader() {
|
|||
a_.OpEndIf();
|
||||
// ZW - UV within a point sprite in the absolute value, at centroid if
|
||||
// requested for the interpolator.
|
||||
// TODO(Triang3l): Are centroid point coordinates possible in the hardware
|
||||
// at all? ps_param_gen is not a triangle-IJ-interpolated value
|
||||
// apparently, rather, it replaces the value in the shader input.
|
||||
// TODO(Triang3l): Saturate to avoid negative point coordinates (the sign
|
||||
// bit is used for the primitive type indicator) in case of extrapolation
|
||||
// when the center is not covered with MSAA.
|
||||
dxbc::Dest point_coord_r_zw_dest(dxbc::Dest::R(param_gen_temp, 0b1100));
|
||||
dxbc::Src point_coord_v_xxxy_src(dxbc::Src::V(
|
||||
uint32_t(InOutRegister::kPSInPointParameters), 0b01000000));
|
||||
|
@ -711,6 +729,7 @@ void DxbcShaderTranslator::StartPixelShader() {
|
|||
// At centroid.
|
||||
a_.OpEvalCentroid(point_coord_r_zw_dest, point_coord_v_xxxy_src);
|
||||
a_.OpEndIf();
|
||||
// TODO(Triang3l): Point / line primitive type flags to the sign bits.
|
||||
// Write ps_param_gen to the specified GPR.
|
||||
dxbc::Src param_gen_src(dxbc::Src::R(param_gen_temp));
|
||||
if (uses_register_dynamic_addressing) {
|
||||
|
@ -968,12 +987,12 @@ void DxbcShaderTranslator::CompleteVertexOrDomainShader() {
|
|||
dxbc::Src::R(system_temp_position_));
|
||||
|
||||
// Assuming SV_CullDistance was zeroed earlier in this function.
|
||||
// Kill the primitive if needed - check if the shader wants to kill.
|
||||
// TODO(Triang3l): Find if the condition is actually the flag being non-zero.
|
||||
a_.OpNE(temp_x_dest,
|
||||
dxbc::Src::R(system_temp_point_size_edge_flag_kill_vertex_,
|
||||
dxbc::Src::kZZZZ),
|
||||
dxbc::Src::LF(0.0f));
|
||||
// Kill the primitive if needed - check if the shader wants to kill (bits
|
||||
// 0:30 of the vertex kill register are not zero).
|
||||
a_.OpAnd(temp_x_dest,
|
||||
dxbc::Src::R(system_temp_point_size_edge_flag_kill_vertex_,
|
||||
dxbc::Src::kZZZZ),
|
||||
dxbc::Src::LU(UINT32_C(0x7FFFFFFF)));
|
||||
a_.OpIf(true, temp_x_src);
|
||||
{
|
||||
// Extract the killing condition.
|
||||
|
@ -1331,12 +1350,12 @@ dxbc::Src DxbcShaderTranslator::LoadOperand(const InstructionOperand& operand,
|
|||
|
||||
dxbc::Index index(operand.storage_index);
|
||||
switch (operand.storage_addressing_mode) {
|
||||
case InstructionStorageAddressingMode::kStatic:
|
||||
case InstructionStorageAddressingMode::kAbsolute:
|
||||
break;
|
||||
case InstructionStorageAddressingMode::kAddressAbsolute:
|
||||
case InstructionStorageAddressingMode::kAddressRegisterRelative:
|
||||
index = dxbc::Index(system_temp_ps_pc_p0_a0_, 3, operand.storage_index);
|
||||
break;
|
||||
case InstructionStorageAddressingMode::kAddressRelative:
|
||||
case InstructionStorageAddressingMode::kLoopRelative:
|
||||
index = dxbc::Index(system_temp_aL_, 0, operand.storage_index);
|
||||
break;
|
||||
}
|
||||
|
@ -1365,7 +1384,7 @@ dxbc::Src DxbcShaderTranslator::LoadOperand(const InstructionOperand& operand,
|
|||
src = dxbc::Src::R(temp);
|
||||
} else {
|
||||
assert_true(operand.storage_addressing_mode ==
|
||||
InstructionStorageAddressingMode::kStatic);
|
||||
InstructionStorageAddressingMode::kAbsolute);
|
||||
src = dxbc::Src::R(index.index_);
|
||||
}
|
||||
} break;
|
||||
|
@ -1376,7 +1395,7 @@ dxbc::Src DxbcShaderTranslator::LoadOperand(const InstructionOperand& operand,
|
|||
const Shader::ConstantRegisterMap& constant_register_map =
|
||||
current_shader().constant_register_map();
|
||||
if (operand.storage_addressing_mode ==
|
||||
InstructionStorageAddressingMode::kStatic) {
|
||||
InstructionStorageAddressingMode::kAbsolute) {
|
||||
uint32_t float_constant_index =
|
||||
constant_register_map.GetPackedFloatConstantIndex(
|
||||
operand.storage_index);
|
||||
|
@ -1429,13 +1448,13 @@ void DxbcShaderTranslator::StoreResult(const InstructionResult& result,
|
|||
if (current_shader().uses_register_dynamic_addressing()) {
|
||||
dxbc::Index register_index(result.storage_index);
|
||||
switch (result.storage_addressing_mode) {
|
||||
case InstructionStorageAddressingMode::kStatic:
|
||||
case InstructionStorageAddressingMode::kAbsolute:
|
||||
break;
|
||||
case InstructionStorageAddressingMode::kAddressAbsolute:
|
||||
case InstructionStorageAddressingMode::kAddressRegisterRelative:
|
||||
register_index =
|
||||
dxbc::Index(system_temp_ps_pc_p0_a0_, 3, result.storage_index);
|
||||
break;
|
||||
case InstructionStorageAddressingMode::kAddressRelative:
|
||||
case InstructionStorageAddressingMode::kLoopRelative:
|
||||
register_index =
|
||||
dxbc::Index(system_temp_aL_, 0, result.storage_index);
|
||||
break;
|
||||
|
@ -1443,7 +1462,7 @@ void DxbcShaderTranslator::StoreResult(const InstructionResult& result,
|
|||
dest = dxbc::Dest::X(0, register_index);
|
||||
} else {
|
||||
assert_true(result.storage_addressing_mode ==
|
||||
InstructionStorageAddressingMode::kStatic);
|
||||
InstructionStorageAddressingMode::kAbsolute);
|
||||
dest = dxbc::Dest::R(result.storage_index);
|
||||
}
|
||||
break;
|
||||
|
@ -1786,6 +1805,8 @@ void DxbcShaderTranslator::ProcessLoopStartInstruction(
|
|||
}
|
||||
|
||||
// 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();
|
||||
|
|
|
@ -756,6 +756,13 @@ class DxbcShaderTranslator : public ShaderTranslator {
|
|||
uint32_t factor_component);
|
||||
|
||||
// Writing the prologue.
|
||||
// Applies the offset to vertex or tessellation patch indices in the source
|
||||
// components, restricts them to the minimum and the maximum index values, and
|
||||
// converts them to floating-point. The destination may be the same as the
|
||||
// source.
|
||||
void RemapAndConvertVertexIndices(uint32_t dest_temp,
|
||||
uint32_t dest_temp_components,
|
||||
const dxbc::Src& src);
|
||||
void StartVertexShader_LoadVertexIndex();
|
||||
void StartVertexOrDomainShader();
|
||||
void StartDomainShader();
|
||||
|
|
|
@ -28,7 +28,7 @@ void DxbcShaderTranslator::ProcessVectorAluOperation(
|
|||
uint32_t used_result_components =
|
||||
instr.vector_and_constant_result.GetUsedResultComponents();
|
||||
if (!used_result_components &&
|
||||
!AluVectorOpHasSideEffects(instr.vector_opcode)) {
|
||||
!ucode::GetAluVectorOpcodeInfo(instr.vector_opcode).changed_state) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -222,7 +222,8 @@ bool PrimitiveProcessor::Process(ProcessingResult& result_out) {
|
|||
// Parse the primitive type and the tessellation state (VGT_OUTPUT_PATH_CNTL
|
||||
// is only used in the explicit major mode) - there are cases in games when
|
||||
// this register is left over after usage of tessellation in draws that don't
|
||||
// need it.
|
||||
// need it. Also perform needed vertex count adjustments based on the
|
||||
// primitive type.
|
||||
xenos::PrimitiveType guest_primitive_type = vgt_draw_initiator.prim_type;
|
||||
xenos::PrimitiveType host_primitive_type = guest_primitive_type;
|
||||
bool tessellation_enabled =
|
||||
|
@ -233,6 +234,7 @@ bool PrimitiveProcessor::Process(ProcessingResult& result_out) {
|
|||
xenos::TessellationMode tessellation_mode =
|
||||
regs.Get<reg::VGT_HOS_CNTL>().tess_mode;
|
||||
Shader::HostVertexShaderType host_vertex_shader_type;
|
||||
uint32_t guest_draw_vertex_count = vgt_draw_initiator.num_indices;
|
||||
if (tessellation_enabled) {
|
||||
// Currently only supporting tessellation in known cases for safety, and not
|
||||
// yet converting patch strips / fans to patch lists until games using them
|
||||
|
@ -289,12 +291,29 @@ bool PrimitiveProcessor::Process(ProcessingResult& result_out) {
|
|||
// - 4D5307ED - water - adaptive.
|
||||
host_vertex_shader_type =
|
||||
Shader::HostVertexShaderType::kTriangleDomainPatchIndexed;
|
||||
// See the comment about the rounding for kQuadPatch.
|
||||
guest_draw_vertex_count =
|
||||
xe::round_up(guest_draw_vertex_count, uint32_t(3), false);
|
||||
break;
|
||||
case xenos::PrimitiveType::kQuadPatch:
|
||||
// - 4D5307F1 - continuous.
|
||||
// - 4D5307F1 - ground - continuous.
|
||||
// - 4D5307F2 - garden ground - adaptive.
|
||||
host_vertex_shader_type =
|
||||
Shader::HostVertexShaderType::kQuadDomainPatchIndexed;
|
||||
// While it's known that num_indices represents the control point count
|
||||
// (4D5307E6, for example, for water triangle patches, performs N
|
||||
// invocations of the memexporting shader calculating the edge
|
||||
// tessellation factors for one patch, and then draws the water with
|
||||
// num_indices = 3 * N), 4D5307F1 ground is drawn with num_indices = 1
|
||||
// rather than 4. Unlike Direct3D 11 tessellation, where the patch count
|
||||
// is `floor(vertex count / control points per patch)`, on the Xenos,
|
||||
// the count appears to be `ceil` of that value (like a
|
||||
// `for (i = 0; i < num_indices; i += 4)` loop is used to emit the
|
||||
// patches). It's unlikely, however, that this adjustment should also be
|
||||
// done for regular primitive types with tessellation enabled, as
|
||||
// they're handled as usual primitive topologies, just post-tessellated.
|
||||
guest_draw_vertex_count =
|
||||
xe::align(guest_draw_vertex_count, uint32_t(4));
|
||||
break;
|
||||
default:
|
||||
// TODO(Triang3l): Support line patches.
|
||||
|
@ -346,7 +365,17 @@ bool PrimitiveProcessor::Process(ProcessingResult& result_out) {
|
|||
}
|
||||
|
||||
// Process the indices.
|
||||
uint32_t guest_draw_vertex_count = vgt_draw_initiator.num_indices;
|
||||
auto vgt_dma_size = regs.Get<reg::VGT_DMA_SIZE>();
|
||||
if (vgt_draw_initiator.source_select == xenos::SourceSelect::kDMA &&
|
||||
guest_draw_vertex_count > vgt_dma_size.num_words) {
|
||||
XELOGW(
|
||||
"Primitive processor: {} vertices attempted to be drawn with an index "
|
||||
"buffer only containing {}. Should be fetching zero indices instead of "
|
||||
"overflowing ones, but this is a rare situation, so not handled yet. "
|
||||
"Report the game to Xenia developers!",
|
||||
guest_draw_vertex_count, vgt_dma_size.num_words);
|
||||
guest_draw_vertex_count = vgt_dma_size.num_words;
|
||||
}
|
||||
uint32_t line_loop_closing_index = 0;
|
||||
uint32_t guest_index_base;
|
||||
CachedResult cacheable;
|
||||
|
@ -420,9 +449,6 @@ bool PrimitiveProcessor::Process(ProcessingResult& result_out) {
|
|||
uint32_t(vgt_draw_initiator.source_select));
|
||||
return false;
|
||||
}
|
||||
|
||||
auto vgt_dma_size = regs.Get<reg::VGT_DMA_SIZE>();
|
||||
|
||||
xenos::IndexFormat guest_index_format = vgt_draw_initiator.index_size;
|
||||
cacheable.host_index_format = guest_index_format;
|
||||
// Normalize the endian and the reset index.
|
||||
|
@ -490,15 +516,6 @@ bool PrimitiveProcessor::Process(ProcessingResult& result_out) {
|
|||
}
|
||||
|
||||
// Get the index buffer memory range.
|
||||
if (guest_draw_vertex_count > vgt_dma_size.num_words) {
|
||||
XELOGW(
|
||||
"Primitive processor: {} vertices attempted to be drawn with an "
|
||||
"index buffer only containing {}. Should be fetching zero indices "
|
||||
"instead of overflowing ones, but this is a rare situation, so not "
|
||||
"handled yet. Report the game to Xenia developers!",
|
||||
guest_draw_vertex_count, vgt_dma_size.num_words);
|
||||
guest_draw_vertex_count = vgt_dma_size.num_words;
|
||||
}
|
||||
uint32_t index_size_log2 =
|
||||
guest_index_format == xenos::IndexFormat::kInt16 ? 1 : 2;
|
||||
// The base should already be aligned, but aligning here too for safety.
|
||||
|
|
|
@ -130,22 +130,70 @@ 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) index
|
||||
// to write pixel parameters to. So far have been able to find the following
|
||||
// usage:
|
||||
// Pixel shader interpolator (according to the XNA microcode compiler -
|
||||
// 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
|
||||
// Freedreno IRC that it's .0 even in OpenGL:
|
||||
// https://dri.freedesktop.org/~cbrill/dri-log/?channel=freedreno&date=2020-04-19
|
||||
// (on Android, according to LG P705 GL_OES_get_program_binary
|
||||
// disassembly, gl_FragCoord.xy is |r0.xy| * c221.xy + c222.zw - haven't
|
||||
// been able to dump the constant values by exploiting a huge uniform
|
||||
// array, but flto says c222.zw contains tile offset plus 0.5).
|
||||
// * Sign bit of X - is front face (vFace), non-negative for front face,
|
||||
// negative for back face (used with `rcpc` in shaders to take signedness
|
||||
// of 0 into account in `cndge`).
|
||||
// * |ZW| - UV within a point sprite (sign meaning is unknown so far).
|
||||
// According to the actual usage, in the final version of the hardware,
|
||||
// the screen coordinates are passed to the shader directly as floats
|
||||
// (contrary to what's written in the early 2.11 version of the sequencer
|
||||
// specification from IPR2015-00325, where the coordinates are specified
|
||||
// to be 2^23-biased, essentially packed as integers in the low mantissa
|
||||
// bits of 2^23).
|
||||
// * On Android, according to LG P705 - checked on the driver V@6.0 AU@
|
||||
// (CL@3050818) - GL_OES_get_program_binary disassembly, gl_FragCoord.xy
|
||||
// is |r0.xy| * c221.xy + c222.zw. Though we haven't yet been able to
|
||||
// dump the actual constant values by exploiting a huge uniform array,
|
||||
// but flto says c222.zw contains tile offset plus 0.5. It also appears
|
||||
// that the multiplication by c221.xy is done to flip the direction of
|
||||
// the Y axis in gl_FragCoord (c221.y is probably -1). According to the
|
||||
// tests performed with triangles and point sprites, the hardware uses
|
||||
// the top-left rasterization rule just like Direct3D (tie-breaking
|
||||
// sample coverage towards gl_FragCoord.-x+y, while Direct3D tie-breaks
|
||||
// towards VPOS.-x-y), and the R400 / Z430 doesn't seem to have the
|
||||
// equivalent of R5xx's SC_EDGERULE register for configuring this).
|
||||
// Also, both OpenGL and apparently Direct3D 9 define the point sprite V
|
||||
// coordinate to be 0 in the top, and 1 in the bottom (but OpenGL
|
||||
// gl_FragCoord.y is towards the top, while Direct3D 9's VPOS.y is
|
||||
// towards the bottom), gl_PointCoord.y is |PsParamGen.w| directly, and
|
||||
// the R400 / Z430 doesn't appear to have an equivalent of R6xx's
|
||||
// SPI_INTERP_CONTROL_0::PNT_SPRITE_TOP_1 for toggling the direction.
|
||||
// So, it looks like the internal screen coordinates in the official
|
||||
// OpenGL ES 2.0 driver are still top-to-bottom like in Direct3D, but
|
||||
// gl_FragCoord.y is flipped in the shader code so it's bottom-to-top
|
||||
// as OpenGL specifies.
|
||||
// https://docs.microsoft.com/en-us/windows/win32/direct3d9/point-sprites
|
||||
// * |ZW| - UV within a point sprite, [0, 1]. In OpenGL ES 2.0, this is
|
||||
// interpreted directly as gl_PointCoord, with the directions matching the
|
||||
// OpenGL ES 2.0 specification - 0 in the top (towards +gl_FragCoord.y in
|
||||
// OpenGL ES bottom-to-top screen coordinates - but towards -PsParamGen.y
|
||||
// likely, see the explanation of gl_FragCoord.xy above), 1 in the bottom
|
||||
// (towards -gl_FragCoord.y, or +PsParamGen.y likely). The point sprite
|
||||
// coordinates are exposed differently on the Xbox 360 and the PC
|
||||
// Direct3D 9 - the Xbox 360 passes the whole PsParamGen register via the
|
||||
// SPRITETEXCOORD input semantic directly (unlike on the PC, where point
|
||||
// sprite coordinates are written to XY of TEXCOORD0), and shaders should
|
||||
// take abs(SPRITETEXCOORD.zw) explicitly.
|
||||
// https://shawnhargreaves.com/blog/point-sprites-on-xbox.html
|
||||
// 4D5307F1 has snowflake point sprites with an asymmetric texture.
|
||||
// * Sign bit of X - is front face (according to the disassembly of vFace
|
||||
// and gl_FrontFacing usage), non-negative for front face, negative for
|
||||
// back face (used with `rcpc` in shaders to take signedness of 0 into
|
||||
// account in `cndge`).
|
||||
// * Sign bit of Y - is the primitive type a point (according to the
|
||||
// IPR2015-00325 sequencer specification), negative for a point,
|
||||
// non-negative for other primitive types.
|
||||
// * Sign bit of Z - is the primitive type a line (according to the
|
||||
// IPR2015-00325 sequencer specification), negative for a line,
|
||||
// non-negative for other primitive types.
|
||||
uint32_t param_gen_pos : 8; // +8
|
||||
uint32_t perfcounter_ref : 1; // +16
|
||||
uint32_t yeild_optimize : 1; // +17 sic
|
||||
|
@ -167,6 +215,31 @@ union alignas(uint32_t) SQ_INTERPOLATOR_CNTL {
|
|||
};
|
||||
static_assert_size(SQ_INTERPOLATOR_CNTL, sizeof(uint32_t));
|
||||
|
||||
union alignas(uint32_t) SQ_VS_CONST {
|
||||
uint32_t value;
|
||||
struct {
|
||||
uint32_t base : 9; // +0
|
||||
uint32_t : 3; // +9
|
||||
// Vec4 count minus one.
|
||||
uint32_t size : 9; // 12
|
||||
};
|
||||
static constexpr Register register_index = XE_GPU_REG_SQ_VS_CONST;
|
||||
};
|
||||
static_assert_size(SQ_VS_CONST, sizeof(uint32_t));
|
||||
|
||||
// Same as SQ_VS_CONST.
|
||||
union alignas(uint32_t) SQ_PS_CONST {
|
||||
uint32_t value;
|
||||
struct {
|
||||
uint32_t base : 9; // +0
|
||||
uint32_t : 3; // +9
|
||||
// Vec4 count minus one.
|
||||
uint32_t size : 9; // 12
|
||||
};
|
||||
static constexpr Register register_index = XE_GPU_REG_SQ_PS_CONST;
|
||||
};
|
||||
static_assert_size(SQ_PS_CONST, sizeof(uint32_t));
|
||||
|
||||
/*******************************************************************************
|
||||
__ _____ ___ _____ _____ __
|
||||
\ \ / / __| _ \_ _| __\ \/ /
|
||||
|
@ -309,7 +382,7 @@ static_assert_size(VGT_HOS_CNTL, sizeof(uint32_t));
|
|||
union alignas(uint32_t) PA_SU_POINT_MINMAX {
|
||||
uint32_t value;
|
||||
struct {
|
||||
// Radius, 12.4 fixed point.
|
||||
// For per-vertex size specification, radius (1/2 size), 12.4 fixed point.
|
||||
uint32_t min_size : 16; // +0
|
||||
uint32_t max_size : 16; // +16
|
||||
};
|
||||
|
@ -548,6 +621,10 @@ union alignas(uint32_t) RB_COLORCONTROL {
|
|||
uint32_t alpha_to_mask_enable : 1; // +4
|
||||
// Everything in between was added on Adreno.
|
||||
uint32_t : 19; // +5
|
||||
// TODO(Triang3l): Redo these tests and possibly flip these vertically in
|
||||
// the comment and in the actual implementation. It appears that
|
||||
// gl_FragCoord.y is mirrored as opposed to the actual screen coordinates in
|
||||
// the rasterizer (see the SQ_CONTEXT_MISC::param_gen_pos comment here).
|
||||
// According to tests on an Adreno 200 device (LG Optimus L7), done by
|
||||
// drawing 0.5x0.5 rectangles in different corners of four pixels in a quad
|
||||
// to a multisampled GLSurfaceView, the coverage mask is the following for 4
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2021 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. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
@ -22,7 +22,6 @@
|
|||
#include "xenia/base/logging.h"
|
||||
#include "xenia/base/math.h"
|
||||
#include "xenia/gpu/draw_util.h"
|
||||
#include "xenia/gpu/gpu_flags.h"
|
||||
#include "xenia/gpu/register_file.h"
|
||||
#include "xenia/gpu/registers.h"
|
||||
#include "xenia/gpu/xenos.h"
|
||||
|
@ -143,6 +142,19 @@ DEFINE_bool(
|
|||
"-1...1, remap -32...32 to -1...1 to use the full possible range of "
|
||||
"values, at the expense of multiplicative blending correctness.",
|
||||
"GPU");
|
||||
// Enabled by default as the GPU is overall usually the bottleneck when the
|
||||
// pixel shader interlock render backend implementation is used, anything that
|
||||
// may improve GPU performance is favorable.
|
||||
DEFINE_bool(
|
||||
execute_unclipped_draw_vs_on_cpu_for_psi_render_backend, true,
|
||||
"If execute_unclipped_draw_vs_on_cpu is enabled, execute the vertex shader "
|
||||
"for unclipped draws on the CPU even when using the pixel shader interlock "
|
||||
"(rasterizer-ordered view) implementation of the render backend on the "
|
||||
"host, for which no expensive copying between host render targets is "
|
||||
"needed when the ownership of a EDRAM range is changed.\n"
|
||||
"If this is enabled, excessive barriers may be eliminated when switching "
|
||||
"between different render targets in separate EDRAM locations.",
|
||||
"GPU");
|
||||
|
||||
namespace xe {
|
||||
namespace gpu {
|
||||
|
@ -366,7 +378,9 @@ void RenderTargetCache::ClearCache() {
|
|||
void RenderTargetCache::BeginFrame() { ResetAccumulatedRenderTargets(); }
|
||||
|
||||
bool RenderTargetCache::Update(bool is_rasterization_done,
|
||||
uint32_t normalized_color_mask) {
|
||||
reg::RB_DEPTHCONTROL normalized_depth_control,
|
||||
uint32_t normalized_color_mask,
|
||||
const Shader& vertex_shader) {
|
||||
const RegisterFile& regs = register_file();
|
||||
bool interlock_barrier_only = GetPath() == Path::kPixelShaderInterlock;
|
||||
|
||||
|
@ -429,8 +443,8 @@ bool RenderTargetCache::Update(bool is_rasterization_done,
|
|||
uint32_t rts_are_64bpp = 0;
|
||||
uint32_t color_rts_are_gamma = 0;
|
||||
if (is_rasterization_done) {
|
||||
auto rb_depthcontrol = draw_util::GetDepthControlForCurrentEdramMode(regs);
|
||||
if (rb_depthcontrol.z_enable || rb_depthcontrol.stencil_enable) {
|
||||
if (normalized_depth_control.z_enable ||
|
||||
normalized_depth_control.stencil_enable) {
|
||||
depth_and_color_rts_used_bits |= 1;
|
||||
auto rb_depth_info = regs.Get<reg::RB_DEPTH_INFO>();
|
||||
// std::min for safety, to avoid negative numbers in case it's completely
|
||||
|
@ -555,47 +569,13 @@ bool RenderTargetCache::Update(bool is_rasterization_done,
|
|||
|
||||
// Estimate height used by render targets (for color for writes, for depth /
|
||||
// stencil for both reads and writes) from various sources.
|
||||
uint32_t height_used =
|
||||
GetRenderTargetHeight(pitch_tiles_at_32bpp, msaa_samples);
|
||||
int32_t window_y_offset =
|
||||
regs.Get<reg::PA_SC_WINDOW_OFFSET>().window_y_offset;
|
||||
if (!regs.Get<reg::PA_CL_CLIP_CNTL>().clip_disable) {
|
||||
auto pa_cl_vte_cntl = regs.Get<reg::PA_CL_VTE_CNTL>();
|
||||
float viewport_bottom = 0.0f;
|
||||
// First calculate all the integer.0 or integer.5 offsetting exactly at full
|
||||
// precision.
|
||||
if (regs.Get<reg::PA_SU_SC_MODE_CNTL>().vtx_window_offset_enable) {
|
||||
viewport_bottom += float(window_y_offset);
|
||||
}
|
||||
if (cvars::half_pixel_offset &&
|
||||
!regs.Get<reg::PA_SU_VTX_CNTL>().pix_center) {
|
||||
viewport_bottom += 0.5f;
|
||||
}
|
||||
// Then apply the floating-point viewport offset.
|
||||
if (pa_cl_vte_cntl.vport_y_offset_ena) {
|
||||
viewport_bottom += regs[XE_GPU_REG_PA_CL_VPORT_YOFFSET].f32;
|
||||
}
|
||||
viewport_bottom += pa_cl_vte_cntl.vport_y_scale_ena
|
||||
? std::abs(regs[XE_GPU_REG_PA_CL_VPORT_YSCALE].f32)
|
||||
: 1.0f;
|
||||
// Using floor, or, rather, truncation (because maxing with zero anyway)
|
||||
// similar to how viewport scissoring behaves on real AMD, Intel and Nvidia
|
||||
// GPUs on Direct3D 12, also like in draw_util::GetHostViewportInfo.
|
||||
// max(0.0f, viewport_bottom) to drop NaN and < 0 - max picks the first
|
||||
// argument in the !(a < b) case (always for NaN), min as float (height_used
|
||||
// is well below 2^24) to safely drop very large values.
|
||||
height_used =
|
||||
uint32_t(std::min(float(height_used), std::max(0.0f, viewport_bottom)));
|
||||
}
|
||||
int32_t scissor_bottom =
|
||||
int32_t(regs.Get<reg::PA_SC_WINDOW_SCISSOR_BR>().br_y);
|
||||
if (!regs.Get<reg::PA_SC_WINDOW_SCISSOR_TL>().window_offset_disable) {
|
||||
scissor_bottom += window_y_offset;
|
||||
}
|
||||
scissor_bottom =
|
||||
std::min(scissor_bottom, regs.Get<reg::PA_SC_SCREEN_SCISSOR_BR>().br_y);
|
||||
height_used =
|
||||
std::min(height_used, uint32_t(std::max(scissor_bottom, int32_t(0))));
|
||||
uint32_t height_used = std::min(
|
||||
GetRenderTargetHeight(pitch_tiles_at_32bpp, msaa_samples),
|
||||
draw_extent_estimator_.EstimateMaxY(
|
||||
interlock_barrier_only
|
||||
? cvars::execute_unclipped_draw_vs_on_cpu_for_psi_render_backend
|
||||
: true,
|
||||
vertex_shader));
|
||||
|
||||
// Sorted by EDRAM base and then by index in the pipeline - for simplicity,
|
||||
// treat render targets placed closer to the end of the EDRAM as truncating
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2021 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. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
@ -21,8 +21,11 @@
|
|||
#include "third_party/fmt/include/fmt/format.h"
|
||||
#include "xenia/base/assert.h"
|
||||
#include "xenia/base/cvar.h"
|
||||
#include "xenia/gpu/draw_extent_estimator.h"
|
||||
#include "xenia/gpu/draw_util.h"
|
||||
#include "xenia/gpu/register_file.h"
|
||||
#include "xenia/gpu/registers.h"
|
||||
#include "xenia/gpu/shader.h"
|
||||
#include "xenia/gpu/xenos.h"
|
||||
|
||||
DECLARE_bool(depth_transfer_not_equal_test);
|
||||
|
@ -215,7 +218,9 @@ class RenderTargetCache {
|
|||
virtual void BeginFrame();
|
||||
|
||||
virtual bool Update(bool is_rasterization_done,
|
||||
uint32_t normalized_color_mask);
|
||||
reg::RB_DEPTHCONTROL normalized_depth_control,
|
||||
uint32_t normalized_color_mask,
|
||||
const Shader& vertex_shader);
|
||||
|
||||
// Returns bits where 0 is whether a depth render target is currently bound on
|
||||
// the host and 1... are whether the same applies to color render targets, and
|
||||
|
@ -226,8 +231,10 @@ class RenderTargetCache {
|
|||
uint32_t* depth_and_color_formats_out = nullptr) const;
|
||||
|
||||
protected:
|
||||
RenderTargetCache(const RegisterFile& register_file)
|
||||
: register_file_(register_file) {}
|
||||
RenderTargetCache(const RegisterFile& register_file, const Memory& memory,
|
||||
TraceWriter* trace_writer)
|
||||
: register_file_(register_file),
|
||||
draw_extent_estimator_(register_file, memory, trace_writer) {}
|
||||
|
||||
const RegisterFile& register_file() const { return register_file_; }
|
||||
|
||||
|
@ -606,6 +613,8 @@ class RenderTargetCache {
|
|||
private:
|
||||
const RegisterFile& register_file_;
|
||||
|
||||
DrawExtentEstimator draw_extent_estimator_;
|
||||
|
||||
// For host render targets.
|
||||
|
||||
struct OwnershipRange {
|
||||
|
|
|
@ -25,11 +25,17 @@ namespace gpu {
|
|||
using namespace ucode;
|
||||
|
||||
Shader::Shader(xenos::ShaderType shader_type, uint64_t ucode_data_hash,
|
||||
const uint32_t* ucode_dwords, size_t ucode_dword_count)
|
||||
const uint32_t* ucode_dwords, size_t ucode_dword_count,
|
||||
std::endian ucode_source_endian)
|
||||
: shader_type_(shader_type), ucode_data_hash_(ucode_data_hash) {
|
||||
// We keep ucode data in host native format so it's easier to work with.
|
||||
ucode_data_.resize(ucode_dword_count);
|
||||
xe::copy_and_swap(ucode_data_.data(), ucode_dwords, ucode_dword_count);
|
||||
if (std::endian::native != ucode_source_endian) {
|
||||
xe::copy_and_swap(ucode_data_.data(), ucode_dwords, ucode_dword_count);
|
||||
} else {
|
||||
std::memcpy(ucode_data_.data(), ucode_dwords,
|
||||
sizeof(uint32_t) * ucode_dword_count);
|
||||
}
|
||||
}
|
||||
|
||||
Shader::~Shader() {
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
#include "xenia/base/byte_order.h"
|
||||
#include "xenia/base/math.h"
|
||||
#include "xenia/base/string_buffer.h"
|
||||
#include "xenia/gpu/ucode.h"
|
||||
|
@ -44,7 +45,7 @@ namespace gpu {
|
|||
enum class InstructionStorageTarget {
|
||||
// Result is not stored.
|
||||
kNone,
|
||||
// Result is stored to a temporary register indexed by storage_index [0-31].
|
||||
// Result is stored to a temporary register indexed by storage_index [0-63].
|
||||
kRegister,
|
||||
// Result is stored into a vertex shader interpolator export [0-15].
|
||||
kInterpolator,
|
||||
|
@ -85,11 +86,13 @@ constexpr uint32_t GetInstructionStorageTargetUsedComponentCount(
|
|||
|
||||
enum class InstructionStorageAddressingMode {
|
||||
// The storage index is not dynamically addressed.
|
||||
kStatic,
|
||||
kAbsolute,
|
||||
// The storage index is addressed by a0.
|
||||
kAddressAbsolute,
|
||||
// Float constants only.
|
||||
kAddressRegisterRelative,
|
||||
// The storage index is addressed by aL.
|
||||
kAddressRelative,
|
||||
// Float constants and temporary registers only.
|
||||
kLoopRelative,
|
||||
};
|
||||
|
||||
// Describes the source value of a particular component.
|
||||
|
@ -111,6 +114,12 @@ enum class SwizzleSource {
|
|||
constexpr SwizzleSource GetSwizzleFromComponentIndex(uint32_t i) {
|
||||
return static_cast<SwizzleSource>(i);
|
||||
}
|
||||
constexpr SwizzleSource GetSwizzledAluSourceComponent(
|
||||
uint32_t swizzle, uint32_t component_index) {
|
||||
return GetSwizzleFromComponentIndex(
|
||||
ucode::AluInstruction::GetSwizzledComponentIndex(swizzle,
|
||||
component_index));
|
||||
}
|
||||
inline char GetCharForComponentIndex(uint32_t i) {
|
||||
const static char kChars[] = {'x', 'y', 'z', 'w'};
|
||||
return kChars[i];
|
||||
|
@ -127,7 +136,7 @@ struct InstructionResult {
|
|||
uint32_t storage_index = 0;
|
||||
// How the storage index is dynamically addressed, if it is.
|
||||
InstructionStorageAddressingMode storage_addressing_mode =
|
||||
InstructionStorageAddressingMode::kStatic;
|
||||
InstructionStorageAddressingMode::kAbsolute;
|
||||
// True to clamp the result value to [0-1].
|
||||
bool is_clamped = false;
|
||||
// Defines whether each output component is written, though this is from the
|
||||
|
@ -191,9 +200,9 @@ struct InstructionResult {
|
|||
};
|
||||
|
||||
enum class InstructionStorageSource {
|
||||
// Source is stored in a temporary register indexed by storage_index [0-31].
|
||||
// Source is stored in a temporary register indexed by storage_index [0-63].
|
||||
kRegister,
|
||||
// Source is stored in a float constant indexed by storage_index [0-511].
|
||||
// Source is stored in a float constant indexed by storage_index [0-255].
|
||||
kConstantFloat,
|
||||
// Source is stored in a vertex fetch constant indexed by storage_index
|
||||
// [0-95].
|
||||
|
@ -210,7 +219,7 @@ struct InstructionOperand {
|
|||
uint32_t storage_index = 0;
|
||||
// How the storage index is dynamically addressed, if it is.
|
||||
InstructionStorageAddressingMode storage_addressing_mode =
|
||||
InstructionStorageAddressingMode::kStatic;
|
||||
InstructionStorageAddressingMode::kAbsolute;
|
||||
// True to negate the operand value.
|
||||
bool is_negated = false;
|
||||
// True to take the absolute value of the source (before any negation).
|
||||
|
@ -293,8 +302,9 @@ struct ParsedExecInstruction {
|
|||
|
||||
// Whether this exec ends the shader.
|
||||
bool is_end = false;
|
||||
// Whether to reset the current predicate.
|
||||
bool clean = true;
|
||||
// Whether the hardware doesn't have to wait for the predicate to be updated
|
||||
// after this exec.
|
||||
bool is_predicate_clean = true;
|
||||
// ?
|
||||
bool is_yield = false;
|
||||
|
||||
|
@ -552,12 +562,12 @@ struct ParsedAluInstruction {
|
|||
// instruction even if only constants are being exported. The XNA disassembler
|
||||
// falls back to displaying the whole vector operation, even if only constant
|
||||
// components are written, if the scalar operation is a nop or if the vector
|
||||
// operation has side effects (but if the scalar operation isn't nop, it
|
||||
// outputs the entire constant mask in the scalar operation destination).
|
||||
// Normally the XNA disassembler outputs the constant mask in both vector and
|
||||
// scalar operations, but that's not required by assembler, so it doesn't
|
||||
// really matter whether it's specified in the vector operation, in the scalar
|
||||
// operation, or in both.
|
||||
// operation changes a0, p0 or kills pixels (but if the scalar operation isn't
|
||||
// nop, it outputs the entire constant mask in the scalar operation
|
||||
// destination). Normally the XNA disassembler outputs the constant mask in
|
||||
// both vector and scalar operations, but that's not required by assembler, so
|
||||
// it doesn't really matter whether it's specified in the vector operation, in
|
||||
// the scalar operation, or in both.
|
||||
InstructionResult vector_and_constant_result;
|
||||
// Describes how the scalar operation result is stored.
|
||||
InstructionResult scalar_result;
|
||||
|
@ -582,8 +592,8 @@ struct ParsedAluInstruction {
|
|||
// will result in the same microcode (since instructions with just an empty
|
||||
// write mask may have different values in other fields).
|
||||
// This is for disassembly! Translators should use the write masks and
|
||||
// AluVectorOpHasSideEffects to skip operations, as this only covers one very
|
||||
// specific nop format!
|
||||
// the changed state bits in the opcode info to skip operations, as this only
|
||||
// covers one very specific nop format!
|
||||
bool IsVectorOpDefaultNop() const;
|
||||
// Whether the scalar part of the instruction is the same as if it was omitted
|
||||
// in the assembly (if compiled or assembled with the Xbox 360 shader
|
||||
|
@ -805,8 +815,11 @@ class Shader {
|
|||
std::string host_disassembly_;
|
||||
};
|
||||
|
||||
// ucode_source_endian specifies the endianness of the ucode_dwords argument -
|
||||
// inside the Shader, the ucode will be stored with the native byte order.
|
||||
Shader(xenos::ShaderType shader_type, uint64_t ucode_data_hash,
|
||||
const uint32_t* ucode_dwords, size_t ucode_dword_count);
|
||||
const uint32_t* ucode_dwords, size_t ucode_dword_count,
|
||||
std::endian ucode_source_endian = std::endian::big);
|
||||
virtual ~Shader();
|
||||
|
||||
// Whether the shader is identified as a vertex or pixel shader.
|
||||
|
@ -904,6 +917,12 @@ class Shader {
|
|||
// True if the current shader has any `kill` instructions.
|
||||
bool kills_pixels() const { return kills_pixels_; }
|
||||
|
||||
// True if the shader has any texture-related instructions (any fetch
|
||||
// instructions other than vertex fetch) writing any non-constant components.
|
||||
bool uses_texture_fetch_instruction_results() const {
|
||||
return uses_texture_fetch_instruction_results_;
|
||||
}
|
||||
|
||||
// True if the shader overrides the pixel depth.
|
||||
bool writes_depth() const { return writes_depth_; }
|
||||
|
||||
|
@ -992,6 +1011,7 @@ class Shader {
|
|||
uint32_t register_static_address_bound_ = 0;
|
||||
bool uses_register_dynamic_addressing_ = false;
|
||||
bool kills_pixels_ = false;
|
||||
bool uses_texture_fetch_instruction_results_ = false;
|
||||
bool writes_depth_ = false;
|
||||
uint32_t writes_color_targets_ = 0b0000;
|
||||
|
||||
|
|
|
@ -36,6 +36,11 @@ DEFINE_path(shader_input, "", "Input shader binary file path.", "GPU");
|
|||
DEFINE_string(shader_input_type, "",
|
||||
"'vs', 'ps', or unspecified to infer from the given filename.",
|
||||
"GPU");
|
||||
DEFINE_bool(
|
||||
shader_input_little_endian, false,
|
||||
"Whether the input shader binary is little-endian (from an Arm device with "
|
||||
"the Qualcomm Adreno 200, for instance).",
|
||||
"GPU");
|
||||
DEFINE_path(shader_output, "", "Output shader file path.", "GPU");
|
||||
DEFINE_string(shader_output_type, "ucode",
|
||||
"Translator to use: [ucode, spirv, spirvtext, dxbc, dxbctext].",
|
||||
|
@ -107,7 +112,9 @@ int shader_compiler_main(const std::vector<std::string>& args) {
|
|||
// TODO(benvanik): hash? need to return the data to big-endian format first.
|
||||
uint64_t ucode_data_hash = 0;
|
||||
auto shader = std::make_unique<Shader>(
|
||||
shader_type, ucode_data_hash, ucode_dwords.data(), ucode_dwords.size());
|
||||
shader_type, ucode_data_hash, ucode_dwords.data(), ucode_dwords.size(),
|
||||
cvars::shader_input_little_endian ? std::endian::little
|
||||
: std::endian::big);
|
||||
|
||||
StringBuffer ucode_disasm_buffer;
|
||||
shader->AnalyzeUcode(ucode_disasm_buffer);
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,149 @@
|
|||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2022 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef XENIA_GPU_SHADER_INTERPRETER_H_
|
||||
#define XENIA_GPU_SHADER_INTERPRETER_H_
|
||||
|
||||
#include <algorithm>
|
||||
#include <cstddef>
|
||||
#include <cstdint>
|
||||
|
||||
#include "xenia/base/assert.h"
|
||||
#include "xenia/gpu/register_file.h"
|
||||
#include "xenia/gpu/shader.h"
|
||||
#include "xenia/gpu/trace_writer.h"
|
||||
#include "xenia/gpu/ucode.h"
|
||||
#include "xenia/gpu/xenos.h"
|
||||
#include "xenia/memory.h"
|
||||
|
||||
namespace xe {
|
||||
namespace gpu {
|
||||
|
||||
class ShaderInterpreter {
|
||||
public:
|
||||
ShaderInterpreter(const RegisterFile& register_file, const Memory& memory)
|
||||
: register_file_(register_file), memory_(memory) {}
|
||||
|
||||
class ExportSink {
|
||||
public:
|
||||
virtual ~ExportSink() = default;
|
||||
virtual void AllocExport(ucode::AllocType type, uint32_t size) {}
|
||||
virtual void Export(ucode::ExportRegister export_register,
|
||||
const float* value, uint32_t value_mask) {}
|
||||
};
|
||||
|
||||
void SetTraceWriter(TraceWriter* new_trace_writer) {
|
||||
trace_writer_ = new_trace_writer;
|
||||
}
|
||||
|
||||
ExportSink* GetExportSink() const { return export_sink_; }
|
||||
void SetExportSink(ExportSink* new_export_sink) {
|
||||
export_sink_ = new_export_sink;
|
||||
}
|
||||
|
||||
const float* temp_registers() const { return &temp_registers_[0][0]; }
|
||||
float* temp_registers() { return &temp_registers_[0][0]; }
|
||||
|
||||
static bool CanInterpretShader(const Shader& shader) {
|
||||
assert_true(shader.is_ucode_analyzed());
|
||||
// Texture instructions are not very common in vertex shaders (and not used
|
||||
// in Direct3D 9's internal rectangles such as clears) and are extremely
|
||||
// complex, not implemented.
|
||||
if (shader.uses_texture_fetch_instruction_results()) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
void SetShader(xenos::ShaderType shader_type, const uint32_t* ucode) {
|
||||
shader_type_ = shader_type;
|
||||
ucode_ = ucode;
|
||||
}
|
||||
void SetShader(const Shader& shader) {
|
||||
assert_true(CanInterpretShader(shader));
|
||||
SetShader(shader.type(), shader.ucode_dwords());
|
||||
}
|
||||
|
||||
void Execute();
|
||||
|
||||
private:
|
||||
struct State {
|
||||
ucode::VertexFetchInstruction vfetch_full_last;
|
||||
uint32_t vfetch_address_dwords;
|
||||
float previous_scalar;
|
||||
uint32_t call_stack_depth;
|
||||
uint32_t call_return_addresses[4];
|
||||
uint32_t loop_stack_depth;
|
||||
xenos::LoopConstant loop_constants[4];
|
||||
uint32_t loop_iterators[4];
|
||||
int32_t address_register;
|
||||
bool predicate;
|
||||
|
||||
void Reset() { std::memset(this, 0, sizeof(*this)); }
|
||||
|
||||
int32_t GetLoopAddress() const {
|
||||
assert_true(loop_stack_depth && loop_stack_depth < 4);
|
||||
if (!loop_stack_depth || loop_stack_depth >= 4) {
|
||||
return 0;
|
||||
}
|
||||
xenos::LoopConstant loop_constant = loop_constants[loop_stack_depth];
|
||||
// Clamp to the real range specified in the IPR2015-00325 sequencer
|
||||
// specification.
|
||||
// https://portal.unifiedpatents.com/ptab/case/IPR2015-00325
|
||||
return std::min(
|
||||
INT32_C(256),
|
||||
std::max(INT32_C(-256),
|
||||
int32_t(int32_t(loop_iterators[loop_stack_depth]) *
|
||||
loop_constant.step +
|
||||
loop_constant.start)));
|
||||
}
|
||||
};
|
||||
|
||||
static float FlushDenormal(float value) {
|
||||
uint32_t bits = *reinterpret_cast<const uint32_t*>(&value);
|
||||
bits &= (bits & UINT32_C(0x7F800000)) ? ~UINT32_C(0) : (UINT32_C(1) << 31);
|
||||
return *reinterpret_cast<const float*>(&bits);
|
||||
}
|
||||
|
||||
const float* GetTempRegister(uint32_t address, bool is_relative) const {
|
||||
return temp_registers_[(
|
||||
int32_t(address) + (is_relative ? state_.GetLoopAddress() : 0) & 63)];
|
||||
}
|
||||
// For simplicity (due to writability), not bounds-checking.
|
||||
float* GetTempRegister(uint32_t address, bool is_relative) {
|
||||
return temp_registers_[(
|
||||
int32_t(address) + (is_relative ? state_.GetLoopAddress() : 0) & 63)];
|
||||
}
|
||||
const float* GetFloatConstant(uint32_t address, bool is_relative,
|
||||
bool relative_address_is_a0) const;
|
||||
|
||||
void ExecuteAluInstruction(ucode::AluInstruction instr);
|
||||
void StoreFetchResult(uint32_t dest, bool is_dest_relative, uint32_t swizzle,
|
||||
const float* value);
|
||||
void ExecuteVertexFetchInstruction(ucode::VertexFetchInstruction instr);
|
||||
|
||||
const RegisterFile& register_file_;
|
||||
const Memory& memory_;
|
||||
|
||||
TraceWriter* trace_writer_ = nullptr;
|
||||
|
||||
ExportSink* export_sink_ = nullptr;
|
||||
|
||||
xenos::ShaderType shader_type_ = xenos::ShaderType::kVertex;
|
||||
const uint32_t* ucode_ = nullptr;
|
||||
|
||||
// For both inputs and locals.
|
||||
float temp_registers_[64][4];
|
||||
|
||||
State state_;
|
||||
};
|
||||
|
||||
} // namespace gpu
|
||||
} // namespace xe
|
||||
|
||||
#endif // XENIA_GPU_SHADER_INTERPRETER_H_
|
|
@ -247,22 +247,18 @@ void Shader::GatherExecInformation(
|
|||
if (sequence & 0b10) {
|
||||
ucode_disasm_buffer.Append(" serialize\n ");
|
||||
}
|
||||
const uint32_t* op_ptr = ucode_data_.data() + instr_offset * 3;
|
||||
if (sequence & 0b01) {
|
||||
auto fetch_opcode = FetchOpcode(ucode_data_[instr_offset * 3] & 0x1F);
|
||||
if (fetch_opcode == FetchOpcode::kVertexFetch) {
|
||||
auto& op = *reinterpret_cast<const VertexFetchInstruction*>(
|
||||
ucode_data_.data() + instr_offset * 3);
|
||||
GatherVertexFetchInformation(op, previous_vfetch_full,
|
||||
auto& op = *reinterpret_cast<const FetchInstruction*>(op_ptr);
|
||||
if (op.opcode() == FetchOpcode::kVertexFetch) {
|
||||
GatherVertexFetchInformation(op.vertex_fetch(), previous_vfetch_full,
|
||||
ucode_disasm_buffer);
|
||||
} else {
|
||||
auto& op = *reinterpret_cast<const TextureFetchInstruction*>(
|
||||
ucode_data_.data() + instr_offset * 3);
|
||||
GatherTextureFetchInformation(op, unique_texture_bindings,
|
||||
ucode_disasm_buffer);
|
||||
GatherTextureFetchInformation(
|
||||
op.texture_fetch(), unique_texture_bindings, ucode_disasm_buffer);
|
||||
}
|
||||
} else {
|
||||
auto& op = *reinterpret_cast<const AluInstruction*>(ucode_data_.data() +
|
||||
instr_offset * 3);
|
||||
auto& op = *reinterpret_cast<const AluInstruction*>(op_ptr);
|
||||
GatherAluInstructionInformation(op, memexport_alloc_current_count,
|
||||
memexport_eA_written,
|
||||
ucode_disasm_buffer);
|
||||
|
@ -338,6 +334,10 @@ void Shader::GatherTextureFetchInformation(const TextureFetchInstruction& op,
|
|||
GatherOperandInformation(binding.fetch_instr.operands[i]);
|
||||
}
|
||||
|
||||
if (binding.fetch_instr.result.GetUsedResultComponents()) {
|
||||
uses_texture_fetch_instruction_results_ = true;
|
||||
}
|
||||
|
||||
switch (op.opcode()) {
|
||||
case FetchOpcode::kSetTextureLod:
|
||||
case FetchOpcode::kSetTextureGradientsHorz:
|
||||
|
@ -374,9 +374,12 @@ void Shader::GatherAluInstructionInformation(
|
|||
ParseAluInstruction(op, type(), instr);
|
||||
instr.Disassemble(&ucode_disasm_buffer);
|
||||
|
||||
kills_pixels_ = kills_pixels_ ||
|
||||
ucode::AluVectorOpcodeIsKill(op.vector_opcode()) ||
|
||||
ucode::AluScalarOpcodeIsKill(op.scalar_opcode());
|
||||
kills_pixels_ =
|
||||
kills_pixels_ ||
|
||||
(ucode::GetAluVectorOpcodeInfo(op.vector_opcode()).changed_state &
|
||||
ucode::kAluOpChangedStatePixelKill) ||
|
||||
(ucode::GetAluScalarOpcodeInfo(op.scalar_opcode()).changed_state &
|
||||
ucode::kAluOpChangedStatePixelKill);
|
||||
|
||||
GatherAluResultInformation(instr.vector_and_constant_result,
|
||||
memexport_alloc_current_count);
|
||||
|
@ -420,7 +423,7 @@ void Shader::GatherOperandInformation(const InstructionOperand& operand) {
|
|||
switch (operand.storage_source) {
|
||||
case InstructionStorageSource::kRegister:
|
||||
if (operand.storage_addressing_mode ==
|
||||
InstructionStorageAddressingMode::kStatic) {
|
||||
InstructionStorageAddressingMode::kAbsolute) {
|
||||
register_static_address_bound_ =
|
||||
std::max(register_static_address_bound_,
|
||||
operand.storage_index + uint32_t(1));
|
||||
|
@ -430,7 +433,7 @@ void Shader::GatherOperandInformation(const InstructionOperand& operand) {
|
|||
break;
|
||||
case InstructionStorageSource::kConstantFloat:
|
||||
if (operand.storage_addressing_mode ==
|
||||
InstructionStorageAddressingMode::kStatic) {
|
||||
InstructionStorageAddressingMode::kAbsolute) {
|
||||
// Store used float constants before translating so the
|
||||
// translator can use tightly packed indices if not dynamically
|
||||
// indexed.
|
||||
|
@ -457,7 +460,7 @@ void Shader::GatherFetchResultInformation(const InstructionResult& result) {
|
|||
// operand.
|
||||
assert_true(result.storage_target == InstructionStorageTarget::kRegister);
|
||||
if (result.storage_addressing_mode ==
|
||||
InstructionStorageAddressingMode::kStatic) {
|
||||
InstructionStorageAddressingMode::kAbsolute) {
|
||||
register_static_address_bound_ = std::max(
|
||||
register_static_address_bound_, result.storage_index + uint32_t(1));
|
||||
} else {
|
||||
|
@ -473,7 +476,7 @@ void Shader::GatherAluResultInformation(
|
|||
switch (result.storage_target) {
|
||||
case InstructionStorageTarget::kRegister:
|
||||
if (result.storage_addressing_mode ==
|
||||
InstructionStorageAddressingMode::kStatic) {
|
||||
InstructionStorageAddressingMode::kAbsolute) {
|
||||
register_static_address_bound_ = std::max(
|
||||
register_static_address_bound_, result.storage_index + uint32_t(1));
|
||||
} else {
|
||||
|
@ -663,7 +666,7 @@ void ParseControlFlowExec(const ControlFlowExecInstruction& cf,
|
|||
instr.instruction_count = cf.count();
|
||||
instr.type = ParsedExecInstruction::Type::kUnconditional;
|
||||
instr.is_end = cf.opcode() == ControlFlowOpcode::kExecEnd;
|
||||
instr.clean = cf.clean();
|
||||
instr.is_predicate_clean = cf.is_predicate_clean();
|
||||
instr.is_yield = cf.is_yield();
|
||||
instr.sequence = cf.sequence();
|
||||
}
|
||||
|
@ -690,7 +693,7 @@ void ParseControlFlowCondExec(const ControlFlowCondExecInstruction& cf,
|
|||
switch (cf.opcode()) {
|
||||
case ControlFlowOpcode::kCondExec:
|
||||
case ControlFlowOpcode::kCondExecEnd:
|
||||
instr.clean = false;
|
||||
instr.is_predicate_clean = false;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
@ -711,7 +714,7 @@ void ParseControlFlowCondExecPred(const ControlFlowCondExecPredInstruction& cf,
|
|||
instr.type = ParsedExecInstruction::Type::kPredicated;
|
||||
instr.condition = cf.condition();
|
||||
instr.is_end = cf.opcode() == ControlFlowOpcode::kCondExecPredEnd;
|
||||
instr.clean = cf.clean();
|
||||
instr.is_predicate_clean = cf.is_predicate_clean();
|
||||
instr.is_yield = cf.is_yield();
|
||||
instr.sequence = cf.sequence();
|
||||
}
|
||||
|
@ -789,28 +792,24 @@ void ShaderTranslator::TranslateExecInstructions(
|
|||
for (uint32_t instr_offset = instr.instruction_address;
|
||||
instr_offset < instr.instruction_address + instr.instruction_count;
|
||||
++instr_offset, sequence >>= 2) {
|
||||
const uint32_t* op_ptr = ucode_dwords + instr_offset * 3;
|
||||
if (sequence & 0b01) {
|
||||
auto fetch_opcode =
|
||||
static_cast<FetchOpcode>(ucode_dwords[instr_offset * 3] & 0x1F);
|
||||
if (fetch_opcode == FetchOpcode::kVertexFetch) {
|
||||
auto& op = *reinterpret_cast<const VertexFetchInstruction*>(
|
||||
ucode_dwords + instr_offset * 3);
|
||||
auto& op = *reinterpret_cast<const FetchInstruction*>(op_ptr);
|
||||
if (op.opcode() == FetchOpcode::kVertexFetch) {
|
||||
const VertexFetchInstruction& vfetch_op = op.vertex_fetch();
|
||||
ParsedVertexFetchInstruction vfetch_instr;
|
||||
if (ParseVertexFetchInstruction(op, previous_vfetch_full_,
|
||||
if (ParseVertexFetchInstruction(vfetch_op, previous_vfetch_full_,
|
||||
vfetch_instr)) {
|
||||
previous_vfetch_full_ = op;
|
||||
previous_vfetch_full_ = vfetch_op;
|
||||
}
|
||||
ProcessVertexFetchInstruction(vfetch_instr);
|
||||
} else {
|
||||
auto& op = *reinterpret_cast<const TextureFetchInstruction*>(
|
||||
ucode_dwords + instr_offset * 3);
|
||||
ParsedTextureFetchInstruction tfetch_instr;
|
||||
ParseTextureFetchInstruction(op, tfetch_instr);
|
||||
ParseTextureFetchInstruction(op.texture_fetch(), tfetch_instr);
|
||||
ProcessTextureFetchInstruction(tfetch_instr);
|
||||
}
|
||||
} else {
|
||||
auto& op = *reinterpret_cast<const AluInstruction*>(ucode_dwords +
|
||||
instr_offset * 3);
|
||||
auto& op = *reinterpret_cast<const AluInstruction*>(op_ptr);
|
||||
ParsedAluInstruction alu_instr;
|
||||
ParseAluInstruction(op, current_shader().type(), alu_instr);
|
||||
ProcessAluInstruction(alu_instr);
|
||||
|
@ -826,25 +825,40 @@ static void ParseFetchInstructionResult(uint32_t dest, uint32_t swizzle,
|
|||
result.storage_index = dest;
|
||||
result.is_clamped = false;
|
||||
result.storage_addressing_mode =
|
||||
is_relative ? InstructionStorageAddressingMode::kAddressRelative
|
||||
: InstructionStorageAddressingMode::kStatic;
|
||||
is_relative ? InstructionStorageAddressingMode::kLoopRelative
|
||||
: InstructionStorageAddressingMode::kAbsolute;
|
||||
result.original_write_mask = 0b1111;
|
||||
for (int i = 0; i < 4; ++i) {
|
||||
switch (swizzle & 0x7) {
|
||||
case 4:
|
||||
case 6:
|
||||
result.components[i] = SwizzleSource::k0;
|
||||
SwizzleSource component_source = SwizzleSource::k0;
|
||||
ucode::FetchDestinationSwizzle component_swizzle =
|
||||
ucode::GetFetchDestinationComponentSwizzle(swizzle, i);
|
||||
switch (component_swizzle) {
|
||||
case ucode::FetchDestinationSwizzle::kX:
|
||||
component_source = SwizzleSource::kX;
|
||||
break;
|
||||
case 5:
|
||||
result.components[i] = SwizzleSource::k1;
|
||||
case ucode::FetchDestinationSwizzle::kY:
|
||||
component_source = SwizzleSource::kY;
|
||||
break;
|
||||
case 7:
|
||||
result.original_write_mask &= ~uint32_t(1 << i);
|
||||
case ucode::FetchDestinationSwizzle::kZ:
|
||||
component_source = SwizzleSource::kZ;
|
||||
break;
|
||||
case ucode::FetchDestinationSwizzle::kW:
|
||||
component_source = SwizzleSource::kW;
|
||||
break;
|
||||
case ucode::FetchDestinationSwizzle::k1:
|
||||
component_source = SwizzleSource::k1;
|
||||
break;
|
||||
case ucode::FetchDestinationSwizzle::kKeep:
|
||||
result.original_write_mask &= ~(UINT32_C(1) << i);
|
||||
break;
|
||||
default:
|
||||
result.components[i] = GetSwizzleFromComponentIndex(swizzle & 0x3);
|
||||
// ucode::FetchDestinationSwizzle::k0 or the invalid swizzle 6.
|
||||
// TODO(Triang3l): Find the correct handling of the invalid swizzle 6.
|
||||
assert_true(component_swizzle == ucode::FetchDestinationSwizzle::k0);
|
||||
component_source = SwizzleSource::k0;
|
||||
break;
|
||||
}
|
||||
swizzle >>= 3;
|
||||
result.components[i] = component_source;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -867,8 +881,8 @@ bool ParseVertexFetchInstruction(const VertexFetchInstruction& op,
|
|||
src_op.storage_index = full_op.src();
|
||||
src_op.storage_addressing_mode =
|
||||
full_op.is_src_relative()
|
||||
? InstructionStorageAddressingMode::kAddressRelative
|
||||
: InstructionStorageAddressingMode::kStatic;
|
||||
? InstructionStorageAddressingMode::kLoopRelative
|
||||
: InstructionStorageAddressingMode::kAbsolute;
|
||||
src_op.is_negated = false;
|
||||
src_op.is_absolute_value = false;
|
||||
src_op.component_count = 1;
|
||||
|
@ -962,8 +976,8 @@ void ParseTextureFetchInstruction(const TextureFetchInstruction& op,
|
|||
src_op.storage_source = InstructionStorageSource::kRegister;
|
||||
src_op.storage_index = op.src();
|
||||
src_op.storage_addressing_mode =
|
||||
op.is_src_relative() ? InstructionStorageAddressingMode::kAddressRelative
|
||||
: InstructionStorageAddressingMode::kStatic;
|
||||
op.is_src_relative() ? InstructionStorageAddressingMode::kLoopRelative
|
||||
: InstructionStorageAddressingMode::kAbsolute;
|
||||
src_op.is_negated = false;
|
||||
src_op.is_absolute_value = false;
|
||||
src_op.component_count =
|
||||
|
@ -1048,187 +1062,54 @@ uint32_t ParsedTextureFetchInstruction::GetNonZeroResultComponents() const {
|
|||
return result.GetUsedResultComponents() & components;
|
||||
}
|
||||
|
||||
struct AluOpcodeInfo {
|
||||
const char* name;
|
||||
uint32_t argument_count;
|
||||
uint32_t src_swizzle_component_count;
|
||||
};
|
||||
|
||||
static const AluOpcodeInfo alu_vector_opcode_infos[0x20] = {
|
||||
{"add", 2, 4}, // 0
|
||||
{"mul", 2, 4}, // 1
|
||||
{"max", 2, 4}, // 2
|
||||
{"min", 2, 4}, // 3
|
||||
{"seq", 2, 4}, // 4
|
||||
{"sgt", 2, 4}, // 5
|
||||
{"sge", 2, 4}, // 6
|
||||
{"sne", 2, 4}, // 7
|
||||
{"frc", 1, 4}, // 8
|
||||
{"trunc", 1, 4}, // 9
|
||||
{"floor", 1, 4}, // 10
|
||||
{"mad", 3, 4}, // 11
|
||||
{"cndeq", 3, 4}, // 12
|
||||
{"cndge", 3, 4}, // 13
|
||||
{"cndgt", 3, 4}, // 14
|
||||
{"dp4", 2, 4}, // 15
|
||||
{"dp3", 2, 4}, // 16
|
||||
{"dp2add", 3, 4}, // 17
|
||||
{"cube", 2, 4}, // 18
|
||||
{"max4", 1, 4}, // 19
|
||||
{"setp_eq_push", 2, 4}, // 20
|
||||
{"setp_ne_push", 2, 4}, // 21
|
||||
{"setp_gt_push", 2, 4}, // 22
|
||||
{"setp_ge_push", 2, 4}, // 23
|
||||
{"kill_eq", 2, 4}, // 24
|
||||
{"kill_gt", 2, 4}, // 25
|
||||
{"kill_ge", 2, 4}, // 26
|
||||
{"kill_ne", 2, 4}, // 27
|
||||
{"dst", 2, 4}, // 28
|
||||
{"maxa", 2, 4}, // 29
|
||||
};
|
||||
|
||||
static const AluOpcodeInfo alu_scalar_opcode_infos[0x40] = {
|
||||
{"adds", 1, 2}, // 0
|
||||
{"adds_prev", 1, 1}, // 1
|
||||
{"muls", 1, 2}, // 2
|
||||
{"muls_prev", 1, 1}, // 3
|
||||
{"muls_prev2", 1, 2}, // 4
|
||||
{"maxs", 1, 2}, // 5
|
||||
{"mins", 1, 2}, // 6
|
||||
{"seqs", 1, 1}, // 7
|
||||
{"sgts", 1, 1}, // 8
|
||||
{"sges", 1, 1}, // 9
|
||||
{"snes", 1, 1}, // 10
|
||||
{"frcs", 1, 1}, // 11
|
||||
{"truncs", 1, 1}, // 12
|
||||
{"floors", 1, 1}, // 13
|
||||
{"exp", 1, 1}, // 14
|
||||
{"logc", 1, 1}, // 15
|
||||
{"log", 1, 1}, // 16
|
||||
{"rcpc", 1, 1}, // 17
|
||||
{"rcpf", 1, 1}, // 18
|
||||
{"rcp", 1, 1}, // 19
|
||||
{"rsqc", 1, 1}, // 20
|
||||
{"rsqf", 1, 1}, // 21
|
||||
{"rsq", 1, 1}, // 22
|
||||
{"maxas", 1, 2}, // 23
|
||||
{"maxasf", 1, 2}, // 24
|
||||
{"subs", 1, 2}, // 25
|
||||
{"subs_prev", 1, 1}, // 26
|
||||
{"setp_eq", 1, 1}, // 27
|
||||
{"setp_ne", 1, 1}, // 28
|
||||
{"setp_gt", 1, 1}, // 29
|
||||
{"setp_ge", 1, 1}, // 30
|
||||
{"setp_inv", 1, 1}, // 31
|
||||
{"setp_pop", 1, 1}, // 32
|
||||
{"setp_clr", 0, 0}, // 33
|
||||
{"setp_rstr", 1, 1}, // 34
|
||||
{"kills_eq", 1, 1}, // 35
|
||||
{"kills_gt", 1, 1}, // 36
|
||||
{"kills_ge", 1, 1}, // 37
|
||||
{"kills_ne", 1, 1}, // 38
|
||||
{"kills_one", 1, 1}, // 39
|
||||
{"sqrt", 1, 1}, // 40
|
||||
{"UNKNOWN", 0, 0}, // 41
|
||||
{"mulsc", 2, 1}, // 42
|
||||
{"mulsc", 2, 1}, // 43
|
||||
{"addsc", 2, 1}, // 44
|
||||
{"addsc", 2, 1}, // 45
|
||||
{"subsc", 2, 1}, // 46
|
||||
{"subsc", 2, 1}, // 47
|
||||
{"sin", 1, 1}, // 48
|
||||
{"cos", 1, 1}, // 49
|
||||
{"retain_prev", 0, 0}, // 50
|
||||
};
|
||||
|
||||
static void ParseAluInstructionOperand(const AluInstruction& op, uint32_t i,
|
||||
uint32_t swizzle_component_count,
|
||||
InstructionOperand& out_op) {
|
||||
int const_slot = 0;
|
||||
switch (i) {
|
||||
case 2:
|
||||
const_slot = op.src_is_temp(1) ? 0 : 1;
|
||||
break;
|
||||
case 3:
|
||||
const_slot = op.src_is_temp(1) && op.src_is_temp(2) ? 0 : 1;
|
||||
break;
|
||||
}
|
||||
out_op.is_negated = op.src_negate(i);
|
||||
uint32_t reg = op.src_reg(i);
|
||||
if (op.src_is_temp(i)) {
|
||||
out_op.storage_source = InstructionStorageSource::kRegister;
|
||||
out_op.storage_index = reg & 0x1F;
|
||||
out_op.is_absolute_value = (reg & 0x80) == 0x80;
|
||||
out_op.storage_index = AluInstruction::src_temp_reg(reg);
|
||||
out_op.is_absolute_value = AluInstruction::is_src_temp_value_absolute(reg);
|
||||
out_op.storage_addressing_mode =
|
||||
(reg & 0x40) ? InstructionStorageAddressingMode::kAddressRelative
|
||||
: InstructionStorageAddressingMode::kStatic;
|
||||
AluInstruction::is_src_temp_relative(reg)
|
||||
? InstructionStorageAddressingMode::kLoopRelative
|
||||
: InstructionStorageAddressingMode::kAbsolute;
|
||||
} else {
|
||||
out_op.storage_source = InstructionStorageSource::kConstantFloat;
|
||||
out_op.storage_index = reg;
|
||||
if ((const_slot == 0 && op.is_const_0_addressed()) ||
|
||||
(const_slot == 1 && op.is_const_1_addressed())) {
|
||||
if (op.is_address_relative()) {
|
||||
if (op.src_const_is_addressed(i)) {
|
||||
if (op.is_const_address_register_relative()) {
|
||||
out_op.storage_addressing_mode =
|
||||
InstructionStorageAddressingMode::kAddressAbsolute;
|
||||
InstructionStorageAddressingMode::kAddressRegisterRelative;
|
||||
} else {
|
||||
out_op.storage_addressing_mode =
|
||||
InstructionStorageAddressingMode::kAddressRelative;
|
||||
InstructionStorageAddressingMode::kLoopRelative;
|
||||
}
|
||||
} else {
|
||||
out_op.storage_addressing_mode =
|
||||
InstructionStorageAddressingMode::kStatic;
|
||||
InstructionStorageAddressingMode::kAbsolute;
|
||||
}
|
||||
out_op.is_absolute_value = op.abs_constants();
|
||||
}
|
||||
out_op.component_count = swizzle_component_count;
|
||||
uint32_t swizzle = op.src_swizzle(i);
|
||||
if (swizzle_component_count == 1) {
|
||||
uint32_t a = ((swizzle >> 6) + 3) & 0x3;
|
||||
out_op.components[0] = GetSwizzleFromComponentIndex(a);
|
||||
// Scalar `a` (W).
|
||||
out_op.components[0] = GetSwizzledAluSourceComponent(swizzle, 3);
|
||||
} else if (swizzle_component_count == 2) {
|
||||
uint32_t a = ((swizzle >> 6) + 3) & 0x3;
|
||||
uint32_t b = ((swizzle >> 0) + 0) & 0x3;
|
||||
out_op.components[0] = GetSwizzleFromComponentIndex(a);
|
||||
out_op.components[1] = GetSwizzleFromComponentIndex(b);
|
||||
// Scalar left-hand `a` (W) and right-hand `b` (X).
|
||||
out_op.components[0] = GetSwizzledAluSourceComponent(swizzle, 3);
|
||||
out_op.components[1] = GetSwizzledAluSourceComponent(swizzle, 0);
|
||||
} else if (swizzle_component_count == 3) {
|
||||
assert_always();
|
||||
} else if (swizzle_component_count == 4) {
|
||||
for (uint32_t j = 0; j < swizzle_component_count; ++j, swizzle >>= 2) {
|
||||
out_op.components[j] = GetSwizzleFromComponentIndex((swizzle + j) & 0x3);
|
||||
for (uint32_t j = 0; j < swizzle_component_count; ++j) {
|
||||
out_op.components[j] = GetSwizzledAluSourceComponent(swizzle, j);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void ParseAluInstructionOperandSpecial(
|
||||
const AluInstruction& op, InstructionStorageSource storage_source,
|
||||
uint32_t reg, bool negate, int const_slot, uint32_t component_index,
|
||||
InstructionOperand& out_op) {
|
||||
out_op.is_negated = negate;
|
||||
out_op.is_absolute_value = op.abs_constants();
|
||||
out_op.storage_source = storage_source;
|
||||
if (storage_source == InstructionStorageSource::kRegister) {
|
||||
out_op.storage_index = reg & 0x7F;
|
||||
out_op.storage_addressing_mode = InstructionStorageAddressingMode::kStatic;
|
||||
} else {
|
||||
out_op.storage_index = reg;
|
||||
if ((const_slot == 0 && op.is_const_0_addressed()) ||
|
||||
(const_slot == 1 && op.is_const_1_addressed())) {
|
||||
if (op.is_address_relative()) {
|
||||
out_op.storage_addressing_mode =
|
||||
InstructionStorageAddressingMode::kAddressAbsolute;
|
||||
} else {
|
||||
out_op.storage_addressing_mode =
|
||||
InstructionStorageAddressingMode::kAddressRelative;
|
||||
}
|
||||
} else {
|
||||
out_op.storage_addressing_mode =
|
||||
InstructionStorageAddressingMode::kStatic;
|
||||
}
|
||||
}
|
||||
out_op.component_count = 1;
|
||||
out_op.components[0] = GetSwizzleFromComponentIndex(component_index);
|
||||
}
|
||||
|
||||
bool ParsedAluInstruction::IsVectorOpDefaultNop() const {
|
||||
if (vector_opcode != ucode::AluVectorOpcode::kMax ||
|
||||
vector_and_constant_result.original_write_mask ||
|
||||
|
@ -1237,14 +1118,14 @@ bool ParsedAluInstruction::IsVectorOpDefaultNop() const {
|
|||
InstructionStorageSource::kRegister ||
|
||||
vector_operands[0].storage_index != 0 ||
|
||||
vector_operands[0].storage_addressing_mode !=
|
||||
InstructionStorageAddressingMode::kStatic ||
|
||||
InstructionStorageAddressingMode::kAbsolute ||
|
||||
vector_operands[0].is_negated || vector_operands[0].is_absolute_value ||
|
||||
!vector_operands[0].IsStandardSwizzle() ||
|
||||
vector_operands[1].storage_source !=
|
||||
InstructionStorageSource::kRegister ||
|
||||
vector_operands[1].storage_index != 0 ||
|
||||
vector_operands[1].storage_addressing_mode !=
|
||||
InstructionStorageAddressingMode::kStatic ||
|
||||
InstructionStorageAddressingMode::kAbsolute ||
|
||||
vector_operands[1].is_negated || vector_operands[1].is_absolute_value ||
|
||||
!vector_operands[1].IsStandardSwizzle()) {
|
||||
return false;
|
||||
|
@ -1253,7 +1134,7 @@ bool ParsedAluInstruction::IsVectorOpDefaultNop() const {
|
|||
InstructionStorageTarget::kRegister) {
|
||||
if (vector_and_constant_result.storage_index != 0 ||
|
||||
vector_and_constant_result.storage_addressing_mode !=
|
||||
InstructionStorageAddressingMode::kStatic) {
|
||||
InstructionStorageAddressingMode::kAbsolute) {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
|
@ -1323,21 +1204,22 @@ void ParseAluInstruction(const AluInstruction& op,
|
|||
|
||||
// Vector operation and constant 0/1 writes.
|
||||
|
||||
instr.vector_opcode = op.vector_opcode();
|
||||
const auto& vector_opcode_info =
|
||||
alu_vector_opcode_infos[uint32_t(instr.vector_opcode)];
|
||||
ucode::AluVectorOpcode vector_opcode = op.vector_opcode();
|
||||
instr.vector_opcode = vector_opcode;
|
||||
const ucode::AluVectorOpcodeInfo& vector_opcode_info =
|
||||
ucode::GetAluVectorOpcodeInfo(vector_opcode);
|
||||
instr.vector_opcode_name = vector_opcode_info.name;
|
||||
|
||||
instr.vector_and_constant_result.storage_target = storage_target;
|
||||
instr.vector_and_constant_result.storage_addressing_mode =
|
||||
InstructionStorageAddressingMode::kStatic;
|
||||
InstructionStorageAddressingMode::kAbsolute;
|
||||
if (is_export) {
|
||||
instr.vector_and_constant_result.storage_index = storage_index_export;
|
||||
} else {
|
||||
instr.vector_and_constant_result.storage_index = op.vector_dest();
|
||||
if (op.is_vector_dest_relative()) {
|
||||
instr.vector_and_constant_result.storage_addressing_mode =
|
||||
InstructionStorageAddressingMode::kAddressRelative;
|
||||
InstructionStorageAddressingMode::kLoopRelative;
|
||||
}
|
||||
}
|
||||
instr.vector_and_constant_result.is_clamped = op.vector_clamp();
|
||||
|
@ -1355,31 +1237,30 @@ void ParseAluInstruction(const AluInstruction& op,
|
|||
instr.vector_and_constant_result.components[i] = component;
|
||||
}
|
||||
|
||||
instr.vector_operand_count = vector_opcode_info.argument_count;
|
||||
instr.vector_operand_count = vector_opcode_info.GetOperandCount();
|
||||
for (uint32_t i = 0; i < instr.vector_operand_count; ++i) {
|
||||
InstructionOperand& vector_operand = instr.vector_operands[i];
|
||||
ParseAluInstructionOperand(op, i + 1,
|
||||
vector_opcode_info.src_swizzle_component_count,
|
||||
vector_operand);
|
||||
ParseAluInstructionOperand(op, i + 1, 4, vector_operand);
|
||||
}
|
||||
|
||||
// Scalar operation.
|
||||
|
||||
instr.scalar_opcode = op.scalar_opcode();
|
||||
const auto& scalar_opcode_info =
|
||||
alu_scalar_opcode_infos[uint32_t(instr.scalar_opcode)];
|
||||
ucode::AluScalarOpcode scalar_opcode = op.scalar_opcode();
|
||||
instr.scalar_opcode = scalar_opcode;
|
||||
const ucode::AluScalarOpcodeInfo& scalar_opcode_info =
|
||||
ucode::GetAluScalarOpcodeInfo(scalar_opcode);
|
||||
instr.scalar_opcode_name = scalar_opcode_info.name;
|
||||
|
||||
instr.scalar_result.storage_target = storage_target;
|
||||
instr.scalar_result.storage_addressing_mode =
|
||||
InstructionStorageAddressingMode::kStatic;
|
||||
InstructionStorageAddressingMode::kAbsolute;
|
||||
if (is_export) {
|
||||
instr.scalar_result.storage_index = storage_index_export;
|
||||
} else {
|
||||
instr.scalar_result.storage_index = op.scalar_dest();
|
||||
if (op.is_scalar_dest_relative()) {
|
||||
instr.scalar_result.storage_addressing_mode =
|
||||
InstructionStorageAddressingMode::kAddressRelative;
|
||||
InstructionStorageAddressingMode::kLoopRelative;
|
||||
}
|
||||
}
|
||||
instr.scalar_result.is_clamped = op.scalar_clamp();
|
||||
|
@ -1388,27 +1269,49 @@ void ParseAluInstruction(const AluInstruction& op,
|
|||
instr.scalar_result.components[i] = GetSwizzleFromComponentIndex(i);
|
||||
}
|
||||
|
||||
instr.scalar_operand_count = scalar_opcode_info.argument_count;
|
||||
instr.scalar_operand_count = scalar_opcode_info.operand_count;
|
||||
if (instr.scalar_operand_count) {
|
||||
if (instr.scalar_operand_count == 1) {
|
||||
ParseAluInstructionOperand(op, 3,
|
||||
scalar_opcode_info.src_swizzle_component_count,
|
||||
instr.scalar_operands[0]);
|
||||
ParseAluInstructionOperand(
|
||||
op, 3, scalar_opcode_info.single_operand_is_two_component ? 2 : 1,
|
||||
instr.scalar_operands[0]);
|
||||
} else {
|
||||
// Constant and temporary register.
|
||||
|
||||
bool src3_negate = op.src_negate(3);
|
||||
uint32_t src3_swizzle = op.src_swizzle(3);
|
||||
uint32_t component_a = ((src3_swizzle >> 6) + 3) & 0x3;
|
||||
uint32_t component_b = ((src3_swizzle >> 0) + 0) & 0x3;
|
||||
uint32_t reg2 = (src3_swizzle & 0x3C) | (op.src_is_temp(3) << 1) |
|
||||
(static_cast<int>(op.scalar_opcode()) & 1);
|
||||
int const_slot = (op.src_is_temp(1) || op.src_is_temp(2)) ? 1 : 0;
|
||||
|
||||
ParseAluInstructionOperandSpecial(
|
||||
op, InstructionStorageSource::kConstantFloat, op.src_reg(3),
|
||||
op.src_negate(3), 0, component_a, instr.scalar_operands[0]);
|
||||
// Left-hand constant operand (`a` - W swizzle).
|
||||
InstructionOperand& const_op = instr.scalar_operands[0];
|
||||
const_op.is_negated = src3_negate;
|
||||
const_op.is_absolute_value = op.abs_constants();
|
||||
const_op.storage_source = InstructionStorageSource::kConstantFloat;
|
||||
const_op.storage_index = op.src_reg(3);
|
||||
if (op.src_const_is_addressed(3)) {
|
||||
if (op.is_const_address_register_relative()) {
|
||||
const_op.storage_addressing_mode =
|
||||
InstructionStorageAddressingMode::kAddressRegisterRelative;
|
||||
} else {
|
||||
const_op.storage_addressing_mode =
|
||||
InstructionStorageAddressingMode::kLoopRelative;
|
||||
}
|
||||
} else {
|
||||
const_op.storage_addressing_mode =
|
||||
InstructionStorageAddressingMode::kAbsolute;
|
||||
}
|
||||
const_op.component_count = 1;
|
||||
const_op.components[0] = GetSwizzledAluSourceComponent(src3_swizzle, 3);
|
||||
|
||||
ParseAluInstructionOperandSpecial(op, InstructionStorageSource::kRegister,
|
||||
reg2, op.src_negate(3), const_slot,
|
||||
component_b, instr.scalar_operands[1]);
|
||||
// Right-hand temporary register operand (`b` - X swizzle).
|
||||
InstructionOperand& temp_op = instr.scalar_operands[1];
|
||||
temp_op.is_negated = src3_negate;
|
||||
temp_op.is_absolute_value = op.abs_constants();
|
||||
temp_op.storage_source = InstructionStorageSource::kRegister;
|
||||
temp_op.storage_index = op.scalar_const_reg_op_src_temp_reg();
|
||||
temp_op.storage_addressing_mode =
|
||||
InstructionStorageAddressingMode::kAbsolute;
|
||||
temp_op.component_count = 1;
|
||||
temp_op.components[0] = GetSwizzledAluSourceComponent(src3_swizzle, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1421,7 +1324,7 @@ bool ParsedAluInstruction::IsScalarOpDefaultNop() const {
|
|||
if (scalar_result.storage_target == InstructionStorageTarget::kRegister) {
|
||||
if (scalar_result.storage_index != 0 ||
|
||||
scalar_result.storage_addressing_mode !=
|
||||
InstructionStorageAddressingMode::kStatic) {
|
||||
InstructionStorageAddressingMode::kAbsolute) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -1434,7 +1337,7 @@ bool ParsedAluInstruction::IsNop() const {
|
|||
return scalar_opcode == ucode::AluScalarOpcode::kRetainPrev &&
|
||||
!scalar_result.GetUsedWriteMask() &&
|
||||
!vector_and_constant_result.GetUsedWriteMask() &&
|
||||
!ucode::AluVectorOpHasSideEffects(vector_opcode);
|
||||
!ucode::GetAluVectorOpcodeInfo(vector_opcode).changed_state;
|
||||
}
|
||||
|
||||
uint32_t ParsedAluInstruction::GetMemExportStreamConstant() const {
|
||||
|
@ -1446,7 +1349,7 @@ uint32_t ParsedAluInstruction::GetMemExportStreamConstant() const {
|
|||
vector_operands[2].storage_source ==
|
||||
InstructionStorageSource::kConstantFloat &&
|
||||
vector_operands[2].storage_addressing_mode ==
|
||||
InstructionStorageAddressingMode::kStatic &&
|
||||
InstructionStorageAddressingMode::kAbsolute &&
|
||||
vector_operands[2].IsStandardSwizzle() &&
|
||||
!vector_operands[2].is_negated && !vector_operands[2].is_absolute_value) {
|
||||
return vector_operands[2].storage_index;
|
||||
|
|
|
@ -57,13 +57,13 @@ void DisassembleResultOperand(const InstructionResult& result,
|
|||
}
|
||||
if (uses_storage_index) {
|
||||
switch (result.storage_addressing_mode) {
|
||||
case InstructionStorageAddressingMode::kStatic:
|
||||
case InstructionStorageAddressingMode::kAbsolute:
|
||||
out->AppendFormat("{}", result.storage_index);
|
||||
break;
|
||||
case InstructionStorageAddressingMode::kAddressAbsolute:
|
||||
case InstructionStorageAddressingMode::kAddressRegisterRelative:
|
||||
out->AppendFormat("[{}+a0]", result.storage_index);
|
||||
break;
|
||||
case InstructionStorageAddressingMode::kAddressRelative:
|
||||
case InstructionStorageAddressingMode::kLoopRelative:
|
||||
out->AppendFormat("[{}+aL]", result.storage_index);
|
||||
break;
|
||||
}
|
||||
|
@ -109,17 +109,17 @@ void DisassembleSourceOperand(const InstructionOperand& op, StringBuffer* out) {
|
|||
out->Append("_abs");
|
||||
}
|
||||
switch (op.storage_addressing_mode) {
|
||||
case InstructionStorageAddressingMode::kStatic:
|
||||
case InstructionStorageAddressingMode::kAbsolute:
|
||||
if (op.is_absolute_value) {
|
||||
out->AppendFormat("[{}]", op.storage_index);
|
||||
} else {
|
||||
out->AppendFormat("{}", op.storage_index);
|
||||
}
|
||||
break;
|
||||
case InstructionStorageAddressingMode::kAddressAbsolute:
|
||||
case InstructionStorageAddressingMode::kAddressRegisterRelative:
|
||||
out->AppendFormat("[{}+a0]", op.storage_index);
|
||||
break;
|
||||
case InstructionStorageAddressingMode::kAddressRelative:
|
||||
case InstructionStorageAddressingMode::kLoopRelative:
|
||||
out->AppendFormat("[{}+aL]", op.storage_index);
|
||||
break;
|
||||
}
|
||||
|
@ -141,25 +141,27 @@ void DisassembleSourceOperand(const InstructionOperand& op, StringBuffer* out) {
|
|||
void ParsedExecInstruction::Disassemble(StringBuffer* out) const {
|
||||
switch (type) {
|
||||
case Type::kUnconditional:
|
||||
out->AppendFormat(" {} ", opcode_name);
|
||||
out->AppendFormat(" {}", opcode_name);
|
||||
break;
|
||||
case Type::kPredicated:
|
||||
out->Append(condition ? " (p0) " : "(!p0) ");
|
||||
out->AppendFormat("{} ", opcode_name);
|
||||
out->AppendFormat("{}", opcode_name);
|
||||
break;
|
||||
case Type::kConditional:
|
||||
out->AppendFormat(" {} ", opcode_name);
|
||||
if (!condition) {
|
||||
out->Append('!');
|
||||
}
|
||||
out->AppendFormat("b{}", bool_constant_index);
|
||||
out->AppendFormat(" {} {}b{}", opcode_name, condition ? "" : "!",
|
||||
bool_constant_index);
|
||||
break;
|
||||
}
|
||||
if (is_yield) {
|
||||
out->Append(", Yield=true");
|
||||
if (type == Type::kConditional) {
|
||||
// For `exec` or `(p0) exec` (but not `cexec`), "unexpected token ','" if
|
||||
// preceded by a comma.
|
||||
out->Append(',');
|
||||
}
|
||||
out->Append(" Yield=true");
|
||||
}
|
||||
if (!clean) {
|
||||
out->Append(" // PredicateClean=false");
|
||||
if (!is_predicate_clean) {
|
||||
out->Append(" // PredicateClean=false");
|
||||
}
|
||||
out->Append('\n');
|
||||
}
|
||||
|
|
|
@ -161,7 +161,7 @@ or [precise(x)] r0.x, r0.y, r0.x
|
|||
if_nz r0.x
|
||||
ret
|
||||
endif
|
||||
lt [precise(x)] r0.x, l(0.000000), v[0][16].z
|
||||
ge [precise(x)] r0.x, v[0][16].z, l(0.000000)
|
||||
movc [precise(x)] r1.x, r0.x, v[0][16].z, CB0[0][8].w
|
||||
movc [precise(y)] r1.y, r0.x, v[0][16].z, CB0[0][9].w
|
||||
max [precise(xy)] r0.xy, r1.xyxx, CB0[0][10].xxxx
|
||||
|
@ -273,10 +273,10 @@ ret
|
|||
|
||||
const BYTE primitive_point_list_gs[] =
|
||||
{
|
||||
68, 88, 66, 67, 6, 119,
|
||||
40, 99, 120, 121, 153, 224,
|
||||
111, 77, 187, 15, 15, 245,
|
||||
37, 128, 1, 0, 0, 0,
|
||||
68, 88, 66, 67, 93, 92,
|
||||
207, 129, 65, 238, 95, 209,
|
||||
216, 127, 85, 211, 22, 177,
|
||||
159, 238, 1, 0, 0, 0,
|
||||
136, 29, 0, 0, 5, 0,
|
||||
0, 0, 52, 0, 0, 0,
|
||||
184, 10, 0, 0, 248, 12,
|
||||
|
@ -1070,12 +1070,12 @@ const BYTE primitive_point_list_gs[] =
|
|||
31, 0, 4, 3, 10, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
62, 0, 0, 1, 21, 0,
|
||||
0, 1, 49, 0, 8, 8,
|
||||
0, 1, 29, 0, 8, 8,
|
||||
18, 0, 16, 0, 0, 0,
|
||||
0, 0, 42, 16, 32, 0,
|
||||
0, 0, 0, 0, 16, 0,
|
||||
0, 0, 1, 64, 0, 0,
|
||||
0, 0, 0, 0, 42, 16,
|
||||
32, 0, 0, 0, 0, 0,
|
||||
16, 0, 0, 0, 55, 0,
|
||||
0, 0, 0, 0, 55, 0,
|
||||
8, 12, 18, 0, 16, 0,
|
||||
1, 0, 0, 0, 10, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
|
|
1030
src/xenia/gpu/shaders/bytecode/d3d12_5_1/texture_load_r16_snorm_float_cs.h
generated
Normal file
1030
src/xenia/gpu/shaders/bytecode/d3d12_5_1/texture_load_r16_snorm_float_cs.h
generated
Normal file
File diff suppressed because it is too large
Load Diff
1123
src/xenia/gpu/shaders/bytecode/d3d12_5_1/texture_load_r16_snorm_float_scaled_cs.h
generated
Normal file
1123
src/xenia/gpu/shaders/bytecode/d3d12_5_1/texture_load_r16_snorm_float_scaled_cs.h
generated
Normal file
File diff suppressed because it is too large
Load Diff
992
src/xenia/gpu/shaders/bytecode/d3d12_5_1/texture_load_r16_unorm_float_cs.h
generated
Normal file
992
src/xenia/gpu/shaders/bytecode/d3d12_5_1/texture_load_r16_unorm_float_cs.h
generated
Normal file
|
@ -0,0 +1,992 @@
|
|||
#if 0
|
||||
//
|
||||
// Generated by Microsoft (R) HLSL Shader Compiler 10.1
|
||||
//
|
||||
//
|
||||
// Buffer Definitions:
|
||||
//
|
||||
// cbuffer xe_texture_load_constants
|
||||
// {
|
||||
//
|
||||
// uint xe_texture_load_is_tiled_3d_endian_scale;// Offset: 0 Size: 4
|
||||
// uint xe_texture_load_guest_offset; // Offset: 4 Size: 4
|
||||
// uint xe_texture_load_guest_pitch_aligned;// Offset: 8 Size: 4
|
||||
// uint xe_texture_load_guest_z_stride_block_rows_aligned;// Offset: 12 Size: 4
|
||||
// uint3 xe_texture_load_size_blocks; // Offset: 16 Size: 12
|
||||
// uint xe_texture_load_host_offset; // Offset: 28 Size: 4
|
||||
// uint xe_texture_load_host_pitch; // Offset: 32 Size: 4
|
||||
// uint xe_texture_load_height_texels;// Offset: 36 Size: 4 [unused]
|
||||
//
|
||||
// }
|
||||
//
|
||||
//
|
||||
// Resource Bindings:
|
||||
//
|
||||
// Name Type Format Dim ID HLSL Bind Count
|
||||
// ------------------------------ ---------- ------- ----------- ------- -------------- ------
|
||||
// xe_texture_load_source texture uint4 buf T0 t0 1
|
||||
// xe_texture_load_dest UAV uint4 buf U0 u0 1
|
||||
// xe_texture_load_constants cbuffer NA NA CB0 cb0 1
|
||||
//
|
||||
//
|
||||
//
|
||||
// Input signature:
|
||||
//
|
||||
// Name Index Mask Register SysValue Format Used
|
||||
// -------------------- ----- ------ -------- -------- ------- ------
|
||||
// no Input
|
||||
//
|
||||
// Output signature:
|
||||
//
|
||||
// Name Index Mask Register SysValue Format Used
|
||||
// -------------------- ----- ------ -------- -------- ------- ------
|
||||
// no Output
|
||||
cs_5_1
|
||||
dcl_globalFlags refactoringAllowed
|
||||
dcl_constantbuffer CB0[0:0][3], immediateIndexed, space=0
|
||||
dcl_resource_buffer (uint,uint,uint,uint) T0[0:0], space=0
|
||||
dcl_uav_typed_buffer (uint,uint,uint,uint) U0[0:0], space=0
|
||||
dcl_input vThreadID.xyz
|
||||
dcl_temps 5
|
||||
dcl_thread_group 2, 32, 1
|
||||
ishl r0.x, vThreadID.x, l(4)
|
||||
mov r0.y, vThreadID.y
|
||||
uge r0.yz, r0.xxyx, CB0[0][1].xxyx
|
||||
or r0.y, r0.z, r0.y
|
||||
if_nz r0.y
|
||||
ret
|
||||
endif
|
||||
ishl r0.y, r0.x, l(1)
|
||||
imad r0.z, vThreadID.z, CB0[0][1].y, vThreadID.y
|
||||
imad r0.z, r0.z, CB0[0][2].x, r0.y
|
||||
iadd r0.z, r0.z, CB0[0][1].w
|
||||
and r0.w, CB0[0][0].x, l(1)
|
||||
if_nz r0.w
|
||||
and r1.x, CB0[0][0].x, l(2)
|
||||
if_nz r1.x
|
||||
ishr r1.xyz, vThreadID.yzyy, l(4, 2, 3, 0)
|
||||
ushr r2.xy, CB0[0][0].wzww, l(4, 5, 0, 0)
|
||||
imad r1.x, r1.y, r2.x, r1.x
|
||||
ibfe r1.w, l(27), l(1), vThreadID.x
|
||||
imad r1.x, r1.x, r2.y, r1.w
|
||||
ishl r1.w, vThreadID.y, l(9)
|
||||
ishr r1.w, r1.w, l(6)
|
||||
iadd r1.y, r1.y, r1.z
|
||||
and r1.zw, r1.yyyw, l(0, 0, 1, 48)
|
||||
ishr r2.x, r0.x, l(3)
|
||||
bfi r1.y, l(1), l(1), r1.y, l(0)
|
||||
iadd r1.y, r1.y, r2.x
|
||||
bfi r1.y, l(2), l(1), r1.y, l(0)
|
||||
iadd r1.y, r1.y, r1.z
|
||||
bfi r1.xz, l(21, 0, 21, 0), l(9, 0, 12, 0), r1.xxxx, l(0, 0, 0, 0)
|
||||
imad r1.xz, r1.wwww, l(2, 0, 16, 0), r1.xxzx
|
||||
bfi r1.xz, l(2, 0, 2, 0), l(7, 0, 10, 0), vThreadID.zzzz, r1.xxzx
|
||||
bfi r1.w, l(1), l(4), vThreadID.y, l(0)
|
||||
ubfe r2.x, l(3), l(6), r1.x
|
||||
and r2.y, r1.y, l(4)
|
||||
bfi r1.y, l(2), l(8), r1.y, l(0)
|
||||
imad r1.y, r2.x, l(32), r1.y
|
||||
imad r1.y, r2.y, l(4), r1.y
|
||||
bfi r1.xz, l(5, 0, 5, 0), l(0, 0, 3, 0), r1.wwww, r1.xxzx
|
||||
bfi r1.y, l(9), l(3), r1.y, r1.z
|
||||
bfi r1.x, l(6), l(0), r1.x, r1.y
|
||||
else
|
||||
ibfe r1.y, l(27), l(1), vThreadID.x
|
||||
ishr r1.zw, vThreadID.yyyy, l(0, 0, 5, 2)
|
||||
ushr r2.x, CB0[0][0].z, l(5)
|
||||
imad r1.y, r1.z, r2.x, r1.y
|
||||
bfi r2.xyz, l(4, 4, 4, 0), l(4, 7, 6, 0), vThreadID.yyyy, l(0, 0, 0, 0)
|
||||
bfi r2.xyz, l(24, 24, 24, 0), l(8, 11, 10, 0), r1.yyyy, r2.xyzx
|
||||
ishl r1.y, vThreadID.y, l(7)
|
||||
and r1.y, r1.y, l(2048)
|
||||
bfi r1.y, l(12), l(0), r1.y, r2.y
|
||||
and r1.z, r2.z, l(1792)
|
||||
iadd r1.y, r1.y, r1.z
|
||||
and r1.z, r1.w, l(2)
|
||||
ishr r0.x, r0.x, l(3)
|
||||
iadd r0.x, r0.x, r1.z
|
||||
bfi r0.x, l(2), l(6), r0.x, l(0)
|
||||
iadd r0.x, r1.y, r0.x
|
||||
bfi r1.x, l(6), l(0), r2.x, r0.x
|
||||
endif
|
||||
else
|
||||
imad r0.x, vThreadID.z, CB0[0][0].w, vThreadID.y
|
||||
imad r1.x, r0.x, CB0[0][0].z, r0.y
|
||||
endif
|
||||
iadd r0.x, r1.x, CB0[0][0].y
|
||||
ushr r0.xz, r0.xxzx, l(4, 0, 4, 0)
|
||||
ubfe r0.y, l(2), l(2), CB0[0][0].x
|
||||
ld r1.xyzw, r0.xxxx, T0[0].xyzw
|
||||
ieq r0.y, r0.y, l(1)
|
||||
if_nz r0.y
|
||||
ishl r2.xyzw, r1.xyzw, l(8, 8, 8, 8)
|
||||
and r2.xyzw, r2.xyzw, l(0xff00ff00, 0xff00ff00, 0xff00ff00, 0xff00ff00)
|
||||
ushr r3.xyzw, r1.xyzw, l(8, 8, 8, 8)
|
||||
and r3.xyzw, r3.xyzw, l(0x00ff00ff, 0x00ff00ff, 0x00ff00ff, 0x00ff00ff)
|
||||
iadd r1.xyzw, r2.xyzw, r3.xyzw
|
||||
endif
|
||||
and r2.xyzw, r1.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff)
|
||||
utof r2.xyzw, r2.xyzw
|
||||
mul r2.xyzw, r2.xyzw, l(0.000015, 0.000015, 0.000015, 0.000015)
|
||||
ushr r1.xyzw, r1.xyzw, l(16, 16, 16, 16)
|
||||
utof r1.xyzw, r1.xyzw
|
||||
mul r1.xyzw, r1.xyzw, l(0.000015, 0.000015, 0.000015, 0.000015)
|
||||
f32tof16 r2.xyzw, r2.xyzw
|
||||
f32tof16 r1.xyzw, r1.xyzw
|
||||
imad r1.xyzw, r1.xyzw, l(0x00010000, 0x00010000, 0x00010000, 0x00010000), r2.xyzw
|
||||
store_uav_typed U0[0].xyzw, r0.zzzz, r1.xyzw
|
||||
iadd r1.x, r0.z, l(1)
|
||||
if_nz r0.w
|
||||
mov r0.w, l(64)
|
||||
else
|
||||
mov r0.w, l(16)
|
||||
endif
|
||||
ushr r0.w, r0.w, l(4)
|
||||
iadd r0.x, r0.w, r0.x
|
||||
ld r2.xyzw, r0.xxxx, T0[0].xyzw
|
||||
if_nz r0.y
|
||||
ishl r3.xyzw, r2.xyzw, l(8, 8, 8, 8)
|
||||
and r3.xyzw, r3.xyzw, l(0xff00ff00, 0xff00ff00, 0xff00ff00, 0xff00ff00)
|
||||
ushr r4.xyzw, r2.xyzw, l(8, 8, 8, 8)
|
||||
and r4.xyzw, r4.xyzw, l(0x00ff00ff, 0x00ff00ff, 0x00ff00ff, 0x00ff00ff)
|
||||
iadd r2.xyzw, r3.xyzw, r4.xyzw
|
||||
endif
|
||||
and r3.xyzw, r2.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff)
|
||||
utof r3.xyzw, r3.xyzw
|
||||
mul r3.xyzw, r3.xyzw, l(0.000015, 0.000015, 0.000015, 0.000015)
|
||||
ushr r2.xyzw, r2.xyzw, l(16, 16, 16, 16)
|
||||
utof r2.xyzw, r2.xyzw
|
||||
mul r2.xyzw, r2.xyzw, l(0.000015, 0.000015, 0.000015, 0.000015)
|
||||
f32tof16 r3.xyzw, r3.xyzw
|
||||
f32tof16 r2.xyzw, r2.xyzw
|
||||
imad r2.xyzw, r2.xyzw, l(0x00010000, 0x00010000, 0x00010000, 0x00010000), r3.xyzw
|
||||
store_uav_typed U0[0].xyzw, r1.xxxx, r2.xyzw
|
||||
ret
|
||||
// Approximately 113 instruction slots used
|
||||
#endif
|
||||
|
||||
const BYTE texture_load_r16_unorm_float_cs[] =
|
||||
{
|
||||
68, 88, 66, 67, 123, 10,
|
||||
201, 118, 4, 125, 207, 228,
|
||||
231, 50, 233, 244, 245, 16,
|
||||
251, 18, 1, 0, 0, 0,
|
||||
68, 19, 0, 0, 5, 0,
|
||||
0, 0, 52, 0, 0, 0,
|
||||
32, 4, 0, 0, 48, 4,
|
||||
0, 0, 64, 4, 0, 0,
|
||||
168, 18, 0, 0, 82, 68,
|
||||
69, 70, 228, 3, 0, 0,
|
||||
1, 0, 0, 0, 252, 0,
|
||||
0, 0, 3, 0, 0, 0,
|
||||
60, 0, 0, 0, 1, 5,
|
||||
83, 67, 0, 5, 0, 0,
|
||||
185, 3, 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,
|
||||
180, 0, 0, 0, 2, 0,
|
||||
0, 0, 4, 0, 0, 0,
|
||||
1, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
1, 0, 0, 0, 12, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 203, 0,
|
||||
0, 0, 4, 0, 0, 0,
|
||||
4, 0, 0, 0, 1, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 1, 0,
|
||||
0, 0, 12, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 224, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 1, 0, 0, 0,
|
||||
1, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
120, 101, 95, 116, 101, 120,
|
||||
116, 117, 114, 101, 95, 108,
|
||||
111, 97, 100, 95, 115, 111,
|
||||
117, 114, 99, 101, 0, 120,
|
||||
101, 95, 116, 101, 120, 116,
|
||||
117, 114, 101, 95, 108, 111,
|
||||
97, 100, 95, 100, 101, 115,
|
||||
116, 0, 120, 101, 95, 116,
|
||||
101, 120, 116, 117, 114, 101,
|
||||
95, 108, 111, 97, 100, 95,
|
||||
99, 111, 110, 115, 116, 97,
|
||||
110, 116, 115, 0, 171, 171,
|
||||
224, 0, 0, 0, 8, 0,
|
||||
0, 0, 20, 1, 0, 0,
|
||||
48, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
84, 2, 0, 0, 0, 0,
|
||||
0, 0, 4, 0, 0, 0,
|
||||
2, 0, 0, 0, 132, 2,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 168, 2,
|
||||
0, 0, 4, 0, 0, 0,
|
||||
4, 0, 0, 0, 2, 0,
|
||||
0, 0, 132, 2, 0, 0,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 197, 2, 0, 0,
|
||||
8, 0, 0, 0, 4, 0,
|
||||
0, 0, 2, 0, 0, 0,
|
||||
132, 2, 0, 0, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
233, 2, 0, 0, 12, 0,
|
||||
0, 0, 4, 0, 0, 0,
|
||||
2, 0, 0, 0, 132, 2,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 27, 3,
|
||||
0, 0, 16, 0, 0, 0,
|
||||
12, 0, 0, 0, 2, 0,
|
||||
0, 0, 64, 3, 0, 0,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 100, 3, 0, 0,
|
||||
28, 0, 0, 0, 4, 0,
|
||||
0, 0, 2, 0, 0, 0,
|
||||
132, 2, 0, 0, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
128, 3, 0, 0, 32, 0,
|
||||
0, 0, 4, 0, 0, 0,
|
||||
2, 0, 0, 0, 132, 2,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 255, 255, 255, 255,
|
||||
0, 0, 0, 0, 155, 3,
|
||||
0, 0, 36, 0, 0, 0,
|
||||
4, 0, 0, 0, 0, 0,
|
||||
0, 0, 132, 2, 0, 0,
|
||||
0, 0, 0, 0, 255, 255,
|
||||
255, 255, 0, 0, 0, 0,
|
||||
255, 255, 255, 255, 0, 0,
|
||||
0, 0, 120, 101, 95, 116,
|
||||
101, 120, 116, 117, 114, 101,
|
||||
95, 108, 111, 97, 100, 95,
|
||||
105, 115, 95, 116, 105, 108,
|
||||
101, 100, 95, 51, 100, 95,
|
||||
101, 110, 100, 105, 97, 110,
|
||||
95, 115, 99, 97, 108, 101,
|
||||
0, 100, 119, 111, 114, 100,
|
||||
0, 171, 0, 0, 19, 0,
|
||||
1, 0, 1, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 125, 2,
|
||||
0, 0, 120, 101, 95, 116,
|
||||
101, 120, 116, 117, 114, 101,
|
||||
95, 108, 111, 97, 100, 95,
|
||||
103, 117, 101, 115, 116, 95,
|
||||
111, 102, 102, 115, 101, 116,
|
||||
0, 120, 101, 95, 116, 101,
|
||||
120, 116, 117, 114, 101, 95,
|
||||
108, 111, 97, 100, 95, 103,
|
||||
117, 101, 115, 116, 95, 112,
|
||||
105, 116, 99, 104, 95, 97,
|
||||
108, 105, 103, 110, 101, 100,
|
||||
0, 120, 101, 95, 116, 101,
|
||||
120, 116, 117, 114, 101, 95,
|
||||
108, 111, 97, 100, 95, 103,
|
||||
117, 101, 115, 116, 95, 122,
|
||||
95, 115, 116, 114, 105, 100,
|
||||
101, 95, 98, 108, 111, 99,
|
||||
107, 95, 114, 111, 119, 115,
|
||||
95, 97, 108, 105, 103, 110,
|
||||
101, 100, 0, 120, 101, 95,
|
||||
116, 101, 120, 116, 117, 114,
|
||||
101, 95, 108, 111, 97, 100,
|
||||
95, 115, 105, 122, 101, 95,
|
||||
98, 108, 111, 99, 107, 115,
|
||||
0, 117, 105, 110, 116, 51,
|
||||
0, 171, 171, 171, 1, 0,
|
||||
19, 0, 1, 0, 3, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
55, 3, 0, 0, 120, 101,
|
||||
95, 116, 101, 120, 116, 117,
|
||||
114, 101, 95, 108, 111, 97,
|
||||
100, 95, 104, 111, 115, 116,
|
||||
95, 111, 102, 102, 115, 101,
|
||||
116, 0, 120, 101, 95, 116,
|
||||
101, 120, 116, 117, 114, 101,
|
||||
95, 108, 111, 97, 100, 95,
|
||||
104, 111, 115, 116, 95, 112,
|
||||
105, 116, 99, 104, 0, 120,
|
||||
101, 95, 116, 101, 120, 116,
|
||||
117, 114, 101, 95, 108, 111,
|
||||
97, 100, 95, 104, 101, 105,
|
||||
103, 104, 116, 95, 116, 101,
|
||||
120, 101, 108, 115, 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, 171,
|
||||
73, 83, 71, 78, 8, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
8, 0, 0, 0, 79, 83,
|
||||
71, 78, 8, 0, 0, 0,
|
||||
0, 0, 0, 0, 8, 0,
|
||||
0, 0, 83, 72, 69, 88,
|
||||
96, 14, 0, 0, 81, 0,
|
||||
5, 0, 152, 3, 0, 0,
|
||||
106, 8, 0, 1, 89, 0,
|
||||
0, 7, 70, 142, 48, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
3, 0, 0, 0, 0, 0,
|
||||
0, 0, 88, 8, 0, 7,
|
||||
70, 126, 48, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 68, 68,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
156, 8, 0, 7, 70, 238,
|
||||
49, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 68, 68, 0, 0,
|
||||
0, 0, 0, 0, 95, 0,
|
||||
0, 2, 114, 0, 2, 0,
|
||||
104, 0, 0, 2, 5, 0,
|
||||
0, 0, 155, 0, 0, 4,
|
||||
2, 0, 0, 0, 32, 0,
|
||||
0, 0, 1, 0, 0, 0,
|
||||
41, 0, 0, 6, 18, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
10, 0, 2, 0, 1, 64,
|
||||
0, 0, 4, 0, 0, 0,
|
||||
54, 0, 0, 4, 34, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
26, 0, 2, 0, 80, 0,
|
||||
0, 9, 98, 0, 16, 0,
|
||||
0, 0, 0, 0, 6, 1,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
6, 129, 48, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
1, 0, 0, 0, 60, 0,
|
||||
0, 7, 34, 0, 16, 0,
|
||||
0, 0, 0, 0, 42, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
26, 0, 16, 0, 0, 0,
|
||||
0, 0, 31, 0, 4, 3,
|
||||
26, 0, 16, 0, 0, 0,
|
||||
0, 0, 62, 0, 0, 1,
|
||||
21, 0, 0, 1, 41, 0,
|
||||
0, 7, 34, 0, 16, 0,
|
||||
0, 0, 0, 0, 10, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
1, 64, 0, 0, 1, 0,
|
||||
0, 0, 35, 0, 0, 9,
|
||||
66, 0, 16, 0, 0, 0,
|
||||
0, 0, 42, 0, 2, 0,
|
||||
26, 128, 48, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
1, 0, 0, 0, 26, 0,
|
||||
2, 0, 35, 0, 0, 11,
|
||||
66, 0, 16, 0, 0, 0,
|
||||
0, 0, 42, 0, 16, 0,
|
||||
0, 0, 0, 0, 10, 128,
|
||||
48, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 2, 0,
|
||||
0, 0, 26, 0, 16, 0,
|
||||
0, 0, 0, 0, 30, 0,
|
||||
0, 9, 66, 0, 16, 0,
|
||||
0, 0, 0, 0, 42, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
58, 128, 48, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
1, 0, 0, 0, 1, 0,
|
||||
0, 9, 130, 0, 16, 0,
|
||||
0, 0, 0, 0, 10, 128,
|
||||
48, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 1, 64, 0, 0,
|
||||
1, 0, 0, 0, 31, 0,
|
||||
4, 3, 58, 0, 16, 0,
|
||||
0, 0, 0, 0, 1, 0,
|
||||
0, 9, 18, 0, 16, 0,
|
||||
1, 0, 0, 0, 10, 128,
|
||||
48, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 1, 64, 0, 0,
|
||||
2, 0, 0, 0, 31, 0,
|
||||
4, 3, 10, 0, 16, 0,
|
||||
1, 0, 0, 0, 42, 0,
|
||||
0, 9, 114, 0, 16, 0,
|
||||
1, 0, 0, 0, 150, 5,
|
||||
2, 0, 2, 64, 0, 0,
|
||||
4, 0, 0, 0, 2, 0,
|
||||
0, 0, 3, 0, 0, 0,
|
||||
0, 0, 0, 0, 85, 0,
|
||||
0, 12, 50, 0, 16, 0,
|
||||
2, 0, 0, 0, 182, 143,
|
||||
48, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 2, 64, 0, 0,
|
||||
4, 0, 0, 0, 5, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 35, 0,
|
||||
0, 9, 18, 0, 16, 0,
|
||||
1, 0, 0, 0, 26, 0,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
10, 0, 16, 0, 2, 0,
|
||||
0, 0, 10, 0, 16, 0,
|
||||
1, 0, 0, 0, 139, 0,
|
||||
0, 8, 130, 0, 16, 0,
|
||||
1, 0, 0, 0, 1, 64,
|
||||
0, 0, 27, 0, 0, 0,
|
||||
1, 64, 0, 0, 1, 0,
|
||||
0, 0, 10, 0, 2, 0,
|
||||
35, 0, 0, 9, 18, 0,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
10, 0, 16, 0, 1, 0,
|
||||
0, 0, 26, 0, 16, 0,
|
||||
2, 0, 0, 0, 58, 0,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
41, 0, 0, 6, 130, 0,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
26, 0, 2, 0, 1, 64,
|
||||
0, 0, 9, 0, 0, 0,
|
||||
42, 0, 0, 7, 130, 0,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
58, 0, 16, 0, 1, 0,
|
||||
0, 0, 1, 64, 0, 0,
|
||||
6, 0, 0, 0, 30, 0,
|
||||
0, 7, 34, 0, 16, 0,
|
||||
1, 0, 0, 0, 26, 0,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
42, 0, 16, 0, 1, 0,
|
||||
0, 0, 1, 0, 0, 10,
|
||||
194, 0, 16, 0, 1, 0,
|
||||
0, 0, 86, 13, 16, 0,
|
||||
1, 0, 0, 0, 2, 64,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 1, 0,
|
||||
0, 0, 48, 0, 0, 0,
|
||||
42, 0, 0, 7, 18, 0,
|
||||
16, 0, 2, 0, 0, 0,
|
||||
10, 0, 16, 0, 0, 0,
|
||||
0, 0, 1, 64, 0, 0,
|
||||
3, 0, 0, 0, 140, 0,
|
||||
0, 11, 34, 0, 16, 0,
|
||||
1, 0, 0, 0, 1, 64,
|
||||
0, 0, 1, 0, 0, 0,
|
||||
1, 64, 0, 0, 1, 0,
|
||||
0, 0, 26, 0, 16, 0,
|
||||
1, 0, 0, 0, 1, 64,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
30, 0, 0, 7, 34, 0,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
26, 0, 16, 0, 1, 0,
|
||||
0, 0, 10, 0, 16, 0,
|
||||
2, 0, 0, 0, 140, 0,
|
||||
0, 11, 34, 0, 16, 0,
|
||||
1, 0, 0, 0, 1, 64,
|
||||
0, 0, 2, 0, 0, 0,
|
||||
1, 64, 0, 0, 1, 0,
|
||||
0, 0, 26, 0, 16, 0,
|
||||
1, 0, 0, 0, 1, 64,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
30, 0, 0, 7, 34, 0,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
26, 0, 16, 0, 1, 0,
|
||||
0, 0, 42, 0, 16, 0,
|
||||
1, 0, 0, 0, 140, 0,
|
||||
0, 20, 82, 0, 16, 0,
|
||||
1, 0, 0, 0, 2, 64,
|
||||
0, 0, 21, 0, 0, 0,
|
||||
0, 0, 0, 0, 21, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
2, 64, 0, 0, 9, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
12, 0, 0, 0, 0, 0,
|
||||
0, 0, 6, 0, 16, 0,
|
||||
1, 0, 0, 0, 2, 64,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
35, 0, 0, 12, 82, 0,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
246, 15, 16, 0, 1, 0,
|
||||
0, 0, 2, 64, 0, 0,
|
||||
2, 0, 0, 0, 0, 0,
|
||||
0, 0, 16, 0, 0, 0,
|
||||
0, 0, 0, 0, 6, 2,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
140, 0, 0, 16, 82, 0,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
2, 64, 0, 0, 2, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
2, 0, 0, 0, 0, 0,
|
||||
0, 0, 2, 64, 0, 0,
|
||||
7, 0, 0, 0, 0, 0,
|
||||
0, 0, 10, 0, 0, 0,
|
||||
0, 0, 0, 0, 166, 10,
|
||||
2, 0, 6, 2, 16, 0,
|
||||
1, 0, 0, 0, 140, 0,
|
||||
0, 10, 130, 0, 16, 0,
|
||||
1, 0, 0, 0, 1, 64,
|
||||
0, 0, 1, 0, 0, 0,
|
||||
1, 64, 0, 0, 4, 0,
|
||||
0, 0, 26, 0, 2, 0,
|
||||
1, 64, 0, 0, 0, 0,
|
||||
0, 0, 138, 0, 0, 9,
|
||||
18, 0, 16, 0, 2, 0,
|
||||
0, 0, 1, 64, 0, 0,
|
||||
3, 0, 0, 0, 1, 64,
|
||||
0, 0, 6, 0, 0, 0,
|
||||
10, 0, 16, 0, 1, 0,
|
||||
0, 0, 1, 0, 0, 7,
|
||||
34, 0, 16, 0, 2, 0,
|
||||
0, 0, 26, 0, 16, 0,
|
||||
1, 0, 0, 0, 1, 64,
|
||||
0, 0, 4, 0, 0, 0,
|
||||
140, 0, 0, 11, 34, 0,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
1, 64, 0, 0, 2, 0,
|
||||
0, 0, 1, 64, 0, 0,
|
||||
8, 0, 0, 0, 26, 0,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
1, 64, 0, 0, 0, 0,
|
||||
0, 0, 35, 0, 0, 9,
|
||||
34, 0, 16, 0, 1, 0,
|
||||
0, 0, 10, 0, 16, 0,
|
||||
2, 0, 0, 0, 1, 64,
|
||||
0, 0, 32, 0, 0, 0,
|
||||
26, 0, 16, 0, 1, 0,
|
||||
0, 0, 35, 0, 0, 9,
|
||||
34, 0, 16, 0, 1, 0,
|
||||
0, 0, 26, 0, 16, 0,
|
||||
2, 0, 0, 0, 1, 64,
|
||||
0, 0, 4, 0, 0, 0,
|
||||
26, 0, 16, 0, 1, 0,
|
||||
0, 0, 140, 0, 0, 17,
|
||||
82, 0, 16, 0, 1, 0,
|
||||
0, 0, 2, 64, 0, 0,
|
||||
5, 0, 0, 0, 0, 0,
|
||||
0, 0, 5, 0, 0, 0,
|
||||
0, 0, 0, 0, 2, 64,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 3, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
246, 15, 16, 0, 1, 0,
|
||||
0, 0, 6, 2, 16, 0,
|
||||
1, 0, 0, 0, 140, 0,
|
||||
0, 11, 34, 0, 16, 0,
|
||||
1, 0, 0, 0, 1, 64,
|
||||
0, 0, 9, 0, 0, 0,
|
||||
1, 64, 0, 0, 3, 0,
|
||||
0, 0, 26, 0, 16, 0,
|
||||
1, 0, 0, 0, 42, 0,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
140, 0, 0, 11, 18, 0,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
1, 64, 0, 0, 6, 0,
|
||||
0, 0, 1, 64, 0, 0,
|
||||
0, 0, 0, 0, 10, 0,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
26, 0, 16, 0, 1, 0,
|
||||
0, 0, 18, 0, 0, 1,
|
||||
139, 0, 0, 8, 34, 0,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
1, 64, 0, 0, 27, 0,
|
||||
0, 0, 1, 64, 0, 0,
|
||||
1, 0, 0, 0, 10, 0,
|
||||
2, 0, 42, 0, 0, 9,
|
||||
194, 0, 16, 0, 1, 0,
|
||||
0, 0, 86, 5, 2, 0,
|
||||
2, 64, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
5, 0, 0, 0, 2, 0,
|
||||
0, 0, 85, 0, 0, 9,
|
||||
18, 0, 16, 0, 2, 0,
|
||||
0, 0, 42, 128, 48, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
1, 64, 0, 0, 5, 0,
|
||||
0, 0, 35, 0, 0, 9,
|
||||
34, 0, 16, 0, 1, 0,
|
||||
0, 0, 42, 0, 16, 0,
|
||||
1, 0, 0, 0, 10, 0,
|
||||
16, 0, 2, 0, 0, 0,
|
||||
26, 0, 16, 0, 1, 0,
|
||||
0, 0, 140, 0, 0, 19,
|
||||
114, 0, 16, 0, 2, 0,
|
||||
0, 0, 2, 64, 0, 0,
|
||||
4, 0, 0, 0, 4, 0,
|
||||
0, 0, 4, 0, 0, 0,
|
||||
0, 0, 0, 0, 2, 64,
|
||||
0, 0, 4, 0, 0, 0,
|
||||
7, 0, 0, 0, 6, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
86, 5, 2, 0, 2, 64,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
140, 0, 0, 17, 114, 0,
|
||||
16, 0, 2, 0, 0, 0,
|
||||
2, 64, 0, 0, 24, 0,
|
||||
0, 0, 24, 0, 0, 0,
|
||||
24, 0, 0, 0, 0, 0,
|
||||
0, 0, 2, 64, 0, 0,
|
||||
8, 0, 0, 0, 11, 0,
|
||||
0, 0, 10, 0, 0, 0,
|
||||
0, 0, 0, 0, 86, 5,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
70, 2, 16, 0, 2, 0,
|
||||
0, 0, 41, 0, 0, 6,
|
||||
34, 0, 16, 0, 1, 0,
|
||||
0, 0, 26, 0, 2, 0,
|
||||
1, 64, 0, 0, 7, 0,
|
||||
0, 0, 1, 0, 0, 7,
|
||||
34, 0, 16, 0, 1, 0,
|
||||
0, 0, 26, 0, 16, 0,
|
||||
1, 0, 0, 0, 1, 64,
|
||||
0, 0, 0, 8, 0, 0,
|
||||
140, 0, 0, 11, 34, 0,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
1, 64, 0, 0, 12, 0,
|
||||
0, 0, 1, 64, 0, 0,
|
||||
0, 0, 0, 0, 26, 0,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
26, 0, 16, 0, 2, 0,
|
||||
0, 0, 1, 0, 0, 7,
|
||||
66, 0, 16, 0, 1, 0,
|
||||
0, 0, 42, 0, 16, 0,
|
||||
2, 0, 0, 0, 1, 64,
|
||||
0, 0, 0, 7, 0, 0,
|
||||
30, 0, 0, 7, 34, 0,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
26, 0, 16, 0, 1, 0,
|
||||
0, 0, 42, 0, 16, 0,
|
||||
1, 0, 0, 0, 1, 0,
|
||||
0, 7, 66, 0, 16, 0,
|
||||
1, 0, 0, 0, 58, 0,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
1, 64, 0, 0, 2, 0,
|
||||
0, 0, 42, 0, 0, 7,
|
||||
18, 0, 16, 0, 0, 0,
|
||||
0, 0, 10, 0, 16, 0,
|
||||
0, 0, 0, 0, 1, 64,
|
||||
0, 0, 3, 0, 0, 0,
|
||||
30, 0, 0, 7, 18, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
10, 0, 16, 0, 0, 0,
|
||||
0, 0, 42, 0, 16, 0,
|
||||
1, 0, 0, 0, 140, 0,
|
||||
0, 11, 18, 0, 16, 0,
|
||||
0, 0, 0, 0, 1, 64,
|
||||
0, 0, 2, 0, 0, 0,
|
||||
1, 64, 0, 0, 6, 0,
|
||||
0, 0, 10, 0, 16, 0,
|
||||
0, 0, 0, 0, 1, 64,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
30, 0, 0, 7, 18, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
26, 0, 16, 0, 1, 0,
|
||||
0, 0, 10, 0, 16, 0,
|
||||
0, 0, 0, 0, 140, 0,
|
||||
0, 11, 18, 0, 16, 0,
|
||||
1, 0, 0, 0, 1, 64,
|
||||
0, 0, 6, 0, 0, 0,
|
||||
1, 64, 0, 0, 0, 0,
|
||||
0, 0, 10, 0, 16, 0,
|
||||
2, 0, 0, 0, 10, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
21, 0, 0, 1, 18, 0,
|
||||
0, 1, 35, 0, 0, 9,
|
||||
18, 0, 16, 0, 0, 0,
|
||||
0, 0, 42, 0, 2, 0,
|
||||
58, 128, 48, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 26, 0,
|
||||
2, 0, 35, 0, 0, 11,
|
||||
18, 0, 16, 0, 1, 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, 26, 0, 16, 0,
|
||||
0, 0, 0, 0, 21, 0,
|
||||
0, 1, 30, 0, 0, 9,
|
||||
18, 0, 16, 0, 0, 0,
|
||||
0, 0, 10, 0, 16, 0,
|
||||
1, 0, 0, 0, 26, 128,
|
||||
48, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 85, 0, 0, 10,
|
||||
82, 0, 16, 0, 0, 0,
|
||||
0, 0, 6, 2, 16, 0,
|
||||
0, 0, 0, 0, 2, 64,
|
||||
0, 0, 4, 0, 0, 0,
|
||||
0, 0, 0, 0, 4, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
138, 0, 0, 11, 34, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
1, 64, 0, 0, 2, 0,
|
||||
0, 0, 1, 64, 0, 0,
|
||||
2, 0, 0, 0, 10, 128,
|
||||
48, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 45, 0, 0, 8,
|
||||
242, 0, 16, 0, 1, 0,
|
||||
0, 0, 6, 0, 16, 0,
|
||||
0, 0, 0, 0, 70, 126,
|
||||
32, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 32, 0,
|
||||
0, 7, 34, 0, 16, 0,
|
||||
0, 0, 0, 0, 26, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
1, 64, 0, 0, 1, 0,
|
||||
0, 0, 31, 0, 4, 3,
|
||||
26, 0, 16, 0, 0, 0,
|
||||
0, 0, 41, 0, 0, 10,
|
||||
242, 0, 16, 0, 2, 0,
|
||||
0, 0, 70, 14, 16, 0,
|
||||
1, 0, 0, 0, 2, 64,
|
||||
0, 0, 8, 0, 0, 0,
|
||||
8, 0, 0, 0, 8, 0,
|
||||
0, 0, 8, 0, 0, 0,
|
||||
1, 0, 0, 10, 242, 0,
|
||||
16, 0, 2, 0, 0, 0,
|
||||
70, 14, 16, 0, 2, 0,
|
||||
0, 0, 2, 64, 0, 0,
|
||||
0, 255, 0, 255, 0, 255,
|
||||
0, 255, 0, 255, 0, 255,
|
||||
0, 255, 0, 255, 85, 0,
|
||||
0, 10, 242, 0, 16, 0,
|
||||
3, 0, 0, 0, 70, 14,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
2, 64, 0, 0, 8, 0,
|
||||
0, 0, 8, 0, 0, 0,
|
||||
8, 0, 0, 0, 8, 0,
|
||||
0, 0, 1, 0, 0, 10,
|
||||
242, 0, 16, 0, 3, 0,
|
||||
0, 0, 70, 14, 16, 0,
|
||||
3, 0, 0, 0, 2, 64,
|
||||
0, 0, 255, 0, 255, 0,
|
||||
255, 0, 255, 0, 255, 0,
|
||||
255, 0, 255, 0, 255, 0,
|
||||
30, 0, 0, 7, 242, 0,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
70, 14, 16, 0, 2, 0,
|
||||
0, 0, 70, 14, 16, 0,
|
||||
3, 0, 0, 0, 21, 0,
|
||||
0, 1, 1, 0, 0, 10,
|
||||
242, 0, 16, 0, 2, 0,
|
||||
0, 0, 70, 14, 16, 0,
|
||||
1, 0, 0, 0, 2, 64,
|
||||
0, 0, 255, 255, 0, 0,
|
||||
255, 255, 0, 0, 255, 255,
|
||||
0, 0, 255, 255, 0, 0,
|
||||
86, 0, 0, 5, 242, 0,
|
||||
16, 0, 2, 0, 0, 0,
|
||||
70, 14, 16, 0, 2, 0,
|
||||
0, 0, 56, 0, 0, 10,
|
||||
242, 0, 16, 0, 2, 0,
|
||||
0, 0, 70, 14, 16, 0,
|
||||
2, 0, 0, 0, 2, 64,
|
||||
0, 0, 128, 0, 128, 55,
|
||||
128, 0, 128, 55, 128, 0,
|
||||
128, 55, 128, 0, 128, 55,
|
||||
85, 0, 0, 10, 242, 0,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
70, 14, 16, 0, 1, 0,
|
||||
0, 0, 2, 64, 0, 0,
|
||||
16, 0, 0, 0, 16, 0,
|
||||
0, 0, 16, 0, 0, 0,
|
||||
16, 0, 0, 0, 86, 0,
|
||||
0, 5, 242, 0, 16, 0,
|
||||
1, 0, 0, 0, 70, 14,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
56, 0, 0, 10, 242, 0,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
70, 14, 16, 0, 1, 0,
|
||||
0, 0, 2, 64, 0, 0,
|
||||
128, 0, 128, 55, 128, 0,
|
||||
128, 55, 128, 0, 128, 55,
|
||||
128, 0, 128, 55, 130, 0,
|
||||
0, 5, 242, 0, 16, 0,
|
||||
2, 0, 0, 0, 70, 14,
|
||||
16, 0, 2, 0, 0, 0,
|
||||
130, 0, 0, 5, 242, 0,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
70, 14, 16, 0, 1, 0,
|
||||
0, 0, 35, 0, 0, 12,
|
||||
242, 0, 16, 0, 1, 0,
|
||||
0, 0, 70, 14, 16, 0,
|
||||
1, 0, 0, 0, 2, 64,
|
||||
0, 0, 0, 0, 1, 0,
|
||||
0, 0, 1, 0, 0, 0,
|
||||
1, 0, 0, 0, 1, 0,
|
||||
70, 14, 16, 0, 2, 0,
|
||||
0, 0, 164, 0, 0, 8,
|
||||
242, 224, 33, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
166, 10, 16, 0, 0, 0,
|
||||
0, 0, 70, 14, 16, 0,
|
||||
1, 0, 0, 0, 30, 0,
|
||||
0, 7, 18, 0, 16, 0,
|
||||
1, 0, 0, 0, 42, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
1, 64, 0, 0, 1, 0,
|
||||
0, 0, 31, 0, 4, 3,
|
||||
58, 0, 16, 0, 0, 0,
|
||||
0, 0, 54, 0, 0, 5,
|
||||
130, 0, 16, 0, 0, 0,
|
||||
0, 0, 1, 64, 0, 0,
|
||||
64, 0, 0, 0, 18, 0,
|
||||
0, 1, 54, 0, 0, 5,
|
||||
130, 0, 16, 0, 0, 0,
|
||||
0, 0, 1, 64, 0, 0,
|
||||
16, 0, 0, 0, 21, 0,
|
||||
0, 1, 85, 0, 0, 7,
|
||||
130, 0, 16, 0, 0, 0,
|
||||
0, 0, 58, 0, 16, 0,
|
||||
0, 0, 0, 0, 1, 64,
|
||||
0, 0, 4, 0, 0, 0,
|
||||
30, 0, 0, 7, 18, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
58, 0, 16, 0, 0, 0,
|
||||
0, 0, 10, 0, 16, 0,
|
||||
0, 0, 0, 0, 45, 0,
|
||||
0, 8, 242, 0, 16, 0,
|
||||
2, 0, 0, 0, 6, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
70, 126, 32, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
31, 0, 4, 3, 26, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
41, 0, 0, 10, 242, 0,
|
||||
16, 0, 3, 0, 0, 0,
|
||||
70, 14, 16, 0, 2, 0,
|
||||
0, 0, 2, 64, 0, 0,
|
||||
8, 0, 0, 0, 8, 0,
|
||||
0, 0, 8, 0, 0, 0,
|
||||
8, 0, 0, 0, 1, 0,
|
||||
0, 10, 242, 0, 16, 0,
|
||||
3, 0, 0, 0, 70, 14,
|
||||
16, 0, 3, 0, 0, 0,
|
||||
2, 64, 0, 0, 0, 255,
|
||||
0, 255, 0, 255, 0, 255,
|
||||
0, 255, 0, 255, 0, 255,
|
||||
0, 255, 85, 0, 0, 10,
|
||||
242, 0, 16, 0, 4, 0,
|
||||
0, 0, 70, 14, 16, 0,
|
||||
2, 0, 0, 0, 2, 64,
|
||||
0, 0, 8, 0, 0, 0,
|
||||
8, 0, 0, 0, 8, 0,
|
||||
0, 0, 8, 0, 0, 0,
|
||||
1, 0, 0, 10, 242, 0,
|
||||
16, 0, 4, 0, 0, 0,
|
||||
70, 14, 16, 0, 4, 0,
|
||||
0, 0, 2, 64, 0, 0,
|
||||
255, 0, 255, 0, 255, 0,
|
||||
255, 0, 255, 0, 255, 0,
|
||||
255, 0, 255, 0, 30, 0,
|
||||
0, 7, 242, 0, 16, 0,
|
||||
2, 0, 0, 0, 70, 14,
|
||||
16, 0, 3, 0, 0, 0,
|
||||
70, 14, 16, 0, 4, 0,
|
||||
0, 0, 21, 0, 0, 1,
|
||||
1, 0, 0, 10, 242, 0,
|
||||
16, 0, 3, 0, 0, 0,
|
||||
70, 14, 16, 0, 2, 0,
|
||||
0, 0, 2, 64, 0, 0,
|
||||
255, 255, 0, 0, 255, 255,
|
||||
0, 0, 255, 255, 0, 0,
|
||||
255, 255, 0, 0, 86, 0,
|
||||
0, 5, 242, 0, 16, 0,
|
||||
3, 0, 0, 0, 70, 14,
|
||||
16, 0, 3, 0, 0, 0,
|
||||
56, 0, 0, 10, 242, 0,
|
||||
16, 0, 3, 0, 0, 0,
|
||||
70, 14, 16, 0, 3, 0,
|
||||
0, 0, 2, 64, 0, 0,
|
||||
128, 0, 128, 55, 128, 0,
|
||||
128, 55, 128, 0, 128, 55,
|
||||
128, 0, 128, 55, 85, 0,
|
||||
0, 10, 242, 0, 16, 0,
|
||||
2, 0, 0, 0, 70, 14,
|
||||
16, 0, 2, 0, 0, 0,
|
||||
2, 64, 0, 0, 16, 0,
|
||||
0, 0, 16, 0, 0, 0,
|
||||
16, 0, 0, 0, 16, 0,
|
||||
0, 0, 86, 0, 0, 5,
|
||||
242, 0, 16, 0, 2, 0,
|
||||
0, 0, 70, 14, 16, 0,
|
||||
2, 0, 0, 0, 56, 0,
|
||||
0, 10, 242, 0, 16, 0,
|
||||
2, 0, 0, 0, 70, 14,
|
||||
16, 0, 2, 0, 0, 0,
|
||||
2, 64, 0, 0, 128, 0,
|
||||
128, 55, 128, 0, 128, 55,
|
||||
128, 0, 128, 55, 128, 0,
|
||||
128, 55, 130, 0, 0, 5,
|
||||
242, 0, 16, 0, 3, 0,
|
||||
0, 0, 70, 14, 16, 0,
|
||||
3, 0, 0, 0, 130, 0,
|
||||
0, 5, 242, 0, 16, 0,
|
||||
2, 0, 0, 0, 70, 14,
|
||||
16, 0, 2, 0, 0, 0,
|
||||
35, 0, 0, 12, 242, 0,
|
||||
16, 0, 2, 0, 0, 0,
|
||||
70, 14, 16, 0, 2, 0,
|
||||
0, 0, 2, 64, 0, 0,
|
||||
0, 0, 1, 0, 0, 0,
|
||||
1, 0, 0, 0, 1, 0,
|
||||
0, 0, 1, 0, 70, 14,
|
||||
16, 0, 3, 0, 0, 0,
|
||||
164, 0, 0, 8, 242, 224,
|
||||
33, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 6, 0,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
70, 14, 16, 0, 2, 0,
|
||||
0, 0, 62, 0, 0, 1,
|
||||
83, 84, 65, 84, 148, 0,
|
||||
0, 0, 113, 0, 0, 0,
|
||||
5, 0, 0, 0, 0, 0,
|
||||
0, 0, 1, 0, 0, 0,
|
||||
4, 0, 0, 0, 36, 0,
|
||||
0, 0, 23, 0, 0, 0,
|
||||
5, 0, 0, 0, 6, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 2, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
3, 0, 0, 0, 0, 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, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 2, 0, 0, 0
|
||||
};
|
1086
src/xenia/gpu/shaders/bytecode/d3d12_5_1/texture_load_r16_unorm_float_scaled_cs.h
generated
Normal file
1086
src/xenia/gpu/shaders/bytecode/d3d12_5_1/texture_load_r16_unorm_float_scaled_cs.h
generated
Normal file
File diff suppressed because it is too large
Load Diff
1113
src/xenia/gpu/shaders/bytecode/d3d12_5_1/texture_load_rg16_snorm_float_cs.h
generated
Normal file
1113
src/xenia/gpu/shaders/bytecode/d3d12_5_1/texture_load_rg16_snorm_float_cs.h
generated
Normal file
File diff suppressed because it is too large
Load Diff
1244
src/xenia/gpu/shaders/bytecode/d3d12_5_1/texture_load_rg16_snorm_float_scaled_cs.h
generated
Normal file
1244
src/xenia/gpu/shaders/bytecode/d3d12_5_1/texture_load_rg16_snorm_float_scaled_cs.h
generated
Normal file
File diff suppressed because it is too large
Load Diff
1075
src/xenia/gpu/shaders/bytecode/d3d12_5_1/texture_load_rg16_unorm_float_cs.h
generated
Normal file
1075
src/xenia/gpu/shaders/bytecode/d3d12_5_1/texture_load_rg16_unorm_float_cs.h
generated
Normal file
File diff suppressed because it is too large
Load Diff
1206
src/xenia/gpu/shaders/bytecode/d3d12_5_1/texture_load_rg16_unorm_float_scaled_cs.h
generated
Normal file
1206
src/xenia/gpu/shaders/bytecode/d3d12_5_1/texture_load_rg16_unorm_float_scaled_cs.h
generated
Normal file
File diff suppressed because it is too large
Load Diff
1142
src/xenia/gpu/shaders/bytecode/d3d12_5_1/texture_load_rgba16_snorm_float_cs.h
generated
Normal file
1142
src/xenia/gpu/shaders/bytecode/d3d12_5_1/texture_load_rgba16_snorm_float_cs.h
generated
Normal file
File diff suppressed because it is too large
Load Diff
1244
src/xenia/gpu/shaders/bytecode/d3d12_5_1/texture_load_rgba16_snorm_float_scaled_cs.h
generated
Normal file
1244
src/xenia/gpu/shaders/bytecode/d3d12_5_1/texture_load_rgba16_snorm_float_scaled_cs.h
generated
Normal file
File diff suppressed because it is too large
Load Diff
1104
src/xenia/gpu/shaders/bytecode/d3d12_5_1/texture_load_rgba16_unorm_float_cs.h
generated
Normal file
1104
src/xenia/gpu/shaders/bytecode/d3d12_5_1/texture_load_rgba16_unorm_float_cs.h
generated
Normal file
File diff suppressed because it is too large
Load Diff
1206
src/xenia/gpu/shaders/bytecode/d3d12_5_1/texture_load_rgba16_unorm_float_scaled_cs.h
generated
Normal file
1206
src/xenia/gpu/shaders/bytecode/d3d12_5_1/texture_load_rgba16_unorm_float_scaled_cs.h
generated
Normal file
File diff suppressed because it is too large
Load Diff
664
src/xenia/gpu/shaders/bytecode/vulkan_spirv/texture_load_r16_snorm_float_cs.h
generated
Normal file
664
src/xenia/gpu/shaders/bytecode/vulkan_spirv/texture_load_r16_snorm_float_cs.h
generated
Normal file
|
@ -0,0 +1,664 @@
|
|||
// Generated with `xb buildshaders`.
|
||||
#if 0
|
||||
; SPIR-V
|
||||
; Version: 1.0
|
||||
; Generator: Khronos Glslang Reference Front End; 10
|
||||
; Bound: 25179
|
||||
; Schema: 0
|
||||
OpCapability Shader
|
||||
%1 = OpExtInstImport "GLSL.std.450"
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %5663 "main" %gl_GlobalInvocationID
|
||||
OpExecutionMode %5663 LocalSize 2 32 1
|
||||
OpMemberDecorate %_struct_1161 0 Offset 0
|
||||
OpMemberDecorate %_struct_1161 1 Offset 4
|
||||
OpMemberDecorate %_struct_1161 2 Offset 8
|
||||
OpMemberDecorate %_struct_1161 3 Offset 12
|
||||
OpMemberDecorate %_struct_1161 4 Offset 16
|
||||
OpMemberDecorate %_struct_1161 5 Offset 28
|
||||
OpMemberDecorate %_struct_1161 6 Offset 32
|
||||
OpMemberDecorate %_struct_1161 7 Offset 36
|
||||
OpDecorate %_struct_1161 Block
|
||||
OpDecorate %5245 DescriptorSet 2
|
||||
OpDecorate %5245 Binding 0
|
||||
OpDecorate %gl_GlobalInvocationID BuiltIn GlobalInvocationId
|
||||
OpDecorate %_runtimearr_v4uint ArrayStride 16
|
||||
OpMemberDecorate %_struct_1972 0 NonReadable
|
||||
OpMemberDecorate %_struct_1972 0 Offset 0
|
||||
OpDecorate %_struct_1972 BufferBlock
|
||||
OpDecorate %5134 DescriptorSet 0
|
||||
OpDecorate %5134 Binding 0
|
||||
OpDecorate %_runtimearr_v4uint_0 ArrayStride 16
|
||||
OpMemberDecorate %_struct_1973 0 NonWritable
|
||||
OpMemberDecorate %_struct_1973 0 Offset 0
|
||||
OpDecorate %_struct_1973 BufferBlock
|
||||
OpDecorate %4218 DescriptorSet 1
|
||||
OpDecorate %4218 Binding 0
|
||||
OpDecorate %gl_WorkGroupSize BuiltIn WorkgroupSize
|
||||
%void = OpTypeVoid
|
||||
%1282 = OpTypeFunction %void
|
||||
%uint = OpTypeInt 32 0
|
||||
%v4uint = OpTypeVector %uint 4
|
||||
%int = OpTypeInt 32 1
|
||||
%v2int = OpTypeVector %int 2
|
||||
%v3int = OpTypeVector %int 3
|
||||
%bool = OpTypeBool
|
||||
%v3uint = OpTypeVector %uint 3
|
||||
%float = OpTypeFloat 32
|
||||
%v4float = OpTypeVector %float 4
|
||||
%float_n1 = OpConstant %float -1
|
||||
%1284 = OpConstantComposite %v4float %float_n1 %float_n1 %float_n1 %float_n1
|
||||
%v4int = OpTypeVector %int 4
|
||||
%int_16 = OpConstant %int 16
|
||||
%float_3_05185094en05 = OpConstant %float 3.05185094e-05
|
||||
%uint_0 = OpConstant %uint 0
|
||||
%v2float = OpTypeVector %float 2
|
||||
%uint_1 = OpConstant %uint 1
|
||||
%uint_2 = OpConstant %uint 2
|
||||
%uint_3 = OpConstant %uint 3
|
||||
%uint_16711935 = OpConstant %uint 16711935
|
||||
%uint_8 = OpConstant %uint 8
|
||||
%uint_4278255360 = OpConstant %uint 4278255360
|
||||
%int_5 = OpConstant %int 5
|
||||
%uint_5 = OpConstant %uint 5
|
||||
%uint_7 = OpConstant %uint 7
|
||||
%int_7 = OpConstant %int 7
|
||||
%int_14 = OpConstant %int 14
|
||||
%int_2 = OpConstant %int 2
|
||||
%int_n16 = OpConstant %int -16
|
||||
%int_1 = OpConstant %int 1
|
||||
%int_15 = OpConstant %int 15
|
||||
%int_4 = OpConstant %int 4
|
||||
%int_n512 = OpConstant %int -512
|
||||
%int_3 = OpConstant %int 3
|
||||
%int_448 = OpConstant %int 448
|
||||
%int_8 = OpConstant %int 8
|
||||
%int_6 = OpConstant %int 6
|
||||
%int_63 = OpConstant %int 63
|
||||
%uint_4 = OpConstant %uint 4
|
||||
%int_268435455 = OpConstant %int 268435455
|
||||
%int_n2 = OpConstant %int -2
|
||||
%uint_32 = OpConstant %uint 32
|
||||
%uint_64 = OpConstant %uint 64
|
||||
%_struct_1161 = OpTypeStruct %uint %uint %uint %uint %v3uint %uint %uint %uint
|
||||
%_ptr_Uniform__struct_1161 = OpTypePointer Uniform %_struct_1161
|
||||
%5245 = OpVariable %_ptr_Uniform__struct_1161 Uniform
|
||||
%int_0 = OpConstant %int 0
|
||||
%_ptr_Uniform_uint = OpTypePointer Uniform %uint
|
||||
%_ptr_Uniform_v3uint = OpTypePointer Uniform %v3uint
|
||||
%v2uint = OpTypeVector %uint 2
|
||||
%_ptr_Input_v3uint = OpTypePointer Input %v3uint
|
||||
%gl_GlobalInvocationID = OpVariable %_ptr_Input_v3uint Input
|
||||
%2612 = OpConstantComposite %v3uint %uint_4 %uint_0 %uint_0
|
||||
%v2bool = OpTypeVector %bool 2
|
||||
%_runtimearr_v4uint = OpTypeRuntimeArray %v4uint
|
||||
%_struct_1972 = OpTypeStruct %_runtimearr_v4uint
|
||||
%_ptr_Uniform__struct_1972 = OpTypePointer Uniform %_struct_1972
|
||||
%5134 = OpVariable %_ptr_Uniform__struct_1972 Uniform
|
||||
%_runtimearr_v4uint_0 = OpTypeRuntimeArray %v4uint
|
||||
%_struct_1973 = OpTypeStruct %_runtimearr_v4uint_0
|
||||
%_ptr_Uniform__struct_1973 = OpTypePointer Uniform %_struct_1973
|
||||
%4218 = OpVariable %_ptr_Uniform__struct_1973 Uniform
|
||||
%_ptr_Uniform_v4uint = OpTypePointer Uniform %v4uint
|
||||
%gl_WorkGroupSize = OpConstantComposite %v3uint %uint_2 %uint_32 %uint_1
|
||||
%2510 = OpConstantComposite %v4uint %uint_16711935 %uint_16711935 %uint_16711935 %uint_16711935
|
||||
%317 = OpConstantComposite %v4uint %uint_8 %uint_8 %uint_8 %uint_8
|
||||
%1838 = OpConstantComposite %v4uint %uint_4278255360 %uint_4278255360 %uint_4278255360 %uint_4278255360
|
||||
%770 = OpConstantComposite %v4int %int_16 %int_16 %int_16 %int_16
|
||||
%uint_16 = OpConstant %uint 16
|
||||
%5663 = OpFunction %void None %1282
|
||||
%15110 = OpLabel
|
||||
OpSelectionMerge %19578 None
|
||||
OpSwitch %uint_0 %15137
|
||||
%15137 = OpLabel
|
||||
%12591 = OpLoad %v3uint %gl_GlobalInvocationID
|
||||
%10229 = OpShiftLeftLogical %v3uint %12591 %2612
|
||||
%25178 = OpAccessChain %_ptr_Uniform_v3uint %5245 %int_4
|
||||
%22965 = OpLoad %v3uint %25178
|
||||
%18835 = OpVectorShuffle %v2uint %10229 %10229 0 1
|
||||
%6626 = OpVectorShuffle %v2uint %22965 %22965 0 1
|
||||
%17032 = OpUGreaterThanEqual %v2bool %18835 %6626
|
||||
%24679 = OpAny %bool %17032
|
||||
OpSelectionMerge %6282 DontFlatten
|
||||
OpBranchConditional %24679 %21992 %6282
|
||||
%21992 = OpLabel
|
||||
OpBranch %19578
|
||||
%6282 = OpLabel
|
||||
%6795 = OpBitcast %v3int %10229
|
||||
%18792 = OpAccessChain %_ptr_Uniform_uint %5245 %int_6
|
||||
%9788 = OpLoad %uint %18792
|
||||
%20376 = OpCompositeExtract %uint %22965 1
|
||||
%14692 = OpCompositeExtract %int %6795 0
|
||||
%22810 = OpIMul %int %14692 %int_2
|
||||
%6362 = OpCompositeExtract %int %6795 2
|
||||
%14505 = OpBitcast %int %20376
|
||||
%11279 = OpIMul %int %6362 %14505
|
||||
%17598 = OpCompositeExtract %int %6795 1
|
||||
%22228 = OpIAdd %int %11279 %17598
|
||||
%22405 = OpBitcast %int %9788
|
||||
%24535 = OpIMul %int %22228 %22405
|
||||
%7061 = OpIAdd %int %22810 %24535
|
||||
%19270 = OpBitcast %uint %7061
|
||||
%19460 = OpAccessChain %_ptr_Uniform_uint %5245 %int_5
|
||||
%22875 = OpLoad %uint %19460
|
||||
%8517 = OpIAdd %uint %19270 %22875
|
||||
%21670 = OpShiftRightLogical %uint %8517 %uint_4
|
||||
%20950 = OpAccessChain %_ptr_Uniform_uint %5245 %int_0
|
||||
%21411 = OpLoad %uint %20950
|
||||
%6381 = OpBitwiseAnd %uint %21411 %uint_1
|
||||
%10467 = OpINotEqual %bool %6381 %uint_0
|
||||
OpSelectionMerge %23266 DontFlatten
|
||||
OpBranchConditional %10467 %10108 %10765
|
||||
%10108 = OpLabel
|
||||
%23508 = OpBitwiseAnd %uint %21411 %uint_2
|
||||
%16300 = OpINotEqual %bool %23508 %uint_0
|
||||
OpSelectionMerge %7691 DontFlatten
|
||||
OpBranchConditional %16300 %12129 %25128
|
||||
%12129 = OpLabel
|
||||
%18210 = OpAccessChain %_ptr_Uniform_uint %5245 %int_2
|
||||
%15627 = OpLoad %uint %18210
|
||||
%22624 = OpAccessChain %_ptr_Uniform_uint %5245 %int_3
|
||||
%21535 = OpLoad %uint %22624
|
||||
%14923 = OpShiftRightArithmetic %int %17598 %int_4
|
||||
%18773 = OpShiftRightArithmetic %int %6362 %int_2
|
||||
%18759 = OpShiftRightLogical %uint %21535 %uint_4
|
||||
%6314 = OpBitcast %int %18759
|
||||
%21281 = OpIMul %int %18773 %6314
|
||||
%15143 = OpIAdd %int %14923 %21281
|
||||
%9032 = OpShiftRightLogical %uint %15627 %uint_5
|
||||
%14593 = OpBitcast %int %9032
|
||||
%8436 = OpIMul %int %15143 %14593
|
||||
%12986 = OpShiftRightArithmetic %int %14692 %int_5
|
||||
%24558 = OpIAdd %int %12986 %8436
|
||||
%8797 = OpShiftLeftLogical %int %24558 %uint_7
|
||||
%11510 = OpBitwiseAnd %int %8797 %int_268435455
|
||||
%18938 = OpShiftLeftLogical %int %11510 %int_1
|
||||
%19768 = OpBitwiseAnd %int %14692 %int_7
|
||||
%12600 = OpBitwiseAnd %int %17598 %int_6
|
||||
%17741 = OpShiftLeftLogical %int %12600 %int_2
|
||||
%17227 = OpIAdd %int %19768 %17741
|
||||
%7048 = OpShiftLeftLogical %int %17227 %uint_7
|
||||
%24035 = OpShiftRightArithmetic %int %7048 %int_6
|
||||
%8725 = OpShiftRightArithmetic %int %17598 %int_3
|
||||
%13731 = OpIAdd %int %8725 %18773
|
||||
%23052 = OpBitwiseAnd %int %13731 %int_1
|
||||
%16658 = OpShiftRightArithmetic %int %14692 %int_3
|
||||
%18794 = OpShiftLeftLogical %int %23052 %int_1
|
||||
%13501 = OpIAdd %int %16658 %18794
|
||||
%19165 = OpBitwiseAnd %int %13501 %int_3
|
||||
%21578 = OpShiftLeftLogical %int %19165 %int_1
|
||||
%15435 = OpIAdd %int %23052 %21578
|
||||
%13150 = OpBitwiseAnd %int %24035 %int_n16
|
||||
%20336 = OpIAdd %int %18938 %13150
|
||||
%23345 = OpShiftLeftLogical %int %20336 %int_1
|
||||
%23274 = OpBitwiseAnd %int %24035 %int_15
|
||||
%10332 = OpIAdd %int %23345 %23274
|
||||
%18356 = OpBitwiseAnd %int %6362 %int_3
|
||||
%21579 = OpShiftLeftLogical %int %18356 %uint_7
|
||||
%16727 = OpIAdd %int %10332 %21579
|
||||
%19166 = OpBitwiseAnd %int %17598 %int_1
|
||||
%21580 = OpShiftLeftLogical %int %19166 %int_4
|
||||
%16728 = OpIAdd %int %16727 %21580
|
||||
%20438 = OpBitwiseAnd %int %15435 %int_1
|
||||
%9987 = OpShiftLeftLogical %int %20438 %int_3
|
||||
%13106 = OpShiftRightArithmetic %int %16728 %int_6
|
||||
%14038 = OpBitwiseAnd %int %13106 %int_7
|
||||
%13330 = OpIAdd %int %9987 %14038
|
||||
%23346 = OpShiftLeftLogical %int %13330 %int_3
|
||||
%23217 = OpBitwiseAnd %int %15435 %int_n2
|
||||
%10908 = OpIAdd %int %23346 %23217
|
||||
%23347 = OpShiftLeftLogical %int %10908 %int_2
|
||||
%23218 = OpBitwiseAnd %int %16728 %int_n512
|
||||
%10909 = OpIAdd %int %23347 %23218
|
||||
%23348 = OpShiftLeftLogical %int %10909 %int_3
|
||||
%24224 = OpBitwiseAnd %int %16728 %int_63
|
||||
%21741 = OpIAdd %int %23348 %24224
|
||||
OpBranch %7691
|
||||
%25128 = OpLabel
|
||||
%6796 = OpBitcast %v2int %18835
|
||||
%18793 = OpAccessChain %_ptr_Uniform_uint %5245 %int_2
|
||||
%11954 = OpLoad %uint %18793
|
||||
%18756 = OpCompositeExtract %int %6796 0
|
||||
%19701 = OpShiftRightArithmetic %int %18756 %int_5
|
||||
%10055 = OpCompositeExtract %int %6796 1
|
||||
%16476 = OpShiftRightArithmetic %int %10055 %int_5
|
||||
%23373 = OpShiftRightLogical %uint %11954 %uint_5
|
||||
%6315 = OpBitcast %int %23373
|
||||
%21319 = OpIMul %int %16476 %6315
|
||||
%16222 = OpIAdd %int %19701 %21319
|
||||
%19086 = OpShiftLeftLogical %int %16222 %uint_8
|
||||
%10934 = OpBitwiseAnd %int %18756 %int_7
|
||||
%12601 = OpBitwiseAnd %int %10055 %int_14
|
||||
%17742 = OpShiftLeftLogical %int %12601 %int_2
|
||||
%17303 = OpIAdd %int %10934 %17742
|
||||
%6375 = OpShiftLeftLogical %int %17303 %uint_1
|
||||
%10161 = OpBitwiseAnd %int %6375 %int_n16
|
||||
%12150 = OpShiftLeftLogical %int %10161 %int_1
|
||||
%15436 = OpIAdd %int %19086 %12150
|
||||
%13207 = OpBitwiseAnd %int %6375 %int_15
|
||||
%19760 = OpIAdd %int %15436 %13207
|
||||
%18357 = OpBitwiseAnd %int %10055 %int_1
|
||||
%21581 = OpShiftLeftLogical %int %18357 %int_4
|
||||
%16729 = OpIAdd %int %19760 %21581
|
||||
%20514 = OpBitwiseAnd %int %16729 %int_n512
|
||||
%9238 = OpShiftLeftLogical %int %20514 %int_3
|
||||
%18995 = OpBitwiseAnd %int %10055 %int_16
|
||||
%12151 = OpShiftLeftLogical %int %18995 %int_7
|
||||
%16730 = OpIAdd %int %9238 %12151
|
||||
%19167 = OpBitwiseAnd %int %16729 %int_448
|
||||
%21582 = OpShiftLeftLogical %int %19167 %int_2
|
||||
%16708 = OpIAdd %int %16730 %21582
|
||||
%20611 = OpBitwiseAnd %int %10055 %int_8
|
||||
%16831 = OpShiftRightArithmetic %int %20611 %int_2
|
||||
%7916 = OpShiftRightArithmetic %int %18756 %int_3
|
||||
%13750 = OpIAdd %int %16831 %7916
|
||||
%21587 = OpBitwiseAnd %int %13750 %int_3
|
||||
%21583 = OpShiftLeftLogical %int %21587 %int_6
|
||||
%15437 = OpIAdd %int %16708 %21583
|
||||
%14157 = OpBitwiseAnd %int %16729 %int_63
|
||||
%12098 = OpIAdd %int %15437 %14157
|
||||
OpBranch %7691
|
||||
%7691 = OpLabel
|
||||
%10540 = OpPhi %int %21741 %12129 %12098 %25128
|
||||
OpBranch %23266
|
||||
%10765 = OpLabel
|
||||
%20632 = OpAccessChain %_ptr_Uniform_uint %5245 %int_2
|
||||
%15628 = OpLoad %uint %20632
|
||||
%21275 = OpAccessChain %_ptr_Uniform_uint %5245 %int_3
|
||||
%13550 = OpLoad %uint %21275
|
||||
%15070 = OpBitcast %int %13550
|
||||
%18927 = OpIMul %int %6362 %15070
|
||||
%8334 = OpIAdd %int %18927 %17598
|
||||
%8952 = OpBitcast %int %15628
|
||||
%7839 = OpIMul %int %8334 %8952
|
||||
%7984 = OpIAdd %int %22810 %7839
|
||||
OpBranch %23266
|
||||
%23266 = OpLabel
|
||||
%19748 = OpPhi %int %10540 %7691 %7984 %10765
|
||||
%24922 = OpAccessChain %_ptr_Uniform_uint %5245 %int_1
|
||||
%7502 = OpLoad %uint %24922
|
||||
%15686 = OpBitcast %int %7502
|
||||
%15579 = OpIAdd %int %15686 %19748
|
||||
%18556 = OpBitcast %uint %15579
|
||||
%21493 = OpShiftRightLogical %uint %18556 %uint_4
|
||||
%14997 = OpShiftRightLogical %uint %21411 %uint_2
|
||||
%8394 = OpBitwiseAnd %uint %14997 %uint_3
|
||||
%20727 = OpAccessChain %_ptr_Uniform_v4uint %4218 %int_0 %21493
|
||||
%9605 = OpLoad %v4uint %20727
|
||||
%21106 = OpIEqual %bool %8394 %uint_1
|
||||
OpSelectionMerge %12537 None
|
||||
OpBranchConditional %21106 %10583 %12537
|
||||
%10583 = OpLabel
|
||||
%18271 = OpBitwiseAnd %v4uint %9605 %2510
|
||||
%9425 = OpShiftLeftLogical %v4uint %18271 %317
|
||||
%20652 = OpBitwiseAnd %v4uint %9605 %1838
|
||||
%17549 = OpShiftRightLogical %v4uint %20652 %317
|
||||
%16376 = OpBitwiseOr %v4uint %9425 %17549
|
||||
OpBranch %12537
|
||||
%12537 = OpLabel
|
||||
%12106 = OpPhi %v4uint %9605 %23266 %16376 %10583
|
||||
%15375 = OpBitcast %v4int %12106
|
||||
%16910 = OpShiftLeftLogical %v4int %15375 %770
|
||||
%16536 = OpShiftRightArithmetic %v4int %16910 %770
|
||||
%10903 = OpConvertSToF %v4float %16536
|
||||
%20413 = OpVectorTimesScalar %v4float %10903 %float_3_05185094en05
|
||||
%23989 = OpExtInst %v4float %1 FMax %1284 %20413
|
||||
%14338 = OpShiftRightArithmetic %v4int %15375 %770
|
||||
%6607 = OpConvertSToF %v4float %14338
|
||||
%18247 = OpVectorTimesScalar %v4float %6607 %float_3_05185094en05
|
||||
%24070 = OpExtInst %v4float %1 FMax %1284 %18247
|
||||
%24330 = OpCompositeExtract %float %23989 0
|
||||
%14319 = OpCompositeExtract %float %24070 0
|
||||
%19232 = OpCompositeConstruct %v2float %24330 %14319
|
||||
%8561 = OpExtInst %uint %1 PackHalf2x16 %19232
|
||||
%23487 = OpCompositeExtract %float %23989 1
|
||||
%14759 = OpCompositeExtract %float %24070 1
|
||||
%19233 = OpCompositeConstruct %v2float %23487 %14759
|
||||
%8562 = OpExtInst %uint %1 PackHalf2x16 %19233
|
||||
%23488 = OpCompositeExtract %float %23989 2
|
||||
%14760 = OpCompositeExtract %float %24070 2
|
||||
%19234 = OpCompositeConstruct %v2float %23488 %14760
|
||||
%8563 = OpExtInst %uint %1 PackHalf2x16 %19234
|
||||
%23489 = OpCompositeExtract %float %23989 3
|
||||
%14761 = OpCompositeExtract %float %24070 3
|
||||
%19213 = OpCompositeConstruct %v2float %23489 %14761
|
||||
%8430 = OpExtInst %uint %1 PackHalf2x16 %19213
|
||||
%15035 = OpCompositeConstruct %v4uint %8561 %8562 %8563 %8430
|
||||
%17859 = OpAccessChain %_ptr_Uniform_v4uint %5134 %int_0 %21670
|
||||
OpStore %17859 %15035
|
||||
%15044 = OpIAdd %uint %21670 %int_1
|
||||
%18776 = OpSelect %uint %10467 %uint_64 %uint_16
|
||||
%11803 = OpShiftRightLogical %uint %18776 %uint_4
|
||||
%13947 = OpIAdd %uint %21493 %11803
|
||||
%22298 = OpAccessChain %_ptr_Uniform_v4uint %4218 %int_0 %13947
|
||||
%6578 = OpLoad %v4uint %22298
|
||||
OpSelectionMerge %12538 None
|
||||
OpBranchConditional %21106 %10584 %12538
|
||||
%10584 = OpLabel
|
||||
%18272 = OpBitwiseAnd %v4uint %6578 %2510
|
||||
%9426 = OpShiftLeftLogical %v4uint %18272 %317
|
||||
%20653 = OpBitwiseAnd %v4uint %6578 %1838
|
||||
%17550 = OpShiftRightLogical %v4uint %20653 %317
|
||||
%16377 = OpBitwiseOr %v4uint %9426 %17550
|
||||
OpBranch %12538
|
||||
%12538 = OpLabel
|
||||
%12107 = OpPhi %v4uint %6578 %12537 %16377 %10584
|
||||
%15376 = OpBitcast %v4int %12107
|
||||
%16911 = OpShiftLeftLogical %v4int %15376 %770
|
||||
%16537 = OpShiftRightArithmetic %v4int %16911 %770
|
||||
%10904 = OpConvertSToF %v4float %16537
|
||||
%20414 = OpVectorTimesScalar %v4float %10904 %float_3_05185094en05
|
||||
%23990 = OpExtInst %v4float %1 FMax %1284 %20414
|
||||
%14339 = OpShiftRightArithmetic %v4int %15376 %770
|
||||
%6608 = OpConvertSToF %v4float %14339
|
||||
%18248 = OpVectorTimesScalar %v4float %6608 %float_3_05185094en05
|
||||
%24071 = OpExtInst %v4float %1 FMax %1284 %18248
|
||||
%24331 = OpCompositeExtract %float %23990 0
|
||||
%14320 = OpCompositeExtract %float %24071 0
|
||||
%19235 = OpCompositeConstruct %v2float %24331 %14320
|
||||
%8564 = OpExtInst %uint %1 PackHalf2x16 %19235
|
||||
%23490 = OpCompositeExtract %float %23990 1
|
||||
%14762 = OpCompositeExtract %float %24071 1
|
||||
%19236 = OpCompositeConstruct %v2float %23490 %14762
|
||||
%8565 = OpExtInst %uint %1 PackHalf2x16 %19236
|
||||
%23491 = OpCompositeExtract %float %23990 2
|
||||
%14763 = OpCompositeExtract %float %24071 2
|
||||
%19237 = OpCompositeConstruct %v2float %23491 %14763
|
||||
%8566 = OpExtInst %uint %1 PackHalf2x16 %19237
|
||||
%23492 = OpCompositeExtract %float %23990 3
|
||||
%14764 = OpCompositeExtract %float %24071 3
|
||||
%19214 = OpCompositeConstruct %v2float %23492 %14764
|
||||
%8431 = OpExtInst %uint %1 PackHalf2x16 %19214
|
||||
%15036 = OpCompositeConstruct %v4uint %8564 %8565 %8566 %8431
|
||||
%20158 = OpAccessChain %_ptr_Uniform_v4uint %5134 %int_0 %15044
|
||||
OpStore %20158 %15036
|
||||
OpBranch %19578
|
||||
%19578 = OpLabel
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
#endif
|
||||
|
||||
const uint32_t texture_load_r16_snorm_float_cs[] = {
|
||||
0x07230203, 0x00010000, 0x0008000A, 0x0000625B, 0x00000000, 0x00020011,
|
||||
0x00000001, 0x0006000B, 0x00000001, 0x4C534C47, 0x6474732E, 0x3035342E,
|
||||
0x00000000, 0x0003000E, 0x00000000, 0x00000001, 0x0006000F, 0x00000005,
|
||||
0x0000161F, 0x6E69616D, 0x00000000, 0x00000F48, 0x00060010, 0x0000161F,
|
||||
0x00000011, 0x00000002, 0x00000020, 0x00000001, 0x00050048, 0x00000489,
|
||||
0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x00000489, 0x00000001,
|
||||
0x00000023, 0x00000004, 0x00050048, 0x00000489, 0x00000002, 0x00000023,
|
||||
0x00000008, 0x00050048, 0x00000489, 0x00000003, 0x00000023, 0x0000000C,
|
||||
0x00050048, 0x00000489, 0x00000004, 0x00000023, 0x00000010, 0x00050048,
|
||||
0x00000489, 0x00000005, 0x00000023, 0x0000001C, 0x00050048, 0x00000489,
|
||||
0x00000006, 0x00000023, 0x00000020, 0x00050048, 0x00000489, 0x00000007,
|
||||
0x00000023, 0x00000024, 0x00030047, 0x00000489, 0x00000002, 0x00040047,
|
||||
0x0000147D, 0x00000022, 0x00000002, 0x00040047, 0x0000147D, 0x00000021,
|
||||
0x00000000, 0x00040047, 0x00000F48, 0x0000000B, 0x0000001C, 0x00040047,
|
||||
0x000007DC, 0x00000006, 0x00000010, 0x00040048, 0x000007B4, 0x00000000,
|
||||
0x00000019, 0x00050048, 0x000007B4, 0x00000000, 0x00000023, 0x00000000,
|
||||
0x00030047, 0x000007B4, 0x00000003, 0x00040047, 0x0000140E, 0x00000022,
|
||||
0x00000000, 0x00040047, 0x0000140E, 0x00000021, 0x00000000, 0x00040047,
|
||||
0x000007DD, 0x00000006, 0x00000010, 0x00040048, 0x000007B5, 0x00000000,
|
||||
0x00000018, 0x00050048, 0x000007B5, 0x00000000, 0x00000023, 0x00000000,
|
||||
0x00030047, 0x000007B5, 0x00000003, 0x00040047, 0x0000107A, 0x00000022,
|
||||
0x00000001, 0x00040047, 0x0000107A, 0x00000021, 0x00000000, 0x00040047,
|
||||
0x00000BB1, 0x0000000B, 0x00000019, 0x00020013, 0x00000008, 0x00030021,
|
||||
0x00000502, 0x00000008, 0x00040015, 0x0000000B, 0x00000020, 0x00000000,
|
||||
0x00040017, 0x00000017, 0x0000000B, 0x00000004, 0x00040015, 0x0000000C,
|
||||
0x00000020, 0x00000001, 0x00040017, 0x00000012, 0x0000000C, 0x00000002,
|
||||
0x00040017, 0x00000016, 0x0000000C, 0x00000003, 0x00020014, 0x00000009,
|
||||
0x00040017, 0x00000014, 0x0000000B, 0x00000003, 0x00030016, 0x0000000D,
|
||||
0x00000020, 0x00040017, 0x0000001D, 0x0000000D, 0x00000004, 0x0004002B,
|
||||
0x0000000D, 0x00000341, 0xBF800000, 0x0007002C, 0x0000001D, 0x00000504,
|
||||
0x00000341, 0x00000341, 0x00000341, 0x00000341, 0x00040017, 0x0000001A,
|
||||
0x0000000C, 0x00000004, 0x0004002B, 0x0000000C, 0x00000A3B, 0x00000010,
|
||||
0x0004002B, 0x0000000D, 0x00000A38, 0x38000100, 0x0004002B, 0x0000000B,
|
||||
0x00000A0A, 0x00000000, 0x00040017, 0x00000013, 0x0000000D, 0x00000002,
|
||||
0x0004002B, 0x0000000B, 0x00000A0D, 0x00000001, 0x0004002B, 0x0000000B,
|
||||
0x00000A10, 0x00000002, 0x0004002B, 0x0000000B, 0x00000A13, 0x00000003,
|
||||
0x0004002B, 0x0000000B, 0x000008A6, 0x00FF00FF, 0x0004002B, 0x0000000B,
|
||||
0x00000A22, 0x00000008, 0x0004002B, 0x0000000B, 0x000005FD, 0xFF00FF00,
|
||||
0x0004002B, 0x0000000C, 0x00000A1A, 0x00000005, 0x0004002B, 0x0000000B,
|
||||
0x00000A19, 0x00000005, 0x0004002B, 0x0000000B, 0x00000A1F, 0x00000007,
|
||||
0x0004002B, 0x0000000C, 0x00000A20, 0x00000007, 0x0004002B, 0x0000000C,
|
||||
0x00000A35, 0x0000000E, 0x0004002B, 0x0000000C, 0x00000A11, 0x00000002,
|
||||
0x0004002B, 0x0000000C, 0x000009DB, 0xFFFFFFF0, 0x0004002B, 0x0000000C,
|
||||
0x00000A0E, 0x00000001, 0x0004002B, 0x0000000C, 0x00000A39, 0x0000000F,
|
||||
0x0004002B, 0x0000000C, 0x00000A17, 0x00000004, 0x0004002B, 0x0000000C,
|
||||
0x0000040B, 0xFFFFFE00, 0x0004002B, 0x0000000C, 0x00000A14, 0x00000003,
|
||||
0x0004002B, 0x0000000C, 0x00000388, 0x000001C0, 0x0004002B, 0x0000000C,
|
||||
0x00000A23, 0x00000008, 0x0004002B, 0x0000000C, 0x00000A1D, 0x00000006,
|
||||
0x0004002B, 0x0000000C, 0x00000AC8, 0x0000003F, 0x0004002B, 0x0000000B,
|
||||
0x00000A16, 0x00000004, 0x0004002B, 0x0000000C, 0x0000078B, 0x0FFFFFFF,
|
||||
0x0004002B, 0x0000000C, 0x00000A05, 0xFFFFFFFE, 0x0004002B, 0x0000000B,
|
||||
0x00000A6A, 0x00000020, 0x0004002B, 0x0000000B, 0x00000ACA, 0x00000040,
|
||||
0x000A001E, 0x00000489, 0x0000000B, 0x0000000B, 0x0000000B, 0x0000000B,
|
||||
0x00000014, 0x0000000B, 0x0000000B, 0x0000000B, 0x00040020, 0x00000706,
|
||||
0x00000002, 0x00000489, 0x0004003B, 0x00000706, 0x0000147D, 0x00000002,
|
||||
0x0004002B, 0x0000000C, 0x00000A0B, 0x00000000, 0x00040020, 0x00000288,
|
||||
0x00000002, 0x0000000B, 0x00040020, 0x00000291, 0x00000002, 0x00000014,
|
||||
0x00040017, 0x00000011, 0x0000000B, 0x00000002, 0x00040020, 0x00000292,
|
||||
0x00000001, 0x00000014, 0x0004003B, 0x00000292, 0x00000F48, 0x00000001,
|
||||
0x0006002C, 0x00000014, 0x00000A34, 0x00000A16, 0x00000A0A, 0x00000A0A,
|
||||
0x00040017, 0x0000000F, 0x00000009, 0x00000002, 0x0003001D, 0x000007DC,
|
||||
0x00000017, 0x0003001E, 0x000007B4, 0x000007DC, 0x00040020, 0x00000A31,
|
||||
0x00000002, 0x000007B4, 0x0004003B, 0x00000A31, 0x0000140E, 0x00000002,
|
||||
0x0003001D, 0x000007DD, 0x00000017, 0x0003001E, 0x000007B5, 0x000007DD,
|
||||
0x00040020, 0x00000A32, 0x00000002, 0x000007B5, 0x0004003B, 0x00000A32,
|
||||
0x0000107A, 0x00000002, 0x00040020, 0x00000294, 0x00000002, 0x00000017,
|
||||
0x0006002C, 0x00000014, 0x00000BB1, 0x00000A10, 0x00000A6A, 0x00000A0D,
|
||||
0x0007002C, 0x00000017, 0x000009CE, 0x000008A6, 0x000008A6, 0x000008A6,
|
||||
0x000008A6, 0x0007002C, 0x00000017, 0x0000013D, 0x00000A22, 0x00000A22,
|
||||
0x00000A22, 0x00000A22, 0x0007002C, 0x00000017, 0x0000072E, 0x000005FD,
|
||||
0x000005FD, 0x000005FD, 0x000005FD, 0x0007002C, 0x0000001A, 0x00000302,
|
||||
0x00000A3B, 0x00000A3B, 0x00000A3B, 0x00000A3B, 0x0004002B, 0x0000000B,
|
||||
0x00000A3A, 0x00000010, 0x00050036, 0x00000008, 0x0000161F, 0x00000000,
|
||||
0x00000502, 0x000200F8, 0x00003B06, 0x000300F7, 0x00004C7A, 0x00000000,
|
||||
0x000300FB, 0x00000A0A, 0x00003B21, 0x000200F8, 0x00003B21, 0x0004003D,
|
||||
0x00000014, 0x0000312F, 0x00000F48, 0x000500C4, 0x00000014, 0x000027F5,
|
||||
0x0000312F, 0x00000A34, 0x00050041, 0x00000291, 0x0000625A, 0x0000147D,
|
||||
0x00000A17, 0x0004003D, 0x00000014, 0x000059B5, 0x0000625A, 0x0007004F,
|
||||
0x00000011, 0x00004993, 0x000027F5, 0x000027F5, 0x00000000, 0x00000001,
|
||||
0x0007004F, 0x00000011, 0x000019E2, 0x000059B5, 0x000059B5, 0x00000000,
|
||||
0x00000001, 0x000500AE, 0x0000000F, 0x00004288, 0x00004993, 0x000019E2,
|
||||
0x0004009A, 0x00000009, 0x00006067, 0x00004288, 0x000300F7, 0x0000188A,
|
||||
0x00000002, 0x000400FA, 0x00006067, 0x000055E8, 0x0000188A, 0x000200F8,
|
||||
0x000055E8, 0x000200F9, 0x00004C7A, 0x000200F8, 0x0000188A, 0x0004007C,
|
||||
0x00000016, 0x00001A8B, 0x000027F5, 0x00050041, 0x00000288, 0x00004968,
|
||||
0x0000147D, 0x00000A1D, 0x0004003D, 0x0000000B, 0x0000263C, 0x00004968,
|
||||
0x00050051, 0x0000000B, 0x00004F98, 0x000059B5, 0x00000001, 0x00050051,
|
||||
0x0000000C, 0x00003964, 0x00001A8B, 0x00000000, 0x00050084, 0x0000000C,
|
||||
0x0000591A, 0x00003964, 0x00000A11, 0x00050051, 0x0000000C, 0x000018DA,
|
||||
0x00001A8B, 0x00000002, 0x0004007C, 0x0000000C, 0x000038A9, 0x00004F98,
|
||||
0x00050084, 0x0000000C, 0x00002C0F, 0x000018DA, 0x000038A9, 0x00050051,
|
||||
0x0000000C, 0x000044BE, 0x00001A8B, 0x00000001, 0x00050080, 0x0000000C,
|
||||
0x000056D4, 0x00002C0F, 0x000044BE, 0x0004007C, 0x0000000C, 0x00005785,
|
||||
0x0000263C, 0x00050084, 0x0000000C, 0x00005FD7, 0x000056D4, 0x00005785,
|
||||
0x00050080, 0x0000000C, 0x00001B95, 0x0000591A, 0x00005FD7, 0x0004007C,
|
||||
0x0000000B, 0x00004B46, 0x00001B95, 0x00050041, 0x00000288, 0x00004C04,
|
||||
0x0000147D, 0x00000A1A, 0x0004003D, 0x0000000B, 0x0000595B, 0x00004C04,
|
||||
0x00050080, 0x0000000B, 0x00002145, 0x00004B46, 0x0000595B, 0x000500C2,
|
||||
0x0000000B, 0x000054A6, 0x00002145, 0x00000A16, 0x00050041, 0x00000288,
|
||||
0x000051D6, 0x0000147D, 0x00000A0B, 0x0004003D, 0x0000000B, 0x000053A3,
|
||||
0x000051D6, 0x000500C7, 0x0000000B, 0x000018ED, 0x000053A3, 0x00000A0D,
|
||||
0x000500AB, 0x00000009, 0x000028E3, 0x000018ED, 0x00000A0A, 0x000300F7,
|
||||
0x00005AE2, 0x00000002, 0x000400FA, 0x000028E3, 0x0000277C, 0x00002A0D,
|
||||
0x000200F8, 0x0000277C, 0x000500C7, 0x0000000B, 0x00005BD4, 0x000053A3,
|
||||
0x00000A10, 0x000500AB, 0x00000009, 0x00003FAC, 0x00005BD4, 0x00000A0A,
|
||||
0x000300F7, 0x00001E0B, 0x00000002, 0x000400FA, 0x00003FAC, 0x00002F61,
|
||||
0x00006228, 0x000200F8, 0x00002F61, 0x00050041, 0x00000288, 0x00004722,
|
||||
0x0000147D, 0x00000A11, 0x0004003D, 0x0000000B, 0x00003D0B, 0x00004722,
|
||||
0x00050041, 0x00000288, 0x00005860, 0x0000147D, 0x00000A14, 0x0004003D,
|
||||
0x0000000B, 0x0000541F, 0x00005860, 0x000500C3, 0x0000000C, 0x00003A4B,
|
||||
0x000044BE, 0x00000A17, 0x000500C3, 0x0000000C, 0x00004955, 0x000018DA,
|
||||
0x00000A11, 0x000500C2, 0x0000000B, 0x00004947, 0x0000541F, 0x00000A16,
|
||||
0x0004007C, 0x0000000C, 0x000018AA, 0x00004947, 0x00050084, 0x0000000C,
|
||||
0x00005321, 0x00004955, 0x000018AA, 0x00050080, 0x0000000C, 0x00003B27,
|
||||
0x00003A4B, 0x00005321, 0x000500C2, 0x0000000B, 0x00002348, 0x00003D0B,
|
||||
0x00000A19, 0x0004007C, 0x0000000C, 0x00003901, 0x00002348, 0x00050084,
|
||||
0x0000000C, 0x000020F4, 0x00003B27, 0x00003901, 0x000500C3, 0x0000000C,
|
||||
0x000032BA, 0x00003964, 0x00000A1A, 0x00050080, 0x0000000C, 0x00005FEE,
|
||||
0x000032BA, 0x000020F4, 0x000500C4, 0x0000000C, 0x0000225D, 0x00005FEE,
|
||||
0x00000A1F, 0x000500C7, 0x0000000C, 0x00002CF6, 0x0000225D, 0x0000078B,
|
||||
0x000500C4, 0x0000000C, 0x000049FA, 0x00002CF6, 0x00000A0E, 0x000500C7,
|
||||
0x0000000C, 0x00004D38, 0x00003964, 0x00000A20, 0x000500C7, 0x0000000C,
|
||||
0x00003138, 0x000044BE, 0x00000A1D, 0x000500C4, 0x0000000C, 0x0000454D,
|
||||
0x00003138, 0x00000A11, 0x00050080, 0x0000000C, 0x0000434B, 0x00004D38,
|
||||
0x0000454D, 0x000500C4, 0x0000000C, 0x00001B88, 0x0000434B, 0x00000A1F,
|
||||
0x000500C3, 0x0000000C, 0x00005DE3, 0x00001B88, 0x00000A1D, 0x000500C3,
|
||||
0x0000000C, 0x00002215, 0x000044BE, 0x00000A14, 0x00050080, 0x0000000C,
|
||||
0x000035A3, 0x00002215, 0x00004955, 0x000500C7, 0x0000000C, 0x00005A0C,
|
||||
0x000035A3, 0x00000A0E, 0x000500C3, 0x0000000C, 0x00004112, 0x00003964,
|
||||
0x00000A14, 0x000500C4, 0x0000000C, 0x0000496A, 0x00005A0C, 0x00000A0E,
|
||||
0x00050080, 0x0000000C, 0x000034BD, 0x00004112, 0x0000496A, 0x000500C7,
|
||||
0x0000000C, 0x00004ADD, 0x000034BD, 0x00000A14, 0x000500C4, 0x0000000C,
|
||||
0x0000544A, 0x00004ADD, 0x00000A0E, 0x00050080, 0x0000000C, 0x00003C4B,
|
||||
0x00005A0C, 0x0000544A, 0x000500C7, 0x0000000C, 0x0000335E, 0x00005DE3,
|
||||
0x000009DB, 0x00050080, 0x0000000C, 0x00004F70, 0x000049FA, 0x0000335E,
|
||||
0x000500C4, 0x0000000C, 0x00005B31, 0x00004F70, 0x00000A0E, 0x000500C7,
|
||||
0x0000000C, 0x00005AEA, 0x00005DE3, 0x00000A39, 0x00050080, 0x0000000C,
|
||||
0x0000285C, 0x00005B31, 0x00005AEA, 0x000500C7, 0x0000000C, 0x000047B4,
|
||||
0x000018DA, 0x00000A14, 0x000500C4, 0x0000000C, 0x0000544B, 0x000047B4,
|
||||
0x00000A1F, 0x00050080, 0x0000000C, 0x00004157, 0x0000285C, 0x0000544B,
|
||||
0x000500C7, 0x0000000C, 0x00004ADE, 0x000044BE, 0x00000A0E, 0x000500C4,
|
||||
0x0000000C, 0x0000544C, 0x00004ADE, 0x00000A17, 0x00050080, 0x0000000C,
|
||||
0x00004158, 0x00004157, 0x0000544C, 0x000500C7, 0x0000000C, 0x00004FD6,
|
||||
0x00003C4B, 0x00000A0E, 0x000500C4, 0x0000000C, 0x00002703, 0x00004FD6,
|
||||
0x00000A14, 0x000500C3, 0x0000000C, 0x00003332, 0x00004158, 0x00000A1D,
|
||||
0x000500C7, 0x0000000C, 0x000036D6, 0x00003332, 0x00000A20, 0x00050080,
|
||||
0x0000000C, 0x00003412, 0x00002703, 0x000036D6, 0x000500C4, 0x0000000C,
|
||||
0x00005B32, 0x00003412, 0x00000A14, 0x000500C7, 0x0000000C, 0x00005AB1,
|
||||
0x00003C4B, 0x00000A05, 0x00050080, 0x0000000C, 0x00002A9C, 0x00005B32,
|
||||
0x00005AB1, 0x000500C4, 0x0000000C, 0x00005B33, 0x00002A9C, 0x00000A11,
|
||||
0x000500C7, 0x0000000C, 0x00005AB2, 0x00004158, 0x0000040B, 0x00050080,
|
||||
0x0000000C, 0x00002A9D, 0x00005B33, 0x00005AB2, 0x000500C4, 0x0000000C,
|
||||
0x00005B34, 0x00002A9D, 0x00000A14, 0x000500C7, 0x0000000C, 0x00005EA0,
|
||||
0x00004158, 0x00000AC8, 0x00050080, 0x0000000C, 0x000054ED, 0x00005B34,
|
||||
0x00005EA0, 0x000200F9, 0x00001E0B, 0x000200F8, 0x00006228, 0x0004007C,
|
||||
0x00000012, 0x00001A8C, 0x00004993, 0x00050041, 0x00000288, 0x00004969,
|
||||
0x0000147D, 0x00000A11, 0x0004003D, 0x0000000B, 0x00002EB2, 0x00004969,
|
||||
0x00050051, 0x0000000C, 0x00004944, 0x00001A8C, 0x00000000, 0x000500C3,
|
||||
0x0000000C, 0x00004CF5, 0x00004944, 0x00000A1A, 0x00050051, 0x0000000C,
|
||||
0x00002747, 0x00001A8C, 0x00000001, 0x000500C3, 0x0000000C, 0x0000405C,
|
||||
0x00002747, 0x00000A1A, 0x000500C2, 0x0000000B, 0x00005B4D, 0x00002EB2,
|
||||
0x00000A19, 0x0004007C, 0x0000000C, 0x000018AB, 0x00005B4D, 0x00050084,
|
||||
0x0000000C, 0x00005347, 0x0000405C, 0x000018AB, 0x00050080, 0x0000000C,
|
||||
0x00003F5E, 0x00004CF5, 0x00005347, 0x000500C4, 0x0000000C, 0x00004A8E,
|
||||
0x00003F5E, 0x00000A22, 0x000500C7, 0x0000000C, 0x00002AB6, 0x00004944,
|
||||
0x00000A20, 0x000500C7, 0x0000000C, 0x00003139, 0x00002747, 0x00000A35,
|
||||
0x000500C4, 0x0000000C, 0x0000454E, 0x00003139, 0x00000A11, 0x00050080,
|
||||
0x0000000C, 0x00004397, 0x00002AB6, 0x0000454E, 0x000500C4, 0x0000000C,
|
||||
0x000018E7, 0x00004397, 0x00000A0D, 0x000500C7, 0x0000000C, 0x000027B1,
|
||||
0x000018E7, 0x000009DB, 0x000500C4, 0x0000000C, 0x00002F76, 0x000027B1,
|
||||
0x00000A0E, 0x00050080, 0x0000000C, 0x00003C4C, 0x00004A8E, 0x00002F76,
|
||||
0x000500C7, 0x0000000C, 0x00003397, 0x000018E7, 0x00000A39, 0x00050080,
|
||||
0x0000000C, 0x00004D30, 0x00003C4C, 0x00003397, 0x000500C7, 0x0000000C,
|
||||
0x000047B5, 0x00002747, 0x00000A0E, 0x000500C4, 0x0000000C, 0x0000544D,
|
||||
0x000047B5, 0x00000A17, 0x00050080, 0x0000000C, 0x00004159, 0x00004D30,
|
||||
0x0000544D, 0x000500C7, 0x0000000C, 0x00005022, 0x00004159, 0x0000040B,
|
||||
0x000500C4, 0x0000000C, 0x00002416, 0x00005022, 0x00000A14, 0x000500C7,
|
||||
0x0000000C, 0x00004A33, 0x00002747, 0x00000A3B, 0x000500C4, 0x0000000C,
|
||||
0x00002F77, 0x00004A33, 0x00000A20, 0x00050080, 0x0000000C, 0x0000415A,
|
||||
0x00002416, 0x00002F77, 0x000500C7, 0x0000000C, 0x00004ADF, 0x00004159,
|
||||
0x00000388, 0x000500C4, 0x0000000C, 0x0000544E, 0x00004ADF, 0x00000A11,
|
||||
0x00050080, 0x0000000C, 0x00004144, 0x0000415A, 0x0000544E, 0x000500C7,
|
||||
0x0000000C, 0x00005083, 0x00002747, 0x00000A23, 0x000500C3, 0x0000000C,
|
||||
0x000041BF, 0x00005083, 0x00000A11, 0x000500C3, 0x0000000C, 0x00001EEC,
|
||||
0x00004944, 0x00000A14, 0x00050080, 0x0000000C, 0x000035B6, 0x000041BF,
|
||||
0x00001EEC, 0x000500C7, 0x0000000C, 0x00005453, 0x000035B6, 0x00000A14,
|
||||
0x000500C4, 0x0000000C, 0x0000544F, 0x00005453, 0x00000A1D, 0x00050080,
|
||||
0x0000000C, 0x00003C4D, 0x00004144, 0x0000544F, 0x000500C7, 0x0000000C,
|
||||
0x0000374D, 0x00004159, 0x00000AC8, 0x00050080, 0x0000000C, 0x00002F42,
|
||||
0x00003C4D, 0x0000374D, 0x000200F9, 0x00001E0B, 0x000200F8, 0x00001E0B,
|
||||
0x000700F5, 0x0000000C, 0x0000292C, 0x000054ED, 0x00002F61, 0x00002F42,
|
||||
0x00006228, 0x000200F9, 0x00005AE2, 0x000200F8, 0x00002A0D, 0x00050041,
|
||||
0x00000288, 0x00005098, 0x0000147D, 0x00000A11, 0x0004003D, 0x0000000B,
|
||||
0x00003D0C, 0x00005098, 0x00050041, 0x00000288, 0x0000531B, 0x0000147D,
|
||||
0x00000A14, 0x0004003D, 0x0000000B, 0x000034EE, 0x0000531B, 0x0004007C,
|
||||
0x0000000C, 0x00003ADE, 0x000034EE, 0x00050084, 0x0000000C, 0x000049EF,
|
||||
0x000018DA, 0x00003ADE, 0x00050080, 0x0000000C, 0x0000208E, 0x000049EF,
|
||||
0x000044BE, 0x0004007C, 0x0000000C, 0x000022F8, 0x00003D0C, 0x00050084,
|
||||
0x0000000C, 0x00001E9F, 0x0000208E, 0x000022F8, 0x00050080, 0x0000000C,
|
||||
0x00001F30, 0x0000591A, 0x00001E9F, 0x000200F9, 0x00005AE2, 0x000200F8,
|
||||
0x00005AE2, 0x000700F5, 0x0000000C, 0x00004D24, 0x0000292C, 0x00001E0B,
|
||||
0x00001F30, 0x00002A0D, 0x00050041, 0x00000288, 0x0000615A, 0x0000147D,
|
||||
0x00000A0E, 0x0004003D, 0x0000000B, 0x00001D4E, 0x0000615A, 0x0004007C,
|
||||
0x0000000C, 0x00003D46, 0x00001D4E, 0x00050080, 0x0000000C, 0x00003CDB,
|
||||
0x00003D46, 0x00004D24, 0x0004007C, 0x0000000B, 0x0000487C, 0x00003CDB,
|
||||
0x000500C2, 0x0000000B, 0x000053F5, 0x0000487C, 0x00000A16, 0x000500C2,
|
||||
0x0000000B, 0x00003A95, 0x000053A3, 0x00000A10, 0x000500C7, 0x0000000B,
|
||||
0x000020CA, 0x00003A95, 0x00000A13, 0x00060041, 0x00000294, 0x000050F7,
|
||||
0x0000107A, 0x00000A0B, 0x000053F5, 0x0004003D, 0x00000017, 0x00002585,
|
||||
0x000050F7, 0x000500AA, 0x00000009, 0x00005272, 0x000020CA, 0x00000A0D,
|
||||
0x000300F7, 0x000030F9, 0x00000000, 0x000400FA, 0x00005272, 0x00002957,
|
||||
0x000030F9, 0x000200F8, 0x00002957, 0x000500C7, 0x00000017, 0x0000475F,
|
||||
0x00002585, 0x000009CE, 0x000500C4, 0x00000017, 0x000024D1, 0x0000475F,
|
||||
0x0000013D, 0x000500C7, 0x00000017, 0x000050AC, 0x00002585, 0x0000072E,
|
||||
0x000500C2, 0x00000017, 0x0000448D, 0x000050AC, 0x0000013D, 0x000500C5,
|
||||
0x00000017, 0x00003FF8, 0x000024D1, 0x0000448D, 0x000200F9, 0x000030F9,
|
||||
0x000200F8, 0x000030F9, 0x000700F5, 0x00000017, 0x00002F4A, 0x00002585,
|
||||
0x00005AE2, 0x00003FF8, 0x00002957, 0x0004007C, 0x0000001A, 0x00003C0F,
|
||||
0x00002F4A, 0x000500C4, 0x0000001A, 0x0000420E, 0x00003C0F, 0x00000302,
|
||||
0x000500C3, 0x0000001A, 0x00004098, 0x0000420E, 0x00000302, 0x0004006F,
|
||||
0x0000001D, 0x00002A97, 0x00004098, 0x0005008E, 0x0000001D, 0x00004FBD,
|
||||
0x00002A97, 0x00000A38, 0x0007000C, 0x0000001D, 0x00005DB5, 0x00000001,
|
||||
0x00000028, 0x00000504, 0x00004FBD, 0x000500C3, 0x0000001A, 0x00003802,
|
||||
0x00003C0F, 0x00000302, 0x0004006F, 0x0000001D, 0x000019CF, 0x00003802,
|
||||
0x0005008E, 0x0000001D, 0x00004747, 0x000019CF, 0x00000A38, 0x0007000C,
|
||||
0x0000001D, 0x00005E06, 0x00000001, 0x00000028, 0x00000504, 0x00004747,
|
||||
0x00050051, 0x0000000D, 0x00005F0A, 0x00005DB5, 0x00000000, 0x00050051,
|
||||
0x0000000D, 0x000037EF, 0x00005E06, 0x00000000, 0x00050050, 0x00000013,
|
||||
0x00004B20, 0x00005F0A, 0x000037EF, 0x0006000C, 0x0000000B, 0x00002171,
|
||||
0x00000001, 0x0000003A, 0x00004B20, 0x00050051, 0x0000000D, 0x00005BBF,
|
||||
0x00005DB5, 0x00000001, 0x00050051, 0x0000000D, 0x000039A7, 0x00005E06,
|
||||
0x00000001, 0x00050050, 0x00000013, 0x00004B21, 0x00005BBF, 0x000039A7,
|
||||
0x0006000C, 0x0000000B, 0x00002172, 0x00000001, 0x0000003A, 0x00004B21,
|
||||
0x00050051, 0x0000000D, 0x00005BC0, 0x00005DB5, 0x00000002, 0x00050051,
|
||||
0x0000000D, 0x000039A8, 0x00005E06, 0x00000002, 0x00050050, 0x00000013,
|
||||
0x00004B22, 0x00005BC0, 0x000039A8, 0x0006000C, 0x0000000B, 0x00002173,
|
||||
0x00000001, 0x0000003A, 0x00004B22, 0x00050051, 0x0000000D, 0x00005BC1,
|
||||
0x00005DB5, 0x00000003, 0x00050051, 0x0000000D, 0x000039A9, 0x00005E06,
|
||||
0x00000003, 0x00050050, 0x00000013, 0x00004B0D, 0x00005BC1, 0x000039A9,
|
||||
0x0006000C, 0x0000000B, 0x000020EE, 0x00000001, 0x0000003A, 0x00004B0D,
|
||||
0x00070050, 0x00000017, 0x00003ABB, 0x00002171, 0x00002172, 0x00002173,
|
||||
0x000020EE, 0x00060041, 0x00000294, 0x000045C3, 0x0000140E, 0x00000A0B,
|
||||
0x000054A6, 0x0003003E, 0x000045C3, 0x00003ABB, 0x00050080, 0x0000000B,
|
||||
0x00003AC4, 0x000054A6, 0x00000A0E, 0x000600A9, 0x0000000B, 0x00004958,
|
||||
0x000028E3, 0x00000ACA, 0x00000A3A, 0x000500C2, 0x0000000B, 0x00002E1B,
|
||||
0x00004958, 0x00000A16, 0x00050080, 0x0000000B, 0x0000367B, 0x000053F5,
|
||||
0x00002E1B, 0x00060041, 0x00000294, 0x0000571A, 0x0000107A, 0x00000A0B,
|
||||
0x0000367B, 0x0004003D, 0x00000017, 0x000019B2, 0x0000571A, 0x000300F7,
|
||||
0x000030FA, 0x00000000, 0x000400FA, 0x00005272, 0x00002958, 0x000030FA,
|
||||
0x000200F8, 0x00002958, 0x000500C7, 0x00000017, 0x00004760, 0x000019B2,
|
||||
0x000009CE, 0x000500C4, 0x00000017, 0x000024D2, 0x00004760, 0x0000013D,
|
||||
0x000500C7, 0x00000017, 0x000050AD, 0x000019B2, 0x0000072E, 0x000500C2,
|
||||
0x00000017, 0x0000448E, 0x000050AD, 0x0000013D, 0x000500C5, 0x00000017,
|
||||
0x00003FF9, 0x000024D2, 0x0000448E, 0x000200F9, 0x000030FA, 0x000200F8,
|
||||
0x000030FA, 0x000700F5, 0x00000017, 0x00002F4B, 0x000019B2, 0x000030F9,
|
||||
0x00003FF9, 0x00002958, 0x0004007C, 0x0000001A, 0x00003C10, 0x00002F4B,
|
||||
0x000500C4, 0x0000001A, 0x0000420F, 0x00003C10, 0x00000302, 0x000500C3,
|
||||
0x0000001A, 0x00004099, 0x0000420F, 0x00000302, 0x0004006F, 0x0000001D,
|
||||
0x00002A98, 0x00004099, 0x0005008E, 0x0000001D, 0x00004FBE, 0x00002A98,
|
||||
0x00000A38, 0x0007000C, 0x0000001D, 0x00005DB6, 0x00000001, 0x00000028,
|
||||
0x00000504, 0x00004FBE, 0x000500C3, 0x0000001A, 0x00003803, 0x00003C10,
|
||||
0x00000302, 0x0004006F, 0x0000001D, 0x000019D0, 0x00003803, 0x0005008E,
|
||||
0x0000001D, 0x00004748, 0x000019D0, 0x00000A38, 0x0007000C, 0x0000001D,
|
||||
0x00005E07, 0x00000001, 0x00000028, 0x00000504, 0x00004748, 0x00050051,
|
||||
0x0000000D, 0x00005F0B, 0x00005DB6, 0x00000000, 0x00050051, 0x0000000D,
|
||||
0x000037F0, 0x00005E07, 0x00000000, 0x00050050, 0x00000013, 0x00004B23,
|
||||
0x00005F0B, 0x000037F0, 0x0006000C, 0x0000000B, 0x00002174, 0x00000001,
|
||||
0x0000003A, 0x00004B23, 0x00050051, 0x0000000D, 0x00005BC2, 0x00005DB6,
|
||||
0x00000001, 0x00050051, 0x0000000D, 0x000039AA, 0x00005E07, 0x00000001,
|
||||
0x00050050, 0x00000013, 0x00004B24, 0x00005BC2, 0x000039AA, 0x0006000C,
|
||||
0x0000000B, 0x00002175, 0x00000001, 0x0000003A, 0x00004B24, 0x00050051,
|
||||
0x0000000D, 0x00005BC3, 0x00005DB6, 0x00000002, 0x00050051, 0x0000000D,
|
||||
0x000039AB, 0x00005E07, 0x00000002, 0x00050050, 0x00000013, 0x00004B25,
|
||||
0x00005BC3, 0x000039AB, 0x0006000C, 0x0000000B, 0x00002176, 0x00000001,
|
||||
0x0000003A, 0x00004B25, 0x00050051, 0x0000000D, 0x00005BC4, 0x00005DB6,
|
||||
0x00000003, 0x00050051, 0x0000000D, 0x000039AC, 0x00005E07, 0x00000003,
|
||||
0x00050050, 0x00000013, 0x00004B0E, 0x00005BC4, 0x000039AC, 0x0006000C,
|
||||
0x0000000B, 0x000020EF, 0x00000001, 0x0000003A, 0x00004B0E, 0x00070050,
|
||||
0x00000017, 0x00003ABC, 0x00002174, 0x00002175, 0x00002176, 0x000020EF,
|
||||
0x00060041, 0x00000294, 0x00004EBE, 0x0000140E, 0x00000A0B, 0x00003AC4,
|
||||
0x0003003E, 0x00004EBE, 0x00003ABC, 0x000200F9, 0x00004C7A, 0x000200F8,
|
||||
0x00004C7A, 0x000100FD, 0x00010038,
|
||||
};
|
734
src/xenia/gpu/shaders/bytecode/vulkan_spirv/texture_load_r16_snorm_float_scaled_cs.h
generated
Normal file
734
src/xenia/gpu/shaders/bytecode/vulkan_spirv/texture_load_r16_snorm_float_scaled_cs.h
generated
Normal file
|
@ -0,0 +1,734 @@
|
|||
// Generated with `xb buildshaders`.
|
||||
#if 0
|
||||
; SPIR-V
|
||||
; Version: 1.0
|
||||
; Generator: Khronos Glslang Reference Front End; 10
|
||||
; Bound: 25179
|
||||
; Schema: 0
|
||||
OpCapability Shader
|
||||
%1 = OpExtInstImport "GLSL.std.450"
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %5663 "main" %gl_GlobalInvocationID
|
||||
OpExecutionMode %5663 LocalSize 2 32 1
|
||||
OpMemberDecorate %_struct_1161 0 Offset 0
|
||||
OpMemberDecorate %_struct_1161 1 Offset 4
|
||||
OpMemberDecorate %_struct_1161 2 Offset 8
|
||||
OpMemberDecorate %_struct_1161 3 Offset 12
|
||||
OpMemberDecorate %_struct_1161 4 Offset 16
|
||||
OpMemberDecorate %_struct_1161 5 Offset 28
|
||||
OpMemberDecorate %_struct_1161 6 Offset 32
|
||||
OpMemberDecorate %_struct_1161 7 Offset 36
|
||||
OpDecorate %_struct_1161 Block
|
||||
OpDecorate %5245 DescriptorSet 2
|
||||
OpDecorate %5245 Binding 0
|
||||
OpDecorate %gl_GlobalInvocationID BuiltIn GlobalInvocationId
|
||||
OpDecorate %_runtimearr_v4uint ArrayStride 16
|
||||
OpMemberDecorate %_struct_1972 0 NonReadable
|
||||
OpMemberDecorate %_struct_1972 0 Offset 0
|
||||
OpDecorate %_struct_1972 BufferBlock
|
||||
OpDecorate %5134 DescriptorSet 0
|
||||
OpDecorate %5134 Binding 0
|
||||
OpDecorate %_runtimearr_v4uint_0 ArrayStride 16
|
||||
OpMemberDecorate %_struct_1973 0 NonWritable
|
||||
OpMemberDecorate %_struct_1973 0 Offset 0
|
||||
OpDecorate %_struct_1973 BufferBlock
|
||||
OpDecorate %4218 DescriptorSet 1
|
||||
OpDecorate %4218 Binding 0
|
||||
OpDecorate %gl_WorkGroupSize BuiltIn WorkgroupSize
|
||||
%void = OpTypeVoid
|
||||
%1282 = OpTypeFunction %void
|
||||
%uint = OpTypeInt 32 0
|
||||
%v4uint = OpTypeVector %uint 4
|
||||
%int = OpTypeInt 32 1
|
||||
%v2int = OpTypeVector %int 2
|
||||
%v3int = OpTypeVector %int 3
|
||||
%bool = OpTypeBool
|
||||
%v3uint = OpTypeVector %uint 3
|
||||
%v2uint = OpTypeVector %uint 2
|
||||
%float = OpTypeFloat 32
|
||||
%v4float = OpTypeVector %float 4
|
||||
%float_n1 = OpConstant %float -1
|
||||
%1284 = OpConstantComposite %v4float %float_n1 %float_n1 %float_n1 %float_n1
|
||||
%v4int = OpTypeVector %int 4
|
||||
%int_16 = OpConstant %int 16
|
||||
%float_3_05185094en05 = OpConstant %float 3.05185094e-05
|
||||
%uint_0 = OpConstant %uint 0
|
||||
%v2float = OpTypeVector %float 2
|
||||
%uint_1 = OpConstant %uint 1
|
||||
%uint_2 = OpConstant %uint 2
|
||||
%uint_3 = OpConstant %uint 3
|
||||
%uint_16711935 = OpConstant %uint 16711935
|
||||
%uint_8 = OpConstant %uint 8
|
||||
%uint_4278255360 = OpConstant %uint 4278255360
|
||||
%int_5 = OpConstant %int 5
|
||||
%uint_5 = OpConstant %uint 5
|
||||
%uint_7 = OpConstant %uint 7
|
||||
%int_7 = OpConstant %int 7
|
||||
%int_14 = OpConstant %int 14
|
||||
%int_2 = OpConstant %int 2
|
||||
%int_n16 = OpConstant %int -16
|
||||
%int_1 = OpConstant %int 1
|
||||
%int_15 = OpConstant %int 15
|
||||
%int_4 = OpConstant %int 4
|
||||
%int_n512 = OpConstant %int -512
|
||||
%int_3 = OpConstant %int 3
|
||||
%int_448 = OpConstant %int 448
|
||||
%int_8 = OpConstant %int 8
|
||||
%int_6 = OpConstant %int 6
|
||||
%int_63 = OpConstant %int 63
|
||||
%uint_4 = OpConstant %uint 4
|
||||
%uint_6 = OpConstant %uint 6
|
||||
%int_268435455 = OpConstant %int 268435455
|
||||
%int_n2 = OpConstant %int -2
|
||||
%uint_32 = OpConstant %uint 32
|
||||
%uint_64 = OpConstant %uint 64
|
||||
%_struct_1161 = OpTypeStruct %uint %uint %uint %uint %v3uint %uint %uint %uint
|
||||
%_ptr_Uniform__struct_1161 = OpTypePointer Uniform %_struct_1161
|
||||
%5245 = OpVariable %_ptr_Uniform__struct_1161 Uniform
|
||||
%int_0 = OpConstant %int 0
|
||||
%_ptr_Uniform_uint = OpTypePointer Uniform %uint
|
||||
%1915 = OpConstantComposite %v2uint %uint_4 %uint_6
|
||||
%_ptr_Uniform_v3uint = OpTypePointer Uniform %v3uint
|
||||
%_ptr_Input_v3uint = OpTypePointer Input %v3uint
|
||||
%gl_GlobalInvocationID = OpVariable %_ptr_Input_v3uint Input
|
||||
%2612 = OpConstantComposite %v3uint %uint_4 %uint_0 %uint_0
|
||||
%v2bool = OpTypeVector %bool 2
|
||||
%_runtimearr_v4uint = OpTypeRuntimeArray %v4uint
|
||||
%_struct_1972 = OpTypeStruct %_runtimearr_v4uint
|
||||
%_ptr_Uniform__struct_1972 = OpTypePointer Uniform %_struct_1972
|
||||
%5134 = OpVariable %_ptr_Uniform__struct_1972 Uniform
|
||||
%_runtimearr_v4uint_0 = OpTypeRuntimeArray %v4uint
|
||||
%_struct_1973 = OpTypeStruct %_runtimearr_v4uint_0
|
||||
%_ptr_Uniform__struct_1973 = OpTypePointer Uniform %_struct_1973
|
||||
%4218 = OpVariable %_ptr_Uniform__struct_1973 Uniform
|
||||
%_ptr_Uniform_v4uint = OpTypePointer Uniform %v4uint
|
||||
%gl_WorkGroupSize = OpConstantComposite %v3uint %uint_2 %uint_32 %uint_1
|
||||
%1870 = OpConstantComposite %v2uint %uint_3 %uint_3
|
||||
%2510 = OpConstantComposite %v4uint %uint_16711935 %uint_16711935 %uint_16711935 %uint_16711935
|
||||
%317 = OpConstantComposite %v4uint %uint_8 %uint_8 %uint_8 %uint_8
|
||||
%1838 = OpConstantComposite %v4uint %uint_4278255360 %uint_4278255360 %uint_4278255360 %uint_4278255360
|
||||
%770 = OpConstantComposite %v4int %int_16 %int_16 %int_16 %int_16
|
||||
%uint_16 = OpConstant %uint 16
|
||||
%5663 = OpFunction %void None %1282
|
||||
%15110 = OpLabel
|
||||
OpSelectionMerge %19578 None
|
||||
OpSwitch %uint_0 %15137
|
||||
%15137 = OpLabel
|
||||
%12591 = OpLoad %v3uint %gl_GlobalInvocationID
|
||||
%10229 = OpShiftLeftLogical %v3uint %12591 %2612
|
||||
%25178 = OpAccessChain %_ptr_Uniform_v3uint %5245 %int_4
|
||||
%22965 = OpLoad %v3uint %25178
|
||||
%18835 = OpVectorShuffle %v2uint %10229 %10229 0 1
|
||||
%6626 = OpVectorShuffle %v2uint %22965 %22965 0 1
|
||||
%17032 = OpUGreaterThanEqual %v2bool %18835 %6626
|
||||
%24679 = OpAny %bool %17032
|
||||
OpSelectionMerge %6282 DontFlatten
|
||||
OpBranchConditional %24679 %21992 %6282
|
||||
%21992 = OpLabel
|
||||
OpBranch %19578
|
||||
%6282 = OpLabel
|
||||
%6795 = OpBitcast %v3int %10229
|
||||
%18792 = OpAccessChain %_ptr_Uniform_uint %5245 %int_6
|
||||
%9788 = OpLoad %uint %18792
|
||||
%20376 = OpCompositeExtract %uint %22965 1
|
||||
%14692 = OpCompositeExtract %int %6795 0
|
||||
%22810 = OpIMul %int %14692 %int_2
|
||||
%6362 = OpCompositeExtract %int %6795 2
|
||||
%14505 = OpBitcast %int %20376
|
||||
%11279 = OpIMul %int %6362 %14505
|
||||
%17598 = OpCompositeExtract %int %6795 1
|
||||
%22228 = OpIAdd %int %11279 %17598
|
||||
%22405 = OpBitcast %int %9788
|
||||
%24535 = OpIMul %int %22228 %22405
|
||||
%7061 = OpIAdd %int %22810 %24535
|
||||
%19270 = OpBitcast %uint %7061
|
||||
%19460 = OpAccessChain %_ptr_Uniform_uint %5245 %int_5
|
||||
%22875 = OpLoad %uint %19460
|
||||
%8517 = OpIAdd %uint %19270 %22875
|
||||
%21670 = OpShiftRightLogical %uint %8517 %uint_4
|
||||
%18404 = OpAccessChain %_ptr_Uniform_uint %5245 %int_1
|
||||
%23432 = OpLoad %uint %18404
|
||||
%22700 = OpAccessChain %_ptr_Uniform_uint %5245 %int_0
|
||||
%20387 = OpLoad %uint %22700
|
||||
%22279 = OpBitwiseAnd %uint %20387 %uint_2
|
||||
%19223 = OpINotEqual %bool %22279 %uint_0
|
||||
%17247 = OpCompositeConstruct %v2uint %20387 %20387
|
||||
%22947 = OpShiftRightLogical %v2uint %17247 %1915
|
||||
%6551 = OpBitwiseAnd %v2uint %22947 %1870
|
||||
%18732 = OpAccessChain %_ptr_Uniform_uint %5245 %int_2
|
||||
%24236 = OpLoad %uint %18732
|
||||
%20458 = OpAccessChain %_ptr_Uniform_uint %5245 %int_3
|
||||
%22167 = OpLoad %uint %20458
|
||||
%18929 = OpCompositeExtract %uint %10229 0
|
||||
%6638 = OpShiftRightLogical %uint %18929 %uint_3
|
||||
%9988 = OpCompositeExtract %uint %10229 1
|
||||
%23563 = OpCompositeConstruct %v2uint %6638 %9988
|
||||
%8041 = OpUDiv %v2uint %23563 %6551
|
||||
%13932 = OpCompositeExtract %uint %8041 0
|
||||
%19789 = OpShiftLeftLogical %uint %13932 %uint_3
|
||||
%20905 = OpCompositeExtract %uint %8041 1
|
||||
%23022 = OpCompositeExtract %uint %10229 2
|
||||
%9417 = OpCompositeConstruct %v3uint %19789 %20905 %23022
|
||||
OpSelectionMerge %21313 DontFlatten
|
||||
OpBranchConditional %19223 %21373 %11737
|
||||
%21373 = OpLabel
|
||||
%10608 = OpBitcast %v3int %9417
|
||||
%17090 = OpCompositeExtract %int %10608 1
|
||||
%9469 = OpShiftRightArithmetic %int %17090 %int_4
|
||||
%10055 = OpCompositeExtract %int %10608 2
|
||||
%16476 = OpShiftRightArithmetic %int %10055 %int_2
|
||||
%23373 = OpShiftRightLogical %uint %22167 %uint_4
|
||||
%6314 = OpBitcast %int %23373
|
||||
%21281 = OpIMul %int %16476 %6314
|
||||
%15143 = OpIAdd %int %9469 %21281
|
||||
%9032 = OpShiftRightLogical %uint %24236 %uint_5
|
||||
%12427 = OpBitcast %int %9032
|
||||
%10360 = OpIMul %int %15143 %12427
|
||||
%25154 = OpCompositeExtract %int %10608 0
|
||||
%20423 = OpShiftRightArithmetic %int %25154 %int_5
|
||||
%18940 = OpIAdd %int %20423 %10360
|
||||
%8797 = OpShiftLeftLogical %int %18940 %uint_7
|
||||
%11510 = OpBitwiseAnd %int %8797 %int_268435455
|
||||
%18938 = OpShiftLeftLogical %int %11510 %int_1
|
||||
%19768 = OpBitwiseAnd %int %25154 %int_7
|
||||
%12600 = OpBitwiseAnd %int %17090 %int_6
|
||||
%17741 = OpShiftLeftLogical %int %12600 %int_2
|
||||
%17227 = OpIAdd %int %19768 %17741
|
||||
%7048 = OpShiftLeftLogical %int %17227 %uint_7
|
||||
%24035 = OpShiftRightArithmetic %int %7048 %int_6
|
||||
%8725 = OpShiftRightArithmetic %int %17090 %int_3
|
||||
%13731 = OpIAdd %int %8725 %16476
|
||||
%23052 = OpBitwiseAnd %int %13731 %int_1
|
||||
%16658 = OpShiftRightArithmetic %int %25154 %int_3
|
||||
%18794 = OpShiftLeftLogical %int %23052 %int_1
|
||||
%13501 = OpIAdd %int %16658 %18794
|
||||
%19165 = OpBitwiseAnd %int %13501 %int_3
|
||||
%21578 = OpShiftLeftLogical %int %19165 %int_1
|
||||
%15435 = OpIAdd %int %23052 %21578
|
||||
%13150 = OpBitwiseAnd %int %24035 %int_n16
|
||||
%20336 = OpIAdd %int %18938 %13150
|
||||
%23345 = OpShiftLeftLogical %int %20336 %int_1
|
||||
%23274 = OpBitwiseAnd %int %24035 %int_15
|
||||
%10332 = OpIAdd %int %23345 %23274
|
||||
%18356 = OpBitwiseAnd %int %10055 %int_3
|
||||
%21579 = OpShiftLeftLogical %int %18356 %uint_7
|
||||
%16727 = OpIAdd %int %10332 %21579
|
||||
%19166 = OpBitwiseAnd %int %17090 %int_1
|
||||
%21580 = OpShiftLeftLogical %int %19166 %int_4
|
||||
%16728 = OpIAdd %int %16727 %21580
|
||||
%20438 = OpBitwiseAnd %int %15435 %int_1
|
||||
%9987 = OpShiftLeftLogical %int %20438 %int_3
|
||||
%13106 = OpShiftRightArithmetic %int %16728 %int_6
|
||||
%14038 = OpBitwiseAnd %int %13106 %int_7
|
||||
%13330 = OpIAdd %int %9987 %14038
|
||||
%23346 = OpShiftLeftLogical %int %13330 %int_3
|
||||
%23217 = OpBitwiseAnd %int %15435 %int_n2
|
||||
%10908 = OpIAdd %int %23346 %23217
|
||||
%23347 = OpShiftLeftLogical %int %10908 %int_2
|
||||
%23218 = OpBitwiseAnd %int %16728 %int_n512
|
||||
%10909 = OpIAdd %int %23347 %23218
|
||||
%23348 = OpShiftLeftLogical %int %10909 %int_3
|
||||
%21849 = OpBitwiseAnd %int %16728 %int_63
|
||||
%24314 = OpIAdd %int %23348 %21849
|
||||
%22127 = OpBitcast %uint %24314
|
||||
OpBranch %21313
|
||||
%11737 = OpLabel
|
||||
%9761 = OpVectorShuffle %v2uint %9417 %9417 0 1
|
||||
%22991 = OpBitcast %v2int %9761
|
||||
%6403 = OpCompositeExtract %int %22991 0
|
||||
%9470 = OpShiftRightArithmetic %int %6403 %int_5
|
||||
%10056 = OpCompositeExtract %int %22991 1
|
||||
%16477 = OpShiftRightArithmetic %int %10056 %int_5
|
||||
%23374 = OpShiftRightLogical %uint %24236 %uint_5
|
||||
%6315 = OpBitcast %int %23374
|
||||
%21319 = OpIMul %int %16477 %6315
|
||||
%16222 = OpIAdd %int %9470 %21319
|
||||
%19086 = OpShiftLeftLogical %int %16222 %uint_8
|
||||
%10934 = OpBitwiseAnd %int %6403 %int_7
|
||||
%12601 = OpBitwiseAnd %int %10056 %int_14
|
||||
%17742 = OpShiftLeftLogical %int %12601 %int_2
|
||||
%17303 = OpIAdd %int %10934 %17742
|
||||
%6375 = OpShiftLeftLogical %int %17303 %uint_1
|
||||
%10161 = OpBitwiseAnd %int %6375 %int_n16
|
||||
%12150 = OpShiftLeftLogical %int %10161 %int_1
|
||||
%15436 = OpIAdd %int %19086 %12150
|
||||
%13207 = OpBitwiseAnd %int %6375 %int_15
|
||||
%19760 = OpIAdd %int %15436 %13207
|
||||
%18357 = OpBitwiseAnd %int %10056 %int_1
|
||||
%21581 = OpShiftLeftLogical %int %18357 %int_4
|
||||
%16729 = OpIAdd %int %19760 %21581
|
||||
%20514 = OpBitwiseAnd %int %16729 %int_n512
|
||||
%9238 = OpShiftLeftLogical %int %20514 %int_3
|
||||
%18995 = OpBitwiseAnd %int %10056 %int_16
|
||||
%12151 = OpShiftLeftLogical %int %18995 %int_7
|
||||
%16730 = OpIAdd %int %9238 %12151
|
||||
%19167 = OpBitwiseAnd %int %16729 %int_448
|
||||
%21582 = OpShiftLeftLogical %int %19167 %int_2
|
||||
%16708 = OpIAdd %int %16730 %21582
|
||||
%20611 = OpBitwiseAnd %int %10056 %int_8
|
||||
%16831 = OpShiftRightArithmetic %int %20611 %int_2
|
||||
%7916 = OpShiftRightArithmetic %int %6403 %int_3
|
||||
%13750 = OpIAdd %int %16831 %7916
|
||||
%21587 = OpBitwiseAnd %int %13750 %int_3
|
||||
%21583 = OpShiftLeftLogical %int %21587 %int_6
|
||||
%15437 = OpIAdd %int %16708 %21583
|
||||
%11782 = OpBitwiseAnd %int %16729 %int_63
|
||||
%14671 = OpIAdd %int %15437 %11782
|
||||
%22128 = OpBitcast %uint %14671
|
||||
OpBranch %21313
|
||||
%21313 = OpLabel
|
||||
%9468 = OpPhi %uint %22127 %21373 %22128 %11737
|
||||
%16296 = OpIMul %v2uint %8041 %6551
|
||||
%15292 = OpISub %v2uint %23563 %16296
|
||||
%7303 = OpCompositeExtract %uint %6551 0
|
||||
%22882 = OpCompositeExtract %uint %6551 1
|
||||
%13170 = OpIMul %uint %7303 %22882
|
||||
%15520 = OpIMul %uint %9468 %13170
|
||||
%16084 = OpCompositeExtract %uint %15292 0
|
||||
%15890 = OpIMul %uint %16084 %22882
|
||||
%6886 = OpCompositeExtract %uint %15292 1
|
||||
%11045 = OpIAdd %uint %15890 %6886
|
||||
%24733 = OpShiftLeftLogical %uint %11045 %uint_3
|
||||
%23219 = OpBitwiseAnd %uint %18929 %uint_7
|
||||
%9559 = OpIAdd %uint %24733 %23219
|
||||
%16557 = OpShiftLeftLogical %uint %9559 %uint_1
|
||||
%20138 = OpIAdd %uint %15520 %16557
|
||||
%17724 = OpIAdd %uint %23432 %20138
|
||||
%14040 = OpShiftRightLogical %uint %17724 %uint_4
|
||||
%11766 = OpShiftRightLogical %uint %20387 %uint_2
|
||||
%8394 = OpBitwiseAnd %uint %11766 %uint_3
|
||||
%20727 = OpAccessChain %_ptr_Uniform_v4uint %4218 %int_0 %14040
|
||||
%9605 = OpLoad %v4uint %20727
|
||||
%21106 = OpIEqual %bool %8394 %uint_1
|
||||
OpSelectionMerge %12537 None
|
||||
OpBranchConditional %21106 %10583 %12537
|
||||
%10583 = OpLabel
|
||||
%18271 = OpBitwiseAnd %v4uint %9605 %2510
|
||||
%9425 = OpShiftLeftLogical %v4uint %18271 %317
|
||||
%20652 = OpBitwiseAnd %v4uint %9605 %1838
|
||||
%17549 = OpShiftRightLogical %v4uint %20652 %317
|
||||
%16376 = OpBitwiseOr %v4uint %9425 %17549
|
||||
OpBranch %12537
|
||||
%12537 = OpLabel
|
||||
%12106 = OpPhi %v4uint %9605 %21313 %16376 %10583
|
||||
%15375 = OpBitcast %v4int %12106
|
||||
%16910 = OpShiftLeftLogical %v4int %15375 %770
|
||||
%16536 = OpShiftRightArithmetic %v4int %16910 %770
|
||||
%10903 = OpConvertSToF %v4float %16536
|
||||
%20413 = OpVectorTimesScalar %v4float %10903 %float_3_05185094en05
|
||||
%23989 = OpExtInst %v4float %1 FMax %1284 %20413
|
||||
%14338 = OpShiftRightArithmetic %v4int %15375 %770
|
||||
%6607 = OpConvertSToF %v4float %14338
|
||||
%18247 = OpVectorTimesScalar %v4float %6607 %float_3_05185094en05
|
||||
%24070 = OpExtInst %v4float %1 FMax %1284 %18247
|
||||
%24330 = OpCompositeExtract %float %23989 0
|
||||
%14319 = OpCompositeExtract %float %24070 0
|
||||
%19232 = OpCompositeConstruct %v2float %24330 %14319
|
||||
%8561 = OpExtInst %uint %1 PackHalf2x16 %19232
|
||||
%23487 = OpCompositeExtract %float %23989 1
|
||||
%14759 = OpCompositeExtract %float %24070 1
|
||||
%19233 = OpCompositeConstruct %v2float %23487 %14759
|
||||
%8562 = OpExtInst %uint %1 PackHalf2x16 %19233
|
||||
%23488 = OpCompositeExtract %float %23989 2
|
||||
%14760 = OpCompositeExtract %float %24070 2
|
||||
%19234 = OpCompositeConstruct %v2float %23488 %14760
|
||||
%8563 = OpExtInst %uint %1 PackHalf2x16 %19234
|
||||
%23489 = OpCompositeExtract %float %23989 3
|
||||
%14761 = OpCompositeExtract %float %24070 3
|
||||
%19213 = OpCompositeConstruct %v2float %23489 %14761
|
||||
%8430 = OpExtInst %uint %1 PackHalf2x16 %19213
|
||||
%15035 = OpCompositeConstruct %v4uint %8561 %8562 %8563 %8430
|
||||
%17859 = OpAccessChain %_ptr_Uniform_v4uint %5134 %int_0 %21670
|
||||
OpStore %17859 %15035
|
||||
%15532 = OpIAdd %uint %21670 %int_1
|
||||
%6417 = OpUGreaterThan %bool %7303 %uint_1
|
||||
OpSelectionMerge %24764 DontFlatten
|
||||
OpBranchConditional %6417 %20612 %20628
|
||||
%20612 = OpLabel
|
||||
%13975 = OpUDiv %uint %6638 %7303
|
||||
%9086 = OpIMul %uint %13975 %7303
|
||||
%12657 = OpISub %uint %6638 %9086
|
||||
%9511 = OpIAdd %uint %12657 %uint_1
|
||||
%13375 = OpIEqual %bool %9511 %7303
|
||||
OpSelectionMerge %7917 None
|
||||
OpBranchConditional %13375 %22174 %8593
|
||||
%22174 = OpLabel
|
||||
%19289 = OpIMul %uint %uint_64 %7303
|
||||
%21519 = OpShiftLeftLogical %uint %12657 %uint_4
|
||||
%18756 = OpISub %uint %19289 %21519
|
||||
OpBranch %7917
|
||||
%8593 = OpLabel
|
||||
OpBranch %7917
|
||||
%7917 = OpLabel
|
||||
%10540 = OpPhi %uint %18756 %22174 %uint_16 %8593
|
||||
OpBranch %24764
|
||||
%20628 = OpLabel
|
||||
OpBranch %24764
|
||||
%24764 = OpLabel
|
||||
%10684 = OpPhi %uint %10540 %7917 %uint_64 %20628
|
||||
%18731 = OpIMul %uint %10684 %22882
|
||||
%16493 = OpShiftRightLogical %uint %18731 %uint_4
|
||||
%13163 = OpIAdd %uint %14040 %16493
|
||||
%22298 = OpAccessChain %_ptr_Uniform_v4uint %4218 %int_0 %13163
|
||||
%6578 = OpLoad %v4uint %22298
|
||||
OpSelectionMerge %12538 None
|
||||
OpBranchConditional %21106 %10584 %12538
|
||||
%10584 = OpLabel
|
||||
%18272 = OpBitwiseAnd %v4uint %6578 %2510
|
||||
%9426 = OpShiftLeftLogical %v4uint %18272 %317
|
||||
%20653 = OpBitwiseAnd %v4uint %6578 %1838
|
||||
%17550 = OpShiftRightLogical %v4uint %20653 %317
|
||||
%16377 = OpBitwiseOr %v4uint %9426 %17550
|
||||
OpBranch %12538
|
||||
%12538 = OpLabel
|
||||
%12107 = OpPhi %v4uint %6578 %24764 %16377 %10584
|
||||
%15376 = OpBitcast %v4int %12107
|
||||
%16911 = OpShiftLeftLogical %v4int %15376 %770
|
||||
%16537 = OpShiftRightArithmetic %v4int %16911 %770
|
||||
%10904 = OpConvertSToF %v4float %16537
|
||||
%20414 = OpVectorTimesScalar %v4float %10904 %float_3_05185094en05
|
||||
%23990 = OpExtInst %v4float %1 FMax %1284 %20414
|
||||
%14339 = OpShiftRightArithmetic %v4int %15376 %770
|
||||
%6608 = OpConvertSToF %v4float %14339
|
||||
%18248 = OpVectorTimesScalar %v4float %6608 %float_3_05185094en05
|
||||
%24071 = OpExtInst %v4float %1 FMax %1284 %18248
|
||||
%24331 = OpCompositeExtract %float %23990 0
|
||||
%14320 = OpCompositeExtract %float %24071 0
|
||||
%19235 = OpCompositeConstruct %v2float %24331 %14320
|
||||
%8564 = OpExtInst %uint %1 PackHalf2x16 %19235
|
||||
%23490 = OpCompositeExtract %float %23990 1
|
||||
%14762 = OpCompositeExtract %float %24071 1
|
||||
%19236 = OpCompositeConstruct %v2float %23490 %14762
|
||||
%8565 = OpExtInst %uint %1 PackHalf2x16 %19236
|
||||
%23491 = OpCompositeExtract %float %23990 2
|
||||
%14763 = OpCompositeExtract %float %24071 2
|
||||
%19237 = OpCompositeConstruct %v2float %23491 %14763
|
||||
%8566 = OpExtInst %uint %1 PackHalf2x16 %19237
|
||||
%23492 = OpCompositeExtract %float %23990 3
|
||||
%14764 = OpCompositeExtract %float %24071 3
|
||||
%19214 = OpCompositeConstruct %v2float %23492 %14764
|
||||
%8431 = OpExtInst %uint %1 PackHalf2x16 %19214
|
||||
%15036 = OpCompositeConstruct %v4uint %8564 %8565 %8566 %8431
|
||||
%20158 = OpAccessChain %_ptr_Uniform_v4uint %5134 %int_0 %15532
|
||||
OpStore %20158 %15036
|
||||
OpBranch %19578
|
||||
%19578 = OpLabel
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
#endif
|
||||
|
||||
const uint32_t texture_load_r16_snorm_float_scaled_cs[] = {
|
||||
0x07230203, 0x00010000, 0x0008000A, 0x0000625B, 0x00000000, 0x00020011,
|
||||
0x00000001, 0x0006000B, 0x00000001, 0x4C534C47, 0x6474732E, 0x3035342E,
|
||||
0x00000000, 0x0003000E, 0x00000000, 0x00000001, 0x0006000F, 0x00000005,
|
||||
0x0000161F, 0x6E69616D, 0x00000000, 0x00000F48, 0x00060010, 0x0000161F,
|
||||
0x00000011, 0x00000002, 0x00000020, 0x00000001, 0x00050048, 0x00000489,
|
||||
0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x00000489, 0x00000001,
|
||||
0x00000023, 0x00000004, 0x00050048, 0x00000489, 0x00000002, 0x00000023,
|
||||
0x00000008, 0x00050048, 0x00000489, 0x00000003, 0x00000023, 0x0000000C,
|
||||
0x00050048, 0x00000489, 0x00000004, 0x00000023, 0x00000010, 0x00050048,
|
||||
0x00000489, 0x00000005, 0x00000023, 0x0000001C, 0x00050048, 0x00000489,
|
||||
0x00000006, 0x00000023, 0x00000020, 0x00050048, 0x00000489, 0x00000007,
|
||||
0x00000023, 0x00000024, 0x00030047, 0x00000489, 0x00000002, 0x00040047,
|
||||
0x0000147D, 0x00000022, 0x00000002, 0x00040047, 0x0000147D, 0x00000021,
|
||||
0x00000000, 0x00040047, 0x00000F48, 0x0000000B, 0x0000001C, 0x00040047,
|
||||
0x000007DC, 0x00000006, 0x00000010, 0x00040048, 0x000007B4, 0x00000000,
|
||||
0x00000019, 0x00050048, 0x000007B4, 0x00000000, 0x00000023, 0x00000000,
|
||||
0x00030047, 0x000007B4, 0x00000003, 0x00040047, 0x0000140E, 0x00000022,
|
||||
0x00000000, 0x00040047, 0x0000140E, 0x00000021, 0x00000000, 0x00040047,
|
||||
0x000007DD, 0x00000006, 0x00000010, 0x00040048, 0x000007B5, 0x00000000,
|
||||
0x00000018, 0x00050048, 0x000007B5, 0x00000000, 0x00000023, 0x00000000,
|
||||
0x00030047, 0x000007B5, 0x00000003, 0x00040047, 0x0000107A, 0x00000022,
|
||||
0x00000001, 0x00040047, 0x0000107A, 0x00000021, 0x00000000, 0x00040047,
|
||||
0x00000BB1, 0x0000000B, 0x00000019, 0x00020013, 0x00000008, 0x00030021,
|
||||
0x00000502, 0x00000008, 0x00040015, 0x0000000B, 0x00000020, 0x00000000,
|
||||
0x00040017, 0x00000017, 0x0000000B, 0x00000004, 0x00040015, 0x0000000C,
|
||||
0x00000020, 0x00000001, 0x00040017, 0x00000012, 0x0000000C, 0x00000002,
|
||||
0x00040017, 0x00000016, 0x0000000C, 0x00000003, 0x00020014, 0x00000009,
|
||||
0x00040017, 0x00000014, 0x0000000B, 0x00000003, 0x00040017, 0x00000011,
|
||||
0x0000000B, 0x00000002, 0x00030016, 0x0000000D, 0x00000020, 0x00040017,
|
||||
0x0000001D, 0x0000000D, 0x00000004, 0x0004002B, 0x0000000D, 0x00000341,
|
||||
0xBF800000, 0x0007002C, 0x0000001D, 0x00000504, 0x00000341, 0x00000341,
|
||||
0x00000341, 0x00000341, 0x00040017, 0x0000001A, 0x0000000C, 0x00000004,
|
||||
0x0004002B, 0x0000000C, 0x00000A3B, 0x00000010, 0x0004002B, 0x0000000D,
|
||||
0x00000A38, 0x38000100, 0x0004002B, 0x0000000B, 0x00000A0A, 0x00000000,
|
||||
0x00040017, 0x00000013, 0x0000000D, 0x00000002, 0x0004002B, 0x0000000B,
|
||||
0x00000A0D, 0x00000001, 0x0004002B, 0x0000000B, 0x00000A10, 0x00000002,
|
||||
0x0004002B, 0x0000000B, 0x00000A13, 0x00000003, 0x0004002B, 0x0000000B,
|
||||
0x000008A6, 0x00FF00FF, 0x0004002B, 0x0000000B, 0x00000A22, 0x00000008,
|
||||
0x0004002B, 0x0000000B, 0x000005FD, 0xFF00FF00, 0x0004002B, 0x0000000C,
|
||||
0x00000A1A, 0x00000005, 0x0004002B, 0x0000000B, 0x00000A19, 0x00000005,
|
||||
0x0004002B, 0x0000000B, 0x00000A1F, 0x00000007, 0x0004002B, 0x0000000C,
|
||||
0x00000A20, 0x00000007, 0x0004002B, 0x0000000C, 0x00000A35, 0x0000000E,
|
||||
0x0004002B, 0x0000000C, 0x00000A11, 0x00000002, 0x0004002B, 0x0000000C,
|
||||
0x000009DB, 0xFFFFFFF0, 0x0004002B, 0x0000000C, 0x00000A0E, 0x00000001,
|
||||
0x0004002B, 0x0000000C, 0x00000A39, 0x0000000F, 0x0004002B, 0x0000000C,
|
||||
0x00000A17, 0x00000004, 0x0004002B, 0x0000000C, 0x0000040B, 0xFFFFFE00,
|
||||
0x0004002B, 0x0000000C, 0x00000A14, 0x00000003, 0x0004002B, 0x0000000C,
|
||||
0x00000388, 0x000001C0, 0x0004002B, 0x0000000C, 0x00000A23, 0x00000008,
|
||||
0x0004002B, 0x0000000C, 0x00000A1D, 0x00000006, 0x0004002B, 0x0000000C,
|
||||
0x00000AC8, 0x0000003F, 0x0004002B, 0x0000000B, 0x00000A16, 0x00000004,
|
||||
0x0004002B, 0x0000000B, 0x00000A1C, 0x00000006, 0x0004002B, 0x0000000C,
|
||||
0x0000078B, 0x0FFFFFFF, 0x0004002B, 0x0000000C, 0x00000A05, 0xFFFFFFFE,
|
||||
0x0004002B, 0x0000000B, 0x00000A6A, 0x00000020, 0x0004002B, 0x0000000B,
|
||||
0x00000ACA, 0x00000040, 0x000A001E, 0x00000489, 0x0000000B, 0x0000000B,
|
||||
0x0000000B, 0x0000000B, 0x00000014, 0x0000000B, 0x0000000B, 0x0000000B,
|
||||
0x00040020, 0x00000706, 0x00000002, 0x00000489, 0x0004003B, 0x00000706,
|
||||
0x0000147D, 0x00000002, 0x0004002B, 0x0000000C, 0x00000A0B, 0x00000000,
|
||||
0x00040020, 0x00000288, 0x00000002, 0x0000000B, 0x0005002C, 0x00000011,
|
||||
0x0000077B, 0x00000A16, 0x00000A1C, 0x00040020, 0x00000291, 0x00000002,
|
||||
0x00000014, 0x00040020, 0x00000292, 0x00000001, 0x00000014, 0x0004003B,
|
||||
0x00000292, 0x00000F48, 0x00000001, 0x0006002C, 0x00000014, 0x00000A34,
|
||||
0x00000A16, 0x00000A0A, 0x00000A0A, 0x00040017, 0x0000000F, 0x00000009,
|
||||
0x00000002, 0x0003001D, 0x000007DC, 0x00000017, 0x0003001E, 0x000007B4,
|
||||
0x000007DC, 0x00040020, 0x00000A31, 0x00000002, 0x000007B4, 0x0004003B,
|
||||
0x00000A31, 0x0000140E, 0x00000002, 0x0003001D, 0x000007DD, 0x00000017,
|
||||
0x0003001E, 0x000007B5, 0x000007DD, 0x00040020, 0x00000A32, 0x00000002,
|
||||
0x000007B5, 0x0004003B, 0x00000A32, 0x0000107A, 0x00000002, 0x00040020,
|
||||
0x00000294, 0x00000002, 0x00000017, 0x0006002C, 0x00000014, 0x00000BB1,
|
||||
0x00000A10, 0x00000A6A, 0x00000A0D, 0x0005002C, 0x00000011, 0x0000074E,
|
||||
0x00000A13, 0x00000A13, 0x0007002C, 0x00000017, 0x000009CE, 0x000008A6,
|
||||
0x000008A6, 0x000008A6, 0x000008A6, 0x0007002C, 0x00000017, 0x0000013D,
|
||||
0x00000A22, 0x00000A22, 0x00000A22, 0x00000A22, 0x0007002C, 0x00000017,
|
||||
0x0000072E, 0x000005FD, 0x000005FD, 0x000005FD, 0x000005FD, 0x0007002C,
|
||||
0x0000001A, 0x00000302, 0x00000A3B, 0x00000A3B, 0x00000A3B, 0x00000A3B,
|
||||
0x0004002B, 0x0000000B, 0x00000A3A, 0x00000010, 0x00050036, 0x00000008,
|
||||
0x0000161F, 0x00000000, 0x00000502, 0x000200F8, 0x00003B06, 0x000300F7,
|
||||
0x00004C7A, 0x00000000, 0x000300FB, 0x00000A0A, 0x00003B21, 0x000200F8,
|
||||
0x00003B21, 0x0004003D, 0x00000014, 0x0000312F, 0x00000F48, 0x000500C4,
|
||||
0x00000014, 0x000027F5, 0x0000312F, 0x00000A34, 0x00050041, 0x00000291,
|
||||
0x0000625A, 0x0000147D, 0x00000A17, 0x0004003D, 0x00000014, 0x000059B5,
|
||||
0x0000625A, 0x0007004F, 0x00000011, 0x00004993, 0x000027F5, 0x000027F5,
|
||||
0x00000000, 0x00000001, 0x0007004F, 0x00000011, 0x000019E2, 0x000059B5,
|
||||
0x000059B5, 0x00000000, 0x00000001, 0x000500AE, 0x0000000F, 0x00004288,
|
||||
0x00004993, 0x000019E2, 0x0004009A, 0x00000009, 0x00006067, 0x00004288,
|
||||
0x000300F7, 0x0000188A, 0x00000002, 0x000400FA, 0x00006067, 0x000055E8,
|
||||
0x0000188A, 0x000200F8, 0x000055E8, 0x000200F9, 0x00004C7A, 0x000200F8,
|
||||
0x0000188A, 0x0004007C, 0x00000016, 0x00001A8B, 0x000027F5, 0x00050041,
|
||||
0x00000288, 0x00004968, 0x0000147D, 0x00000A1D, 0x0004003D, 0x0000000B,
|
||||
0x0000263C, 0x00004968, 0x00050051, 0x0000000B, 0x00004F98, 0x000059B5,
|
||||
0x00000001, 0x00050051, 0x0000000C, 0x00003964, 0x00001A8B, 0x00000000,
|
||||
0x00050084, 0x0000000C, 0x0000591A, 0x00003964, 0x00000A11, 0x00050051,
|
||||
0x0000000C, 0x000018DA, 0x00001A8B, 0x00000002, 0x0004007C, 0x0000000C,
|
||||
0x000038A9, 0x00004F98, 0x00050084, 0x0000000C, 0x00002C0F, 0x000018DA,
|
||||
0x000038A9, 0x00050051, 0x0000000C, 0x000044BE, 0x00001A8B, 0x00000001,
|
||||
0x00050080, 0x0000000C, 0x000056D4, 0x00002C0F, 0x000044BE, 0x0004007C,
|
||||
0x0000000C, 0x00005785, 0x0000263C, 0x00050084, 0x0000000C, 0x00005FD7,
|
||||
0x000056D4, 0x00005785, 0x00050080, 0x0000000C, 0x00001B95, 0x0000591A,
|
||||
0x00005FD7, 0x0004007C, 0x0000000B, 0x00004B46, 0x00001B95, 0x00050041,
|
||||
0x00000288, 0x00004C04, 0x0000147D, 0x00000A1A, 0x0004003D, 0x0000000B,
|
||||
0x0000595B, 0x00004C04, 0x00050080, 0x0000000B, 0x00002145, 0x00004B46,
|
||||
0x0000595B, 0x000500C2, 0x0000000B, 0x000054A6, 0x00002145, 0x00000A16,
|
||||
0x00050041, 0x00000288, 0x000047E4, 0x0000147D, 0x00000A0E, 0x0004003D,
|
||||
0x0000000B, 0x00005B88, 0x000047E4, 0x00050041, 0x00000288, 0x000058AC,
|
||||
0x0000147D, 0x00000A0B, 0x0004003D, 0x0000000B, 0x00004FA3, 0x000058AC,
|
||||
0x000500C7, 0x0000000B, 0x00005707, 0x00004FA3, 0x00000A10, 0x000500AB,
|
||||
0x00000009, 0x00004B17, 0x00005707, 0x00000A0A, 0x00050050, 0x00000011,
|
||||
0x0000435F, 0x00004FA3, 0x00004FA3, 0x000500C2, 0x00000011, 0x000059A3,
|
||||
0x0000435F, 0x0000077B, 0x000500C7, 0x00000011, 0x00001997, 0x000059A3,
|
||||
0x0000074E, 0x00050041, 0x00000288, 0x0000492C, 0x0000147D, 0x00000A11,
|
||||
0x0004003D, 0x0000000B, 0x00005EAC, 0x0000492C, 0x00050041, 0x00000288,
|
||||
0x00004FEA, 0x0000147D, 0x00000A14, 0x0004003D, 0x0000000B, 0x00005697,
|
||||
0x00004FEA, 0x00050051, 0x0000000B, 0x000049F1, 0x000027F5, 0x00000000,
|
||||
0x000500C2, 0x0000000B, 0x000019EE, 0x000049F1, 0x00000A13, 0x00050051,
|
||||
0x0000000B, 0x00002704, 0x000027F5, 0x00000001, 0x00050050, 0x00000011,
|
||||
0x00005C0B, 0x000019EE, 0x00002704, 0x00050086, 0x00000011, 0x00001F69,
|
||||
0x00005C0B, 0x00001997, 0x00050051, 0x0000000B, 0x0000366C, 0x00001F69,
|
||||
0x00000000, 0x000500C4, 0x0000000B, 0x00004D4D, 0x0000366C, 0x00000A13,
|
||||
0x00050051, 0x0000000B, 0x000051A9, 0x00001F69, 0x00000001, 0x00050051,
|
||||
0x0000000B, 0x000059EE, 0x000027F5, 0x00000002, 0x00060050, 0x00000014,
|
||||
0x000024C9, 0x00004D4D, 0x000051A9, 0x000059EE, 0x000300F7, 0x00005341,
|
||||
0x00000002, 0x000400FA, 0x00004B17, 0x0000537D, 0x00002DD9, 0x000200F8,
|
||||
0x0000537D, 0x0004007C, 0x00000016, 0x00002970, 0x000024C9, 0x00050051,
|
||||
0x0000000C, 0x000042C2, 0x00002970, 0x00000001, 0x000500C3, 0x0000000C,
|
||||
0x000024FD, 0x000042C2, 0x00000A17, 0x00050051, 0x0000000C, 0x00002747,
|
||||
0x00002970, 0x00000002, 0x000500C3, 0x0000000C, 0x0000405C, 0x00002747,
|
||||
0x00000A11, 0x000500C2, 0x0000000B, 0x00005B4D, 0x00005697, 0x00000A16,
|
||||
0x0004007C, 0x0000000C, 0x000018AA, 0x00005B4D, 0x00050084, 0x0000000C,
|
||||
0x00005321, 0x0000405C, 0x000018AA, 0x00050080, 0x0000000C, 0x00003B27,
|
||||
0x000024FD, 0x00005321, 0x000500C2, 0x0000000B, 0x00002348, 0x00005EAC,
|
||||
0x00000A19, 0x0004007C, 0x0000000C, 0x0000308B, 0x00002348, 0x00050084,
|
||||
0x0000000C, 0x00002878, 0x00003B27, 0x0000308B, 0x00050051, 0x0000000C,
|
||||
0x00006242, 0x00002970, 0x00000000, 0x000500C3, 0x0000000C, 0x00004FC7,
|
||||
0x00006242, 0x00000A1A, 0x00050080, 0x0000000C, 0x000049FC, 0x00004FC7,
|
||||
0x00002878, 0x000500C4, 0x0000000C, 0x0000225D, 0x000049FC, 0x00000A1F,
|
||||
0x000500C7, 0x0000000C, 0x00002CF6, 0x0000225D, 0x0000078B, 0x000500C4,
|
||||
0x0000000C, 0x000049FA, 0x00002CF6, 0x00000A0E, 0x000500C7, 0x0000000C,
|
||||
0x00004D38, 0x00006242, 0x00000A20, 0x000500C7, 0x0000000C, 0x00003138,
|
||||
0x000042C2, 0x00000A1D, 0x000500C4, 0x0000000C, 0x0000454D, 0x00003138,
|
||||
0x00000A11, 0x00050080, 0x0000000C, 0x0000434B, 0x00004D38, 0x0000454D,
|
||||
0x000500C4, 0x0000000C, 0x00001B88, 0x0000434B, 0x00000A1F, 0x000500C3,
|
||||
0x0000000C, 0x00005DE3, 0x00001B88, 0x00000A1D, 0x000500C3, 0x0000000C,
|
||||
0x00002215, 0x000042C2, 0x00000A14, 0x00050080, 0x0000000C, 0x000035A3,
|
||||
0x00002215, 0x0000405C, 0x000500C7, 0x0000000C, 0x00005A0C, 0x000035A3,
|
||||
0x00000A0E, 0x000500C3, 0x0000000C, 0x00004112, 0x00006242, 0x00000A14,
|
||||
0x000500C4, 0x0000000C, 0x0000496A, 0x00005A0C, 0x00000A0E, 0x00050080,
|
||||
0x0000000C, 0x000034BD, 0x00004112, 0x0000496A, 0x000500C7, 0x0000000C,
|
||||
0x00004ADD, 0x000034BD, 0x00000A14, 0x000500C4, 0x0000000C, 0x0000544A,
|
||||
0x00004ADD, 0x00000A0E, 0x00050080, 0x0000000C, 0x00003C4B, 0x00005A0C,
|
||||
0x0000544A, 0x000500C7, 0x0000000C, 0x0000335E, 0x00005DE3, 0x000009DB,
|
||||
0x00050080, 0x0000000C, 0x00004F70, 0x000049FA, 0x0000335E, 0x000500C4,
|
||||
0x0000000C, 0x00005B31, 0x00004F70, 0x00000A0E, 0x000500C7, 0x0000000C,
|
||||
0x00005AEA, 0x00005DE3, 0x00000A39, 0x00050080, 0x0000000C, 0x0000285C,
|
||||
0x00005B31, 0x00005AEA, 0x000500C7, 0x0000000C, 0x000047B4, 0x00002747,
|
||||
0x00000A14, 0x000500C4, 0x0000000C, 0x0000544B, 0x000047B4, 0x00000A1F,
|
||||
0x00050080, 0x0000000C, 0x00004157, 0x0000285C, 0x0000544B, 0x000500C7,
|
||||
0x0000000C, 0x00004ADE, 0x000042C2, 0x00000A0E, 0x000500C4, 0x0000000C,
|
||||
0x0000544C, 0x00004ADE, 0x00000A17, 0x00050080, 0x0000000C, 0x00004158,
|
||||
0x00004157, 0x0000544C, 0x000500C7, 0x0000000C, 0x00004FD6, 0x00003C4B,
|
||||
0x00000A0E, 0x000500C4, 0x0000000C, 0x00002703, 0x00004FD6, 0x00000A14,
|
||||
0x000500C3, 0x0000000C, 0x00003332, 0x00004158, 0x00000A1D, 0x000500C7,
|
||||
0x0000000C, 0x000036D6, 0x00003332, 0x00000A20, 0x00050080, 0x0000000C,
|
||||
0x00003412, 0x00002703, 0x000036D6, 0x000500C4, 0x0000000C, 0x00005B32,
|
||||
0x00003412, 0x00000A14, 0x000500C7, 0x0000000C, 0x00005AB1, 0x00003C4B,
|
||||
0x00000A05, 0x00050080, 0x0000000C, 0x00002A9C, 0x00005B32, 0x00005AB1,
|
||||
0x000500C4, 0x0000000C, 0x00005B33, 0x00002A9C, 0x00000A11, 0x000500C7,
|
||||
0x0000000C, 0x00005AB2, 0x00004158, 0x0000040B, 0x00050080, 0x0000000C,
|
||||
0x00002A9D, 0x00005B33, 0x00005AB2, 0x000500C4, 0x0000000C, 0x00005B34,
|
||||
0x00002A9D, 0x00000A14, 0x000500C7, 0x0000000C, 0x00005559, 0x00004158,
|
||||
0x00000AC8, 0x00050080, 0x0000000C, 0x00005EFA, 0x00005B34, 0x00005559,
|
||||
0x0004007C, 0x0000000B, 0x0000566F, 0x00005EFA, 0x000200F9, 0x00005341,
|
||||
0x000200F8, 0x00002DD9, 0x0007004F, 0x00000011, 0x00002621, 0x000024C9,
|
||||
0x000024C9, 0x00000000, 0x00000001, 0x0004007C, 0x00000012, 0x000059CF,
|
||||
0x00002621, 0x00050051, 0x0000000C, 0x00001903, 0x000059CF, 0x00000000,
|
||||
0x000500C3, 0x0000000C, 0x000024FE, 0x00001903, 0x00000A1A, 0x00050051,
|
||||
0x0000000C, 0x00002748, 0x000059CF, 0x00000001, 0x000500C3, 0x0000000C,
|
||||
0x0000405D, 0x00002748, 0x00000A1A, 0x000500C2, 0x0000000B, 0x00005B4E,
|
||||
0x00005EAC, 0x00000A19, 0x0004007C, 0x0000000C, 0x000018AB, 0x00005B4E,
|
||||
0x00050084, 0x0000000C, 0x00005347, 0x0000405D, 0x000018AB, 0x00050080,
|
||||
0x0000000C, 0x00003F5E, 0x000024FE, 0x00005347, 0x000500C4, 0x0000000C,
|
||||
0x00004A8E, 0x00003F5E, 0x00000A22, 0x000500C7, 0x0000000C, 0x00002AB6,
|
||||
0x00001903, 0x00000A20, 0x000500C7, 0x0000000C, 0x00003139, 0x00002748,
|
||||
0x00000A35, 0x000500C4, 0x0000000C, 0x0000454E, 0x00003139, 0x00000A11,
|
||||
0x00050080, 0x0000000C, 0x00004397, 0x00002AB6, 0x0000454E, 0x000500C4,
|
||||
0x0000000C, 0x000018E7, 0x00004397, 0x00000A0D, 0x000500C7, 0x0000000C,
|
||||
0x000027B1, 0x000018E7, 0x000009DB, 0x000500C4, 0x0000000C, 0x00002F76,
|
||||
0x000027B1, 0x00000A0E, 0x00050080, 0x0000000C, 0x00003C4C, 0x00004A8E,
|
||||
0x00002F76, 0x000500C7, 0x0000000C, 0x00003397, 0x000018E7, 0x00000A39,
|
||||
0x00050080, 0x0000000C, 0x00004D30, 0x00003C4C, 0x00003397, 0x000500C7,
|
||||
0x0000000C, 0x000047B5, 0x00002748, 0x00000A0E, 0x000500C4, 0x0000000C,
|
||||
0x0000544D, 0x000047B5, 0x00000A17, 0x00050080, 0x0000000C, 0x00004159,
|
||||
0x00004D30, 0x0000544D, 0x000500C7, 0x0000000C, 0x00005022, 0x00004159,
|
||||
0x0000040B, 0x000500C4, 0x0000000C, 0x00002416, 0x00005022, 0x00000A14,
|
||||
0x000500C7, 0x0000000C, 0x00004A33, 0x00002748, 0x00000A3B, 0x000500C4,
|
||||
0x0000000C, 0x00002F77, 0x00004A33, 0x00000A20, 0x00050080, 0x0000000C,
|
||||
0x0000415A, 0x00002416, 0x00002F77, 0x000500C7, 0x0000000C, 0x00004ADF,
|
||||
0x00004159, 0x00000388, 0x000500C4, 0x0000000C, 0x0000544E, 0x00004ADF,
|
||||
0x00000A11, 0x00050080, 0x0000000C, 0x00004144, 0x0000415A, 0x0000544E,
|
||||
0x000500C7, 0x0000000C, 0x00005083, 0x00002748, 0x00000A23, 0x000500C3,
|
||||
0x0000000C, 0x000041BF, 0x00005083, 0x00000A11, 0x000500C3, 0x0000000C,
|
||||
0x00001EEC, 0x00001903, 0x00000A14, 0x00050080, 0x0000000C, 0x000035B6,
|
||||
0x000041BF, 0x00001EEC, 0x000500C7, 0x0000000C, 0x00005453, 0x000035B6,
|
||||
0x00000A14, 0x000500C4, 0x0000000C, 0x0000544F, 0x00005453, 0x00000A1D,
|
||||
0x00050080, 0x0000000C, 0x00003C4D, 0x00004144, 0x0000544F, 0x000500C7,
|
||||
0x0000000C, 0x00002E06, 0x00004159, 0x00000AC8, 0x00050080, 0x0000000C,
|
||||
0x0000394F, 0x00003C4D, 0x00002E06, 0x0004007C, 0x0000000B, 0x00005670,
|
||||
0x0000394F, 0x000200F9, 0x00005341, 0x000200F8, 0x00005341, 0x000700F5,
|
||||
0x0000000B, 0x000024FC, 0x0000566F, 0x0000537D, 0x00005670, 0x00002DD9,
|
||||
0x00050084, 0x00000011, 0x00003FA8, 0x00001F69, 0x00001997, 0x00050082,
|
||||
0x00000011, 0x00003BBC, 0x00005C0B, 0x00003FA8, 0x00050051, 0x0000000B,
|
||||
0x00001C87, 0x00001997, 0x00000000, 0x00050051, 0x0000000B, 0x00005962,
|
||||
0x00001997, 0x00000001, 0x00050084, 0x0000000B, 0x00003372, 0x00001C87,
|
||||
0x00005962, 0x00050084, 0x0000000B, 0x00003CA0, 0x000024FC, 0x00003372,
|
||||
0x00050051, 0x0000000B, 0x00003ED4, 0x00003BBC, 0x00000000, 0x00050084,
|
||||
0x0000000B, 0x00003E12, 0x00003ED4, 0x00005962, 0x00050051, 0x0000000B,
|
||||
0x00001AE6, 0x00003BBC, 0x00000001, 0x00050080, 0x0000000B, 0x00002B25,
|
||||
0x00003E12, 0x00001AE6, 0x000500C4, 0x0000000B, 0x0000609D, 0x00002B25,
|
||||
0x00000A13, 0x000500C7, 0x0000000B, 0x00005AB3, 0x000049F1, 0x00000A1F,
|
||||
0x00050080, 0x0000000B, 0x00002557, 0x0000609D, 0x00005AB3, 0x000500C4,
|
||||
0x0000000B, 0x000040AD, 0x00002557, 0x00000A0D, 0x00050080, 0x0000000B,
|
||||
0x00004EAA, 0x00003CA0, 0x000040AD, 0x00050080, 0x0000000B, 0x0000453C,
|
||||
0x00005B88, 0x00004EAA, 0x000500C2, 0x0000000B, 0x000036D8, 0x0000453C,
|
||||
0x00000A16, 0x000500C2, 0x0000000B, 0x00002DF6, 0x00004FA3, 0x00000A10,
|
||||
0x000500C7, 0x0000000B, 0x000020CA, 0x00002DF6, 0x00000A13, 0x00060041,
|
||||
0x00000294, 0x000050F7, 0x0000107A, 0x00000A0B, 0x000036D8, 0x0004003D,
|
||||
0x00000017, 0x00002585, 0x000050F7, 0x000500AA, 0x00000009, 0x00005272,
|
||||
0x000020CA, 0x00000A0D, 0x000300F7, 0x000030F9, 0x00000000, 0x000400FA,
|
||||
0x00005272, 0x00002957, 0x000030F9, 0x000200F8, 0x00002957, 0x000500C7,
|
||||
0x00000017, 0x0000475F, 0x00002585, 0x000009CE, 0x000500C4, 0x00000017,
|
||||
0x000024D1, 0x0000475F, 0x0000013D, 0x000500C7, 0x00000017, 0x000050AC,
|
||||
0x00002585, 0x0000072E, 0x000500C2, 0x00000017, 0x0000448D, 0x000050AC,
|
||||
0x0000013D, 0x000500C5, 0x00000017, 0x00003FF8, 0x000024D1, 0x0000448D,
|
||||
0x000200F9, 0x000030F9, 0x000200F8, 0x000030F9, 0x000700F5, 0x00000017,
|
||||
0x00002F4A, 0x00002585, 0x00005341, 0x00003FF8, 0x00002957, 0x0004007C,
|
||||
0x0000001A, 0x00003C0F, 0x00002F4A, 0x000500C4, 0x0000001A, 0x0000420E,
|
||||
0x00003C0F, 0x00000302, 0x000500C3, 0x0000001A, 0x00004098, 0x0000420E,
|
||||
0x00000302, 0x0004006F, 0x0000001D, 0x00002A97, 0x00004098, 0x0005008E,
|
||||
0x0000001D, 0x00004FBD, 0x00002A97, 0x00000A38, 0x0007000C, 0x0000001D,
|
||||
0x00005DB5, 0x00000001, 0x00000028, 0x00000504, 0x00004FBD, 0x000500C3,
|
||||
0x0000001A, 0x00003802, 0x00003C0F, 0x00000302, 0x0004006F, 0x0000001D,
|
||||
0x000019CF, 0x00003802, 0x0005008E, 0x0000001D, 0x00004747, 0x000019CF,
|
||||
0x00000A38, 0x0007000C, 0x0000001D, 0x00005E06, 0x00000001, 0x00000028,
|
||||
0x00000504, 0x00004747, 0x00050051, 0x0000000D, 0x00005F0A, 0x00005DB5,
|
||||
0x00000000, 0x00050051, 0x0000000D, 0x000037EF, 0x00005E06, 0x00000000,
|
||||
0x00050050, 0x00000013, 0x00004B20, 0x00005F0A, 0x000037EF, 0x0006000C,
|
||||
0x0000000B, 0x00002171, 0x00000001, 0x0000003A, 0x00004B20, 0x00050051,
|
||||
0x0000000D, 0x00005BBF, 0x00005DB5, 0x00000001, 0x00050051, 0x0000000D,
|
||||
0x000039A7, 0x00005E06, 0x00000001, 0x00050050, 0x00000013, 0x00004B21,
|
||||
0x00005BBF, 0x000039A7, 0x0006000C, 0x0000000B, 0x00002172, 0x00000001,
|
||||
0x0000003A, 0x00004B21, 0x00050051, 0x0000000D, 0x00005BC0, 0x00005DB5,
|
||||
0x00000002, 0x00050051, 0x0000000D, 0x000039A8, 0x00005E06, 0x00000002,
|
||||
0x00050050, 0x00000013, 0x00004B22, 0x00005BC0, 0x000039A8, 0x0006000C,
|
||||
0x0000000B, 0x00002173, 0x00000001, 0x0000003A, 0x00004B22, 0x00050051,
|
||||
0x0000000D, 0x00005BC1, 0x00005DB5, 0x00000003, 0x00050051, 0x0000000D,
|
||||
0x000039A9, 0x00005E06, 0x00000003, 0x00050050, 0x00000013, 0x00004B0D,
|
||||
0x00005BC1, 0x000039A9, 0x0006000C, 0x0000000B, 0x000020EE, 0x00000001,
|
||||
0x0000003A, 0x00004B0D, 0x00070050, 0x00000017, 0x00003ABB, 0x00002171,
|
||||
0x00002172, 0x00002173, 0x000020EE, 0x00060041, 0x00000294, 0x000045C3,
|
||||
0x0000140E, 0x00000A0B, 0x000054A6, 0x0003003E, 0x000045C3, 0x00003ABB,
|
||||
0x00050080, 0x0000000B, 0x00003CAC, 0x000054A6, 0x00000A0E, 0x000500AC,
|
||||
0x00000009, 0x00001911, 0x00001C87, 0x00000A0D, 0x000300F7, 0x000060BC,
|
||||
0x00000002, 0x000400FA, 0x00001911, 0x00005084, 0x00005094, 0x000200F8,
|
||||
0x00005084, 0x00050086, 0x0000000B, 0x00003697, 0x000019EE, 0x00001C87,
|
||||
0x00050084, 0x0000000B, 0x0000237E, 0x00003697, 0x00001C87, 0x00050082,
|
||||
0x0000000B, 0x00003171, 0x000019EE, 0x0000237E, 0x00050080, 0x0000000B,
|
||||
0x00002527, 0x00003171, 0x00000A0D, 0x000500AA, 0x00000009, 0x0000343F,
|
||||
0x00002527, 0x00001C87, 0x000300F7, 0x00001EED, 0x00000000, 0x000400FA,
|
||||
0x0000343F, 0x0000569E, 0x00002191, 0x000200F8, 0x0000569E, 0x00050084,
|
||||
0x0000000B, 0x00004B59, 0x00000ACA, 0x00001C87, 0x000500C4, 0x0000000B,
|
||||
0x0000540F, 0x00003171, 0x00000A16, 0x00050082, 0x0000000B, 0x00004944,
|
||||
0x00004B59, 0x0000540F, 0x000200F9, 0x00001EED, 0x000200F8, 0x00002191,
|
||||
0x000200F9, 0x00001EED, 0x000200F8, 0x00001EED, 0x000700F5, 0x0000000B,
|
||||
0x0000292C, 0x00004944, 0x0000569E, 0x00000A3A, 0x00002191, 0x000200F9,
|
||||
0x000060BC, 0x000200F8, 0x00005094, 0x000200F9, 0x000060BC, 0x000200F8,
|
||||
0x000060BC, 0x000700F5, 0x0000000B, 0x000029BC, 0x0000292C, 0x00001EED,
|
||||
0x00000ACA, 0x00005094, 0x00050084, 0x0000000B, 0x0000492B, 0x000029BC,
|
||||
0x00005962, 0x000500C2, 0x0000000B, 0x0000406D, 0x0000492B, 0x00000A16,
|
||||
0x00050080, 0x0000000B, 0x0000336B, 0x000036D8, 0x0000406D, 0x00060041,
|
||||
0x00000294, 0x0000571A, 0x0000107A, 0x00000A0B, 0x0000336B, 0x0004003D,
|
||||
0x00000017, 0x000019B2, 0x0000571A, 0x000300F7, 0x000030FA, 0x00000000,
|
||||
0x000400FA, 0x00005272, 0x00002958, 0x000030FA, 0x000200F8, 0x00002958,
|
||||
0x000500C7, 0x00000017, 0x00004760, 0x000019B2, 0x000009CE, 0x000500C4,
|
||||
0x00000017, 0x000024D2, 0x00004760, 0x0000013D, 0x000500C7, 0x00000017,
|
||||
0x000050AD, 0x000019B2, 0x0000072E, 0x000500C2, 0x00000017, 0x0000448E,
|
||||
0x000050AD, 0x0000013D, 0x000500C5, 0x00000017, 0x00003FF9, 0x000024D2,
|
||||
0x0000448E, 0x000200F9, 0x000030FA, 0x000200F8, 0x000030FA, 0x000700F5,
|
||||
0x00000017, 0x00002F4B, 0x000019B2, 0x000060BC, 0x00003FF9, 0x00002958,
|
||||
0x0004007C, 0x0000001A, 0x00003C10, 0x00002F4B, 0x000500C4, 0x0000001A,
|
||||
0x0000420F, 0x00003C10, 0x00000302, 0x000500C3, 0x0000001A, 0x00004099,
|
||||
0x0000420F, 0x00000302, 0x0004006F, 0x0000001D, 0x00002A98, 0x00004099,
|
||||
0x0005008E, 0x0000001D, 0x00004FBE, 0x00002A98, 0x00000A38, 0x0007000C,
|
||||
0x0000001D, 0x00005DB6, 0x00000001, 0x00000028, 0x00000504, 0x00004FBE,
|
||||
0x000500C3, 0x0000001A, 0x00003803, 0x00003C10, 0x00000302, 0x0004006F,
|
||||
0x0000001D, 0x000019D0, 0x00003803, 0x0005008E, 0x0000001D, 0x00004748,
|
||||
0x000019D0, 0x00000A38, 0x0007000C, 0x0000001D, 0x00005E07, 0x00000001,
|
||||
0x00000028, 0x00000504, 0x00004748, 0x00050051, 0x0000000D, 0x00005F0B,
|
||||
0x00005DB6, 0x00000000, 0x00050051, 0x0000000D, 0x000037F0, 0x00005E07,
|
||||
0x00000000, 0x00050050, 0x00000013, 0x00004B23, 0x00005F0B, 0x000037F0,
|
||||
0x0006000C, 0x0000000B, 0x00002174, 0x00000001, 0x0000003A, 0x00004B23,
|
||||
0x00050051, 0x0000000D, 0x00005BC2, 0x00005DB6, 0x00000001, 0x00050051,
|
||||
0x0000000D, 0x000039AA, 0x00005E07, 0x00000001, 0x00050050, 0x00000013,
|
||||
0x00004B24, 0x00005BC2, 0x000039AA, 0x0006000C, 0x0000000B, 0x00002175,
|
||||
0x00000001, 0x0000003A, 0x00004B24, 0x00050051, 0x0000000D, 0x00005BC3,
|
||||
0x00005DB6, 0x00000002, 0x00050051, 0x0000000D, 0x000039AB, 0x00005E07,
|
||||
0x00000002, 0x00050050, 0x00000013, 0x00004B25, 0x00005BC3, 0x000039AB,
|
||||
0x0006000C, 0x0000000B, 0x00002176, 0x00000001, 0x0000003A, 0x00004B25,
|
||||
0x00050051, 0x0000000D, 0x00005BC4, 0x00005DB6, 0x00000003, 0x00050051,
|
||||
0x0000000D, 0x000039AC, 0x00005E07, 0x00000003, 0x00050050, 0x00000013,
|
||||
0x00004B0E, 0x00005BC4, 0x000039AC, 0x0006000C, 0x0000000B, 0x000020EF,
|
||||
0x00000001, 0x0000003A, 0x00004B0E, 0x00070050, 0x00000017, 0x00003ABC,
|
||||
0x00002174, 0x00002175, 0x00002176, 0x000020EF, 0x00060041, 0x00000294,
|
||||
0x00004EBE, 0x0000140E, 0x00000A0B, 0x00003CAC, 0x0003003E, 0x00004EBE,
|
||||
0x00003ABC, 0x000200F9, 0x00004C7A, 0x000200F8, 0x00004C7A, 0x000100FD,
|
||||
0x00010038,
|
||||
};
|
647
src/xenia/gpu/shaders/bytecode/vulkan_spirv/texture_load_r16_unorm_float_cs.h
generated
Normal file
647
src/xenia/gpu/shaders/bytecode/vulkan_spirv/texture_load_r16_unorm_float_cs.h
generated
Normal file
|
@ -0,0 +1,647 @@
|
|||
// Generated with `xb buildshaders`.
|
||||
#if 0
|
||||
; SPIR-V
|
||||
; Version: 1.0
|
||||
; Generator: Khronos Glslang Reference Front End; 10
|
||||
; Bound: 25179
|
||||
; Schema: 0
|
||||
OpCapability Shader
|
||||
%1 = OpExtInstImport "GLSL.std.450"
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %5663 "main" %gl_GlobalInvocationID
|
||||
OpExecutionMode %5663 LocalSize 2 32 1
|
||||
OpMemberDecorate %_struct_1161 0 Offset 0
|
||||
OpMemberDecorate %_struct_1161 1 Offset 4
|
||||
OpMemberDecorate %_struct_1161 2 Offset 8
|
||||
OpMemberDecorate %_struct_1161 3 Offset 12
|
||||
OpMemberDecorate %_struct_1161 4 Offset 16
|
||||
OpMemberDecorate %_struct_1161 5 Offset 28
|
||||
OpMemberDecorate %_struct_1161 6 Offset 32
|
||||
OpMemberDecorate %_struct_1161 7 Offset 36
|
||||
OpDecorate %_struct_1161 Block
|
||||
OpDecorate %5245 DescriptorSet 2
|
||||
OpDecorate %5245 Binding 0
|
||||
OpDecorate %gl_GlobalInvocationID BuiltIn GlobalInvocationId
|
||||
OpDecorate %_runtimearr_v4uint ArrayStride 16
|
||||
OpMemberDecorate %_struct_1972 0 NonReadable
|
||||
OpMemberDecorate %_struct_1972 0 Offset 0
|
||||
OpDecorate %_struct_1972 BufferBlock
|
||||
OpDecorate %5134 DescriptorSet 0
|
||||
OpDecorate %5134 Binding 0
|
||||
OpDecorate %_runtimearr_v4uint_0 ArrayStride 16
|
||||
OpMemberDecorate %_struct_1973 0 NonWritable
|
||||
OpMemberDecorate %_struct_1973 0 Offset 0
|
||||
OpDecorate %_struct_1973 BufferBlock
|
||||
OpDecorate %4218 DescriptorSet 1
|
||||
OpDecorate %4218 Binding 0
|
||||
OpDecorate %gl_WorkGroupSize BuiltIn WorkgroupSize
|
||||
%void = OpTypeVoid
|
||||
%1282 = OpTypeFunction %void
|
||||
%uint = OpTypeInt 32 0
|
||||
%v4uint = OpTypeVector %uint 4
|
||||
%int = OpTypeInt 32 1
|
||||
%v2int = OpTypeVector %int 2
|
||||
%v3int = OpTypeVector %int 3
|
||||
%bool = OpTypeBool
|
||||
%v3uint = OpTypeVector %uint 3
|
||||
%float = OpTypeFloat 32
|
||||
%v4float = OpTypeVector %float 4
|
||||
%uint_65535 = OpConstant %uint 65535
|
||||
%float_1_52590219en05 = OpConstant %float 1.52590219e-05
|
||||
%uint_16 = OpConstant %uint 16
|
||||
%uint_0 = OpConstant %uint 0
|
||||
%v2float = OpTypeVector %float 2
|
||||
%uint_1 = OpConstant %uint 1
|
||||
%uint_2 = OpConstant %uint 2
|
||||
%uint_3 = OpConstant %uint 3
|
||||
%uint_16711935 = OpConstant %uint 16711935
|
||||
%uint_8 = OpConstant %uint 8
|
||||
%uint_4278255360 = OpConstant %uint 4278255360
|
||||
%int_5 = OpConstant %int 5
|
||||
%uint_5 = OpConstant %uint 5
|
||||
%uint_7 = OpConstant %uint 7
|
||||
%int_7 = OpConstant %int 7
|
||||
%int_14 = OpConstant %int 14
|
||||
%int_2 = OpConstant %int 2
|
||||
%int_n16 = OpConstant %int -16
|
||||
%int_1 = OpConstant %int 1
|
||||
%int_15 = OpConstant %int 15
|
||||
%int_4 = OpConstant %int 4
|
||||
%int_n512 = OpConstant %int -512
|
||||
%int_3 = OpConstant %int 3
|
||||
%int_16 = OpConstant %int 16
|
||||
%int_448 = OpConstant %int 448
|
||||
%int_8 = OpConstant %int 8
|
||||
%int_6 = OpConstant %int 6
|
||||
%int_63 = OpConstant %int 63
|
||||
%uint_4 = OpConstant %uint 4
|
||||
%int_268435455 = OpConstant %int 268435455
|
||||
%int_n2 = OpConstant %int -2
|
||||
%uint_32 = OpConstant %uint 32
|
||||
%uint_64 = OpConstant %uint 64
|
||||
%_struct_1161 = OpTypeStruct %uint %uint %uint %uint %v3uint %uint %uint %uint
|
||||
%_ptr_Uniform__struct_1161 = OpTypePointer Uniform %_struct_1161
|
||||
%5245 = OpVariable %_ptr_Uniform__struct_1161 Uniform
|
||||
%int_0 = OpConstant %int 0
|
||||
%_ptr_Uniform_uint = OpTypePointer Uniform %uint
|
||||
%_ptr_Uniform_v3uint = OpTypePointer Uniform %v3uint
|
||||
%v2uint = OpTypeVector %uint 2
|
||||
%_ptr_Input_v3uint = OpTypePointer Input %v3uint
|
||||
%gl_GlobalInvocationID = OpVariable %_ptr_Input_v3uint Input
|
||||
%2612 = OpConstantComposite %v3uint %uint_4 %uint_0 %uint_0
|
||||
%v2bool = OpTypeVector %bool 2
|
||||
%_runtimearr_v4uint = OpTypeRuntimeArray %v4uint
|
||||
%_struct_1972 = OpTypeStruct %_runtimearr_v4uint
|
||||
%_ptr_Uniform__struct_1972 = OpTypePointer Uniform %_struct_1972
|
||||
%5134 = OpVariable %_ptr_Uniform__struct_1972 Uniform
|
||||
%_runtimearr_v4uint_0 = OpTypeRuntimeArray %v4uint
|
||||
%_struct_1973 = OpTypeStruct %_runtimearr_v4uint_0
|
||||
%_ptr_Uniform__struct_1973 = OpTypePointer Uniform %_struct_1973
|
||||
%4218 = OpVariable %_ptr_Uniform__struct_1973 Uniform
|
||||
%_ptr_Uniform_v4uint = OpTypePointer Uniform %v4uint
|
||||
%gl_WorkGroupSize = OpConstantComposite %v3uint %uint_2 %uint_32 %uint_1
|
||||
%2510 = OpConstantComposite %v4uint %uint_16711935 %uint_16711935 %uint_16711935 %uint_16711935
|
||||
%317 = OpConstantComposite %v4uint %uint_8 %uint_8 %uint_8 %uint_8
|
||||
%1838 = OpConstantComposite %v4uint %uint_4278255360 %uint_4278255360 %uint_4278255360 %uint_4278255360
|
||||
%850 = OpConstantComposite %v4uint %uint_65535 %uint_65535 %uint_65535 %uint_65535
|
||||
%749 = OpConstantComposite %v4uint %uint_16 %uint_16 %uint_16 %uint_16
|
||||
%5663 = OpFunction %void None %1282
|
||||
%15110 = OpLabel
|
||||
OpSelectionMerge %19578 None
|
||||
OpSwitch %uint_0 %15137
|
||||
%15137 = OpLabel
|
||||
%12591 = OpLoad %v3uint %gl_GlobalInvocationID
|
||||
%10229 = OpShiftLeftLogical %v3uint %12591 %2612
|
||||
%25178 = OpAccessChain %_ptr_Uniform_v3uint %5245 %int_4
|
||||
%22965 = OpLoad %v3uint %25178
|
||||
%18835 = OpVectorShuffle %v2uint %10229 %10229 0 1
|
||||
%6626 = OpVectorShuffle %v2uint %22965 %22965 0 1
|
||||
%17032 = OpUGreaterThanEqual %v2bool %18835 %6626
|
||||
%24679 = OpAny %bool %17032
|
||||
OpSelectionMerge %6282 DontFlatten
|
||||
OpBranchConditional %24679 %21992 %6282
|
||||
%21992 = OpLabel
|
||||
OpBranch %19578
|
||||
%6282 = OpLabel
|
||||
%6795 = OpBitcast %v3int %10229
|
||||
%18792 = OpAccessChain %_ptr_Uniform_uint %5245 %int_6
|
||||
%9788 = OpLoad %uint %18792
|
||||
%20376 = OpCompositeExtract %uint %22965 1
|
||||
%14692 = OpCompositeExtract %int %6795 0
|
||||
%22810 = OpIMul %int %14692 %int_2
|
||||
%6362 = OpCompositeExtract %int %6795 2
|
||||
%14505 = OpBitcast %int %20376
|
||||
%11279 = OpIMul %int %6362 %14505
|
||||
%17598 = OpCompositeExtract %int %6795 1
|
||||
%22228 = OpIAdd %int %11279 %17598
|
||||
%22405 = OpBitcast %int %9788
|
||||
%24535 = OpIMul %int %22228 %22405
|
||||
%7061 = OpIAdd %int %22810 %24535
|
||||
%19270 = OpBitcast %uint %7061
|
||||
%19460 = OpAccessChain %_ptr_Uniform_uint %5245 %int_5
|
||||
%22875 = OpLoad %uint %19460
|
||||
%8517 = OpIAdd %uint %19270 %22875
|
||||
%21670 = OpShiftRightLogical %uint %8517 %uint_4
|
||||
%20950 = OpAccessChain %_ptr_Uniform_uint %5245 %int_0
|
||||
%21411 = OpLoad %uint %20950
|
||||
%6381 = OpBitwiseAnd %uint %21411 %uint_1
|
||||
%10467 = OpINotEqual %bool %6381 %uint_0
|
||||
OpSelectionMerge %23266 DontFlatten
|
||||
OpBranchConditional %10467 %10108 %10765
|
||||
%10108 = OpLabel
|
||||
%23508 = OpBitwiseAnd %uint %21411 %uint_2
|
||||
%16300 = OpINotEqual %bool %23508 %uint_0
|
||||
OpSelectionMerge %7691 DontFlatten
|
||||
OpBranchConditional %16300 %12129 %25128
|
||||
%12129 = OpLabel
|
||||
%18210 = OpAccessChain %_ptr_Uniform_uint %5245 %int_2
|
||||
%15627 = OpLoad %uint %18210
|
||||
%22624 = OpAccessChain %_ptr_Uniform_uint %5245 %int_3
|
||||
%21535 = OpLoad %uint %22624
|
||||
%14923 = OpShiftRightArithmetic %int %17598 %int_4
|
||||
%18773 = OpShiftRightArithmetic %int %6362 %int_2
|
||||
%18759 = OpShiftRightLogical %uint %21535 %uint_4
|
||||
%6314 = OpBitcast %int %18759
|
||||
%21281 = OpIMul %int %18773 %6314
|
||||
%15143 = OpIAdd %int %14923 %21281
|
||||
%9032 = OpShiftRightLogical %uint %15627 %uint_5
|
||||
%14593 = OpBitcast %int %9032
|
||||
%8436 = OpIMul %int %15143 %14593
|
||||
%12986 = OpShiftRightArithmetic %int %14692 %int_5
|
||||
%24558 = OpIAdd %int %12986 %8436
|
||||
%8797 = OpShiftLeftLogical %int %24558 %uint_7
|
||||
%11510 = OpBitwiseAnd %int %8797 %int_268435455
|
||||
%18938 = OpShiftLeftLogical %int %11510 %int_1
|
||||
%19768 = OpBitwiseAnd %int %14692 %int_7
|
||||
%12600 = OpBitwiseAnd %int %17598 %int_6
|
||||
%17741 = OpShiftLeftLogical %int %12600 %int_2
|
||||
%17227 = OpIAdd %int %19768 %17741
|
||||
%7048 = OpShiftLeftLogical %int %17227 %uint_7
|
||||
%24035 = OpShiftRightArithmetic %int %7048 %int_6
|
||||
%8725 = OpShiftRightArithmetic %int %17598 %int_3
|
||||
%13731 = OpIAdd %int %8725 %18773
|
||||
%23052 = OpBitwiseAnd %int %13731 %int_1
|
||||
%16658 = OpShiftRightArithmetic %int %14692 %int_3
|
||||
%18794 = OpShiftLeftLogical %int %23052 %int_1
|
||||
%13501 = OpIAdd %int %16658 %18794
|
||||
%19165 = OpBitwiseAnd %int %13501 %int_3
|
||||
%21578 = OpShiftLeftLogical %int %19165 %int_1
|
||||
%15435 = OpIAdd %int %23052 %21578
|
||||
%13150 = OpBitwiseAnd %int %24035 %int_n16
|
||||
%20336 = OpIAdd %int %18938 %13150
|
||||
%23345 = OpShiftLeftLogical %int %20336 %int_1
|
||||
%23274 = OpBitwiseAnd %int %24035 %int_15
|
||||
%10332 = OpIAdd %int %23345 %23274
|
||||
%18356 = OpBitwiseAnd %int %6362 %int_3
|
||||
%21579 = OpShiftLeftLogical %int %18356 %uint_7
|
||||
%16727 = OpIAdd %int %10332 %21579
|
||||
%19166 = OpBitwiseAnd %int %17598 %int_1
|
||||
%21580 = OpShiftLeftLogical %int %19166 %int_4
|
||||
%16728 = OpIAdd %int %16727 %21580
|
||||
%20438 = OpBitwiseAnd %int %15435 %int_1
|
||||
%9987 = OpShiftLeftLogical %int %20438 %int_3
|
||||
%13106 = OpShiftRightArithmetic %int %16728 %int_6
|
||||
%14038 = OpBitwiseAnd %int %13106 %int_7
|
||||
%13330 = OpIAdd %int %9987 %14038
|
||||
%23346 = OpShiftLeftLogical %int %13330 %int_3
|
||||
%23217 = OpBitwiseAnd %int %15435 %int_n2
|
||||
%10908 = OpIAdd %int %23346 %23217
|
||||
%23347 = OpShiftLeftLogical %int %10908 %int_2
|
||||
%23218 = OpBitwiseAnd %int %16728 %int_n512
|
||||
%10909 = OpIAdd %int %23347 %23218
|
||||
%23348 = OpShiftLeftLogical %int %10909 %int_3
|
||||
%24224 = OpBitwiseAnd %int %16728 %int_63
|
||||
%21741 = OpIAdd %int %23348 %24224
|
||||
OpBranch %7691
|
||||
%25128 = OpLabel
|
||||
%6796 = OpBitcast %v2int %18835
|
||||
%18793 = OpAccessChain %_ptr_Uniform_uint %5245 %int_2
|
||||
%11954 = OpLoad %uint %18793
|
||||
%18756 = OpCompositeExtract %int %6796 0
|
||||
%19701 = OpShiftRightArithmetic %int %18756 %int_5
|
||||
%10055 = OpCompositeExtract %int %6796 1
|
||||
%16476 = OpShiftRightArithmetic %int %10055 %int_5
|
||||
%23373 = OpShiftRightLogical %uint %11954 %uint_5
|
||||
%6315 = OpBitcast %int %23373
|
||||
%21319 = OpIMul %int %16476 %6315
|
||||
%16222 = OpIAdd %int %19701 %21319
|
||||
%19086 = OpShiftLeftLogical %int %16222 %uint_8
|
||||
%10934 = OpBitwiseAnd %int %18756 %int_7
|
||||
%12601 = OpBitwiseAnd %int %10055 %int_14
|
||||
%17742 = OpShiftLeftLogical %int %12601 %int_2
|
||||
%17303 = OpIAdd %int %10934 %17742
|
||||
%6375 = OpShiftLeftLogical %int %17303 %uint_1
|
||||
%10161 = OpBitwiseAnd %int %6375 %int_n16
|
||||
%12150 = OpShiftLeftLogical %int %10161 %int_1
|
||||
%15436 = OpIAdd %int %19086 %12150
|
||||
%13207 = OpBitwiseAnd %int %6375 %int_15
|
||||
%19760 = OpIAdd %int %15436 %13207
|
||||
%18357 = OpBitwiseAnd %int %10055 %int_1
|
||||
%21581 = OpShiftLeftLogical %int %18357 %int_4
|
||||
%16729 = OpIAdd %int %19760 %21581
|
||||
%20514 = OpBitwiseAnd %int %16729 %int_n512
|
||||
%9238 = OpShiftLeftLogical %int %20514 %int_3
|
||||
%18995 = OpBitwiseAnd %int %10055 %int_16
|
||||
%12151 = OpShiftLeftLogical %int %18995 %int_7
|
||||
%16730 = OpIAdd %int %9238 %12151
|
||||
%19167 = OpBitwiseAnd %int %16729 %int_448
|
||||
%21582 = OpShiftLeftLogical %int %19167 %int_2
|
||||
%16708 = OpIAdd %int %16730 %21582
|
||||
%20611 = OpBitwiseAnd %int %10055 %int_8
|
||||
%16831 = OpShiftRightArithmetic %int %20611 %int_2
|
||||
%7916 = OpShiftRightArithmetic %int %18756 %int_3
|
||||
%13750 = OpIAdd %int %16831 %7916
|
||||
%21587 = OpBitwiseAnd %int %13750 %int_3
|
||||
%21583 = OpShiftLeftLogical %int %21587 %int_6
|
||||
%15437 = OpIAdd %int %16708 %21583
|
||||
%14157 = OpBitwiseAnd %int %16729 %int_63
|
||||
%12098 = OpIAdd %int %15437 %14157
|
||||
OpBranch %7691
|
||||
%7691 = OpLabel
|
||||
%10540 = OpPhi %int %21741 %12129 %12098 %25128
|
||||
OpBranch %23266
|
||||
%10765 = OpLabel
|
||||
%20632 = OpAccessChain %_ptr_Uniform_uint %5245 %int_2
|
||||
%15628 = OpLoad %uint %20632
|
||||
%21275 = OpAccessChain %_ptr_Uniform_uint %5245 %int_3
|
||||
%13550 = OpLoad %uint %21275
|
||||
%15070 = OpBitcast %int %13550
|
||||
%18927 = OpIMul %int %6362 %15070
|
||||
%8334 = OpIAdd %int %18927 %17598
|
||||
%8952 = OpBitcast %int %15628
|
||||
%7839 = OpIMul %int %8334 %8952
|
||||
%7984 = OpIAdd %int %22810 %7839
|
||||
OpBranch %23266
|
||||
%23266 = OpLabel
|
||||
%19748 = OpPhi %int %10540 %7691 %7984 %10765
|
||||
%24922 = OpAccessChain %_ptr_Uniform_uint %5245 %int_1
|
||||
%7502 = OpLoad %uint %24922
|
||||
%15686 = OpBitcast %int %7502
|
||||
%15579 = OpIAdd %int %15686 %19748
|
||||
%18556 = OpBitcast %uint %15579
|
||||
%21493 = OpShiftRightLogical %uint %18556 %uint_4
|
||||
%14997 = OpShiftRightLogical %uint %21411 %uint_2
|
||||
%8394 = OpBitwiseAnd %uint %14997 %uint_3
|
||||
%20727 = OpAccessChain %_ptr_Uniform_v4uint %4218 %int_0 %21493
|
||||
%9605 = OpLoad %v4uint %20727
|
||||
%21106 = OpIEqual %bool %8394 %uint_1
|
||||
OpSelectionMerge %13962 None
|
||||
OpBranchConditional %21106 %10583 %13962
|
||||
%10583 = OpLabel
|
||||
%18271 = OpBitwiseAnd %v4uint %9605 %2510
|
||||
%9425 = OpShiftLeftLogical %v4uint %18271 %317
|
||||
%20652 = OpBitwiseAnd %v4uint %9605 %1838
|
||||
%17549 = OpShiftRightLogical %v4uint %20652 %317
|
||||
%16376 = OpBitwiseOr %v4uint %9425 %17549
|
||||
OpBranch %13962
|
||||
%13962 = OpLabel
|
||||
%16606 = OpPhi %v4uint %9605 %23266 %16376 %10583
|
||||
%18240 = OpBitwiseAnd %v4uint %16606 %850
|
||||
%9137 = OpConvertUToF %v4float %18240
|
||||
%19365 = OpVectorTimesScalar %v4float %9137 %float_1_52590219en05
|
||||
%23367 = OpShiftRightLogical %v4uint %16606 %749
|
||||
%18492 = OpConvertUToF %v4float %23367
|
||||
%18450 = OpVectorTimesScalar %v4float %18492 %float_1_52590219en05
|
||||
%6268 = OpCompositeExtract %float %19365 0
|
||||
%13806 = OpCompositeExtract %float %18450 0
|
||||
%19232 = OpCompositeConstruct %v2float %6268 %13806
|
||||
%8561 = OpExtInst %uint %1 PackHalf2x16 %19232
|
||||
%23487 = OpCompositeExtract %float %19365 1
|
||||
%14759 = OpCompositeExtract %float %18450 1
|
||||
%19233 = OpCompositeConstruct %v2float %23487 %14759
|
||||
%8562 = OpExtInst %uint %1 PackHalf2x16 %19233
|
||||
%23488 = OpCompositeExtract %float %19365 2
|
||||
%14760 = OpCompositeExtract %float %18450 2
|
||||
%19234 = OpCompositeConstruct %v2float %23488 %14760
|
||||
%8563 = OpExtInst %uint %1 PackHalf2x16 %19234
|
||||
%23489 = OpCompositeExtract %float %19365 3
|
||||
%14761 = OpCompositeExtract %float %18450 3
|
||||
%19213 = OpCompositeConstruct %v2float %23489 %14761
|
||||
%8430 = OpExtInst %uint %1 PackHalf2x16 %19213
|
||||
%15035 = OpCompositeConstruct %v4uint %8561 %8562 %8563 %8430
|
||||
%17859 = OpAccessChain %_ptr_Uniform_v4uint %5134 %int_0 %21670
|
||||
OpStore %17859 %15035
|
||||
%15044 = OpIAdd %uint %21670 %int_1
|
||||
%18776 = OpSelect %uint %10467 %uint_64 %uint_16
|
||||
%11803 = OpShiftRightLogical %uint %18776 %uint_4
|
||||
%13947 = OpIAdd %uint %21493 %11803
|
||||
%22298 = OpAccessChain %_ptr_Uniform_v4uint %4218 %int_0 %13947
|
||||
%6578 = OpLoad %v4uint %22298
|
||||
OpSelectionMerge %13963 None
|
||||
OpBranchConditional %21106 %10584 %13963
|
||||
%10584 = OpLabel
|
||||
%18272 = OpBitwiseAnd %v4uint %6578 %2510
|
||||
%9426 = OpShiftLeftLogical %v4uint %18272 %317
|
||||
%20653 = OpBitwiseAnd %v4uint %6578 %1838
|
||||
%17550 = OpShiftRightLogical %v4uint %20653 %317
|
||||
%16377 = OpBitwiseOr %v4uint %9426 %17550
|
||||
OpBranch %13963
|
||||
%13963 = OpLabel
|
||||
%16607 = OpPhi %v4uint %6578 %13962 %16377 %10584
|
||||
%18241 = OpBitwiseAnd %v4uint %16607 %850
|
||||
%9138 = OpConvertUToF %v4float %18241
|
||||
%19366 = OpVectorTimesScalar %v4float %9138 %float_1_52590219en05
|
||||
%23368 = OpShiftRightLogical %v4uint %16607 %749
|
||||
%18493 = OpConvertUToF %v4float %23368
|
||||
%18451 = OpVectorTimesScalar %v4float %18493 %float_1_52590219en05
|
||||
%6269 = OpCompositeExtract %float %19366 0
|
||||
%13807 = OpCompositeExtract %float %18451 0
|
||||
%19235 = OpCompositeConstruct %v2float %6269 %13807
|
||||
%8564 = OpExtInst %uint %1 PackHalf2x16 %19235
|
||||
%23490 = OpCompositeExtract %float %19366 1
|
||||
%14762 = OpCompositeExtract %float %18451 1
|
||||
%19236 = OpCompositeConstruct %v2float %23490 %14762
|
||||
%8565 = OpExtInst %uint %1 PackHalf2x16 %19236
|
||||
%23491 = OpCompositeExtract %float %19366 2
|
||||
%14763 = OpCompositeExtract %float %18451 2
|
||||
%19237 = OpCompositeConstruct %v2float %23491 %14763
|
||||
%8566 = OpExtInst %uint %1 PackHalf2x16 %19237
|
||||
%23492 = OpCompositeExtract %float %19366 3
|
||||
%14764 = OpCompositeExtract %float %18451 3
|
||||
%19214 = OpCompositeConstruct %v2float %23492 %14764
|
||||
%8431 = OpExtInst %uint %1 PackHalf2x16 %19214
|
||||
%15036 = OpCompositeConstruct %v4uint %8564 %8565 %8566 %8431
|
||||
%20158 = OpAccessChain %_ptr_Uniform_v4uint %5134 %int_0 %15044
|
||||
OpStore %20158 %15036
|
||||
OpBranch %19578
|
||||
%19578 = OpLabel
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
#endif
|
||||
|
||||
const uint32_t texture_load_r16_unorm_float_cs[] = {
|
||||
0x07230203, 0x00010000, 0x0008000A, 0x0000625B, 0x00000000, 0x00020011,
|
||||
0x00000001, 0x0006000B, 0x00000001, 0x4C534C47, 0x6474732E, 0x3035342E,
|
||||
0x00000000, 0x0003000E, 0x00000000, 0x00000001, 0x0006000F, 0x00000005,
|
||||
0x0000161F, 0x6E69616D, 0x00000000, 0x00000F48, 0x00060010, 0x0000161F,
|
||||
0x00000011, 0x00000002, 0x00000020, 0x00000001, 0x00050048, 0x00000489,
|
||||
0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x00000489, 0x00000001,
|
||||
0x00000023, 0x00000004, 0x00050048, 0x00000489, 0x00000002, 0x00000023,
|
||||
0x00000008, 0x00050048, 0x00000489, 0x00000003, 0x00000023, 0x0000000C,
|
||||
0x00050048, 0x00000489, 0x00000004, 0x00000023, 0x00000010, 0x00050048,
|
||||
0x00000489, 0x00000005, 0x00000023, 0x0000001C, 0x00050048, 0x00000489,
|
||||
0x00000006, 0x00000023, 0x00000020, 0x00050048, 0x00000489, 0x00000007,
|
||||
0x00000023, 0x00000024, 0x00030047, 0x00000489, 0x00000002, 0x00040047,
|
||||
0x0000147D, 0x00000022, 0x00000002, 0x00040047, 0x0000147D, 0x00000021,
|
||||
0x00000000, 0x00040047, 0x00000F48, 0x0000000B, 0x0000001C, 0x00040047,
|
||||
0x000007DC, 0x00000006, 0x00000010, 0x00040048, 0x000007B4, 0x00000000,
|
||||
0x00000019, 0x00050048, 0x000007B4, 0x00000000, 0x00000023, 0x00000000,
|
||||
0x00030047, 0x000007B4, 0x00000003, 0x00040047, 0x0000140E, 0x00000022,
|
||||
0x00000000, 0x00040047, 0x0000140E, 0x00000021, 0x00000000, 0x00040047,
|
||||
0x000007DD, 0x00000006, 0x00000010, 0x00040048, 0x000007B5, 0x00000000,
|
||||
0x00000018, 0x00050048, 0x000007B5, 0x00000000, 0x00000023, 0x00000000,
|
||||
0x00030047, 0x000007B5, 0x00000003, 0x00040047, 0x0000107A, 0x00000022,
|
||||
0x00000001, 0x00040047, 0x0000107A, 0x00000021, 0x00000000, 0x00040047,
|
||||
0x00000BB1, 0x0000000B, 0x00000019, 0x00020013, 0x00000008, 0x00030021,
|
||||
0x00000502, 0x00000008, 0x00040015, 0x0000000B, 0x00000020, 0x00000000,
|
||||
0x00040017, 0x00000017, 0x0000000B, 0x00000004, 0x00040015, 0x0000000C,
|
||||
0x00000020, 0x00000001, 0x00040017, 0x00000012, 0x0000000C, 0x00000002,
|
||||
0x00040017, 0x00000016, 0x0000000C, 0x00000003, 0x00020014, 0x00000009,
|
||||
0x00040017, 0x00000014, 0x0000000B, 0x00000003, 0x00030016, 0x0000000D,
|
||||
0x00000020, 0x00040017, 0x0000001D, 0x0000000D, 0x00000004, 0x0004002B,
|
||||
0x0000000B, 0x000001C1, 0x0000FFFF, 0x0004002B, 0x0000000D, 0x0000092A,
|
||||
0x37800080, 0x0004002B, 0x0000000B, 0x00000A3A, 0x00000010, 0x0004002B,
|
||||
0x0000000B, 0x00000A0A, 0x00000000, 0x00040017, 0x00000013, 0x0000000D,
|
||||
0x00000002, 0x0004002B, 0x0000000B, 0x00000A0D, 0x00000001, 0x0004002B,
|
||||
0x0000000B, 0x00000A10, 0x00000002, 0x0004002B, 0x0000000B, 0x00000A13,
|
||||
0x00000003, 0x0004002B, 0x0000000B, 0x000008A6, 0x00FF00FF, 0x0004002B,
|
||||
0x0000000B, 0x00000A22, 0x00000008, 0x0004002B, 0x0000000B, 0x000005FD,
|
||||
0xFF00FF00, 0x0004002B, 0x0000000C, 0x00000A1A, 0x00000005, 0x0004002B,
|
||||
0x0000000B, 0x00000A19, 0x00000005, 0x0004002B, 0x0000000B, 0x00000A1F,
|
||||
0x00000007, 0x0004002B, 0x0000000C, 0x00000A20, 0x00000007, 0x0004002B,
|
||||
0x0000000C, 0x00000A35, 0x0000000E, 0x0004002B, 0x0000000C, 0x00000A11,
|
||||
0x00000002, 0x0004002B, 0x0000000C, 0x000009DB, 0xFFFFFFF0, 0x0004002B,
|
||||
0x0000000C, 0x00000A0E, 0x00000001, 0x0004002B, 0x0000000C, 0x00000A38,
|
||||
0x0000000F, 0x0004002B, 0x0000000C, 0x00000A17, 0x00000004, 0x0004002B,
|
||||
0x0000000C, 0x0000040B, 0xFFFFFE00, 0x0004002B, 0x0000000C, 0x00000A14,
|
||||
0x00000003, 0x0004002B, 0x0000000C, 0x00000A3B, 0x00000010, 0x0004002B,
|
||||
0x0000000C, 0x00000388, 0x000001C0, 0x0004002B, 0x0000000C, 0x00000A23,
|
||||
0x00000008, 0x0004002B, 0x0000000C, 0x00000A1D, 0x00000006, 0x0004002B,
|
||||
0x0000000C, 0x00000AC8, 0x0000003F, 0x0004002B, 0x0000000B, 0x00000A16,
|
||||
0x00000004, 0x0004002B, 0x0000000C, 0x0000078B, 0x0FFFFFFF, 0x0004002B,
|
||||
0x0000000C, 0x00000A05, 0xFFFFFFFE, 0x0004002B, 0x0000000B, 0x00000A6A,
|
||||
0x00000020, 0x0004002B, 0x0000000B, 0x00000ACA, 0x00000040, 0x000A001E,
|
||||
0x00000489, 0x0000000B, 0x0000000B, 0x0000000B, 0x0000000B, 0x00000014,
|
||||
0x0000000B, 0x0000000B, 0x0000000B, 0x00040020, 0x00000706, 0x00000002,
|
||||
0x00000489, 0x0004003B, 0x00000706, 0x0000147D, 0x00000002, 0x0004002B,
|
||||
0x0000000C, 0x00000A0B, 0x00000000, 0x00040020, 0x00000288, 0x00000002,
|
||||
0x0000000B, 0x00040020, 0x00000291, 0x00000002, 0x00000014, 0x00040017,
|
||||
0x00000011, 0x0000000B, 0x00000002, 0x00040020, 0x00000292, 0x00000001,
|
||||
0x00000014, 0x0004003B, 0x00000292, 0x00000F48, 0x00000001, 0x0006002C,
|
||||
0x00000014, 0x00000A34, 0x00000A16, 0x00000A0A, 0x00000A0A, 0x00040017,
|
||||
0x0000000F, 0x00000009, 0x00000002, 0x0003001D, 0x000007DC, 0x00000017,
|
||||
0x0003001E, 0x000007B4, 0x000007DC, 0x00040020, 0x00000A31, 0x00000002,
|
||||
0x000007B4, 0x0004003B, 0x00000A31, 0x0000140E, 0x00000002, 0x0003001D,
|
||||
0x000007DD, 0x00000017, 0x0003001E, 0x000007B5, 0x000007DD, 0x00040020,
|
||||
0x00000A32, 0x00000002, 0x000007B5, 0x0004003B, 0x00000A32, 0x0000107A,
|
||||
0x00000002, 0x00040020, 0x00000294, 0x00000002, 0x00000017, 0x0006002C,
|
||||
0x00000014, 0x00000BB1, 0x00000A10, 0x00000A6A, 0x00000A0D, 0x0007002C,
|
||||
0x00000017, 0x000009CE, 0x000008A6, 0x000008A6, 0x000008A6, 0x000008A6,
|
||||
0x0007002C, 0x00000017, 0x0000013D, 0x00000A22, 0x00000A22, 0x00000A22,
|
||||
0x00000A22, 0x0007002C, 0x00000017, 0x0000072E, 0x000005FD, 0x000005FD,
|
||||
0x000005FD, 0x000005FD, 0x0007002C, 0x00000017, 0x00000352, 0x000001C1,
|
||||
0x000001C1, 0x000001C1, 0x000001C1, 0x0007002C, 0x00000017, 0x000002ED,
|
||||
0x00000A3A, 0x00000A3A, 0x00000A3A, 0x00000A3A, 0x00050036, 0x00000008,
|
||||
0x0000161F, 0x00000000, 0x00000502, 0x000200F8, 0x00003B06, 0x000300F7,
|
||||
0x00004C7A, 0x00000000, 0x000300FB, 0x00000A0A, 0x00003B21, 0x000200F8,
|
||||
0x00003B21, 0x0004003D, 0x00000014, 0x0000312F, 0x00000F48, 0x000500C4,
|
||||
0x00000014, 0x000027F5, 0x0000312F, 0x00000A34, 0x00050041, 0x00000291,
|
||||
0x0000625A, 0x0000147D, 0x00000A17, 0x0004003D, 0x00000014, 0x000059B5,
|
||||
0x0000625A, 0x0007004F, 0x00000011, 0x00004993, 0x000027F5, 0x000027F5,
|
||||
0x00000000, 0x00000001, 0x0007004F, 0x00000011, 0x000019E2, 0x000059B5,
|
||||
0x000059B5, 0x00000000, 0x00000001, 0x000500AE, 0x0000000F, 0x00004288,
|
||||
0x00004993, 0x000019E2, 0x0004009A, 0x00000009, 0x00006067, 0x00004288,
|
||||
0x000300F7, 0x0000188A, 0x00000002, 0x000400FA, 0x00006067, 0x000055E8,
|
||||
0x0000188A, 0x000200F8, 0x000055E8, 0x000200F9, 0x00004C7A, 0x000200F8,
|
||||
0x0000188A, 0x0004007C, 0x00000016, 0x00001A8B, 0x000027F5, 0x00050041,
|
||||
0x00000288, 0x00004968, 0x0000147D, 0x00000A1D, 0x0004003D, 0x0000000B,
|
||||
0x0000263C, 0x00004968, 0x00050051, 0x0000000B, 0x00004F98, 0x000059B5,
|
||||
0x00000001, 0x00050051, 0x0000000C, 0x00003964, 0x00001A8B, 0x00000000,
|
||||
0x00050084, 0x0000000C, 0x0000591A, 0x00003964, 0x00000A11, 0x00050051,
|
||||
0x0000000C, 0x000018DA, 0x00001A8B, 0x00000002, 0x0004007C, 0x0000000C,
|
||||
0x000038A9, 0x00004F98, 0x00050084, 0x0000000C, 0x00002C0F, 0x000018DA,
|
||||
0x000038A9, 0x00050051, 0x0000000C, 0x000044BE, 0x00001A8B, 0x00000001,
|
||||
0x00050080, 0x0000000C, 0x000056D4, 0x00002C0F, 0x000044BE, 0x0004007C,
|
||||
0x0000000C, 0x00005785, 0x0000263C, 0x00050084, 0x0000000C, 0x00005FD7,
|
||||
0x000056D4, 0x00005785, 0x00050080, 0x0000000C, 0x00001B95, 0x0000591A,
|
||||
0x00005FD7, 0x0004007C, 0x0000000B, 0x00004B46, 0x00001B95, 0x00050041,
|
||||
0x00000288, 0x00004C04, 0x0000147D, 0x00000A1A, 0x0004003D, 0x0000000B,
|
||||
0x0000595B, 0x00004C04, 0x00050080, 0x0000000B, 0x00002145, 0x00004B46,
|
||||
0x0000595B, 0x000500C2, 0x0000000B, 0x000054A6, 0x00002145, 0x00000A16,
|
||||
0x00050041, 0x00000288, 0x000051D6, 0x0000147D, 0x00000A0B, 0x0004003D,
|
||||
0x0000000B, 0x000053A3, 0x000051D6, 0x000500C7, 0x0000000B, 0x000018ED,
|
||||
0x000053A3, 0x00000A0D, 0x000500AB, 0x00000009, 0x000028E3, 0x000018ED,
|
||||
0x00000A0A, 0x000300F7, 0x00005AE2, 0x00000002, 0x000400FA, 0x000028E3,
|
||||
0x0000277C, 0x00002A0D, 0x000200F8, 0x0000277C, 0x000500C7, 0x0000000B,
|
||||
0x00005BD4, 0x000053A3, 0x00000A10, 0x000500AB, 0x00000009, 0x00003FAC,
|
||||
0x00005BD4, 0x00000A0A, 0x000300F7, 0x00001E0B, 0x00000002, 0x000400FA,
|
||||
0x00003FAC, 0x00002F61, 0x00006228, 0x000200F8, 0x00002F61, 0x00050041,
|
||||
0x00000288, 0x00004722, 0x0000147D, 0x00000A11, 0x0004003D, 0x0000000B,
|
||||
0x00003D0B, 0x00004722, 0x00050041, 0x00000288, 0x00005860, 0x0000147D,
|
||||
0x00000A14, 0x0004003D, 0x0000000B, 0x0000541F, 0x00005860, 0x000500C3,
|
||||
0x0000000C, 0x00003A4B, 0x000044BE, 0x00000A17, 0x000500C3, 0x0000000C,
|
||||
0x00004955, 0x000018DA, 0x00000A11, 0x000500C2, 0x0000000B, 0x00004947,
|
||||
0x0000541F, 0x00000A16, 0x0004007C, 0x0000000C, 0x000018AA, 0x00004947,
|
||||
0x00050084, 0x0000000C, 0x00005321, 0x00004955, 0x000018AA, 0x00050080,
|
||||
0x0000000C, 0x00003B27, 0x00003A4B, 0x00005321, 0x000500C2, 0x0000000B,
|
||||
0x00002348, 0x00003D0B, 0x00000A19, 0x0004007C, 0x0000000C, 0x00003901,
|
||||
0x00002348, 0x00050084, 0x0000000C, 0x000020F4, 0x00003B27, 0x00003901,
|
||||
0x000500C3, 0x0000000C, 0x000032BA, 0x00003964, 0x00000A1A, 0x00050080,
|
||||
0x0000000C, 0x00005FEE, 0x000032BA, 0x000020F4, 0x000500C4, 0x0000000C,
|
||||
0x0000225D, 0x00005FEE, 0x00000A1F, 0x000500C7, 0x0000000C, 0x00002CF6,
|
||||
0x0000225D, 0x0000078B, 0x000500C4, 0x0000000C, 0x000049FA, 0x00002CF6,
|
||||
0x00000A0E, 0x000500C7, 0x0000000C, 0x00004D38, 0x00003964, 0x00000A20,
|
||||
0x000500C7, 0x0000000C, 0x00003138, 0x000044BE, 0x00000A1D, 0x000500C4,
|
||||
0x0000000C, 0x0000454D, 0x00003138, 0x00000A11, 0x00050080, 0x0000000C,
|
||||
0x0000434B, 0x00004D38, 0x0000454D, 0x000500C4, 0x0000000C, 0x00001B88,
|
||||
0x0000434B, 0x00000A1F, 0x000500C3, 0x0000000C, 0x00005DE3, 0x00001B88,
|
||||
0x00000A1D, 0x000500C3, 0x0000000C, 0x00002215, 0x000044BE, 0x00000A14,
|
||||
0x00050080, 0x0000000C, 0x000035A3, 0x00002215, 0x00004955, 0x000500C7,
|
||||
0x0000000C, 0x00005A0C, 0x000035A3, 0x00000A0E, 0x000500C3, 0x0000000C,
|
||||
0x00004112, 0x00003964, 0x00000A14, 0x000500C4, 0x0000000C, 0x0000496A,
|
||||
0x00005A0C, 0x00000A0E, 0x00050080, 0x0000000C, 0x000034BD, 0x00004112,
|
||||
0x0000496A, 0x000500C7, 0x0000000C, 0x00004ADD, 0x000034BD, 0x00000A14,
|
||||
0x000500C4, 0x0000000C, 0x0000544A, 0x00004ADD, 0x00000A0E, 0x00050080,
|
||||
0x0000000C, 0x00003C4B, 0x00005A0C, 0x0000544A, 0x000500C7, 0x0000000C,
|
||||
0x0000335E, 0x00005DE3, 0x000009DB, 0x00050080, 0x0000000C, 0x00004F70,
|
||||
0x000049FA, 0x0000335E, 0x000500C4, 0x0000000C, 0x00005B31, 0x00004F70,
|
||||
0x00000A0E, 0x000500C7, 0x0000000C, 0x00005AEA, 0x00005DE3, 0x00000A38,
|
||||
0x00050080, 0x0000000C, 0x0000285C, 0x00005B31, 0x00005AEA, 0x000500C7,
|
||||
0x0000000C, 0x000047B4, 0x000018DA, 0x00000A14, 0x000500C4, 0x0000000C,
|
||||
0x0000544B, 0x000047B4, 0x00000A1F, 0x00050080, 0x0000000C, 0x00004157,
|
||||
0x0000285C, 0x0000544B, 0x000500C7, 0x0000000C, 0x00004ADE, 0x000044BE,
|
||||
0x00000A0E, 0x000500C4, 0x0000000C, 0x0000544C, 0x00004ADE, 0x00000A17,
|
||||
0x00050080, 0x0000000C, 0x00004158, 0x00004157, 0x0000544C, 0x000500C7,
|
||||
0x0000000C, 0x00004FD6, 0x00003C4B, 0x00000A0E, 0x000500C4, 0x0000000C,
|
||||
0x00002703, 0x00004FD6, 0x00000A14, 0x000500C3, 0x0000000C, 0x00003332,
|
||||
0x00004158, 0x00000A1D, 0x000500C7, 0x0000000C, 0x000036D6, 0x00003332,
|
||||
0x00000A20, 0x00050080, 0x0000000C, 0x00003412, 0x00002703, 0x000036D6,
|
||||
0x000500C4, 0x0000000C, 0x00005B32, 0x00003412, 0x00000A14, 0x000500C7,
|
||||
0x0000000C, 0x00005AB1, 0x00003C4B, 0x00000A05, 0x00050080, 0x0000000C,
|
||||
0x00002A9C, 0x00005B32, 0x00005AB1, 0x000500C4, 0x0000000C, 0x00005B33,
|
||||
0x00002A9C, 0x00000A11, 0x000500C7, 0x0000000C, 0x00005AB2, 0x00004158,
|
||||
0x0000040B, 0x00050080, 0x0000000C, 0x00002A9D, 0x00005B33, 0x00005AB2,
|
||||
0x000500C4, 0x0000000C, 0x00005B34, 0x00002A9D, 0x00000A14, 0x000500C7,
|
||||
0x0000000C, 0x00005EA0, 0x00004158, 0x00000AC8, 0x00050080, 0x0000000C,
|
||||
0x000054ED, 0x00005B34, 0x00005EA0, 0x000200F9, 0x00001E0B, 0x000200F8,
|
||||
0x00006228, 0x0004007C, 0x00000012, 0x00001A8C, 0x00004993, 0x00050041,
|
||||
0x00000288, 0x00004969, 0x0000147D, 0x00000A11, 0x0004003D, 0x0000000B,
|
||||
0x00002EB2, 0x00004969, 0x00050051, 0x0000000C, 0x00004944, 0x00001A8C,
|
||||
0x00000000, 0x000500C3, 0x0000000C, 0x00004CF5, 0x00004944, 0x00000A1A,
|
||||
0x00050051, 0x0000000C, 0x00002747, 0x00001A8C, 0x00000001, 0x000500C3,
|
||||
0x0000000C, 0x0000405C, 0x00002747, 0x00000A1A, 0x000500C2, 0x0000000B,
|
||||
0x00005B4D, 0x00002EB2, 0x00000A19, 0x0004007C, 0x0000000C, 0x000018AB,
|
||||
0x00005B4D, 0x00050084, 0x0000000C, 0x00005347, 0x0000405C, 0x000018AB,
|
||||
0x00050080, 0x0000000C, 0x00003F5E, 0x00004CF5, 0x00005347, 0x000500C4,
|
||||
0x0000000C, 0x00004A8E, 0x00003F5E, 0x00000A22, 0x000500C7, 0x0000000C,
|
||||
0x00002AB6, 0x00004944, 0x00000A20, 0x000500C7, 0x0000000C, 0x00003139,
|
||||
0x00002747, 0x00000A35, 0x000500C4, 0x0000000C, 0x0000454E, 0x00003139,
|
||||
0x00000A11, 0x00050080, 0x0000000C, 0x00004397, 0x00002AB6, 0x0000454E,
|
||||
0x000500C4, 0x0000000C, 0x000018E7, 0x00004397, 0x00000A0D, 0x000500C7,
|
||||
0x0000000C, 0x000027B1, 0x000018E7, 0x000009DB, 0x000500C4, 0x0000000C,
|
||||
0x00002F76, 0x000027B1, 0x00000A0E, 0x00050080, 0x0000000C, 0x00003C4C,
|
||||
0x00004A8E, 0x00002F76, 0x000500C7, 0x0000000C, 0x00003397, 0x000018E7,
|
||||
0x00000A38, 0x00050080, 0x0000000C, 0x00004D30, 0x00003C4C, 0x00003397,
|
||||
0x000500C7, 0x0000000C, 0x000047B5, 0x00002747, 0x00000A0E, 0x000500C4,
|
||||
0x0000000C, 0x0000544D, 0x000047B5, 0x00000A17, 0x00050080, 0x0000000C,
|
||||
0x00004159, 0x00004D30, 0x0000544D, 0x000500C7, 0x0000000C, 0x00005022,
|
||||
0x00004159, 0x0000040B, 0x000500C4, 0x0000000C, 0x00002416, 0x00005022,
|
||||
0x00000A14, 0x000500C7, 0x0000000C, 0x00004A33, 0x00002747, 0x00000A3B,
|
||||
0x000500C4, 0x0000000C, 0x00002F77, 0x00004A33, 0x00000A20, 0x00050080,
|
||||
0x0000000C, 0x0000415A, 0x00002416, 0x00002F77, 0x000500C7, 0x0000000C,
|
||||
0x00004ADF, 0x00004159, 0x00000388, 0x000500C4, 0x0000000C, 0x0000544E,
|
||||
0x00004ADF, 0x00000A11, 0x00050080, 0x0000000C, 0x00004144, 0x0000415A,
|
||||
0x0000544E, 0x000500C7, 0x0000000C, 0x00005083, 0x00002747, 0x00000A23,
|
||||
0x000500C3, 0x0000000C, 0x000041BF, 0x00005083, 0x00000A11, 0x000500C3,
|
||||
0x0000000C, 0x00001EEC, 0x00004944, 0x00000A14, 0x00050080, 0x0000000C,
|
||||
0x000035B6, 0x000041BF, 0x00001EEC, 0x000500C7, 0x0000000C, 0x00005453,
|
||||
0x000035B6, 0x00000A14, 0x000500C4, 0x0000000C, 0x0000544F, 0x00005453,
|
||||
0x00000A1D, 0x00050080, 0x0000000C, 0x00003C4D, 0x00004144, 0x0000544F,
|
||||
0x000500C7, 0x0000000C, 0x0000374D, 0x00004159, 0x00000AC8, 0x00050080,
|
||||
0x0000000C, 0x00002F42, 0x00003C4D, 0x0000374D, 0x000200F9, 0x00001E0B,
|
||||
0x000200F8, 0x00001E0B, 0x000700F5, 0x0000000C, 0x0000292C, 0x000054ED,
|
||||
0x00002F61, 0x00002F42, 0x00006228, 0x000200F9, 0x00005AE2, 0x000200F8,
|
||||
0x00002A0D, 0x00050041, 0x00000288, 0x00005098, 0x0000147D, 0x00000A11,
|
||||
0x0004003D, 0x0000000B, 0x00003D0C, 0x00005098, 0x00050041, 0x00000288,
|
||||
0x0000531B, 0x0000147D, 0x00000A14, 0x0004003D, 0x0000000B, 0x000034EE,
|
||||
0x0000531B, 0x0004007C, 0x0000000C, 0x00003ADE, 0x000034EE, 0x00050084,
|
||||
0x0000000C, 0x000049EF, 0x000018DA, 0x00003ADE, 0x00050080, 0x0000000C,
|
||||
0x0000208E, 0x000049EF, 0x000044BE, 0x0004007C, 0x0000000C, 0x000022F8,
|
||||
0x00003D0C, 0x00050084, 0x0000000C, 0x00001E9F, 0x0000208E, 0x000022F8,
|
||||
0x00050080, 0x0000000C, 0x00001F30, 0x0000591A, 0x00001E9F, 0x000200F9,
|
||||
0x00005AE2, 0x000200F8, 0x00005AE2, 0x000700F5, 0x0000000C, 0x00004D24,
|
||||
0x0000292C, 0x00001E0B, 0x00001F30, 0x00002A0D, 0x00050041, 0x00000288,
|
||||
0x0000615A, 0x0000147D, 0x00000A0E, 0x0004003D, 0x0000000B, 0x00001D4E,
|
||||
0x0000615A, 0x0004007C, 0x0000000C, 0x00003D46, 0x00001D4E, 0x00050080,
|
||||
0x0000000C, 0x00003CDB, 0x00003D46, 0x00004D24, 0x0004007C, 0x0000000B,
|
||||
0x0000487C, 0x00003CDB, 0x000500C2, 0x0000000B, 0x000053F5, 0x0000487C,
|
||||
0x00000A16, 0x000500C2, 0x0000000B, 0x00003A95, 0x000053A3, 0x00000A10,
|
||||
0x000500C7, 0x0000000B, 0x000020CA, 0x00003A95, 0x00000A13, 0x00060041,
|
||||
0x00000294, 0x000050F7, 0x0000107A, 0x00000A0B, 0x000053F5, 0x0004003D,
|
||||
0x00000017, 0x00002585, 0x000050F7, 0x000500AA, 0x00000009, 0x00005272,
|
||||
0x000020CA, 0x00000A0D, 0x000300F7, 0x0000368A, 0x00000000, 0x000400FA,
|
||||
0x00005272, 0x00002957, 0x0000368A, 0x000200F8, 0x00002957, 0x000500C7,
|
||||
0x00000017, 0x0000475F, 0x00002585, 0x000009CE, 0x000500C4, 0x00000017,
|
||||
0x000024D1, 0x0000475F, 0x0000013D, 0x000500C7, 0x00000017, 0x000050AC,
|
||||
0x00002585, 0x0000072E, 0x000500C2, 0x00000017, 0x0000448D, 0x000050AC,
|
||||
0x0000013D, 0x000500C5, 0x00000017, 0x00003FF8, 0x000024D1, 0x0000448D,
|
||||
0x000200F9, 0x0000368A, 0x000200F8, 0x0000368A, 0x000700F5, 0x00000017,
|
||||
0x000040DE, 0x00002585, 0x00005AE2, 0x00003FF8, 0x00002957, 0x000500C7,
|
||||
0x00000017, 0x00004740, 0x000040DE, 0x00000352, 0x00040070, 0x0000001D,
|
||||
0x000023B1, 0x00004740, 0x0005008E, 0x0000001D, 0x00004BA5, 0x000023B1,
|
||||
0x0000092A, 0x000500C2, 0x00000017, 0x00005B47, 0x000040DE, 0x000002ED,
|
||||
0x00040070, 0x0000001D, 0x0000483C, 0x00005B47, 0x0005008E, 0x0000001D,
|
||||
0x00004812, 0x0000483C, 0x0000092A, 0x00050051, 0x0000000D, 0x0000187C,
|
||||
0x00004BA5, 0x00000000, 0x00050051, 0x0000000D, 0x000035EE, 0x00004812,
|
||||
0x00000000, 0x00050050, 0x00000013, 0x00004B20, 0x0000187C, 0x000035EE,
|
||||
0x0006000C, 0x0000000B, 0x00002171, 0x00000001, 0x0000003A, 0x00004B20,
|
||||
0x00050051, 0x0000000D, 0x00005BBF, 0x00004BA5, 0x00000001, 0x00050051,
|
||||
0x0000000D, 0x000039A7, 0x00004812, 0x00000001, 0x00050050, 0x00000013,
|
||||
0x00004B21, 0x00005BBF, 0x000039A7, 0x0006000C, 0x0000000B, 0x00002172,
|
||||
0x00000001, 0x0000003A, 0x00004B21, 0x00050051, 0x0000000D, 0x00005BC0,
|
||||
0x00004BA5, 0x00000002, 0x00050051, 0x0000000D, 0x000039A8, 0x00004812,
|
||||
0x00000002, 0x00050050, 0x00000013, 0x00004B22, 0x00005BC0, 0x000039A8,
|
||||
0x0006000C, 0x0000000B, 0x00002173, 0x00000001, 0x0000003A, 0x00004B22,
|
||||
0x00050051, 0x0000000D, 0x00005BC1, 0x00004BA5, 0x00000003, 0x00050051,
|
||||
0x0000000D, 0x000039A9, 0x00004812, 0x00000003, 0x00050050, 0x00000013,
|
||||
0x00004B0D, 0x00005BC1, 0x000039A9, 0x0006000C, 0x0000000B, 0x000020EE,
|
||||
0x00000001, 0x0000003A, 0x00004B0D, 0x00070050, 0x00000017, 0x00003ABB,
|
||||
0x00002171, 0x00002172, 0x00002173, 0x000020EE, 0x00060041, 0x00000294,
|
||||
0x000045C3, 0x0000140E, 0x00000A0B, 0x000054A6, 0x0003003E, 0x000045C3,
|
||||
0x00003ABB, 0x00050080, 0x0000000B, 0x00003AC4, 0x000054A6, 0x00000A0E,
|
||||
0x000600A9, 0x0000000B, 0x00004958, 0x000028E3, 0x00000ACA, 0x00000A3A,
|
||||
0x000500C2, 0x0000000B, 0x00002E1B, 0x00004958, 0x00000A16, 0x00050080,
|
||||
0x0000000B, 0x0000367B, 0x000053F5, 0x00002E1B, 0x00060041, 0x00000294,
|
||||
0x0000571A, 0x0000107A, 0x00000A0B, 0x0000367B, 0x0004003D, 0x00000017,
|
||||
0x000019B2, 0x0000571A, 0x000300F7, 0x0000368B, 0x00000000, 0x000400FA,
|
||||
0x00005272, 0x00002958, 0x0000368B, 0x000200F8, 0x00002958, 0x000500C7,
|
||||
0x00000017, 0x00004760, 0x000019B2, 0x000009CE, 0x000500C4, 0x00000017,
|
||||
0x000024D2, 0x00004760, 0x0000013D, 0x000500C7, 0x00000017, 0x000050AD,
|
||||
0x000019B2, 0x0000072E, 0x000500C2, 0x00000017, 0x0000448E, 0x000050AD,
|
||||
0x0000013D, 0x000500C5, 0x00000017, 0x00003FF9, 0x000024D2, 0x0000448E,
|
||||
0x000200F9, 0x0000368B, 0x000200F8, 0x0000368B, 0x000700F5, 0x00000017,
|
||||
0x000040DF, 0x000019B2, 0x0000368A, 0x00003FF9, 0x00002958, 0x000500C7,
|
||||
0x00000017, 0x00004741, 0x000040DF, 0x00000352, 0x00040070, 0x0000001D,
|
||||
0x000023B2, 0x00004741, 0x0005008E, 0x0000001D, 0x00004BA6, 0x000023B2,
|
||||
0x0000092A, 0x000500C2, 0x00000017, 0x00005B48, 0x000040DF, 0x000002ED,
|
||||
0x00040070, 0x0000001D, 0x0000483D, 0x00005B48, 0x0005008E, 0x0000001D,
|
||||
0x00004813, 0x0000483D, 0x0000092A, 0x00050051, 0x0000000D, 0x0000187D,
|
||||
0x00004BA6, 0x00000000, 0x00050051, 0x0000000D, 0x000035EF, 0x00004813,
|
||||
0x00000000, 0x00050050, 0x00000013, 0x00004B23, 0x0000187D, 0x000035EF,
|
||||
0x0006000C, 0x0000000B, 0x00002174, 0x00000001, 0x0000003A, 0x00004B23,
|
||||
0x00050051, 0x0000000D, 0x00005BC2, 0x00004BA6, 0x00000001, 0x00050051,
|
||||
0x0000000D, 0x000039AA, 0x00004813, 0x00000001, 0x00050050, 0x00000013,
|
||||
0x00004B24, 0x00005BC2, 0x000039AA, 0x0006000C, 0x0000000B, 0x00002175,
|
||||
0x00000001, 0x0000003A, 0x00004B24, 0x00050051, 0x0000000D, 0x00005BC3,
|
||||
0x00004BA6, 0x00000002, 0x00050051, 0x0000000D, 0x000039AB, 0x00004813,
|
||||
0x00000002, 0x00050050, 0x00000013, 0x00004B25, 0x00005BC3, 0x000039AB,
|
||||
0x0006000C, 0x0000000B, 0x00002176, 0x00000001, 0x0000003A, 0x00004B25,
|
||||
0x00050051, 0x0000000D, 0x00005BC4, 0x00004BA6, 0x00000003, 0x00050051,
|
||||
0x0000000D, 0x000039AC, 0x00004813, 0x00000003, 0x00050050, 0x00000013,
|
||||
0x00004B0E, 0x00005BC4, 0x000039AC, 0x0006000C, 0x0000000B, 0x000020EF,
|
||||
0x00000001, 0x0000003A, 0x00004B0E, 0x00070050, 0x00000017, 0x00003ABC,
|
||||
0x00002174, 0x00002175, 0x00002176, 0x000020EF, 0x00060041, 0x00000294,
|
||||
0x00004EBE, 0x0000140E, 0x00000A0B, 0x00003AC4, 0x0003003E, 0x00004EBE,
|
||||
0x00003ABC, 0x000200F9, 0x00004C7A, 0x000200F8, 0x00004C7A, 0x000100FD,
|
||||
0x00010038,
|
||||
};
|
716
src/xenia/gpu/shaders/bytecode/vulkan_spirv/texture_load_r16_unorm_float_scaled_cs.h
generated
Normal file
716
src/xenia/gpu/shaders/bytecode/vulkan_spirv/texture_load_r16_unorm_float_scaled_cs.h
generated
Normal file
|
@ -0,0 +1,716 @@
|
|||
// Generated with `xb buildshaders`.
|
||||
#if 0
|
||||
; SPIR-V
|
||||
; Version: 1.0
|
||||
; Generator: Khronos Glslang Reference Front End; 10
|
||||
; Bound: 25179
|
||||
; Schema: 0
|
||||
OpCapability Shader
|
||||
%1 = OpExtInstImport "GLSL.std.450"
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %5663 "main" %gl_GlobalInvocationID
|
||||
OpExecutionMode %5663 LocalSize 2 32 1
|
||||
OpMemberDecorate %_struct_1161 0 Offset 0
|
||||
OpMemberDecorate %_struct_1161 1 Offset 4
|
||||
OpMemberDecorate %_struct_1161 2 Offset 8
|
||||
OpMemberDecorate %_struct_1161 3 Offset 12
|
||||
OpMemberDecorate %_struct_1161 4 Offset 16
|
||||
OpMemberDecorate %_struct_1161 5 Offset 28
|
||||
OpMemberDecorate %_struct_1161 6 Offset 32
|
||||
OpMemberDecorate %_struct_1161 7 Offset 36
|
||||
OpDecorate %_struct_1161 Block
|
||||
OpDecorate %5245 DescriptorSet 2
|
||||
OpDecorate %5245 Binding 0
|
||||
OpDecorate %gl_GlobalInvocationID BuiltIn GlobalInvocationId
|
||||
OpDecorate %_runtimearr_v4uint ArrayStride 16
|
||||
OpMemberDecorate %_struct_1972 0 NonReadable
|
||||
OpMemberDecorate %_struct_1972 0 Offset 0
|
||||
OpDecorate %_struct_1972 BufferBlock
|
||||
OpDecorate %5134 DescriptorSet 0
|
||||
OpDecorate %5134 Binding 0
|
||||
OpDecorate %_runtimearr_v4uint_0 ArrayStride 16
|
||||
OpMemberDecorate %_struct_1973 0 NonWritable
|
||||
OpMemberDecorate %_struct_1973 0 Offset 0
|
||||
OpDecorate %_struct_1973 BufferBlock
|
||||
OpDecorate %4218 DescriptorSet 1
|
||||
OpDecorate %4218 Binding 0
|
||||
OpDecorate %gl_WorkGroupSize BuiltIn WorkgroupSize
|
||||
%void = OpTypeVoid
|
||||
%1282 = OpTypeFunction %void
|
||||
%uint = OpTypeInt 32 0
|
||||
%v4uint = OpTypeVector %uint 4
|
||||
%int = OpTypeInt 32 1
|
||||
%v2int = OpTypeVector %int 2
|
||||
%v3int = OpTypeVector %int 3
|
||||
%bool = OpTypeBool
|
||||
%v3uint = OpTypeVector %uint 3
|
||||
%v2uint = OpTypeVector %uint 2
|
||||
%float = OpTypeFloat 32
|
||||
%v4float = OpTypeVector %float 4
|
||||
%uint_65535 = OpConstant %uint 65535
|
||||
%float_1_52590219en05 = OpConstant %float 1.52590219e-05
|
||||
%uint_16 = OpConstant %uint 16
|
||||
%uint_0 = OpConstant %uint 0
|
||||
%v2float = OpTypeVector %float 2
|
||||
%uint_1 = OpConstant %uint 1
|
||||
%uint_2 = OpConstant %uint 2
|
||||
%uint_3 = OpConstant %uint 3
|
||||
%uint_16711935 = OpConstant %uint 16711935
|
||||
%uint_8 = OpConstant %uint 8
|
||||
%uint_4278255360 = OpConstant %uint 4278255360
|
||||
%int_5 = OpConstant %int 5
|
||||
%uint_5 = OpConstant %uint 5
|
||||
%uint_7 = OpConstant %uint 7
|
||||
%int_7 = OpConstant %int 7
|
||||
%int_14 = OpConstant %int 14
|
||||
%int_2 = OpConstant %int 2
|
||||
%int_n16 = OpConstant %int -16
|
||||
%int_1 = OpConstant %int 1
|
||||
%int_15 = OpConstant %int 15
|
||||
%int_4 = OpConstant %int 4
|
||||
%int_n512 = OpConstant %int -512
|
||||
%int_3 = OpConstant %int 3
|
||||
%int_16 = OpConstant %int 16
|
||||
%int_448 = OpConstant %int 448
|
||||
%int_8 = OpConstant %int 8
|
||||
%int_6 = OpConstant %int 6
|
||||
%int_63 = OpConstant %int 63
|
||||
%uint_4 = OpConstant %uint 4
|
||||
%uint_6 = OpConstant %uint 6
|
||||
%int_268435455 = OpConstant %int 268435455
|
||||
%int_n2 = OpConstant %int -2
|
||||
%uint_32 = OpConstant %uint 32
|
||||
%uint_64 = OpConstant %uint 64
|
||||
%_struct_1161 = OpTypeStruct %uint %uint %uint %uint %v3uint %uint %uint %uint
|
||||
%_ptr_Uniform__struct_1161 = OpTypePointer Uniform %_struct_1161
|
||||
%5245 = OpVariable %_ptr_Uniform__struct_1161 Uniform
|
||||
%int_0 = OpConstant %int 0
|
||||
%_ptr_Uniform_uint = OpTypePointer Uniform %uint
|
||||
%1915 = OpConstantComposite %v2uint %uint_4 %uint_6
|
||||
%_ptr_Uniform_v3uint = OpTypePointer Uniform %v3uint
|
||||
%_ptr_Input_v3uint = OpTypePointer Input %v3uint
|
||||
%gl_GlobalInvocationID = OpVariable %_ptr_Input_v3uint Input
|
||||
%2612 = OpConstantComposite %v3uint %uint_4 %uint_0 %uint_0
|
||||
%v2bool = OpTypeVector %bool 2
|
||||
%_runtimearr_v4uint = OpTypeRuntimeArray %v4uint
|
||||
%_struct_1972 = OpTypeStruct %_runtimearr_v4uint
|
||||
%_ptr_Uniform__struct_1972 = OpTypePointer Uniform %_struct_1972
|
||||
%5134 = OpVariable %_ptr_Uniform__struct_1972 Uniform
|
||||
%_runtimearr_v4uint_0 = OpTypeRuntimeArray %v4uint
|
||||
%_struct_1973 = OpTypeStruct %_runtimearr_v4uint_0
|
||||
%_ptr_Uniform__struct_1973 = OpTypePointer Uniform %_struct_1973
|
||||
%4218 = OpVariable %_ptr_Uniform__struct_1973 Uniform
|
||||
%_ptr_Uniform_v4uint = OpTypePointer Uniform %v4uint
|
||||
%gl_WorkGroupSize = OpConstantComposite %v3uint %uint_2 %uint_32 %uint_1
|
||||
%1870 = OpConstantComposite %v2uint %uint_3 %uint_3
|
||||
%2510 = OpConstantComposite %v4uint %uint_16711935 %uint_16711935 %uint_16711935 %uint_16711935
|
||||
%317 = OpConstantComposite %v4uint %uint_8 %uint_8 %uint_8 %uint_8
|
||||
%1838 = OpConstantComposite %v4uint %uint_4278255360 %uint_4278255360 %uint_4278255360 %uint_4278255360
|
||||
%850 = OpConstantComposite %v4uint %uint_65535 %uint_65535 %uint_65535 %uint_65535
|
||||
%749 = OpConstantComposite %v4uint %uint_16 %uint_16 %uint_16 %uint_16
|
||||
%5663 = OpFunction %void None %1282
|
||||
%15110 = OpLabel
|
||||
OpSelectionMerge %19578 None
|
||||
OpSwitch %uint_0 %15137
|
||||
%15137 = OpLabel
|
||||
%12591 = OpLoad %v3uint %gl_GlobalInvocationID
|
||||
%10229 = OpShiftLeftLogical %v3uint %12591 %2612
|
||||
%25178 = OpAccessChain %_ptr_Uniform_v3uint %5245 %int_4
|
||||
%22965 = OpLoad %v3uint %25178
|
||||
%18835 = OpVectorShuffle %v2uint %10229 %10229 0 1
|
||||
%6626 = OpVectorShuffle %v2uint %22965 %22965 0 1
|
||||
%17032 = OpUGreaterThanEqual %v2bool %18835 %6626
|
||||
%24679 = OpAny %bool %17032
|
||||
OpSelectionMerge %6282 DontFlatten
|
||||
OpBranchConditional %24679 %21992 %6282
|
||||
%21992 = OpLabel
|
||||
OpBranch %19578
|
||||
%6282 = OpLabel
|
||||
%6795 = OpBitcast %v3int %10229
|
||||
%18792 = OpAccessChain %_ptr_Uniform_uint %5245 %int_6
|
||||
%9788 = OpLoad %uint %18792
|
||||
%20376 = OpCompositeExtract %uint %22965 1
|
||||
%14692 = OpCompositeExtract %int %6795 0
|
||||
%22810 = OpIMul %int %14692 %int_2
|
||||
%6362 = OpCompositeExtract %int %6795 2
|
||||
%14505 = OpBitcast %int %20376
|
||||
%11279 = OpIMul %int %6362 %14505
|
||||
%17598 = OpCompositeExtract %int %6795 1
|
||||
%22228 = OpIAdd %int %11279 %17598
|
||||
%22405 = OpBitcast %int %9788
|
||||
%24535 = OpIMul %int %22228 %22405
|
||||
%7061 = OpIAdd %int %22810 %24535
|
||||
%19270 = OpBitcast %uint %7061
|
||||
%19460 = OpAccessChain %_ptr_Uniform_uint %5245 %int_5
|
||||
%22875 = OpLoad %uint %19460
|
||||
%8517 = OpIAdd %uint %19270 %22875
|
||||
%21670 = OpShiftRightLogical %uint %8517 %uint_4
|
||||
%18404 = OpAccessChain %_ptr_Uniform_uint %5245 %int_1
|
||||
%23432 = OpLoad %uint %18404
|
||||
%22700 = OpAccessChain %_ptr_Uniform_uint %5245 %int_0
|
||||
%20387 = OpLoad %uint %22700
|
||||
%22279 = OpBitwiseAnd %uint %20387 %uint_2
|
||||
%19223 = OpINotEqual %bool %22279 %uint_0
|
||||
%17247 = OpCompositeConstruct %v2uint %20387 %20387
|
||||
%22947 = OpShiftRightLogical %v2uint %17247 %1915
|
||||
%6551 = OpBitwiseAnd %v2uint %22947 %1870
|
||||
%18732 = OpAccessChain %_ptr_Uniform_uint %5245 %int_2
|
||||
%24236 = OpLoad %uint %18732
|
||||
%20458 = OpAccessChain %_ptr_Uniform_uint %5245 %int_3
|
||||
%22167 = OpLoad %uint %20458
|
||||
%18929 = OpCompositeExtract %uint %10229 0
|
||||
%6638 = OpShiftRightLogical %uint %18929 %uint_3
|
||||
%9988 = OpCompositeExtract %uint %10229 1
|
||||
%23563 = OpCompositeConstruct %v2uint %6638 %9988
|
||||
%8041 = OpUDiv %v2uint %23563 %6551
|
||||
%13932 = OpCompositeExtract %uint %8041 0
|
||||
%19789 = OpShiftLeftLogical %uint %13932 %uint_3
|
||||
%20905 = OpCompositeExtract %uint %8041 1
|
||||
%23022 = OpCompositeExtract %uint %10229 2
|
||||
%9417 = OpCompositeConstruct %v3uint %19789 %20905 %23022
|
||||
OpSelectionMerge %21313 DontFlatten
|
||||
OpBranchConditional %19223 %21373 %11737
|
||||
%21373 = OpLabel
|
||||
%10608 = OpBitcast %v3int %9417
|
||||
%17090 = OpCompositeExtract %int %10608 1
|
||||
%9469 = OpShiftRightArithmetic %int %17090 %int_4
|
||||
%10055 = OpCompositeExtract %int %10608 2
|
||||
%16476 = OpShiftRightArithmetic %int %10055 %int_2
|
||||
%23373 = OpShiftRightLogical %uint %22167 %uint_4
|
||||
%6314 = OpBitcast %int %23373
|
||||
%21281 = OpIMul %int %16476 %6314
|
||||
%15143 = OpIAdd %int %9469 %21281
|
||||
%9032 = OpShiftRightLogical %uint %24236 %uint_5
|
||||
%12427 = OpBitcast %int %9032
|
||||
%10360 = OpIMul %int %15143 %12427
|
||||
%25154 = OpCompositeExtract %int %10608 0
|
||||
%20423 = OpShiftRightArithmetic %int %25154 %int_5
|
||||
%18940 = OpIAdd %int %20423 %10360
|
||||
%8797 = OpShiftLeftLogical %int %18940 %uint_7
|
||||
%11510 = OpBitwiseAnd %int %8797 %int_268435455
|
||||
%18938 = OpShiftLeftLogical %int %11510 %int_1
|
||||
%19768 = OpBitwiseAnd %int %25154 %int_7
|
||||
%12600 = OpBitwiseAnd %int %17090 %int_6
|
||||
%17741 = OpShiftLeftLogical %int %12600 %int_2
|
||||
%17227 = OpIAdd %int %19768 %17741
|
||||
%7048 = OpShiftLeftLogical %int %17227 %uint_7
|
||||
%24035 = OpShiftRightArithmetic %int %7048 %int_6
|
||||
%8725 = OpShiftRightArithmetic %int %17090 %int_3
|
||||
%13731 = OpIAdd %int %8725 %16476
|
||||
%23052 = OpBitwiseAnd %int %13731 %int_1
|
||||
%16658 = OpShiftRightArithmetic %int %25154 %int_3
|
||||
%18794 = OpShiftLeftLogical %int %23052 %int_1
|
||||
%13501 = OpIAdd %int %16658 %18794
|
||||
%19165 = OpBitwiseAnd %int %13501 %int_3
|
||||
%21578 = OpShiftLeftLogical %int %19165 %int_1
|
||||
%15435 = OpIAdd %int %23052 %21578
|
||||
%13150 = OpBitwiseAnd %int %24035 %int_n16
|
||||
%20336 = OpIAdd %int %18938 %13150
|
||||
%23345 = OpShiftLeftLogical %int %20336 %int_1
|
||||
%23274 = OpBitwiseAnd %int %24035 %int_15
|
||||
%10332 = OpIAdd %int %23345 %23274
|
||||
%18356 = OpBitwiseAnd %int %10055 %int_3
|
||||
%21579 = OpShiftLeftLogical %int %18356 %uint_7
|
||||
%16727 = OpIAdd %int %10332 %21579
|
||||
%19166 = OpBitwiseAnd %int %17090 %int_1
|
||||
%21580 = OpShiftLeftLogical %int %19166 %int_4
|
||||
%16728 = OpIAdd %int %16727 %21580
|
||||
%20438 = OpBitwiseAnd %int %15435 %int_1
|
||||
%9987 = OpShiftLeftLogical %int %20438 %int_3
|
||||
%13106 = OpShiftRightArithmetic %int %16728 %int_6
|
||||
%14038 = OpBitwiseAnd %int %13106 %int_7
|
||||
%13330 = OpIAdd %int %9987 %14038
|
||||
%23346 = OpShiftLeftLogical %int %13330 %int_3
|
||||
%23217 = OpBitwiseAnd %int %15435 %int_n2
|
||||
%10908 = OpIAdd %int %23346 %23217
|
||||
%23347 = OpShiftLeftLogical %int %10908 %int_2
|
||||
%23218 = OpBitwiseAnd %int %16728 %int_n512
|
||||
%10909 = OpIAdd %int %23347 %23218
|
||||
%23348 = OpShiftLeftLogical %int %10909 %int_3
|
||||
%21849 = OpBitwiseAnd %int %16728 %int_63
|
||||
%24314 = OpIAdd %int %23348 %21849
|
||||
%22127 = OpBitcast %uint %24314
|
||||
OpBranch %21313
|
||||
%11737 = OpLabel
|
||||
%9761 = OpVectorShuffle %v2uint %9417 %9417 0 1
|
||||
%22991 = OpBitcast %v2int %9761
|
||||
%6403 = OpCompositeExtract %int %22991 0
|
||||
%9470 = OpShiftRightArithmetic %int %6403 %int_5
|
||||
%10056 = OpCompositeExtract %int %22991 1
|
||||
%16477 = OpShiftRightArithmetic %int %10056 %int_5
|
||||
%23374 = OpShiftRightLogical %uint %24236 %uint_5
|
||||
%6315 = OpBitcast %int %23374
|
||||
%21319 = OpIMul %int %16477 %6315
|
||||
%16222 = OpIAdd %int %9470 %21319
|
||||
%19086 = OpShiftLeftLogical %int %16222 %uint_8
|
||||
%10934 = OpBitwiseAnd %int %6403 %int_7
|
||||
%12601 = OpBitwiseAnd %int %10056 %int_14
|
||||
%17742 = OpShiftLeftLogical %int %12601 %int_2
|
||||
%17303 = OpIAdd %int %10934 %17742
|
||||
%6375 = OpShiftLeftLogical %int %17303 %uint_1
|
||||
%10161 = OpBitwiseAnd %int %6375 %int_n16
|
||||
%12150 = OpShiftLeftLogical %int %10161 %int_1
|
||||
%15436 = OpIAdd %int %19086 %12150
|
||||
%13207 = OpBitwiseAnd %int %6375 %int_15
|
||||
%19760 = OpIAdd %int %15436 %13207
|
||||
%18357 = OpBitwiseAnd %int %10056 %int_1
|
||||
%21581 = OpShiftLeftLogical %int %18357 %int_4
|
||||
%16729 = OpIAdd %int %19760 %21581
|
||||
%20514 = OpBitwiseAnd %int %16729 %int_n512
|
||||
%9238 = OpShiftLeftLogical %int %20514 %int_3
|
||||
%18995 = OpBitwiseAnd %int %10056 %int_16
|
||||
%12151 = OpShiftLeftLogical %int %18995 %int_7
|
||||
%16730 = OpIAdd %int %9238 %12151
|
||||
%19167 = OpBitwiseAnd %int %16729 %int_448
|
||||
%21582 = OpShiftLeftLogical %int %19167 %int_2
|
||||
%16708 = OpIAdd %int %16730 %21582
|
||||
%20611 = OpBitwiseAnd %int %10056 %int_8
|
||||
%16831 = OpShiftRightArithmetic %int %20611 %int_2
|
||||
%7916 = OpShiftRightArithmetic %int %6403 %int_3
|
||||
%13750 = OpIAdd %int %16831 %7916
|
||||
%21587 = OpBitwiseAnd %int %13750 %int_3
|
||||
%21583 = OpShiftLeftLogical %int %21587 %int_6
|
||||
%15437 = OpIAdd %int %16708 %21583
|
||||
%11782 = OpBitwiseAnd %int %16729 %int_63
|
||||
%14671 = OpIAdd %int %15437 %11782
|
||||
%22128 = OpBitcast %uint %14671
|
||||
OpBranch %21313
|
||||
%21313 = OpLabel
|
||||
%9468 = OpPhi %uint %22127 %21373 %22128 %11737
|
||||
%16296 = OpIMul %v2uint %8041 %6551
|
||||
%15292 = OpISub %v2uint %23563 %16296
|
||||
%7303 = OpCompositeExtract %uint %6551 0
|
||||
%22882 = OpCompositeExtract %uint %6551 1
|
||||
%13170 = OpIMul %uint %7303 %22882
|
||||
%15520 = OpIMul %uint %9468 %13170
|
||||
%16084 = OpCompositeExtract %uint %15292 0
|
||||
%15890 = OpIMul %uint %16084 %22882
|
||||
%6886 = OpCompositeExtract %uint %15292 1
|
||||
%11045 = OpIAdd %uint %15890 %6886
|
||||
%24733 = OpShiftLeftLogical %uint %11045 %uint_3
|
||||
%23219 = OpBitwiseAnd %uint %18929 %uint_7
|
||||
%9559 = OpIAdd %uint %24733 %23219
|
||||
%16557 = OpShiftLeftLogical %uint %9559 %uint_1
|
||||
%20138 = OpIAdd %uint %15520 %16557
|
||||
%17724 = OpIAdd %uint %23432 %20138
|
||||
%14040 = OpShiftRightLogical %uint %17724 %uint_4
|
||||
%11766 = OpShiftRightLogical %uint %20387 %uint_2
|
||||
%8394 = OpBitwiseAnd %uint %11766 %uint_3
|
||||
%20727 = OpAccessChain %_ptr_Uniform_v4uint %4218 %int_0 %14040
|
||||
%9605 = OpLoad %v4uint %20727
|
||||
%21106 = OpIEqual %bool %8394 %uint_1
|
||||
OpSelectionMerge %13962 None
|
||||
OpBranchConditional %21106 %10583 %13962
|
||||
%10583 = OpLabel
|
||||
%18271 = OpBitwiseAnd %v4uint %9605 %2510
|
||||
%9425 = OpShiftLeftLogical %v4uint %18271 %317
|
||||
%20652 = OpBitwiseAnd %v4uint %9605 %1838
|
||||
%17549 = OpShiftRightLogical %v4uint %20652 %317
|
||||
%16376 = OpBitwiseOr %v4uint %9425 %17549
|
||||
OpBranch %13962
|
||||
%13962 = OpLabel
|
||||
%16606 = OpPhi %v4uint %9605 %21313 %16376 %10583
|
||||
%18240 = OpBitwiseAnd %v4uint %16606 %850
|
||||
%9137 = OpConvertUToF %v4float %18240
|
||||
%19365 = OpVectorTimesScalar %v4float %9137 %float_1_52590219en05
|
||||
%23367 = OpShiftRightLogical %v4uint %16606 %749
|
||||
%18492 = OpConvertUToF %v4float %23367
|
||||
%18450 = OpVectorTimesScalar %v4float %18492 %float_1_52590219en05
|
||||
%6268 = OpCompositeExtract %float %19365 0
|
||||
%13806 = OpCompositeExtract %float %18450 0
|
||||
%19232 = OpCompositeConstruct %v2float %6268 %13806
|
||||
%8561 = OpExtInst %uint %1 PackHalf2x16 %19232
|
||||
%23487 = OpCompositeExtract %float %19365 1
|
||||
%14759 = OpCompositeExtract %float %18450 1
|
||||
%19233 = OpCompositeConstruct %v2float %23487 %14759
|
||||
%8562 = OpExtInst %uint %1 PackHalf2x16 %19233
|
||||
%23488 = OpCompositeExtract %float %19365 2
|
||||
%14760 = OpCompositeExtract %float %18450 2
|
||||
%19234 = OpCompositeConstruct %v2float %23488 %14760
|
||||
%8563 = OpExtInst %uint %1 PackHalf2x16 %19234
|
||||
%23489 = OpCompositeExtract %float %19365 3
|
||||
%14761 = OpCompositeExtract %float %18450 3
|
||||
%19213 = OpCompositeConstruct %v2float %23489 %14761
|
||||
%8430 = OpExtInst %uint %1 PackHalf2x16 %19213
|
||||
%15035 = OpCompositeConstruct %v4uint %8561 %8562 %8563 %8430
|
||||
%17859 = OpAccessChain %_ptr_Uniform_v4uint %5134 %int_0 %21670
|
||||
OpStore %17859 %15035
|
||||
%15532 = OpIAdd %uint %21670 %int_1
|
||||
%6417 = OpUGreaterThan %bool %7303 %uint_1
|
||||
OpSelectionMerge %24764 DontFlatten
|
||||
OpBranchConditional %6417 %20612 %20628
|
||||
%20612 = OpLabel
|
||||
%13975 = OpUDiv %uint %6638 %7303
|
||||
%9086 = OpIMul %uint %13975 %7303
|
||||
%12657 = OpISub %uint %6638 %9086
|
||||
%9511 = OpIAdd %uint %12657 %uint_1
|
||||
%13375 = OpIEqual %bool %9511 %7303
|
||||
OpSelectionMerge %7917 None
|
||||
OpBranchConditional %13375 %22174 %8593
|
||||
%22174 = OpLabel
|
||||
%19289 = OpIMul %uint %uint_64 %7303
|
||||
%21519 = OpShiftLeftLogical %uint %12657 %uint_4
|
||||
%18756 = OpISub %uint %19289 %21519
|
||||
OpBranch %7917
|
||||
%8593 = OpLabel
|
||||
OpBranch %7917
|
||||
%7917 = OpLabel
|
||||
%10540 = OpPhi %uint %18756 %22174 %uint_16 %8593
|
||||
OpBranch %24764
|
||||
%20628 = OpLabel
|
||||
OpBranch %24764
|
||||
%24764 = OpLabel
|
||||
%10684 = OpPhi %uint %10540 %7917 %uint_64 %20628
|
||||
%18731 = OpIMul %uint %10684 %22882
|
||||
%16493 = OpShiftRightLogical %uint %18731 %uint_4
|
||||
%13163 = OpIAdd %uint %14040 %16493
|
||||
%22298 = OpAccessChain %_ptr_Uniform_v4uint %4218 %int_0 %13163
|
||||
%6578 = OpLoad %v4uint %22298
|
||||
OpSelectionMerge %13963 None
|
||||
OpBranchConditional %21106 %10584 %13963
|
||||
%10584 = OpLabel
|
||||
%18272 = OpBitwiseAnd %v4uint %6578 %2510
|
||||
%9426 = OpShiftLeftLogical %v4uint %18272 %317
|
||||
%20653 = OpBitwiseAnd %v4uint %6578 %1838
|
||||
%17550 = OpShiftRightLogical %v4uint %20653 %317
|
||||
%16377 = OpBitwiseOr %v4uint %9426 %17550
|
||||
OpBranch %13963
|
||||
%13963 = OpLabel
|
||||
%16607 = OpPhi %v4uint %6578 %24764 %16377 %10584
|
||||
%18241 = OpBitwiseAnd %v4uint %16607 %850
|
||||
%9138 = OpConvertUToF %v4float %18241
|
||||
%19366 = OpVectorTimesScalar %v4float %9138 %float_1_52590219en05
|
||||
%23368 = OpShiftRightLogical %v4uint %16607 %749
|
||||
%18493 = OpConvertUToF %v4float %23368
|
||||
%18451 = OpVectorTimesScalar %v4float %18493 %float_1_52590219en05
|
||||
%6269 = OpCompositeExtract %float %19366 0
|
||||
%13807 = OpCompositeExtract %float %18451 0
|
||||
%19235 = OpCompositeConstruct %v2float %6269 %13807
|
||||
%8564 = OpExtInst %uint %1 PackHalf2x16 %19235
|
||||
%23490 = OpCompositeExtract %float %19366 1
|
||||
%14762 = OpCompositeExtract %float %18451 1
|
||||
%19236 = OpCompositeConstruct %v2float %23490 %14762
|
||||
%8565 = OpExtInst %uint %1 PackHalf2x16 %19236
|
||||
%23491 = OpCompositeExtract %float %19366 2
|
||||
%14763 = OpCompositeExtract %float %18451 2
|
||||
%19237 = OpCompositeConstruct %v2float %23491 %14763
|
||||
%8566 = OpExtInst %uint %1 PackHalf2x16 %19237
|
||||
%23492 = OpCompositeExtract %float %19366 3
|
||||
%14764 = OpCompositeExtract %float %18451 3
|
||||
%19214 = OpCompositeConstruct %v2float %23492 %14764
|
||||
%8431 = OpExtInst %uint %1 PackHalf2x16 %19214
|
||||
%15036 = OpCompositeConstruct %v4uint %8564 %8565 %8566 %8431
|
||||
%20158 = OpAccessChain %_ptr_Uniform_v4uint %5134 %int_0 %15532
|
||||
OpStore %20158 %15036
|
||||
OpBranch %19578
|
||||
%19578 = OpLabel
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
#endif
|
||||
|
||||
const uint32_t texture_load_r16_unorm_float_scaled_cs[] = {
|
||||
0x07230203, 0x00010000, 0x0008000A, 0x0000625B, 0x00000000, 0x00020011,
|
||||
0x00000001, 0x0006000B, 0x00000001, 0x4C534C47, 0x6474732E, 0x3035342E,
|
||||
0x00000000, 0x0003000E, 0x00000000, 0x00000001, 0x0006000F, 0x00000005,
|
||||
0x0000161F, 0x6E69616D, 0x00000000, 0x00000F48, 0x00060010, 0x0000161F,
|
||||
0x00000011, 0x00000002, 0x00000020, 0x00000001, 0x00050048, 0x00000489,
|
||||
0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x00000489, 0x00000001,
|
||||
0x00000023, 0x00000004, 0x00050048, 0x00000489, 0x00000002, 0x00000023,
|
||||
0x00000008, 0x00050048, 0x00000489, 0x00000003, 0x00000023, 0x0000000C,
|
||||
0x00050048, 0x00000489, 0x00000004, 0x00000023, 0x00000010, 0x00050048,
|
||||
0x00000489, 0x00000005, 0x00000023, 0x0000001C, 0x00050048, 0x00000489,
|
||||
0x00000006, 0x00000023, 0x00000020, 0x00050048, 0x00000489, 0x00000007,
|
||||
0x00000023, 0x00000024, 0x00030047, 0x00000489, 0x00000002, 0x00040047,
|
||||
0x0000147D, 0x00000022, 0x00000002, 0x00040047, 0x0000147D, 0x00000021,
|
||||
0x00000000, 0x00040047, 0x00000F48, 0x0000000B, 0x0000001C, 0x00040047,
|
||||
0x000007DC, 0x00000006, 0x00000010, 0x00040048, 0x000007B4, 0x00000000,
|
||||
0x00000019, 0x00050048, 0x000007B4, 0x00000000, 0x00000023, 0x00000000,
|
||||
0x00030047, 0x000007B4, 0x00000003, 0x00040047, 0x0000140E, 0x00000022,
|
||||
0x00000000, 0x00040047, 0x0000140E, 0x00000021, 0x00000000, 0x00040047,
|
||||
0x000007DD, 0x00000006, 0x00000010, 0x00040048, 0x000007B5, 0x00000000,
|
||||
0x00000018, 0x00050048, 0x000007B5, 0x00000000, 0x00000023, 0x00000000,
|
||||
0x00030047, 0x000007B5, 0x00000003, 0x00040047, 0x0000107A, 0x00000022,
|
||||
0x00000001, 0x00040047, 0x0000107A, 0x00000021, 0x00000000, 0x00040047,
|
||||
0x00000BB1, 0x0000000B, 0x00000019, 0x00020013, 0x00000008, 0x00030021,
|
||||
0x00000502, 0x00000008, 0x00040015, 0x0000000B, 0x00000020, 0x00000000,
|
||||
0x00040017, 0x00000017, 0x0000000B, 0x00000004, 0x00040015, 0x0000000C,
|
||||
0x00000020, 0x00000001, 0x00040017, 0x00000012, 0x0000000C, 0x00000002,
|
||||
0x00040017, 0x00000016, 0x0000000C, 0x00000003, 0x00020014, 0x00000009,
|
||||
0x00040017, 0x00000014, 0x0000000B, 0x00000003, 0x00040017, 0x00000011,
|
||||
0x0000000B, 0x00000002, 0x00030016, 0x0000000D, 0x00000020, 0x00040017,
|
||||
0x0000001D, 0x0000000D, 0x00000004, 0x0004002B, 0x0000000B, 0x000001C1,
|
||||
0x0000FFFF, 0x0004002B, 0x0000000D, 0x0000092A, 0x37800080, 0x0004002B,
|
||||
0x0000000B, 0x00000A3A, 0x00000010, 0x0004002B, 0x0000000B, 0x00000A0A,
|
||||
0x00000000, 0x00040017, 0x00000013, 0x0000000D, 0x00000002, 0x0004002B,
|
||||
0x0000000B, 0x00000A0D, 0x00000001, 0x0004002B, 0x0000000B, 0x00000A10,
|
||||
0x00000002, 0x0004002B, 0x0000000B, 0x00000A13, 0x00000003, 0x0004002B,
|
||||
0x0000000B, 0x000008A6, 0x00FF00FF, 0x0004002B, 0x0000000B, 0x00000A22,
|
||||
0x00000008, 0x0004002B, 0x0000000B, 0x000005FD, 0xFF00FF00, 0x0004002B,
|
||||
0x0000000C, 0x00000A1A, 0x00000005, 0x0004002B, 0x0000000B, 0x00000A19,
|
||||
0x00000005, 0x0004002B, 0x0000000B, 0x00000A1F, 0x00000007, 0x0004002B,
|
||||
0x0000000C, 0x00000A20, 0x00000007, 0x0004002B, 0x0000000C, 0x00000A35,
|
||||
0x0000000E, 0x0004002B, 0x0000000C, 0x00000A11, 0x00000002, 0x0004002B,
|
||||
0x0000000C, 0x000009DB, 0xFFFFFFF0, 0x0004002B, 0x0000000C, 0x00000A0E,
|
||||
0x00000001, 0x0004002B, 0x0000000C, 0x00000A38, 0x0000000F, 0x0004002B,
|
||||
0x0000000C, 0x00000A17, 0x00000004, 0x0004002B, 0x0000000C, 0x0000040B,
|
||||
0xFFFFFE00, 0x0004002B, 0x0000000C, 0x00000A14, 0x00000003, 0x0004002B,
|
||||
0x0000000C, 0x00000A3B, 0x00000010, 0x0004002B, 0x0000000C, 0x00000388,
|
||||
0x000001C0, 0x0004002B, 0x0000000C, 0x00000A23, 0x00000008, 0x0004002B,
|
||||
0x0000000C, 0x00000A1D, 0x00000006, 0x0004002B, 0x0000000C, 0x00000AC8,
|
||||
0x0000003F, 0x0004002B, 0x0000000B, 0x00000A16, 0x00000004, 0x0004002B,
|
||||
0x0000000B, 0x00000A1C, 0x00000006, 0x0004002B, 0x0000000C, 0x0000078B,
|
||||
0x0FFFFFFF, 0x0004002B, 0x0000000C, 0x00000A05, 0xFFFFFFFE, 0x0004002B,
|
||||
0x0000000B, 0x00000A6A, 0x00000020, 0x0004002B, 0x0000000B, 0x00000ACA,
|
||||
0x00000040, 0x000A001E, 0x00000489, 0x0000000B, 0x0000000B, 0x0000000B,
|
||||
0x0000000B, 0x00000014, 0x0000000B, 0x0000000B, 0x0000000B, 0x00040020,
|
||||
0x00000706, 0x00000002, 0x00000489, 0x0004003B, 0x00000706, 0x0000147D,
|
||||
0x00000002, 0x0004002B, 0x0000000C, 0x00000A0B, 0x00000000, 0x00040020,
|
||||
0x00000288, 0x00000002, 0x0000000B, 0x0005002C, 0x00000011, 0x0000077B,
|
||||
0x00000A16, 0x00000A1C, 0x00040020, 0x00000291, 0x00000002, 0x00000014,
|
||||
0x00040020, 0x00000292, 0x00000001, 0x00000014, 0x0004003B, 0x00000292,
|
||||
0x00000F48, 0x00000001, 0x0006002C, 0x00000014, 0x00000A34, 0x00000A16,
|
||||
0x00000A0A, 0x00000A0A, 0x00040017, 0x0000000F, 0x00000009, 0x00000002,
|
||||
0x0003001D, 0x000007DC, 0x00000017, 0x0003001E, 0x000007B4, 0x000007DC,
|
||||
0x00040020, 0x00000A31, 0x00000002, 0x000007B4, 0x0004003B, 0x00000A31,
|
||||
0x0000140E, 0x00000002, 0x0003001D, 0x000007DD, 0x00000017, 0x0003001E,
|
||||
0x000007B5, 0x000007DD, 0x00040020, 0x00000A32, 0x00000002, 0x000007B5,
|
||||
0x0004003B, 0x00000A32, 0x0000107A, 0x00000002, 0x00040020, 0x00000294,
|
||||
0x00000002, 0x00000017, 0x0006002C, 0x00000014, 0x00000BB1, 0x00000A10,
|
||||
0x00000A6A, 0x00000A0D, 0x0005002C, 0x00000011, 0x0000074E, 0x00000A13,
|
||||
0x00000A13, 0x0007002C, 0x00000017, 0x000009CE, 0x000008A6, 0x000008A6,
|
||||
0x000008A6, 0x000008A6, 0x0007002C, 0x00000017, 0x0000013D, 0x00000A22,
|
||||
0x00000A22, 0x00000A22, 0x00000A22, 0x0007002C, 0x00000017, 0x0000072E,
|
||||
0x000005FD, 0x000005FD, 0x000005FD, 0x000005FD, 0x0007002C, 0x00000017,
|
||||
0x00000352, 0x000001C1, 0x000001C1, 0x000001C1, 0x000001C1, 0x0007002C,
|
||||
0x00000017, 0x000002ED, 0x00000A3A, 0x00000A3A, 0x00000A3A, 0x00000A3A,
|
||||
0x00050036, 0x00000008, 0x0000161F, 0x00000000, 0x00000502, 0x000200F8,
|
||||
0x00003B06, 0x000300F7, 0x00004C7A, 0x00000000, 0x000300FB, 0x00000A0A,
|
||||
0x00003B21, 0x000200F8, 0x00003B21, 0x0004003D, 0x00000014, 0x0000312F,
|
||||
0x00000F48, 0x000500C4, 0x00000014, 0x000027F5, 0x0000312F, 0x00000A34,
|
||||
0x00050041, 0x00000291, 0x0000625A, 0x0000147D, 0x00000A17, 0x0004003D,
|
||||
0x00000014, 0x000059B5, 0x0000625A, 0x0007004F, 0x00000011, 0x00004993,
|
||||
0x000027F5, 0x000027F5, 0x00000000, 0x00000001, 0x0007004F, 0x00000011,
|
||||
0x000019E2, 0x000059B5, 0x000059B5, 0x00000000, 0x00000001, 0x000500AE,
|
||||
0x0000000F, 0x00004288, 0x00004993, 0x000019E2, 0x0004009A, 0x00000009,
|
||||
0x00006067, 0x00004288, 0x000300F7, 0x0000188A, 0x00000002, 0x000400FA,
|
||||
0x00006067, 0x000055E8, 0x0000188A, 0x000200F8, 0x000055E8, 0x000200F9,
|
||||
0x00004C7A, 0x000200F8, 0x0000188A, 0x0004007C, 0x00000016, 0x00001A8B,
|
||||
0x000027F5, 0x00050041, 0x00000288, 0x00004968, 0x0000147D, 0x00000A1D,
|
||||
0x0004003D, 0x0000000B, 0x0000263C, 0x00004968, 0x00050051, 0x0000000B,
|
||||
0x00004F98, 0x000059B5, 0x00000001, 0x00050051, 0x0000000C, 0x00003964,
|
||||
0x00001A8B, 0x00000000, 0x00050084, 0x0000000C, 0x0000591A, 0x00003964,
|
||||
0x00000A11, 0x00050051, 0x0000000C, 0x000018DA, 0x00001A8B, 0x00000002,
|
||||
0x0004007C, 0x0000000C, 0x000038A9, 0x00004F98, 0x00050084, 0x0000000C,
|
||||
0x00002C0F, 0x000018DA, 0x000038A9, 0x00050051, 0x0000000C, 0x000044BE,
|
||||
0x00001A8B, 0x00000001, 0x00050080, 0x0000000C, 0x000056D4, 0x00002C0F,
|
||||
0x000044BE, 0x0004007C, 0x0000000C, 0x00005785, 0x0000263C, 0x00050084,
|
||||
0x0000000C, 0x00005FD7, 0x000056D4, 0x00005785, 0x00050080, 0x0000000C,
|
||||
0x00001B95, 0x0000591A, 0x00005FD7, 0x0004007C, 0x0000000B, 0x00004B46,
|
||||
0x00001B95, 0x00050041, 0x00000288, 0x00004C04, 0x0000147D, 0x00000A1A,
|
||||
0x0004003D, 0x0000000B, 0x0000595B, 0x00004C04, 0x00050080, 0x0000000B,
|
||||
0x00002145, 0x00004B46, 0x0000595B, 0x000500C2, 0x0000000B, 0x000054A6,
|
||||
0x00002145, 0x00000A16, 0x00050041, 0x00000288, 0x000047E4, 0x0000147D,
|
||||
0x00000A0E, 0x0004003D, 0x0000000B, 0x00005B88, 0x000047E4, 0x00050041,
|
||||
0x00000288, 0x000058AC, 0x0000147D, 0x00000A0B, 0x0004003D, 0x0000000B,
|
||||
0x00004FA3, 0x000058AC, 0x000500C7, 0x0000000B, 0x00005707, 0x00004FA3,
|
||||
0x00000A10, 0x000500AB, 0x00000009, 0x00004B17, 0x00005707, 0x00000A0A,
|
||||
0x00050050, 0x00000011, 0x0000435F, 0x00004FA3, 0x00004FA3, 0x000500C2,
|
||||
0x00000011, 0x000059A3, 0x0000435F, 0x0000077B, 0x000500C7, 0x00000011,
|
||||
0x00001997, 0x000059A3, 0x0000074E, 0x00050041, 0x00000288, 0x0000492C,
|
||||
0x0000147D, 0x00000A11, 0x0004003D, 0x0000000B, 0x00005EAC, 0x0000492C,
|
||||
0x00050041, 0x00000288, 0x00004FEA, 0x0000147D, 0x00000A14, 0x0004003D,
|
||||
0x0000000B, 0x00005697, 0x00004FEA, 0x00050051, 0x0000000B, 0x000049F1,
|
||||
0x000027F5, 0x00000000, 0x000500C2, 0x0000000B, 0x000019EE, 0x000049F1,
|
||||
0x00000A13, 0x00050051, 0x0000000B, 0x00002704, 0x000027F5, 0x00000001,
|
||||
0x00050050, 0x00000011, 0x00005C0B, 0x000019EE, 0x00002704, 0x00050086,
|
||||
0x00000011, 0x00001F69, 0x00005C0B, 0x00001997, 0x00050051, 0x0000000B,
|
||||
0x0000366C, 0x00001F69, 0x00000000, 0x000500C4, 0x0000000B, 0x00004D4D,
|
||||
0x0000366C, 0x00000A13, 0x00050051, 0x0000000B, 0x000051A9, 0x00001F69,
|
||||
0x00000001, 0x00050051, 0x0000000B, 0x000059EE, 0x000027F5, 0x00000002,
|
||||
0x00060050, 0x00000014, 0x000024C9, 0x00004D4D, 0x000051A9, 0x000059EE,
|
||||
0x000300F7, 0x00005341, 0x00000002, 0x000400FA, 0x00004B17, 0x0000537D,
|
||||
0x00002DD9, 0x000200F8, 0x0000537D, 0x0004007C, 0x00000016, 0x00002970,
|
||||
0x000024C9, 0x00050051, 0x0000000C, 0x000042C2, 0x00002970, 0x00000001,
|
||||
0x000500C3, 0x0000000C, 0x000024FD, 0x000042C2, 0x00000A17, 0x00050051,
|
||||
0x0000000C, 0x00002747, 0x00002970, 0x00000002, 0x000500C3, 0x0000000C,
|
||||
0x0000405C, 0x00002747, 0x00000A11, 0x000500C2, 0x0000000B, 0x00005B4D,
|
||||
0x00005697, 0x00000A16, 0x0004007C, 0x0000000C, 0x000018AA, 0x00005B4D,
|
||||
0x00050084, 0x0000000C, 0x00005321, 0x0000405C, 0x000018AA, 0x00050080,
|
||||
0x0000000C, 0x00003B27, 0x000024FD, 0x00005321, 0x000500C2, 0x0000000B,
|
||||
0x00002348, 0x00005EAC, 0x00000A19, 0x0004007C, 0x0000000C, 0x0000308B,
|
||||
0x00002348, 0x00050084, 0x0000000C, 0x00002878, 0x00003B27, 0x0000308B,
|
||||
0x00050051, 0x0000000C, 0x00006242, 0x00002970, 0x00000000, 0x000500C3,
|
||||
0x0000000C, 0x00004FC7, 0x00006242, 0x00000A1A, 0x00050080, 0x0000000C,
|
||||
0x000049FC, 0x00004FC7, 0x00002878, 0x000500C4, 0x0000000C, 0x0000225D,
|
||||
0x000049FC, 0x00000A1F, 0x000500C7, 0x0000000C, 0x00002CF6, 0x0000225D,
|
||||
0x0000078B, 0x000500C4, 0x0000000C, 0x000049FA, 0x00002CF6, 0x00000A0E,
|
||||
0x000500C7, 0x0000000C, 0x00004D38, 0x00006242, 0x00000A20, 0x000500C7,
|
||||
0x0000000C, 0x00003138, 0x000042C2, 0x00000A1D, 0x000500C4, 0x0000000C,
|
||||
0x0000454D, 0x00003138, 0x00000A11, 0x00050080, 0x0000000C, 0x0000434B,
|
||||
0x00004D38, 0x0000454D, 0x000500C4, 0x0000000C, 0x00001B88, 0x0000434B,
|
||||
0x00000A1F, 0x000500C3, 0x0000000C, 0x00005DE3, 0x00001B88, 0x00000A1D,
|
||||
0x000500C3, 0x0000000C, 0x00002215, 0x000042C2, 0x00000A14, 0x00050080,
|
||||
0x0000000C, 0x000035A3, 0x00002215, 0x0000405C, 0x000500C7, 0x0000000C,
|
||||
0x00005A0C, 0x000035A3, 0x00000A0E, 0x000500C3, 0x0000000C, 0x00004112,
|
||||
0x00006242, 0x00000A14, 0x000500C4, 0x0000000C, 0x0000496A, 0x00005A0C,
|
||||
0x00000A0E, 0x00050080, 0x0000000C, 0x000034BD, 0x00004112, 0x0000496A,
|
||||
0x000500C7, 0x0000000C, 0x00004ADD, 0x000034BD, 0x00000A14, 0x000500C4,
|
||||
0x0000000C, 0x0000544A, 0x00004ADD, 0x00000A0E, 0x00050080, 0x0000000C,
|
||||
0x00003C4B, 0x00005A0C, 0x0000544A, 0x000500C7, 0x0000000C, 0x0000335E,
|
||||
0x00005DE3, 0x000009DB, 0x00050080, 0x0000000C, 0x00004F70, 0x000049FA,
|
||||
0x0000335E, 0x000500C4, 0x0000000C, 0x00005B31, 0x00004F70, 0x00000A0E,
|
||||
0x000500C7, 0x0000000C, 0x00005AEA, 0x00005DE3, 0x00000A38, 0x00050080,
|
||||
0x0000000C, 0x0000285C, 0x00005B31, 0x00005AEA, 0x000500C7, 0x0000000C,
|
||||
0x000047B4, 0x00002747, 0x00000A14, 0x000500C4, 0x0000000C, 0x0000544B,
|
||||
0x000047B4, 0x00000A1F, 0x00050080, 0x0000000C, 0x00004157, 0x0000285C,
|
||||
0x0000544B, 0x000500C7, 0x0000000C, 0x00004ADE, 0x000042C2, 0x00000A0E,
|
||||
0x000500C4, 0x0000000C, 0x0000544C, 0x00004ADE, 0x00000A17, 0x00050080,
|
||||
0x0000000C, 0x00004158, 0x00004157, 0x0000544C, 0x000500C7, 0x0000000C,
|
||||
0x00004FD6, 0x00003C4B, 0x00000A0E, 0x000500C4, 0x0000000C, 0x00002703,
|
||||
0x00004FD6, 0x00000A14, 0x000500C3, 0x0000000C, 0x00003332, 0x00004158,
|
||||
0x00000A1D, 0x000500C7, 0x0000000C, 0x000036D6, 0x00003332, 0x00000A20,
|
||||
0x00050080, 0x0000000C, 0x00003412, 0x00002703, 0x000036D6, 0x000500C4,
|
||||
0x0000000C, 0x00005B32, 0x00003412, 0x00000A14, 0x000500C7, 0x0000000C,
|
||||
0x00005AB1, 0x00003C4B, 0x00000A05, 0x00050080, 0x0000000C, 0x00002A9C,
|
||||
0x00005B32, 0x00005AB1, 0x000500C4, 0x0000000C, 0x00005B33, 0x00002A9C,
|
||||
0x00000A11, 0x000500C7, 0x0000000C, 0x00005AB2, 0x00004158, 0x0000040B,
|
||||
0x00050080, 0x0000000C, 0x00002A9D, 0x00005B33, 0x00005AB2, 0x000500C4,
|
||||
0x0000000C, 0x00005B34, 0x00002A9D, 0x00000A14, 0x000500C7, 0x0000000C,
|
||||
0x00005559, 0x00004158, 0x00000AC8, 0x00050080, 0x0000000C, 0x00005EFA,
|
||||
0x00005B34, 0x00005559, 0x0004007C, 0x0000000B, 0x0000566F, 0x00005EFA,
|
||||
0x000200F9, 0x00005341, 0x000200F8, 0x00002DD9, 0x0007004F, 0x00000011,
|
||||
0x00002621, 0x000024C9, 0x000024C9, 0x00000000, 0x00000001, 0x0004007C,
|
||||
0x00000012, 0x000059CF, 0x00002621, 0x00050051, 0x0000000C, 0x00001903,
|
||||
0x000059CF, 0x00000000, 0x000500C3, 0x0000000C, 0x000024FE, 0x00001903,
|
||||
0x00000A1A, 0x00050051, 0x0000000C, 0x00002748, 0x000059CF, 0x00000001,
|
||||
0x000500C3, 0x0000000C, 0x0000405D, 0x00002748, 0x00000A1A, 0x000500C2,
|
||||
0x0000000B, 0x00005B4E, 0x00005EAC, 0x00000A19, 0x0004007C, 0x0000000C,
|
||||
0x000018AB, 0x00005B4E, 0x00050084, 0x0000000C, 0x00005347, 0x0000405D,
|
||||
0x000018AB, 0x00050080, 0x0000000C, 0x00003F5E, 0x000024FE, 0x00005347,
|
||||
0x000500C4, 0x0000000C, 0x00004A8E, 0x00003F5E, 0x00000A22, 0x000500C7,
|
||||
0x0000000C, 0x00002AB6, 0x00001903, 0x00000A20, 0x000500C7, 0x0000000C,
|
||||
0x00003139, 0x00002748, 0x00000A35, 0x000500C4, 0x0000000C, 0x0000454E,
|
||||
0x00003139, 0x00000A11, 0x00050080, 0x0000000C, 0x00004397, 0x00002AB6,
|
||||
0x0000454E, 0x000500C4, 0x0000000C, 0x000018E7, 0x00004397, 0x00000A0D,
|
||||
0x000500C7, 0x0000000C, 0x000027B1, 0x000018E7, 0x000009DB, 0x000500C4,
|
||||
0x0000000C, 0x00002F76, 0x000027B1, 0x00000A0E, 0x00050080, 0x0000000C,
|
||||
0x00003C4C, 0x00004A8E, 0x00002F76, 0x000500C7, 0x0000000C, 0x00003397,
|
||||
0x000018E7, 0x00000A38, 0x00050080, 0x0000000C, 0x00004D30, 0x00003C4C,
|
||||
0x00003397, 0x000500C7, 0x0000000C, 0x000047B5, 0x00002748, 0x00000A0E,
|
||||
0x000500C4, 0x0000000C, 0x0000544D, 0x000047B5, 0x00000A17, 0x00050080,
|
||||
0x0000000C, 0x00004159, 0x00004D30, 0x0000544D, 0x000500C7, 0x0000000C,
|
||||
0x00005022, 0x00004159, 0x0000040B, 0x000500C4, 0x0000000C, 0x00002416,
|
||||
0x00005022, 0x00000A14, 0x000500C7, 0x0000000C, 0x00004A33, 0x00002748,
|
||||
0x00000A3B, 0x000500C4, 0x0000000C, 0x00002F77, 0x00004A33, 0x00000A20,
|
||||
0x00050080, 0x0000000C, 0x0000415A, 0x00002416, 0x00002F77, 0x000500C7,
|
||||
0x0000000C, 0x00004ADF, 0x00004159, 0x00000388, 0x000500C4, 0x0000000C,
|
||||
0x0000544E, 0x00004ADF, 0x00000A11, 0x00050080, 0x0000000C, 0x00004144,
|
||||
0x0000415A, 0x0000544E, 0x000500C7, 0x0000000C, 0x00005083, 0x00002748,
|
||||
0x00000A23, 0x000500C3, 0x0000000C, 0x000041BF, 0x00005083, 0x00000A11,
|
||||
0x000500C3, 0x0000000C, 0x00001EEC, 0x00001903, 0x00000A14, 0x00050080,
|
||||
0x0000000C, 0x000035B6, 0x000041BF, 0x00001EEC, 0x000500C7, 0x0000000C,
|
||||
0x00005453, 0x000035B6, 0x00000A14, 0x000500C4, 0x0000000C, 0x0000544F,
|
||||
0x00005453, 0x00000A1D, 0x00050080, 0x0000000C, 0x00003C4D, 0x00004144,
|
||||
0x0000544F, 0x000500C7, 0x0000000C, 0x00002E06, 0x00004159, 0x00000AC8,
|
||||
0x00050080, 0x0000000C, 0x0000394F, 0x00003C4D, 0x00002E06, 0x0004007C,
|
||||
0x0000000B, 0x00005670, 0x0000394F, 0x000200F9, 0x00005341, 0x000200F8,
|
||||
0x00005341, 0x000700F5, 0x0000000B, 0x000024FC, 0x0000566F, 0x0000537D,
|
||||
0x00005670, 0x00002DD9, 0x00050084, 0x00000011, 0x00003FA8, 0x00001F69,
|
||||
0x00001997, 0x00050082, 0x00000011, 0x00003BBC, 0x00005C0B, 0x00003FA8,
|
||||
0x00050051, 0x0000000B, 0x00001C87, 0x00001997, 0x00000000, 0x00050051,
|
||||
0x0000000B, 0x00005962, 0x00001997, 0x00000001, 0x00050084, 0x0000000B,
|
||||
0x00003372, 0x00001C87, 0x00005962, 0x00050084, 0x0000000B, 0x00003CA0,
|
||||
0x000024FC, 0x00003372, 0x00050051, 0x0000000B, 0x00003ED4, 0x00003BBC,
|
||||
0x00000000, 0x00050084, 0x0000000B, 0x00003E12, 0x00003ED4, 0x00005962,
|
||||
0x00050051, 0x0000000B, 0x00001AE6, 0x00003BBC, 0x00000001, 0x00050080,
|
||||
0x0000000B, 0x00002B25, 0x00003E12, 0x00001AE6, 0x000500C4, 0x0000000B,
|
||||
0x0000609D, 0x00002B25, 0x00000A13, 0x000500C7, 0x0000000B, 0x00005AB3,
|
||||
0x000049F1, 0x00000A1F, 0x00050080, 0x0000000B, 0x00002557, 0x0000609D,
|
||||
0x00005AB3, 0x000500C4, 0x0000000B, 0x000040AD, 0x00002557, 0x00000A0D,
|
||||
0x00050080, 0x0000000B, 0x00004EAA, 0x00003CA0, 0x000040AD, 0x00050080,
|
||||
0x0000000B, 0x0000453C, 0x00005B88, 0x00004EAA, 0x000500C2, 0x0000000B,
|
||||
0x000036D8, 0x0000453C, 0x00000A16, 0x000500C2, 0x0000000B, 0x00002DF6,
|
||||
0x00004FA3, 0x00000A10, 0x000500C7, 0x0000000B, 0x000020CA, 0x00002DF6,
|
||||
0x00000A13, 0x00060041, 0x00000294, 0x000050F7, 0x0000107A, 0x00000A0B,
|
||||
0x000036D8, 0x0004003D, 0x00000017, 0x00002585, 0x000050F7, 0x000500AA,
|
||||
0x00000009, 0x00005272, 0x000020CA, 0x00000A0D, 0x000300F7, 0x0000368A,
|
||||
0x00000000, 0x000400FA, 0x00005272, 0x00002957, 0x0000368A, 0x000200F8,
|
||||
0x00002957, 0x000500C7, 0x00000017, 0x0000475F, 0x00002585, 0x000009CE,
|
||||
0x000500C4, 0x00000017, 0x000024D1, 0x0000475F, 0x0000013D, 0x000500C7,
|
||||
0x00000017, 0x000050AC, 0x00002585, 0x0000072E, 0x000500C2, 0x00000017,
|
||||
0x0000448D, 0x000050AC, 0x0000013D, 0x000500C5, 0x00000017, 0x00003FF8,
|
||||
0x000024D1, 0x0000448D, 0x000200F9, 0x0000368A, 0x000200F8, 0x0000368A,
|
||||
0x000700F5, 0x00000017, 0x000040DE, 0x00002585, 0x00005341, 0x00003FF8,
|
||||
0x00002957, 0x000500C7, 0x00000017, 0x00004740, 0x000040DE, 0x00000352,
|
||||
0x00040070, 0x0000001D, 0x000023B1, 0x00004740, 0x0005008E, 0x0000001D,
|
||||
0x00004BA5, 0x000023B1, 0x0000092A, 0x000500C2, 0x00000017, 0x00005B47,
|
||||
0x000040DE, 0x000002ED, 0x00040070, 0x0000001D, 0x0000483C, 0x00005B47,
|
||||
0x0005008E, 0x0000001D, 0x00004812, 0x0000483C, 0x0000092A, 0x00050051,
|
||||
0x0000000D, 0x0000187C, 0x00004BA5, 0x00000000, 0x00050051, 0x0000000D,
|
||||
0x000035EE, 0x00004812, 0x00000000, 0x00050050, 0x00000013, 0x00004B20,
|
||||
0x0000187C, 0x000035EE, 0x0006000C, 0x0000000B, 0x00002171, 0x00000001,
|
||||
0x0000003A, 0x00004B20, 0x00050051, 0x0000000D, 0x00005BBF, 0x00004BA5,
|
||||
0x00000001, 0x00050051, 0x0000000D, 0x000039A7, 0x00004812, 0x00000001,
|
||||
0x00050050, 0x00000013, 0x00004B21, 0x00005BBF, 0x000039A7, 0x0006000C,
|
||||
0x0000000B, 0x00002172, 0x00000001, 0x0000003A, 0x00004B21, 0x00050051,
|
||||
0x0000000D, 0x00005BC0, 0x00004BA5, 0x00000002, 0x00050051, 0x0000000D,
|
||||
0x000039A8, 0x00004812, 0x00000002, 0x00050050, 0x00000013, 0x00004B22,
|
||||
0x00005BC0, 0x000039A8, 0x0006000C, 0x0000000B, 0x00002173, 0x00000001,
|
||||
0x0000003A, 0x00004B22, 0x00050051, 0x0000000D, 0x00005BC1, 0x00004BA5,
|
||||
0x00000003, 0x00050051, 0x0000000D, 0x000039A9, 0x00004812, 0x00000003,
|
||||
0x00050050, 0x00000013, 0x00004B0D, 0x00005BC1, 0x000039A9, 0x0006000C,
|
||||
0x0000000B, 0x000020EE, 0x00000001, 0x0000003A, 0x00004B0D, 0x00070050,
|
||||
0x00000017, 0x00003ABB, 0x00002171, 0x00002172, 0x00002173, 0x000020EE,
|
||||
0x00060041, 0x00000294, 0x000045C3, 0x0000140E, 0x00000A0B, 0x000054A6,
|
||||
0x0003003E, 0x000045C3, 0x00003ABB, 0x00050080, 0x0000000B, 0x00003CAC,
|
||||
0x000054A6, 0x00000A0E, 0x000500AC, 0x00000009, 0x00001911, 0x00001C87,
|
||||
0x00000A0D, 0x000300F7, 0x000060BC, 0x00000002, 0x000400FA, 0x00001911,
|
||||
0x00005084, 0x00005094, 0x000200F8, 0x00005084, 0x00050086, 0x0000000B,
|
||||
0x00003697, 0x000019EE, 0x00001C87, 0x00050084, 0x0000000B, 0x0000237E,
|
||||
0x00003697, 0x00001C87, 0x00050082, 0x0000000B, 0x00003171, 0x000019EE,
|
||||
0x0000237E, 0x00050080, 0x0000000B, 0x00002527, 0x00003171, 0x00000A0D,
|
||||
0x000500AA, 0x00000009, 0x0000343F, 0x00002527, 0x00001C87, 0x000300F7,
|
||||
0x00001EED, 0x00000000, 0x000400FA, 0x0000343F, 0x0000569E, 0x00002191,
|
||||
0x000200F8, 0x0000569E, 0x00050084, 0x0000000B, 0x00004B59, 0x00000ACA,
|
||||
0x00001C87, 0x000500C4, 0x0000000B, 0x0000540F, 0x00003171, 0x00000A16,
|
||||
0x00050082, 0x0000000B, 0x00004944, 0x00004B59, 0x0000540F, 0x000200F9,
|
||||
0x00001EED, 0x000200F8, 0x00002191, 0x000200F9, 0x00001EED, 0x000200F8,
|
||||
0x00001EED, 0x000700F5, 0x0000000B, 0x0000292C, 0x00004944, 0x0000569E,
|
||||
0x00000A3A, 0x00002191, 0x000200F9, 0x000060BC, 0x000200F8, 0x00005094,
|
||||
0x000200F9, 0x000060BC, 0x000200F8, 0x000060BC, 0x000700F5, 0x0000000B,
|
||||
0x000029BC, 0x0000292C, 0x00001EED, 0x00000ACA, 0x00005094, 0x00050084,
|
||||
0x0000000B, 0x0000492B, 0x000029BC, 0x00005962, 0x000500C2, 0x0000000B,
|
||||
0x0000406D, 0x0000492B, 0x00000A16, 0x00050080, 0x0000000B, 0x0000336B,
|
||||
0x000036D8, 0x0000406D, 0x00060041, 0x00000294, 0x0000571A, 0x0000107A,
|
||||
0x00000A0B, 0x0000336B, 0x0004003D, 0x00000017, 0x000019B2, 0x0000571A,
|
||||
0x000300F7, 0x0000368B, 0x00000000, 0x000400FA, 0x00005272, 0x00002958,
|
||||
0x0000368B, 0x000200F8, 0x00002958, 0x000500C7, 0x00000017, 0x00004760,
|
||||
0x000019B2, 0x000009CE, 0x000500C4, 0x00000017, 0x000024D2, 0x00004760,
|
||||
0x0000013D, 0x000500C7, 0x00000017, 0x000050AD, 0x000019B2, 0x0000072E,
|
||||
0x000500C2, 0x00000017, 0x0000448E, 0x000050AD, 0x0000013D, 0x000500C5,
|
||||
0x00000017, 0x00003FF9, 0x000024D2, 0x0000448E, 0x000200F9, 0x0000368B,
|
||||
0x000200F8, 0x0000368B, 0x000700F5, 0x00000017, 0x000040DF, 0x000019B2,
|
||||
0x000060BC, 0x00003FF9, 0x00002958, 0x000500C7, 0x00000017, 0x00004741,
|
||||
0x000040DF, 0x00000352, 0x00040070, 0x0000001D, 0x000023B2, 0x00004741,
|
||||
0x0005008E, 0x0000001D, 0x00004BA6, 0x000023B2, 0x0000092A, 0x000500C2,
|
||||
0x00000017, 0x00005B48, 0x000040DF, 0x000002ED, 0x00040070, 0x0000001D,
|
||||
0x0000483D, 0x00005B48, 0x0005008E, 0x0000001D, 0x00004813, 0x0000483D,
|
||||
0x0000092A, 0x00050051, 0x0000000D, 0x0000187D, 0x00004BA6, 0x00000000,
|
||||
0x00050051, 0x0000000D, 0x000035EF, 0x00004813, 0x00000000, 0x00050050,
|
||||
0x00000013, 0x00004B23, 0x0000187D, 0x000035EF, 0x0006000C, 0x0000000B,
|
||||
0x00002174, 0x00000001, 0x0000003A, 0x00004B23, 0x00050051, 0x0000000D,
|
||||
0x00005BC2, 0x00004BA6, 0x00000001, 0x00050051, 0x0000000D, 0x000039AA,
|
||||
0x00004813, 0x00000001, 0x00050050, 0x00000013, 0x00004B24, 0x00005BC2,
|
||||
0x000039AA, 0x0006000C, 0x0000000B, 0x00002175, 0x00000001, 0x0000003A,
|
||||
0x00004B24, 0x00050051, 0x0000000D, 0x00005BC3, 0x00004BA6, 0x00000002,
|
||||
0x00050051, 0x0000000D, 0x000039AB, 0x00004813, 0x00000002, 0x00050050,
|
||||
0x00000013, 0x00004B25, 0x00005BC3, 0x000039AB, 0x0006000C, 0x0000000B,
|
||||
0x00002176, 0x00000001, 0x0000003A, 0x00004B25, 0x00050051, 0x0000000D,
|
||||
0x00005BC4, 0x00004BA6, 0x00000003, 0x00050051, 0x0000000D, 0x000039AC,
|
||||
0x00004813, 0x00000003, 0x00050050, 0x00000013, 0x00004B0E, 0x00005BC4,
|
||||
0x000039AC, 0x0006000C, 0x0000000B, 0x000020EF, 0x00000001, 0x0000003A,
|
||||
0x00004B0E, 0x00070050, 0x00000017, 0x00003ABC, 0x00002174, 0x00002175,
|
||||
0x00002176, 0x000020EF, 0x00060041, 0x00000294, 0x00004EBE, 0x0000140E,
|
||||
0x00000A0B, 0x00003CAC, 0x0003003E, 0x00004EBE, 0x00003ABC, 0x000200F9,
|
||||
0x00004C7A, 0x000200F8, 0x00004C7A, 0x000100FD, 0x00010038,
|
||||
};
|
701
src/xenia/gpu/shaders/bytecode/vulkan_spirv/texture_load_rg16_snorm_float_cs.h
generated
Normal file
701
src/xenia/gpu/shaders/bytecode/vulkan_spirv/texture_load_rg16_snorm_float_cs.h
generated
Normal file
|
@ -0,0 +1,701 @@
|
|||
// Generated with `xb buildshaders`.
|
||||
#if 0
|
||||
; SPIR-V
|
||||
; Version: 1.0
|
||||
; Generator: Khronos Glslang Reference Front End; 10
|
||||
; Bound: 25179
|
||||
; Schema: 0
|
||||
OpCapability Shader
|
||||
%1 = OpExtInstImport "GLSL.std.450"
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %5663 "main" %gl_GlobalInvocationID
|
||||
OpExecutionMode %5663 LocalSize 4 32 1
|
||||
OpMemberDecorate %_struct_1161 0 Offset 0
|
||||
OpMemberDecorate %_struct_1161 1 Offset 4
|
||||
OpMemberDecorate %_struct_1161 2 Offset 8
|
||||
OpMemberDecorate %_struct_1161 3 Offset 12
|
||||
OpMemberDecorate %_struct_1161 4 Offset 16
|
||||
OpMemberDecorate %_struct_1161 5 Offset 28
|
||||
OpMemberDecorate %_struct_1161 6 Offset 32
|
||||
OpMemberDecorate %_struct_1161 7 Offset 36
|
||||
OpDecorate %_struct_1161 Block
|
||||
OpDecorate %5245 DescriptorSet 2
|
||||
OpDecorate %5245 Binding 0
|
||||
OpDecorate %gl_GlobalInvocationID BuiltIn GlobalInvocationId
|
||||
OpDecorate %_runtimearr_v4uint ArrayStride 16
|
||||
OpMemberDecorate %_struct_1972 0 NonReadable
|
||||
OpMemberDecorate %_struct_1972 0 Offset 0
|
||||
OpDecorate %_struct_1972 BufferBlock
|
||||
OpDecorate %5134 DescriptorSet 0
|
||||
OpDecorate %5134 Binding 0
|
||||
OpDecorate %_runtimearr_v4uint_0 ArrayStride 16
|
||||
OpMemberDecorate %_struct_1973 0 NonWritable
|
||||
OpMemberDecorate %_struct_1973 0 Offset 0
|
||||
OpDecorate %_struct_1973 BufferBlock
|
||||
OpDecorate %4218 DescriptorSet 1
|
||||
OpDecorate %4218 Binding 0
|
||||
OpDecorate %gl_WorkGroupSize BuiltIn WorkgroupSize
|
||||
%void = OpTypeVoid
|
||||
%1282 = OpTypeFunction %void
|
||||
%uint = OpTypeInt 32 0
|
||||
%v4uint = OpTypeVector %uint 4
|
||||
%int = OpTypeInt 32 1
|
||||
%v2int = OpTypeVector %int 2
|
||||
%v3int = OpTypeVector %int 3
|
||||
%bool = OpTypeBool
|
||||
%v3uint = OpTypeVector %uint 3
|
||||
%float = OpTypeFloat 32
|
||||
%v4float = OpTypeVector %float 4
|
||||
%float_n1 = OpConstant %float -1
|
||||
%1284 = OpConstantComposite %v4float %float_n1 %float_n1 %float_n1 %float_n1
|
||||
%v4int = OpTypeVector %int 4
|
||||
%int_16 = OpConstant %int 16
|
||||
%float_3_05185094en05 = OpConstant %float 3.05185094e-05
|
||||
%uint_0 = OpConstant %uint 0
|
||||
%v2float = OpTypeVector %float 2
|
||||
%uint_1 = OpConstant %uint 1
|
||||
%uint_2 = OpConstant %uint 2
|
||||
%uint_3 = OpConstant %uint 3
|
||||
%uint_16711935 = OpConstant %uint 16711935
|
||||
%uint_8 = OpConstant %uint 8
|
||||
%uint_4278255360 = OpConstant %uint 4278255360
|
||||
%uint_16 = OpConstant %uint 16
|
||||
%int_5 = OpConstant %int 5
|
||||
%uint_5 = OpConstant %uint 5
|
||||
%int_7 = OpConstant %int 7
|
||||
%int_14 = OpConstant %int 14
|
||||
%int_2 = OpConstant %int 2
|
||||
%int_n16 = OpConstant %int -16
|
||||
%int_1 = OpConstant %int 1
|
||||
%int_15 = OpConstant %int 15
|
||||
%int_4 = OpConstant %int 4
|
||||
%int_n512 = OpConstant %int -512
|
||||
%int_3 = OpConstant %int 3
|
||||
%int_448 = OpConstant %int 448
|
||||
%int_8 = OpConstant %int 8
|
||||
%int_6 = OpConstant %int 6
|
||||
%int_63 = OpConstant %int 63
|
||||
%uint_4 = OpConstant %uint 4
|
||||
%int_268435455 = OpConstant %int 268435455
|
||||
%int_n2 = OpConstant %int -2
|
||||
%uint_32 = OpConstant %uint 32
|
||||
%_struct_1161 = OpTypeStruct %uint %uint %uint %uint %v3uint %uint %uint %uint
|
||||
%_ptr_Uniform__struct_1161 = OpTypePointer Uniform %_struct_1161
|
||||
%5245 = OpVariable %_ptr_Uniform__struct_1161 Uniform
|
||||
%int_0 = OpConstant %int 0
|
||||
%_ptr_Uniform_uint = OpTypePointer Uniform %uint
|
||||
%_ptr_Uniform_v3uint = OpTypePointer Uniform %v3uint
|
||||
%v2uint = OpTypeVector %uint 2
|
||||
%_ptr_Input_v3uint = OpTypePointer Input %v3uint
|
||||
%gl_GlobalInvocationID = OpVariable %_ptr_Input_v3uint Input
|
||||
%2603 = OpConstantComposite %v3uint %uint_3 %uint_0 %uint_0
|
||||
%v2bool = OpTypeVector %bool 2
|
||||
%_runtimearr_v4uint = OpTypeRuntimeArray %v4uint
|
||||
%_struct_1972 = OpTypeStruct %_runtimearr_v4uint
|
||||
%_ptr_Uniform__struct_1972 = OpTypePointer Uniform %_struct_1972
|
||||
%5134 = OpVariable %_ptr_Uniform__struct_1972 Uniform
|
||||
%_runtimearr_v4uint_0 = OpTypeRuntimeArray %v4uint
|
||||
%_struct_1973 = OpTypeStruct %_runtimearr_v4uint_0
|
||||
%_ptr_Uniform__struct_1973 = OpTypePointer Uniform %_struct_1973
|
||||
%4218 = OpVariable %_ptr_Uniform__struct_1973 Uniform
|
||||
%_ptr_Uniform_v4uint = OpTypePointer Uniform %v4uint
|
||||
%gl_WorkGroupSize = OpConstantComposite %v3uint %uint_4 %uint_32 %uint_1
|
||||
%uint_9 = OpConstant %uint 9
|
||||
%2510 = OpConstantComposite %v4uint %uint_16711935 %uint_16711935 %uint_16711935 %uint_16711935
|
||||
%317 = OpConstantComposite %v4uint %uint_8 %uint_8 %uint_8 %uint_8
|
||||
%1838 = OpConstantComposite %v4uint %uint_4278255360 %uint_4278255360 %uint_4278255360 %uint_4278255360
|
||||
%749 = OpConstantComposite %v4uint %uint_16 %uint_16 %uint_16 %uint_16
|
||||
%770 = OpConstantComposite %v4int %int_16 %int_16 %int_16 %int_16
|
||||
%5663 = OpFunction %void None %1282
|
||||
%15110 = OpLabel
|
||||
OpSelectionMerge %19578 None
|
||||
OpSwitch %uint_0 %15137
|
||||
%15137 = OpLabel
|
||||
%12591 = OpLoad %v3uint %gl_GlobalInvocationID
|
||||
%10229 = OpShiftLeftLogical %v3uint %12591 %2603
|
||||
%25178 = OpAccessChain %_ptr_Uniform_v3uint %5245 %int_4
|
||||
%22965 = OpLoad %v3uint %25178
|
||||
%18835 = OpVectorShuffle %v2uint %10229 %10229 0 1
|
||||
%6626 = OpVectorShuffle %v2uint %22965 %22965 0 1
|
||||
%17032 = OpUGreaterThanEqual %v2bool %18835 %6626
|
||||
%24679 = OpAny %bool %17032
|
||||
OpSelectionMerge %6282 DontFlatten
|
||||
OpBranchConditional %24679 %21992 %6282
|
||||
%21992 = OpLabel
|
||||
OpBranch %19578
|
||||
%6282 = OpLabel
|
||||
%6795 = OpBitcast %v3int %10229
|
||||
%18792 = OpAccessChain %_ptr_Uniform_uint %5245 %int_6
|
||||
%9788 = OpLoad %uint %18792
|
||||
%20376 = OpCompositeExtract %uint %22965 1
|
||||
%14692 = OpCompositeExtract %int %6795 0
|
||||
%22810 = OpIMul %int %14692 %int_4
|
||||
%6362 = OpCompositeExtract %int %6795 2
|
||||
%14505 = OpBitcast %int %20376
|
||||
%11279 = OpIMul %int %6362 %14505
|
||||
%17598 = OpCompositeExtract %int %6795 1
|
||||
%22228 = OpIAdd %int %11279 %17598
|
||||
%22405 = OpBitcast %int %9788
|
||||
%24535 = OpIMul %int %22228 %22405
|
||||
%7061 = OpIAdd %int %22810 %24535
|
||||
%19270 = OpBitcast %uint %7061
|
||||
%19460 = OpAccessChain %_ptr_Uniform_uint %5245 %int_5
|
||||
%22875 = OpLoad %uint %19460
|
||||
%8517 = OpIAdd %uint %19270 %22875
|
||||
%21670 = OpShiftRightLogical %uint %8517 %uint_4
|
||||
%20950 = OpAccessChain %_ptr_Uniform_uint %5245 %int_0
|
||||
%21411 = OpLoad %uint %20950
|
||||
%6381 = OpBitwiseAnd %uint %21411 %uint_1
|
||||
%10467 = OpINotEqual %bool %6381 %uint_0
|
||||
OpSelectionMerge %23266 DontFlatten
|
||||
OpBranchConditional %10467 %10108 %10765
|
||||
%10108 = OpLabel
|
||||
%23508 = OpBitwiseAnd %uint %21411 %uint_2
|
||||
%16300 = OpINotEqual %bool %23508 %uint_0
|
||||
OpSelectionMerge %7691 DontFlatten
|
||||
OpBranchConditional %16300 %12129 %25128
|
||||
%12129 = OpLabel
|
||||
%18210 = OpAccessChain %_ptr_Uniform_uint %5245 %int_2
|
||||
%15627 = OpLoad %uint %18210
|
||||
%22624 = OpAccessChain %_ptr_Uniform_uint %5245 %int_3
|
||||
%21535 = OpLoad %uint %22624
|
||||
%14923 = OpShiftRightArithmetic %int %17598 %int_4
|
||||
%18773 = OpShiftRightArithmetic %int %6362 %int_2
|
||||
%18759 = OpShiftRightLogical %uint %21535 %uint_4
|
||||
%6314 = OpBitcast %int %18759
|
||||
%21281 = OpIMul %int %18773 %6314
|
||||
%15143 = OpIAdd %int %14923 %21281
|
||||
%9032 = OpShiftRightLogical %uint %15627 %uint_5
|
||||
%14593 = OpBitcast %int %9032
|
||||
%8436 = OpIMul %int %15143 %14593
|
||||
%12986 = OpShiftRightArithmetic %int %14692 %int_5
|
||||
%24558 = OpIAdd %int %12986 %8436
|
||||
%8797 = OpShiftLeftLogical %int %24558 %uint_8
|
||||
%11510 = OpBitwiseAnd %int %8797 %int_268435455
|
||||
%18938 = OpShiftLeftLogical %int %11510 %int_1
|
||||
%19768 = OpBitwiseAnd %int %14692 %int_7
|
||||
%12600 = OpBitwiseAnd %int %17598 %int_6
|
||||
%17741 = OpShiftLeftLogical %int %12600 %int_2
|
||||
%17227 = OpIAdd %int %19768 %17741
|
||||
%7048 = OpShiftLeftLogical %int %17227 %uint_8
|
||||
%24035 = OpShiftRightArithmetic %int %7048 %int_6
|
||||
%8725 = OpShiftRightArithmetic %int %17598 %int_3
|
||||
%13731 = OpIAdd %int %8725 %18773
|
||||
%23052 = OpBitwiseAnd %int %13731 %int_1
|
||||
%16658 = OpShiftRightArithmetic %int %14692 %int_3
|
||||
%18794 = OpShiftLeftLogical %int %23052 %int_1
|
||||
%13501 = OpIAdd %int %16658 %18794
|
||||
%19165 = OpBitwiseAnd %int %13501 %int_3
|
||||
%21578 = OpShiftLeftLogical %int %19165 %int_1
|
||||
%15435 = OpIAdd %int %23052 %21578
|
||||
%13150 = OpBitwiseAnd %int %24035 %int_n16
|
||||
%20336 = OpIAdd %int %18938 %13150
|
||||
%23345 = OpShiftLeftLogical %int %20336 %int_1
|
||||
%23274 = OpBitwiseAnd %int %24035 %int_15
|
||||
%10332 = OpIAdd %int %23345 %23274
|
||||
%18356 = OpBitwiseAnd %int %6362 %int_3
|
||||
%21579 = OpShiftLeftLogical %int %18356 %uint_8
|
||||
%16727 = OpIAdd %int %10332 %21579
|
||||
%19166 = OpBitwiseAnd %int %17598 %int_1
|
||||
%21580 = OpShiftLeftLogical %int %19166 %int_4
|
||||
%16728 = OpIAdd %int %16727 %21580
|
||||
%20438 = OpBitwiseAnd %int %15435 %int_1
|
||||
%9987 = OpShiftLeftLogical %int %20438 %int_3
|
||||
%13106 = OpShiftRightArithmetic %int %16728 %int_6
|
||||
%14038 = OpBitwiseAnd %int %13106 %int_7
|
||||
%13330 = OpIAdd %int %9987 %14038
|
||||
%23346 = OpShiftLeftLogical %int %13330 %int_3
|
||||
%23217 = OpBitwiseAnd %int %15435 %int_n2
|
||||
%10908 = OpIAdd %int %23346 %23217
|
||||
%23347 = OpShiftLeftLogical %int %10908 %int_2
|
||||
%23218 = OpBitwiseAnd %int %16728 %int_n512
|
||||
%10909 = OpIAdd %int %23347 %23218
|
||||
%23348 = OpShiftLeftLogical %int %10909 %int_3
|
||||
%24224 = OpBitwiseAnd %int %16728 %int_63
|
||||
%21741 = OpIAdd %int %23348 %24224
|
||||
OpBranch %7691
|
||||
%25128 = OpLabel
|
||||
%6796 = OpBitcast %v2int %18835
|
||||
%18793 = OpAccessChain %_ptr_Uniform_uint %5245 %int_2
|
||||
%11954 = OpLoad %uint %18793
|
||||
%18756 = OpCompositeExtract %int %6796 0
|
||||
%19701 = OpShiftRightArithmetic %int %18756 %int_5
|
||||
%10055 = OpCompositeExtract %int %6796 1
|
||||
%16476 = OpShiftRightArithmetic %int %10055 %int_5
|
||||
%23373 = OpShiftRightLogical %uint %11954 %uint_5
|
||||
%6315 = OpBitcast %int %23373
|
||||
%21319 = OpIMul %int %16476 %6315
|
||||
%16222 = OpIAdd %int %19701 %21319
|
||||
%19086 = OpShiftLeftLogical %int %16222 %uint_9
|
||||
%10934 = OpBitwiseAnd %int %18756 %int_7
|
||||
%12601 = OpBitwiseAnd %int %10055 %int_14
|
||||
%17742 = OpShiftLeftLogical %int %12601 %int_2
|
||||
%17303 = OpIAdd %int %10934 %17742
|
||||
%6375 = OpShiftLeftLogical %int %17303 %uint_2
|
||||
%10161 = OpBitwiseAnd %int %6375 %int_n16
|
||||
%12150 = OpShiftLeftLogical %int %10161 %int_1
|
||||
%15436 = OpIAdd %int %19086 %12150
|
||||
%13207 = OpBitwiseAnd %int %6375 %int_15
|
||||
%19760 = OpIAdd %int %15436 %13207
|
||||
%18357 = OpBitwiseAnd %int %10055 %int_1
|
||||
%21581 = OpShiftLeftLogical %int %18357 %int_4
|
||||
%16729 = OpIAdd %int %19760 %21581
|
||||
%20514 = OpBitwiseAnd %int %16729 %int_n512
|
||||
%9238 = OpShiftLeftLogical %int %20514 %int_3
|
||||
%18995 = OpBitwiseAnd %int %10055 %int_16
|
||||
%12151 = OpShiftLeftLogical %int %18995 %int_7
|
||||
%16730 = OpIAdd %int %9238 %12151
|
||||
%19167 = OpBitwiseAnd %int %16729 %int_448
|
||||
%21582 = OpShiftLeftLogical %int %19167 %int_2
|
||||
%16708 = OpIAdd %int %16730 %21582
|
||||
%20611 = OpBitwiseAnd %int %10055 %int_8
|
||||
%16831 = OpShiftRightArithmetic %int %20611 %int_2
|
||||
%7916 = OpShiftRightArithmetic %int %18756 %int_3
|
||||
%13750 = OpIAdd %int %16831 %7916
|
||||
%21587 = OpBitwiseAnd %int %13750 %int_3
|
||||
%21583 = OpShiftLeftLogical %int %21587 %int_6
|
||||
%15437 = OpIAdd %int %16708 %21583
|
||||
%14157 = OpBitwiseAnd %int %16729 %int_63
|
||||
%12098 = OpIAdd %int %15437 %14157
|
||||
OpBranch %7691
|
||||
%7691 = OpLabel
|
||||
%10540 = OpPhi %int %21741 %12129 %12098 %25128
|
||||
OpBranch %23266
|
||||
%10765 = OpLabel
|
||||
%20632 = OpAccessChain %_ptr_Uniform_uint %5245 %int_2
|
||||
%15628 = OpLoad %uint %20632
|
||||
%21275 = OpAccessChain %_ptr_Uniform_uint %5245 %int_3
|
||||
%13550 = OpLoad %uint %21275
|
||||
%15070 = OpBitcast %int %13550
|
||||
%18927 = OpIMul %int %6362 %15070
|
||||
%8334 = OpIAdd %int %18927 %17598
|
||||
%8952 = OpBitcast %int %15628
|
||||
%7839 = OpIMul %int %8334 %8952
|
||||
%7984 = OpIAdd %int %22810 %7839
|
||||
OpBranch %23266
|
||||
%23266 = OpLabel
|
||||
%19748 = OpPhi %int %10540 %7691 %7984 %10765
|
||||
%24922 = OpAccessChain %_ptr_Uniform_uint %5245 %int_1
|
||||
%7502 = OpLoad %uint %24922
|
||||
%15686 = OpBitcast %int %7502
|
||||
%15579 = OpIAdd %int %15686 %19748
|
||||
%18556 = OpBitcast %uint %15579
|
||||
%21493 = OpShiftRightLogical %uint %18556 %uint_4
|
||||
%14997 = OpShiftRightLogical %uint %21411 %uint_2
|
||||
%8394 = OpBitwiseAnd %uint %14997 %uint_3
|
||||
%20727 = OpAccessChain %_ptr_Uniform_v4uint %4218 %int_0 %21493
|
||||
%8142 = OpLoad %v4uint %20727
|
||||
%13760 = OpIEqual %bool %8394 %uint_1
|
||||
%21366 = OpIEqual %bool %8394 %uint_2
|
||||
%22150 = OpLogicalOr %bool %13760 %21366
|
||||
OpSelectionMerge %13411 None
|
||||
OpBranchConditional %22150 %10583 %13411
|
||||
%10583 = OpLabel
|
||||
%18271 = OpBitwiseAnd %v4uint %8142 %2510
|
||||
%9425 = OpShiftLeftLogical %v4uint %18271 %317
|
||||
%20652 = OpBitwiseAnd %v4uint %8142 %1838
|
||||
%17549 = OpShiftRightLogical %v4uint %20652 %317
|
||||
%16376 = OpBitwiseOr %v4uint %9425 %17549
|
||||
OpBranch %13411
|
||||
%13411 = OpLabel
|
||||
%22649 = OpPhi %v4uint %8142 %23266 %16376 %10583
|
||||
%19638 = OpIEqual %bool %8394 %uint_3
|
||||
%15139 = OpLogicalOr %bool %21366 %19638
|
||||
OpSelectionMerge %12537 None
|
||||
OpBranchConditional %15139 %11064 %12537
|
||||
%11064 = OpLabel
|
||||
%24087 = OpShiftLeftLogical %v4uint %22649 %749
|
||||
%15335 = OpShiftRightLogical %v4uint %22649 %749
|
||||
%10728 = OpBitwiseOr %v4uint %24087 %15335
|
||||
OpBranch %12537
|
||||
%12537 = OpLabel
|
||||
%12106 = OpPhi %v4uint %22649 %13411 %10728 %11064
|
||||
%15375 = OpBitcast %v4int %12106
|
||||
%16910 = OpShiftLeftLogical %v4int %15375 %770
|
||||
%16536 = OpShiftRightArithmetic %v4int %16910 %770
|
||||
%10903 = OpConvertSToF %v4float %16536
|
||||
%20413 = OpVectorTimesScalar %v4float %10903 %float_3_05185094en05
|
||||
%23989 = OpExtInst %v4float %1 FMax %1284 %20413
|
||||
%14338 = OpShiftRightArithmetic %v4int %15375 %770
|
||||
%6607 = OpConvertSToF %v4float %14338
|
||||
%18247 = OpVectorTimesScalar %v4float %6607 %float_3_05185094en05
|
||||
%24070 = OpExtInst %v4float %1 FMax %1284 %18247
|
||||
%24330 = OpCompositeExtract %float %23989 0
|
||||
%14319 = OpCompositeExtract %float %24070 0
|
||||
%19232 = OpCompositeConstruct %v2float %24330 %14319
|
||||
%8561 = OpExtInst %uint %1 PackHalf2x16 %19232
|
||||
%23487 = OpCompositeExtract %float %23989 1
|
||||
%14759 = OpCompositeExtract %float %24070 1
|
||||
%19233 = OpCompositeConstruct %v2float %23487 %14759
|
||||
%8562 = OpExtInst %uint %1 PackHalf2x16 %19233
|
||||
%23488 = OpCompositeExtract %float %23989 2
|
||||
%14760 = OpCompositeExtract %float %24070 2
|
||||
%19234 = OpCompositeConstruct %v2float %23488 %14760
|
||||
%8563 = OpExtInst %uint %1 PackHalf2x16 %19234
|
||||
%23489 = OpCompositeExtract %float %23989 3
|
||||
%14761 = OpCompositeExtract %float %24070 3
|
||||
%19213 = OpCompositeConstruct %v2float %23489 %14761
|
||||
%8430 = OpExtInst %uint %1 PackHalf2x16 %19213
|
||||
%15035 = OpCompositeConstruct %v4uint %8561 %8562 %8563 %8430
|
||||
%17859 = OpAccessChain %_ptr_Uniform_v4uint %5134 %int_0 %21670
|
||||
OpStore %17859 %15035
|
||||
%15044 = OpIAdd %uint %21670 %int_1
|
||||
%18776 = OpSelect %uint %10467 %uint_32 %uint_16
|
||||
%11803 = OpShiftRightLogical %uint %18776 %uint_4
|
||||
%13947 = OpIAdd %uint %21493 %11803
|
||||
%22298 = OpAccessChain %_ptr_Uniform_v4uint %4218 %int_0 %13947
|
||||
%6578 = OpLoad %v4uint %22298
|
||||
OpSelectionMerge %14874 None
|
||||
OpBranchConditional %22150 %10584 %14874
|
||||
%10584 = OpLabel
|
||||
%18272 = OpBitwiseAnd %v4uint %6578 %2510
|
||||
%9426 = OpShiftLeftLogical %v4uint %18272 %317
|
||||
%20653 = OpBitwiseAnd %v4uint %6578 %1838
|
||||
%17550 = OpShiftRightLogical %v4uint %20653 %317
|
||||
%16377 = OpBitwiseOr %v4uint %9426 %17550
|
||||
OpBranch %14874
|
||||
%14874 = OpLabel
|
||||
%10924 = OpPhi %v4uint %6578 %12537 %16377 %10584
|
||||
OpSelectionMerge %12538 None
|
||||
OpBranchConditional %15139 %11065 %12538
|
||||
%11065 = OpLabel
|
||||
%24088 = OpShiftLeftLogical %v4uint %10924 %749
|
||||
%15336 = OpShiftRightLogical %v4uint %10924 %749
|
||||
%10729 = OpBitwiseOr %v4uint %24088 %15336
|
||||
OpBranch %12538
|
||||
%12538 = OpLabel
|
||||
%12107 = OpPhi %v4uint %10924 %14874 %10729 %11065
|
||||
%15376 = OpBitcast %v4int %12107
|
||||
%16911 = OpShiftLeftLogical %v4int %15376 %770
|
||||
%16537 = OpShiftRightArithmetic %v4int %16911 %770
|
||||
%10904 = OpConvertSToF %v4float %16537
|
||||
%20414 = OpVectorTimesScalar %v4float %10904 %float_3_05185094en05
|
||||
%23990 = OpExtInst %v4float %1 FMax %1284 %20414
|
||||
%14339 = OpShiftRightArithmetic %v4int %15376 %770
|
||||
%6608 = OpConvertSToF %v4float %14339
|
||||
%18248 = OpVectorTimesScalar %v4float %6608 %float_3_05185094en05
|
||||
%24071 = OpExtInst %v4float %1 FMax %1284 %18248
|
||||
%24331 = OpCompositeExtract %float %23990 0
|
||||
%14320 = OpCompositeExtract %float %24071 0
|
||||
%19235 = OpCompositeConstruct %v2float %24331 %14320
|
||||
%8564 = OpExtInst %uint %1 PackHalf2x16 %19235
|
||||
%23490 = OpCompositeExtract %float %23990 1
|
||||
%14762 = OpCompositeExtract %float %24071 1
|
||||
%19236 = OpCompositeConstruct %v2float %23490 %14762
|
||||
%8565 = OpExtInst %uint %1 PackHalf2x16 %19236
|
||||
%23491 = OpCompositeExtract %float %23990 2
|
||||
%14763 = OpCompositeExtract %float %24071 2
|
||||
%19237 = OpCompositeConstruct %v2float %23491 %14763
|
||||
%8566 = OpExtInst %uint %1 PackHalf2x16 %19237
|
||||
%23492 = OpCompositeExtract %float %23990 3
|
||||
%14764 = OpCompositeExtract %float %24071 3
|
||||
%19214 = OpCompositeConstruct %v2float %23492 %14764
|
||||
%8431 = OpExtInst %uint %1 PackHalf2x16 %19214
|
||||
%15036 = OpCompositeConstruct %v4uint %8564 %8565 %8566 %8431
|
||||
%20158 = OpAccessChain %_ptr_Uniform_v4uint %5134 %int_0 %15044
|
||||
OpStore %20158 %15036
|
||||
OpBranch %19578
|
||||
%19578 = OpLabel
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
#endif
|
||||
|
||||
const uint32_t texture_load_rg16_snorm_float_cs[] = {
|
||||
0x07230203, 0x00010000, 0x0008000A, 0x0000625B, 0x00000000, 0x00020011,
|
||||
0x00000001, 0x0006000B, 0x00000001, 0x4C534C47, 0x6474732E, 0x3035342E,
|
||||
0x00000000, 0x0003000E, 0x00000000, 0x00000001, 0x0006000F, 0x00000005,
|
||||
0x0000161F, 0x6E69616D, 0x00000000, 0x00000F48, 0x00060010, 0x0000161F,
|
||||
0x00000011, 0x00000004, 0x00000020, 0x00000001, 0x00050048, 0x00000489,
|
||||
0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x00000489, 0x00000001,
|
||||
0x00000023, 0x00000004, 0x00050048, 0x00000489, 0x00000002, 0x00000023,
|
||||
0x00000008, 0x00050048, 0x00000489, 0x00000003, 0x00000023, 0x0000000C,
|
||||
0x00050048, 0x00000489, 0x00000004, 0x00000023, 0x00000010, 0x00050048,
|
||||
0x00000489, 0x00000005, 0x00000023, 0x0000001C, 0x00050048, 0x00000489,
|
||||
0x00000006, 0x00000023, 0x00000020, 0x00050048, 0x00000489, 0x00000007,
|
||||
0x00000023, 0x00000024, 0x00030047, 0x00000489, 0x00000002, 0x00040047,
|
||||
0x0000147D, 0x00000022, 0x00000002, 0x00040047, 0x0000147D, 0x00000021,
|
||||
0x00000000, 0x00040047, 0x00000F48, 0x0000000B, 0x0000001C, 0x00040047,
|
||||
0x000007DC, 0x00000006, 0x00000010, 0x00040048, 0x000007B4, 0x00000000,
|
||||
0x00000019, 0x00050048, 0x000007B4, 0x00000000, 0x00000023, 0x00000000,
|
||||
0x00030047, 0x000007B4, 0x00000003, 0x00040047, 0x0000140E, 0x00000022,
|
||||
0x00000000, 0x00040047, 0x0000140E, 0x00000021, 0x00000000, 0x00040047,
|
||||
0x000007DD, 0x00000006, 0x00000010, 0x00040048, 0x000007B5, 0x00000000,
|
||||
0x00000018, 0x00050048, 0x000007B5, 0x00000000, 0x00000023, 0x00000000,
|
||||
0x00030047, 0x000007B5, 0x00000003, 0x00040047, 0x0000107A, 0x00000022,
|
||||
0x00000001, 0x00040047, 0x0000107A, 0x00000021, 0x00000000, 0x00040047,
|
||||
0x00000BC3, 0x0000000B, 0x00000019, 0x00020013, 0x00000008, 0x00030021,
|
||||
0x00000502, 0x00000008, 0x00040015, 0x0000000B, 0x00000020, 0x00000000,
|
||||
0x00040017, 0x00000017, 0x0000000B, 0x00000004, 0x00040015, 0x0000000C,
|
||||
0x00000020, 0x00000001, 0x00040017, 0x00000012, 0x0000000C, 0x00000002,
|
||||
0x00040017, 0x00000016, 0x0000000C, 0x00000003, 0x00020014, 0x00000009,
|
||||
0x00040017, 0x00000014, 0x0000000B, 0x00000003, 0x00030016, 0x0000000D,
|
||||
0x00000020, 0x00040017, 0x0000001D, 0x0000000D, 0x00000004, 0x0004002B,
|
||||
0x0000000D, 0x00000341, 0xBF800000, 0x0007002C, 0x0000001D, 0x00000504,
|
||||
0x00000341, 0x00000341, 0x00000341, 0x00000341, 0x00040017, 0x0000001A,
|
||||
0x0000000C, 0x00000004, 0x0004002B, 0x0000000C, 0x00000A3B, 0x00000010,
|
||||
0x0004002B, 0x0000000D, 0x00000A38, 0x38000100, 0x0004002B, 0x0000000B,
|
||||
0x00000A0A, 0x00000000, 0x00040017, 0x00000013, 0x0000000D, 0x00000002,
|
||||
0x0004002B, 0x0000000B, 0x00000A0D, 0x00000001, 0x0004002B, 0x0000000B,
|
||||
0x00000A10, 0x00000002, 0x0004002B, 0x0000000B, 0x00000A13, 0x00000003,
|
||||
0x0004002B, 0x0000000B, 0x000008A6, 0x00FF00FF, 0x0004002B, 0x0000000B,
|
||||
0x00000A22, 0x00000008, 0x0004002B, 0x0000000B, 0x000005FD, 0xFF00FF00,
|
||||
0x0004002B, 0x0000000B, 0x00000A3A, 0x00000010, 0x0004002B, 0x0000000C,
|
||||
0x00000A1A, 0x00000005, 0x0004002B, 0x0000000B, 0x00000A19, 0x00000005,
|
||||
0x0004002B, 0x0000000C, 0x00000A20, 0x00000007, 0x0004002B, 0x0000000C,
|
||||
0x00000A35, 0x0000000E, 0x0004002B, 0x0000000C, 0x00000A11, 0x00000002,
|
||||
0x0004002B, 0x0000000C, 0x000009DB, 0xFFFFFFF0, 0x0004002B, 0x0000000C,
|
||||
0x00000A0E, 0x00000001, 0x0004002B, 0x0000000C, 0x00000A39, 0x0000000F,
|
||||
0x0004002B, 0x0000000C, 0x00000A17, 0x00000004, 0x0004002B, 0x0000000C,
|
||||
0x0000040B, 0xFFFFFE00, 0x0004002B, 0x0000000C, 0x00000A14, 0x00000003,
|
||||
0x0004002B, 0x0000000C, 0x00000388, 0x000001C0, 0x0004002B, 0x0000000C,
|
||||
0x00000A23, 0x00000008, 0x0004002B, 0x0000000C, 0x00000A1D, 0x00000006,
|
||||
0x0004002B, 0x0000000C, 0x00000AC8, 0x0000003F, 0x0004002B, 0x0000000B,
|
||||
0x00000A16, 0x00000004, 0x0004002B, 0x0000000C, 0x0000078B, 0x0FFFFFFF,
|
||||
0x0004002B, 0x0000000C, 0x00000A05, 0xFFFFFFFE, 0x0004002B, 0x0000000B,
|
||||
0x00000A6A, 0x00000020, 0x000A001E, 0x00000489, 0x0000000B, 0x0000000B,
|
||||
0x0000000B, 0x0000000B, 0x00000014, 0x0000000B, 0x0000000B, 0x0000000B,
|
||||
0x00040020, 0x00000706, 0x00000002, 0x00000489, 0x0004003B, 0x00000706,
|
||||
0x0000147D, 0x00000002, 0x0004002B, 0x0000000C, 0x00000A0B, 0x00000000,
|
||||
0x00040020, 0x00000288, 0x00000002, 0x0000000B, 0x00040020, 0x00000291,
|
||||
0x00000002, 0x00000014, 0x00040017, 0x00000011, 0x0000000B, 0x00000002,
|
||||
0x00040020, 0x00000292, 0x00000001, 0x00000014, 0x0004003B, 0x00000292,
|
||||
0x00000F48, 0x00000001, 0x0006002C, 0x00000014, 0x00000A2B, 0x00000A13,
|
||||
0x00000A0A, 0x00000A0A, 0x00040017, 0x0000000F, 0x00000009, 0x00000002,
|
||||
0x0003001D, 0x000007DC, 0x00000017, 0x0003001E, 0x000007B4, 0x000007DC,
|
||||
0x00040020, 0x00000A31, 0x00000002, 0x000007B4, 0x0004003B, 0x00000A31,
|
||||
0x0000140E, 0x00000002, 0x0003001D, 0x000007DD, 0x00000017, 0x0003001E,
|
||||
0x000007B5, 0x000007DD, 0x00040020, 0x00000A32, 0x00000002, 0x000007B5,
|
||||
0x0004003B, 0x00000A32, 0x0000107A, 0x00000002, 0x00040020, 0x00000294,
|
||||
0x00000002, 0x00000017, 0x0006002C, 0x00000014, 0x00000BC3, 0x00000A16,
|
||||
0x00000A6A, 0x00000A0D, 0x0004002B, 0x0000000B, 0x00000A25, 0x00000009,
|
||||
0x0007002C, 0x00000017, 0x000009CE, 0x000008A6, 0x000008A6, 0x000008A6,
|
||||
0x000008A6, 0x0007002C, 0x00000017, 0x0000013D, 0x00000A22, 0x00000A22,
|
||||
0x00000A22, 0x00000A22, 0x0007002C, 0x00000017, 0x0000072E, 0x000005FD,
|
||||
0x000005FD, 0x000005FD, 0x000005FD, 0x0007002C, 0x00000017, 0x000002ED,
|
||||
0x00000A3A, 0x00000A3A, 0x00000A3A, 0x00000A3A, 0x0007002C, 0x0000001A,
|
||||
0x00000302, 0x00000A3B, 0x00000A3B, 0x00000A3B, 0x00000A3B, 0x00050036,
|
||||
0x00000008, 0x0000161F, 0x00000000, 0x00000502, 0x000200F8, 0x00003B06,
|
||||
0x000300F7, 0x00004C7A, 0x00000000, 0x000300FB, 0x00000A0A, 0x00003B21,
|
||||
0x000200F8, 0x00003B21, 0x0004003D, 0x00000014, 0x0000312F, 0x00000F48,
|
||||
0x000500C4, 0x00000014, 0x000027F5, 0x0000312F, 0x00000A2B, 0x00050041,
|
||||
0x00000291, 0x0000625A, 0x0000147D, 0x00000A17, 0x0004003D, 0x00000014,
|
||||
0x000059B5, 0x0000625A, 0x0007004F, 0x00000011, 0x00004993, 0x000027F5,
|
||||
0x000027F5, 0x00000000, 0x00000001, 0x0007004F, 0x00000011, 0x000019E2,
|
||||
0x000059B5, 0x000059B5, 0x00000000, 0x00000001, 0x000500AE, 0x0000000F,
|
||||
0x00004288, 0x00004993, 0x000019E2, 0x0004009A, 0x00000009, 0x00006067,
|
||||
0x00004288, 0x000300F7, 0x0000188A, 0x00000002, 0x000400FA, 0x00006067,
|
||||
0x000055E8, 0x0000188A, 0x000200F8, 0x000055E8, 0x000200F9, 0x00004C7A,
|
||||
0x000200F8, 0x0000188A, 0x0004007C, 0x00000016, 0x00001A8B, 0x000027F5,
|
||||
0x00050041, 0x00000288, 0x00004968, 0x0000147D, 0x00000A1D, 0x0004003D,
|
||||
0x0000000B, 0x0000263C, 0x00004968, 0x00050051, 0x0000000B, 0x00004F98,
|
||||
0x000059B5, 0x00000001, 0x00050051, 0x0000000C, 0x00003964, 0x00001A8B,
|
||||
0x00000000, 0x00050084, 0x0000000C, 0x0000591A, 0x00003964, 0x00000A17,
|
||||
0x00050051, 0x0000000C, 0x000018DA, 0x00001A8B, 0x00000002, 0x0004007C,
|
||||
0x0000000C, 0x000038A9, 0x00004F98, 0x00050084, 0x0000000C, 0x00002C0F,
|
||||
0x000018DA, 0x000038A9, 0x00050051, 0x0000000C, 0x000044BE, 0x00001A8B,
|
||||
0x00000001, 0x00050080, 0x0000000C, 0x000056D4, 0x00002C0F, 0x000044BE,
|
||||
0x0004007C, 0x0000000C, 0x00005785, 0x0000263C, 0x00050084, 0x0000000C,
|
||||
0x00005FD7, 0x000056D4, 0x00005785, 0x00050080, 0x0000000C, 0x00001B95,
|
||||
0x0000591A, 0x00005FD7, 0x0004007C, 0x0000000B, 0x00004B46, 0x00001B95,
|
||||
0x00050041, 0x00000288, 0x00004C04, 0x0000147D, 0x00000A1A, 0x0004003D,
|
||||
0x0000000B, 0x0000595B, 0x00004C04, 0x00050080, 0x0000000B, 0x00002145,
|
||||
0x00004B46, 0x0000595B, 0x000500C2, 0x0000000B, 0x000054A6, 0x00002145,
|
||||
0x00000A16, 0x00050041, 0x00000288, 0x000051D6, 0x0000147D, 0x00000A0B,
|
||||
0x0004003D, 0x0000000B, 0x000053A3, 0x000051D6, 0x000500C7, 0x0000000B,
|
||||
0x000018ED, 0x000053A3, 0x00000A0D, 0x000500AB, 0x00000009, 0x000028E3,
|
||||
0x000018ED, 0x00000A0A, 0x000300F7, 0x00005AE2, 0x00000002, 0x000400FA,
|
||||
0x000028E3, 0x0000277C, 0x00002A0D, 0x000200F8, 0x0000277C, 0x000500C7,
|
||||
0x0000000B, 0x00005BD4, 0x000053A3, 0x00000A10, 0x000500AB, 0x00000009,
|
||||
0x00003FAC, 0x00005BD4, 0x00000A0A, 0x000300F7, 0x00001E0B, 0x00000002,
|
||||
0x000400FA, 0x00003FAC, 0x00002F61, 0x00006228, 0x000200F8, 0x00002F61,
|
||||
0x00050041, 0x00000288, 0x00004722, 0x0000147D, 0x00000A11, 0x0004003D,
|
||||
0x0000000B, 0x00003D0B, 0x00004722, 0x00050041, 0x00000288, 0x00005860,
|
||||
0x0000147D, 0x00000A14, 0x0004003D, 0x0000000B, 0x0000541F, 0x00005860,
|
||||
0x000500C3, 0x0000000C, 0x00003A4B, 0x000044BE, 0x00000A17, 0x000500C3,
|
||||
0x0000000C, 0x00004955, 0x000018DA, 0x00000A11, 0x000500C2, 0x0000000B,
|
||||
0x00004947, 0x0000541F, 0x00000A16, 0x0004007C, 0x0000000C, 0x000018AA,
|
||||
0x00004947, 0x00050084, 0x0000000C, 0x00005321, 0x00004955, 0x000018AA,
|
||||
0x00050080, 0x0000000C, 0x00003B27, 0x00003A4B, 0x00005321, 0x000500C2,
|
||||
0x0000000B, 0x00002348, 0x00003D0B, 0x00000A19, 0x0004007C, 0x0000000C,
|
||||
0x00003901, 0x00002348, 0x00050084, 0x0000000C, 0x000020F4, 0x00003B27,
|
||||
0x00003901, 0x000500C3, 0x0000000C, 0x000032BA, 0x00003964, 0x00000A1A,
|
||||
0x00050080, 0x0000000C, 0x00005FEE, 0x000032BA, 0x000020F4, 0x000500C4,
|
||||
0x0000000C, 0x0000225D, 0x00005FEE, 0x00000A22, 0x000500C7, 0x0000000C,
|
||||
0x00002CF6, 0x0000225D, 0x0000078B, 0x000500C4, 0x0000000C, 0x000049FA,
|
||||
0x00002CF6, 0x00000A0E, 0x000500C7, 0x0000000C, 0x00004D38, 0x00003964,
|
||||
0x00000A20, 0x000500C7, 0x0000000C, 0x00003138, 0x000044BE, 0x00000A1D,
|
||||
0x000500C4, 0x0000000C, 0x0000454D, 0x00003138, 0x00000A11, 0x00050080,
|
||||
0x0000000C, 0x0000434B, 0x00004D38, 0x0000454D, 0x000500C4, 0x0000000C,
|
||||
0x00001B88, 0x0000434B, 0x00000A22, 0x000500C3, 0x0000000C, 0x00005DE3,
|
||||
0x00001B88, 0x00000A1D, 0x000500C3, 0x0000000C, 0x00002215, 0x000044BE,
|
||||
0x00000A14, 0x00050080, 0x0000000C, 0x000035A3, 0x00002215, 0x00004955,
|
||||
0x000500C7, 0x0000000C, 0x00005A0C, 0x000035A3, 0x00000A0E, 0x000500C3,
|
||||
0x0000000C, 0x00004112, 0x00003964, 0x00000A14, 0x000500C4, 0x0000000C,
|
||||
0x0000496A, 0x00005A0C, 0x00000A0E, 0x00050080, 0x0000000C, 0x000034BD,
|
||||
0x00004112, 0x0000496A, 0x000500C7, 0x0000000C, 0x00004ADD, 0x000034BD,
|
||||
0x00000A14, 0x000500C4, 0x0000000C, 0x0000544A, 0x00004ADD, 0x00000A0E,
|
||||
0x00050080, 0x0000000C, 0x00003C4B, 0x00005A0C, 0x0000544A, 0x000500C7,
|
||||
0x0000000C, 0x0000335E, 0x00005DE3, 0x000009DB, 0x00050080, 0x0000000C,
|
||||
0x00004F70, 0x000049FA, 0x0000335E, 0x000500C4, 0x0000000C, 0x00005B31,
|
||||
0x00004F70, 0x00000A0E, 0x000500C7, 0x0000000C, 0x00005AEA, 0x00005DE3,
|
||||
0x00000A39, 0x00050080, 0x0000000C, 0x0000285C, 0x00005B31, 0x00005AEA,
|
||||
0x000500C7, 0x0000000C, 0x000047B4, 0x000018DA, 0x00000A14, 0x000500C4,
|
||||
0x0000000C, 0x0000544B, 0x000047B4, 0x00000A22, 0x00050080, 0x0000000C,
|
||||
0x00004157, 0x0000285C, 0x0000544B, 0x000500C7, 0x0000000C, 0x00004ADE,
|
||||
0x000044BE, 0x00000A0E, 0x000500C4, 0x0000000C, 0x0000544C, 0x00004ADE,
|
||||
0x00000A17, 0x00050080, 0x0000000C, 0x00004158, 0x00004157, 0x0000544C,
|
||||
0x000500C7, 0x0000000C, 0x00004FD6, 0x00003C4B, 0x00000A0E, 0x000500C4,
|
||||
0x0000000C, 0x00002703, 0x00004FD6, 0x00000A14, 0x000500C3, 0x0000000C,
|
||||
0x00003332, 0x00004158, 0x00000A1D, 0x000500C7, 0x0000000C, 0x000036D6,
|
||||
0x00003332, 0x00000A20, 0x00050080, 0x0000000C, 0x00003412, 0x00002703,
|
||||
0x000036D6, 0x000500C4, 0x0000000C, 0x00005B32, 0x00003412, 0x00000A14,
|
||||
0x000500C7, 0x0000000C, 0x00005AB1, 0x00003C4B, 0x00000A05, 0x00050080,
|
||||
0x0000000C, 0x00002A9C, 0x00005B32, 0x00005AB1, 0x000500C4, 0x0000000C,
|
||||
0x00005B33, 0x00002A9C, 0x00000A11, 0x000500C7, 0x0000000C, 0x00005AB2,
|
||||
0x00004158, 0x0000040B, 0x00050080, 0x0000000C, 0x00002A9D, 0x00005B33,
|
||||
0x00005AB2, 0x000500C4, 0x0000000C, 0x00005B34, 0x00002A9D, 0x00000A14,
|
||||
0x000500C7, 0x0000000C, 0x00005EA0, 0x00004158, 0x00000AC8, 0x00050080,
|
||||
0x0000000C, 0x000054ED, 0x00005B34, 0x00005EA0, 0x000200F9, 0x00001E0B,
|
||||
0x000200F8, 0x00006228, 0x0004007C, 0x00000012, 0x00001A8C, 0x00004993,
|
||||
0x00050041, 0x00000288, 0x00004969, 0x0000147D, 0x00000A11, 0x0004003D,
|
||||
0x0000000B, 0x00002EB2, 0x00004969, 0x00050051, 0x0000000C, 0x00004944,
|
||||
0x00001A8C, 0x00000000, 0x000500C3, 0x0000000C, 0x00004CF5, 0x00004944,
|
||||
0x00000A1A, 0x00050051, 0x0000000C, 0x00002747, 0x00001A8C, 0x00000001,
|
||||
0x000500C3, 0x0000000C, 0x0000405C, 0x00002747, 0x00000A1A, 0x000500C2,
|
||||
0x0000000B, 0x00005B4D, 0x00002EB2, 0x00000A19, 0x0004007C, 0x0000000C,
|
||||
0x000018AB, 0x00005B4D, 0x00050084, 0x0000000C, 0x00005347, 0x0000405C,
|
||||
0x000018AB, 0x00050080, 0x0000000C, 0x00003F5E, 0x00004CF5, 0x00005347,
|
||||
0x000500C4, 0x0000000C, 0x00004A8E, 0x00003F5E, 0x00000A25, 0x000500C7,
|
||||
0x0000000C, 0x00002AB6, 0x00004944, 0x00000A20, 0x000500C7, 0x0000000C,
|
||||
0x00003139, 0x00002747, 0x00000A35, 0x000500C4, 0x0000000C, 0x0000454E,
|
||||
0x00003139, 0x00000A11, 0x00050080, 0x0000000C, 0x00004397, 0x00002AB6,
|
||||
0x0000454E, 0x000500C4, 0x0000000C, 0x000018E7, 0x00004397, 0x00000A10,
|
||||
0x000500C7, 0x0000000C, 0x000027B1, 0x000018E7, 0x000009DB, 0x000500C4,
|
||||
0x0000000C, 0x00002F76, 0x000027B1, 0x00000A0E, 0x00050080, 0x0000000C,
|
||||
0x00003C4C, 0x00004A8E, 0x00002F76, 0x000500C7, 0x0000000C, 0x00003397,
|
||||
0x000018E7, 0x00000A39, 0x00050080, 0x0000000C, 0x00004D30, 0x00003C4C,
|
||||
0x00003397, 0x000500C7, 0x0000000C, 0x000047B5, 0x00002747, 0x00000A0E,
|
||||
0x000500C4, 0x0000000C, 0x0000544D, 0x000047B5, 0x00000A17, 0x00050080,
|
||||
0x0000000C, 0x00004159, 0x00004D30, 0x0000544D, 0x000500C7, 0x0000000C,
|
||||
0x00005022, 0x00004159, 0x0000040B, 0x000500C4, 0x0000000C, 0x00002416,
|
||||
0x00005022, 0x00000A14, 0x000500C7, 0x0000000C, 0x00004A33, 0x00002747,
|
||||
0x00000A3B, 0x000500C4, 0x0000000C, 0x00002F77, 0x00004A33, 0x00000A20,
|
||||
0x00050080, 0x0000000C, 0x0000415A, 0x00002416, 0x00002F77, 0x000500C7,
|
||||
0x0000000C, 0x00004ADF, 0x00004159, 0x00000388, 0x000500C4, 0x0000000C,
|
||||
0x0000544E, 0x00004ADF, 0x00000A11, 0x00050080, 0x0000000C, 0x00004144,
|
||||
0x0000415A, 0x0000544E, 0x000500C7, 0x0000000C, 0x00005083, 0x00002747,
|
||||
0x00000A23, 0x000500C3, 0x0000000C, 0x000041BF, 0x00005083, 0x00000A11,
|
||||
0x000500C3, 0x0000000C, 0x00001EEC, 0x00004944, 0x00000A14, 0x00050080,
|
||||
0x0000000C, 0x000035B6, 0x000041BF, 0x00001EEC, 0x000500C7, 0x0000000C,
|
||||
0x00005453, 0x000035B6, 0x00000A14, 0x000500C4, 0x0000000C, 0x0000544F,
|
||||
0x00005453, 0x00000A1D, 0x00050080, 0x0000000C, 0x00003C4D, 0x00004144,
|
||||
0x0000544F, 0x000500C7, 0x0000000C, 0x0000374D, 0x00004159, 0x00000AC8,
|
||||
0x00050080, 0x0000000C, 0x00002F42, 0x00003C4D, 0x0000374D, 0x000200F9,
|
||||
0x00001E0B, 0x000200F8, 0x00001E0B, 0x000700F5, 0x0000000C, 0x0000292C,
|
||||
0x000054ED, 0x00002F61, 0x00002F42, 0x00006228, 0x000200F9, 0x00005AE2,
|
||||
0x000200F8, 0x00002A0D, 0x00050041, 0x00000288, 0x00005098, 0x0000147D,
|
||||
0x00000A11, 0x0004003D, 0x0000000B, 0x00003D0C, 0x00005098, 0x00050041,
|
||||
0x00000288, 0x0000531B, 0x0000147D, 0x00000A14, 0x0004003D, 0x0000000B,
|
||||
0x000034EE, 0x0000531B, 0x0004007C, 0x0000000C, 0x00003ADE, 0x000034EE,
|
||||
0x00050084, 0x0000000C, 0x000049EF, 0x000018DA, 0x00003ADE, 0x00050080,
|
||||
0x0000000C, 0x0000208E, 0x000049EF, 0x000044BE, 0x0004007C, 0x0000000C,
|
||||
0x000022F8, 0x00003D0C, 0x00050084, 0x0000000C, 0x00001E9F, 0x0000208E,
|
||||
0x000022F8, 0x00050080, 0x0000000C, 0x00001F30, 0x0000591A, 0x00001E9F,
|
||||
0x000200F9, 0x00005AE2, 0x000200F8, 0x00005AE2, 0x000700F5, 0x0000000C,
|
||||
0x00004D24, 0x0000292C, 0x00001E0B, 0x00001F30, 0x00002A0D, 0x00050041,
|
||||
0x00000288, 0x0000615A, 0x0000147D, 0x00000A0E, 0x0004003D, 0x0000000B,
|
||||
0x00001D4E, 0x0000615A, 0x0004007C, 0x0000000C, 0x00003D46, 0x00001D4E,
|
||||
0x00050080, 0x0000000C, 0x00003CDB, 0x00003D46, 0x00004D24, 0x0004007C,
|
||||
0x0000000B, 0x0000487C, 0x00003CDB, 0x000500C2, 0x0000000B, 0x000053F5,
|
||||
0x0000487C, 0x00000A16, 0x000500C2, 0x0000000B, 0x00003A95, 0x000053A3,
|
||||
0x00000A10, 0x000500C7, 0x0000000B, 0x000020CA, 0x00003A95, 0x00000A13,
|
||||
0x00060041, 0x00000294, 0x000050F7, 0x0000107A, 0x00000A0B, 0x000053F5,
|
||||
0x0004003D, 0x00000017, 0x00001FCE, 0x000050F7, 0x000500AA, 0x00000009,
|
||||
0x000035C0, 0x000020CA, 0x00000A0D, 0x000500AA, 0x00000009, 0x00005376,
|
||||
0x000020CA, 0x00000A10, 0x000500A6, 0x00000009, 0x00005686, 0x000035C0,
|
||||
0x00005376, 0x000300F7, 0x00003463, 0x00000000, 0x000400FA, 0x00005686,
|
||||
0x00002957, 0x00003463, 0x000200F8, 0x00002957, 0x000500C7, 0x00000017,
|
||||
0x0000475F, 0x00001FCE, 0x000009CE, 0x000500C4, 0x00000017, 0x000024D1,
|
||||
0x0000475F, 0x0000013D, 0x000500C7, 0x00000017, 0x000050AC, 0x00001FCE,
|
||||
0x0000072E, 0x000500C2, 0x00000017, 0x0000448D, 0x000050AC, 0x0000013D,
|
||||
0x000500C5, 0x00000017, 0x00003FF8, 0x000024D1, 0x0000448D, 0x000200F9,
|
||||
0x00003463, 0x000200F8, 0x00003463, 0x000700F5, 0x00000017, 0x00005879,
|
||||
0x00001FCE, 0x00005AE2, 0x00003FF8, 0x00002957, 0x000500AA, 0x00000009,
|
||||
0x00004CB6, 0x000020CA, 0x00000A13, 0x000500A6, 0x00000009, 0x00003B23,
|
||||
0x00005376, 0x00004CB6, 0x000300F7, 0x000030F9, 0x00000000, 0x000400FA,
|
||||
0x00003B23, 0x00002B38, 0x000030F9, 0x000200F8, 0x00002B38, 0x000500C4,
|
||||
0x00000017, 0x00005E17, 0x00005879, 0x000002ED, 0x000500C2, 0x00000017,
|
||||
0x00003BE7, 0x00005879, 0x000002ED, 0x000500C5, 0x00000017, 0x000029E8,
|
||||
0x00005E17, 0x00003BE7, 0x000200F9, 0x000030F9, 0x000200F8, 0x000030F9,
|
||||
0x000700F5, 0x00000017, 0x00002F4A, 0x00005879, 0x00003463, 0x000029E8,
|
||||
0x00002B38, 0x0004007C, 0x0000001A, 0x00003C0F, 0x00002F4A, 0x000500C4,
|
||||
0x0000001A, 0x0000420E, 0x00003C0F, 0x00000302, 0x000500C3, 0x0000001A,
|
||||
0x00004098, 0x0000420E, 0x00000302, 0x0004006F, 0x0000001D, 0x00002A97,
|
||||
0x00004098, 0x0005008E, 0x0000001D, 0x00004FBD, 0x00002A97, 0x00000A38,
|
||||
0x0007000C, 0x0000001D, 0x00005DB5, 0x00000001, 0x00000028, 0x00000504,
|
||||
0x00004FBD, 0x000500C3, 0x0000001A, 0x00003802, 0x00003C0F, 0x00000302,
|
||||
0x0004006F, 0x0000001D, 0x000019CF, 0x00003802, 0x0005008E, 0x0000001D,
|
||||
0x00004747, 0x000019CF, 0x00000A38, 0x0007000C, 0x0000001D, 0x00005E06,
|
||||
0x00000001, 0x00000028, 0x00000504, 0x00004747, 0x00050051, 0x0000000D,
|
||||
0x00005F0A, 0x00005DB5, 0x00000000, 0x00050051, 0x0000000D, 0x000037EF,
|
||||
0x00005E06, 0x00000000, 0x00050050, 0x00000013, 0x00004B20, 0x00005F0A,
|
||||
0x000037EF, 0x0006000C, 0x0000000B, 0x00002171, 0x00000001, 0x0000003A,
|
||||
0x00004B20, 0x00050051, 0x0000000D, 0x00005BBF, 0x00005DB5, 0x00000001,
|
||||
0x00050051, 0x0000000D, 0x000039A7, 0x00005E06, 0x00000001, 0x00050050,
|
||||
0x00000013, 0x00004B21, 0x00005BBF, 0x000039A7, 0x0006000C, 0x0000000B,
|
||||
0x00002172, 0x00000001, 0x0000003A, 0x00004B21, 0x00050051, 0x0000000D,
|
||||
0x00005BC0, 0x00005DB5, 0x00000002, 0x00050051, 0x0000000D, 0x000039A8,
|
||||
0x00005E06, 0x00000002, 0x00050050, 0x00000013, 0x00004B22, 0x00005BC0,
|
||||
0x000039A8, 0x0006000C, 0x0000000B, 0x00002173, 0x00000001, 0x0000003A,
|
||||
0x00004B22, 0x00050051, 0x0000000D, 0x00005BC1, 0x00005DB5, 0x00000003,
|
||||
0x00050051, 0x0000000D, 0x000039A9, 0x00005E06, 0x00000003, 0x00050050,
|
||||
0x00000013, 0x00004B0D, 0x00005BC1, 0x000039A9, 0x0006000C, 0x0000000B,
|
||||
0x000020EE, 0x00000001, 0x0000003A, 0x00004B0D, 0x00070050, 0x00000017,
|
||||
0x00003ABB, 0x00002171, 0x00002172, 0x00002173, 0x000020EE, 0x00060041,
|
||||
0x00000294, 0x000045C3, 0x0000140E, 0x00000A0B, 0x000054A6, 0x0003003E,
|
||||
0x000045C3, 0x00003ABB, 0x00050080, 0x0000000B, 0x00003AC4, 0x000054A6,
|
||||
0x00000A0E, 0x000600A9, 0x0000000B, 0x00004958, 0x000028E3, 0x00000A6A,
|
||||
0x00000A3A, 0x000500C2, 0x0000000B, 0x00002E1B, 0x00004958, 0x00000A16,
|
||||
0x00050080, 0x0000000B, 0x0000367B, 0x000053F5, 0x00002E1B, 0x00060041,
|
||||
0x00000294, 0x0000571A, 0x0000107A, 0x00000A0B, 0x0000367B, 0x0004003D,
|
||||
0x00000017, 0x000019B2, 0x0000571A, 0x000300F7, 0x00003A1A, 0x00000000,
|
||||
0x000400FA, 0x00005686, 0x00002958, 0x00003A1A, 0x000200F8, 0x00002958,
|
||||
0x000500C7, 0x00000017, 0x00004760, 0x000019B2, 0x000009CE, 0x000500C4,
|
||||
0x00000017, 0x000024D2, 0x00004760, 0x0000013D, 0x000500C7, 0x00000017,
|
||||
0x000050AD, 0x000019B2, 0x0000072E, 0x000500C2, 0x00000017, 0x0000448E,
|
||||
0x000050AD, 0x0000013D, 0x000500C5, 0x00000017, 0x00003FF9, 0x000024D2,
|
||||
0x0000448E, 0x000200F9, 0x00003A1A, 0x000200F8, 0x00003A1A, 0x000700F5,
|
||||
0x00000017, 0x00002AAC, 0x000019B2, 0x000030F9, 0x00003FF9, 0x00002958,
|
||||
0x000300F7, 0x000030FA, 0x00000000, 0x000400FA, 0x00003B23, 0x00002B39,
|
||||
0x000030FA, 0x000200F8, 0x00002B39, 0x000500C4, 0x00000017, 0x00005E18,
|
||||
0x00002AAC, 0x000002ED, 0x000500C2, 0x00000017, 0x00003BE8, 0x00002AAC,
|
||||
0x000002ED, 0x000500C5, 0x00000017, 0x000029E9, 0x00005E18, 0x00003BE8,
|
||||
0x000200F9, 0x000030FA, 0x000200F8, 0x000030FA, 0x000700F5, 0x00000017,
|
||||
0x00002F4B, 0x00002AAC, 0x00003A1A, 0x000029E9, 0x00002B39, 0x0004007C,
|
||||
0x0000001A, 0x00003C10, 0x00002F4B, 0x000500C4, 0x0000001A, 0x0000420F,
|
||||
0x00003C10, 0x00000302, 0x000500C3, 0x0000001A, 0x00004099, 0x0000420F,
|
||||
0x00000302, 0x0004006F, 0x0000001D, 0x00002A98, 0x00004099, 0x0005008E,
|
||||
0x0000001D, 0x00004FBE, 0x00002A98, 0x00000A38, 0x0007000C, 0x0000001D,
|
||||
0x00005DB6, 0x00000001, 0x00000028, 0x00000504, 0x00004FBE, 0x000500C3,
|
||||
0x0000001A, 0x00003803, 0x00003C10, 0x00000302, 0x0004006F, 0x0000001D,
|
||||
0x000019D0, 0x00003803, 0x0005008E, 0x0000001D, 0x00004748, 0x000019D0,
|
||||
0x00000A38, 0x0007000C, 0x0000001D, 0x00005E07, 0x00000001, 0x00000028,
|
||||
0x00000504, 0x00004748, 0x00050051, 0x0000000D, 0x00005F0B, 0x00005DB6,
|
||||
0x00000000, 0x00050051, 0x0000000D, 0x000037F0, 0x00005E07, 0x00000000,
|
||||
0x00050050, 0x00000013, 0x00004B23, 0x00005F0B, 0x000037F0, 0x0006000C,
|
||||
0x0000000B, 0x00002174, 0x00000001, 0x0000003A, 0x00004B23, 0x00050051,
|
||||
0x0000000D, 0x00005BC2, 0x00005DB6, 0x00000001, 0x00050051, 0x0000000D,
|
||||
0x000039AA, 0x00005E07, 0x00000001, 0x00050050, 0x00000013, 0x00004B24,
|
||||
0x00005BC2, 0x000039AA, 0x0006000C, 0x0000000B, 0x00002175, 0x00000001,
|
||||
0x0000003A, 0x00004B24, 0x00050051, 0x0000000D, 0x00005BC3, 0x00005DB6,
|
||||
0x00000002, 0x00050051, 0x0000000D, 0x000039AB, 0x00005E07, 0x00000002,
|
||||
0x00050050, 0x00000013, 0x00004B25, 0x00005BC3, 0x000039AB, 0x0006000C,
|
||||
0x0000000B, 0x00002176, 0x00000001, 0x0000003A, 0x00004B25, 0x00050051,
|
||||
0x0000000D, 0x00005BC4, 0x00005DB6, 0x00000003, 0x00050051, 0x0000000D,
|
||||
0x000039AC, 0x00005E07, 0x00000003, 0x00050050, 0x00000013, 0x00004B0E,
|
||||
0x00005BC4, 0x000039AC, 0x0006000C, 0x0000000B, 0x000020EF, 0x00000001,
|
||||
0x0000003A, 0x00004B0E, 0x00070050, 0x00000017, 0x00003ABC, 0x00002174,
|
||||
0x00002175, 0x00002176, 0x000020EF, 0x00060041, 0x00000294, 0x00004EBE,
|
||||
0x0000140E, 0x00000A0B, 0x00003AC4, 0x0003003E, 0x00004EBE, 0x00003ABC,
|
||||
0x000200F9, 0x00004C7A, 0x000200F8, 0x00004C7A, 0x000100FD, 0x00010038,
|
||||
};
|
771
src/xenia/gpu/shaders/bytecode/vulkan_spirv/texture_load_rg16_snorm_float_scaled_cs.h
generated
Normal file
771
src/xenia/gpu/shaders/bytecode/vulkan_spirv/texture_load_rg16_snorm_float_scaled_cs.h
generated
Normal file
|
@ -0,0 +1,771 @@
|
|||
// Generated with `xb buildshaders`.
|
||||
#if 0
|
||||
; SPIR-V
|
||||
; Version: 1.0
|
||||
; Generator: Khronos Glslang Reference Front End; 10
|
||||
; Bound: 25179
|
||||
; Schema: 0
|
||||
OpCapability Shader
|
||||
%1 = OpExtInstImport "GLSL.std.450"
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %5663 "main" %gl_GlobalInvocationID
|
||||
OpExecutionMode %5663 LocalSize 4 32 1
|
||||
OpMemberDecorate %_struct_1161 0 Offset 0
|
||||
OpMemberDecorate %_struct_1161 1 Offset 4
|
||||
OpMemberDecorate %_struct_1161 2 Offset 8
|
||||
OpMemberDecorate %_struct_1161 3 Offset 12
|
||||
OpMemberDecorate %_struct_1161 4 Offset 16
|
||||
OpMemberDecorate %_struct_1161 5 Offset 28
|
||||
OpMemberDecorate %_struct_1161 6 Offset 32
|
||||
OpMemberDecorate %_struct_1161 7 Offset 36
|
||||
OpDecorate %_struct_1161 Block
|
||||
OpDecorate %5245 DescriptorSet 2
|
||||
OpDecorate %5245 Binding 0
|
||||
OpDecorate %gl_GlobalInvocationID BuiltIn GlobalInvocationId
|
||||
OpDecorate %_runtimearr_v4uint ArrayStride 16
|
||||
OpMemberDecorate %_struct_1972 0 NonReadable
|
||||
OpMemberDecorate %_struct_1972 0 Offset 0
|
||||
OpDecorate %_struct_1972 BufferBlock
|
||||
OpDecorate %5134 DescriptorSet 0
|
||||
OpDecorate %5134 Binding 0
|
||||
OpDecorate %_runtimearr_v4uint_0 ArrayStride 16
|
||||
OpMemberDecorate %_struct_1973 0 NonWritable
|
||||
OpMemberDecorate %_struct_1973 0 Offset 0
|
||||
OpDecorate %_struct_1973 BufferBlock
|
||||
OpDecorate %4218 DescriptorSet 1
|
||||
OpDecorate %4218 Binding 0
|
||||
OpDecorate %gl_WorkGroupSize BuiltIn WorkgroupSize
|
||||
%void = OpTypeVoid
|
||||
%1282 = OpTypeFunction %void
|
||||
%uint = OpTypeInt 32 0
|
||||
%v4uint = OpTypeVector %uint 4
|
||||
%int = OpTypeInt 32 1
|
||||
%v2int = OpTypeVector %int 2
|
||||
%v3int = OpTypeVector %int 3
|
||||
%bool = OpTypeBool
|
||||
%v3uint = OpTypeVector %uint 3
|
||||
%v2uint = OpTypeVector %uint 2
|
||||
%float = OpTypeFloat 32
|
||||
%v4float = OpTypeVector %float 4
|
||||
%float_n1 = OpConstant %float -1
|
||||
%1284 = OpConstantComposite %v4float %float_n1 %float_n1 %float_n1 %float_n1
|
||||
%v4int = OpTypeVector %int 4
|
||||
%int_16 = OpConstant %int 16
|
||||
%float_3_05185094en05 = OpConstant %float 3.05185094e-05
|
||||
%uint_0 = OpConstant %uint 0
|
||||
%v2float = OpTypeVector %float 2
|
||||
%uint_1 = OpConstant %uint 1
|
||||
%uint_2 = OpConstant %uint 2
|
||||
%uint_3 = OpConstant %uint 3
|
||||
%uint_16711935 = OpConstant %uint 16711935
|
||||
%uint_8 = OpConstant %uint 8
|
||||
%uint_4278255360 = OpConstant %uint 4278255360
|
||||
%uint_16 = OpConstant %uint 16
|
||||
%int_5 = OpConstant %int 5
|
||||
%uint_5 = OpConstant %uint 5
|
||||
%int_7 = OpConstant %int 7
|
||||
%int_14 = OpConstant %int 14
|
||||
%int_2 = OpConstant %int 2
|
||||
%int_n16 = OpConstant %int -16
|
||||
%int_1 = OpConstant %int 1
|
||||
%int_15 = OpConstant %int 15
|
||||
%int_4 = OpConstant %int 4
|
||||
%int_n512 = OpConstant %int -512
|
||||
%int_3 = OpConstant %int 3
|
||||
%int_448 = OpConstant %int 448
|
||||
%int_8 = OpConstant %int 8
|
||||
%int_6 = OpConstant %int 6
|
||||
%int_63 = OpConstant %int 63
|
||||
%uint_4 = OpConstant %uint 4
|
||||
%uint_6 = OpConstant %uint 6
|
||||
%int_268435455 = OpConstant %int 268435455
|
||||
%int_n2 = OpConstant %int -2
|
||||
%uint_32 = OpConstant %uint 32
|
||||
%_struct_1161 = OpTypeStruct %uint %uint %uint %uint %v3uint %uint %uint %uint
|
||||
%_ptr_Uniform__struct_1161 = OpTypePointer Uniform %_struct_1161
|
||||
%5245 = OpVariable %_ptr_Uniform__struct_1161 Uniform
|
||||
%int_0 = OpConstant %int 0
|
||||
%_ptr_Uniform_uint = OpTypePointer Uniform %uint
|
||||
%1915 = OpConstantComposite %v2uint %uint_4 %uint_6
|
||||
%_ptr_Uniform_v3uint = OpTypePointer Uniform %v3uint
|
||||
%_ptr_Input_v3uint = OpTypePointer Input %v3uint
|
||||
%gl_GlobalInvocationID = OpVariable %_ptr_Input_v3uint Input
|
||||
%2603 = OpConstantComposite %v3uint %uint_3 %uint_0 %uint_0
|
||||
%v2bool = OpTypeVector %bool 2
|
||||
%_runtimearr_v4uint = OpTypeRuntimeArray %v4uint
|
||||
%_struct_1972 = OpTypeStruct %_runtimearr_v4uint
|
||||
%_ptr_Uniform__struct_1972 = OpTypePointer Uniform %_struct_1972
|
||||
%5134 = OpVariable %_ptr_Uniform__struct_1972 Uniform
|
||||
%_runtimearr_v4uint_0 = OpTypeRuntimeArray %v4uint
|
||||
%_struct_1973 = OpTypeStruct %_runtimearr_v4uint_0
|
||||
%_ptr_Uniform__struct_1973 = OpTypePointer Uniform %_struct_1973
|
||||
%4218 = OpVariable %_ptr_Uniform__struct_1973 Uniform
|
||||
%_ptr_Uniform_v4uint = OpTypePointer Uniform %v4uint
|
||||
%gl_WorkGroupSize = OpConstantComposite %v3uint %uint_4 %uint_32 %uint_1
|
||||
%1870 = OpConstantComposite %v2uint %uint_3 %uint_3
|
||||
%uint_9 = OpConstant %uint 9
|
||||
%2510 = OpConstantComposite %v4uint %uint_16711935 %uint_16711935 %uint_16711935 %uint_16711935
|
||||
%317 = OpConstantComposite %v4uint %uint_8 %uint_8 %uint_8 %uint_8
|
||||
%1838 = OpConstantComposite %v4uint %uint_4278255360 %uint_4278255360 %uint_4278255360 %uint_4278255360
|
||||
%749 = OpConstantComposite %v4uint %uint_16 %uint_16 %uint_16 %uint_16
|
||||
%770 = OpConstantComposite %v4int %int_16 %int_16 %int_16 %int_16
|
||||
%5663 = OpFunction %void None %1282
|
||||
%15110 = OpLabel
|
||||
OpSelectionMerge %19578 None
|
||||
OpSwitch %uint_0 %15137
|
||||
%15137 = OpLabel
|
||||
%12591 = OpLoad %v3uint %gl_GlobalInvocationID
|
||||
%10229 = OpShiftLeftLogical %v3uint %12591 %2603
|
||||
%25178 = OpAccessChain %_ptr_Uniform_v3uint %5245 %int_4
|
||||
%22965 = OpLoad %v3uint %25178
|
||||
%18835 = OpVectorShuffle %v2uint %10229 %10229 0 1
|
||||
%6626 = OpVectorShuffle %v2uint %22965 %22965 0 1
|
||||
%17032 = OpUGreaterThanEqual %v2bool %18835 %6626
|
||||
%24679 = OpAny %bool %17032
|
||||
OpSelectionMerge %6282 DontFlatten
|
||||
OpBranchConditional %24679 %21992 %6282
|
||||
%21992 = OpLabel
|
||||
OpBranch %19578
|
||||
%6282 = OpLabel
|
||||
%6795 = OpBitcast %v3int %10229
|
||||
%18792 = OpAccessChain %_ptr_Uniform_uint %5245 %int_6
|
||||
%9788 = OpLoad %uint %18792
|
||||
%20376 = OpCompositeExtract %uint %22965 1
|
||||
%14692 = OpCompositeExtract %int %6795 0
|
||||
%22810 = OpIMul %int %14692 %int_4
|
||||
%6362 = OpCompositeExtract %int %6795 2
|
||||
%14505 = OpBitcast %int %20376
|
||||
%11279 = OpIMul %int %6362 %14505
|
||||
%17598 = OpCompositeExtract %int %6795 1
|
||||
%22228 = OpIAdd %int %11279 %17598
|
||||
%22405 = OpBitcast %int %9788
|
||||
%24535 = OpIMul %int %22228 %22405
|
||||
%7061 = OpIAdd %int %22810 %24535
|
||||
%19270 = OpBitcast %uint %7061
|
||||
%19460 = OpAccessChain %_ptr_Uniform_uint %5245 %int_5
|
||||
%22875 = OpLoad %uint %19460
|
||||
%8517 = OpIAdd %uint %19270 %22875
|
||||
%21670 = OpShiftRightLogical %uint %8517 %uint_4
|
||||
%18404 = OpAccessChain %_ptr_Uniform_uint %5245 %int_1
|
||||
%23432 = OpLoad %uint %18404
|
||||
%22700 = OpAccessChain %_ptr_Uniform_uint %5245 %int_0
|
||||
%20387 = OpLoad %uint %22700
|
||||
%22279 = OpBitwiseAnd %uint %20387 %uint_2
|
||||
%19223 = OpINotEqual %bool %22279 %uint_0
|
||||
%17247 = OpCompositeConstruct %v2uint %20387 %20387
|
||||
%22947 = OpShiftRightLogical %v2uint %17247 %1915
|
||||
%6551 = OpBitwiseAnd %v2uint %22947 %1870
|
||||
%18732 = OpAccessChain %_ptr_Uniform_uint %5245 %int_2
|
||||
%24236 = OpLoad %uint %18732
|
||||
%20458 = OpAccessChain %_ptr_Uniform_uint %5245 %int_3
|
||||
%22167 = OpLoad %uint %20458
|
||||
%18929 = OpCompositeExtract %uint %10229 0
|
||||
%6638 = OpShiftRightLogical %uint %18929 %uint_2
|
||||
%9988 = OpCompositeExtract %uint %10229 1
|
||||
%23563 = OpCompositeConstruct %v2uint %6638 %9988
|
||||
%8041 = OpUDiv %v2uint %23563 %6551
|
||||
%13932 = OpCompositeExtract %uint %8041 0
|
||||
%19789 = OpShiftLeftLogical %uint %13932 %uint_2
|
||||
%20905 = OpCompositeExtract %uint %8041 1
|
||||
%23022 = OpCompositeExtract %uint %10229 2
|
||||
%9417 = OpCompositeConstruct %v3uint %19789 %20905 %23022
|
||||
OpSelectionMerge %21313 DontFlatten
|
||||
OpBranchConditional %19223 %21373 %11737
|
||||
%21373 = OpLabel
|
||||
%10608 = OpBitcast %v3int %9417
|
||||
%17090 = OpCompositeExtract %int %10608 1
|
||||
%9469 = OpShiftRightArithmetic %int %17090 %int_4
|
||||
%10055 = OpCompositeExtract %int %10608 2
|
||||
%16476 = OpShiftRightArithmetic %int %10055 %int_2
|
||||
%23373 = OpShiftRightLogical %uint %22167 %uint_4
|
||||
%6314 = OpBitcast %int %23373
|
||||
%21281 = OpIMul %int %16476 %6314
|
||||
%15143 = OpIAdd %int %9469 %21281
|
||||
%9032 = OpShiftRightLogical %uint %24236 %uint_5
|
||||
%12427 = OpBitcast %int %9032
|
||||
%10360 = OpIMul %int %15143 %12427
|
||||
%25154 = OpCompositeExtract %int %10608 0
|
||||
%20423 = OpShiftRightArithmetic %int %25154 %int_5
|
||||
%18940 = OpIAdd %int %20423 %10360
|
||||
%8797 = OpShiftLeftLogical %int %18940 %uint_8
|
||||
%11510 = OpBitwiseAnd %int %8797 %int_268435455
|
||||
%18938 = OpShiftLeftLogical %int %11510 %int_1
|
||||
%19768 = OpBitwiseAnd %int %25154 %int_7
|
||||
%12600 = OpBitwiseAnd %int %17090 %int_6
|
||||
%17741 = OpShiftLeftLogical %int %12600 %int_2
|
||||
%17227 = OpIAdd %int %19768 %17741
|
||||
%7048 = OpShiftLeftLogical %int %17227 %uint_8
|
||||
%24035 = OpShiftRightArithmetic %int %7048 %int_6
|
||||
%8725 = OpShiftRightArithmetic %int %17090 %int_3
|
||||
%13731 = OpIAdd %int %8725 %16476
|
||||
%23052 = OpBitwiseAnd %int %13731 %int_1
|
||||
%16658 = OpShiftRightArithmetic %int %25154 %int_3
|
||||
%18794 = OpShiftLeftLogical %int %23052 %int_1
|
||||
%13501 = OpIAdd %int %16658 %18794
|
||||
%19165 = OpBitwiseAnd %int %13501 %int_3
|
||||
%21578 = OpShiftLeftLogical %int %19165 %int_1
|
||||
%15435 = OpIAdd %int %23052 %21578
|
||||
%13150 = OpBitwiseAnd %int %24035 %int_n16
|
||||
%20336 = OpIAdd %int %18938 %13150
|
||||
%23345 = OpShiftLeftLogical %int %20336 %int_1
|
||||
%23274 = OpBitwiseAnd %int %24035 %int_15
|
||||
%10332 = OpIAdd %int %23345 %23274
|
||||
%18356 = OpBitwiseAnd %int %10055 %int_3
|
||||
%21579 = OpShiftLeftLogical %int %18356 %uint_8
|
||||
%16727 = OpIAdd %int %10332 %21579
|
||||
%19166 = OpBitwiseAnd %int %17090 %int_1
|
||||
%21580 = OpShiftLeftLogical %int %19166 %int_4
|
||||
%16728 = OpIAdd %int %16727 %21580
|
||||
%20438 = OpBitwiseAnd %int %15435 %int_1
|
||||
%9987 = OpShiftLeftLogical %int %20438 %int_3
|
||||
%13106 = OpShiftRightArithmetic %int %16728 %int_6
|
||||
%14038 = OpBitwiseAnd %int %13106 %int_7
|
||||
%13330 = OpIAdd %int %9987 %14038
|
||||
%23346 = OpShiftLeftLogical %int %13330 %int_3
|
||||
%23217 = OpBitwiseAnd %int %15435 %int_n2
|
||||
%10908 = OpIAdd %int %23346 %23217
|
||||
%23347 = OpShiftLeftLogical %int %10908 %int_2
|
||||
%23218 = OpBitwiseAnd %int %16728 %int_n512
|
||||
%10909 = OpIAdd %int %23347 %23218
|
||||
%23348 = OpShiftLeftLogical %int %10909 %int_3
|
||||
%21849 = OpBitwiseAnd %int %16728 %int_63
|
||||
%24314 = OpIAdd %int %23348 %21849
|
||||
%22127 = OpBitcast %uint %24314
|
||||
OpBranch %21313
|
||||
%11737 = OpLabel
|
||||
%9761 = OpVectorShuffle %v2uint %9417 %9417 0 1
|
||||
%22991 = OpBitcast %v2int %9761
|
||||
%6403 = OpCompositeExtract %int %22991 0
|
||||
%9470 = OpShiftRightArithmetic %int %6403 %int_5
|
||||
%10056 = OpCompositeExtract %int %22991 1
|
||||
%16477 = OpShiftRightArithmetic %int %10056 %int_5
|
||||
%23374 = OpShiftRightLogical %uint %24236 %uint_5
|
||||
%6315 = OpBitcast %int %23374
|
||||
%21319 = OpIMul %int %16477 %6315
|
||||
%16222 = OpIAdd %int %9470 %21319
|
||||
%19086 = OpShiftLeftLogical %int %16222 %uint_9
|
||||
%10934 = OpBitwiseAnd %int %6403 %int_7
|
||||
%12601 = OpBitwiseAnd %int %10056 %int_14
|
||||
%17742 = OpShiftLeftLogical %int %12601 %int_2
|
||||
%17303 = OpIAdd %int %10934 %17742
|
||||
%6375 = OpShiftLeftLogical %int %17303 %uint_2
|
||||
%10161 = OpBitwiseAnd %int %6375 %int_n16
|
||||
%12150 = OpShiftLeftLogical %int %10161 %int_1
|
||||
%15436 = OpIAdd %int %19086 %12150
|
||||
%13207 = OpBitwiseAnd %int %6375 %int_15
|
||||
%19760 = OpIAdd %int %15436 %13207
|
||||
%18357 = OpBitwiseAnd %int %10056 %int_1
|
||||
%21581 = OpShiftLeftLogical %int %18357 %int_4
|
||||
%16729 = OpIAdd %int %19760 %21581
|
||||
%20514 = OpBitwiseAnd %int %16729 %int_n512
|
||||
%9238 = OpShiftLeftLogical %int %20514 %int_3
|
||||
%18995 = OpBitwiseAnd %int %10056 %int_16
|
||||
%12151 = OpShiftLeftLogical %int %18995 %int_7
|
||||
%16730 = OpIAdd %int %9238 %12151
|
||||
%19167 = OpBitwiseAnd %int %16729 %int_448
|
||||
%21582 = OpShiftLeftLogical %int %19167 %int_2
|
||||
%16708 = OpIAdd %int %16730 %21582
|
||||
%20611 = OpBitwiseAnd %int %10056 %int_8
|
||||
%16831 = OpShiftRightArithmetic %int %20611 %int_2
|
||||
%7916 = OpShiftRightArithmetic %int %6403 %int_3
|
||||
%13750 = OpIAdd %int %16831 %7916
|
||||
%21587 = OpBitwiseAnd %int %13750 %int_3
|
||||
%21583 = OpShiftLeftLogical %int %21587 %int_6
|
||||
%15437 = OpIAdd %int %16708 %21583
|
||||
%11782 = OpBitwiseAnd %int %16729 %int_63
|
||||
%14671 = OpIAdd %int %15437 %11782
|
||||
%22128 = OpBitcast %uint %14671
|
||||
OpBranch %21313
|
||||
%21313 = OpLabel
|
||||
%9468 = OpPhi %uint %22127 %21373 %22128 %11737
|
||||
%16296 = OpIMul %v2uint %8041 %6551
|
||||
%15292 = OpISub %v2uint %23563 %16296
|
||||
%7303 = OpCompositeExtract %uint %6551 0
|
||||
%22882 = OpCompositeExtract %uint %6551 1
|
||||
%13170 = OpIMul %uint %7303 %22882
|
||||
%15520 = OpIMul %uint %9468 %13170
|
||||
%16084 = OpCompositeExtract %uint %15292 0
|
||||
%15890 = OpIMul %uint %16084 %22882
|
||||
%6886 = OpCompositeExtract %uint %15292 1
|
||||
%11045 = OpIAdd %uint %15890 %6886
|
||||
%24733 = OpShiftLeftLogical %uint %11045 %uint_2
|
||||
%23219 = OpBitwiseAnd %uint %18929 %uint_3
|
||||
%9559 = OpIAdd %uint %24733 %23219
|
||||
%16557 = OpShiftLeftLogical %uint %9559 %uint_2
|
||||
%20138 = OpIAdd %uint %15520 %16557
|
||||
%17724 = OpIAdd %uint %23432 %20138
|
||||
%14040 = OpShiftRightLogical %uint %17724 %uint_4
|
||||
%11766 = OpShiftRightLogical %uint %20387 %uint_2
|
||||
%8394 = OpBitwiseAnd %uint %11766 %uint_3
|
||||
%20727 = OpAccessChain %_ptr_Uniform_v4uint %4218 %int_0 %14040
|
||||
%8142 = OpLoad %v4uint %20727
|
||||
%13760 = OpIEqual %bool %8394 %uint_1
|
||||
%21366 = OpIEqual %bool %8394 %uint_2
|
||||
%22150 = OpLogicalOr %bool %13760 %21366
|
||||
OpSelectionMerge %13411 None
|
||||
OpBranchConditional %22150 %10583 %13411
|
||||
%10583 = OpLabel
|
||||
%18271 = OpBitwiseAnd %v4uint %8142 %2510
|
||||
%9425 = OpShiftLeftLogical %v4uint %18271 %317
|
||||
%20652 = OpBitwiseAnd %v4uint %8142 %1838
|
||||
%17549 = OpShiftRightLogical %v4uint %20652 %317
|
||||
%16376 = OpBitwiseOr %v4uint %9425 %17549
|
||||
OpBranch %13411
|
||||
%13411 = OpLabel
|
||||
%22649 = OpPhi %v4uint %8142 %21313 %16376 %10583
|
||||
%19638 = OpIEqual %bool %8394 %uint_3
|
||||
%15139 = OpLogicalOr %bool %21366 %19638
|
||||
OpSelectionMerge %12537 None
|
||||
OpBranchConditional %15139 %11064 %12537
|
||||
%11064 = OpLabel
|
||||
%24087 = OpShiftLeftLogical %v4uint %22649 %749
|
||||
%15335 = OpShiftRightLogical %v4uint %22649 %749
|
||||
%10728 = OpBitwiseOr %v4uint %24087 %15335
|
||||
OpBranch %12537
|
||||
%12537 = OpLabel
|
||||
%12106 = OpPhi %v4uint %22649 %13411 %10728 %11064
|
||||
%15375 = OpBitcast %v4int %12106
|
||||
%16910 = OpShiftLeftLogical %v4int %15375 %770
|
||||
%16536 = OpShiftRightArithmetic %v4int %16910 %770
|
||||
%10903 = OpConvertSToF %v4float %16536
|
||||
%20413 = OpVectorTimesScalar %v4float %10903 %float_3_05185094en05
|
||||
%23989 = OpExtInst %v4float %1 FMax %1284 %20413
|
||||
%14338 = OpShiftRightArithmetic %v4int %15375 %770
|
||||
%6607 = OpConvertSToF %v4float %14338
|
||||
%18247 = OpVectorTimesScalar %v4float %6607 %float_3_05185094en05
|
||||
%24070 = OpExtInst %v4float %1 FMax %1284 %18247
|
||||
%24330 = OpCompositeExtract %float %23989 0
|
||||
%14319 = OpCompositeExtract %float %24070 0
|
||||
%19232 = OpCompositeConstruct %v2float %24330 %14319
|
||||
%8561 = OpExtInst %uint %1 PackHalf2x16 %19232
|
||||
%23487 = OpCompositeExtract %float %23989 1
|
||||
%14759 = OpCompositeExtract %float %24070 1
|
||||
%19233 = OpCompositeConstruct %v2float %23487 %14759
|
||||
%8562 = OpExtInst %uint %1 PackHalf2x16 %19233
|
||||
%23488 = OpCompositeExtract %float %23989 2
|
||||
%14760 = OpCompositeExtract %float %24070 2
|
||||
%19234 = OpCompositeConstruct %v2float %23488 %14760
|
||||
%8563 = OpExtInst %uint %1 PackHalf2x16 %19234
|
||||
%23489 = OpCompositeExtract %float %23989 3
|
||||
%14761 = OpCompositeExtract %float %24070 3
|
||||
%19213 = OpCompositeConstruct %v2float %23489 %14761
|
||||
%8430 = OpExtInst %uint %1 PackHalf2x16 %19213
|
||||
%15035 = OpCompositeConstruct %v4uint %8561 %8562 %8563 %8430
|
||||
%17859 = OpAccessChain %_ptr_Uniform_v4uint %5134 %int_0 %21670
|
||||
OpStore %17859 %15035
|
||||
%15532 = OpIAdd %uint %21670 %int_1
|
||||
%6417 = OpUGreaterThan %bool %7303 %uint_1
|
||||
OpSelectionMerge %24764 DontFlatten
|
||||
OpBranchConditional %6417 %20612 %20628
|
||||
%20612 = OpLabel
|
||||
%13975 = OpUDiv %uint %6638 %7303
|
||||
%9086 = OpIMul %uint %13975 %7303
|
||||
%12657 = OpISub %uint %6638 %9086
|
||||
%9511 = OpIAdd %uint %12657 %uint_1
|
||||
%13375 = OpIEqual %bool %9511 %7303
|
||||
OpSelectionMerge %7917 None
|
||||
OpBranchConditional %13375 %22174 %8593
|
||||
%22174 = OpLabel
|
||||
%19289 = OpIMul %uint %uint_32 %7303
|
||||
%21519 = OpShiftLeftLogical %uint %12657 %uint_4
|
||||
%18756 = OpISub %uint %19289 %21519
|
||||
OpBranch %7917
|
||||
%8593 = OpLabel
|
||||
OpBranch %7917
|
||||
%7917 = OpLabel
|
||||
%10540 = OpPhi %uint %18756 %22174 %uint_16 %8593
|
||||
OpBranch %24764
|
||||
%20628 = OpLabel
|
||||
OpBranch %24764
|
||||
%24764 = OpLabel
|
||||
%10684 = OpPhi %uint %10540 %7917 %uint_32 %20628
|
||||
%18731 = OpIMul %uint %10684 %22882
|
||||
%16493 = OpShiftRightLogical %uint %18731 %uint_4
|
||||
%13163 = OpIAdd %uint %14040 %16493
|
||||
%22298 = OpAccessChain %_ptr_Uniform_v4uint %4218 %int_0 %13163
|
||||
%6578 = OpLoad %v4uint %22298
|
||||
OpSelectionMerge %14874 None
|
||||
OpBranchConditional %22150 %10584 %14874
|
||||
%10584 = OpLabel
|
||||
%18272 = OpBitwiseAnd %v4uint %6578 %2510
|
||||
%9426 = OpShiftLeftLogical %v4uint %18272 %317
|
||||
%20653 = OpBitwiseAnd %v4uint %6578 %1838
|
||||
%17550 = OpShiftRightLogical %v4uint %20653 %317
|
||||
%16377 = OpBitwiseOr %v4uint %9426 %17550
|
||||
OpBranch %14874
|
||||
%14874 = OpLabel
|
||||
%10924 = OpPhi %v4uint %6578 %24764 %16377 %10584
|
||||
OpSelectionMerge %12538 None
|
||||
OpBranchConditional %15139 %11065 %12538
|
||||
%11065 = OpLabel
|
||||
%24088 = OpShiftLeftLogical %v4uint %10924 %749
|
||||
%15336 = OpShiftRightLogical %v4uint %10924 %749
|
||||
%10729 = OpBitwiseOr %v4uint %24088 %15336
|
||||
OpBranch %12538
|
||||
%12538 = OpLabel
|
||||
%12107 = OpPhi %v4uint %10924 %14874 %10729 %11065
|
||||
%15376 = OpBitcast %v4int %12107
|
||||
%16911 = OpShiftLeftLogical %v4int %15376 %770
|
||||
%16537 = OpShiftRightArithmetic %v4int %16911 %770
|
||||
%10904 = OpConvertSToF %v4float %16537
|
||||
%20414 = OpVectorTimesScalar %v4float %10904 %float_3_05185094en05
|
||||
%23990 = OpExtInst %v4float %1 FMax %1284 %20414
|
||||
%14339 = OpShiftRightArithmetic %v4int %15376 %770
|
||||
%6608 = OpConvertSToF %v4float %14339
|
||||
%18248 = OpVectorTimesScalar %v4float %6608 %float_3_05185094en05
|
||||
%24071 = OpExtInst %v4float %1 FMax %1284 %18248
|
||||
%24331 = OpCompositeExtract %float %23990 0
|
||||
%14320 = OpCompositeExtract %float %24071 0
|
||||
%19235 = OpCompositeConstruct %v2float %24331 %14320
|
||||
%8564 = OpExtInst %uint %1 PackHalf2x16 %19235
|
||||
%23490 = OpCompositeExtract %float %23990 1
|
||||
%14762 = OpCompositeExtract %float %24071 1
|
||||
%19236 = OpCompositeConstruct %v2float %23490 %14762
|
||||
%8565 = OpExtInst %uint %1 PackHalf2x16 %19236
|
||||
%23491 = OpCompositeExtract %float %23990 2
|
||||
%14763 = OpCompositeExtract %float %24071 2
|
||||
%19237 = OpCompositeConstruct %v2float %23491 %14763
|
||||
%8566 = OpExtInst %uint %1 PackHalf2x16 %19237
|
||||
%23492 = OpCompositeExtract %float %23990 3
|
||||
%14764 = OpCompositeExtract %float %24071 3
|
||||
%19214 = OpCompositeConstruct %v2float %23492 %14764
|
||||
%8431 = OpExtInst %uint %1 PackHalf2x16 %19214
|
||||
%15036 = OpCompositeConstruct %v4uint %8564 %8565 %8566 %8431
|
||||
%20158 = OpAccessChain %_ptr_Uniform_v4uint %5134 %int_0 %15532
|
||||
OpStore %20158 %15036
|
||||
OpBranch %19578
|
||||
%19578 = OpLabel
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
#endif
|
||||
|
||||
const uint32_t texture_load_rg16_snorm_float_scaled_cs[] = {
|
||||
0x07230203, 0x00010000, 0x0008000A, 0x0000625B, 0x00000000, 0x00020011,
|
||||
0x00000001, 0x0006000B, 0x00000001, 0x4C534C47, 0x6474732E, 0x3035342E,
|
||||
0x00000000, 0x0003000E, 0x00000000, 0x00000001, 0x0006000F, 0x00000005,
|
||||
0x0000161F, 0x6E69616D, 0x00000000, 0x00000F48, 0x00060010, 0x0000161F,
|
||||
0x00000011, 0x00000004, 0x00000020, 0x00000001, 0x00050048, 0x00000489,
|
||||
0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x00000489, 0x00000001,
|
||||
0x00000023, 0x00000004, 0x00050048, 0x00000489, 0x00000002, 0x00000023,
|
||||
0x00000008, 0x00050048, 0x00000489, 0x00000003, 0x00000023, 0x0000000C,
|
||||
0x00050048, 0x00000489, 0x00000004, 0x00000023, 0x00000010, 0x00050048,
|
||||
0x00000489, 0x00000005, 0x00000023, 0x0000001C, 0x00050048, 0x00000489,
|
||||
0x00000006, 0x00000023, 0x00000020, 0x00050048, 0x00000489, 0x00000007,
|
||||
0x00000023, 0x00000024, 0x00030047, 0x00000489, 0x00000002, 0x00040047,
|
||||
0x0000147D, 0x00000022, 0x00000002, 0x00040047, 0x0000147D, 0x00000021,
|
||||
0x00000000, 0x00040047, 0x00000F48, 0x0000000B, 0x0000001C, 0x00040047,
|
||||
0x000007DC, 0x00000006, 0x00000010, 0x00040048, 0x000007B4, 0x00000000,
|
||||
0x00000019, 0x00050048, 0x000007B4, 0x00000000, 0x00000023, 0x00000000,
|
||||
0x00030047, 0x000007B4, 0x00000003, 0x00040047, 0x0000140E, 0x00000022,
|
||||
0x00000000, 0x00040047, 0x0000140E, 0x00000021, 0x00000000, 0x00040047,
|
||||
0x000007DD, 0x00000006, 0x00000010, 0x00040048, 0x000007B5, 0x00000000,
|
||||
0x00000018, 0x00050048, 0x000007B5, 0x00000000, 0x00000023, 0x00000000,
|
||||
0x00030047, 0x000007B5, 0x00000003, 0x00040047, 0x0000107A, 0x00000022,
|
||||
0x00000001, 0x00040047, 0x0000107A, 0x00000021, 0x00000000, 0x00040047,
|
||||
0x00000BC3, 0x0000000B, 0x00000019, 0x00020013, 0x00000008, 0x00030021,
|
||||
0x00000502, 0x00000008, 0x00040015, 0x0000000B, 0x00000020, 0x00000000,
|
||||
0x00040017, 0x00000017, 0x0000000B, 0x00000004, 0x00040015, 0x0000000C,
|
||||
0x00000020, 0x00000001, 0x00040017, 0x00000012, 0x0000000C, 0x00000002,
|
||||
0x00040017, 0x00000016, 0x0000000C, 0x00000003, 0x00020014, 0x00000009,
|
||||
0x00040017, 0x00000014, 0x0000000B, 0x00000003, 0x00040017, 0x00000011,
|
||||
0x0000000B, 0x00000002, 0x00030016, 0x0000000D, 0x00000020, 0x00040017,
|
||||
0x0000001D, 0x0000000D, 0x00000004, 0x0004002B, 0x0000000D, 0x00000341,
|
||||
0xBF800000, 0x0007002C, 0x0000001D, 0x00000504, 0x00000341, 0x00000341,
|
||||
0x00000341, 0x00000341, 0x00040017, 0x0000001A, 0x0000000C, 0x00000004,
|
||||
0x0004002B, 0x0000000C, 0x00000A3B, 0x00000010, 0x0004002B, 0x0000000D,
|
||||
0x00000A38, 0x38000100, 0x0004002B, 0x0000000B, 0x00000A0A, 0x00000000,
|
||||
0x00040017, 0x00000013, 0x0000000D, 0x00000002, 0x0004002B, 0x0000000B,
|
||||
0x00000A0D, 0x00000001, 0x0004002B, 0x0000000B, 0x00000A10, 0x00000002,
|
||||
0x0004002B, 0x0000000B, 0x00000A13, 0x00000003, 0x0004002B, 0x0000000B,
|
||||
0x000008A6, 0x00FF00FF, 0x0004002B, 0x0000000B, 0x00000A22, 0x00000008,
|
||||
0x0004002B, 0x0000000B, 0x000005FD, 0xFF00FF00, 0x0004002B, 0x0000000B,
|
||||
0x00000A3A, 0x00000010, 0x0004002B, 0x0000000C, 0x00000A1A, 0x00000005,
|
||||
0x0004002B, 0x0000000B, 0x00000A19, 0x00000005, 0x0004002B, 0x0000000C,
|
||||
0x00000A20, 0x00000007, 0x0004002B, 0x0000000C, 0x00000A35, 0x0000000E,
|
||||
0x0004002B, 0x0000000C, 0x00000A11, 0x00000002, 0x0004002B, 0x0000000C,
|
||||
0x000009DB, 0xFFFFFFF0, 0x0004002B, 0x0000000C, 0x00000A0E, 0x00000001,
|
||||
0x0004002B, 0x0000000C, 0x00000A39, 0x0000000F, 0x0004002B, 0x0000000C,
|
||||
0x00000A17, 0x00000004, 0x0004002B, 0x0000000C, 0x0000040B, 0xFFFFFE00,
|
||||
0x0004002B, 0x0000000C, 0x00000A14, 0x00000003, 0x0004002B, 0x0000000C,
|
||||
0x00000388, 0x000001C0, 0x0004002B, 0x0000000C, 0x00000A23, 0x00000008,
|
||||
0x0004002B, 0x0000000C, 0x00000A1D, 0x00000006, 0x0004002B, 0x0000000C,
|
||||
0x00000AC8, 0x0000003F, 0x0004002B, 0x0000000B, 0x00000A16, 0x00000004,
|
||||
0x0004002B, 0x0000000B, 0x00000A1C, 0x00000006, 0x0004002B, 0x0000000C,
|
||||
0x0000078B, 0x0FFFFFFF, 0x0004002B, 0x0000000C, 0x00000A05, 0xFFFFFFFE,
|
||||
0x0004002B, 0x0000000B, 0x00000A6A, 0x00000020, 0x000A001E, 0x00000489,
|
||||
0x0000000B, 0x0000000B, 0x0000000B, 0x0000000B, 0x00000014, 0x0000000B,
|
||||
0x0000000B, 0x0000000B, 0x00040020, 0x00000706, 0x00000002, 0x00000489,
|
||||
0x0004003B, 0x00000706, 0x0000147D, 0x00000002, 0x0004002B, 0x0000000C,
|
||||
0x00000A0B, 0x00000000, 0x00040020, 0x00000288, 0x00000002, 0x0000000B,
|
||||
0x0005002C, 0x00000011, 0x0000077B, 0x00000A16, 0x00000A1C, 0x00040020,
|
||||
0x00000291, 0x00000002, 0x00000014, 0x00040020, 0x00000292, 0x00000001,
|
||||
0x00000014, 0x0004003B, 0x00000292, 0x00000F48, 0x00000001, 0x0006002C,
|
||||
0x00000014, 0x00000A2B, 0x00000A13, 0x00000A0A, 0x00000A0A, 0x00040017,
|
||||
0x0000000F, 0x00000009, 0x00000002, 0x0003001D, 0x000007DC, 0x00000017,
|
||||
0x0003001E, 0x000007B4, 0x000007DC, 0x00040020, 0x00000A31, 0x00000002,
|
||||
0x000007B4, 0x0004003B, 0x00000A31, 0x0000140E, 0x00000002, 0x0003001D,
|
||||
0x000007DD, 0x00000017, 0x0003001E, 0x000007B5, 0x000007DD, 0x00040020,
|
||||
0x00000A32, 0x00000002, 0x000007B5, 0x0004003B, 0x00000A32, 0x0000107A,
|
||||
0x00000002, 0x00040020, 0x00000294, 0x00000002, 0x00000017, 0x0006002C,
|
||||
0x00000014, 0x00000BC3, 0x00000A16, 0x00000A6A, 0x00000A0D, 0x0005002C,
|
||||
0x00000011, 0x0000074E, 0x00000A13, 0x00000A13, 0x0004002B, 0x0000000B,
|
||||
0x00000A25, 0x00000009, 0x0007002C, 0x00000017, 0x000009CE, 0x000008A6,
|
||||
0x000008A6, 0x000008A6, 0x000008A6, 0x0007002C, 0x00000017, 0x0000013D,
|
||||
0x00000A22, 0x00000A22, 0x00000A22, 0x00000A22, 0x0007002C, 0x00000017,
|
||||
0x0000072E, 0x000005FD, 0x000005FD, 0x000005FD, 0x000005FD, 0x0007002C,
|
||||
0x00000017, 0x000002ED, 0x00000A3A, 0x00000A3A, 0x00000A3A, 0x00000A3A,
|
||||
0x0007002C, 0x0000001A, 0x00000302, 0x00000A3B, 0x00000A3B, 0x00000A3B,
|
||||
0x00000A3B, 0x00050036, 0x00000008, 0x0000161F, 0x00000000, 0x00000502,
|
||||
0x000200F8, 0x00003B06, 0x000300F7, 0x00004C7A, 0x00000000, 0x000300FB,
|
||||
0x00000A0A, 0x00003B21, 0x000200F8, 0x00003B21, 0x0004003D, 0x00000014,
|
||||
0x0000312F, 0x00000F48, 0x000500C4, 0x00000014, 0x000027F5, 0x0000312F,
|
||||
0x00000A2B, 0x00050041, 0x00000291, 0x0000625A, 0x0000147D, 0x00000A17,
|
||||
0x0004003D, 0x00000014, 0x000059B5, 0x0000625A, 0x0007004F, 0x00000011,
|
||||
0x00004993, 0x000027F5, 0x000027F5, 0x00000000, 0x00000001, 0x0007004F,
|
||||
0x00000011, 0x000019E2, 0x000059B5, 0x000059B5, 0x00000000, 0x00000001,
|
||||
0x000500AE, 0x0000000F, 0x00004288, 0x00004993, 0x000019E2, 0x0004009A,
|
||||
0x00000009, 0x00006067, 0x00004288, 0x000300F7, 0x0000188A, 0x00000002,
|
||||
0x000400FA, 0x00006067, 0x000055E8, 0x0000188A, 0x000200F8, 0x000055E8,
|
||||
0x000200F9, 0x00004C7A, 0x000200F8, 0x0000188A, 0x0004007C, 0x00000016,
|
||||
0x00001A8B, 0x000027F5, 0x00050041, 0x00000288, 0x00004968, 0x0000147D,
|
||||
0x00000A1D, 0x0004003D, 0x0000000B, 0x0000263C, 0x00004968, 0x00050051,
|
||||
0x0000000B, 0x00004F98, 0x000059B5, 0x00000001, 0x00050051, 0x0000000C,
|
||||
0x00003964, 0x00001A8B, 0x00000000, 0x00050084, 0x0000000C, 0x0000591A,
|
||||
0x00003964, 0x00000A17, 0x00050051, 0x0000000C, 0x000018DA, 0x00001A8B,
|
||||
0x00000002, 0x0004007C, 0x0000000C, 0x000038A9, 0x00004F98, 0x00050084,
|
||||
0x0000000C, 0x00002C0F, 0x000018DA, 0x000038A9, 0x00050051, 0x0000000C,
|
||||
0x000044BE, 0x00001A8B, 0x00000001, 0x00050080, 0x0000000C, 0x000056D4,
|
||||
0x00002C0F, 0x000044BE, 0x0004007C, 0x0000000C, 0x00005785, 0x0000263C,
|
||||
0x00050084, 0x0000000C, 0x00005FD7, 0x000056D4, 0x00005785, 0x00050080,
|
||||
0x0000000C, 0x00001B95, 0x0000591A, 0x00005FD7, 0x0004007C, 0x0000000B,
|
||||
0x00004B46, 0x00001B95, 0x00050041, 0x00000288, 0x00004C04, 0x0000147D,
|
||||
0x00000A1A, 0x0004003D, 0x0000000B, 0x0000595B, 0x00004C04, 0x00050080,
|
||||
0x0000000B, 0x00002145, 0x00004B46, 0x0000595B, 0x000500C2, 0x0000000B,
|
||||
0x000054A6, 0x00002145, 0x00000A16, 0x00050041, 0x00000288, 0x000047E4,
|
||||
0x0000147D, 0x00000A0E, 0x0004003D, 0x0000000B, 0x00005B88, 0x000047E4,
|
||||
0x00050041, 0x00000288, 0x000058AC, 0x0000147D, 0x00000A0B, 0x0004003D,
|
||||
0x0000000B, 0x00004FA3, 0x000058AC, 0x000500C7, 0x0000000B, 0x00005707,
|
||||
0x00004FA3, 0x00000A10, 0x000500AB, 0x00000009, 0x00004B17, 0x00005707,
|
||||
0x00000A0A, 0x00050050, 0x00000011, 0x0000435F, 0x00004FA3, 0x00004FA3,
|
||||
0x000500C2, 0x00000011, 0x000059A3, 0x0000435F, 0x0000077B, 0x000500C7,
|
||||
0x00000011, 0x00001997, 0x000059A3, 0x0000074E, 0x00050041, 0x00000288,
|
||||
0x0000492C, 0x0000147D, 0x00000A11, 0x0004003D, 0x0000000B, 0x00005EAC,
|
||||
0x0000492C, 0x00050041, 0x00000288, 0x00004FEA, 0x0000147D, 0x00000A14,
|
||||
0x0004003D, 0x0000000B, 0x00005697, 0x00004FEA, 0x00050051, 0x0000000B,
|
||||
0x000049F1, 0x000027F5, 0x00000000, 0x000500C2, 0x0000000B, 0x000019EE,
|
||||
0x000049F1, 0x00000A10, 0x00050051, 0x0000000B, 0x00002704, 0x000027F5,
|
||||
0x00000001, 0x00050050, 0x00000011, 0x00005C0B, 0x000019EE, 0x00002704,
|
||||
0x00050086, 0x00000011, 0x00001F69, 0x00005C0B, 0x00001997, 0x00050051,
|
||||
0x0000000B, 0x0000366C, 0x00001F69, 0x00000000, 0x000500C4, 0x0000000B,
|
||||
0x00004D4D, 0x0000366C, 0x00000A10, 0x00050051, 0x0000000B, 0x000051A9,
|
||||
0x00001F69, 0x00000001, 0x00050051, 0x0000000B, 0x000059EE, 0x000027F5,
|
||||
0x00000002, 0x00060050, 0x00000014, 0x000024C9, 0x00004D4D, 0x000051A9,
|
||||
0x000059EE, 0x000300F7, 0x00005341, 0x00000002, 0x000400FA, 0x00004B17,
|
||||
0x0000537D, 0x00002DD9, 0x000200F8, 0x0000537D, 0x0004007C, 0x00000016,
|
||||
0x00002970, 0x000024C9, 0x00050051, 0x0000000C, 0x000042C2, 0x00002970,
|
||||
0x00000001, 0x000500C3, 0x0000000C, 0x000024FD, 0x000042C2, 0x00000A17,
|
||||
0x00050051, 0x0000000C, 0x00002747, 0x00002970, 0x00000002, 0x000500C3,
|
||||
0x0000000C, 0x0000405C, 0x00002747, 0x00000A11, 0x000500C2, 0x0000000B,
|
||||
0x00005B4D, 0x00005697, 0x00000A16, 0x0004007C, 0x0000000C, 0x000018AA,
|
||||
0x00005B4D, 0x00050084, 0x0000000C, 0x00005321, 0x0000405C, 0x000018AA,
|
||||
0x00050080, 0x0000000C, 0x00003B27, 0x000024FD, 0x00005321, 0x000500C2,
|
||||
0x0000000B, 0x00002348, 0x00005EAC, 0x00000A19, 0x0004007C, 0x0000000C,
|
||||
0x0000308B, 0x00002348, 0x00050084, 0x0000000C, 0x00002878, 0x00003B27,
|
||||
0x0000308B, 0x00050051, 0x0000000C, 0x00006242, 0x00002970, 0x00000000,
|
||||
0x000500C3, 0x0000000C, 0x00004FC7, 0x00006242, 0x00000A1A, 0x00050080,
|
||||
0x0000000C, 0x000049FC, 0x00004FC7, 0x00002878, 0x000500C4, 0x0000000C,
|
||||
0x0000225D, 0x000049FC, 0x00000A22, 0x000500C7, 0x0000000C, 0x00002CF6,
|
||||
0x0000225D, 0x0000078B, 0x000500C4, 0x0000000C, 0x000049FA, 0x00002CF6,
|
||||
0x00000A0E, 0x000500C7, 0x0000000C, 0x00004D38, 0x00006242, 0x00000A20,
|
||||
0x000500C7, 0x0000000C, 0x00003138, 0x000042C2, 0x00000A1D, 0x000500C4,
|
||||
0x0000000C, 0x0000454D, 0x00003138, 0x00000A11, 0x00050080, 0x0000000C,
|
||||
0x0000434B, 0x00004D38, 0x0000454D, 0x000500C4, 0x0000000C, 0x00001B88,
|
||||
0x0000434B, 0x00000A22, 0x000500C3, 0x0000000C, 0x00005DE3, 0x00001B88,
|
||||
0x00000A1D, 0x000500C3, 0x0000000C, 0x00002215, 0x000042C2, 0x00000A14,
|
||||
0x00050080, 0x0000000C, 0x000035A3, 0x00002215, 0x0000405C, 0x000500C7,
|
||||
0x0000000C, 0x00005A0C, 0x000035A3, 0x00000A0E, 0x000500C3, 0x0000000C,
|
||||
0x00004112, 0x00006242, 0x00000A14, 0x000500C4, 0x0000000C, 0x0000496A,
|
||||
0x00005A0C, 0x00000A0E, 0x00050080, 0x0000000C, 0x000034BD, 0x00004112,
|
||||
0x0000496A, 0x000500C7, 0x0000000C, 0x00004ADD, 0x000034BD, 0x00000A14,
|
||||
0x000500C4, 0x0000000C, 0x0000544A, 0x00004ADD, 0x00000A0E, 0x00050080,
|
||||
0x0000000C, 0x00003C4B, 0x00005A0C, 0x0000544A, 0x000500C7, 0x0000000C,
|
||||
0x0000335E, 0x00005DE3, 0x000009DB, 0x00050080, 0x0000000C, 0x00004F70,
|
||||
0x000049FA, 0x0000335E, 0x000500C4, 0x0000000C, 0x00005B31, 0x00004F70,
|
||||
0x00000A0E, 0x000500C7, 0x0000000C, 0x00005AEA, 0x00005DE3, 0x00000A39,
|
||||
0x00050080, 0x0000000C, 0x0000285C, 0x00005B31, 0x00005AEA, 0x000500C7,
|
||||
0x0000000C, 0x000047B4, 0x00002747, 0x00000A14, 0x000500C4, 0x0000000C,
|
||||
0x0000544B, 0x000047B4, 0x00000A22, 0x00050080, 0x0000000C, 0x00004157,
|
||||
0x0000285C, 0x0000544B, 0x000500C7, 0x0000000C, 0x00004ADE, 0x000042C2,
|
||||
0x00000A0E, 0x000500C4, 0x0000000C, 0x0000544C, 0x00004ADE, 0x00000A17,
|
||||
0x00050080, 0x0000000C, 0x00004158, 0x00004157, 0x0000544C, 0x000500C7,
|
||||
0x0000000C, 0x00004FD6, 0x00003C4B, 0x00000A0E, 0x000500C4, 0x0000000C,
|
||||
0x00002703, 0x00004FD6, 0x00000A14, 0x000500C3, 0x0000000C, 0x00003332,
|
||||
0x00004158, 0x00000A1D, 0x000500C7, 0x0000000C, 0x000036D6, 0x00003332,
|
||||
0x00000A20, 0x00050080, 0x0000000C, 0x00003412, 0x00002703, 0x000036D6,
|
||||
0x000500C4, 0x0000000C, 0x00005B32, 0x00003412, 0x00000A14, 0x000500C7,
|
||||
0x0000000C, 0x00005AB1, 0x00003C4B, 0x00000A05, 0x00050080, 0x0000000C,
|
||||
0x00002A9C, 0x00005B32, 0x00005AB1, 0x000500C4, 0x0000000C, 0x00005B33,
|
||||
0x00002A9C, 0x00000A11, 0x000500C7, 0x0000000C, 0x00005AB2, 0x00004158,
|
||||
0x0000040B, 0x00050080, 0x0000000C, 0x00002A9D, 0x00005B33, 0x00005AB2,
|
||||
0x000500C4, 0x0000000C, 0x00005B34, 0x00002A9D, 0x00000A14, 0x000500C7,
|
||||
0x0000000C, 0x00005559, 0x00004158, 0x00000AC8, 0x00050080, 0x0000000C,
|
||||
0x00005EFA, 0x00005B34, 0x00005559, 0x0004007C, 0x0000000B, 0x0000566F,
|
||||
0x00005EFA, 0x000200F9, 0x00005341, 0x000200F8, 0x00002DD9, 0x0007004F,
|
||||
0x00000011, 0x00002621, 0x000024C9, 0x000024C9, 0x00000000, 0x00000001,
|
||||
0x0004007C, 0x00000012, 0x000059CF, 0x00002621, 0x00050051, 0x0000000C,
|
||||
0x00001903, 0x000059CF, 0x00000000, 0x000500C3, 0x0000000C, 0x000024FE,
|
||||
0x00001903, 0x00000A1A, 0x00050051, 0x0000000C, 0x00002748, 0x000059CF,
|
||||
0x00000001, 0x000500C3, 0x0000000C, 0x0000405D, 0x00002748, 0x00000A1A,
|
||||
0x000500C2, 0x0000000B, 0x00005B4E, 0x00005EAC, 0x00000A19, 0x0004007C,
|
||||
0x0000000C, 0x000018AB, 0x00005B4E, 0x00050084, 0x0000000C, 0x00005347,
|
||||
0x0000405D, 0x000018AB, 0x00050080, 0x0000000C, 0x00003F5E, 0x000024FE,
|
||||
0x00005347, 0x000500C4, 0x0000000C, 0x00004A8E, 0x00003F5E, 0x00000A25,
|
||||
0x000500C7, 0x0000000C, 0x00002AB6, 0x00001903, 0x00000A20, 0x000500C7,
|
||||
0x0000000C, 0x00003139, 0x00002748, 0x00000A35, 0x000500C4, 0x0000000C,
|
||||
0x0000454E, 0x00003139, 0x00000A11, 0x00050080, 0x0000000C, 0x00004397,
|
||||
0x00002AB6, 0x0000454E, 0x000500C4, 0x0000000C, 0x000018E7, 0x00004397,
|
||||
0x00000A10, 0x000500C7, 0x0000000C, 0x000027B1, 0x000018E7, 0x000009DB,
|
||||
0x000500C4, 0x0000000C, 0x00002F76, 0x000027B1, 0x00000A0E, 0x00050080,
|
||||
0x0000000C, 0x00003C4C, 0x00004A8E, 0x00002F76, 0x000500C7, 0x0000000C,
|
||||
0x00003397, 0x000018E7, 0x00000A39, 0x00050080, 0x0000000C, 0x00004D30,
|
||||
0x00003C4C, 0x00003397, 0x000500C7, 0x0000000C, 0x000047B5, 0x00002748,
|
||||
0x00000A0E, 0x000500C4, 0x0000000C, 0x0000544D, 0x000047B5, 0x00000A17,
|
||||
0x00050080, 0x0000000C, 0x00004159, 0x00004D30, 0x0000544D, 0x000500C7,
|
||||
0x0000000C, 0x00005022, 0x00004159, 0x0000040B, 0x000500C4, 0x0000000C,
|
||||
0x00002416, 0x00005022, 0x00000A14, 0x000500C7, 0x0000000C, 0x00004A33,
|
||||
0x00002748, 0x00000A3B, 0x000500C4, 0x0000000C, 0x00002F77, 0x00004A33,
|
||||
0x00000A20, 0x00050080, 0x0000000C, 0x0000415A, 0x00002416, 0x00002F77,
|
||||
0x000500C7, 0x0000000C, 0x00004ADF, 0x00004159, 0x00000388, 0x000500C4,
|
||||
0x0000000C, 0x0000544E, 0x00004ADF, 0x00000A11, 0x00050080, 0x0000000C,
|
||||
0x00004144, 0x0000415A, 0x0000544E, 0x000500C7, 0x0000000C, 0x00005083,
|
||||
0x00002748, 0x00000A23, 0x000500C3, 0x0000000C, 0x000041BF, 0x00005083,
|
||||
0x00000A11, 0x000500C3, 0x0000000C, 0x00001EEC, 0x00001903, 0x00000A14,
|
||||
0x00050080, 0x0000000C, 0x000035B6, 0x000041BF, 0x00001EEC, 0x000500C7,
|
||||
0x0000000C, 0x00005453, 0x000035B6, 0x00000A14, 0x000500C4, 0x0000000C,
|
||||
0x0000544F, 0x00005453, 0x00000A1D, 0x00050080, 0x0000000C, 0x00003C4D,
|
||||
0x00004144, 0x0000544F, 0x000500C7, 0x0000000C, 0x00002E06, 0x00004159,
|
||||
0x00000AC8, 0x00050080, 0x0000000C, 0x0000394F, 0x00003C4D, 0x00002E06,
|
||||
0x0004007C, 0x0000000B, 0x00005670, 0x0000394F, 0x000200F9, 0x00005341,
|
||||
0x000200F8, 0x00005341, 0x000700F5, 0x0000000B, 0x000024FC, 0x0000566F,
|
||||
0x0000537D, 0x00005670, 0x00002DD9, 0x00050084, 0x00000011, 0x00003FA8,
|
||||
0x00001F69, 0x00001997, 0x00050082, 0x00000011, 0x00003BBC, 0x00005C0B,
|
||||
0x00003FA8, 0x00050051, 0x0000000B, 0x00001C87, 0x00001997, 0x00000000,
|
||||
0x00050051, 0x0000000B, 0x00005962, 0x00001997, 0x00000001, 0x00050084,
|
||||
0x0000000B, 0x00003372, 0x00001C87, 0x00005962, 0x00050084, 0x0000000B,
|
||||
0x00003CA0, 0x000024FC, 0x00003372, 0x00050051, 0x0000000B, 0x00003ED4,
|
||||
0x00003BBC, 0x00000000, 0x00050084, 0x0000000B, 0x00003E12, 0x00003ED4,
|
||||
0x00005962, 0x00050051, 0x0000000B, 0x00001AE6, 0x00003BBC, 0x00000001,
|
||||
0x00050080, 0x0000000B, 0x00002B25, 0x00003E12, 0x00001AE6, 0x000500C4,
|
||||
0x0000000B, 0x0000609D, 0x00002B25, 0x00000A10, 0x000500C7, 0x0000000B,
|
||||
0x00005AB3, 0x000049F1, 0x00000A13, 0x00050080, 0x0000000B, 0x00002557,
|
||||
0x0000609D, 0x00005AB3, 0x000500C4, 0x0000000B, 0x000040AD, 0x00002557,
|
||||
0x00000A10, 0x00050080, 0x0000000B, 0x00004EAA, 0x00003CA0, 0x000040AD,
|
||||
0x00050080, 0x0000000B, 0x0000453C, 0x00005B88, 0x00004EAA, 0x000500C2,
|
||||
0x0000000B, 0x000036D8, 0x0000453C, 0x00000A16, 0x000500C2, 0x0000000B,
|
||||
0x00002DF6, 0x00004FA3, 0x00000A10, 0x000500C7, 0x0000000B, 0x000020CA,
|
||||
0x00002DF6, 0x00000A13, 0x00060041, 0x00000294, 0x000050F7, 0x0000107A,
|
||||
0x00000A0B, 0x000036D8, 0x0004003D, 0x00000017, 0x00001FCE, 0x000050F7,
|
||||
0x000500AA, 0x00000009, 0x000035C0, 0x000020CA, 0x00000A0D, 0x000500AA,
|
||||
0x00000009, 0x00005376, 0x000020CA, 0x00000A10, 0x000500A6, 0x00000009,
|
||||
0x00005686, 0x000035C0, 0x00005376, 0x000300F7, 0x00003463, 0x00000000,
|
||||
0x000400FA, 0x00005686, 0x00002957, 0x00003463, 0x000200F8, 0x00002957,
|
||||
0x000500C7, 0x00000017, 0x0000475F, 0x00001FCE, 0x000009CE, 0x000500C4,
|
||||
0x00000017, 0x000024D1, 0x0000475F, 0x0000013D, 0x000500C7, 0x00000017,
|
||||
0x000050AC, 0x00001FCE, 0x0000072E, 0x000500C2, 0x00000017, 0x0000448D,
|
||||
0x000050AC, 0x0000013D, 0x000500C5, 0x00000017, 0x00003FF8, 0x000024D1,
|
||||
0x0000448D, 0x000200F9, 0x00003463, 0x000200F8, 0x00003463, 0x000700F5,
|
||||
0x00000017, 0x00005879, 0x00001FCE, 0x00005341, 0x00003FF8, 0x00002957,
|
||||
0x000500AA, 0x00000009, 0x00004CB6, 0x000020CA, 0x00000A13, 0x000500A6,
|
||||
0x00000009, 0x00003B23, 0x00005376, 0x00004CB6, 0x000300F7, 0x000030F9,
|
||||
0x00000000, 0x000400FA, 0x00003B23, 0x00002B38, 0x000030F9, 0x000200F8,
|
||||
0x00002B38, 0x000500C4, 0x00000017, 0x00005E17, 0x00005879, 0x000002ED,
|
||||
0x000500C2, 0x00000017, 0x00003BE7, 0x00005879, 0x000002ED, 0x000500C5,
|
||||
0x00000017, 0x000029E8, 0x00005E17, 0x00003BE7, 0x000200F9, 0x000030F9,
|
||||
0x000200F8, 0x000030F9, 0x000700F5, 0x00000017, 0x00002F4A, 0x00005879,
|
||||
0x00003463, 0x000029E8, 0x00002B38, 0x0004007C, 0x0000001A, 0x00003C0F,
|
||||
0x00002F4A, 0x000500C4, 0x0000001A, 0x0000420E, 0x00003C0F, 0x00000302,
|
||||
0x000500C3, 0x0000001A, 0x00004098, 0x0000420E, 0x00000302, 0x0004006F,
|
||||
0x0000001D, 0x00002A97, 0x00004098, 0x0005008E, 0x0000001D, 0x00004FBD,
|
||||
0x00002A97, 0x00000A38, 0x0007000C, 0x0000001D, 0x00005DB5, 0x00000001,
|
||||
0x00000028, 0x00000504, 0x00004FBD, 0x000500C3, 0x0000001A, 0x00003802,
|
||||
0x00003C0F, 0x00000302, 0x0004006F, 0x0000001D, 0x000019CF, 0x00003802,
|
||||
0x0005008E, 0x0000001D, 0x00004747, 0x000019CF, 0x00000A38, 0x0007000C,
|
||||
0x0000001D, 0x00005E06, 0x00000001, 0x00000028, 0x00000504, 0x00004747,
|
||||
0x00050051, 0x0000000D, 0x00005F0A, 0x00005DB5, 0x00000000, 0x00050051,
|
||||
0x0000000D, 0x000037EF, 0x00005E06, 0x00000000, 0x00050050, 0x00000013,
|
||||
0x00004B20, 0x00005F0A, 0x000037EF, 0x0006000C, 0x0000000B, 0x00002171,
|
||||
0x00000001, 0x0000003A, 0x00004B20, 0x00050051, 0x0000000D, 0x00005BBF,
|
||||
0x00005DB5, 0x00000001, 0x00050051, 0x0000000D, 0x000039A7, 0x00005E06,
|
||||
0x00000001, 0x00050050, 0x00000013, 0x00004B21, 0x00005BBF, 0x000039A7,
|
||||
0x0006000C, 0x0000000B, 0x00002172, 0x00000001, 0x0000003A, 0x00004B21,
|
||||
0x00050051, 0x0000000D, 0x00005BC0, 0x00005DB5, 0x00000002, 0x00050051,
|
||||
0x0000000D, 0x000039A8, 0x00005E06, 0x00000002, 0x00050050, 0x00000013,
|
||||
0x00004B22, 0x00005BC0, 0x000039A8, 0x0006000C, 0x0000000B, 0x00002173,
|
||||
0x00000001, 0x0000003A, 0x00004B22, 0x00050051, 0x0000000D, 0x00005BC1,
|
||||
0x00005DB5, 0x00000003, 0x00050051, 0x0000000D, 0x000039A9, 0x00005E06,
|
||||
0x00000003, 0x00050050, 0x00000013, 0x00004B0D, 0x00005BC1, 0x000039A9,
|
||||
0x0006000C, 0x0000000B, 0x000020EE, 0x00000001, 0x0000003A, 0x00004B0D,
|
||||
0x00070050, 0x00000017, 0x00003ABB, 0x00002171, 0x00002172, 0x00002173,
|
||||
0x000020EE, 0x00060041, 0x00000294, 0x000045C3, 0x0000140E, 0x00000A0B,
|
||||
0x000054A6, 0x0003003E, 0x000045C3, 0x00003ABB, 0x00050080, 0x0000000B,
|
||||
0x00003CAC, 0x000054A6, 0x00000A0E, 0x000500AC, 0x00000009, 0x00001911,
|
||||
0x00001C87, 0x00000A0D, 0x000300F7, 0x000060BC, 0x00000002, 0x000400FA,
|
||||
0x00001911, 0x00005084, 0x00005094, 0x000200F8, 0x00005084, 0x00050086,
|
||||
0x0000000B, 0x00003697, 0x000019EE, 0x00001C87, 0x00050084, 0x0000000B,
|
||||
0x0000237E, 0x00003697, 0x00001C87, 0x00050082, 0x0000000B, 0x00003171,
|
||||
0x000019EE, 0x0000237E, 0x00050080, 0x0000000B, 0x00002527, 0x00003171,
|
||||
0x00000A0D, 0x000500AA, 0x00000009, 0x0000343F, 0x00002527, 0x00001C87,
|
||||
0x000300F7, 0x00001EED, 0x00000000, 0x000400FA, 0x0000343F, 0x0000569E,
|
||||
0x00002191, 0x000200F8, 0x0000569E, 0x00050084, 0x0000000B, 0x00004B59,
|
||||
0x00000A6A, 0x00001C87, 0x000500C4, 0x0000000B, 0x0000540F, 0x00003171,
|
||||
0x00000A16, 0x00050082, 0x0000000B, 0x00004944, 0x00004B59, 0x0000540F,
|
||||
0x000200F9, 0x00001EED, 0x000200F8, 0x00002191, 0x000200F9, 0x00001EED,
|
||||
0x000200F8, 0x00001EED, 0x000700F5, 0x0000000B, 0x0000292C, 0x00004944,
|
||||
0x0000569E, 0x00000A3A, 0x00002191, 0x000200F9, 0x000060BC, 0x000200F8,
|
||||
0x00005094, 0x000200F9, 0x000060BC, 0x000200F8, 0x000060BC, 0x000700F5,
|
||||
0x0000000B, 0x000029BC, 0x0000292C, 0x00001EED, 0x00000A6A, 0x00005094,
|
||||
0x00050084, 0x0000000B, 0x0000492B, 0x000029BC, 0x00005962, 0x000500C2,
|
||||
0x0000000B, 0x0000406D, 0x0000492B, 0x00000A16, 0x00050080, 0x0000000B,
|
||||
0x0000336B, 0x000036D8, 0x0000406D, 0x00060041, 0x00000294, 0x0000571A,
|
||||
0x0000107A, 0x00000A0B, 0x0000336B, 0x0004003D, 0x00000017, 0x000019B2,
|
||||
0x0000571A, 0x000300F7, 0x00003A1A, 0x00000000, 0x000400FA, 0x00005686,
|
||||
0x00002958, 0x00003A1A, 0x000200F8, 0x00002958, 0x000500C7, 0x00000017,
|
||||
0x00004760, 0x000019B2, 0x000009CE, 0x000500C4, 0x00000017, 0x000024D2,
|
||||
0x00004760, 0x0000013D, 0x000500C7, 0x00000017, 0x000050AD, 0x000019B2,
|
||||
0x0000072E, 0x000500C2, 0x00000017, 0x0000448E, 0x000050AD, 0x0000013D,
|
||||
0x000500C5, 0x00000017, 0x00003FF9, 0x000024D2, 0x0000448E, 0x000200F9,
|
||||
0x00003A1A, 0x000200F8, 0x00003A1A, 0x000700F5, 0x00000017, 0x00002AAC,
|
||||
0x000019B2, 0x000060BC, 0x00003FF9, 0x00002958, 0x000300F7, 0x000030FA,
|
||||
0x00000000, 0x000400FA, 0x00003B23, 0x00002B39, 0x000030FA, 0x000200F8,
|
||||
0x00002B39, 0x000500C4, 0x00000017, 0x00005E18, 0x00002AAC, 0x000002ED,
|
||||
0x000500C2, 0x00000017, 0x00003BE8, 0x00002AAC, 0x000002ED, 0x000500C5,
|
||||
0x00000017, 0x000029E9, 0x00005E18, 0x00003BE8, 0x000200F9, 0x000030FA,
|
||||
0x000200F8, 0x000030FA, 0x000700F5, 0x00000017, 0x00002F4B, 0x00002AAC,
|
||||
0x00003A1A, 0x000029E9, 0x00002B39, 0x0004007C, 0x0000001A, 0x00003C10,
|
||||
0x00002F4B, 0x000500C4, 0x0000001A, 0x0000420F, 0x00003C10, 0x00000302,
|
||||
0x000500C3, 0x0000001A, 0x00004099, 0x0000420F, 0x00000302, 0x0004006F,
|
||||
0x0000001D, 0x00002A98, 0x00004099, 0x0005008E, 0x0000001D, 0x00004FBE,
|
||||
0x00002A98, 0x00000A38, 0x0007000C, 0x0000001D, 0x00005DB6, 0x00000001,
|
||||
0x00000028, 0x00000504, 0x00004FBE, 0x000500C3, 0x0000001A, 0x00003803,
|
||||
0x00003C10, 0x00000302, 0x0004006F, 0x0000001D, 0x000019D0, 0x00003803,
|
||||
0x0005008E, 0x0000001D, 0x00004748, 0x000019D0, 0x00000A38, 0x0007000C,
|
||||
0x0000001D, 0x00005E07, 0x00000001, 0x00000028, 0x00000504, 0x00004748,
|
||||
0x00050051, 0x0000000D, 0x00005F0B, 0x00005DB6, 0x00000000, 0x00050051,
|
||||
0x0000000D, 0x000037F0, 0x00005E07, 0x00000000, 0x00050050, 0x00000013,
|
||||
0x00004B23, 0x00005F0B, 0x000037F0, 0x0006000C, 0x0000000B, 0x00002174,
|
||||
0x00000001, 0x0000003A, 0x00004B23, 0x00050051, 0x0000000D, 0x00005BC2,
|
||||
0x00005DB6, 0x00000001, 0x00050051, 0x0000000D, 0x000039AA, 0x00005E07,
|
||||
0x00000001, 0x00050050, 0x00000013, 0x00004B24, 0x00005BC2, 0x000039AA,
|
||||
0x0006000C, 0x0000000B, 0x00002175, 0x00000001, 0x0000003A, 0x00004B24,
|
||||
0x00050051, 0x0000000D, 0x00005BC3, 0x00005DB6, 0x00000002, 0x00050051,
|
||||
0x0000000D, 0x000039AB, 0x00005E07, 0x00000002, 0x00050050, 0x00000013,
|
||||
0x00004B25, 0x00005BC3, 0x000039AB, 0x0006000C, 0x0000000B, 0x00002176,
|
||||
0x00000001, 0x0000003A, 0x00004B25, 0x00050051, 0x0000000D, 0x00005BC4,
|
||||
0x00005DB6, 0x00000003, 0x00050051, 0x0000000D, 0x000039AC, 0x00005E07,
|
||||
0x00000003, 0x00050050, 0x00000013, 0x00004B0E, 0x00005BC4, 0x000039AC,
|
||||
0x0006000C, 0x0000000B, 0x000020EF, 0x00000001, 0x0000003A, 0x00004B0E,
|
||||
0x00070050, 0x00000017, 0x00003ABC, 0x00002174, 0x00002175, 0x00002176,
|
||||
0x000020EF, 0x00060041, 0x00000294, 0x00004EBE, 0x0000140E, 0x00000A0B,
|
||||
0x00003CAC, 0x0003003E, 0x00004EBE, 0x00003ABC, 0x000200F9, 0x00004C7A,
|
||||
0x000200F8, 0x00004C7A, 0x000100FD, 0x00010038,
|
||||
};
|
682
src/xenia/gpu/shaders/bytecode/vulkan_spirv/texture_load_rg16_unorm_float_cs.h
generated
Normal file
682
src/xenia/gpu/shaders/bytecode/vulkan_spirv/texture_load_rg16_unorm_float_cs.h
generated
Normal file
|
@ -0,0 +1,682 @@
|
|||
// Generated with `xb buildshaders`.
|
||||
#if 0
|
||||
; SPIR-V
|
||||
; Version: 1.0
|
||||
; Generator: Khronos Glslang Reference Front End; 10
|
||||
; Bound: 25179
|
||||
; Schema: 0
|
||||
OpCapability Shader
|
||||
%1 = OpExtInstImport "GLSL.std.450"
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %5663 "main" %gl_GlobalInvocationID
|
||||
OpExecutionMode %5663 LocalSize 4 32 1
|
||||
OpMemberDecorate %_struct_1161 0 Offset 0
|
||||
OpMemberDecorate %_struct_1161 1 Offset 4
|
||||
OpMemberDecorate %_struct_1161 2 Offset 8
|
||||
OpMemberDecorate %_struct_1161 3 Offset 12
|
||||
OpMemberDecorate %_struct_1161 4 Offset 16
|
||||
OpMemberDecorate %_struct_1161 5 Offset 28
|
||||
OpMemberDecorate %_struct_1161 6 Offset 32
|
||||
OpMemberDecorate %_struct_1161 7 Offset 36
|
||||
OpDecorate %_struct_1161 Block
|
||||
OpDecorate %5245 DescriptorSet 2
|
||||
OpDecorate %5245 Binding 0
|
||||
OpDecorate %gl_GlobalInvocationID BuiltIn GlobalInvocationId
|
||||
OpDecorate %_runtimearr_v4uint ArrayStride 16
|
||||
OpMemberDecorate %_struct_1972 0 NonReadable
|
||||
OpMemberDecorate %_struct_1972 0 Offset 0
|
||||
OpDecorate %_struct_1972 BufferBlock
|
||||
OpDecorate %5134 DescriptorSet 0
|
||||
OpDecorate %5134 Binding 0
|
||||
OpDecorate %_runtimearr_v4uint_0 ArrayStride 16
|
||||
OpMemberDecorate %_struct_1973 0 NonWritable
|
||||
OpMemberDecorate %_struct_1973 0 Offset 0
|
||||
OpDecorate %_struct_1973 BufferBlock
|
||||
OpDecorate %4218 DescriptorSet 1
|
||||
OpDecorate %4218 Binding 0
|
||||
OpDecorate %gl_WorkGroupSize BuiltIn WorkgroupSize
|
||||
%void = OpTypeVoid
|
||||
%1282 = OpTypeFunction %void
|
||||
%uint = OpTypeInt 32 0
|
||||
%v4uint = OpTypeVector %uint 4
|
||||
%int = OpTypeInt 32 1
|
||||
%v2int = OpTypeVector %int 2
|
||||
%v3int = OpTypeVector %int 3
|
||||
%bool = OpTypeBool
|
||||
%v3uint = OpTypeVector %uint 3
|
||||
%float = OpTypeFloat 32
|
||||
%v4float = OpTypeVector %float 4
|
||||
%uint_65535 = OpConstant %uint 65535
|
||||
%float_1_52590219en05 = OpConstant %float 1.52590219e-05
|
||||
%uint_16 = OpConstant %uint 16
|
||||
%uint_0 = OpConstant %uint 0
|
||||
%v2float = OpTypeVector %float 2
|
||||
%uint_1 = OpConstant %uint 1
|
||||
%uint_2 = OpConstant %uint 2
|
||||
%uint_3 = OpConstant %uint 3
|
||||
%uint_16711935 = OpConstant %uint 16711935
|
||||
%uint_8 = OpConstant %uint 8
|
||||
%uint_4278255360 = OpConstant %uint 4278255360
|
||||
%int_5 = OpConstant %int 5
|
||||
%uint_5 = OpConstant %uint 5
|
||||
%int_7 = OpConstant %int 7
|
||||
%int_14 = OpConstant %int 14
|
||||
%int_2 = OpConstant %int 2
|
||||
%int_n16 = OpConstant %int -16
|
||||
%int_1 = OpConstant %int 1
|
||||
%int_15 = OpConstant %int 15
|
||||
%int_4 = OpConstant %int 4
|
||||
%int_n512 = OpConstant %int -512
|
||||
%int_3 = OpConstant %int 3
|
||||
%int_16 = OpConstant %int 16
|
||||
%int_448 = OpConstant %int 448
|
||||
%int_8 = OpConstant %int 8
|
||||
%int_6 = OpConstant %int 6
|
||||
%int_63 = OpConstant %int 63
|
||||
%uint_4 = OpConstant %uint 4
|
||||
%int_268435455 = OpConstant %int 268435455
|
||||
%int_n2 = OpConstant %int -2
|
||||
%uint_32 = OpConstant %uint 32
|
||||
%_struct_1161 = OpTypeStruct %uint %uint %uint %uint %v3uint %uint %uint %uint
|
||||
%_ptr_Uniform__struct_1161 = OpTypePointer Uniform %_struct_1161
|
||||
%5245 = OpVariable %_ptr_Uniform__struct_1161 Uniform
|
||||
%int_0 = OpConstant %int 0
|
||||
%_ptr_Uniform_uint = OpTypePointer Uniform %uint
|
||||
%_ptr_Uniform_v3uint = OpTypePointer Uniform %v3uint
|
||||
%v2uint = OpTypeVector %uint 2
|
||||
%_ptr_Input_v3uint = OpTypePointer Input %v3uint
|
||||
%gl_GlobalInvocationID = OpVariable %_ptr_Input_v3uint Input
|
||||
%2603 = OpConstantComposite %v3uint %uint_3 %uint_0 %uint_0
|
||||
%v2bool = OpTypeVector %bool 2
|
||||
%_runtimearr_v4uint = OpTypeRuntimeArray %v4uint
|
||||
%_struct_1972 = OpTypeStruct %_runtimearr_v4uint
|
||||
%_ptr_Uniform__struct_1972 = OpTypePointer Uniform %_struct_1972
|
||||
%5134 = OpVariable %_ptr_Uniform__struct_1972 Uniform
|
||||
%_runtimearr_v4uint_0 = OpTypeRuntimeArray %v4uint
|
||||
%_struct_1973 = OpTypeStruct %_runtimearr_v4uint_0
|
||||
%_ptr_Uniform__struct_1973 = OpTypePointer Uniform %_struct_1973
|
||||
%4218 = OpVariable %_ptr_Uniform__struct_1973 Uniform
|
||||
%_ptr_Uniform_v4uint = OpTypePointer Uniform %v4uint
|
||||
%gl_WorkGroupSize = OpConstantComposite %v3uint %uint_4 %uint_32 %uint_1
|
||||
%uint_9 = OpConstant %uint 9
|
||||
%2510 = OpConstantComposite %v4uint %uint_16711935 %uint_16711935 %uint_16711935 %uint_16711935
|
||||
%317 = OpConstantComposite %v4uint %uint_8 %uint_8 %uint_8 %uint_8
|
||||
%1838 = OpConstantComposite %v4uint %uint_4278255360 %uint_4278255360 %uint_4278255360 %uint_4278255360
|
||||
%749 = OpConstantComposite %v4uint %uint_16 %uint_16 %uint_16 %uint_16
|
||||
%850 = OpConstantComposite %v4uint %uint_65535 %uint_65535 %uint_65535 %uint_65535
|
||||
%5663 = OpFunction %void None %1282
|
||||
%15110 = OpLabel
|
||||
OpSelectionMerge %19578 None
|
||||
OpSwitch %uint_0 %15137
|
||||
%15137 = OpLabel
|
||||
%12591 = OpLoad %v3uint %gl_GlobalInvocationID
|
||||
%10229 = OpShiftLeftLogical %v3uint %12591 %2603
|
||||
%25178 = OpAccessChain %_ptr_Uniform_v3uint %5245 %int_4
|
||||
%22965 = OpLoad %v3uint %25178
|
||||
%18835 = OpVectorShuffle %v2uint %10229 %10229 0 1
|
||||
%6626 = OpVectorShuffle %v2uint %22965 %22965 0 1
|
||||
%17032 = OpUGreaterThanEqual %v2bool %18835 %6626
|
||||
%24679 = OpAny %bool %17032
|
||||
OpSelectionMerge %6282 DontFlatten
|
||||
OpBranchConditional %24679 %21992 %6282
|
||||
%21992 = OpLabel
|
||||
OpBranch %19578
|
||||
%6282 = OpLabel
|
||||
%6795 = OpBitcast %v3int %10229
|
||||
%18792 = OpAccessChain %_ptr_Uniform_uint %5245 %int_6
|
||||
%9788 = OpLoad %uint %18792
|
||||
%20376 = OpCompositeExtract %uint %22965 1
|
||||
%14692 = OpCompositeExtract %int %6795 0
|
||||
%22810 = OpIMul %int %14692 %int_4
|
||||
%6362 = OpCompositeExtract %int %6795 2
|
||||
%14505 = OpBitcast %int %20376
|
||||
%11279 = OpIMul %int %6362 %14505
|
||||
%17598 = OpCompositeExtract %int %6795 1
|
||||
%22228 = OpIAdd %int %11279 %17598
|
||||
%22405 = OpBitcast %int %9788
|
||||
%24535 = OpIMul %int %22228 %22405
|
||||
%7061 = OpIAdd %int %22810 %24535
|
||||
%19270 = OpBitcast %uint %7061
|
||||
%19460 = OpAccessChain %_ptr_Uniform_uint %5245 %int_5
|
||||
%22875 = OpLoad %uint %19460
|
||||
%8517 = OpIAdd %uint %19270 %22875
|
||||
%21670 = OpShiftRightLogical %uint %8517 %uint_4
|
||||
%20950 = OpAccessChain %_ptr_Uniform_uint %5245 %int_0
|
||||
%21411 = OpLoad %uint %20950
|
||||
%6381 = OpBitwiseAnd %uint %21411 %uint_1
|
||||
%10467 = OpINotEqual %bool %6381 %uint_0
|
||||
OpSelectionMerge %23266 DontFlatten
|
||||
OpBranchConditional %10467 %10108 %10765
|
||||
%10108 = OpLabel
|
||||
%23508 = OpBitwiseAnd %uint %21411 %uint_2
|
||||
%16300 = OpINotEqual %bool %23508 %uint_0
|
||||
OpSelectionMerge %7691 DontFlatten
|
||||
OpBranchConditional %16300 %12129 %25128
|
||||
%12129 = OpLabel
|
||||
%18210 = OpAccessChain %_ptr_Uniform_uint %5245 %int_2
|
||||
%15627 = OpLoad %uint %18210
|
||||
%22624 = OpAccessChain %_ptr_Uniform_uint %5245 %int_3
|
||||
%21535 = OpLoad %uint %22624
|
||||
%14923 = OpShiftRightArithmetic %int %17598 %int_4
|
||||
%18773 = OpShiftRightArithmetic %int %6362 %int_2
|
||||
%18759 = OpShiftRightLogical %uint %21535 %uint_4
|
||||
%6314 = OpBitcast %int %18759
|
||||
%21281 = OpIMul %int %18773 %6314
|
||||
%15143 = OpIAdd %int %14923 %21281
|
||||
%9032 = OpShiftRightLogical %uint %15627 %uint_5
|
||||
%14593 = OpBitcast %int %9032
|
||||
%8436 = OpIMul %int %15143 %14593
|
||||
%12986 = OpShiftRightArithmetic %int %14692 %int_5
|
||||
%24558 = OpIAdd %int %12986 %8436
|
||||
%8797 = OpShiftLeftLogical %int %24558 %uint_8
|
||||
%11510 = OpBitwiseAnd %int %8797 %int_268435455
|
||||
%18938 = OpShiftLeftLogical %int %11510 %int_1
|
||||
%19768 = OpBitwiseAnd %int %14692 %int_7
|
||||
%12600 = OpBitwiseAnd %int %17598 %int_6
|
||||
%17741 = OpShiftLeftLogical %int %12600 %int_2
|
||||
%17227 = OpIAdd %int %19768 %17741
|
||||
%7048 = OpShiftLeftLogical %int %17227 %uint_8
|
||||
%24035 = OpShiftRightArithmetic %int %7048 %int_6
|
||||
%8725 = OpShiftRightArithmetic %int %17598 %int_3
|
||||
%13731 = OpIAdd %int %8725 %18773
|
||||
%23052 = OpBitwiseAnd %int %13731 %int_1
|
||||
%16658 = OpShiftRightArithmetic %int %14692 %int_3
|
||||
%18794 = OpShiftLeftLogical %int %23052 %int_1
|
||||
%13501 = OpIAdd %int %16658 %18794
|
||||
%19165 = OpBitwiseAnd %int %13501 %int_3
|
||||
%21578 = OpShiftLeftLogical %int %19165 %int_1
|
||||
%15435 = OpIAdd %int %23052 %21578
|
||||
%13150 = OpBitwiseAnd %int %24035 %int_n16
|
||||
%20336 = OpIAdd %int %18938 %13150
|
||||
%23345 = OpShiftLeftLogical %int %20336 %int_1
|
||||
%23274 = OpBitwiseAnd %int %24035 %int_15
|
||||
%10332 = OpIAdd %int %23345 %23274
|
||||
%18356 = OpBitwiseAnd %int %6362 %int_3
|
||||
%21579 = OpShiftLeftLogical %int %18356 %uint_8
|
||||
%16727 = OpIAdd %int %10332 %21579
|
||||
%19166 = OpBitwiseAnd %int %17598 %int_1
|
||||
%21580 = OpShiftLeftLogical %int %19166 %int_4
|
||||
%16728 = OpIAdd %int %16727 %21580
|
||||
%20438 = OpBitwiseAnd %int %15435 %int_1
|
||||
%9987 = OpShiftLeftLogical %int %20438 %int_3
|
||||
%13106 = OpShiftRightArithmetic %int %16728 %int_6
|
||||
%14038 = OpBitwiseAnd %int %13106 %int_7
|
||||
%13330 = OpIAdd %int %9987 %14038
|
||||
%23346 = OpShiftLeftLogical %int %13330 %int_3
|
||||
%23217 = OpBitwiseAnd %int %15435 %int_n2
|
||||
%10908 = OpIAdd %int %23346 %23217
|
||||
%23347 = OpShiftLeftLogical %int %10908 %int_2
|
||||
%23218 = OpBitwiseAnd %int %16728 %int_n512
|
||||
%10909 = OpIAdd %int %23347 %23218
|
||||
%23348 = OpShiftLeftLogical %int %10909 %int_3
|
||||
%24224 = OpBitwiseAnd %int %16728 %int_63
|
||||
%21741 = OpIAdd %int %23348 %24224
|
||||
OpBranch %7691
|
||||
%25128 = OpLabel
|
||||
%6796 = OpBitcast %v2int %18835
|
||||
%18793 = OpAccessChain %_ptr_Uniform_uint %5245 %int_2
|
||||
%11954 = OpLoad %uint %18793
|
||||
%18756 = OpCompositeExtract %int %6796 0
|
||||
%19701 = OpShiftRightArithmetic %int %18756 %int_5
|
||||
%10055 = OpCompositeExtract %int %6796 1
|
||||
%16476 = OpShiftRightArithmetic %int %10055 %int_5
|
||||
%23373 = OpShiftRightLogical %uint %11954 %uint_5
|
||||
%6315 = OpBitcast %int %23373
|
||||
%21319 = OpIMul %int %16476 %6315
|
||||
%16222 = OpIAdd %int %19701 %21319
|
||||
%19086 = OpShiftLeftLogical %int %16222 %uint_9
|
||||
%10934 = OpBitwiseAnd %int %18756 %int_7
|
||||
%12601 = OpBitwiseAnd %int %10055 %int_14
|
||||
%17742 = OpShiftLeftLogical %int %12601 %int_2
|
||||
%17303 = OpIAdd %int %10934 %17742
|
||||
%6375 = OpShiftLeftLogical %int %17303 %uint_2
|
||||
%10161 = OpBitwiseAnd %int %6375 %int_n16
|
||||
%12150 = OpShiftLeftLogical %int %10161 %int_1
|
||||
%15436 = OpIAdd %int %19086 %12150
|
||||
%13207 = OpBitwiseAnd %int %6375 %int_15
|
||||
%19760 = OpIAdd %int %15436 %13207
|
||||
%18357 = OpBitwiseAnd %int %10055 %int_1
|
||||
%21581 = OpShiftLeftLogical %int %18357 %int_4
|
||||
%16729 = OpIAdd %int %19760 %21581
|
||||
%20514 = OpBitwiseAnd %int %16729 %int_n512
|
||||
%9238 = OpShiftLeftLogical %int %20514 %int_3
|
||||
%18995 = OpBitwiseAnd %int %10055 %int_16
|
||||
%12151 = OpShiftLeftLogical %int %18995 %int_7
|
||||
%16730 = OpIAdd %int %9238 %12151
|
||||
%19167 = OpBitwiseAnd %int %16729 %int_448
|
||||
%21582 = OpShiftLeftLogical %int %19167 %int_2
|
||||
%16708 = OpIAdd %int %16730 %21582
|
||||
%20611 = OpBitwiseAnd %int %10055 %int_8
|
||||
%16831 = OpShiftRightArithmetic %int %20611 %int_2
|
||||
%7916 = OpShiftRightArithmetic %int %18756 %int_3
|
||||
%13750 = OpIAdd %int %16831 %7916
|
||||
%21587 = OpBitwiseAnd %int %13750 %int_3
|
||||
%21583 = OpShiftLeftLogical %int %21587 %int_6
|
||||
%15437 = OpIAdd %int %16708 %21583
|
||||
%14157 = OpBitwiseAnd %int %16729 %int_63
|
||||
%12098 = OpIAdd %int %15437 %14157
|
||||
OpBranch %7691
|
||||
%7691 = OpLabel
|
||||
%10540 = OpPhi %int %21741 %12129 %12098 %25128
|
||||
OpBranch %23266
|
||||
%10765 = OpLabel
|
||||
%20632 = OpAccessChain %_ptr_Uniform_uint %5245 %int_2
|
||||
%15628 = OpLoad %uint %20632
|
||||
%21275 = OpAccessChain %_ptr_Uniform_uint %5245 %int_3
|
||||
%13550 = OpLoad %uint %21275
|
||||
%15070 = OpBitcast %int %13550
|
||||
%18927 = OpIMul %int %6362 %15070
|
||||
%8334 = OpIAdd %int %18927 %17598
|
||||
%8952 = OpBitcast %int %15628
|
||||
%7839 = OpIMul %int %8334 %8952
|
||||
%7984 = OpIAdd %int %22810 %7839
|
||||
OpBranch %23266
|
||||
%23266 = OpLabel
|
||||
%19748 = OpPhi %int %10540 %7691 %7984 %10765
|
||||
%24922 = OpAccessChain %_ptr_Uniform_uint %5245 %int_1
|
||||
%7502 = OpLoad %uint %24922
|
||||
%15686 = OpBitcast %int %7502
|
||||
%15579 = OpIAdd %int %15686 %19748
|
||||
%18556 = OpBitcast %uint %15579
|
||||
%21493 = OpShiftRightLogical %uint %18556 %uint_4
|
||||
%14997 = OpShiftRightLogical %uint %21411 %uint_2
|
||||
%8394 = OpBitwiseAnd %uint %14997 %uint_3
|
||||
%20727 = OpAccessChain %_ptr_Uniform_v4uint %4218 %int_0 %21493
|
||||
%8142 = OpLoad %v4uint %20727
|
||||
%13760 = OpIEqual %bool %8394 %uint_1
|
||||
%21366 = OpIEqual %bool %8394 %uint_2
|
||||
%22150 = OpLogicalOr %bool %13760 %21366
|
||||
OpSelectionMerge %13411 None
|
||||
OpBranchConditional %22150 %10583 %13411
|
||||
%10583 = OpLabel
|
||||
%18271 = OpBitwiseAnd %v4uint %8142 %2510
|
||||
%9425 = OpShiftLeftLogical %v4uint %18271 %317
|
||||
%20652 = OpBitwiseAnd %v4uint %8142 %1838
|
||||
%17549 = OpShiftRightLogical %v4uint %20652 %317
|
||||
%16376 = OpBitwiseOr %v4uint %9425 %17549
|
||||
OpBranch %13411
|
||||
%13411 = OpLabel
|
||||
%22649 = OpPhi %v4uint %8142 %23266 %16376 %10583
|
||||
%19638 = OpIEqual %bool %8394 %uint_3
|
||||
%15139 = OpLogicalOr %bool %21366 %19638
|
||||
OpSelectionMerge %13962 None
|
||||
OpBranchConditional %15139 %11064 %13962
|
||||
%11064 = OpLabel
|
||||
%24087 = OpShiftLeftLogical %v4uint %22649 %749
|
||||
%15335 = OpShiftRightLogical %v4uint %22649 %749
|
||||
%10728 = OpBitwiseOr %v4uint %24087 %15335
|
||||
OpBranch %13962
|
||||
%13962 = OpLabel
|
||||
%16606 = OpPhi %v4uint %22649 %13411 %10728 %11064
|
||||
%18240 = OpBitwiseAnd %v4uint %16606 %850
|
||||
%9137 = OpConvertUToF %v4float %18240
|
||||
%19365 = OpVectorTimesScalar %v4float %9137 %float_1_52590219en05
|
||||
%23367 = OpShiftRightLogical %v4uint %16606 %749
|
||||
%18492 = OpConvertUToF %v4float %23367
|
||||
%18450 = OpVectorTimesScalar %v4float %18492 %float_1_52590219en05
|
||||
%6268 = OpCompositeExtract %float %19365 0
|
||||
%13806 = OpCompositeExtract %float %18450 0
|
||||
%19232 = OpCompositeConstruct %v2float %6268 %13806
|
||||
%8561 = OpExtInst %uint %1 PackHalf2x16 %19232
|
||||
%23487 = OpCompositeExtract %float %19365 1
|
||||
%14759 = OpCompositeExtract %float %18450 1
|
||||
%19233 = OpCompositeConstruct %v2float %23487 %14759
|
||||
%8562 = OpExtInst %uint %1 PackHalf2x16 %19233
|
||||
%23488 = OpCompositeExtract %float %19365 2
|
||||
%14760 = OpCompositeExtract %float %18450 2
|
||||
%19234 = OpCompositeConstruct %v2float %23488 %14760
|
||||
%8563 = OpExtInst %uint %1 PackHalf2x16 %19234
|
||||
%23489 = OpCompositeExtract %float %19365 3
|
||||
%14761 = OpCompositeExtract %float %18450 3
|
||||
%19213 = OpCompositeConstruct %v2float %23489 %14761
|
||||
%8430 = OpExtInst %uint %1 PackHalf2x16 %19213
|
||||
%15035 = OpCompositeConstruct %v4uint %8561 %8562 %8563 %8430
|
||||
%17859 = OpAccessChain %_ptr_Uniform_v4uint %5134 %int_0 %21670
|
||||
OpStore %17859 %15035
|
||||
%15044 = OpIAdd %uint %21670 %int_1
|
||||
%18776 = OpSelect %uint %10467 %uint_32 %uint_16
|
||||
%11803 = OpShiftRightLogical %uint %18776 %uint_4
|
||||
%13947 = OpIAdd %uint %21493 %11803
|
||||
%22298 = OpAccessChain %_ptr_Uniform_v4uint %4218 %int_0 %13947
|
||||
%6578 = OpLoad %v4uint %22298
|
||||
OpSelectionMerge %14874 None
|
||||
OpBranchConditional %22150 %10584 %14874
|
||||
%10584 = OpLabel
|
||||
%18272 = OpBitwiseAnd %v4uint %6578 %2510
|
||||
%9426 = OpShiftLeftLogical %v4uint %18272 %317
|
||||
%20653 = OpBitwiseAnd %v4uint %6578 %1838
|
||||
%17550 = OpShiftRightLogical %v4uint %20653 %317
|
||||
%16377 = OpBitwiseOr %v4uint %9426 %17550
|
||||
OpBranch %14874
|
||||
%14874 = OpLabel
|
||||
%10924 = OpPhi %v4uint %6578 %13962 %16377 %10584
|
||||
OpSelectionMerge %13963 None
|
||||
OpBranchConditional %15139 %11065 %13963
|
||||
%11065 = OpLabel
|
||||
%24088 = OpShiftLeftLogical %v4uint %10924 %749
|
||||
%15336 = OpShiftRightLogical %v4uint %10924 %749
|
||||
%10729 = OpBitwiseOr %v4uint %24088 %15336
|
||||
OpBranch %13963
|
||||
%13963 = OpLabel
|
||||
%16607 = OpPhi %v4uint %10924 %14874 %10729 %11065
|
||||
%18241 = OpBitwiseAnd %v4uint %16607 %850
|
||||
%9138 = OpConvertUToF %v4float %18241
|
||||
%19366 = OpVectorTimesScalar %v4float %9138 %float_1_52590219en05
|
||||
%23368 = OpShiftRightLogical %v4uint %16607 %749
|
||||
%18493 = OpConvertUToF %v4float %23368
|
||||
%18451 = OpVectorTimesScalar %v4float %18493 %float_1_52590219en05
|
||||
%6269 = OpCompositeExtract %float %19366 0
|
||||
%13807 = OpCompositeExtract %float %18451 0
|
||||
%19235 = OpCompositeConstruct %v2float %6269 %13807
|
||||
%8564 = OpExtInst %uint %1 PackHalf2x16 %19235
|
||||
%23490 = OpCompositeExtract %float %19366 1
|
||||
%14762 = OpCompositeExtract %float %18451 1
|
||||
%19236 = OpCompositeConstruct %v2float %23490 %14762
|
||||
%8565 = OpExtInst %uint %1 PackHalf2x16 %19236
|
||||
%23491 = OpCompositeExtract %float %19366 2
|
||||
%14763 = OpCompositeExtract %float %18451 2
|
||||
%19237 = OpCompositeConstruct %v2float %23491 %14763
|
||||
%8566 = OpExtInst %uint %1 PackHalf2x16 %19237
|
||||
%23492 = OpCompositeExtract %float %19366 3
|
||||
%14764 = OpCompositeExtract %float %18451 3
|
||||
%19214 = OpCompositeConstruct %v2float %23492 %14764
|
||||
%8431 = OpExtInst %uint %1 PackHalf2x16 %19214
|
||||
%15036 = OpCompositeConstruct %v4uint %8564 %8565 %8566 %8431
|
||||
%20158 = OpAccessChain %_ptr_Uniform_v4uint %5134 %int_0 %15044
|
||||
OpStore %20158 %15036
|
||||
OpBranch %19578
|
||||
%19578 = OpLabel
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
#endif
|
||||
|
||||
const uint32_t texture_load_rg16_unorm_float_cs[] = {
|
||||
0x07230203, 0x00010000, 0x0008000A, 0x0000625B, 0x00000000, 0x00020011,
|
||||
0x00000001, 0x0006000B, 0x00000001, 0x4C534C47, 0x6474732E, 0x3035342E,
|
||||
0x00000000, 0x0003000E, 0x00000000, 0x00000001, 0x0006000F, 0x00000005,
|
||||
0x0000161F, 0x6E69616D, 0x00000000, 0x00000F48, 0x00060010, 0x0000161F,
|
||||
0x00000011, 0x00000004, 0x00000020, 0x00000001, 0x00050048, 0x00000489,
|
||||
0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x00000489, 0x00000001,
|
||||
0x00000023, 0x00000004, 0x00050048, 0x00000489, 0x00000002, 0x00000023,
|
||||
0x00000008, 0x00050048, 0x00000489, 0x00000003, 0x00000023, 0x0000000C,
|
||||
0x00050048, 0x00000489, 0x00000004, 0x00000023, 0x00000010, 0x00050048,
|
||||
0x00000489, 0x00000005, 0x00000023, 0x0000001C, 0x00050048, 0x00000489,
|
||||
0x00000006, 0x00000023, 0x00000020, 0x00050048, 0x00000489, 0x00000007,
|
||||
0x00000023, 0x00000024, 0x00030047, 0x00000489, 0x00000002, 0x00040047,
|
||||
0x0000147D, 0x00000022, 0x00000002, 0x00040047, 0x0000147D, 0x00000021,
|
||||
0x00000000, 0x00040047, 0x00000F48, 0x0000000B, 0x0000001C, 0x00040047,
|
||||
0x000007DC, 0x00000006, 0x00000010, 0x00040048, 0x000007B4, 0x00000000,
|
||||
0x00000019, 0x00050048, 0x000007B4, 0x00000000, 0x00000023, 0x00000000,
|
||||
0x00030047, 0x000007B4, 0x00000003, 0x00040047, 0x0000140E, 0x00000022,
|
||||
0x00000000, 0x00040047, 0x0000140E, 0x00000021, 0x00000000, 0x00040047,
|
||||
0x000007DD, 0x00000006, 0x00000010, 0x00040048, 0x000007B5, 0x00000000,
|
||||
0x00000018, 0x00050048, 0x000007B5, 0x00000000, 0x00000023, 0x00000000,
|
||||
0x00030047, 0x000007B5, 0x00000003, 0x00040047, 0x0000107A, 0x00000022,
|
||||
0x00000001, 0x00040047, 0x0000107A, 0x00000021, 0x00000000, 0x00040047,
|
||||
0x00000BC3, 0x0000000B, 0x00000019, 0x00020013, 0x00000008, 0x00030021,
|
||||
0x00000502, 0x00000008, 0x00040015, 0x0000000B, 0x00000020, 0x00000000,
|
||||
0x00040017, 0x00000017, 0x0000000B, 0x00000004, 0x00040015, 0x0000000C,
|
||||
0x00000020, 0x00000001, 0x00040017, 0x00000012, 0x0000000C, 0x00000002,
|
||||
0x00040017, 0x00000016, 0x0000000C, 0x00000003, 0x00020014, 0x00000009,
|
||||
0x00040017, 0x00000014, 0x0000000B, 0x00000003, 0x00030016, 0x0000000D,
|
||||
0x00000020, 0x00040017, 0x0000001D, 0x0000000D, 0x00000004, 0x0004002B,
|
||||
0x0000000B, 0x000001C1, 0x0000FFFF, 0x0004002B, 0x0000000D, 0x0000092A,
|
||||
0x37800080, 0x0004002B, 0x0000000B, 0x00000A3A, 0x00000010, 0x0004002B,
|
||||
0x0000000B, 0x00000A0A, 0x00000000, 0x00040017, 0x00000013, 0x0000000D,
|
||||
0x00000002, 0x0004002B, 0x0000000B, 0x00000A0D, 0x00000001, 0x0004002B,
|
||||
0x0000000B, 0x00000A10, 0x00000002, 0x0004002B, 0x0000000B, 0x00000A13,
|
||||
0x00000003, 0x0004002B, 0x0000000B, 0x000008A6, 0x00FF00FF, 0x0004002B,
|
||||
0x0000000B, 0x00000A22, 0x00000008, 0x0004002B, 0x0000000B, 0x000005FD,
|
||||
0xFF00FF00, 0x0004002B, 0x0000000C, 0x00000A1A, 0x00000005, 0x0004002B,
|
||||
0x0000000B, 0x00000A19, 0x00000005, 0x0004002B, 0x0000000C, 0x00000A20,
|
||||
0x00000007, 0x0004002B, 0x0000000C, 0x00000A35, 0x0000000E, 0x0004002B,
|
||||
0x0000000C, 0x00000A11, 0x00000002, 0x0004002B, 0x0000000C, 0x000009DB,
|
||||
0xFFFFFFF0, 0x0004002B, 0x0000000C, 0x00000A0E, 0x00000001, 0x0004002B,
|
||||
0x0000000C, 0x00000A38, 0x0000000F, 0x0004002B, 0x0000000C, 0x00000A17,
|
||||
0x00000004, 0x0004002B, 0x0000000C, 0x0000040B, 0xFFFFFE00, 0x0004002B,
|
||||
0x0000000C, 0x00000A14, 0x00000003, 0x0004002B, 0x0000000C, 0x00000A3B,
|
||||
0x00000010, 0x0004002B, 0x0000000C, 0x00000388, 0x000001C0, 0x0004002B,
|
||||
0x0000000C, 0x00000A23, 0x00000008, 0x0004002B, 0x0000000C, 0x00000A1D,
|
||||
0x00000006, 0x0004002B, 0x0000000C, 0x00000AC8, 0x0000003F, 0x0004002B,
|
||||
0x0000000B, 0x00000A16, 0x00000004, 0x0004002B, 0x0000000C, 0x0000078B,
|
||||
0x0FFFFFFF, 0x0004002B, 0x0000000C, 0x00000A05, 0xFFFFFFFE, 0x0004002B,
|
||||
0x0000000B, 0x00000A6A, 0x00000020, 0x000A001E, 0x00000489, 0x0000000B,
|
||||
0x0000000B, 0x0000000B, 0x0000000B, 0x00000014, 0x0000000B, 0x0000000B,
|
||||
0x0000000B, 0x00040020, 0x00000706, 0x00000002, 0x00000489, 0x0004003B,
|
||||
0x00000706, 0x0000147D, 0x00000002, 0x0004002B, 0x0000000C, 0x00000A0B,
|
||||
0x00000000, 0x00040020, 0x00000288, 0x00000002, 0x0000000B, 0x00040020,
|
||||
0x00000291, 0x00000002, 0x00000014, 0x00040017, 0x00000011, 0x0000000B,
|
||||
0x00000002, 0x00040020, 0x00000292, 0x00000001, 0x00000014, 0x0004003B,
|
||||
0x00000292, 0x00000F48, 0x00000001, 0x0006002C, 0x00000014, 0x00000A2B,
|
||||
0x00000A13, 0x00000A0A, 0x00000A0A, 0x00040017, 0x0000000F, 0x00000009,
|
||||
0x00000002, 0x0003001D, 0x000007DC, 0x00000017, 0x0003001E, 0x000007B4,
|
||||
0x000007DC, 0x00040020, 0x00000A31, 0x00000002, 0x000007B4, 0x0004003B,
|
||||
0x00000A31, 0x0000140E, 0x00000002, 0x0003001D, 0x000007DD, 0x00000017,
|
||||
0x0003001E, 0x000007B5, 0x000007DD, 0x00040020, 0x00000A32, 0x00000002,
|
||||
0x000007B5, 0x0004003B, 0x00000A32, 0x0000107A, 0x00000002, 0x00040020,
|
||||
0x00000294, 0x00000002, 0x00000017, 0x0006002C, 0x00000014, 0x00000BC3,
|
||||
0x00000A16, 0x00000A6A, 0x00000A0D, 0x0004002B, 0x0000000B, 0x00000A25,
|
||||
0x00000009, 0x0007002C, 0x00000017, 0x000009CE, 0x000008A6, 0x000008A6,
|
||||
0x000008A6, 0x000008A6, 0x0007002C, 0x00000017, 0x0000013D, 0x00000A22,
|
||||
0x00000A22, 0x00000A22, 0x00000A22, 0x0007002C, 0x00000017, 0x0000072E,
|
||||
0x000005FD, 0x000005FD, 0x000005FD, 0x000005FD, 0x0007002C, 0x00000017,
|
||||
0x000002ED, 0x00000A3A, 0x00000A3A, 0x00000A3A, 0x00000A3A, 0x0007002C,
|
||||
0x00000017, 0x00000352, 0x000001C1, 0x000001C1, 0x000001C1, 0x000001C1,
|
||||
0x00050036, 0x00000008, 0x0000161F, 0x00000000, 0x00000502, 0x000200F8,
|
||||
0x00003B06, 0x000300F7, 0x00004C7A, 0x00000000, 0x000300FB, 0x00000A0A,
|
||||
0x00003B21, 0x000200F8, 0x00003B21, 0x0004003D, 0x00000014, 0x0000312F,
|
||||
0x00000F48, 0x000500C4, 0x00000014, 0x000027F5, 0x0000312F, 0x00000A2B,
|
||||
0x00050041, 0x00000291, 0x0000625A, 0x0000147D, 0x00000A17, 0x0004003D,
|
||||
0x00000014, 0x000059B5, 0x0000625A, 0x0007004F, 0x00000011, 0x00004993,
|
||||
0x000027F5, 0x000027F5, 0x00000000, 0x00000001, 0x0007004F, 0x00000011,
|
||||
0x000019E2, 0x000059B5, 0x000059B5, 0x00000000, 0x00000001, 0x000500AE,
|
||||
0x0000000F, 0x00004288, 0x00004993, 0x000019E2, 0x0004009A, 0x00000009,
|
||||
0x00006067, 0x00004288, 0x000300F7, 0x0000188A, 0x00000002, 0x000400FA,
|
||||
0x00006067, 0x000055E8, 0x0000188A, 0x000200F8, 0x000055E8, 0x000200F9,
|
||||
0x00004C7A, 0x000200F8, 0x0000188A, 0x0004007C, 0x00000016, 0x00001A8B,
|
||||
0x000027F5, 0x00050041, 0x00000288, 0x00004968, 0x0000147D, 0x00000A1D,
|
||||
0x0004003D, 0x0000000B, 0x0000263C, 0x00004968, 0x00050051, 0x0000000B,
|
||||
0x00004F98, 0x000059B5, 0x00000001, 0x00050051, 0x0000000C, 0x00003964,
|
||||
0x00001A8B, 0x00000000, 0x00050084, 0x0000000C, 0x0000591A, 0x00003964,
|
||||
0x00000A17, 0x00050051, 0x0000000C, 0x000018DA, 0x00001A8B, 0x00000002,
|
||||
0x0004007C, 0x0000000C, 0x000038A9, 0x00004F98, 0x00050084, 0x0000000C,
|
||||
0x00002C0F, 0x000018DA, 0x000038A9, 0x00050051, 0x0000000C, 0x000044BE,
|
||||
0x00001A8B, 0x00000001, 0x00050080, 0x0000000C, 0x000056D4, 0x00002C0F,
|
||||
0x000044BE, 0x0004007C, 0x0000000C, 0x00005785, 0x0000263C, 0x00050084,
|
||||
0x0000000C, 0x00005FD7, 0x000056D4, 0x00005785, 0x00050080, 0x0000000C,
|
||||
0x00001B95, 0x0000591A, 0x00005FD7, 0x0004007C, 0x0000000B, 0x00004B46,
|
||||
0x00001B95, 0x00050041, 0x00000288, 0x00004C04, 0x0000147D, 0x00000A1A,
|
||||
0x0004003D, 0x0000000B, 0x0000595B, 0x00004C04, 0x00050080, 0x0000000B,
|
||||
0x00002145, 0x00004B46, 0x0000595B, 0x000500C2, 0x0000000B, 0x000054A6,
|
||||
0x00002145, 0x00000A16, 0x00050041, 0x00000288, 0x000051D6, 0x0000147D,
|
||||
0x00000A0B, 0x0004003D, 0x0000000B, 0x000053A3, 0x000051D6, 0x000500C7,
|
||||
0x0000000B, 0x000018ED, 0x000053A3, 0x00000A0D, 0x000500AB, 0x00000009,
|
||||
0x000028E3, 0x000018ED, 0x00000A0A, 0x000300F7, 0x00005AE2, 0x00000002,
|
||||
0x000400FA, 0x000028E3, 0x0000277C, 0x00002A0D, 0x000200F8, 0x0000277C,
|
||||
0x000500C7, 0x0000000B, 0x00005BD4, 0x000053A3, 0x00000A10, 0x000500AB,
|
||||
0x00000009, 0x00003FAC, 0x00005BD4, 0x00000A0A, 0x000300F7, 0x00001E0B,
|
||||
0x00000002, 0x000400FA, 0x00003FAC, 0x00002F61, 0x00006228, 0x000200F8,
|
||||
0x00002F61, 0x00050041, 0x00000288, 0x00004722, 0x0000147D, 0x00000A11,
|
||||
0x0004003D, 0x0000000B, 0x00003D0B, 0x00004722, 0x00050041, 0x00000288,
|
||||
0x00005860, 0x0000147D, 0x00000A14, 0x0004003D, 0x0000000B, 0x0000541F,
|
||||
0x00005860, 0x000500C3, 0x0000000C, 0x00003A4B, 0x000044BE, 0x00000A17,
|
||||
0x000500C3, 0x0000000C, 0x00004955, 0x000018DA, 0x00000A11, 0x000500C2,
|
||||
0x0000000B, 0x00004947, 0x0000541F, 0x00000A16, 0x0004007C, 0x0000000C,
|
||||
0x000018AA, 0x00004947, 0x00050084, 0x0000000C, 0x00005321, 0x00004955,
|
||||
0x000018AA, 0x00050080, 0x0000000C, 0x00003B27, 0x00003A4B, 0x00005321,
|
||||
0x000500C2, 0x0000000B, 0x00002348, 0x00003D0B, 0x00000A19, 0x0004007C,
|
||||
0x0000000C, 0x00003901, 0x00002348, 0x00050084, 0x0000000C, 0x000020F4,
|
||||
0x00003B27, 0x00003901, 0x000500C3, 0x0000000C, 0x000032BA, 0x00003964,
|
||||
0x00000A1A, 0x00050080, 0x0000000C, 0x00005FEE, 0x000032BA, 0x000020F4,
|
||||
0x000500C4, 0x0000000C, 0x0000225D, 0x00005FEE, 0x00000A22, 0x000500C7,
|
||||
0x0000000C, 0x00002CF6, 0x0000225D, 0x0000078B, 0x000500C4, 0x0000000C,
|
||||
0x000049FA, 0x00002CF6, 0x00000A0E, 0x000500C7, 0x0000000C, 0x00004D38,
|
||||
0x00003964, 0x00000A20, 0x000500C7, 0x0000000C, 0x00003138, 0x000044BE,
|
||||
0x00000A1D, 0x000500C4, 0x0000000C, 0x0000454D, 0x00003138, 0x00000A11,
|
||||
0x00050080, 0x0000000C, 0x0000434B, 0x00004D38, 0x0000454D, 0x000500C4,
|
||||
0x0000000C, 0x00001B88, 0x0000434B, 0x00000A22, 0x000500C3, 0x0000000C,
|
||||
0x00005DE3, 0x00001B88, 0x00000A1D, 0x000500C3, 0x0000000C, 0x00002215,
|
||||
0x000044BE, 0x00000A14, 0x00050080, 0x0000000C, 0x000035A3, 0x00002215,
|
||||
0x00004955, 0x000500C7, 0x0000000C, 0x00005A0C, 0x000035A3, 0x00000A0E,
|
||||
0x000500C3, 0x0000000C, 0x00004112, 0x00003964, 0x00000A14, 0x000500C4,
|
||||
0x0000000C, 0x0000496A, 0x00005A0C, 0x00000A0E, 0x00050080, 0x0000000C,
|
||||
0x000034BD, 0x00004112, 0x0000496A, 0x000500C7, 0x0000000C, 0x00004ADD,
|
||||
0x000034BD, 0x00000A14, 0x000500C4, 0x0000000C, 0x0000544A, 0x00004ADD,
|
||||
0x00000A0E, 0x00050080, 0x0000000C, 0x00003C4B, 0x00005A0C, 0x0000544A,
|
||||
0x000500C7, 0x0000000C, 0x0000335E, 0x00005DE3, 0x000009DB, 0x00050080,
|
||||
0x0000000C, 0x00004F70, 0x000049FA, 0x0000335E, 0x000500C4, 0x0000000C,
|
||||
0x00005B31, 0x00004F70, 0x00000A0E, 0x000500C7, 0x0000000C, 0x00005AEA,
|
||||
0x00005DE3, 0x00000A38, 0x00050080, 0x0000000C, 0x0000285C, 0x00005B31,
|
||||
0x00005AEA, 0x000500C7, 0x0000000C, 0x000047B4, 0x000018DA, 0x00000A14,
|
||||
0x000500C4, 0x0000000C, 0x0000544B, 0x000047B4, 0x00000A22, 0x00050080,
|
||||
0x0000000C, 0x00004157, 0x0000285C, 0x0000544B, 0x000500C7, 0x0000000C,
|
||||
0x00004ADE, 0x000044BE, 0x00000A0E, 0x000500C4, 0x0000000C, 0x0000544C,
|
||||
0x00004ADE, 0x00000A17, 0x00050080, 0x0000000C, 0x00004158, 0x00004157,
|
||||
0x0000544C, 0x000500C7, 0x0000000C, 0x00004FD6, 0x00003C4B, 0x00000A0E,
|
||||
0x000500C4, 0x0000000C, 0x00002703, 0x00004FD6, 0x00000A14, 0x000500C3,
|
||||
0x0000000C, 0x00003332, 0x00004158, 0x00000A1D, 0x000500C7, 0x0000000C,
|
||||
0x000036D6, 0x00003332, 0x00000A20, 0x00050080, 0x0000000C, 0x00003412,
|
||||
0x00002703, 0x000036D6, 0x000500C4, 0x0000000C, 0x00005B32, 0x00003412,
|
||||
0x00000A14, 0x000500C7, 0x0000000C, 0x00005AB1, 0x00003C4B, 0x00000A05,
|
||||
0x00050080, 0x0000000C, 0x00002A9C, 0x00005B32, 0x00005AB1, 0x000500C4,
|
||||
0x0000000C, 0x00005B33, 0x00002A9C, 0x00000A11, 0x000500C7, 0x0000000C,
|
||||
0x00005AB2, 0x00004158, 0x0000040B, 0x00050080, 0x0000000C, 0x00002A9D,
|
||||
0x00005B33, 0x00005AB2, 0x000500C4, 0x0000000C, 0x00005B34, 0x00002A9D,
|
||||
0x00000A14, 0x000500C7, 0x0000000C, 0x00005EA0, 0x00004158, 0x00000AC8,
|
||||
0x00050080, 0x0000000C, 0x000054ED, 0x00005B34, 0x00005EA0, 0x000200F9,
|
||||
0x00001E0B, 0x000200F8, 0x00006228, 0x0004007C, 0x00000012, 0x00001A8C,
|
||||
0x00004993, 0x00050041, 0x00000288, 0x00004969, 0x0000147D, 0x00000A11,
|
||||
0x0004003D, 0x0000000B, 0x00002EB2, 0x00004969, 0x00050051, 0x0000000C,
|
||||
0x00004944, 0x00001A8C, 0x00000000, 0x000500C3, 0x0000000C, 0x00004CF5,
|
||||
0x00004944, 0x00000A1A, 0x00050051, 0x0000000C, 0x00002747, 0x00001A8C,
|
||||
0x00000001, 0x000500C3, 0x0000000C, 0x0000405C, 0x00002747, 0x00000A1A,
|
||||
0x000500C2, 0x0000000B, 0x00005B4D, 0x00002EB2, 0x00000A19, 0x0004007C,
|
||||
0x0000000C, 0x000018AB, 0x00005B4D, 0x00050084, 0x0000000C, 0x00005347,
|
||||
0x0000405C, 0x000018AB, 0x00050080, 0x0000000C, 0x00003F5E, 0x00004CF5,
|
||||
0x00005347, 0x000500C4, 0x0000000C, 0x00004A8E, 0x00003F5E, 0x00000A25,
|
||||
0x000500C7, 0x0000000C, 0x00002AB6, 0x00004944, 0x00000A20, 0x000500C7,
|
||||
0x0000000C, 0x00003139, 0x00002747, 0x00000A35, 0x000500C4, 0x0000000C,
|
||||
0x0000454E, 0x00003139, 0x00000A11, 0x00050080, 0x0000000C, 0x00004397,
|
||||
0x00002AB6, 0x0000454E, 0x000500C4, 0x0000000C, 0x000018E7, 0x00004397,
|
||||
0x00000A10, 0x000500C7, 0x0000000C, 0x000027B1, 0x000018E7, 0x000009DB,
|
||||
0x000500C4, 0x0000000C, 0x00002F76, 0x000027B1, 0x00000A0E, 0x00050080,
|
||||
0x0000000C, 0x00003C4C, 0x00004A8E, 0x00002F76, 0x000500C7, 0x0000000C,
|
||||
0x00003397, 0x000018E7, 0x00000A38, 0x00050080, 0x0000000C, 0x00004D30,
|
||||
0x00003C4C, 0x00003397, 0x000500C7, 0x0000000C, 0x000047B5, 0x00002747,
|
||||
0x00000A0E, 0x000500C4, 0x0000000C, 0x0000544D, 0x000047B5, 0x00000A17,
|
||||
0x00050080, 0x0000000C, 0x00004159, 0x00004D30, 0x0000544D, 0x000500C7,
|
||||
0x0000000C, 0x00005022, 0x00004159, 0x0000040B, 0x000500C4, 0x0000000C,
|
||||
0x00002416, 0x00005022, 0x00000A14, 0x000500C7, 0x0000000C, 0x00004A33,
|
||||
0x00002747, 0x00000A3B, 0x000500C4, 0x0000000C, 0x00002F77, 0x00004A33,
|
||||
0x00000A20, 0x00050080, 0x0000000C, 0x0000415A, 0x00002416, 0x00002F77,
|
||||
0x000500C7, 0x0000000C, 0x00004ADF, 0x00004159, 0x00000388, 0x000500C4,
|
||||
0x0000000C, 0x0000544E, 0x00004ADF, 0x00000A11, 0x00050080, 0x0000000C,
|
||||
0x00004144, 0x0000415A, 0x0000544E, 0x000500C7, 0x0000000C, 0x00005083,
|
||||
0x00002747, 0x00000A23, 0x000500C3, 0x0000000C, 0x000041BF, 0x00005083,
|
||||
0x00000A11, 0x000500C3, 0x0000000C, 0x00001EEC, 0x00004944, 0x00000A14,
|
||||
0x00050080, 0x0000000C, 0x000035B6, 0x000041BF, 0x00001EEC, 0x000500C7,
|
||||
0x0000000C, 0x00005453, 0x000035B6, 0x00000A14, 0x000500C4, 0x0000000C,
|
||||
0x0000544F, 0x00005453, 0x00000A1D, 0x00050080, 0x0000000C, 0x00003C4D,
|
||||
0x00004144, 0x0000544F, 0x000500C7, 0x0000000C, 0x0000374D, 0x00004159,
|
||||
0x00000AC8, 0x00050080, 0x0000000C, 0x00002F42, 0x00003C4D, 0x0000374D,
|
||||
0x000200F9, 0x00001E0B, 0x000200F8, 0x00001E0B, 0x000700F5, 0x0000000C,
|
||||
0x0000292C, 0x000054ED, 0x00002F61, 0x00002F42, 0x00006228, 0x000200F9,
|
||||
0x00005AE2, 0x000200F8, 0x00002A0D, 0x00050041, 0x00000288, 0x00005098,
|
||||
0x0000147D, 0x00000A11, 0x0004003D, 0x0000000B, 0x00003D0C, 0x00005098,
|
||||
0x00050041, 0x00000288, 0x0000531B, 0x0000147D, 0x00000A14, 0x0004003D,
|
||||
0x0000000B, 0x000034EE, 0x0000531B, 0x0004007C, 0x0000000C, 0x00003ADE,
|
||||
0x000034EE, 0x00050084, 0x0000000C, 0x000049EF, 0x000018DA, 0x00003ADE,
|
||||
0x00050080, 0x0000000C, 0x0000208E, 0x000049EF, 0x000044BE, 0x0004007C,
|
||||
0x0000000C, 0x000022F8, 0x00003D0C, 0x00050084, 0x0000000C, 0x00001E9F,
|
||||
0x0000208E, 0x000022F8, 0x00050080, 0x0000000C, 0x00001F30, 0x0000591A,
|
||||
0x00001E9F, 0x000200F9, 0x00005AE2, 0x000200F8, 0x00005AE2, 0x000700F5,
|
||||
0x0000000C, 0x00004D24, 0x0000292C, 0x00001E0B, 0x00001F30, 0x00002A0D,
|
||||
0x00050041, 0x00000288, 0x0000615A, 0x0000147D, 0x00000A0E, 0x0004003D,
|
||||
0x0000000B, 0x00001D4E, 0x0000615A, 0x0004007C, 0x0000000C, 0x00003D46,
|
||||
0x00001D4E, 0x00050080, 0x0000000C, 0x00003CDB, 0x00003D46, 0x00004D24,
|
||||
0x0004007C, 0x0000000B, 0x0000487C, 0x00003CDB, 0x000500C2, 0x0000000B,
|
||||
0x000053F5, 0x0000487C, 0x00000A16, 0x000500C2, 0x0000000B, 0x00003A95,
|
||||
0x000053A3, 0x00000A10, 0x000500C7, 0x0000000B, 0x000020CA, 0x00003A95,
|
||||
0x00000A13, 0x00060041, 0x00000294, 0x000050F7, 0x0000107A, 0x00000A0B,
|
||||
0x000053F5, 0x0004003D, 0x00000017, 0x00001FCE, 0x000050F7, 0x000500AA,
|
||||
0x00000009, 0x000035C0, 0x000020CA, 0x00000A0D, 0x000500AA, 0x00000009,
|
||||
0x00005376, 0x000020CA, 0x00000A10, 0x000500A6, 0x00000009, 0x00005686,
|
||||
0x000035C0, 0x00005376, 0x000300F7, 0x00003463, 0x00000000, 0x000400FA,
|
||||
0x00005686, 0x00002957, 0x00003463, 0x000200F8, 0x00002957, 0x000500C7,
|
||||
0x00000017, 0x0000475F, 0x00001FCE, 0x000009CE, 0x000500C4, 0x00000017,
|
||||
0x000024D1, 0x0000475F, 0x0000013D, 0x000500C7, 0x00000017, 0x000050AC,
|
||||
0x00001FCE, 0x0000072E, 0x000500C2, 0x00000017, 0x0000448D, 0x000050AC,
|
||||
0x0000013D, 0x000500C5, 0x00000017, 0x00003FF8, 0x000024D1, 0x0000448D,
|
||||
0x000200F9, 0x00003463, 0x000200F8, 0x00003463, 0x000700F5, 0x00000017,
|
||||
0x00005879, 0x00001FCE, 0x00005AE2, 0x00003FF8, 0x00002957, 0x000500AA,
|
||||
0x00000009, 0x00004CB6, 0x000020CA, 0x00000A13, 0x000500A6, 0x00000009,
|
||||
0x00003B23, 0x00005376, 0x00004CB6, 0x000300F7, 0x0000368A, 0x00000000,
|
||||
0x000400FA, 0x00003B23, 0x00002B38, 0x0000368A, 0x000200F8, 0x00002B38,
|
||||
0x000500C4, 0x00000017, 0x00005E17, 0x00005879, 0x000002ED, 0x000500C2,
|
||||
0x00000017, 0x00003BE7, 0x00005879, 0x000002ED, 0x000500C5, 0x00000017,
|
||||
0x000029E8, 0x00005E17, 0x00003BE7, 0x000200F9, 0x0000368A, 0x000200F8,
|
||||
0x0000368A, 0x000700F5, 0x00000017, 0x000040DE, 0x00005879, 0x00003463,
|
||||
0x000029E8, 0x00002B38, 0x000500C7, 0x00000017, 0x00004740, 0x000040DE,
|
||||
0x00000352, 0x00040070, 0x0000001D, 0x000023B1, 0x00004740, 0x0005008E,
|
||||
0x0000001D, 0x00004BA5, 0x000023B1, 0x0000092A, 0x000500C2, 0x00000017,
|
||||
0x00005B47, 0x000040DE, 0x000002ED, 0x00040070, 0x0000001D, 0x0000483C,
|
||||
0x00005B47, 0x0005008E, 0x0000001D, 0x00004812, 0x0000483C, 0x0000092A,
|
||||
0x00050051, 0x0000000D, 0x0000187C, 0x00004BA5, 0x00000000, 0x00050051,
|
||||
0x0000000D, 0x000035EE, 0x00004812, 0x00000000, 0x00050050, 0x00000013,
|
||||
0x00004B20, 0x0000187C, 0x000035EE, 0x0006000C, 0x0000000B, 0x00002171,
|
||||
0x00000001, 0x0000003A, 0x00004B20, 0x00050051, 0x0000000D, 0x00005BBF,
|
||||
0x00004BA5, 0x00000001, 0x00050051, 0x0000000D, 0x000039A7, 0x00004812,
|
||||
0x00000001, 0x00050050, 0x00000013, 0x00004B21, 0x00005BBF, 0x000039A7,
|
||||
0x0006000C, 0x0000000B, 0x00002172, 0x00000001, 0x0000003A, 0x00004B21,
|
||||
0x00050051, 0x0000000D, 0x00005BC0, 0x00004BA5, 0x00000002, 0x00050051,
|
||||
0x0000000D, 0x000039A8, 0x00004812, 0x00000002, 0x00050050, 0x00000013,
|
||||
0x00004B22, 0x00005BC0, 0x000039A8, 0x0006000C, 0x0000000B, 0x00002173,
|
||||
0x00000001, 0x0000003A, 0x00004B22, 0x00050051, 0x0000000D, 0x00005BC1,
|
||||
0x00004BA5, 0x00000003, 0x00050051, 0x0000000D, 0x000039A9, 0x00004812,
|
||||
0x00000003, 0x00050050, 0x00000013, 0x00004B0D, 0x00005BC1, 0x000039A9,
|
||||
0x0006000C, 0x0000000B, 0x000020EE, 0x00000001, 0x0000003A, 0x00004B0D,
|
||||
0x00070050, 0x00000017, 0x00003ABB, 0x00002171, 0x00002172, 0x00002173,
|
||||
0x000020EE, 0x00060041, 0x00000294, 0x000045C3, 0x0000140E, 0x00000A0B,
|
||||
0x000054A6, 0x0003003E, 0x000045C3, 0x00003ABB, 0x00050080, 0x0000000B,
|
||||
0x00003AC4, 0x000054A6, 0x00000A0E, 0x000600A9, 0x0000000B, 0x00004958,
|
||||
0x000028E3, 0x00000A6A, 0x00000A3A, 0x000500C2, 0x0000000B, 0x00002E1B,
|
||||
0x00004958, 0x00000A16, 0x00050080, 0x0000000B, 0x0000367B, 0x000053F5,
|
||||
0x00002E1B, 0x00060041, 0x00000294, 0x0000571A, 0x0000107A, 0x00000A0B,
|
||||
0x0000367B, 0x0004003D, 0x00000017, 0x000019B2, 0x0000571A, 0x000300F7,
|
||||
0x00003A1A, 0x00000000, 0x000400FA, 0x00005686, 0x00002958, 0x00003A1A,
|
||||
0x000200F8, 0x00002958, 0x000500C7, 0x00000017, 0x00004760, 0x000019B2,
|
||||
0x000009CE, 0x000500C4, 0x00000017, 0x000024D2, 0x00004760, 0x0000013D,
|
||||
0x000500C7, 0x00000017, 0x000050AD, 0x000019B2, 0x0000072E, 0x000500C2,
|
||||
0x00000017, 0x0000448E, 0x000050AD, 0x0000013D, 0x000500C5, 0x00000017,
|
||||
0x00003FF9, 0x000024D2, 0x0000448E, 0x000200F9, 0x00003A1A, 0x000200F8,
|
||||
0x00003A1A, 0x000700F5, 0x00000017, 0x00002AAC, 0x000019B2, 0x0000368A,
|
||||
0x00003FF9, 0x00002958, 0x000300F7, 0x0000368B, 0x00000000, 0x000400FA,
|
||||
0x00003B23, 0x00002B39, 0x0000368B, 0x000200F8, 0x00002B39, 0x000500C4,
|
||||
0x00000017, 0x00005E18, 0x00002AAC, 0x000002ED, 0x000500C2, 0x00000017,
|
||||
0x00003BE8, 0x00002AAC, 0x000002ED, 0x000500C5, 0x00000017, 0x000029E9,
|
||||
0x00005E18, 0x00003BE8, 0x000200F9, 0x0000368B, 0x000200F8, 0x0000368B,
|
||||
0x000700F5, 0x00000017, 0x000040DF, 0x00002AAC, 0x00003A1A, 0x000029E9,
|
||||
0x00002B39, 0x000500C7, 0x00000017, 0x00004741, 0x000040DF, 0x00000352,
|
||||
0x00040070, 0x0000001D, 0x000023B2, 0x00004741, 0x0005008E, 0x0000001D,
|
||||
0x00004BA6, 0x000023B2, 0x0000092A, 0x000500C2, 0x00000017, 0x00005B48,
|
||||
0x000040DF, 0x000002ED, 0x00040070, 0x0000001D, 0x0000483D, 0x00005B48,
|
||||
0x0005008E, 0x0000001D, 0x00004813, 0x0000483D, 0x0000092A, 0x00050051,
|
||||
0x0000000D, 0x0000187D, 0x00004BA6, 0x00000000, 0x00050051, 0x0000000D,
|
||||
0x000035EF, 0x00004813, 0x00000000, 0x00050050, 0x00000013, 0x00004B23,
|
||||
0x0000187D, 0x000035EF, 0x0006000C, 0x0000000B, 0x00002174, 0x00000001,
|
||||
0x0000003A, 0x00004B23, 0x00050051, 0x0000000D, 0x00005BC2, 0x00004BA6,
|
||||
0x00000001, 0x00050051, 0x0000000D, 0x000039AA, 0x00004813, 0x00000001,
|
||||
0x00050050, 0x00000013, 0x00004B24, 0x00005BC2, 0x000039AA, 0x0006000C,
|
||||
0x0000000B, 0x00002175, 0x00000001, 0x0000003A, 0x00004B24, 0x00050051,
|
||||
0x0000000D, 0x00005BC3, 0x00004BA6, 0x00000002, 0x00050051, 0x0000000D,
|
||||
0x000039AB, 0x00004813, 0x00000002, 0x00050050, 0x00000013, 0x00004B25,
|
||||
0x00005BC3, 0x000039AB, 0x0006000C, 0x0000000B, 0x00002176, 0x00000001,
|
||||
0x0000003A, 0x00004B25, 0x00050051, 0x0000000D, 0x00005BC4, 0x00004BA6,
|
||||
0x00000003, 0x00050051, 0x0000000D, 0x000039AC, 0x00004813, 0x00000003,
|
||||
0x00050050, 0x00000013, 0x00004B0E, 0x00005BC4, 0x000039AC, 0x0006000C,
|
||||
0x0000000B, 0x000020EF, 0x00000001, 0x0000003A, 0x00004B0E, 0x00070050,
|
||||
0x00000017, 0x00003ABC, 0x00002174, 0x00002175, 0x00002176, 0x000020EF,
|
||||
0x00060041, 0x00000294, 0x00004EBE, 0x0000140E, 0x00000A0B, 0x00003AC4,
|
||||
0x0003003E, 0x00004EBE, 0x00003ABC, 0x000200F9, 0x00004C7A, 0x000200F8,
|
||||
0x00004C7A, 0x000100FD, 0x00010038,
|
||||
};
|
752
src/xenia/gpu/shaders/bytecode/vulkan_spirv/texture_load_rg16_unorm_float_scaled_cs.h
generated
Normal file
752
src/xenia/gpu/shaders/bytecode/vulkan_spirv/texture_load_rg16_unorm_float_scaled_cs.h
generated
Normal file
|
@ -0,0 +1,752 @@
|
|||
// Generated with `xb buildshaders`.
|
||||
#if 0
|
||||
; SPIR-V
|
||||
; Version: 1.0
|
||||
; Generator: Khronos Glslang Reference Front End; 10
|
||||
; Bound: 25179
|
||||
; Schema: 0
|
||||
OpCapability Shader
|
||||
%1 = OpExtInstImport "GLSL.std.450"
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %5663 "main" %gl_GlobalInvocationID
|
||||
OpExecutionMode %5663 LocalSize 4 32 1
|
||||
OpMemberDecorate %_struct_1161 0 Offset 0
|
||||
OpMemberDecorate %_struct_1161 1 Offset 4
|
||||
OpMemberDecorate %_struct_1161 2 Offset 8
|
||||
OpMemberDecorate %_struct_1161 3 Offset 12
|
||||
OpMemberDecorate %_struct_1161 4 Offset 16
|
||||
OpMemberDecorate %_struct_1161 5 Offset 28
|
||||
OpMemberDecorate %_struct_1161 6 Offset 32
|
||||
OpMemberDecorate %_struct_1161 7 Offset 36
|
||||
OpDecorate %_struct_1161 Block
|
||||
OpDecorate %5245 DescriptorSet 2
|
||||
OpDecorate %5245 Binding 0
|
||||
OpDecorate %gl_GlobalInvocationID BuiltIn GlobalInvocationId
|
||||
OpDecorate %_runtimearr_v4uint ArrayStride 16
|
||||
OpMemberDecorate %_struct_1972 0 NonReadable
|
||||
OpMemberDecorate %_struct_1972 0 Offset 0
|
||||
OpDecorate %_struct_1972 BufferBlock
|
||||
OpDecorate %5134 DescriptorSet 0
|
||||
OpDecorate %5134 Binding 0
|
||||
OpDecorate %_runtimearr_v4uint_0 ArrayStride 16
|
||||
OpMemberDecorate %_struct_1973 0 NonWritable
|
||||
OpMemberDecorate %_struct_1973 0 Offset 0
|
||||
OpDecorate %_struct_1973 BufferBlock
|
||||
OpDecorate %4218 DescriptorSet 1
|
||||
OpDecorate %4218 Binding 0
|
||||
OpDecorate %gl_WorkGroupSize BuiltIn WorkgroupSize
|
||||
%void = OpTypeVoid
|
||||
%1282 = OpTypeFunction %void
|
||||
%uint = OpTypeInt 32 0
|
||||
%v4uint = OpTypeVector %uint 4
|
||||
%int = OpTypeInt 32 1
|
||||
%v2int = OpTypeVector %int 2
|
||||
%v3int = OpTypeVector %int 3
|
||||
%bool = OpTypeBool
|
||||
%v3uint = OpTypeVector %uint 3
|
||||
%v2uint = OpTypeVector %uint 2
|
||||
%float = OpTypeFloat 32
|
||||
%v4float = OpTypeVector %float 4
|
||||
%uint_65535 = OpConstant %uint 65535
|
||||
%float_1_52590219en05 = OpConstant %float 1.52590219e-05
|
||||
%uint_16 = OpConstant %uint 16
|
||||
%uint_0 = OpConstant %uint 0
|
||||
%v2float = OpTypeVector %float 2
|
||||
%uint_1 = OpConstant %uint 1
|
||||
%uint_2 = OpConstant %uint 2
|
||||
%uint_3 = OpConstant %uint 3
|
||||
%uint_16711935 = OpConstant %uint 16711935
|
||||
%uint_8 = OpConstant %uint 8
|
||||
%uint_4278255360 = OpConstant %uint 4278255360
|
||||
%int_5 = OpConstant %int 5
|
||||
%uint_5 = OpConstant %uint 5
|
||||
%int_7 = OpConstant %int 7
|
||||
%int_14 = OpConstant %int 14
|
||||
%int_2 = OpConstant %int 2
|
||||
%int_n16 = OpConstant %int -16
|
||||
%int_1 = OpConstant %int 1
|
||||
%int_15 = OpConstant %int 15
|
||||
%int_4 = OpConstant %int 4
|
||||
%int_n512 = OpConstant %int -512
|
||||
%int_3 = OpConstant %int 3
|
||||
%int_16 = OpConstant %int 16
|
||||
%int_448 = OpConstant %int 448
|
||||
%int_8 = OpConstant %int 8
|
||||
%int_6 = OpConstant %int 6
|
||||
%int_63 = OpConstant %int 63
|
||||
%uint_4 = OpConstant %uint 4
|
||||
%uint_6 = OpConstant %uint 6
|
||||
%int_268435455 = OpConstant %int 268435455
|
||||
%int_n2 = OpConstant %int -2
|
||||
%uint_32 = OpConstant %uint 32
|
||||
%_struct_1161 = OpTypeStruct %uint %uint %uint %uint %v3uint %uint %uint %uint
|
||||
%_ptr_Uniform__struct_1161 = OpTypePointer Uniform %_struct_1161
|
||||
%5245 = OpVariable %_ptr_Uniform__struct_1161 Uniform
|
||||
%int_0 = OpConstant %int 0
|
||||
%_ptr_Uniform_uint = OpTypePointer Uniform %uint
|
||||
%1915 = OpConstantComposite %v2uint %uint_4 %uint_6
|
||||
%_ptr_Uniform_v3uint = OpTypePointer Uniform %v3uint
|
||||
%_ptr_Input_v3uint = OpTypePointer Input %v3uint
|
||||
%gl_GlobalInvocationID = OpVariable %_ptr_Input_v3uint Input
|
||||
%2603 = OpConstantComposite %v3uint %uint_3 %uint_0 %uint_0
|
||||
%v2bool = OpTypeVector %bool 2
|
||||
%_runtimearr_v4uint = OpTypeRuntimeArray %v4uint
|
||||
%_struct_1972 = OpTypeStruct %_runtimearr_v4uint
|
||||
%_ptr_Uniform__struct_1972 = OpTypePointer Uniform %_struct_1972
|
||||
%5134 = OpVariable %_ptr_Uniform__struct_1972 Uniform
|
||||
%_runtimearr_v4uint_0 = OpTypeRuntimeArray %v4uint
|
||||
%_struct_1973 = OpTypeStruct %_runtimearr_v4uint_0
|
||||
%_ptr_Uniform__struct_1973 = OpTypePointer Uniform %_struct_1973
|
||||
%4218 = OpVariable %_ptr_Uniform__struct_1973 Uniform
|
||||
%_ptr_Uniform_v4uint = OpTypePointer Uniform %v4uint
|
||||
%gl_WorkGroupSize = OpConstantComposite %v3uint %uint_4 %uint_32 %uint_1
|
||||
%1870 = OpConstantComposite %v2uint %uint_3 %uint_3
|
||||
%uint_9 = OpConstant %uint 9
|
||||
%2510 = OpConstantComposite %v4uint %uint_16711935 %uint_16711935 %uint_16711935 %uint_16711935
|
||||
%317 = OpConstantComposite %v4uint %uint_8 %uint_8 %uint_8 %uint_8
|
||||
%1838 = OpConstantComposite %v4uint %uint_4278255360 %uint_4278255360 %uint_4278255360 %uint_4278255360
|
||||
%749 = OpConstantComposite %v4uint %uint_16 %uint_16 %uint_16 %uint_16
|
||||
%850 = OpConstantComposite %v4uint %uint_65535 %uint_65535 %uint_65535 %uint_65535
|
||||
%5663 = OpFunction %void None %1282
|
||||
%15110 = OpLabel
|
||||
OpSelectionMerge %19578 None
|
||||
OpSwitch %uint_0 %15137
|
||||
%15137 = OpLabel
|
||||
%12591 = OpLoad %v3uint %gl_GlobalInvocationID
|
||||
%10229 = OpShiftLeftLogical %v3uint %12591 %2603
|
||||
%25178 = OpAccessChain %_ptr_Uniform_v3uint %5245 %int_4
|
||||
%22965 = OpLoad %v3uint %25178
|
||||
%18835 = OpVectorShuffle %v2uint %10229 %10229 0 1
|
||||
%6626 = OpVectorShuffle %v2uint %22965 %22965 0 1
|
||||
%17032 = OpUGreaterThanEqual %v2bool %18835 %6626
|
||||
%24679 = OpAny %bool %17032
|
||||
OpSelectionMerge %6282 DontFlatten
|
||||
OpBranchConditional %24679 %21992 %6282
|
||||
%21992 = OpLabel
|
||||
OpBranch %19578
|
||||
%6282 = OpLabel
|
||||
%6795 = OpBitcast %v3int %10229
|
||||
%18792 = OpAccessChain %_ptr_Uniform_uint %5245 %int_6
|
||||
%9788 = OpLoad %uint %18792
|
||||
%20376 = OpCompositeExtract %uint %22965 1
|
||||
%14692 = OpCompositeExtract %int %6795 0
|
||||
%22810 = OpIMul %int %14692 %int_4
|
||||
%6362 = OpCompositeExtract %int %6795 2
|
||||
%14505 = OpBitcast %int %20376
|
||||
%11279 = OpIMul %int %6362 %14505
|
||||
%17598 = OpCompositeExtract %int %6795 1
|
||||
%22228 = OpIAdd %int %11279 %17598
|
||||
%22405 = OpBitcast %int %9788
|
||||
%24535 = OpIMul %int %22228 %22405
|
||||
%7061 = OpIAdd %int %22810 %24535
|
||||
%19270 = OpBitcast %uint %7061
|
||||
%19460 = OpAccessChain %_ptr_Uniform_uint %5245 %int_5
|
||||
%22875 = OpLoad %uint %19460
|
||||
%8517 = OpIAdd %uint %19270 %22875
|
||||
%21670 = OpShiftRightLogical %uint %8517 %uint_4
|
||||
%18404 = OpAccessChain %_ptr_Uniform_uint %5245 %int_1
|
||||
%23432 = OpLoad %uint %18404
|
||||
%22700 = OpAccessChain %_ptr_Uniform_uint %5245 %int_0
|
||||
%20387 = OpLoad %uint %22700
|
||||
%22279 = OpBitwiseAnd %uint %20387 %uint_2
|
||||
%19223 = OpINotEqual %bool %22279 %uint_0
|
||||
%17247 = OpCompositeConstruct %v2uint %20387 %20387
|
||||
%22947 = OpShiftRightLogical %v2uint %17247 %1915
|
||||
%6551 = OpBitwiseAnd %v2uint %22947 %1870
|
||||
%18732 = OpAccessChain %_ptr_Uniform_uint %5245 %int_2
|
||||
%24236 = OpLoad %uint %18732
|
||||
%20458 = OpAccessChain %_ptr_Uniform_uint %5245 %int_3
|
||||
%22167 = OpLoad %uint %20458
|
||||
%18929 = OpCompositeExtract %uint %10229 0
|
||||
%6638 = OpShiftRightLogical %uint %18929 %uint_2
|
||||
%9988 = OpCompositeExtract %uint %10229 1
|
||||
%23563 = OpCompositeConstruct %v2uint %6638 %9988
|
||||
%8041 = OpUDiv %v2uint %23563 %6551
|
||||
%13932 = OpCompositeExtract %uint %8041 0
|
||||
%19789 = OpShiftLeftLogical %uint %13932 %uint_2
|
||||
%20905 = OpCompositeExtract %uint %8041 1
|
||||
%23022 = OpCompositeExtract %uint %10229 2
|
||||
%9417 = OpCompositeConstruct %v3uint %19789 %20905 %23022
|
||||
OpSelectionMerge %21313 DontFlatten
|
||||
OpBranchConditional %19223 %21373 %11737
|
||||
%21373 = OpLabel
|
||||
%10608 = OpBitcast %v3int %9417
|
||||
%17090 = OpCompositeExtract %int %10608 1
|
||||
%9469 = OpShiftRightArithmetic %int %17090 %int_4
|
||||
%10055 = OpCompositeExtract %int %10608 2
|
||||
%16476 = OpShiftRightArithmetic %int %10055 %int_2
|
||||
%23373 = OpShiftRightLogical %uint %22167 %uint_4
|
||||
%6314 = OpBitcast %int %23373
|
||||
%21281 = OpIMul %int %16476 %6314
|
||||
%15143 = OpIAdd %int %9469 %21281
|
||||
%9032 = OpShiftRightLogical %uint %24236 %uint_5
|
||||
%12427 = OpBitcast %int %9032
|
||||
%10360 = OpIMul %int %15143 %12427
|
||||
%25154 = OpCompositeExtract %int %10608 0
|
||||
%20423 = OpShiftRightArithmetic %int %25154 %int_5
|
||||
%18940 = OpIAdd %int %20423 %10360
|
||||
%8797 = OpShiftLeftLogical %int %18940 %uint_8
|
||||
%11510 = OpBitwiseAnd %int %8797 %int_268435455
|
||||
%18938 = OpShiftLeftLogical %int %11510 %int_1
|
||||
%19768 = OpBitwiseAnd %int %25154 %int_7
|
||||
%12600 = OpBitwiseAnd %int %17090 %int_6
|
||||
%17741 = OpShiftLeftLogical %int %12600 %int_2
|
||||
%17227 = OpIAdd %int %19768 %17741
|
||||
%7048 = OpShiftLeftLogical %int %17227 %uint_8
|
||||
%24035 = OpShiftRightArithmetic %int %7048 %int_6
|
||||
%8725 = OpShiftRightArithmetic %int %17090 %int_3
|
||||
%13731 = OpIAdd %int %8725 %16476
|
||||
%23052 = OpBitwiseAnd %int %13731 %int_1
|
||||
%16658 = OpShiftRightArithmetic %int %25154 %int_3
|
||||
%18794 = OpShiftLeftLogical %int %23052 %int_1
|
||||
%13501 = OpIAdd %int %16658 %18794
|
||||
%19165 = OpBitwiseAnd %int %13501 %int_3
|
||||
%21578 = OpShiftLeftLogical %int %19165 %int_1
|
||||
%15435 = OpIAdd %int %23052 %21578
|
||||
%13150 = OpBitwiseAnd %int %24035 %int_n16
|
||||
%20336 = OpIAdd %int %18938 %13150
|
||||
%23345 = OpShiftLeftLogical %int %20336 %int_1
|
||||
%23274 = OpBitwiseAnd %int %24035 %int_15
|
||||
%10332 = OpIAdd %int %23345 %23274
|
||||
%18356 = OpBitwiseAnd %int %10055 %int_3
|
||||
%21579 = OpShiftLeftLogical %int %18356 %uint_8
|
||||
%16727 = OpIAdd %int %10332 %21579
|
||||
%19166 = OpBitwiseAnd %int %17090 %int_1
|
||||
%21580 = OpShiftLeftLogical %int %19166 %int_4
|
||||
%16728 = OpIAdd %int %16727 %21580
|
||||
%20438 = OpBitwiseAnd %int %15435 %int_1
|
||||
%9987 = OpShiftLeftLogical %int %20438 %int_3
|
||||
%13106 = OpShiftRightArithmetic %int %16728 %int_6
|
||||
%14038 = OpBitwiseAnd %int %13106 %int_7
|
||||
%13330 = OpIAdd %int %9987 %14038
|
||||
%23346 = OpShiftLeftLogical %int %13330 %int_3
|
||||
%23217 = OpBitwiseAnd %int %15435 %int_n2
|
||||
%10908 = OpIAdd %int %23346 %23217
|
||||
%23347 = OpShiftLeftLogical %int %10908 %int_2
|
||||
%23218 = OpBitwiseAnd %int %16728 %int_n512
|
||||
%10909 = OpIAdd %int %23347 %23218
|
||||
%23348 = OpShiftLeftLogical %int %10909 %int_3
|
||||
%21849 = OpBitwiseAnd %int %16728 %int_63
|
||||
%24314 = OpIAdd %int %23348 %21849
|
||||
%22127 = OpBitcast %uint %24314
|
||||
OpBranch %21313
|
||||
%11737 = OpLabel
|
||||
%9761 = OpVectorShuffle %v2uint %9417 %9417 0 1
|
||||
%22991 = OpBitcast %v2int %9761
|
||||
%6403 = OpCompositeExtract %int %22991 0
|
||||
%9470 = OpShiftRightArithmetic %int %6403 %int_5
|
||||
%10056 = OpCompositeExtract %int %22991 1
|
||||
%16477 = OpShiftRightArithmetic %int %10056 %int_5
|
||||
%23374 = OpShiftRightLogical %uint %24236 %uint_5
|
||||
%6315 = OpBitcast %int %23374
|
||||
%21319 = OpIMul %int %16477 %6315
|
||||
%16222 = OpIAdd %int %9470 %21319
|
||||
%19086 = OpShiftLeftLogical %int %16222 %uint_9
|
||||
%10934 = OpBitwiseAnd %int %6403 %int_7
|
||||
%12601 = OpBitwiseAnd %int %10056 %int_14
|
||||
%17742 = OpShiftLeftLogical %int %12601 %int_2
|
||||
%17303 = OpIAdd %int %10934 %17742
|
||||
%6375 = OpShiftLeftLogical %int %17303 %uint_2
|
||||
%10161 = OpBitwiseAnd %int %6375 %int_n16
|
||||
%12150 = OpShiftLeftLogical %int %10161 %int_1
|
||||
%15436 = OpIAdd %int %19086 %12150
|
||||
%13207 = OpBitwiseAnd %int %6375 %int_15
|
||||
%19760 = OpIAdd %int %15436 %13207
|
||||
%18357 = OpBitwiseAnd %int %10056 %int_1
|
||||
%21581 = OpShiftLeftLogical %int %18357 %int_4
|
||||
%16729 = OpIAdd %int %19760 %21581
|
||||
%20514 = OpBitwiseAnd %int %16729 %int_n512
|
||||
%9238 = OpShiftLeftLogical %int %20514 %int_3
|
||||
%18995 = OpBitwiseAnd %int %10056 %int_16
|
||||
%12151 = OpShiftLeftLogical %int %18995 %int_7
|
||||
%16730 = OpIAdd %int %9238 %12151
|
||||
%19167 = OpBitwiseAnd %int %16729 %int_448
|
||||
%21582 = OpShiftLeftLogical %int %19167 %int_2
|
||||
%16708 = OpIAdd %int %16730 %21582
|
||||
%20611 = OpBitwiseAnd %int %10056 %int_8
|
||||
%16831 = OpShiftRightArithmetic %int %20611 %int_2
|
||||
%7916 = OpShiftRightArithmetic %int %6403 %int_3
|
||||
%13750 = OpIAdd %int %16831 %7916
|
||||
%21587 = OpBitwiseAnd %int %13750 %int_3
|
||||
%21583 = OpShiftLeftLogical %int %21587 %int_6
|
||||
%15437 = OpIAdd %int %16708 %21583
|
||||
%11782 = OpBitwiseAnd %int %16729 %int_63
|
||||
%14671 = OpIAdd %int %15437 %11782
|
||||
%22128 = OpBitcast %uint %14671
|
||||
OpBranch %21313
|
||||
%21313 = OpLabel
|
||||
%9468 = OpPhi %uint %22127 %21373 %22128 %11737
|
||||
%16296 = OpIMul %v2uint %8041 %6551
|
||||
%15292 = OpISub %v2uint %23563 %16296
|
||||
%7303 = OpCompositeExtract %uint %6551 0
|
||||
%22882 = OpCompositeExtract %uint %6551 1
|
||||
%13170 = OpIMul %uint %7303 %22882
|
||||
%15520 = OpIMul %uint %9468 %13170
|
||||
%16084 = OpCompositeExtract %uint %15292 0
|
||||
%15890 = OpIMul %uint %16084 %22882
|
||||
%6886 = OpCompositeExtract %uint %15292 1
|
||||
%11045 = OpIAdd %uint %15890 %6886
|
||||
%24733 = OpShiftLeftLogical %uint %11045 %uint_2
|
||||
%23219 = OpBitwiseAnd %uint %18929 %uint_3
|
||||
%9559 = OpIAdd %uint %24733 %23219
|
||||
%16557 = OpShiftLeftLogical %uint %9559 %uint_2
|
||||
%20138 = OpIAdd %uint %15520 %16557
|
||||
%17724 = OpIAdd %uint %23432 %20138
|
||||
%14040 = OpShiftRightLogical %uint %17724 %uint_4
|
||||
%11766 = OpShiftRightLogical %uint %20387 %uint_2
|
||||
%8394 = OpBitwiseAnd %uint %11766 %uint_3
|
||||
%20727 = OpAccessChain %_ptr_Uniform_v4uint %4218 %int_0 %14040
|
||||
%8142 = OpLoad %v4uint %20727
|
||||
%13760 = OpIEqual %bool %8394 %uint_1
|
||||
%21366 = OpIEqual %bool %8394 %uint_2
|
||||
%22150 = OpLogicalOr %bool %13760 %21366
|
||||
OpSelectionMerge %13411 None
|
||||
OpBranchConditional %22150 %10583 %13411
|
||||
%10583 = OpLabel
|
||||
%18271 = OpBitwiseAnd %v4uint %8142 %2510
|
||||
%9425 = OpShiftLeftLogical %v4uint %18271 %317
|
||||
%20652 = OpBitwiseAnd %v4uint %8142 %1838
|
||||
%17549 = OpShiftRightLogical %v4uint %20652 %317
|
||||
%16376 = OpBitwiseOr %v4uint %9425 %17549
|
||||
OpBranch %13411
|
||||
%13411 = OpLabel
|
||||
%22649 = OpPhi %v4uint %8142 %21313 %16376 %10583
|
||||
%19638 = OpIEqual %bool %8394 %uint_3
|
||||
%15139 = OpLogicalOr %bool %21366 %19638
|
||||
OpSelectionMerge %13962 None
|
||||
OpBranchConditional %15139 %11064 %13962
|
||||
%11064 = OpLabel
|
||||
%24087 = OpShiftLeftLogical %v4uint %22649 %749
|
||||
%15335 = OpShiftRightLogical %v4uint %22649 %749
|
||||
%10728 = OpBitwiseOr %v4uint %24087 %15335
|
||||
OpBranch %13962
|
||||
%13962 = OpLabel
|
||||
%16606 = OpPhi %v4uint %22649 %13411 %10728 %11064
|
||||
%18240 = OpBitwiseAnd %v4uint %16606 %850
|
||||
%9137 = OpConvertUToF %v4float %18240
|
||||
%19365 = OpVectorTimesScalar %v4float %9137 %float_1_52590219en05
|
||||
%23367 = OpShiftRightLogical %v4uint %16606 %749
|
||||
%18492 = OpConvertUToF %v4float %23367
|
||||
%18450 = OpVectorTimesScalar %v4float %18492 %float_1_52590219en05
|
||||
%6268 = OpCompositeExtract %float %19365 0
|
||||
%13806 = OpCompositeExtract %float %18450 0
|
||||
%19232 = OpCompositeConstruct %v2float %6268 %13806
|
||||
%8561 = OpExtInst %uint %1 PackHalf2x16 %19232
|
||||
%23487 = OpCompositeExtract %float %19365 1
|
||||
%14759 = OpCompositeExtract %float %18450 1
|
||||
%19233 = OpCompositeConstruct %v2float %23487 %14759
|
||||
%8562 = OpExtInst %uint %1 PackHalf2x16 %19233
|
||||
%23488 = OpCompositeExtract %float %19365 2
|
||||
%14760 = OpCompositeExtract %float %18450 2
|
||||
%19234 = OpCompositeConstruct %v2float %23488 %14760
|
||||
%8563 = OpExtInst %uint %1 PackHalf2x16 %19234
|
||||
%23489 = OpCompositeExtract %float %19365 3
|
||||
%14761 = OpCompositeExtract %float %18450 3
|
||||
%19213 = OpCompositeConstruct %v2float %23489 %14761
|
||||
%8430 = OpExtInst %uint %1 PackHalf2x16 %19213
|
||||
%15035 = OpCompositeConstruct %v4uint %8561 %8562 %8563 %8430
|
||||
%17859 = OpAccessChain %_ptr_Uniform_v4uint %5134 %int_0 %21670
|
||||
OpStore %17859 %15035
|
||||
%15532 = OpIAdd %uint %21670 %int_1
|
||||
%6417 = OpUGreaterThan %bool %7303 %uint_1
|
||||
OpSelectionMerge %24764 DontFlatten
|
||||
OpBranchConditional %6417 %20612 %20628
|
||||
%20612 = OpLabel
|
||||
%13975 = OpUDiv %uint %6638 %7303
|
||||
%9086 = OpIMul %uint %13975 %7303
|
||||
%12657 = OpISub %uint %6638 %9086
|
||||
%9511 = OpIAdd %uint %12657 %uint_1
|
||||
%13375 = OpIEqual %bool %9511 %7303
|
||||
OpSelectionMerge %7917 None
|
||||
OpBranchConditional %13375 %22174 %8593
|
||||
%22174 = OpLabel
|
||||
%19289 = OpIMul %uint %uint_32 %7303
|
||||
%21519 = OpShiftLeftLogical %uint %12657 %uint_4
|
||||
%18756 = OpISub %uint %19289 %21519
|
||||
OpBranch %7917
|
||||
%8593 = OpLabel
|
||||
OpBranch %7917
|
||||
%7917 = OpLabel
|
||||
%10540 = OpPhi %uint %18756 %22174 %uint_16 %8593
|
||||
OpBranch %24764
|
||||
%20628 = OpLabel
|
||||
OpBranch %24764
|
||||
%24764 = OpLabel
|
||||
%10684 = OpPhi %uint %10540 %7917 %uint_32 %20628
|
||||
%18731 = OpIMul %uint %10684 %22882
|
||||
%16493 = OpShiftRightLogical %uint %18731 %uint_4
|
||||
%13163 = OpIAdd %uint %14040 %16493
|
||||
%22298 = OpAccessChain %_ptr_Uniform_v4uint %4218 %int_0 %13163
|
||||
%6578 = OpLoad %v4uint %22298
|
||||
OpSelectionMerge %14874 None
|
||||
OpBranchConditional %22150 %10584 %14874
|
||||
%10584 = OpLabel
|
||||
%18272 = OpBitwiseAnd %v4uint %6578 %2510
|
||||
%9426 = OpShiftLeftLogical %v4uint %18272 %317
|
||||
%20653 = OpBitwiseAnd %v4uint %6578 %1838
|
||||
%17550 = OpShiftRightLogical %v4uint %20653 %317
|
||||
%16377 = OpBitwiseOr %v4uint %9426 %17550
|
||||
OpBranch %14874
|
||||
%14874 = OpLabel
|
||||
%10924 = OpPhi %v4uint %6578 %24764 %16377 %10584
|
||||
OpSelectionMerge %13963 None
|
||||
OpBranchConditional %15139 %11065 %13963
|
||||
%11065 = OpLabel
|
||||
%24088 = OpShiftLeftLogical %v4uint %10924 %749
|
||||
%15336 = OpShiftRightLogical %v4uint %10924 %749
|
||||
%10729 = OpBitwiseOr %v4uint %24088 %15336
|
||||
OpBranch %13963
|
||||
%13963 = OpLabel
|
||||
%16607 = OpPhi %v4uint %10924 %14874 %10729 %11065
|
||||
%18241 = OpBitwiseAnd %v4uint %16607 %850
|
||||
%9138 = OpConvertUToF %v4float %18241
|
||||
%19366 = OpVectorTimesScalar %v4float %9138 %float_1_52590219en05
|
||||
%23368 = OpShiftRightLogical %v4uint %16607 %749
|
||||
%18493 = OpConvertUToF %v4float %23368
|
||||
%18451 = OpVectorTimesScalar %v4float %18493 %float_1_52590219en05
|
||||
%6269 = OpCompositeExtract %float %19366 0
|
||||
%13807 = OpCompositeExtract %float %18451 0
|
||||
%19235 = OpCompositeConstruct %v2float %6269 %13807
|
||||
%8564 = OpExtInst %uint %1 PackHalf2x16 %19235
|
||||
%23490 = OpCompositeExtract %float %19366 1
|
||||
%14762 = OpCompositeExtract %float %18451 1
|
||||
%19236 = OpCompositeConstruct %v2float %23490 %14762
|
||||
%8565 = OpExtInst %uint %1 PackHalf2x16 %19236
|
||||
%23491 = OpCompositeExtract %float %19366 2
|
||||
%14763 = OpCompositeExtract %float %18451 2
|
||||
%19237 = OpCompositeConstruct %v2float %23491 %14763
|
||||
%8566 = OpExtInst %uint %1 PackHalf2x16 %19237
|
||||
%23492 = OpCompositeExtract %float %19366 3
|
||||
%14764 = OpCompositeExtract %float %18451 3
|
||||
%19214 = OpCompositeConstruct %v2float %23492 %14764
|
||||
%8431 = OpExtInst %uint %1 PackHalf2x16 %19214
|
||||
%15036 = OpCompositeConstruct %v4uint %8564 %8565 %8566 %8431
|
||||
%20158 = OpAccessChain %_ptr_Uniform_v4uint %5134 %int_0 %15532
|
||||
OpStore %20158 %15036
|
||||
OpBranch %19578
|
||||
%19578 = OpLabel
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
#endif
|
||||
|
||||
const uint32_t texture_load_rg16_unorm_float_scaled_cs[] = {
|
||||
0x07230203, 0x00010000, 0x0008000A, 0x0000625B, 0x00000000, 0x00020011,
|
||||
0x00000001, 0x0006000B, 0x00000001, 0x4C534C47, 0x6474732E, 0x3035342E,
|
||||
0x00000000, 0x0003000E, 0x00000000, 0x00000001, 0x0006000F, 0x00000005,
|
||||
0x0000161F, 0x6E69616D, 0x00000000, 0x00000F48, 0x00060010, 0x0000161F,
|
||||
0x00000011, 0x00000004, 0x00000020, 0x00000001, 0x00050048, 0x00000489,
|
||||
0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x00000489, 0x00000001,
|
||||
0x00000023, 0x00000004, 0x00050048, 0x00000489, 0x00000002, 0x00000023,
|
||||
0x00000008, 0x00050048, 0x00000489, 0x00000003, 0x00000023, 0x0000000C,
|
||||
0x00050048, 0x00000489, 0x00000004, 0x00000023, 0x00000010, 0x00050048,
|
||||
0x00000489, 0x00000005, 0x00000023, 0x0000001C, 0x00050048, 0x00000489,
|
||||
0x00000006, 0x00000023, 0x00000020, 0x00050048, 0x00000489, 0x00000007,
|
||||
0x00000023, 0x00000024, 0x00030047, 0x00000489, 0x00000002, 0x00040047,
|
||||
0x0000147D, 0x00000022, 0x00000002, 0x00040047, 0x0000147D, 0x00000021,
|
||||
0x00000000, 0x00040047, 0x00000F48, 0x0000000B, 0x0000001C, 0x00040047,
|
||||
0x000007DC, 0x00000006, 0x00000010, 0x00040048, 0x000007B4, 0x00000000,
|
||||
0x00000019, 0x00050048, 0x000007B4, 0x00000000, 0x00000023, 0x00000000,
|
||||
0x00030047, 0x000007B4, 0x00000003, 0x00040047, 0x0000140E, 0x00000022,
|
||||
0x00000000, 0x00040047, 0x0000140E, 0x00000021, 0x00000000, 0x00040047,
|
||||
0x000007DD, 0x00000006, 0x00000010, 0x00040048, 0x000007B5, 0x00000000,
|
||||
0x00000018, 0x00050048, 0x000007B5, 0x00000000, 0x00000023, 0x00000000,
|
||||
0x00030047, 0x000007B5, 0x00000003, 0x00040047, 0x0000107A, 0x00000022,
|
||||
0x00000001, 0x00040047, 0x0000107A, 0x00000021, 0x00000000, 0x00040047,
|
||||
0x00000BC3, 0x0000000B, 0x00000019, 0x00020013, 0x00000008, 0x00030021,
|
||||
0x00000502, 0x00000008, 0x00040015, 0x0000000B, 0x00000020, 0x00000000,
|
||||
0x00040017, 0x00000017, 0x0000000B, 0x00000004, 0x00040015, 0x0000000C,
|
||||
0x00000020, 0x00000001, 0x00040017, 0x00000012, 0x0000000C, 0x00000002,
|
||||
0x00040017, 0x00000016, 0x0000000C, 0x00000003, 0x00020014, 0x00000009,
|
||||
0x00040017, 0x00000014, 0x0000000B, 0x00000003, 0x00040017, 0x00000011,
|
||||
0x0000000B, 0x00000002, 0x00030016, 0x0000000D, 0x00000020, 0x00040017,
|
||||
0x0000001D, 0x0000000D, 0x00000004, 0x0004002B, 0x0000000B, 0x000001C1,
|
||||
0x0000FFFF, 0x0004002B, 0x0000000D, 0x0000092A, 0x37800080, 0x0004002B,
|
||||
0x0000000B, 0x00000A3A, 0x00000010, 0x0004002B, 0x0000000B, 0x00000A0A,
|
||||
0x00000000, 0x00040017, 0x00000013, 0x0000000D, 0x00000002, 0x0004002B,
|
||||
0x0000000B, 0x00000A0D, 0x00000001, 0x0004002B, 0x0000000B, 0x00000A10,
|
||||
0x00000002, 0x0004002B, 0x0000000B, 0x00000A13, 0x00000003, 0x0004002B,
|
||||
0x0000000B, 0x000008A6, 0x00FF00FF, 0x0004002B, 0x0000000B, 0x00000A22,
|
||||
0x00000008, 0x0004002B, 0x0000000B, 0x000005FD, 0xFF00FF00, 0x0004002B,
|
||||
0x0000000C, 0x00000A1A, 0x00000005, 0x0004002B, 0x0000000B, 0x00000A19,
|
||||
0x00000005, 0x0004002B, 0x0000000C, 0x00000A20, 0x00000007, 0x0004002B,
|
||||
0x0000000C, 0x00000A35, 0x0000000E, 0x0004002B, 0x0000000C, 0x00000A11,
|
||||
0x00000002, 0x0004002B, 0x0000000C, 0x000009DB, 0xFFFFFFF0, 0x0004002B,
|
||||
0x0000000C, 0x00000A0E, 0x00000001, 0x0004002B, 0x0000000C, 0x00000A38,
|
||||
0x0000000F, 0x0004002B, 0x0000000C, 0x00000A17, 0x00000004, 0x0004002B,
|
||||
0x0000000C, 0x0000040B, 0xFFFFFE00, 0x0004002B, 0x0000000C, 0x00000A14,
|
||||
0x00000003, 0x0004002B, 0x0000000C, 0x00000A3B, 0x00000010, 0x0004002B,
|
||||
0x0000000C, 0x00000388, 0x000001C0, 0x0004002B, 0x0000000C, 0x00000A23,
|
||||
0x00000008, 0x0004002B, 0x0000000C, 0x00000A1D, 0x00000006, 0x0004002B,
|
||||
0x0000000C, 0x00000AC8, 0x0000003F, 0x0004002B, 0x0000000B, 0x00000A16,
|
||||
0x00000004, 0x0004002B, 0x0000000B, 0x00000A1C, 0x00000006, 0x0004002B,
|
||||
0x0000000C, 0x0000078B, 0x0FFFFFFF, 0x0004002B, 0x0000000C, 0x00000A05,
|
||||
0xFFFFFFFE, 0x0004002B, 0x0000000B, 0x00000A6A, 0x00000020, 0x000A001E,
|
||||
0x00000489, 0x0000000B, 0x0000000B, 0x0000000B, 0x0000000B, 0x00000014,
|
||||
0x0000000B, 0x0000000B, 0x0000000B, 0x00040020, 0x00000706, 0x00000002,
|
||||
0x00000489, 0x0004003B, 0x00000706, 0x0000147D, 0x00000002, 0x0004002B,
|
||||
0x0000000C, 0x00000A0B, 0x00000000, 0x00040020, 0x00000288, 0x00000002,
|
||||
0x0000000B, 0x0005002C, 0x00000011, 0x0000077B, 0x00000A16, 0x00000A1C,
|
||||
0x00040020, 0x00000291, 0x00000002, 0x00000014, 0x00040020, 0x00000292,
|
||||
0x00000001, 0x00000014, 0x0004003B, 0x00000292, 0x00000F48, 0x00000001,
|
||||
0x0006002C, 0x00000014, 0x00000A2B, 0x00000A13, 0x00000A0A, 0x00000A0A,
|
||||
0x00040017, 0x0000000F, 0x00000009, 0x00000002, 0x0003001D, 0x000007DC,
|
||||
0x00000017, 0x0003001E, 0x000007B4, 0x000007DC, 0x00040020, 0x00000A31,
|
||||
0x00000002, 0x000007B4, 0x0004003B, 0x00000A31, 0x0000140E, 0x00000002,
|
||||
0x0003001D, 0x000007DD, 0x00000017, 0x0003001E, 0x000007B5, 0x000007DD,
|
||||
0x00040020, 0x00000A32, 0x00000002, 0x000007B5, 0x0004003B, 0x00000A32,
|
||||
0x0000107A, 0x00000002, 0x00040020, 0x00000294, 0x00000002, 0x00000017,
|
||||
0x0006002C, 0x00000014, 0x00000BC3, 0x00000A16, 0x00000A6A, 0x00000A0D,
|
||||
0x0005002C, 0x00000011, 0x0000074E, 0x00000A13, 0x00000A13, 0x0004002B,
|
||||
0x0000000B, 0x00000A25, 0x00000009, 0x0007002C, 0x00000017, 0x000009CE,
|
||||
0x000008A6, 0x000008A6, 0x000008A6, 0x000008A6, 0x0007002C, 0x00000017,
|
||||
0x0000013D, 0x00000A22, 0x00000A22, 0x00000A22, 0x00000A22, 0x0007002C,
|
||||
0x00000017, 0x0000072E, 0x000005FD, 0x000005FD, 0x000005FD, 0x000005FD,
|
||||
0x0007002C, 0x00000017, 0x000002ED, 0x00000A3A, 0x00000A3A, 0x00000A3A,
|
||||
0x00000A3A, 0x0007002C, 0x00000017, 0x00000352, 0x000001C1, 0x000001C1,
|
||||
0x000001C1, 0x000001C1, 0x00050036, 0x00000008, 0x0000161F, 0x00000000,
|
||||
0x00000502, 0x000200F8, 0x00003B06, 0x000300F7, 0x00004C7A, 0x00000000,
|
||||
0x000300FB, 0x00000A0A, 0x00003B21, 0x000200F8, 0x00003B21, 0x0004003D,
|
||||
0x00000014, 0x0000312F, 0x00000F48, 0x000500C4, 0x00000014, 0x000027F5,
|
||||
0x0000312F, 0x00000A2B, 0x00050041, 0x00000291, 0x0000625A, 0x0000147D,
|
||||
0x00000A17, 0x0004003D, 0x00000014, 0x000059B5, 0x0000625A, 0x0007004F,
|
||||
0x00000011, 0x00004993, 0x000027F5, 0x000027F5, 0x00000000, 0x00000001,
|
||||
0x0007004F, 0x00000011, 0x000019E2, 0x000059B5, 0x000059B5, 0x00000000,
|
||||
0x00000001, 0x000500AE, 0x0000000F, 0x00004288, 0x00004993, 0x000019E2,
|
||||
0x0004009A, 0x00000009, 0x00006067, 0x00004288, 0x000300F7, 0x0000188A,
|
||||
0x00000002, 0x000400FA, 0x00006067, 0x000055E8, 0x0000188A, 0x000200F8,
|
||||
0x000055E8, 0x000200F9, 0x00004C7A, 0x000200F8, 0x0000188A, 0x0004007C,
|
||||
0x00000016, 0x00001A8B, 0x000027F5, 0x00050041, 0x00000288, 0x00004968,
|
||||
0x0000147D, 0x00000A1D, 0x0004003D, 0x0000000B, 0x0000263C, 0x00004968,
|
||||
0x00050051, 0x0000000B, 0x00004F98, 0x000059B5, 0x00000001, 0x00050051,
|
||||
0x0000000C, 0x00003964, 0x00001A8B, 0x00000000, 0x00050084, 0x0000000C,
|
||||
0x0000591A, 0x00003964, 0x00000A17, 0x00050051, 0x0000000C, 0x000018DA,
|
||||
0x00001A8B, 0x00000002, 0x0004007C, 0x0000000C, 0x000038A9, 0x00004F98,
|
||||
0x00050084, 0x0000000C, 0x00002C0F, 0x000018DA, 0x000038A9, 0x00050051,
|
||||
0x0000000C, 0x000044BE, 0x00001A8B, 0x00000001, 0x00050080, 0x0000000C,
|
||||
0x000056D4, 0x00002C0F, 0x000044BE, 0x0004007C, 0x0000000C, 0x00005785,
|
||||
0x0000263C, 0x00050084, 0x0000000C, 0x00005FD7, 0x000056D4, 0x00005785,
|
||||
0x00050080, 0x0000000C, 0x00001B95, 0x0000591A, 0x00005FD7, 0x0004007C,
|
||||
0x0000000B, 0x00004B46, 0x00001B95, 0x00050041, 0x00000288, 0x00004C04,
|
||||
0x0000147D, 0x00000A1A, 0x0004003D, 0x0000000B, 0x0000595B, 0x00004C04,
|
||||
0x00050080, 0x0000000B, 0x00002145, 0x00004B46, 0x0000595B, 0x000500C2,
|
||||
0x0000000B, 0x000054A6, 0x00002145, 0x00000A16, 0x00050041, 0x00000288,
|
||||
0x000047E4, 0x0000147D, 0x00000A0E, 0x0004003D, 0x0000000B, 0x00005B88,
|
||||
0x000047E4, 0x00050041, 0x00000288, 0x000058AC, 0x0000147D, 0x00000A0B,
|
||||
0x0004003D, 0x0000000B, 0x00004FA3, 0x000058AC, 0x000500C7, 0x0000000B,
|
||||
0x00005707, 0x00004FA3, 0x00000A10, 0x000500AB, 0x00000009, 0x00004B17,
|
||||
0x00005707, 0x00000A0A, 0x00050050, 0x00000011, 0x0000435F, 0x00004FA3,
|
||||
0x00004FA3, 0x000500C2, 0x00000011, 0x000059A3, 0x0000435F, 0x0000077B,
|
||||
0x000500C7, 0x00000011, 0x00001997, 0x000059A3, 0x0000074E, 0x00050041,
|
||||
0x00000288, 0x0000492C, 0x0000147D, 0x00000A11, 0x0004003D, 0x0000000B,
|
||||
0x00005EAC, 0x0000492C, 0x00050041, 0x00000288, 0x00004FEA, 0x0000147D,
|
||||
0x00000A14, 0x0004003D, 0x0000000B, 0x00005697, 0x00004FEA, 0x00050051,
|
||||
0x0000000B, 0x000049F1, 0x000027F5, 0x00000000, 0x000500C2, 0x0000000B,
|
||||
0x000019EE, 0x000049F1, 0x00000A10, 0x00050051, 0x0000000B, 0x00002704,
|
||||
0x000027F5, 0x00000001, 0x00050050, 0x00000011, 0x00005C0B, 0x000019EE,
|
||||
0x00002704, 0x00050086, 0x00000011, 0x00001F69, 0x00005C0B, 0x00001997,
|
||||
0x00050051, 0x0000000B, 0x0000366C, 0x00001F69, 0x00000000, 0x000500C4,
|
||||
0x0000000B, 0x00004D4D, 0x0000366C, 0x00000A10, 0x00050051, 0x0000000B,
|
||||
0x000051A9, 0x00001F69, 0x00000001, 0x00050051, 0x0000000B, 0x000059EE,
|
||||
0x000027F5, 0x00000002, 0x00060050, 0x00000014, 0x000024C9, 0x00004D4D,
|
||||
0x000051A9, 0x000059EE, 0x000300F7, 0x00005341, 0x00000002, 0x000400FA,
|
||||
0x00004B17, 0x0000537D, 0x00002DD9, 0x000200F8, 0x0000537D, 0x0004007C,
|
||||
0x00000016, 0x00002970, 0x000024C9, 0x00050051, 0x0000000C, 0x000042C2,
|
||||
0x00002970, 0x00000001, 0x000500C3, 0x0000000C, 0x000024FD, 0x000042C2,
|
||||
0x00000A17, 0x00050051, 0x0000000C, 0x00002747, 0x00002970, 0x00000002,
|
||||
0x000500C3, 0x0000000C, 0x0000405C, 0x00002747, 0x00000A11, 0x000500C2,
|
||||
0x0000000B, 0x00005B4D, 0x00005697, 0x00000A16, 0x0004007C, 0x0000000C,
|
||||
0x000018AA, 0x00005B4D, 0x00050084, 0x0000000C, 0x00005321, 0x0000405C,
|
||||
0x000018AA, 0x00050080, 0x0000000C, 0x00003B27, 0x000024FD, 0x00005321,
|
||||
0x000500C2, 0x0000000B, 0x00002348, 0x00005EAC, 0x00000A19, 0x0004007C,
|
||||
0x0000000C, 0x0000308B, 0x00002348, 0x00050084, 0x0000000C, 0x00002878,
|
||||
0x00003B27, 0x0000308B, 0x00050051, 0x0000000C, 0x00006242, 0x00002970,
|
||||
0x00000000, 0x000500C3, 0x0000000C, 0x00004FC7, 0x00006242, 0x00000A1A,
|
||||
0x00050080, 0x0000000C, 0x000049FC, 0x00004FC7, 0x00002878, 0x000500C4,
|
||||
0x0000000C, 0x0000225D, 0x000049FC, 0x00000A22, 0x000500C7, 0x0000000C,
|
||||
0x00002CF6, 0x0000225D, 0x0000078B, 0x000500C4, 0x0000000C, 0x000049FA,
|
||||
0x00002CF6, 0x00000A0E, 0x000500C7, 0x0000000C, 0x00004D38, 0x00006242,
|
||||
0x00000A20, 0x000500C7, 0x0000000C, 0x00003138, 0x000042C2, 0x00000A1D,
|
||||
0x000500C4, 0x0000000C, 0x0000454D, 0x00003138, 0x00000A11, 0x00050080,
|
||||
0x0000000C, 0x0000434B, 0x00004D38, 0x0000454D, 0x000500C4, 0x0000000C,
|
||||
0x00001B88, 0x0000434B, 0x00000A22, 0x000500C3, 0x0000000C, 0x00005DE3,
|
||||
0x00001B88, 0x00000A1D, 0x000500C3, 0x0000000C, 0x00002215, 0x000042C2,
|
||||
0x00000A14, 0x00050080, 0x0000000C, 0x000035A3, 0x00002215, 0x0000405C,
|
||||
0x000500C7, 0x0000000C, 0x00005A0C, 0x000035A3, 0x00000A0E, 0x000500C3,
|
||||
0x0000000C, 0x00004112, 0x00006242, 0x00000A14, 0x000500C4, 0x0000000C,
|
||||
0x0000496A, 0x00005A0C, 0x00000A0E, 0x00050080, 0x0000000C, 0x000034BD,
|
||||
0x00004112, 0x0000496A, 0x000500C7, 0x0000000C, 0x00004ADD, 0x000034BD,
|
||||
0x00000A14, 0x000500C4, 0x0000000C, 0x0000544A, 0x00004ADD, 0x00000A0E,
|
||||
0x00050080, 0x0000000C, 0x00003C4B, 0x00005A0C, 0x0000544A, 0x000500C7,
|
||||
0x0000000C, 0x0000335E, 0x00005DE3, 0x000009DB, 0x00050080, 0x0000000C,
|
||||
0x00004F70, 0x000049FA, 0x0000335E, 0x000500C4, 0x0000000C, 0x00005B31,
|
||||
0x00004F70, 0x00000A0E, 0x000500C7, 0x0000000C, 0x00005AEA, 0x00005DE3,
|
||||
0x00000A38, 0x00050080, 0x0000000C, 0x0000285C, 0x00005B31, 0x00005AEA,
|
||||
0x000500C7, 0x0000000C, 0x000047B4, 0x00002747, 0x00000A14, 0x000500C4,
|
||||
0x0000000C, 0x0000544B, 0x000047B4, 0x00000A22, 0x00050080, 0x0000000C,
|
||||
0x00004157, 0x0000285C, 0x0000544B, 0x000500C7, 0x0000000C, 0x00004ADE,
|
||||
0x000042C2, 0x00000A0E, 0x000500C4, 0x0000000C, 0x0000544C, 0x00004ADE,
|
||||
0x00000A17, 0x00050080, 0x0000000C, 0x00004158, 0x00004157, 0x0000544C,
|
||||
0x000500C7, 0x0000000C, 0x00004FD6, 0x00003C4B, 0x00000A0E, 0x000500C4,
|
||||
0x0000000C, 0x00002703, 0x00004FD6, 0x00000A14, 0x000500C3, 0x0000000C,
|
||||
0x00003332, 0x00004158, 0x00000A1D, 0x000500C7, 0x0000000C, 0x000036D6,
|
||||
0x00003332, 0x00000A20, 0x00050080, 0x0000000C, 0x00003412, 0x00002703,
|
||||
0x000036D6, 0x000500C4, 0x0000000C, 0x00005B32, 0x00003412, 0x00000A14,
|
||||
0x000500C7, 0x0000000C, 0x00005AB1, 0x00003C4B, 0x00000A05, 0x00050080,
|
||||
0x0000000C, 0x00002A9C, 0x00005B32, 0x00005AB1, 0x000500C4, 0x0000000C,
|
||||
0x00005B33, 0x00002A9C, 0x00000A11, 0x000500C7, 0x0000000C, 0x00005AB2,
|
||||
0x00004158, 0x0000040B, 0x00050080, 0x0000000C, 0x00002A9D, 0x00005B33,
|
||||
0x00005AB2, 0x000500C4, 0x0000000C, 0x00005B34, 0x00002A9D, 0x00000A14,
|
||||
0x000500C7, 0x0000000C, 0x00005559, 0x00004158, 0x00000AC8, 0x00050080,
|
||||
0x0000000C, 0x00005EFA, 0x00005B34, 0x00005559, 0x0004007C, 0x0000000B,
|
||||
0x0000566F, 0x00005EFA, 0x000200F9, 0x00005341, 0x000200F8, 0x00002DD9,
|
||||
0x0007004F, 0x00000011, 0x00002621, 0x000024C9, 0x000024C9, 0x00000000,
|
||||
0x00000001, 0x0004007C, 0x00000012, 0x000059CF, 0x00002621, 0x00050051,
|
||||
0x0000000C, 0x00001903, 0x000059CF, 0x00000000, 0x000500C3, 0x0000000C,
|
||||
0x000024FE, 0x00001903, 0x00000A1A, 0x00050051, 0x0000000C, 0x00002748,
|
||||
0x000059CF, 0x00000001, 0x000500C3, 0x0000000C, 0x0000405D, 0x00002748,
|
||||
0x00000A1A, 0x000500C2, 0x0000000B, 0x00005B4E, 0x00005EAC, 0x00000A19,
|
||||
0x0004007C, 0x0000000C, 0x000018AB, 0x00005B4E, 0x00050084, 0x0000000C,
|
||||
0x00005347, 0x0000405D, 0x000018AB, 0x00050080, 0x0000000C, 0x00003F5E,
|
||||
0x000024FE, 0x00005347, 0x000500C4, 0x0000000C, 0x00004A8E, 0x00003F5E,
|
||||
0x00000A25, 0x000500C7, 0x0000000C, 0x00002AB6, 0x00001903, 0x00000A20,
|
||||
0x000500C7, 0x0000000C, 0x00003139, 0x00002748, 0x00000A35, 0x000500C4,
|
||||
0x0000000C, 0x0000454E, 0x00003139, 0x00000A11, 0x00050080, 0x0000000C,
|
||||
0x00004397, 0x00002AB6, 0x0000454E, 0x000500C4, 0x0000000C, 0x000018E7,
|
||||
0x00004397, 0x00000A10, 0x000500C7, 0x0000000C, 0x000027B1, 0x000018E7,
|
||||
0x000009DB, 0x000500C4, 0x0000000C, 0x00002F76, 0x000027B1, 0x00000A0E,
|
||||
0x00050080, 0x0000000C, 0x00003C4C, 0x00004A8E, 0x00002F76, 0x000500C7,
|
||||
0x0000000C, 0x00003397, 0x000018E7, 0x00000A38, 0x00050080, 0x0000000C,
|
||||
0x00004D30, 0x00003C4C, 0x00003397, 0x000500C7, 0x0000000C, 0x000047B5,
|
||||
0x00002748, 0x00000A0E, 0x000500C4, 0x0000000C, 0x0000544D, 0x000047B5,
|
||||
0x00000A17, 0x00050080, 0x0000000C, 0x00004159, 0x00004D30, 0x0000544D,
|
||||
0x000500C7, 0x0000000C, 0x00005022, 0x00004159, 0x0000040B, 0x000500C4,
|
||||
0x0000000C, 0x00002416, 0x00005022, 0x00000A14, 0x000500C7, 0x0000000C,
|
||||
0x00004A33, 0x00002748, 0x00000A3B, 0x000500C4, 0x0000000C, 0x00002F77,
|
||||
0x00004A33, 0x00000A20, 0x00050080, 0x0000000C, 0x0000415A, 0x00002416,
|
||||
0x00002F77, 0x000500C7, 0x0000000C, 0x00004ADF, 0x00004159, 0x00000388,
|
||||
0x000500C4, 0x0000000C, 0x0000544E, 0x00004ADF, 0x00000A11, 0x00050080,
|
||||
0x0000000C, 0x00004144, 0x0000415A, 0x0000544E, 0x000500C7, 0x0000000C,
|
||||
0x00005083, 0x00002748, 0x00000A23, 0x000500C3, 0x0000000C, 0x000041BF,
|
||||
0x00005083, 0x00000A11, 0x000500C3, 0x0000000C, 0x00001EEC, 0x00001903,
|
||||
0x00000A14, 0x00050080, 0x0000000C, 0x000035B6, 0x000041BF, 0x00001EEC,
|
||||
0x000500C7, 0x0000000C, 0x00005453, 0x000035B6, 0x00000A14, 0x000500C4,
|
||||
0x0000000C, 0x0000544F, 0x00005453, 0x00000A1D, 0x00050080, 0x0000000C,
|
||||
0x00003C4D, 0x00004144, 0x0000544F, 0x000500C7, 0x0000000C, 0x00002E06,
|
||||
0x00004159, 0x00000AC8, 0x00050080, 0x0000000C, 0x0000394F, 0x00003C4D,
|
||||
0x00002E06, 0x0004007C, 0x0000000B, 0x00005670, 0x0000394F, 0x000200F9,
|
||||
0x00005341, 0x000200F8, 0x00005341, 0x000700F5, 0x0000000B, 0x000024FC,
|
||||
0x0000566F, 0x0000537D, 0x00005670, 0x00002DD9, 0x00050084, 0x00000011,
|
||||
0x00003FA8, 0x00001F69, 0x00001997, 0x00050082, 0x00000011, 0x00003BBC,
|
||||
0x00005C0B, 0x00003FA8, 0x00050051, 0x0000000B, 0x00001C87, 0x00001997,
|
||||
0x00000000, 0x00050051, 0x0000000B, 0x00005962, 0x00001997, 0x00000001,
|
||||
0x00050084, 0x0000000B, 0x00003372, 0x00001C87, 0x00005962, 0x00050084,
|
||||
0x0000000B, 0x00003CA0, 0x000024FC, 0x00003372, 0x00050051, 0x0000000B,
|
||||
0x00003ED4, 0x00003BBC, 0x00000000, 0x00050084, 0x0000000B, 0x00003E12,
|
||||
0x00003ED4, 0x00005962, 0x00050051, 0x0000000B, 0x00001AE6, 0x00003BBC,
|
||||
0x00000001, 0x00050080, 0x0000000B, 0x00002B25, 0x00003E12, 0x00001AE6,
|
||||
0x000500C4, 0x0000000B, 0x0000609D, 0x00002B25, 0x00000A10, 0x000500C7,
|
||||
0x0000000B, 0x00005AB3, 0x000049F1, 0x00000A13, 0x00050080, 0x0000000B,
|
||||
0x00002557, 0x0000609D, 0x00005AB3, 0x000500C4, 0x0000000B, 0x000040AD,
|
||||
0x00002557, 0x00000A10, 0x00050080, 0x0000000B, 0x00004EAA, 0x00003CA0,
|
||||
0x000040AD, 0x00050080, 0x0000000B, 0x0000453C, 0x00005B88, 0x00004EAA,
|
||||
0x000500C2, 0x0000000B, 0x000036D8, 0x0000453C, 0x00000A16, 0x000500C2,
|
||||
0x0000000B, 0x00002DF6, 0x00004FA3, 0x00000A10, 0x000500C7, 0x0000000B,
|
||||
0x000020CA, 0x00002DF6, 0x00000A13, 0x00060041, 0x00000294, 0x000050F7,
|
||||
0x0000107A, 0x00000A0B, 0x000036D8, 0x0004003D, 0x00000017, 0x00001FCE,
|
||||
0x000050F7, 0x000500AA, 0x00000009, 0x000035C0, 0x000020CA, 0x00000A0D,
|
||||
0x000500AA, 0x00000009, 0x00005376, 0x000020CA, 0x00000A10, 0x000500A6,
|
||||
0x00000009, 0x00005686, 0x000035C0, 0x00005376, 0x000300F7, 0x00003463,
|
||||
0x00000000, 0x000400FA, 0x00005686, 0x00002957, 0x00003463, 0x000200F8,
|
||||
0x00002957, 0x000500C7, 0x00000017, 0x0000475F, 0x00001FCE, 0x000009CE,
|
||||
0x000500C4, 0x00000017, 0x000024D1, 0x0000475F, 0x0000013D, 0x000500C7,
|
||||
0x00000017, 0x000050AC, 0x00001FCE, 0x0000072E, 0x000500C2, 0x00000017,
|
||||
0x0000448D, 0x000050AC, 0x0000013D, 0x000500C5, 0x00000017, 0x00003FF8,
|
||||
0x000024D1, 0x0000448D, 0x000200F9, 0x00003463, 0x000200F8, 0x00003463,
|
||||
0x000700F5, 0x00000017, 0x00005879, 0x00001FCE, 0x00005341, 0x00003FF8,
|
||||
0x00002957, 0x000500AA, 0x00000009, 0x00004CB6, 0x000020CA, 0x00000A13,
|
||||
0x000500A6, 0x00000009, 0x00003B23, 0x00005376, 0x00004CB6, 0x000300F7,
|
||||
0x0000368A, 0x00000000, 0x000400FA, 0x00003B23, 0x00002B38, 0x0000368A,
|
||||
0x000200F8, 0x00002B38, 0x000500C4, 0x00000017, 0x00005E17, 0x00005879,
|
||||
0x000002ED, 0x000500C2, 0x00000017, 0x00003BE7, 0x00005879, 0x000002ED,
|
||||
0x000500C5, 0x00000017, 0x000029E8, 0x00005E17, 0x00003BE7, 0x000200F9,
|
||||
0x0000368A, 0x000200F8, 0x0000368A, 0x000700F5, 0x00000017, 0x000040DE,
|
||||
0x00005879, 0x00003463, 0x000029E8, 0x00002B38, 0x000500C7, 0x00000017,
|
||||
0x00004740, 0x000040DE, 0x00000352, 0x00040070, 0x0000001D, 0x000023B1,
|
||||
0x00004740, 0x0005008E, 0x0000001D, 0x00004BA5, 0x000023B1, 0x0000092A,
|
||||
0x000500C2, 0x00000017, 0x00005B47, 0x000040DE, 0x000002ED, 0x00040070,
|
||||
0x0000001D, 0x0000483C, 0x00005B47, 0x0005008E, 0x0000001D, 0x00004812,
|
||||
0x0000483C, 0x0000092A, 0x00050051, 0x0000000D, 0x0000187C, 0x00004BA5,
|
||||
0x00000000, 0x00050051, 0x0000000D, 0x000035EE, 0x00004812, 0x00000000,
|
||||
0x00050050, 0x00000013, 0x00004B20, 0x0000187C, 0x000035EE, 0x0006000C,
|
||||
0x0000000B, 0x00002171, 0x00000001, 0x0000003A, 0x00004B20, 0x00050051,
|
||||
0x0000000D, 0x00005BBF, 0x00004BA5, 0x00000001, 0x00050051, 0x0000000D,
|
||||
0x000039A7, 0x00004812, 0x00000001, 0x00050050, 0x00000013, 0x00004B21,
|
||||
0x00005BBF, 0x000039A7, 0x0006000C, 0x0000000B, 0x00002172, 0x00000001,
|
||||
0x0000003A, 0x00004B21, 0x00050051, 0x0000000D, 0x00005BC0, 0x00004BA5,
|
||||
0x00000002, 0x00050051, 0x0000000D, 0x000039A8, 0x00004812, 0x00000002,
|
||||
0x00050050, 0x00000013, 0x00004B22, 0x00005BC0, 0x000039A8, 0x0006000C,
|
||||
0x0000000B, 0x00002173, 0x00000001, 0x0000003A, 0x00004B22, 0x00050051,
|
||||
0x0000000D, 0x00005BC1, 0x00004BA5, 0x00000003, 0x00050051, 0x0000000D,
|
||||
0x000039A9, 0x00004812, 0x00000003, 0x00050050, 0x00000013, 0x00004B0D,
|
||||
0x00005BC1, 0x000039A9, 0x0006000C, 0x0000000B, 0x000020EE, 0x00000001,
|
||||
0x0000003A, 0x00004B0D, 0x00070050, 0x00000017, 0x00003ABB, 0x00002171,
|
||||
0x00002172, 0x00002173, 0x000020EE, 0x00060041, 0x00000294, 0x000045C3,
|
||||
0x0000140E, 0x00000A0B, 0x000054A6, 0x0003003E, 0x000045C3, 0x00003ABB,
|
||||
0x00050080, 0x0000000B, 0x00003CAC, 0x000054A6, 0x00000A0E, 0x000500AC,
|
||||
0x00000009, 0x00001911, 0x00001C87, 0x00000A0D, 0x000300F7, 0x000060BC,
|
||||
0x00000002, 0x000400FA, 0x00001911, 0x00005084, 0x00005094, 0x000200F8,
|
||||
0x00005084, 0x00050086, 0x0000000B, 0x00003697, 0x000019EE, 0x00001C87,
|
||||
0x00050084, 0x0000000B, 0x0000237E, 0x00003697, 0x00001C87, 0x00050082,
|
||||
0x0000000B, 0x00003171, 0x000019EE, 0x0000237E, 0x00050080, 0x0000000B,
|
||||
0x00002527, 0x00003171, 0x00000A0D, 0x000500AA, 0x00000009, 0x0000343F,
|
||||
0x00002527, 0x00001C87, 0x000300F7, 0x00001EED, 0x00000000, 0x000400FA,
|
||||
0x0000343F, 0x0000569E, 0x00002191, 0x000200F8, 0x0000569E, 0x00050084,
|
||||
0x0000000B, 0x00004B59, 0x00000A6A, 0x00001C87, 0x000500C4, 0x0000000B,
|
||||
0x0000540F, 0x00003171, 0x00000A16, 0x00050082, 0x0000000B, 0x00004944,
|
||||
0x00004B59, 0x0000540F, 0x000200F9, 0x00001EED, 0x000200F8, 0x00002191,
|
||||
0x000200F9, 0x00001EED, 0x000200F8, 0x00001EED, 0x000700F5, 0x0000000B,
|
||||
0x0000292C, 0x00004944, 0x0000569E, 0x00000A3A, 0x00002191, 0x000200F9,
|
||||
0x000060BC, 0x000200F8, 0x00005094, 0x000200F9, 0x000060BC, 0x000200F8,
|
||||
0x000060BC, 0x000700F5, 0x0000000B, 0x000029BC, 0x0000292C, 0x00001EED,
|
||||
0x00000A6A, 0x00005094, 0x00050084, 0x0000000B, 0x0000492B, 0x000029BC,
|
||||
0x00005962, 0x000500C2, 0x0000000B, 0x0000406D, 0x0000492B, 0x00000A16,
|
||||
0x00050080, 0x0000000B, 0x0000336B, 0x000036D8, 0x0000406D, 0x00060041,
|
||||
0x00000294, 0x0000571A, 0x0000107A, 0x00000A0B, 0x0000336B, 0x0004003D,
|
||||
0x00000017, 0x000019B2, 0x0000571A, 0x000300F7, 0x00003A1A, 0x00000000,
|
||||
0x000400FA, 0x00005686, 0x00002958, 0x00003A1A, 0x000200F8, 0x00002958,
|
||||
0x000500C7, 0x00000017, 0x00004760, 0x000019B2, 0x000009CE, 0x000500C4,
|
||||
0x00000017, 0x000024D2, 0x00004760, 0x0000013D, 0x000500C7, 0x00000017,
|
||||
0x000050AD, 0x000019B2, 0x0000072E, 0x000500C2, 0x00000017, 0x0000448E,
|
||||
0x000050AD, 0x0000013D, 0x000500C5, 0x00000017, 0x00003FF9, 0x000024D2,
|
||||
0x0000448E, 0x000200F9, 0x00003A1A, 0x000200F8, 0x00003A1A, 0x000700F5,
|
||||
0x00000017, 0x00002AAC, 0x000019B2, 0x000060BC, 0x00003FF9, 0x00002958,
|
||||
0x000300F7, 0x0000368B, 0x00000000, 0x000400FA, 0x00003B23, 0x00002B39,
|
||||
0x0000368B, 0x000200F8, 0x00002B39, 0x000500C4, 0x00000017, 0x00005E18,
|
||||
0x00002AAC, 0x000002ED, 0x000500C2, 0x00000017, 0x00003BE8, 0x00002AAC,
|
||||
0x000002ED, 0x000500C5, 0x00000017, 0x000029E9, 0x00005E18, 0x00003BE8,
|
||||
0x000200F9, 0x0000368B, 0x000200F8, 0x0000368B, 0x000700F5, 0x00000017,
|
||||
0x000040DF, 0x00002AAC, 0x00003A1A, 0x000029E9, 0x00002B39, 0x000500C7,
|
||||
0x00000017, 0x00004741, 0x000040DF, 0x00000352, 0x00040070, 0x0000001D,
|
||||
0x000023B2, 0x00004741, 0x0005008E, 0x0000001D, 0x00004BA6, 0x000023B2,
|
||||
0x0000092A, 0x000500C2, 0x00000017, 0x00005B48, 0x000040DF, 0x000002ED,
|
||||
0x00040070, 0x0000001D, 0x0000483D, 0x00005B48, 0x0005008E, 0x0000001D,
|
||||
0x00004813, 0x0000483D, 0x0000092A, 0x00050051, 0x0000000D, 0x0000187D,
|
||||
0x00004BA6, 0x00000000, 0x00050051, 0x0000000D, 0x000035EF, 0x00004813,
|
||||
0x00000000, 0x00050050, 0x00000013, 0x00004B23, 0x0000187D, 0x000035EF,
|
||||
0x0006000C, 0x0000000B, 0x00002174, 0x00000001, 0x0000003A, 0x00004B23,
|
||||
0x00050051, 0x0000000D, 0x00005BC2, 0x00004BA6, 0x00000001, 0x00050051,
|
||||
0x0000000D, 0x000039AA, 0x00004813, 0x00000001, 0x00050050, 0x00000013,
|
||||
0x00004B24, 0x00005BC2, 0x000039AA, 0x0006000C, 0x0000000B, 0x00002175,
|
||||
0x00000001, 0x0000003A, 0x00004B24, 0x00050051, 0x0000000D, 0x00005BC3,
|
||||
0x00004BA6, 0x00000002, 0x00050051, 0x0000000D, 0x000039AB, 0x00004813,
|
||||
0x00000002, 0x00050050, 0x00000013, 0x00004B25, 0x00005BC3, 0x000039AB,
|
||||
0x0006000C, 0x0000000B, 0x00002176, 0x00000001, 0x0000003A, 0x00004B25,
|
||||
0x00050051, 0x0000000D, 0x00005BC4, 0x00004BA6, 0x00000003, 0x00050051,
|
||||
0x0000000D, 0x000039AC, 0x00004813, 0x00000003, 0x00050050, 0x00000013,
|
||||
0x00004B0E, 0x00005BC4, 0x000039AC, 0x0006000C, 0x0000000B, 0x000020EF,
|
||||
0x00000001, 0x0000003A, 0x00004B0E, 0x00070050, 0x00000017, 0x00003ABC,
|
||||
0x00002174, 0x00002175, 0x00002176, 0x000020EF, 0x00060041, 0x00000294,
|
||||
0x00004EBE, 0x0000140E, 0x00000A0B, 0x00003CAC, 0x0003003E, 0x00004EBE,
|
||||
0x00003ABC, 0x000200F9, 0x00004C7A, 0x000200F8, 0x00004C7A, 0x000100FD,
|
||||
0x00010038,
|
||||
};
|
703
src/xenia/gpu/shaders/bytecode/vulkan_spirv/texture_load_rgba16_snorm_float_cs.h
generated
Normal file
703
src/xenia/gpu/shaders/bytecode/vulkan_spirv/texture_load_rgba16_snorm_float_cs.h
generated
Normal file
|
@ -0,0 +1,703 @@
|
|||
// Generated with `xb buildshaders`.
|
||||
#if 0
|
||||
; SPIR-V
|
||||
; Version: 1.0
|
||||
; Generator: Khronos Glslang Reference Front End; 10
|
||||
; Bound: 25179
|
||||
; Schema: 0
|
||||
OpCapability Shader
|
||||
%1 = OpExtInstImport "GLSL.std.450"
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %5663 "main" %gl_GlobalInvocationID
|
||||
OpExecutionMode %5663 LocalSize 8 32 1
|
||||
OpMemberDecorate %_struct_1161 0 Offset 0
|
||||
OpMemberDecorate %_struct_1161 1 Offset 4
|
||||
OpMemberDecorate %_struct_1161 2 Offset 8
|
||||
OpMemberDecorate %_struct_1161 3 Offset 12
|
||||
OpMemberDecorate %_struct_1161 4 Offset 16
|
||||
OpMemberDecorate %_struct_1161 5 Offset 28
|
||||
OpMemberDecorate %_struct_1161 6 Offset 32
|
||||
OpMemberDecorate %_struct_1161 7 Offset 36
|
||||
OpDecorate %_struct_1161 Block
|
||||
OpDecorate %5245 DescriptorSet 2
|
||||
OpDecorate %5245 Binding 0
|
||||
OpDecorate %gl_GlobalInvocationID BuiltIn GlobalInvocationId
|
||||
OpDecorate %_runtimearr_v4uint ArrayStride 16
|
||||
OpMemberDecorate %_struct_1972 0 NonReadable
|
||||
OpMemberDecorate %_struct_1972 0 Offset 0
|
||||
OpDecorate %_struct_1972 BufferBlock
|
||||
OpDecorate %5134 DescriptorSet 0
|
||||
OpDecorate %5134 Binding 0
|
||||
OpDecorate %_runtimearr_v4uint_0 ArrayStride 16
|
||||
OpMemberDecorate %_struct_1973 0 NonWritable
|
||||
OpMemberDecorate %_struct_1973 0 Offset 0
|
||||
OpDecorate %_struct_1973 BufferBlock
|
||||
OpDecorate %4218 DescriptorSet 1
|
||||
OpDecorate %4218 Binding 0
|
||||
OpDecorate %gl_WorkGroupSize BuiltIn WorkgroupSize
|
||||
%void = OpTypeVoid
|
||||
%1282 = OpTypeFunction %void
|
||||
%uint = OpTypeInt 32 0
|
||||
%v4uint = OpTypeVector %uint 4
|
||||
%int = OpTypeInt 32 1
|
||||
%v2int = OpTypeVector %int 2
|
||||
%v3int = OpTypeVector %int 3
|
||||
%bool = OpTypeBool
|
||||
%v3uint = OpTypeVector %uint 3
|
||||
%float = OpTypeFloat 32
|
||||
%v4float = OpTypeVector %float 4
|
||||
%float_n1 = OpConstant %float -1
|
||||
%1284 = OpConstantComposite %v4float %float_n1 %float_n1 %float_n1 %float_n1
|
||||
%v4int = OpTypeVector %int 4
|
||||
%int_16 = OpConstant %int 16
|
||||
%float_3_05185094en05 = OpConstant %float 3.05185094e-05
|
||||
%uint_0 = OpConstant %uint 0
|
||||
%v2float = OpTypeVector %float 2
|
||||
%uint_1 = OpConstant %uint 1
|
||||
%uint_2 = OpConstant %uint 2
|
||||
%uint_3 = OpConstant %uint 3
|
||||
%uint_16711935 = OpConstant %uint 16711935
|
||||
%uint_8 = OpConstant %uint 8
|
||||
%uint_4278255360 = OpConstant %uint 4278255360
|
||||
%uint_16 = OpConstant %uint 16
|
||||
%int_5 = OpConstant %int 5
|
||||
%uint_5 = OpConstant %uint 5
|
||||
%int_7 = OpConstant %int 7
|
||||
%int_14 = OpConstant %int 14
|
||||
%int_2 = OpConstant %int 2
|
||||
%int_n16 = OpConstant %int -16
|
||||
%int_1 = OpConstant %int 1
|
||||
%int_15 = OpConstant %int 15
|
||||
%int_4 = OpConstant %int 4
|
||||
%int_n512 = OpConstant %int -512
|
||||
%int_3 = OpConstant %int 3
|
||||
%int_448 = OpConstant %int 448
|
||||
%int_8 = OpConstant %int 8
|
||||
%int_6 = OpConstant %int 6
|
||||
%int_63 = OpConstant %int 63
|
||||
%uint_4 = OpConstant %uint 4
|
||||
%int_268435455 = OpConstant %int 268435455
|
||||
%int_n2 = OpConstant %int -2
|
||||
%uint_32 = OpConstant %uint 32
|
||||
%_struct_1161 = OpTypeStruct %uint %uint %uint %uint %v3uint %uint %uint %uint
|
||||
%_ptr_Uniform__struct_1161 = OpTypePointer Uniform %_struct_1161
|
||||
%5245 = OpVariable %_ptr_Uniform__struct_1161 Uniform
|
||||
%int_0 = OpConstant %int 0
|
||||
%_ptr_Uniform_uint = OpTypePointer Uniform %uint
|
||||
%_ptr_Uniform_v3uint = OpTypePointer Uniform %v3uint
|
||||
%v2uint = OpTypeVector %uint 2
|
||||
%_ptr_Input_v3uint = OpTypePointer Input %v3uint
|
||||
%gl_GlobalInvocationID = OpVariable %_ptr_Input_v3uint Input
|
||||
%2596 = OpConstantComposite %v3uint %uint_2 %uint_0 %uint_0
|
||||
%v2bool = OpTypeVector %bool 2
|
||||
%_runtimearr_v4uint = OpTypeRuntimeArray %v4uint
|
||||
%_struct_1972 = OpTypeStruct %_runtimearr_v4uint
|
||||
%_ptr_Uniform__struct_1972 = OpTypePointer Uniform %_struct_1972
|
||||
%5134 = OpVariable %_ptr_Uniform__struct_1972 Uniform
|
||||
%_runtimearr_v4uint_0 = OpTypeRuntimeArray %v4uint
|
||||
%_struct_1973 = OpTypeStruct %_runtimearr_v4uint_0
|
||||
%_ptr_Uniform__struct_1973 = OpTypePointer Uniform %_struct_1973
|
||||
%4218 = OpVariable %_ptr_Uniform__struct_1973 Uniform
|
||||
%_ptr_Uniform_v4uint = OpTypePointer Uniform %v4uint
|
||||
%gl_WorkGroupSize = OpConstantComposite %v3uint %uint_8 %uint_32 %uint_1
|
||||
%uint_9 = OpConstant %uint 9
|
||||
%uint_10 = OpConstant %uint 10
|
||||
%2510 = OpConstantComposite %v4uint %uint_16711935 %uint_16711935 %uint_16711935 %uint_16711935
|
||||
%317 = OpConstantComposite %v4uint %uint_8 %uint_8 %uint_8 %uint_8
|
||||
%1838 = OpConstantComposite %v4uint %uint_4278255360 %uint_4278255360 %uint_4278255360 %uint_4278255360
|
||||
%749 = OpConstantComposite %v4uint %uint_16 %uint_16 %uint_16 %uint_16
|
||||
%770 = OpConstantComposite %v4int %int_16 %int_16 %int_16 %int_16
|
||||
%5663 = OpFunction %void None %1282
|
||||
%15110 = OpLabel
|
||||
OpSelectionMerge %19578 None
|
||||
OpSwitch %uint_0 %15137
|
||||
%15137 = OpLabel
|
||||
%12591 = OpLoad %v3uint %gl_GlobalInvocationID
|
||||
%10229 = OpShiftLeftLogical %v3uint %12591 %2596
|
||||
%25178 = OpAccessChain %_ptr_Uniform_v3uint %5245 %int_4
|
||||
%22965 = OpLoad %v3uint %25178
|
||||
%18835 = OpVectorShuffle %v2uint %10229 %10229 0 1
|
||||
%6626 = OpVectorShuffle %v2uint %22965 %22965 0 1
|
||||
%17032 = OpUGreaterThanEqual %v2bool %18835 %6626
|
||||
%24679 = OpAny %bool %17032
|
||||
OpSelectionMerge %6282 DontFlatten
|
||||
OpBranchConditional %24679 %21992 %6282
|
||||
%21992 = OpLabel
|
||||
OpBranch %19578
|
||||
%6282 = OpLabel
|
||||
%6795 = OpBitcast %v3int %10229
|
||||
%18792 = OpAccessChain %_ptr_Uniform_uint %5245 %int_6
|
||||
%9788 = OpLoad %uint %18792
|
||||
%20376 = OpCompositeExtract %uint %22965 1
|
||||
%14692 = OpCompositeExtract %int %6795 0
|
||||
%22810 = OpIMul %int %14692 %int_8
|
||||
%6362 = OpCompositeExtract %int %6795 2
|
||||
%14505 = OpBitcast %int %20376
|
||||
%11279 = OpIMul %int %6362 %14505
|
||||
%17598 = OpCompositeExtract %int %6795 1
|
||||
%22228 = OpIAdd %int %11279 %17598
|
||||
%22405 = OpBitcast %int %9788
|
||||
%24535 = OpIMul %int %22228 %22405
|
||||
%7061 = OpIAdd %int %22810 %24535
|
||||
%19270 = OpBitcast %uint %7061
|
||||
%19460 = OpAccessChain %_ptr_Uniform_uint %5245 %int_5
|
||||
%22875 = OpLoad %uint %19460
|
||||
%8517 = OpIAdd %uint %19270 %22875
|
||||
%21670 = OpShiftRightLogical %uint %8517 %uint_4
|
||||
%20950 = OpAccessChain %_ptr_Uniform_uint %5245 %int_0
|
||||
%21411 = OpLoad %uint %20950
|
||||
%6381 = OpBitwiseAnd %uint %21411 %uint_1
|
||||
%10467 = OpINotEqual %bool %6381 %uint_0
|
||||
OpSelectionMerge %23266 DontFlatten
|
||||
OpBranchConditional %10467 %10108 %10765
|
||||
%10108 = OpLabel
|
||||
%23508 = OpBitwiseAnd %uint %21411 %uint_2
|
||||
%16300 = OpINotEqual %bool %23508 %uint_0
|
||||
OpSelectionMerge %7691 DontFlatten
|
||||
OpBranchConditional %16300 %12129 %25128
|
||||
%12129 = OpLabel
|
||||
%18210 = OpAccessChain %_ptr_Uniform_uint %5245 %int_2
|
||||
%15627 = OpLoad %uint %18210
|
||||
%22624 = OpAccessChain %_ptr_Uniform_uint %5245 %int_3
|
||||
%21535 = OpLoad %uint %22624
|
||||
%14923 = OpShiftRightArithmetic %int %17598 %int_4
|
||||
%18773 = OpShiftRightArithmetic %int %6362 %int_2
|
||||
%18759 = OpShiftRightLogical %uint %21535 %uint_4
|
||||
%6314 = OpBitcast %int %18759
|
||||
%21281 = OpIMul %int %18773 %6314
|
||||
%15143 = OpIAdd %int %14923 %21281
|
||||
%9032 = OpShiftRightLogical %uint %15627 %uint_5
|
||||
%14593 = OpBitcast %int %9032
|
||||
%8436 = OpIMul %int %15143 %14593
|
||||
%12986 = OpShiftRightArithmetic %int %14692 %int_5
|
||||
%24558 = OpIAdd %int %12986 %8436
|
||||
%8797 = OpShiftLeftLogical %int %24558 %uint_9
|
||||
%11510 = OpBitwiseAnd %int %8797 %int_268435455
|
||||
%18938 = OpShiftLeftLogical %int %11510 %int_1
|
||||
%19768 = OpBitwiseAnd %int %14692 %int_7
|
||||
%12600 = OpBitwiseAnd %int %17598 %int_6
|
||||
%17741 = OpShiftLeftLogical %int %12600 %int_2
|
||||
%17227 = OpIAdd %int %19768 %17741
|
||||
%7048 = OpShiftLeftLogical %int %17227 %uint_9
|
||||
%24035 = OpShiftRightArithmetic %int %7048 %int_6
|
||||
%8725 = OpShiftRightArithmetic %int %17598 %int_3
|
||||
%13731 = OpIAdd %int %8725 %18773
|
||||
%23052 = OpBitwiseAnd %int %13731 %int_1
|
||||
%16658 = OpShiftRightArithmetic %int %14692 %int_3
|
||||
%18794 = OpShiftLeftLogical %int %23052 %int_1
|
||||
%13501 = OpIAdd %int %16658 %18794
|
||||
%19165 = OpBitwiseAnd %int %13501 %int_3
|
||||
%21578 = OpShiftLeftLogical %int %19165 %int_1
|
||||
%15435 = OpIAdd %int %23052 %21578
|
||||
%13150 = OpBitwiseAnd %int %24035 %int_n16
|
||||
%20336 = OpIAdd %int %18938 %13150
|
||||
%23345 = OpShiftLeftLogical %int %20336 %int_1
|
||||
%23274 = OpBitwiseAnd %int %24035 %int_15
|
||||
%10332 = OpIAdd %int %23345 %23274
|
||||
%18356 = OpBitwiseAnd %int %6362 %int_3
|
||||
%21579 = OpShiftLeftLogical %int %18356 %uint_9
|
||||
%16727 = OpIAdd %int %10332 %21579
|
||||
%19166 = OpBitwiseAnd %int %17598 %int_1
|
||||
%21580 = OpShiftLeftLogical %int %19166 %int_4
|
||||
%16728 = OpIAdd %int %16727 %21580
|
||||
%20438 = OpBitwiseAnd %int %15435 %int_1
|
||||
%9987 = OpShiftLeftLogical %int %20438 %int_3
|
||||
%13106 = OpShiftRightArithmetic %int %16728 %int_6
|
||||
%14038 = OpBitwiseAnd %int %13106 %int_7
|
||||
%13330 = OpIAdd %int %9987 %14038
|
||||
%23346 = OpShiftLeftLogical %int %13330 %int_3
|
||||
%23217 = OpBitwiseAnd %int %15435 %int_n2
|
||||
%10908 = OpIAdd %int %23346 %23217
|
||||
%23347 = OpShiftLeftLogical %int %10908 %int_2
|
||||
%23218 = OpBitwiseAnd %int %16728 %int_n512
|
||||
%10909 = OpIAdd %int %23347 %23218
|
||||
%23348 = OpShiftLeftLogical %int %10909 %int_3
|
||||
%24224 = OpBitwiseAnd %int %16728 %int_63
|
||||
%21741 = OpIAdd %int %23348 %24224
|
||||
OpBranch %7691
|
||||
%25128 = OpLabel
|
||||
%6796 = OpBitcast %v2int %18835
|
||||
%18793 = OpAccessChain %_ptr_Uniform_uint %5245 %int_2
|
||||
%11954 = OpLoad %uint %18793
|
||||
%18756 = OpCompositeExtract %int %6796 0
|
||||
%19701 = OpShiftRightArithmetic %int %18756 %int_5
|
||||
%10055 = OpCompositeExtract %int %6796 1
|
||||
%16476 = OpShiftRightArithmetic %int %10055 %int_5
|
||||
%23373 = OpShiftRightLogical %uint %11954 %uint_5
|
||||
%6315 = OpBitcast %int %23373
|
||||
%21319 = OpIMul %int %16476 %6315
|
||||
%16222 = OpIAdd %int %19701 %21319
|
||||
%19086 = OpShiftLeftLogical %int %16222 %uint_10
|
||||
%10934 = OpBitwiseAnd %int %18756 %int_7
|
||||
%12601 = OpBitwiseAnd %int %10055 %int_14
|
||||
%17742 = OpShiftLeftLogical %int %12601 %int_2
|
||||
%17303 = OpIAdd %int %10934 %17742
|
||||
%6375 = OpShiftLeftLogical %int %17303 %uint_3
|
||||
%10161 = OpBitwiseAnd %int %6375 %int_n16
|
||||
%12150 = OpShiftLeftLogical %int %10161 %int_1
|
||||
%15436 = OpIAdd %int %19086 %12150
|
||||
%13207 = OpBitwiseAnd %int %6375 %int_15
|
||||
%19760 = OpIAdd %int %15436 %13207
|
||||
%18357 = OpBitwiseAnd %int %10055 %int_1
|
||||
%21581 = OpShiftLeftLogical %int %18357 %int_4
|
||||
%16729 = OpIAdd %int %19760 %21581
|
||||
%20514 = OpBitwiseAnd %int %16729 %int_n512
|
||||
%9238 = OpShiftLeftLogical %int %20514 %int_3
|
||||
%18995 = OpBitwiseAnd %int %10055 %int_16
|
||||
%12151 = OpShiftLeftLogical %int %18995 %int_7
|
||||
%16730 = OpIAdd %int %9238 %12151
|
||||
%19167 = OpBitwiseAnd %int %16729 %int_448
|
||||
%21582 = OpShiftLeftLogical %int %19167 %int_2
|
||||
%16708 = OpIAdd %int %16730 %21582
|
||||
%20611 = OpBitwiseAnd %int %10055 %int_8
|
||||
%16831 = OpShiftRightArithmetic %int %20611 %int_2
|
||||
%7916 = OpShiftRightArithmetic %int %18756 %int_3
|
||||
%13750 = OpIAdd %int %16831 %7916
|
||||
%21587 = OpBitwiseAnd %int %13750 %int_3
|
||||
%21583 = OpShiftLeftLogical %int %21587 %int_6
|
||||
%15437 = OpIAdd %int %16708 %21583
|
||||
%14157 = OpBitwiseAnd %int %16729 %int_63
|
||||
%12098 = OpIAdd %int %15437 %14157
|
||||
OpBranch %7691
|
||||
%7691 = OpLabel
|
||||
%10540 = OpPhi %int %21741 %12129 %12098 %25128
|
||||
OpBranch %23266
|
||||
%10765 = OpLabel
|
||||
%20632 = OpAccessChain %_ptr_Uniform_uint %5245 %int_2
|
||||
%15628 = OpLoad %uint %20632
|
||||
%21275 = OpAccessChain %_ptr_Uniform_uint %5245 %int_3
|
||||
%13550 = OpLoad %uint %21275
|
||||
%15070 = OpBitcast %int %13550
|
||||
%18927 = OpIMul %int %6362 %15070
|
||||
%8334 = OpIAdd %int %18927 %17598
|
||||
%8952 = OpBitcast %int %15628
|
||||
%7839 = OpIMul %int %8334 %8952
|
||||
%7984 = OpIAdd %int %22810 %7839
|
||||
OpBranch %23266
|
||||
%23266 = OpLabel
|
||||
%19748 = OpPhi %int %10540 %7691 %7984 %10765
|
||||
%24922 = OpAccessChain %_ptr_Uniform_uint %5245 %int_1
|
||||
%7502 = OpLoad %uint %24922
|
||||
%15686 = OpBitcast %int %7502
|
||||
%15579 = OpIAdd %int %15686 %19748
|
||||
%18556 = OpBitcast %uint %15579
|
||||
%21493 = OpShiftRightLogical %uint %18556 %uint_4
|
||||
%14997 = OpShiftRightLogical %uint %21411 %uint_2
|
||||
%8394 = OpBitwiseAnd %uint %14997 %uint_3
|
||||
%20727 = OpAccessChain %_ptr_Uniform_v4uint %4218 %int_0 %21493
|
||||
%8142 = OpLoad %v4uint %20727
|
||||
%13760 = OpIEqual %bool %8394 %uint_1
|
||||
%21366 = OpIEqual %bool %8394 %uint_2
|
||||
%22150 = OpLogicalOr %bool %13760 %21366
|
||||
OpSelectionMerge %13411 None
|
||||
OpBranchConditional %22150 %10583 %13411
|
||||
%10583 = OpLabel
|
||||
%18271 = OpBitwiseAnd %v4uint %8142 %2510
|
||||
%9425 = OpShiftLeftLogical %v4uint %18271 %317
|
||||
%20652 = OpBitwiseAnd %v4uint %8142 %1838
|
||||
%17549 = OpShiftRightLogical %v4uint %20652 %317
|
||||
%16376 = OpBitwiseOr %v4uint %9425 %17549
|
||||
OpBranch %13411
|
||||
%13411 = OpLabel
|
||||
%22649 = OpPhi %v4uint %8142 %23266 %16376 %10583
|
||||
%19638 = OpIEqual %bool %8394 %uint_3
|
||||
%15139 = OpLogicalOr %bool %21366 %19638
|
||||
OpSelectionMerge %12537 None
|
||||
OpBranchConditional %15139 %11064 %12537
|
||||
%11064 = OpLabel
|
||||
%24087 = OpShiftLeftLogical %v4uint %22649 %749
|
||||
%15335 = OpShiftRightLogical %v4uint %22649 %749
|
||||
%10728 = OpBitwiseOr %v4uint %24087 %15335
|
||||
OpBranch %12537
|
||||
%12537 = OpLabel
|
||||
%12106 = OpPhi %v4uint %22649 %13411 %10728 %11064
|
||||
%15375 = OpBitcast %v4int %12106
|
||||
%16910 = OpShiftLeftLogical %v4int %15375 %770
|
||||
%16536 = OpShiftRightArithmetic %v4int %16910 %770
|
||||
%10903 = OpConvertSToF %v4float %16536
|
||||
%20413 = OpVectorTimesScalar %v4float %10903 %float_3_05185094en05
|
||||
%23989 = OpExtInst %v4float %1 FMax %1284 %20413
|
||||
%14338 = OpShiftRightArithmetic %v4int %15375 %770
|
||||
%6607 = OpConvertSToF %v4float %14338
|
||||
%18247 = OpVectorTimesScalar %v4float %6607 %float_3_05185094en05
|
||||
%24070 = OpExtInst %v4float %1 FMax %1284 %18247
|
||||
%24330 = OpCompositeExtract %float %23989 0
|
||||
%14319 = OpCompositeExtract %float %24070 0
|
||||
%19232 = OpCompositeConstruct %v2float %24330 %14319
|
||||
%8561 = OpExtInst %uint %1 PackHalf2x16 %19232
|
||||
%23487 = OpCompositeExtract %float %23989 1
|
||||
%14759 = OpCompositeExtract %float %24070 1
|
||||
%19233 = OpCompositeConstruct %v2float %23487 %14759
|
||||
%8562 = OpExtInst %uint %1 PackHalf2x16 %19233
|
||||
%23488 = OpCompositeExtract %float %23989 2
|
||||
%14760 = OpCompositeExtract %float %24070 2
|
||||
%19234 = OpCompositeConstruct %v2float %23488 %14760
|
||||
%8563 = OpExtInst %uint %1 PackHalf2x16 %19234
|
||||
%23489 = OpCompositeExtract %float %23989 3
|
||||
%14761 = OpCompositeExtract %float %24070 3
|
||||
%19213 = OpCompositeConstruct %v2float %23489 %14761
|
||||
%8430 = OpExtInst %uint %1 PackHalf2x16 %19213
|
||||
%15035 = OpCompositeConstruct %v4uint %8561 %8562 %8563 %8430
|
||||
%17859 = OpAccessChain %_ptr_Uniform_v4uint %5134 %int_0 %21670
|
||||
OpStore %17859 %15035
|
||||
%15044 = OpIAdd %uint %21670 %int_1
|
||||
%18776 = OpSelect %uint %10467 %uint_32 %uint_16
|
||||
%11803 = OpShiftRightLogical %uint %18776 %uint_4
|
||||
%13947 = OpIAdd %uint %21493 %11803
|
||||
%22298 = OpAccessChain %_ptr_Uniform_v4uint %4218 %int_0 %13947
|
||||
%6578 = OpLoad %v4uint %22298
|
||||
OpSelectionMerge %14874 None
|
||||
OpBranchConditional %22150 %10584 %14874
|
||||
%10584 = OpLabel
|
||||
%18272 = OpBitwiseAnd %v4uint %6578 %2510
|
||||
%9426 = OpShiftLeftLogical %v4uint %18272 %317
|
||||
%20653 = OpBitwiseAnd %v4uint %6578 %1838
|
||||
%17550 = OpShiftRightLogical %v4uint %20653 %317
|
||||
%16377 = OpBitwiseOr %v4uint %9426 %17550
|
||||
OpBranch %14874
|
||||
%14874 = OpLabel
|
||||
%10924 = OpPhi %v4uint %6578 %12537 %16377 %10584
|
||||
OpSelectionMerge %12538 None
|
||||
OpBranchConditional %15139 %11065 %12538
|
||||
%11065 = OpLabel
|
||||
%24088 = OpShiftLeftLogical %v4uint %10924 %749
|
||||
%15336 = OpShiftRightLogical %v4uint %10924 %749
|
||||
%10729 = OpBitwiseOr %v4uint %24088 %15336
|
||||
OpBranch %12538
|
||||
%12538 = OpLabel
|
||||
%12107 = OpPhi %v4uint %10924 %14874 %10729 %11065
|
||||
%15376 = OpBitcast %v4int %12107
|
||||
%16911 = OpShiftLeftLogical %v4int %15376 %770
|
||||
%16537 = OpShiftRightArithmetic %v4int %16911 %770
|
||||
%10904 = OpConvertSToF %v4float %16537
|
||||
%20414 = OpVectorTimesScalar %v4float %10904 %float_3_05185094en05
|
||||
%23990 = OpExtInst %v4float %1 FMax %1284 %20414
|
||||
%14339 = OpShiftRightArithmetic %v4int %15376 %770
|
||||
%6608 = OpConvertSToF %v4float %14339
|
||||
%18248 = OpVectorTimesScalar %v4float %6608 %float_3_05185094en05
|
||||
%24071 = OpExtInst %v4float %1 FMax %1284 %18248
|
||||
%24331 = OpCompositeExtract %float %23990 0
|
||||
%14320 = OpCompositeExtract %float %24071 0
|
||||
%19235 = OpCompositeConstruct %v2float %24331 %14320
|
||||
%8564 = OpExtInst %uint %1 PackHalf2x16 %19235
|
||||
%23490 = OpCompositeExtract %float %23990 1
|
||||
%14762 = OpCompositeExtract %float %24071 1
|
||||
%19236 = OpCompositeConstruct %v2float %23490 %14762
|
||||
%8565 = OpExtInst %uint %1 PackHalf2x16 %19236
|
||||
%23491 = OpCompositeExtract %float %23990 2
|
||||
%14763 = OpCompositeExtract %float %24071 2
|
||||
%19237 = OpCompositeConstruct %v2float %23491 %14763
|
||||
%8566 = OpExtInst %uint %1 PackHalf2x16 %19237
|
||||
%23492 = OpCompositeExtract %float %23990 3
|
||||
%14764 = OpCompositeExtract %float %24071 3
|
||||
%19214 = OpCompositeConstruct %v2float %23492 %14764
|
||||
%8431 = OpExtInst %uint %1 PackHalf2x16 %19214
|
||||
%15036 = OpCompositeConstruct %v4uint %8564 %8565 %8566 %8431
|
||||
%20158 = OpAccessChain %_ptr_Uniform_v4uint %5134 %int_0 %15044
|
||||
OpStore %20158 %15036
|
||||
OpBranch %19578
|
||||
%19578 = OpLabel
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
#endif
|
||||
|
||||
const uint32_t texture_load_rgba16_snorm_float_cs[] = {
|
||||
0x07230203, 0x00010000, 0x0008000A, 0x0000625B, 0x00000000, 0x00020011,
|
||||
0x00000001, 0x0006000B, 0x00000001, 0x4C534C47, 0x6474732E, 0x3035342E,
|
||||
0x00000000, 0x0003000E, 0x00000000, 0x00000001, 0x0006000F, 0x00000005,
|
||||
0x0000161F, 0x6E69616D, 0x00000000, 0x00000F48, 0x00060010, 0x0000161F,
|
||||
0x00000011, 0x00000008, 0x00000020, 0x00000001, 0x00050048, 0x00000489,
|
||||
0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x00000489, 0x00000001,
|
||||
0x00000023, 0x00000004, 0x00050048, 0x00000489, 0x00000002, 0x00000023,
|
||||
0x00000008, 0x00050048, 0x00000489, 0x00000003, 0x00000023, 0x0000000C,
|
||||
0x00050048, 0x00000489, 0x00000004, 0x00000023, 0x00000010, 0x00050048,
|
||||
0x00000489, 0x00000005, 0x00000023, 0x0000001C, 0x00050048, 0x00000489,
|
||||
0x00000006, 0x00000023, 0x00000020, 0x00050048, 0x00000489, 0x00000007,
|
||||
0x00000023, 0x00000024, 0x00030047, 0x00000489, 0x00000002, 0x00040047,
|
||||
0x0000147D, 0x00000022, 0x00000002, 0x00040047, 0x0000147D, 0x00000021,
|
||||
0x00000000, 0x00040047, 0x00000F48, 0x0000000B, 0x0000001C, 0x00040047,
|
||||
0x000007DC, 0x00000006, 0x00000010, 0x00040048, 0x000007B4, 0x00000000,
|
||||
0x00000019, 0x00050048, 0x000007B4, 0x00000000, 0x00000023, 0x00000000,
|
||||
0x00030047, 0x000007B4, 0x00000003, 0x00040047, 0x0000140E, 0x00000022,
|
||||
0x00000000, 0x00040047, 0x0000140E, 0x00000021, 0x00000000, 0x00040047,
|
||||
0x000007DD, 0x00000006, 0x00000010, 0x00040048, 0x000007B5, 0x00000000,
|
||||
0x00000018, 0x00050048, 0x000007B5, 0x00000000, 0x00000023, 0x00000000,
|
||||
0x00030047, 0x000007B5, 0x00000003, 0x00040047, 0x0000107A, 0x00000022,
|
||||
0x00000001, 0x00040047, 0x0000107A, 0x00000021, 0x00000000, 0x00040047,
|
||||
0x00000024, 0x0000000B, 0x00000019, 0x00020013, 0x00000008, 0x00030021,
|
||||
0x00000502, 0x00000008, 0x00040015, 0x0000000B, 0x00000020, 0x00000000,
|
||||
0x00040017, 0x00000017, 0x0000000B, 0x00000004, 0x00040015, 0x0000000C,
|
||||
0x00000020, 0x00000001, 0x00040017, 0x00000012, 0x0000000C, 0x00000002,
|
||||
0x00040017, 0x00000016, 0x0000000C, 0x00000003, 0x00020014, 0x00000009,
|
||||
0x00040017, 0x00000014, 0x0000000B, 0x00000003, 0x00030016, 0x0000000D,
|
||||
0x00000020, 0x00040017, 0x0000001D, 0x0000000D, 0x00000004, 0x0004002B,
|
||||
0x0000000D, 0x00000341, 0xBF800000, 0x0007002C, 0x0000001D, 0x00000504,
|
||||
0x00000341, 0x00000341, 0x00000341, 0x00000341, 0x00040017, 0x0000001A,
|
||||
0x0000000C, 0x00000004, 0x0004002B, 0x0000000C, 0x00000A3B, 0x00000010,
|
||||
0x0004002B, 0x0000000D, 0x00000A38, 0x38000100, 0x0004002B, 0x0000000B,
|
||||
0x00000A0A, 0x00000000, 0x00040017, 0x00000013, 0x0000000D, 0x00000002,
|
||||
0x0004002B, 0x0000000B, 0x00000A0D, 0x00000001, 0x0004002B, 0x0000000B,
|
||||
0x00000A10, 0x00000002, 0x0004002B, 0x0000000B, 0x00000A13, 0x00000003,
|
||||
0x0004002B, 0x0000000B, 0x000008A6, 0x00FF00FF, 0x0004002B, 0x0000000B,
|
||||
0x00000A22, 0x00000008, 0x0004002B, 0x0000000B, 0x000005FD, 0xFF00FF00,
|
||||
0x0004002B, 0x0000000B, 0x00000A3A, 0x00000010, 0x0004002B, 0x0000000C,
|
||||
0x00000A1A, 0x00000005, 0x0004002B, 0x0000000B, 0x00000A19, 0x00000005,
|
||||
0x0004002B, 0x0000000C, 0x00000A20, 0x00000007, 0x0004002B, 0x0000000C,
|
||||
0x00000A35, 0x0000000E, 0x0004002B, 0x0000000C, 0x00000A11, 0x00000002,
|
||||
0x0004002B, 0x0000000C, 0x000009DB, 0xFFFFFFF0, 0x0004002B, 0x0000000C,
|
||||
0x00000A0E, 0x00000001, 0x0004002B, 0x0000000C, 0x00000A39, 0x0000000F,
|
||||
0x0004002B, 0x0000000C, 0x00000A17, 0x00000004, 0x0004002B, 0x0000000C,
|
||||
0x0000040B, 0xFFFFFE00, 0x0004002B, 0x0000000C, 0x00000A14, 0x00000003,
|
||||
0x0004002B, 0x0000000C, 0x00000388, 0x000001C0, 0x0004002B, 0x0000000C,
|
||||
0x00000A23, 0x00000008, 0x0004002B, 0x0000000C, 0x00000A1D, 0x00000006,
|
||||
0x0004002B, 0x0000000C, 0x00000AC8, 0x0000003F, 0x0004002B, 0x0000000B,
|
||||
0x00000A16, 0x00000004, 0x0004002B, 0x0000000C, 0x0000078B, 0x0FFFFFFF,
|
||||
0x0004002B, 0x0000000C, 0x00000A05, 0xFFFFFFFE, 0x0004002B, 0x0000000B,
|
||||
0x00000A6A, 0x00000020, 0x000A001E, 0x00000489, 0x0000000B, 0x0000000B,
|
||||
0x0000000B, 0x0000000B, 0x00000014, 0x0000000B, 0x0000000B, 0x0000000B,
|
||||
0x00040020, 0x00000706, 0x00000002, 0x00000489, 0x0004003B, 0x00000706,
|
||||
0x0000147D, 0x00000002, 0x0004002B, 0x0000000C, 0x00000A0B, 0x00000000,
|
||||
0x00040020, 0x00000288, 0x00000002, 0x0000000B, 0x00040020, 0x00000291,
|
||||
0x00000002, 0x00000014, 0x00040017, 0x00000011, 0x0000000B, 0x00000002,
|
||||
0x00040020, 0x00000292, 0x00000001, 0x00000014, 0x0004003B, 0x00000292,
|
||||
0x00000F48, 0x00000001, 0x0006002C, 0x00000014, 0x00000A24, 0x00000A10,
|
||||
0x00000A0A, 0x00000A0A, 0x00040017, 0x0000000F, 0x00000009, 0x00000002,
|
||||
0x0003001D, 0x000007DC, 0x00000017, 0x0003001E, 0x000007B4, 0x000007DC,
|
||||
0x00040020, 0x00000A31, 0x00000002, 0x000007B4, 0x0004003B, 0x00000A31,
|
||||
0x0000140E, 0x00000002, 0x0003001D, 0x000007DD, 0x00000017, 0x0003001E,
|
||||
0x000007B5, 0x000007DD, 0x00040020, 0x00000A32, 0x00000002, 0x000007B5,
|
||||
0x0004003B, 0x00000A32, 0x0000107A, 0x00000002, 0x00040020, 0x00000294,
|
||||
0x00000002, 0x00000017, 0x0006002C, 0x00000014, 0x00000024, 0x00000A22,
|
||||
0x00000A6A, 0x00000A0D, 0x0004002B, 0x0000000B, 0x00000A25, 0x00000009,
|
||||
0x0004002B, 0x0000000B, 0x00000A28, 0x0000000A, 0x0007002C, 0x00000017,
|
||||
0x000009CE, 0x000008A6, 0x000008A6, 0x000008A6, 0x000008A6, 0x0007002C,
|
||||
0x00000017, 0x0000013D, 0x00000A22, 0x00000A22, 0x00000A22, 0x00000A22,
|
||||
0x0007002C, 0x00000017, 0x0000072E, 0x000005FD, 0x000005FD, 0x000005FD,
|
||||
0x000005FD, 0x0007002C, 0x00000017, 0x000002ED, 0x00000A3A, 0x00000A3A,
|
||||
0x00000A3A, 0x00000A3A, 0x0007002C, 0x0000001A, 0x00000302, 0x00000A3B,
|
||||
0x00000A3B, 0x00000A3B, 0x00000A3B, 0x00050036, 0x00000008, 0x0000161F,
|
||||
0x00000000, 0x00000502, 0x000200F8, 0x00003B06, 0x000300F7, 0x00004C7A,
|
||||
0x00000000, 0x000300FB, 0x00000A0A, 0x00003B21, 0x000200F8, 0x00003B21,
|
||||
0x0004003D, 0x00000014, 0x0000312F, 0x00000F48, 0x000500C4, 0x00000014,
|
||||
0x000027F5, 0x0000312F, 0x00000A24, 0x00050041, 0x00000291, 0x0000625A,
|
||||
0x0000147D, 0x00000A17, 0x0004003D, 0x00000014, 0x000059B5, 0x0000625A,
|
||||
0x0007004F, 0x00000011, 0x00004993, 0x000027F5, 0x000027F5, 0x00000000,
|
||||
0x00000001, 0x0007004F, 0x00000011, 0x000019E2, 0x000059B5, 0x000059B5,
|
||||
0x00000000, 0x00000001, 0x000500AE, 0x0000000F, 0x00004288, 0x00004993,
|
||||
0x000019E2, 0x0004009A, 0x00000009, 0x00006067, 0x00004288, 0x000300F7,
|
||||
0x0000188A, 0x00000002, 0x000400FA, 0x00006067, 0x000055E8, 0x0000188A,
|
||||
0x000200F8, 0x000055E8, 0x000200F9, 0x00004C7A, 0x000200F8, 0x0000188A,
|
||||
0x0004007C, 0x00000016, 0x00001A8B, 0x000027F5, 0x00050041, 0x00000288,
|
||||
0x00004968, 0x0000147D, 0x00000A1D, 0x0004003D, 0x0000000B, 0x0000263C,
|
||||
0x00004968, 0x00050051, 0x0000000B, 0x00004F98, 0x000059B5, 0x00000001,
|
||||
0x00050051, 0x0000000C, 0x00003964, 0x00001A8B, 0x00000000, 0x00050084,
|
||||
0x0000000C, 0x0000591A, 0x00003964, 0x00000A23, 0x00050051, 0x0000000C,
|
||||
0x000018DA, 0x00001A8B, 0x00000002, 0x0004007C, 0x0000000C, 0x000038A9,
|
||||
0x00004F98, 0x00050084, 0x0000000C, 0x00002C0F, 0x000018DA, 0x000038A9,
|
||||
0x00050051, 0x0000000C, 0x000044BE, 0x00001A8B, 0x00000001, 0x00050080,
|
||||
0x0000000C, 0x000056D4, 0x00002C0F, 0x000044BE, 0x0004007C, 0x0000000C,
|
||||
0x00005785, 0x0000263C, 0x00050084, 0x0000000C, 0x00005FD7, 0x000056D4,
|
||||
0x00005785, 0x00050080, 0x0000000C, 0x00001B95, 0x0000591A, 0x00005FD7,
|
||||
0x0004007C, 0x0000000B, 0x00004B46, 0x00001B95, 0x00050041, 0x00000288,
|
||||
0x00004C04, 0x0000147D, 0x00000A1A, 0x0004003D, 0x0000000B, 0x0000595B,
|
||||
0x00004C04, 0x00050080, 0x0000000B, 0x00002145, 0x00004B46, 0x0000595B,
|
||||
0x000500C2, 0x0000000B, 0x000054A6, 0x00002145, 0x00000A16, 0x00050041,
|
||||
0x00000288, 0x000051D6, 0x0000147D, 0x00000A0B, 0x0004003D, 0x0000000B,
|
||||
0x000053A3, 0x000051D6, 0x000500C7, 0x0000000B, 0x000018ED, 0x000053A3,
|
||||
0x00000A0D, 0x000500AB, 0x00000009, 0x000028E3, 0x000018ED, 0x00000A0A,
|
||||
0x000300F7, 0x00005AE2, 0x00000002, 0x000400FA, 0x000028E3, 0x0000277C,
|
||||
0x00002A0D, 0x000200F8, 0x0000277C, 0x000500C7, 0x0000000B, 0x00005BD4,
|
||||
0x000053A3, 0x00000A10, 0x000500AB, 0x00000009, 0x00003FAC, 0x00005BD4,
|
||||
0x00000A0A, 0x000300F7, 0x00001E0B, 0x00000002, 0x000400FA, 0x00003FAC,
|
||||
0x00002F61, 0x00006228, 0x000200F8, 0x00002F61, 0x00050041, 0x00000288,
|
||||
0x00004722, 0x0000147D, 0x00000A11, 0x0004003D, 0x0000000B, 0x00003D0B,
|
||||
0x00004722, 0x00050041, 0x00000288, 0x00005860, 0x0000147D, 0x00000A14,
|
||||
0x0004003D, 0x0000000B, 0x0000541F, 0x00005860, 0x000500C3, 0x0000000C,
|
||||
0x00003A4B, 0x000044BE, 0x00000A17, 0x000500C3, 0x0000000C, 0x00004955,
|
||||
0x000018DA, 0x00000A11, 0x000500C2, 0x0000000B, 0x00004947, 0x0000541F,
|
||||
0x00000A16, 0x0004007C, 0x0000000C, 0x000018AA, 0x00004947, 0x00050084,
|
||||
0x0000000C, 0x00005321, 0x00004955, 0x000018AA, 0x00050080, 0x0000000C,
|
||||
0x00003B27, 0x00003A4B, 0x00005321, 0x000500C2, 0x0000000B, 0x00002348,
|
||||
0x00003D0B, 0x00000A19, 0x0004007C, 0x0000000C, 0x00003901, 0x00002348,
|
||||
0x00050084, 0x0000000C, 0x000020F4, 0x00003B27, 0x00003901, 0x000500C3,
|
||||
0x0000000C, 0x000032BA, 0x00003964, 0x00000A1A, 0x00050080, 0x0000000C,
|
||||
0x00005FEE, 0x000032BA, 0x000020F4, 0x000500C4, 0x0000000C, 0x0000225D,
|
||||
0x00005FEE, 0x00000A25, 0x000500C7, 0x0000000C, 0x00002CF6, 0x0000225D,
|
||||
0x0000078B, 0x000500C4, 0x0000000C, 0x000049FA, 0x00002CF6, 0x00000A0E,
|
||||
0x000500C7, 0x0000000C, 0x00004D38, 0x00003964, 0x00000A20, 0x000500C7,
|
||||
0x0000000C, 0x00003138, 0x000044BE, 0x00000A1D, 0x000500C4, 0x0000000C,
|
||||
0x0000454D, 0x00003138, 0x00000A11, 0x00050080, 0x0000000C, 0x0000434B,
|
||||
0x00004D38, 0x0000454D, 0x000500C4, 0x0000000C, 0x00001B88, 0x0000434B,
|
||||
0x00000A25, 0x000500C3, 0x0000000C, 0x00005DE3, 0x00001B88, 0x00000A1D,
|
||||
0x000500C3, 0x0000000C, 0x00002215, 0x000044BE, 0x00000A14, 0x00050080,
|
||||
0x0000000C, 0x000035A3, 0x00002215, 0x00004955, 0x000500C7, 0x0000000C,
|
||||
0x00005A0C, 0x000035A3, 0x00000A0E, 0x000500C3, 0x0000000C, 0x00004112,
|
||||
0x00003964, 0x00000A14, 0x000500C4, 0x0000000C, 0x0000496A, 0x00005A0C,
|
||||
0x00000A0E, 0x00050080, 0x0000000C, 0x000034BD, 0x00004112, 0x0000496A,
|
||||
0x000500C7, 0x0000000C, 0x00004ADD, 0x000034BD, 0x00000A14, 0x000500C4,
|
||||
0x0000000C, 0x0000544A, 0x00004ADD, 0x00000A0E, 0x00050080, 0x0000000C,
|
||||
0x00003C4B, 0x00005A0C, 0x0000544A, 0x000500C7, 0x0000000C, 0x0000335E,
|
||||
0x00005DE3, 0x000009DB, 0x00050080, 0x0000000C, 0x00004F70, 0x000049FA,
|
||||
0x0000335E, 0x000500C4, 0x0000000C, 0x00005B31, 0x00004F70, 0x00000A0E,
|
||||
0x000500C7, 0x0000000C, 0x00005AEA, 0x00005DE3, 0x00000A39, 0x00050080,
|
||||
0x0000000C, 0x0000285C, 0x00005B31, 0x00005AEA, 0x000500C7, 0x0000000C,
|
||||
0x000047B4, 0x000018DA, 0x00000A14, 0x000500C4, 0x0000000C, 0x0000544B,
|
||||
0x000047B4, 0x00000A25, 0x00050080, 0x0000000C, 0x00004157, 0x0000285C,
|
||||
0x0000544B, 0x000500C7, 0x0000000C, 0x00004ADE, 0x000044BE, 0x00000A0E,
|
||||
0x000500C4, 0x0000000C, 0x0000544C, 0x00004ADE, 0x00000A17, 0x00050080,
|
||||
0x0000000C, 0x00004158, 0x00004157, 0x0000544C, 0x000500C7, 0x0000000C,
|
||||
0x00004FD6, 0x00003C4B, 0x00000A0E, 0x000500C4, 0x0000000C, 0x00002703,
|
||||
0x00004FD6, 0x00000A14, 0x000500C3, 0x0000000C, 0x00003332, 0x00004158,
|
||||
0x00000A1D, 0x000500C7, 0x0000000C, 0x000036D6, 0x00003332, 0x00000A20,
|
||||
0x00050080, 0x0000000C, 0x00003412, 0x00002703, 0x000036D6, 0x000500C4,
|
||||
0x0000000C, 0x00005B32, 0x00003412, 0x00000A14, 0x000500C7, 0x0000000C,
|
||||
0x00005AB1, 0x00003C4B, 0x00000A05, 0x00050080, 0x0000000C, 0x00002A9C,
|
||||
0x00005B32, 0x00005AB1, 0x000500C4, 0x0000000C, 0x00005B33, 0x00002A9C,
|
||||
0x00000A11, 0x000500C7, 0x0000000C, 0x00005AB2, 0x00004158, 0x0000040B,
|
||||
0x00050080, 0x0000000C, 0x00002A9D, 0x00005B33, 0x00005AB2, 0x000500C4,
|
||||
0x0000000C, 0x00005B34, 0x00002A9D, 0x00000A14, 0x000500C7, 0x0000000C,
|
||||
0x00005EA0, 0x00004158, 0x00000AC8, 0x00050080, 0x0000000C, 0x000054ED,
|
||||
0x00005B34, 0x00005EA0, 0x000200F9, 0x00001E0B, 0x000200F8, 0x00006228,
|
||||
0x0004007C, 0x00000012, 0x00001A8C, 0x00004993, 0x00050041, 0x00000288,
|
||||
0x00004969, 0x0000147D, 0x00000A11, 0x0004003D, 0x0000000B, 0x00002EB2,
|
||||
0x00004969, 0x00050051, 0x0000000C, 0x00004944, 0x00001A8C, 0x00000000,
|
||||
0x000500C3, 0x0000000C, 0x00004CF5, 0x00004944, 0x00000A1A, 0x00050051,
|
||||
0x0000000C, 0x00002747, 0x00001A8C, 0x00000001, 0x000500C3, 0x0000000C,
|
||||
0x0000405C, 0x00002747, 0x00000A1A, 0x000500C2, 0x0000000B, 0x00005B4D,
|
||||
0x00002EB2, 0x00000A19, 0x0004007C, 0x0000000C, 0x000018AB, 0x00005B4D,
|
||||
0x00050084, 0x0000000C, 0x00005347, 0x0000405C, 0x000018AB, 0x00050080,
|
||||
0x0000000C, 0x00003F5E, 0x00004CF5, 0x00005347, 0x000500C4, 0x0000000C,
|
||||
0x00004A8E, 0x00003F5E, 0x00000A28, 0x000500C7, 0x0000000C, 0x00002AB6,
|
||||
0x00004944, 0x00000A20, 0x000500C7, 0x0000000C, 0x00003139, 0x00002747,
|
||||
0x00000A35, 0x000500C4, 0x0000000C, 0x0000454E, 0x00003139, 0x00000A11,
|
||||
0x00050080, 0x0000000C, 0x00004397, 0x00002AB6, 0x0000454E, 0x000500C4,
|
||||
0x0000000C, 0x000018E7, 0x00004397, 0x00000A13, 0x000500C7, 0x0000000C,
|
||||
0x000027B1, 0x000018E7, 0x000009DB, 0x000500C4, 0x0000000C, 0x00002F76,
|
||||
0x000027B1, 0x00000A0E, 0x00050080, 0x0000000C, 0x00003C4C, 0x00004A8E,
|
||||
0x00002F76, 0x000500C7, 0x0000000C, 0x00003397, 0x000018E7, 0x00000A39,
|
||||
0x00050080, 0x0000000C, 0x00004D30, 0x00003C4C, 0x00003397, 0x000500C7,
|
||||
0x0000000C, 0x000047B5, 0x00002747, 0x00000A0E, 0x000500C4, 0x0000000C,
|
||||
0x0000544D, 0x000047B5, 0x00000A17, 0x00050080, 0x0000000C, 0x00004159,
|
||||
0x00004D30, 0x0000544D, 0x000500C7, 0x0000000C, 0x00005022, 0x00004159,
|
||||
0x0000040B, 0x000500C4, 0x0000000C, 0x00002416, 0x00005022, 0x00000A14,
|
||||
0x000500C7, 0x0000000C, 0x00004A33, 0x00002747, 0x00000A3B, 0x000500C4,
|
||||
0x0000000C, 0x00002F77, 0x00004A33, 0x00000A20, 0x00050080, 0x0000000C,
|
||||
0x0000415A, 0x00002416, 0x00002F77, 0x000500C7, 0x0000000C, 0x00004ADF,
|
||||
0x00004159, 0x00000388, 0x000500C4, 0x0000000C, 0x0000544E, 0x00004ADF,
|
||||
0x00000A11, 0x00050080, 0x0000000C, 0x00004144, 0x0000415A, 0x0000544E,
|
||||
0x000500C7, 0x0000000C, 0x00005083, 0x00002747, 0x00000A23, 0x000500C3,
|
||||
0x0000000C, 0x000041BF, 0x00005083, 0x00000A11, 0x000500C3, 0x0000000C,
|
||||
0x00001EEC, 0x00004944, 0x00000A14, 0x00050080, 0x0000000C, 0x000035B6,
|
||||
0x000041BF, 0x00001EEC, 0x000500C7, 0x0000000C, 0x00005453, 0x000035B6,
|
||||
0x00000A14, 0x000500C4, 0x0000000C, 0x0000544F, 0x00005453, 0x00000A1D,
|
||||
0x00050080, 0x0000000C, 0x00003C4D, 0x00004144, 0x0000544F, 0x000500C7,
|
||||
0x0000000C, 0x0000374D, 0x00004159, 0x00000AC8, 0x00050080, 0x0000000C,
|
||||
0x00002F42, 0x00003C4D, 0x0000374D, 0x000200F9, 0x00001E0B, 0x000200F8,
|
||||
0x00001E0B, 0x000700F5, 0x0000000C, 0x0000292C, 0x000054ED, 0x00002F61,
|
||||
0x00002F42, 0x00006228, 0x000200F9, 0x00005AE2, 0x000200F8, 0x00002A0D,
|
||||
0x00050041, 0x00000288, 0x00005098, 0x0000147D, 0x00000A11, 0x0004003D,
|
||||
0x0000000B, 0x00003D0C, 0x00005098, 0x00050041, 0x00000288, 0x0000531B,
|
||||
0x0000147D, 0x00000A14, 0x0004003D, 0x0000000B, 0x000034EE, 0x0000531B,
|
||||
0x0004007C, 0x0000000C, 0x00003ADE, 0x000034EE, 0x00050084, 0x0000000C,
|
||||
0x000049EF, 0x000018DA, 0x00003ADE, 0x00050080, 0x0000000C, 0x0000208E,
|
||||
0x000049EF, 0x000044BE, 0x0004007C, 0x0000000C, 0x000022F8, 0x00003D0C,
|
||||
0x00050084, 0x0000000C, 0x00001E9F, 0x0000208E, 0x000022F8, 0x00050080,
|
||||
0x0000000C, 0x00001F30, 0x0000591A, 0x00001E9F, 0x000200F9, 0x00005AE2,
|
||||
0x000200F8, 0x00005AE2, 0x000700F5, 0x0000000C, 0x00004D24, 0x0000292C,
|
||||
0x00001E0B, 0x00001F30, 0x00002A0D, 0x00050041, 0x00000288, 0x0000615A,
|
||||
0x0000147D, 0x00000A0E, 0x0004003D, 0x0000000B, 0x00001D4E, 0x0000615A,
|
||||
0x0004007C, 0x0000000C, 0x00003D46, 0x00001D4E, 0x00050080, 0x0000000C,
|
||||
0x00003CDB, 0x00003D46, 0x00004D24, 0x0004007C, 0x0000000B, 0x0000487C,
|
||||
0x00003CDB, 0x000500C2, 0x0000000B, 0x000053F5, 0x0000487C, 0x00000A16,
|
||||
0x000500C2, 0x0000000B, 0x00003A95, 0x000053A3, 0x00000A10, 0x000500C7,
|
||||
0x0000000B, 0x000020CA, 0x00003A95, 0x00000A13, 0x00060041, 0x00000294,
|
||||
0x000050F7, 0x0000107A, 0x00000A0B, 0x000053F5, 0x0004003D, 0x00000017,
|
||||
0x00001FCE, 0x000050F7, 0x000500AA, 0x00000009, 0x000035C0, 0x000020CA,
|
||||
0x00000A0D, 0x000500AA, 0x00000009, 0x00005376, 0x000020CA, 0x00000A10,
|
||||
0x000500A6, 0x00000009, 0x00005686, 0x000035C0, 0x00005376, 0x000300F7,
|
||||
0x00003463, 0x00000000, 0x000400FA, 0x00005686, 0x00002957, 0x00003463,
|
||||
0x000200F8, 0x00002957, 0x000500C7, 0x00000017, 0x0000475F, 0x00001FCE,
|
||||
0x000009CE, 0x000500C4, 0x00000017, 0x000024D1, 0x0000475F, 0x0000013D,
|
||||
0x000500C7, 0x00000017, 0x000050AC, 0x00001FCE, 0x0000072E, 0x000500C2,
|
||||
0x00000017, 0x0000448D, 0x000050AC, 0x0000013D, 0x000500C5, 0x00000017,
|
||||
0x00003FF8, 0x000024D1, 0x0000448D, 0x000200F9, 0x00003463, 0x000200F8,
|
||||
0x00003463, 0x000700F5, 0x00000017, 0x00005879, 0x00001FCE, 0x00005AE2,
|
||||
0x00003FF8, 0x00002957, 0x000500AA, 0x00000009, 0x00004CB6, 0x000020CA,
|
||||
0x00000A13, 0x000500A6, 0x00000009, 0x00003B23, 0x00005376, 0x00004CB6,
|
||||
0x000300F7, 0x000030F9, 0x00000000, 0x000400FA, 0x00003B23, 0x00002B38,
|
||||
0x000030F9, 0x000200F8, 0x00002B38, 0x000500C4, 0x00000017, 0x00005E17,
|
||||
0x00005879, 0x000002ED, 0x000500C2, 0x00000017, 0x00003BE7, 0x00005879,
|
||||
0x000002ED, 0x000500C5, 0x00000017, 0x000029E8, 0x00005E17, 0x00003BE7,
|
||||
0x000200F9, 0x000030F9, 0x000200F8, 0x000030F9, 0x000700F5, 0x00000017,
|
||||
0x00002F4A, 0x00005879, 0x00003463, 0x000029E8, 0x00002B38, 0x0004007C,
|
||||
0x0000001A, 0x00003C0F, 0x00002F4A, 0x000500C4, 0x0000001A, 0x0000420E,
|
||||
0x00003C0F, 0x00000302, 0x000500C3, 0x0000001A, 0x00004098, 0x0000420E,
|
||||
0x00000302, 0x0004006F, 0x0000001D, 0x00002A97, 0x00004098, 0x0005008E,
|
||||
0x0000001D, 0x00004FBD, 0x00002A97, 0x00000A38, 0x0007000C, 0x0000001D,
|
||||
0x00005DB5, 0x00000001, 0x00000028, 0x00000504, 0x00004FBD, 0x000500C3,
|
||||
0x0000001A, 0x00003802, 0x00003C0F, 0x00000302, 0x0004006F, 0x0000001D,
|
||||
0x000019CF, 0x00003802, 0x0005008E, 0x0000001D, 0x00004747, 0x000019CF,
|
||||
0x00000A38, 0x0007000C, 0x0000001D, 0x00005E06, 0x00000001, 0x00000028,
|
||||
0x00000504, 0x00004747, 0x00050051, 0x0000000D, 0x00005F0A, 0x00005DB5,
|
||||
0x00000000, 0x00050051, 0x0000000D, 0x000037EF, 0x00005E06, 0x00000000,
|
||||
0x00050050, 0x00000013, 0x00004B20, 0x00005F0A, 0x000037EF, 0x0006000C,
|
||||
0x0000000B, 0x00002171, 0x00000001, 0x0000003A, 0x00004B20, 0x00050051,
|
||||
0x0000000D, 0x00005BBF, 0x00005DB5, 0x00000001, 0x00050051, 0x0000000D,
|
||||
0x000039A7, 0x00005E06, 0x00000001, 0x00050050, 0x00000013, 0x00004B21,
|
||||
0x00005BBF, 0x000039A7, 0x0006000C, 0x0000000B, 0x00002172, 0x00000001,
|
||||
0x0000003A, 0x00004B21, 0x00050051, 0x0000000D, 0x00005BC0, 0x00005DB5,
|
||||
0x00000002, 0x00050051, 0x0000000D, 0x000039A8, 0x00005E06, 0x00000002,
|
||||
0x00050050, 0x00000013, 0x00004B22, 0x00005BC0, 0x000039A8, 0x0006000C,
|
||||
0x0000000B, 0x00002173, 0x00000001, 0x0000003A, 0x00004B22, 0x00050051,
|
||||
0x0000000D, 0x00005BC1, 0x00005DB5, 0x00000003, 0x00050051, 0x0000000D,
|
||||
0x000039A9, 0x00005E06, 0x00000003, 0x00050050, 0x00000013, 0x00004B0D,
|
||||
0x00005BC1, 0x000039A9, 0x0006000C, 0x0000000B, 0x000020EE, 0x00000001,
|
||||
0x0000003A, 0x00004B0D, 0x00070050, 0x00000017, 0x00003ABB, 0x00002171,
|
||||
0x00002172, 0x00002173, 0x000020EE, 0x00060041, 0x00000294, 0x000045C3,
|
||||
0x0000140E, 0x00000A0B, 0x000054A6, 0x0003003E, 0x000045C3, 0x00003ABB,
|
||||
0x00050080, 0x0000000B, 0x00003AC4, 0x000054A6, 0x00000A0E, 0x000600A9,
|
||||
0x0000000B, 0x00004958, 0x000028E3, 0x00000A6A, 0x00000A3A, 0x000500C2,
|
||||
0x0000000B, 0x00002E1B, 0x00004958, 0x00000A16, 0x00050080, 0x0000000B,
|
||||
0x0000367B, 0x000053F5, 0x00002E1B, 0x00060041, 0x00000294, 0x0000571A,
|
||||
0x0000107A, 0x00000A0B, 0x0000367B, 0x0004003D, 0x00000017, 0x000019B2,
|
||||
0x0000571A, 0x000300F7, 0x00003A1A, 0x00000000, 0x000400FA, 0x00005686,
|
||||
0x00002958, 0x00003A1A, 0x000200F8, 0x00002958, 0x000500C7, 0x00000017,
|
||||
0x00004760, 0x000019B2, 0x000009CE, 0x000500C4, 0x00000017, 0x000024D2,
|
||||
0x00004760, 0x0000013D, 0x000500C7, 0x00000017, 0x000050AD, 0x000019B2,
|
||||
0x0000072E, 0x000500C2, 0x00000017, 0x0000448E, 0x000050AD, 0x0000013D,
|
||||
0x000500C5, 0x00000017, 0x00003FF9, 0x000024D2, 0x0000448E, 0x000200F9,
|
||||
0x00003A1A, 0x000200F8, 0x00003A1A, 0x000700F5, 0x00000017, 0x00002AAC,
|
||||
0x000019B2, 0x000030F9, 0x00003FF9, 0x00002958, 0x000300F7, 0x000030FA,
|
||||
0x00000000, 0x000400FA, 0x00003B23, 0x00002B39, 0x000030FA, 0x000200F8,
|
||||
0x00002B39, 0x000500C4, 0x00000017, 0x00005E18, 0x00002AAC, 0x000002ED,
|
||||
0x000500C2, 0x00000017, 0x00003BE8, 0x00002AAC, 0x000002ED, 0x000500C5,
|
||||
0x00000017, 0x000029E9, 0x00005E18, 0x00003BE8, 0x000200F9, 0x000030FA,
|
||||
0x000200F8, 0x000030FA, 0x000700F5, 0x00000017, 0x00002F4B, 0x00002AAC,
|
||||
0x00003A1A, 0x000029E9, 0x00002B39, 0x0004007C, 0x0000001A, 0x00003C10,
|
||||
0x00002F4B, 0x000500C4, 0x0000001A, 0x0000420F, 0x00003C10, 0x00000302,
|
||||
0x000500C3, 0x0000001A, 0x00004099, 0x0000420F, 0x00000302, 0x0004006F,
|
||||
0x0000001D, 0x00002A98, 0x00004099, 0x0005008E, 0x0000001D, 0x00004FBE,
|
||||
0x00002A98, 0x00000A38, 0x0007000C, 0x0000001D, 0x00005DB6, 0x00000001,
|
||||
0x00000028, 0x00000504, 0x00004FBE, 0x000500C3, 0x0000001A, 0x00003803,
|
||||
0x00003C10, 0x00000302, 0x0004006F, 0x0000001D, 0x000019D0, 0x00003803,
|
||||
0x0005008E, 0x0000001D, 0x00004748, 0x000019D0, 0x00000A38, 0x0007000C,
|
||||
0x0000001D, 0x00005E07, 0x00000001, 0x00000028, 0x00000504, 0x00004748,
|
||||
0x00050051, 0x0000000D, 0x00005F0B, 0x00005DB6, 0x00000000, 0x00050051,
|
||||
0x0000000D, 0x000037F0, 0x00005E07, 0x00000000, 0x00050050, 0x00000013,
|
||||
0x00004B23, 0x00005F0B, 0x000037F0, 0x0006000C, 0x0000000B, 0x00002174,
|
||||
0x00000001, 0x0000003A, 0x00004B23, 0x00050051, 0x0000000D, 0x00005BC2,
|
||||
0x00005DB6, 0x00000001, 0x00050051, 0x0000000D, 0x000039AA, 0x00005E07,
|
||||
0x00000001, 0x00050050, 0x00000013, 0x00004B24, 0x00005BC2, 0x000039AA,
|
||||
0x0006000C, 0x0000000B, 0x00002175, 0x00000001, 0x0000003A, 0x00004B24,
|
||||
0x00050051, 0x0000000D, 0x00005BC3, 0x00005DB6, 0x00000002, 0x00050051,
|
||||
0x0000000D, 0x000039AB, 0x00005E07, 0x00000002, 0x00050050, 0x00000013,
|
||||
0x00004B25, 0x00005BC3, 0x000039AB, 0x0006000C, 0x0000000B, 0x00002176,
|
||||
0x00000001, 0x0000003A, 0x00004B25, 0x00050051, 0x0000000D, 0x00005BC4,
|
||||
0x00005DB6, 0x00000003, 0x00050051, 0x0000000D, 0x000039AC, 0x00005E07,
|
||||
0x00000003, 0x00050050, 0x00000013, 0x00004B0E, 0x00005BC4, 0x000039AC,
|
||||
0x0006000C, 0x0000000B, 0x000020EF, 0x00000001, 0x0000003A, 0x00004B0E,
|
||||
0x00070050, 0x00000017, 0x00003ABC, 0x00002174, 0x00002175, 0x00002176,
|
||||
0x000020EF, 0x00060041, 0x00000294, 0x00004EBE, 0x0000140E, 0x00000A0B,
|
||||
0x00003AC4, 0x0003003E, 0x00004EBE, 0x00003ABC, 0x000200F9, 0x00004C7A,
|
||||
0x000200F8, 0x00004C7A, 0x000100FD, 0x00010038,
|
||||
};
|
773
src/xenia/gpu/shaders/bytecode/vulkan_spirv/texture_load_rgba16_snorm_float_scaled_cs.h
generated
Normal file
773
src/xenia/gpu/shaders/bytecode/vulkan_spirv/texture_load_rgba16_snorm_float_scaled_cs.h
generated
Normal file
|
@ -0,0 +1,773 @@
|
|||
// Generated with `xb buildshaders`.
|
||||
#if 0
|
||||
; SPIR-V
|
||||
; Version: 1.0
|
||||
; Generator: Khronos Glslang Reference Front End; 10
|
||||
; Bound: 25179
|
||||
; Schema: 0
|
||||
OpCapability Shader
|
||||
%1 = OpExtInstImport "GLSL.std.450"
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %5663 "main" %gl_GlobalInvocationID
|
||||
OpExecutionMode %5663 LocalSize 8 32 1
|
||||
OpMemberDecorate %_struct_1161 0 Offset 0
|
||||
OpMemberDecorate %_struct_1161 1 Offset 4
|
||||
OpMemberDecorate %_struct_1161 2 Offset 8
|
||||
OpMemberDecorate %_struct_1161 3 Offset 12
|
||||
OpMemberDecorate %_struct_1161 4 Offset 16
|
||||
OpMemberDecorate %_struct_1161 5 Offset 28
|
||||
OpMemberDecorate %_struct_1161 6 Offset 32
|
||||
OpMemberDecorate %_struct_1161 7 Offset 36
|
||||
OpDecorate %_struct_1161 Block
|
||||
OpDecorate %5245 DescriptorSet 2
|
||||
OpDecorate %5245 Binding 0
|
||||
OpDecorate %gl_GlobalInvocationID BuiltIn GlobalInvocationId
|
||||
OpDecorate %_runtimearr_v4uint ArrayStride 16
|
||||
OpMemberDecorate %_struct_1972 0 NonReadable
|
||||
OpMemberDecorate %_struct_1972 0 Offset 0
|
||||
OpDecorate %_struct_1972 BufferBlock
|
||||
OpDecorate %5134 DescriptorSet 0
|
||||
OpDecorate %5134 Binding 0
|
||||
OpDecorate %_runtimearr_v4uint_0 ArrayStride 16
|
||||
OpMemberDecorate %_struct_1973 0 NonWritable
|
||||
OpMemberDecorate %_struct_1973 0 Offset 0
|
||||
OpDecorate %_struct_1973 BufferBlock
|
||||
OpDecorate %4218 DescriptorSet 1
|
||||
OpDecorate %4218 Binding 0
|
||||
OpDecorate %gl_WorkGroupSize BuiltIn WorkgroupSize
|
||||
%void = OpTypeVoid
|
||||
%1282 = OpTypeFunction %void
|
||||
%uint = OpTypeInt 32 0
|
||||
%v4uint = OpTypeVector %uint 4
|
||||
%int = OpTypeInt 32 1
|
||||
%v2int = OpTypeVector %int 2
|
||||
%v3int = OpTypeVector %int 3
|
||||
%bool = OpTypeBool
|
||||
%v3uint = OpTypeVector %uint 3
|
||||
%v2uint = OpTypeVector %uint 2
|
||||
%float = OpTypeFloat 32
|
||||
%v4float = OpTypeVector %float 4
|
||||
%float_n1 = OpConstant %float -1
|
||||
%1284 = OpConstantComposite %v4float %float_n1 %float_n1 %float_n1 %float_n1
|
||||
%v4int = OpTypeVector %int 4
|
||||
%int_16 = OpConstant %int 16
|
||||
%float_3_05185094en05 = OpConstant %float 3.05185094e-05
|
||||
%uint_0 = OpConstant %uint 0
|
||||
%v2float = OpTypeVector %float 2
|
||||
%uint_1 = OpConstant %uint 1
|
||||
%uint_2 = OpConstant %uint 2
|
||||
%uint_3 = OpConstant %uint 3
|
||||
%uint_16711935 = OpConstant %uint 16711935
|
||||
%uint_8 = OpConstant %uint 8
|
||||
%uint_4278255360 = OpConstant %uint 4278255360
|
||||
%uint_16 = OpConstant %uint 16
|
||||
%int_5 = OpConstant %int 5
|
||||
%uint_5 = OpConstant %uint 5
|
||||
%int_7 = OpConstant %int 7
|
||||
%int_14 = OpConstant %int 14
|
||||
%int_2 = OpConstant %int 2
|
||||
%int_n16 = OpConstant %int -16
|
||||
%int_1 = OpConstant %int 1
|
||||
%int_15 = OpConstant %int 15
|
||||
%int_4 = OpConstant %int 4
|
||||
%int_n512 = OpConstant %int -512
|
||||
%int_3 = OpConstant %int 3
|
||||
%int_448 = OpConstant %int 448
|
||||
%int_8 = OpConstant %int 8
|
||||
%int_6 = OpConstant %int 6
|
||||
%int_63 = OpConstant %int 63
|
||||
%uint_4 = OpConstant %uint 4
|
||||
%uint_6 = OpConstant %uint 6
|
||||
%int_268435455 = OpConstant %int 268435455
|
||||
%int_n2 = OpConstant %int -2
|
||||
%uint_32 = OpConstant %uint 32
|
||||
%_struct_1161 = OpTypeStruct %uint %uint %uint %uint %v3uint %uint %uint %uint
|
||||
%_ptr_Uniform__struct_1161 = OpTypePointer Uniform %_struct_1161
|
||||
%5245 = OpVariable %_ptr_Uniform__struct_1161 Uniform
|
||||
%int_0 = OpConstant %int 0
|
||||
%_ptr_Uniform_uint = OpTypePointer Uniform %uint
|
||||
%1915 = OpConstantComposite %v2uint %uint_4 %uint_6
|
||||
%_ptr_Uniform_v3uint = OpTypePointer Uniform %v3uint
|
||||
%_ptr_Input_v3uint = OpTypePointer Input %v3uint
|
||||
%gl_GlobalInvocationID = OpVariable %_ptr_Input_v3uint Input
|
||||
%2596 = OpConstantComposite %v3uint %uint_2 %uint_0 %uint_0
|
||||
%v2bool = OpTypeVector %bool 2
|
||||
%_runtimearr_v4uint = OpTypeRuntimeArray %v4uint
|
||||
%_struct_1972 = OpTypeStruct %_runtimearr_v4uint
|
||||
%_ptr_Uniform__struct_1972 = OpTypePointer Uniform %_struct_1972
|
||||
%5134 = OpVariable %_ptr_Uniform__struct_1972 Uniform
|
||||
%_runtimearr_v4uint_0 = OpTypeRuntimeArray %v4uint
|
||||
%_struct_1973 = OpTypeStruct %_runtimearr_v4uint_0
|
||||
%_ptr_Uniform__struct_1973 = OpTypePointer Uniform %_struct_1973
|
||||
%4218 = OpVariable %_ptr_Uniform__struct_1973 Uniform
|
||||
%_ptr_Uniform_v4uint = OpTypePointer Uniform %v4uint
|
||||
%gl_WorkGroupSize = OpConstantComposite %v3uint %uint_8 %uint_32 %uint_1
|
||||
%1870 = OpConstantComposite %v2uint %uint_3 %uint_3
|
||||
%uint_9 = OpConstant %uint 9
|
||||
%uint_10 = OpConstant %uint 10
|
||||
%2510 = OpConstantComposite %v4uint %uint_16711935 %uint_16711935 %uint_16711935 %uint_16711935
|
||||
%317 = OpConstantComposite %v4uint %uint_8 %uint_8 %uint_8 %uint_8
|
||||
%1838 = OpConstantComposite %v4uint %uint_4278255360 %uint_4278255360 %uint_4278255360 %uint_4278255360
|
||||
%749 = OpConstantComposite %v4uint %uint_16 %uint_16 %uint_16 %uint_16
|
||||
%770 = OpConstantComposite %v4int %int_16 %int_16 %int_16 %int_16
|
||||
%5663 = OpFunction %void None %1282
|
||||
%15110 = OpLabel
|
||||
OpSelectionMerge %19578 None
|
||||
OpSwitch %uint_0 %15137
|
||||
%15137 = OpLabel
|
||||
%12591 = OpLoad %v3uint %gl_GlobalInvocationID
|
||||
%10229 = OpShiftLeftLogical %v3uint %12591 %2596
|
||||
%25178 = OpAccessChain %_ptr_Uniform_v3uint %5245 %int_4
|
||||
%22965 = OpLoad %v3uint %25178
|
||||
%18835 = OpVectorShuffle %v2uint %10229 %10229 0 1
|
||||
%6626 = OpVectorShuffle %v2uint %22965 %22965 0 1
|
||||
%17032 = OpUGreaterThanEqual %v2bool %18835 %6626
|
||||
%24679 = OpAny %bool %17032
|
||||
OpSelectionMerge %6282 DontFlatten
|
||||
OpBranchConditional %24679 %21992 %6282
|
||||
%21992 = OpLabel
|
||||
OpBranch %19578
|
||||
%6282 = OpLabel
|
||||
%6795 = OpBitcast %v3int %10229
|
||||
%18792 = OpAccessChain %_ptr_Uniform_uint %5245 %int_6
|
||||
%9788 = OpLoad %uint %18792
|
||||
%20376 = OpCompositeExtract %uint %22965 1
|
||||
%14692 = OpCompositeExtract %int %6795 0
|
||||
%22810 = OpIMul %int %14692 %int_8
|
||||
%6362 = OpCompositeExtract %int %6795 2
|
||||
%14505 = OpBitcast %int %20376
|
||||
%11279 = OpIMul %int %6362 %14505
|
||||
%17598 = OpCompositeExtract %int %6795 1
|
||||
%22228 = OpIAdd %int %11279 %17598
|
||||
%22405 = OpBitcast %int %9788
|
||||
%24535 = OpIMul %int %22228 %22405
|
||||
%7061 = OpIAdd %int %22810 %24535
|
||||
%19270 = OpBitcast %uint %7061
|
||||
%19460 = OpAccessChain %_ptr_Uniform_uint %5245 %int_5
|
||||
%22875 = OpLoad %uint %19460
|
||||
%8517 = OpIAdd %uint %19270 %22875
|
||||
%21670 = OpShiftRightLogical %uint %8517 %uint_4
|
||||
%18404 = OpAccessChain %_ptr_Uniform_uint %5245 %int_1
|
||||
%23432 = OpLoad %uint %18404
|
||||
%22700 = OpAccessChain %_ptr_Uniform_uint %5245 %int_0
|
||||
%20387 = OpLoad %uint %22700
|
||||
%22279 = OpBitwiseAnd %uint %20387 %uint_2
|
||||
%19223 = OpINotEqual %bool %22279 %uint_0
|
||||
%17247 = OpCompositeConstruct %v2uint %20387 %20387
|
||||
%22947 = OpShiftRightLogical %v2uint %17247 %1915
|
||||
%6551 = OpBitwiseAnd %v2uint %22947 %1870
|
||||
%18732 = OpAccessChain %_ptr_Uniform_uint %5245 %int_2
|
||||
%24236 = OpLoad %uint %18732
|
||||
%20458 = OpAccessChain %_ptr_Uniform_uint %5245 %int_3
|
||||
%22167 = OpLoad %uint %20458
|
||||
%18929 = OpCompositeExtract %uint %10229 0
|
||||
%6638 = OpShiftRightLogical %uint %18929 %uint_1
|
||||
%9988 = OpCompositeExtract %uint %10229 1
|
||||
%23563 = OpCompositeConstruct %v2uint %6638 %9988
|
||||
%8041 = OpUDiv %v2uint %23563 %6551
|
||||
%13932 = OpCompositeExtract %uint %8041 0
|
||||
%19789 = OpShiftLeftLogical %uint %13932 %uint_1
|
||||
%20905 = OpCompositeExtract %uint %8041 1
|
||||
%23022 = OpCompositeExtract %uint %10229 2
|
||||
%9417 = OpCompositeConstruct %v3uint %19789 %20905 %23022
|
||||
OpSelectionMerge %21313 DontFlatten
|
||||
OpBranchConditional %19223 %21373 %11737
|
||||
%21373 = OpLabel
|
||||
%10608 = OpBitcast %v3int %9417
|
||||
%17090 = OpCompositeExtract %int %10608 1
|
||||
%9469 = OpShiftRightArithmetic %int %17090 %int_4
|
||||
%10055 = OpCompositeExtract %int %10608 2
|
||||
%16476 = OpShiftRightArithmetic %int %10055 %int_2
|
||||
%23373 = OpShiftRightLogical %uint %22167 %uint_4
|
||||
%6314 = OpBitcast %int %23373
|
||||
%21281 = OpIMul %int %16476 %6314
|
||||
%15143 = OpIAdd %int %9469 %21281
|
||||
%9032 = OpShiftRightLogical %uint %24236 %uint_5
|
||||
%12427 = OpBitcast %int %9032
|
||||
%10360 = OpIMul %int %15143 %12427
|
||||
%25154 = OpCompositeExtract %int %10608 0
|
||||
%20423 = OpShiftRightArithmetic %int %25154 %int_5
|
||||
%18940 = OpIAdd %int %20423 %10360
|
||||
%8797 = OpShiftLeftLogical %int %18940 %uint_9
|
||||
%11510 = OpBitwiseAnd %int %8797 %int_268435455
|
||||
%18938 = OpShiftLeftLogical %int %11510 %int_1
|
||||
%19768 = OpBitwiseAnd %int %25154 %int_7
|
||||
%12600 = OpBitwiseAnd %int %17090 %int_6
|
||||
%17741 = OpShiftLeftLogical %int %12600 %int_2
|
||||
%17227 = OpIAdd %int %19768 %17741
|
||||
%7048 = OpShiftLeftLogical %int %17227 %uint_9
|
||||
%24035 = OpShiftRightArithmetic %int %7048 %int_6
|
||||
%8725 = OpShiftRightArithmetic %int %17090 %int_3
|
||||
%13731 = OpIAdd %int %8725 %16476
|
||||
%23052 = OpBitwiseAnd %int %13731 %int_1
|
||||
%16658 = OpShiftRightArithmetic %int %25154 %int_3
|
||||
%18794 = OpShiftLeftLogical %int %23052 %int_1
|
||||
%13501 = OpIAdd %int %16658 %18794
|
||||
%19165 = OpBitwiseAnd %int %13501 %int_3
|
||||
%21578 = OpShiftLeftLogical %int %19165 %int_1
|
||||
%15435 = OpIAdd %int %23052 %21578
|
||||
%13150 = OpBitwiseAnd %int %24035 %int_n16
|
||||
%20336 = OpIAdd %int %18938 %13150
|
||||
%23345 = OpShiftLeftLogical %int %20336 %int_1
|
||||
%23274 = OpBitwiseAnd %int %24035 %int_15
|
||||
%10332 = OpIAdd %int %23345 %23274
|
||||
%18356 = OpBitwiseAnd %int %10055 %int_3
|
||||
%21579 = OpShiftLeftLogical %int %18356 %uint_9
|
||||
%16727 = OpIAdd %int %10332 %21579
|
||||
%19166 = OpBitwiseAnd %int %17090 %int_1
|
||||
%21580 = OpShiftLeftLogical %int %19166 %int_4
|
||||
%16728 = OpIAdd %int %16727 %21580
|
||||
%20438 = OpBitwiseAnd %int %15435 %int_1
|
||||
%9987 = OpShiftLeftLogical %int %20438 %int_3
|
||||
%13106 = OpShiftRightArithmetic %int %16728 %int_6
|
||||
%14038 = OpBitwiseAnd %int %13106 %int_7
|
||||
%13330 = OpIAdd %int %9987 %14038
|
||||
%23346 = OpShiftLeftLogical %int %13330 %int_3
|
||||
%23217 = OpBitwiseAnd %int %15435 %int_n2
|
||||
%10908 = OpIAdd %int %23346 %23217
|
||||
%23347 = OpShiftLeftLogical %int %10908 %int_2
|
||||
%23218 = OpBitwiseAnd %int %16728 %int_n512
|
||||
%10909 = OpIAdd %int %23347 %23218
|
||||
%23348 = OpShiftLeftLogical %int %10909 %int_3
|
||||
%21849 = OpBitwiseAnd %int %16728 %int_63
|
||||
%24314 = OpIAdd %int %23348 %21849
|
||||
%22127 = OpBitcast %uint %24314
|
||||
OpBranch %21313
|
||||
%11737 = OpLabel
|
||||
%9761 = OpVectorShuffle %v2uint %9417 %9417 0 1
|
||||
%22991 = OpBitcast %v2int %9761
|
||||
%6403 = OpCompositeExtract %int %22991 0
|
||||
%9470 = OpShiftRightArithmetic %int %6403 %int_5
|
||||
%10056 = OpCompositeExtract %int %22991 1
|
||||
%16477 = OpShiftRightArithmetic %int %10056 %int_5
|
||||
%23374 = OpShiftRightLogical %uint %24236 %uint_5
|
||||
%6315 = OpBitcast %int %23374
|
||||
%21319 = OpIMul %int %16477 %6315
|
||||
%16222 = OpIAdd %int %9470 %21319
|
||||
%19086 = OpShiftLeftLogical %int %16222 %uint_10
|
||||
%10934 = OpBitwiseAnd %int %6403 %int_7
|
||||
%12601 = OpBitwiseAnd %int %10056 %int_14
|
||||
%17742 = OpShiftLeftLogical %int %12601 %int_2
|
||||
%17303 = OpIAdd %int %10934 %17742
|
||||
%6375 = OpShiftLeftLogical %int %17303 %uint_3
|
||||
%10161 = OpBitwiseAnd %int %6375 %int_n16
|
||||
%12150 = OpShiftLeftLogical %int %10161 %int_1
|
||||
%15436 = OpIAdd %int %19086 %12150
|
||||
%13207 = OpBitwiseAnd %int %6375 %int_15
|
||||
%19760 = OpIAdd %int %15436 %13207
|
||||
%18357 = OpBitwiseAnd %int %10056 %int_1
|
||||
%21581 = OpShiftLeftLogical %int %18357 %int_4
|
||||
%16729 = OpIAdd %int %19760 %21581
|
||||
%20514 = OpBitwiseAnd %int %16729 %int_n512
|
||||
%9238 = OpShiftLeftLogical %int %20514 %int_3
|
||||
%18995 = OpBitwiseAnd %int %10056 %int_16
|
||||
%12151 = OpShiftLeftLogical %int %18995 %int_7
|
||||
%16730 = OpIAdd %int %9238 %12151
|
||||
%19167 = OpBitwiseAnd %int %16729 %int_448
|
||||
%21582 = OpShiftLeftLogical %int %19167 %int_2
|
||||
%16708 = OpIAdd %int %16730 %21582
|
||||
%20611 = OpBitwiseAnd %int %10056 %int_8
|
||||
%16831 = OpShiftRightArithmetic %int %20611 %int_2
|
||||
%7916 = OpShiftRightArithmetic %int %6403 %int_3
|
||||
%13750 = OpIAdd %int %16831 %7916
|
||||
%21587 = OpBitwiseAnd %int %13750 %int_3
|
||||
%21583 = OpShiftLeftLogical %int %21587 %int_6
|
||||
%15437 = OpIAdd %int %16708 %21583
|
||||
%11782 = OpBitwiseAnd %int %16729 %int_63
|
||||
%14671 = OpIAdd %int %15437 %11782
|
||||
%22128 = OpBitcast %uint %14671
|
||||
OpBranch %21313
|
||||
%21313 = OpLabel
|
||||
%9468 = OpPhi %uint %22127 %21373 %22128 %11737
|
||||
%16296 = OpIMul %v2uint %8041 %6551
|
||||
%15292 = OpISub %v2uint %23563 %16296
|
||||
%7303 = OpCompositeExtract %uint %6551 0
|
||||
%22882 = OpCompositeExtract %uint %6551 1
|
||||
%13170 = OpIMul %uint %7303 %22882
|
||||
%15520 = OpIMul %uint %9468 %13170
|
||||
%16084 = OpCompositeExtract %uint %15292 0
|
||||
%15890 = OpIMul %uint %16084 %22882
|
||||
%6886 = OpCompositeExtract %uint %15292 1
|
||||
%11045 = OpIAdd %uint %15890 %6886
|
||||
%24733 = OpShiftLeftLogical %uint %11045 %uint_1
|
||||
%23219 = OpBitwiseAnd %uint %18929 %uint_1
|
||||
%9559 = OpIAdd %uint %24733 %23219
|
||||
%16557 = OpShiftLeftLogical %uint %9559 %uint_3
|
||||
%20138 = OpIAdd %uint %15520 %16557
|
||||
%17724 = OpIAdd %uint %23432 %20138
|
||||
%14040 = OpShiftRightLogical %uint %17724 %uint_4
|
||||
%11766 = OpShiftRightLogical %uint %20387 %uint_2
|
||||
%8394 = OpBitwiseAnd %uint %11766 %uint_3
|
||||
%20727 = OpAccessChain %_ptr_Uniform_v4uint %4218 %int_0 %14040
|
||||
%8142 = OpLoad %v4uint %20727
|
||||
%13760 = OpIEqual %bool %8394 %uint_1
|
||||
%21366 = OpIEqual %bool %8394 %uint_2
|
||||
%22150 = OpLogicalOr %bool %13760 %21366
|
||||
OpSelectionMerge %13411 None
|
||||
OpBranchConditional %22150 %10583 %13411
|
||||
%10583 = OpLabel
|
||||
%18271 = OpBitwiseAnd %v4uint %8142 %2510
|
||||
%9425 = OpShiftLeftLogical %v4uint %18271 %317
|
||||
%20652 = OpBitwiseAnd %v4uint %8142 %1838
|
||||
%17549 = OpShiftRightLogical %v4uint %20652 %317
|
||||
%16376 = OpBitwiseOr %v4uint %9425 %17549
|
||||
OpBranch %13411
|
||||
%13411 = OpLabel
|
||||
%22649 = OpPhi %v4uint %8142 %21313 %16376 %10583
|
||||
%19638 = OpIEqual %bool %8394 %uint_3
|
||||
%15139 = OpLogicalOr %bool %21366 %19638
|
||||
OpSelectionMerge %12537 None
|
||||
OpBranchConditional %15139 %11064 %12537
|
||||
%11064 = OpLabel
|
||||
%24087 = OpShiftLeftLogical %v4uint %22649 %749
|
||||
%15335 = OpShiftRightLogical %v4uint %22649 %749
|
||||
%10728 = OpBitwiseOr %v4uint %24087 %15335
|
||||
OpBranch %12537
|
||||
%12537 = OpLabel
|
||||
%12106 = OpPhi %v4uint %22649 %13411 %10728 %11064
|
||||
%15375 = OpBitcast %v4int %12106
|
||||
%16910 = OpShiftLeftLogical %v4int %15375 %770
|
||||
%16536 = OpShiftRightArithmetic %v4int %16910 %770
|
||||
%10903 = OpConvertSToF %v4float %16536
|
||||
%20413 = OpVectorTimesScalar %v4float %10903 %float_3_05185094en05
|
||||
%23989 = OpExtInst %v4float %1 FMax %1284 %20413
|
||||
%14338 = OpShiftRightArithmetic %v4int %15375 %770
|
||||
%6607 = OpConvertSToF %v4float %14338
|
||||
%18247 = OpVectorTimesScalar %v4float %6607 %float_3_05185094en05
|
||||
%24070 = OpExtInst %v4float %1 FMax %1284 %18247
|
||||
%24330 = OpCompositeExtract %float %23989 0
|
||||
%14319 = OpCompositeExtract %float %24070 0
|
||||
%19232 = OpCompositeConstruct %v2float %24330 %14319
|
||||
%8561 = OpExtInst %uint %1 PackHalf2x16 %19232
|
||||
%23487 = OpCompositeExtract %float %23989 1
|
||||
%14759 = OpCompositeExtract %float %24070 1
|
||||
%19233 = OpCompositeConstruct %v2float %23487 %14759
|
||||
%8562 = OpExtInst %uint %1 PackHalf2x16 %19233
|
||||
%23488 = OpCompositeExtract %float %23989 2
|
||||
%14760 = OpCompositeExtract %float %24070 2
|
||||
%19234 = OpCompositeConstruct %v2float %23488 %14760
|
||||
%8563 = OpExtInst %uint %1 PackHalf2x16 %19234
|
||||
%23489 = OpCompositeExtract %float %23989 3
|
||||
%14761 = OpCompositeExtract %float %24070 3
|
||||
%19213 = OpCompositeConstruct %v2float %23489 %14761
|
||||
%8430 = OpExtInst %uint %1 PackHalf2x16 %19213
|
||||
%15035 = OpCompositeConstruct %v4uint %8561 %8562 %8563 %8430
|
||||
%17859 = OpAccessChain %_ptr_Uniform_v4uint %5134 %int_0 %21670
|
||||
OpStore %17859 %15035
|
||||
%15532 = OpIAdd %uint %21670 %int_1
|
||||
%6417 = OpUGreaterThan %bool %7303 %uint_1
|
||||
OpSelectionMerge %24764 DontFlatten
|
||||
OpBranchConditional %6417 %20612 %20628
|
||||
%20612 = OpLabel
|
||||
%13975 = OpUDiv %uint %6638 %7303
|
||||
%9086 = OpIMul %uint %13975 %7303
|
||||
%12657 = OpISub %uint %6638 %9086
|
||||
%9511 = OpIAdd %uint %12657 %uint_1
|
||||
%13375 = OpIEqual %bool %9511 %7303
|
||||
OpSelectionMerge %7917 None
|
||||
OpBranchConditional %13375 %22174 %8593
|
||||
%22174 = OpLabel
|
||||
%19289 = OpIMul %uint %uint_32 %7303
|
||||
%21519 = OpShiftLeftLogical %uint %12657 %uint_4
|
||||
%18756 = OpISub %uint %19289 %21519
|
||||
OpBranch %7917
|
||||
%8593 = OpLabel
|
||||
OpBranch %7917
|
||||
%7917 = OpLabel
|
||||
%10540 = OpPhi %uint %18756 %22174 %uint_16 %8593
|
||||
OpBranch %24764
|
||||
%20628 = OpLabel
|
||||
OpBranch %24764
|
||||
%24764 = OpLabel
|
||||
%10684 = OpPhi %uint %10540 %7917 %uint_32 %20628
|
||||
%18731 = OpIMul %uint %10684 %22882
|
||||
%16493 = OpShiftRightLogical %uint %18731 %uint_4
|
||||
%13163 = OpIAdd %uint %14040 %16493
|
||||
%22298 = OpAccessChain %_ptr_Uniform_v4uint %4218 %int_0 %13163
|
||||
%6578 = OpLoad %v4uint %22298
|
||||
OpSelectionMerge %14874 None
|
||||
OpBranchConditional %22150 %10584 %14874
|
||||
%10584 = OpLabel
|
||||
%18272 = OpBitwiseAnd %v4uint %6578 %2510
|
||||
%9426 = OpShiftLeftLogical %v4uint %18272 %317
|
||||
%20653 = OpBitwiseAnd %v4uint %6578 %1838
|
||||
%17550 = OpShiftRightLogical %v4uint %20653 %317
|
||||
%16377 = OpBitwiseOr %v4uint %9426 %17550
|
||||
OpBranch %14874
|
||||
%14874 = OpLabel
|
||||
%10924 = OpPhi %v4uint %6578 %24764 %16377 %10584
|
||||
OpSelectionMerge %12538 None
|
||||
OpBranchConditional %15139 %11065 %12538
|
||||
%11065 = OpLabel
|
||||
%24088 = OpShiftLeftLogical %v4uint %10924 %749
|
||||
%15336 = OpShiftRightLogical %v4uint %10924 %749
|
||||
%10729 = OpBitwiseOr %v4uint %24088 %15336
|
||||
OpBranch %12538
|
||||
%12538 = OpLabel
|
||||
%12107 = OpPhi %v4uint %10924 %14874 %10729 %11065
|
||||
%15376 = OpBitcast %v4int %12107
|
||||
%16911 = OpShiftLeftLogical %v4int %15376 %770
|
||||
%16537 = OpShiftRightArithmetic %v4int %16911 %770
|
||||
%10904 = OpConvertSToF %v4float %16537
|
||||
%20414 = OpVectorTimesScalar %v4float %10904 %float_3_05185094en05
|
||||
%23990 = OpExtInst %v4float %1 FMax %1284 %20414
|
||||
%14339 = OpShiftRightArithmetic %v4int %15376 %770
|
||||
%6608 = OpConvertSToF %v4float %14339
|
||||
%18248 = OpVectorTimesScalar %v4float %6608 %float_3_05185094en05
|
||||
%24071 = OpExtInst %v4float %1 FMax %1284 %18248
|
||||
%24331 = OpCompositeExtract %float %23990 0
|
||||
%14320 = OpCompositeExtract %float %24071 0
|
||||
%19235 = OpCompositeConstruct %v2float %24331 %14320
|
||||
%8564 = OpExtInst %uint %1 PackHalf2x16 %19235
|
||||
%23490 = OpCompositeExtract %float %23990 1
|
||||
%14762 = OpCompositeExtract %float %24071 1
|
||||
%19236 = OpCompositeConstruct %v2float %23490 %14762
|
||||
%8565 = OpExtInst %uint %1 PackHalf2x16 %19236
|
||||
%23491 = OpCompositeExtract %float %23990 2
|
||||
%14763 = OpCompositeExtract %float %24071 2
|
||||
%19237 = OpCompositeConstruct %v2float %23491 %14763
|
||||
%8566 = OpExtInst %uint %1 PackHalf2x16 %19237
|
||||
%23492 = OpCompositeExtract %float %23990 3
|
||||
%14764 = OpCompositeExtract %float %24071 3
|
||||
%19214 = OpCompositeConstruct %v2float %23492 %14764
|
||||
%8431 = OpExtInst %uint %1 PackHalf2x16 %19214
|
||||
%15036 = OpCompositeConstruct %v4uint %8564 %8565 %8566 %8431
|
||||
%20158 = OpAccessChain %_ptr_Uniform_v4uint %5134 %int_0 %15532
|
||||
OpStore %20158 %15036
|
||||
OpBranch %19578
|
||||
%19578 = OpLabel
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
#endif
|
||||
|
||||
const uint32_t texture_load_rgba16_snorm_float_scaled_cs[] = {
|
||||
0x07230203, 0x00010000, 0x0008000A, 0x0000625B, 0x00000000, 0x00020011,
|
||||
0x00000001, 0x0006000B, 0x00000001, 0x4C534C47, 0x6474732E, 0x3035342E,
|
||||
0x00000000, 0x0003000E, 0x00000000, 0x00000001, 0x0006000F, 0x00000005,
|
||||
0x0000161F, 0x6E69616D, 0x00000000, 0x00000F48, 0x00060010, 0x0000161F,
|
||||
0x00000011, 0x00000008, 0x00000020, 0x00000001, 0x00050048, 0x00000489,
|
||||
0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x00000489, 0x00000001,
|
||||
0x00000023, 0x00000004, 0x00050048, 0x00000489, 0x00000002, 0x00000023,
|
||||
0x00000008, 0x00050048, 0x00000489, 0x00000003, 0x00000023, 0x0000000C,
|
||||
0x00050048, 0x00000489, 0x00000004, 0x00000023, 0x00000010, 0x00050048,
|
||||
0x00000489, 0x00000005, 0x00000023, 0x0000001C, 0x00050048, 0x00000489,
|
||||
0x00000006, 0x00000023, 0x00000020, 0x00050048, 0x00000489, 0x00000007,
|
||||
0x00000023, 0x00000024, 0x00030047, 0x00000489, 0x00000002, 0x00040047,
|
||||
0x0000147D, 0x00000022, 0x00000002, 0x00040047, 0x0000147D, 0x00000021,
|
||||
0x00000000, 0x00040047, 0x00000F48, 0x0000000B, 0x0000001C, 0x00040047,
|
||||
0x000007DC, 0x00000006, 0x00000010, 0x00040048, 0x000007B4, 0x00000000,
|
||||
0x00000019, 0x00050048, 0x000007B4, 0x00000000, 0x00000023, 0x00000000,
|
||||
0x00030047, 0x000007B4, 0x00000003, 0x00040047, 0x0000140E, 0x00000022,
|
||||
0x00000000, 0x00040047, 0x0000140E, 0x00000021, 0x00000000, 0x00040047,
|
||||
0x000007DD, 0x00000006, 0x00000010, 0x00040048, 0x000007B5, 0x00000000,
|
||||
0x00000018, 0x00050048, 0x000007B5, 0x00000000, 0x00000023, 0x00000000,
|
||||
0x00030047, 0x000007B5, 0x00000003, 0x00040047, 0x0000107A, 0x00000022,
|
||||
0x00000001, 0x00040047, 0x0000107A, 0x00000021, 0x00000000, 0x00040047,
|
||||
0x00000024, 0x0000000B, 0x00000019, 0x00020013, 0x00000008, 0x00030021,
|
||||
0x00000502, 0x00000008, 0x00040015, 0x0000000B, 0x00000020, 0x00000000,
|
||||
0x00040017, 0x00000017, 0x0000000B, 0x00000004, 0x00040015, 0x0000000C,
|
||||
0x00000020, 0x00000001, 0x00040017, 0x00000012, 0x0000000C, 0x00000002,
|
||||
0x00040017, 0x00000016, 0x0000000C, 0x00000003, 0x00020014, 0x00000009,
|
||||
0x00040017, 0x00000014, 0x0000000B, 0x00000003, 0x00040017, 0x00000011,
|
||||
0x0000000B, 0x00000002, 0x00030016, 0x0000000D, 0x00000020, 0x00040017,
|
||||
0x0000001D, 0x0000000D, 0x00000004, 0x0004002B, 0x0000000D, 0x00000341,
|
||||
0xBF800000, 0x0007002C, 0x0000001D, 0x00000504, 0x00000341, 0x00000341,
|
||||
0x00000341, 0x00000341, 0x00040017, 0x0000001A, 0x0000000C, 0x00000004,
|
||||
0x0004002B, 0x0000000C, 0x00000A3B, 0x00000010, 0x0004002B, 0x0000000D,
|
||||
0x00000A38, 0x38000100, 0x0004002B, 0x0000000B, 0x00000A0A, 0x00000000,
|
||||
0x00040017, 0x00000013, 0x0000000D, 0x00000002, 0x0004002B, 0x0000000B,
|
||||
0x00000A0D, 0x00000001, 0x0004002B, 0x0000000B, 0x00000A10, 0x00000002,
|
||||
0x0004002B, 0x0000000B, 0x00000A13, 0x00000003, 0x0004002B, 0x0000000B,
|
||||
0x000008A6, 0x00FF00FF, 0x0004002B, 0x0000000B, 0x00000A22, 0x00000008,
|
||||
0x0004002B, 0x0000000B, 0x000005FD, 0xFF00FF00, 0x0004002B, 0x0000000B,
|
||||
0x00000A3A, 0x00000010, 0x0004002B, 0x0000000C, 0x00000A1A, 0x00000005,
|
||||
0x0004002B, 0x0000000B, 0x00000A19, 0x00000005, 0x0004002B, 0x0000000C,
|
||||
0x00000A20, 0x00000007, 0x0004002B, 0x0000000C, 0x00000A35, 0x0000000E,
|
||||
0x0004002B, 0x0000000C, 0x00000A11, 0x00000002, 0x0004002B, 0x0000000C,
|
||||
0x000009DB, 0xFFFFFFF0, 0x0004002B, 0x0000000C, 0x00000A0E, 0x00000001,
|
||||
0x0004002B, 0x0000000C, 0x00000A39, 0x0000000F, 0x0004002B, 0x0000000C,
|
||||
0x00000A17, 0x00000004, 0x0004002B, 0x0000000C, 0x0000040B, 0xFFFFFE00,
|
||||
0x0004002B, 0x0000000C, 0x00000A14, 0x00000003, 0x0004002B, 0x0000000C,
|
||||
0x00000388, 0x000001C0, 0x0004002B, 0x0000000C, 0x00000A23, 0x00000008,
|
||||
0x0004002B, 0x0000000C, 0x00000A1D, 0x00000006, 0x0004002B, 0x0000000C,
|
||||
0x00000AC8, 0x0000003F, 0x0004002B, 0x0000000B, 0x00000A16, 0x00000004,
|
||||
0x0004002B, 0x0000000B, 0x00000A1C, 0x00000006, 0x0004002B, 0x0000000C,
|
||||
0x0000078B, 0x0FFFFFFF, 0x0004002B, 0x0000000C, 0x00000A05, 0xFFFFFFFE,
|
||||
0x0004002B, 0x0000000B, 0x00000A6A, 0x00000020, 0x000A001E, 0x00000489,
|
||||
0x0000000B, 0x0000000B, 0x0000000B, 0x0000000B, 0x00000014, 0x0000000B,
|
||||
0x0000000B, 0x0000000B, 0x00040020, 0x00000706, 0x00000002, 0x00000489,
|
||||
0x0004003B, 0x00000706, 0x0000147D, 0x00000002, 0x0004002B, 0x0000000C,
|
||||
0x00000A0B, 0x00000000, 0x00040020, 0x00000288, 0x00000002, 0x0000000B,
|
||||
0x0005002C, 0x00000011, 0x0000077B, 0x00000A16, 0x00000A1C, 0x00040020,
|
||||
0x00000291, 0x00000002, 0x00000014, 0x00040020, 0x00000292, 0x00000001,
|
||||
0x00000014, 0x0004003B, 0x00000292, 0x00000F48, 0x00000001, 0x0006002C,
|
||||
0x00000014, 0x00000A24, 0x00000A10, 0x00000A0A, 0x00000A0A, 0x00040017,
|
||||
0x0000000F, 0x00000009, 0x00000002, 0x0003001D, 0x000007DC, 0x00000017,
|
||||
0x0003001E, 0x000007B4, 0x000007DC, 0x00040020, 0x00000A31, 0x00000002,
|
||||
0x000007B4, 0x0004003B, 0x00000A31, 0x0000140E, 0x00000002, 0x0003001D,
|
||||
0x000007DD, 0x00000017, 0x0003001E, 0x000007B5, 0x000007DD, 0x00040020,
|
||||
0x00000A32, 0x00000002, 0x000007B5, 0x0004003B, 0x00000A32, 0x0000107A,
|
||||
0x00000002, 0x00040020, 0x00000294, 0x00000002, 0x00000017, 0x0006002C,
|
||||
0x00000014, 0x00000024, 0x00000A22, 0x00000A6A, 0x00000A0D, 0x0005002C,
|
||||
0x00000011, 0x0000074E, 0x00000A13, 0x00000A13, 0x0004002B, 0x0000000B,
|
||||
0x00000A25, 0x00000009, 0x0004002B, 0x0000000B, 0x00000A28, 0x0000000A,
|
||||
0x0007002C, 0x00000017, 0x000009CE, 0x000008A6, 0x000008A6, 0x000008A6,
|
||||
0x000008A6, 0x0007002C, 0x00000017, 0x0000013D, 0x00000A22, 0x00000A22,
|
||||
0x00000A22, 0x00000A22, 0x0007002C, 0x00000017, 0x0000072E, 0x000005FD,
|
||||
0x000005FD, 0x000005FD, 0x000005FD, 0x0007002C, 0x00000017, 0x000002ED,
|
||||
0x00000A3A, 0x00000A3A, 0x00000A3A, 0x00000A3A, 0x0007002C, 0x0000001A,
|
||||
0x00000302, 0x00000A3B, 0x00000A3B, 0x00000A3B, 0x00000A3B, 0x00050036,
|
||||
0x00000008, 0x0000161F, 0x00000000, 0x00000502, 0x000200F8, 0x00003B06,
|
||||
0x000300F7, 0x00004C7A, 0x00000000, 0x000300FB, 0x00000A0A, 0x00003B21,
|
||||
0x000200F8, 0x00003B21, 0x0004003D, 0x00000014, 0x0000312F, 0x00000F48,
|
||||
0x000500C4, 0x00000014, 0x000027F5, 0x0000312F, 0x00000A24, 0x00050041,
|
||||
0x00000291, 0x0000625A, 0x0000147D, 0x00000A17, 0x0004003D, 0x00000014,
|
||||
0x000059B5, 0x0000625A, 0x0007004F, 0x00000011, 0x00004993, 0x000027F5,
|
||||
0x000027F5, 0x00000000, 0x00000001, 0x0007004F, 0x00000011, 0x000019E2,
|
||||
0x000059B5, 0x000059B5, 0x00000000, 0x00000001, 0x000500AE, 0x0000000F,
|
||||
0x00004288, 0x00004993, 0x000019E2, 0x0004009A, 0x00000009, 0x00006067,
|
||||
0x00004288, 0x000300F7, 0x0000188A, 0x00000002, 0x000400FA, 0x00006067,
|
||||
0x000055E8, 0x0000188A, 0x000200F8, 0x000055E8, 0x000200F9, 0x00004C7A,
|
||||
0x000200F8, 0x0000188A, 0x0004007C, 0x00000016, 0x00001A8B, 0x000027F5,
|
||||
0x00050041, 0x00000288, 0x00004968, 0x0000147D, 0x00000A1D, 0x0004003D,
|
||||
0x0000000B, 0x0000263C, 0x00004968, 0x00050051, 0x0000000B, 0x00004F98,
|
||||
0x000059B5, 0x00000001, 0x00050051, 0x0000000C, 0x00003964, 0x00001A8B,
|
||||
0x00000000, 0x00050084, 0x0000000C, 0x0000591A, 0x00003964, 0x00000A23,
|
||||
0x00050051, 0x0000000C, 0x000018DA, 0x00001A8B, 0x00000002, 0x0004007C,
|
||||
0x0000000C, 0x000038A9, 0x00004F98, 0x00050084, 0x0000000C, 0x00002C0F,
|
||||
0x000018DA, 0x000038A9, 0x00050051, 0x0000000C, 0x000044BE, 0x00001A8B,
|
||||
0x00000001, 0x00050080, 0x0000000C, 0x000056D4, 0x00002C0F, 0x000044BE,
|
||||
0x0004007C, 0x0000000C, 0x00005785, 0x0000263C, 0x00050084, 0x0000000C,
|
||||
0x00005FD7, 0x000056D4, 0x00005785, 0x00050080, 0x0000000C, 0x00001B95,
|
||||
0x0000591A, 0x00005FD7, 0x0004007C, 0x0000000B, 0x00004B46, 0x00001B95,
|
||||
0x00050041, 0x00000288, 0x00004C04, 0x0000147D, 0x00000A1A, 0x0004003D,
|
||||
0x0000000B, 0x0000595B, 0x00004C04, 0x00050080, 0x0000000B, 0x00002145,
|
||||
0x00004B46, 0x0000595B, 0x000500C2, 0x0000000B, 0x000054A6, 0x00002145,
|
||||
0x00000A16, 0x00050041, 0x00000288, 0x000047E4, 0x0000147D, 0x00000A0E,
|
||||
0x0004003D, 0x0000000B, 0x00005B88, 0x000047E4, 0x00050041, 0x00000288,
|
||||
0x000058AC, 0x0000147D, 0x00000A0B, 0x0004003D, 0x0000000B, 0x00004FA3,
|
||||
0x000058AC, 0x000500C7, 0x0000000B, 0x00005707, 0x00004FA3, 0x00000A10,
|
||||
0x000500AB, 0x00000009, 0x00004B17, 0x00005707, 0x00000A0A, 0x00050050,
|
||||
0x00000011, 0x0000435F, 0x00004FA3, 0x00004FA3, 0x000500C2, 0x00000011,
|
||||
0x000059A3, 0x0000435F, 0x0000077B, 0x000500C7, 0x00000011, 0x00001997,
|
||||
0x000059A3, 0x0000074E, 0x00050041, 0x00000288, 0x0000492C, 0x0000147D,
|
||||
0x00000A11, 0x0004003D, 0x0000000B, 0x00005EAC, 0x0000492C, 0x00050041,
|
||||
0x00000288, 0x00004FEA, 0x0000147D, 0x00000A14, 0x0004003D, 0x0000000B,
|
||||
0x00005697, 0x00004FEA, 0x00050051, 0x0000000B, 0x000049F1, 0x000027F5,
|
||||
0x00000000, 0x000500C2, 0x0000000B, 0x000019EE, 0x000049F1, 0x00000A0D,
|
||||
0x00050051, 0x0000000B, 0x00002704, 0x000027F5, 0x00000001, 0x00050050,
|
||||
0x00000011, 0x00005C0B, 0x000019EE, 0x00002704, 0x00050086, 0x00000011,
|
||||
0x00001F69, 0x00005C0B, 0x00001997, 0x00050051, 0x0000000B, 0x0000366C,
|
||||
0x00001F69, 0x00000000, 0x000500C4, 0x0000000B, 0x00004D4D, 0x0000366C,
|
||||
0x00000A0D, 0x00050051, 0x0000000B, 0x000051A9, 0x00001F69, 0x00000001,
|
||||
0x00050051, 0x0000000B, 0x000059EE, 0x000027F5, 0x00000002, 0x00060050,
|
||||
0x00000014, 0x000024C9, 0x00004D4D, 0x000051A9, 0x000059EE, 0x000300F7,
|
||||
0x00005341, 0x00000002, 0x000400FA, 0x00004B17, 0x0000537D, 0x00002DD9,
|
||||
0x000200F8, 0x0000537D, 0x0004007C, 0x00000016, 0x00002970, 0x000024C9,
|
||||
0x00050051, 0x0000000C, 0x000042C2, 0x00002970, 0x00000001, 0x000500C3,
|
||||
0x0000000C, 0x000024FD, 0x000042C2, 0x00000A17, 0x00050051, 0x0000000C,
|
||||
0x00002747, 0x00002970, 0x00000002, 0x000500C3, 0x0000000C, 0x0000405C,
|
||||
0x00002747, 0x00000A11, 0x000500C2, 0x0000000B, 0x00005B4D, 0x00005697,
|
||||
0x00000A16, 0x0004007C, 0x0000000C, 0x000018AA, 0x00005B4D, 0x00050084,
|
||||
0x0000000C, 0x00005321, 0x0000405C, 0x000018AA, 0x00050080, 0x0000000C,
|
||||
0x00003B27, 0x000024FD, 0x00005321, 0x000500C2, 0x0000000B, 0x00002348,
|
||||
0x00005EAC, 0x00000A19, 0x0004007C, 0x0000000C, 0x0000308B, 0x00002348,
|
||||
0x00050084, 0x0000000C, 0x00002878, 0x00003B27, 0x0000308B, 0x00050051,
|
||||
0x0000000C, 0x00006242, 0x00002970, 0x00000000, 0x000500C3, 0x0000000C,
|
||||
0x00004FC7, 0x00006242, 0x00000A1A, 0x00050080, 0x0000000C, 0x000049FC,
|
||||
0x00004FC7, 0x00002878, 0x000500C4, 0x0000000C, 0x0000225D, 0x000049FC,
|
||||
0x00000A25, 0x000500C7, 0x0000000C, 0x00002CF6, 0x0000225D, 0x0000078B,
|
||||
0x000500C4, 0x0000000C, 0x000049FA, 0x00002CF6, 0x00000A0E, 0x000500C7,
|
||||
0x0000000C, 0x00004D38, 0x00006242, 0x00000A20, 0x000500C7, 0x0000000C,
|
||||
0x00003138, 0x000042C2, 0x00000A1D, 0x000500C4, 0x0000000C, 0x0000454D,
|
||||
0x00003138, 0x00000A11, 0x00050080, 0x0000000C, 0x0000434B, 0x00004D38,
|
||||
0x0000454D, 0x000500C4, 0x0000000C, 0x00001B88, 0x0000434B, 0x00000A25,
|
||||
0x000500C3, 0x0000000C, 0x00005DE3, 0x00001B88, 0x00000A1D, 0x000500C3,
|
||||
0x0000000C, 0x00002215, 0x000042C2, 0x00000A14, 0x00050080, 0x0000000C,
|
||||
0x000035A3, 0x00002215, 0x0000405C, 0x000500C7, 0x0000000C, 0x00005A0C,
|
||||
0x000035A3, 0x00000A0E, 0x000500C3, 0x0000000C, 0x00004112, 0x00006242,
|
||||
0x00000A14, 0x000500C4, 0x0000000C, 0x0000496A, 0x00005A0C, 0x00000A0E,
|
||||
0x00050080, 0x0000000C, 0x000034BD, 0x00004112, 0x0000496A, 0x000500C7,
|
||||
0x0000000C, 0x00004ADD, 0x000034BD, 0x00000A14, 0x000500C4, 0x0000000C,
|
||||
0x0000544A, 0x00004ADD, 0x00000A0E, 0x00050080, 0x0000000C, 0x00003C4B,
|
||||
0x00005A0C, 0x0000544A, 0x000500C7, 0x0000000C, 0x0000335E, 0x00005DE3,
|
||||
0x000009DB, 0x00050080, 0x0000000C, 0x00004F70, 0x000049FA, 0x0000335E,
|
||||
0x000500C4, 0x0000000C, 0x00005B31, 0x00004F70, 0x00000A0E, 0x000500C7,
|
||||
0x0000000C, 0x00005AEA, 0x00005DE3, 0x00000A39, 0x00050080, 0x0000000C,
|
||||
0x0000285C, 0x00005B31, 0x00005AEA, 0x000500C7, 0x0000000C, 0x000047B4,
|
||||
0x00002747, 0x00000A14, 0x000500C4, 0x0000000C, 0x0000544B, 0x000047B4,
|
||||
0x00000A25, 0x00050080, 0x0000000C, 0x00004157, 0x0000285C, 0x0000544B,
|
||||
0x000500C7, 0x0000000C, 0x00004ADE, 0x000042C2, 0x00000A0E, 0x000500C4,
|
||||
0x0000000C, 0x0000544C, 0x00004ADE, 0x00000A17, 0x00050080, 0x0000000C,
|
||||
0x00004158, 0x00004157, 0x0000544C, 0x000500C7, 0x0000000C, 0x00004FD6,
|
||||
0x00003C4B, 0x00000A0E, 0x000500C4, 0x0000000C, 0x00002703, 0x00004FD6,
|
||||
0x00000A14, 0x000500C3, 0x0000000C, 0x00003332, 0x00004158, 0x00000A1D,
|
||||
0x000500C7, 0x0000000C, 0x000036D6, 0x00003332, 0x00000A20, 0x00050080,
|
||||
0x0000000C, 0x00003412, 0x00002703, 0x000036D6, 0x000500C4, 0x0000000C,
|
||||
0x00005B32, 0x00003412, 0x00000A14, 0x000500C7, 0x0000000C, 0x00005AB1,
|
||||
0x00003C4B, 0x00000A05, 0x00050080, 0x0000000C, 0x00002A9C, 0x00005B32,
|
||||
0x00005AB1, 0x000500C4, 0x0000000C, 0x00005B33, 0x00002A9C, 0x00000A11,
|
||||
0x000500C7, 0x0000000C, 0x00005AB2, 0x00004158, 0x0000040B, 0x00050080,
|
||||
0x0000000C, 0x00002A9D, 0x00005B33, 0x00005AB2, 0x000500C4, 0x0000000C,
|
||||
0x00005B34, 0x00002A9D, 0x00000A14, 0x000500C7, 0x0000000C, 0x00005559,
|
||||
0x00004158, 0x00000AC8, 0x00050080, 0x0000000C, 0x00005EFA, 0x00005B34,
|
||||
0x00005559, 0x0004007C, 0x0000000B, 0x0000566F, 0x00005EFA, 0x000200F9,
|
||||
0x00005341, 0x000200F8, 0x00002DD9, 0x0007004F, 0x00000011, 0x00002621,
|
||||
0x000024C9, 0x000024C9, 0x00000000, 0x00000001, 0x0004007C, 0x00000012,
|
||||
0x000059CF, 0x00002621, 0x00050051, 0x0000000C, 0x00001903, 0x000059CF,
|
||||
0x00000000, 0x000500C3, 0x0000000C, 0x000024FE, 0x00001903, 0x00000A1A,
|
||||
0x00050051, 0x0000000C, 0x00002748, 0x000059CF, 0x00000001, 0x000500C3,
|
||||
0x0000000C, 0x0000405D, 0x00002748, 0x00000A1A, 0x000500C2, 0x0000000B,
|
||||
0x00005B4E, 0x00005EAC, 0x00000A19, 0x0004007C, 0x0000000C, 0x000018AB,
|
||||
0x00005B4E, 0x00050084, 0x0000000C, 0x00005347, 0x0000405D, 0x000018AB,
|
||||
0x00050080, 0x0000000C, 0x00003F5E, 0x000024FE, 0x00005347, 0x000500C4,
|
||||
0x0000000C, 0x00004A8E, 0x00003F5E, 0x00000A28, 0x000500C7, 0x0000000C,
|
||||
0x00002AB6, 0x00001903, 0x00000A20, 0x000500C7, 0x0000000C, 0x00003139,
|
||||
0x00002748, 0x00000A35, 0x000500C4, 0x0000000C, 0x0000454E, 0x00003139,
|
||||
0x00000A11, 0x00050080, 0x0000000C, 0x00004397, 0x00002AB6, 0x0000454E,
|
||||
0x000500C4, 0x0000000C, 0x000018E7, 0x00004397, 0x00000A13, 0x000500C7,
|
||||
0x0000000C, 0x000027B1, 0x000018E7, 0x000009DB, 0x000500C4, 0x0000000C,
|
||||
0x00002F76, 0x000027B1, 0x00000A0E, 0x00050080, 0x0000000C, 0x00003C4C,
|
||||
0x00004A8E, 0x00002F76, 0x000500C7, 0x0000000C, 0x00003397, 0x000018E7,
|
||||
0x00000A39, 0x00050080, 0x0000000C, 0x00004D30, 0x00003C4C, 0x00003397,
|
||||
0x000500C7, 0x0000000C, 0x000047B5, 0x00002748, 0x00000A0E, 0x000500C4,
|
||||
0x0000000C, 0x0000544D, 0x000047B5, 0x00000A17, 0x00050080, 0x0000000C,
|
||||
0x00004159, 0x00004D30, 0x0000544D, 0x000500C7, 0x0000000C, 0x00005022,
|
||||
0x00004159, 0x0000040B, 0x000500C4, 0x0000000C, 0x00002416, 0x00005022,
|
||||
0x00000A14, 0x000500C7, 0x0000000C, 0x00004A33, 0x00002748, 0x00000A3B,
|
||||
0x000500C4, 0x0000000C, 0x00002F77, 0x00004A33, 0x00000A20, 0x00050080,
|
||||
0x0000000C, 0x0000415A, 0x00002416, 0x00002F77, 0x000500C7, 0x0000000C,
|
||||
0x00004ADF, 0x00004159, 0x00000388, 0x000500C4, 0x0000000C, 0x0000544E,
|
||||
0x00004ADF, 0x00000A11, 0x00050080, 0x0000000C, 0x00004144, 0x0000415A,
|
||||
0x0000544E, 0x000500C7, 0x0000000C, 0x00005083, 0x00002748, 0x00000A23,
|
||||
0x000500C3, 0x0000000C, 0x000041BF, 0x00005083, 0x00000A11, 0x000500C3,
|
||||
0x0000000C, 0x00001EEC, 0x00001903, 0x00000A14, 0x00050080, 0x0000000C,
|
||||
0x000035B6, 0x000041BF, 0x00001EEC, 0x000500C7, 0x0000000C, 0x00005453,
|
||||
0x000035B6, 0x00000A14, 0x000500C4, 0x0000000C, 0x0000544F, 0x00005453,
|
||||
0x00000A1D, 0x00050080, 0x0000000C, 0x00003C4D, 0x00004144, 0x0000544F,
|
||||
0x000500C7, 0x0000000C, 0x00002E06, 0x00004159, 0x00000AC8, 0x00050080,
|
||||
0x0000000C, 0x0000394F, 0x00003C4D, 0x00002E06, 0x0004007C, 0x0000000B,
|
||||
0x00005670, 0x0000394F, 0x000200F9, 0x00005341, 0x000200F8, 0x00005341,
|
||||
0x000700F5, 0x0000000B, 0x000024FC, 0x0000566F, 0x0000537D, 0x00005670,
|
||||
0x00002DD9, 0x00050084, 0x00000011, 0x00003FA8, 0x00001F69, 0x00001997,
|
||||
0x00050082, 0x00000011, 0x00003BBC, 0x00005C0B, 0x00003FA8, 0x00050051,
|
||||
0x0000000B, 0x00001C87, 0x00001997, 0x00000000, 0x00050051, 0x0000000B,
|
||||
0x00005962, 0x00001997, 0x00000001, 0x00050084, 0x0000000B, 0x00003372,
|
||||
0x00001C87, 0x00005962, 0x00050084, 0x0000000B, 0x00003CA0, 0x000024FC,
|
||||
0x00003372, 0x00050051, 0x0000000B, 0x00003ED4, 0x00003BBC, 0x00000000,
|
||||
0x00050084, 0x0000000B, 0x00003E12, 0x00003ED4, 0x00005962, 0x00050051,
|
||||
0x0000000B, 0x00001AE6, 0x00003BBC, 0x00000001, 0x00050080, 0x0000000B,
|
||||
0x00002B25, 0x00003E12, 0x00001AE6, 0x000500C4, 0x0000000B, 0x0000609D,
|
||||
0x00002B25, 0x00000A0D, 0x000500C7, 0x0000000B, 0x00005AB3, 0x000049F1,
|
||||
0x00000A0D, 0x00050080, 0x0000000B, 0x00002557, 0x0000609D, 0x00005AB3,
|
||||
0x000500C4, 0x0000000B, 0x000040AD, 0x00002557, 0x00000A13, 0x00050080,
|
||||
0x0000000B, 0x00004EAA, 0x00003CA0, 0x000040AD, 0x00050080, 0x0000000B,
|
||||
0x0000453C, 0x00005B88, 0x00004EAA, 0x000500C2, 0x0000000B, 0x000036D8,
|
||||
0x0000453C, 0x00000A16, 0x000500C2, 0x0000000B, 0x00002DF6, 0x00004FA3,
|
||||
0x00000A10, 0x000500C7, 0x0000000B, 0x000020CA, 0x00002DF6, 0x00000A13,
|
||||
0x00060041, 0x00000294, 0x000050F7, 0x0000107A, 0x00000A0B, 0x000036D8,
|
||||
0x0004003D, 0x00000017, 0x00001FCE, 0x000050F7, 0x000500AA, 0x00000009,
|
||||
0x000035C0, 0x000020CA, 0x00000A0D, 0x000500AA, 0x00000009, 0x00005376,
|
||||
0x000020CA, 0x00000A10, 0x000500A6, 0x00000009, 0x00005686, 0x000035C0,
|
||||
0x00005376, 0x000300F7, 0x00003463, 0x00000000, 0x000400FA, 0x00005686,
|
||||
0x00002957, 0x00003463, 0x000200F8, 0x00002957, 0x000500C7, 0x00000017,
|
||||
0x0000475F, 0x00001FCE, 0x000009CE, 0x000500C4, 0x00000017, 0x000024D1,
|
||||
0x0000475F, 0x0000013D, 0x000500C7, 0x00000017, 0x000050AC, 0x00001FCE,
|
||||
0x0000072E, 0x000500C2, 0x00000017, 0x0000448D, 0x000050AC, 0x0000013D,
|
||||
0x000500C5, 0x00000017, 0x00003FF8, 0x000024D1, 0x0000448D, 0x000200F9,
|
||||
0x00003463, 0x000200F8, 0x00003463, 0x000700F5, 0x00000017, 0x00005879,
|
||||
0x00001FCE, 0x00005341, 0x00003FF8, 0x00002957, 0x000500AA, 0x00000009,
|
||||
0x00004CB6, 0x000020CA, 0x00000A13, 0x000500A6, 0x00000009, 0x00003B23,
|
||||
0x00005376, 0x00004CB6, 0x000300F7, 0x000030F9, 0x00000000, 0x000400FA,
|
||||
0x00003B23, 0x00002B38, 0x000030F9, 0x000200F8, 0x00002B38, 0x000500C4,
|
||||
0x00000017, 0x00005E17, 0x00005879, 0x000002ED, 0x000500C2, 0x00000017,
|
||||
0x00003BE7, 0x00005879, 0x000002ED, 0x000500C5, 0x00000017, 0x000029E8,
|
||||
0x00005E17, 0x00003BE7, 0x000200F9, 0x000030F9, 0x000200F8, 0x000030F9,
|
||||
0x000700F5, 0x00000017, 0x00002F4A, 0x00005879, 0x00003463, 0x000029E8,
|
||||
0x00002B38, 0x0004007C, 0x0000001A, 0x00003C0F, 0x00002F4A, 0x000500C4,
|
||||
0x0000001A, 0x0000420E, 0x00003C0F, 0x00000302, 0x000500C3, 0x0000001A,
|
||||
0x00004098, 0x0000420E, 0x00000302, 0x0004006F, 0x0000001D, 0x00002A97,
|
||||
0x00004098, 0x0005008E, 0x0000001D, 0x00004FBD, 0x00002A97, 0x00000A38,
|
||||
0x0007000C, 0x0000001D, 0x00005DB5, 0x00000001, 0x00000028, 0x00000504,
|
||||
0x00004FBD, 0x000500C3, 0x0000001A, 0x00003802, 0x00003C0F, 0x00000302,
|
||||
0x0004006F, 0x0000001D, 0x000019CF, 0x00003802, 0x0005008E, 0x0000001D,
|
||||
0x00004747, 0x000019CF, 0x00000A38, 0x0007000C, 0x0000001D, 0x00005E06,
|
||||
0x00000001, 0x00000028, 0x00000504, 0x00004747, 0x00050051, 0x0000000D,
|
||||
0x00005F0A, 0x00005DB5, 0x00000000, 0x00050051, 0x0000000D, 0x000037EF,
|
||||
0x00005E06, 0x00000000, 0x00050050, 0x00000013, 0x00004B20, 0x00005F0A,
|
||||
0x000037EF, 0x0006000C, 0x0000000B, 0x00002171, 0x00000001, 0x0000003A,
|
||||
0x00004B20, 0x00050051, 0x0000000D, 0x00005BBF, 0x00005DB5, 0x00000001,
|
||||
0x00050051, 0x0000000D, 0x000039A7, 0x00005E06, 0x00000001, 0x00050050,
|
||||
0x00000013, 0x00004B21, 0x00005BBF, 0x000039A7, 0x0006000C, 0x0000000B,
|
||||
0x00002172, 0x00000001, 0x0000003A, 0x00004B21, 0x00050051, 0x0000000D,
|
||||
0x00005BC0, 0x00005DB5, 0x00000002, 0x00050051, 0x0000000D, 0x000039A8,
|
||||
0x00005E06, 0x00000002, 0x00050050, 0x00000013, 0x00004B22, 0x00005BC0,
|
||||
0x000039A8, 0x0006000C, 0x0000000B, 0x00002173, 0x00000001, 0x0000003A,
|
||||
0x00004B22, 0x00050051, 0x0000000D, 0x00005BC1, 0x00005DB5, 0x00000003,
|
||||
0x00050051, 0x0000000D, 0x000039A9, 0x00005E06, 0x00000003, 0x00050050,
|
||||
0x00000013, 0x00004B0D, 0x00005BC1, 0x000039A9, 0x0006000C, 0x0000000B,
|
||||
0x000020EE, 0x00000001, 0x0000003A, 0x00004B0D, 0x00070050, 0x00000017,
|
||||
0x00003ABB, 0x00002171, 0x00002172, 0x00002173, 0x000020EE, 0x00060041,
|
||||
0x00000294, 0x000045C3, 0x0000140E, 0x00000A0B, 0x000054A6, 0x0003003E,
|
||||
0x000045C3, 0x00003ABB, 0x00050080, 0x0000000B, 0x00003CAC, 0x000054A6,
|
||||
0x00000A0E, 0x000500AC, 0x00000009, 0x00001911, 0x00001C87, 0x00000A0D,
|
||||
0x000300F7, 0x000060BC, 0x00000002, 0x000400FA, 0x00001911, 0x00005084,
|
||||
0x00005094, 0x000200F8, 0x00005084, 0x00050086, 0x0000000B, 0x00003697,
|
||||
0x000019EE, 0x00001C87, 0x00050084, 0x0000000B, 0x0000237E, 0x00003697,
|
||||
0x00001C87, 0x00050082, 0x0000000B, 0x00003171, 0x000019EE, 0x0000237E,
|
||||
0x00050080, 0x0000000B, 0x00002527, 0x00003171, 0x00000A0D, 0x000500AA,
|
||||
0x00000009, 0x0000343F, 0x00002527, 0x00001C87, 0x000300F7, 0x00001EED,
|
||||
0x00000000, 0x000400FA, 0x0000343F, 0x0000569E, 0x00002191, 0x000200F8,
|
||||
0x0000569E, 0x00050084, 0x0000000B, 0x00004B59, 0x00000A6A, 0x00001C87,
|
||||
0x000500C4, 0x0000000B, 0x0000540F, 0x00003171, 0x00000A16, 0x00050082,
|
||||
0x0000000B, 0x00004944, 0x00004B59, 0x0000540F, 0x000200F9, 0x00001EED,
|
||||
0x000200F8, 0x00002191, 0x000200F9, 0x00001EED, 0x000200F8, 0x00001EED,
|
||||
0x000700F5, 0x0000000B, 0x0000292C, 0x00004944, 0x0000569E, 0x00000A3A,
|
||||
0x00002191, 0x000200F9, 0x000060BC, 0x000200F8, 0x00005094, 0x000200F9,
|
||||
0x000060BC, 0x000200F8, 0x000060BC, 0x000700F5, 0x0000000B, 0x000029BC,
|
||||
0x0000292C, 0x00001EED, 0x00000A6A, 0x00005094, 0x00050084, 0x0000000B,
|
||||
0x0000492B, 0x000029BC, 0x00005962, 0x000500C2, 0x0000000B, 0x0000406D,
|
||||
0x0000492B, 0x00000A16, 0x00050080, 0x0000000B, 0x0000336B, 0x000036D8,
|
||||
0x0000406D, 0x00060041, 0x00000294, 0x0000571A, 0x0000107A, 0x00000A0B,
|
||||
0x0000336B, 0x0004003D, 0x00000017, 0x000019B2, 0x0000571A, 0x000300F7,
|
||||
0x00003A1A, 0x00000000, 0x000400FA, 0x00005686, 0x00002958, 0x00003A1A,
|
||||
0x000200F8, 0x00002958, 0x000500C7, 0x00000017, 0x00004760, 0x000019B2,
|
||||
0x000009CE, 0x000500C4, 0x00000017, 0x000024D2, 0x00004760, 0x0000013D,
|
||||
0x000500C7, 0x00000017, 0x000050AD, 0x000019B2, 0x0000072E, 0x000500C2,
|
||||
0x00000017, 0x0000448E, 0x000050AD, 0x0000013D, 0x000500C5, 0x00000017,
|
||||
0x00003FF9, 0x000024D2, 0x0000448E, 0x000200F9, 0x00003A1A, 0x000200F8,
|
||||
0x00003A1A, 0x000700F5, 0x00000017, 0x00002AAC, 0x000019B2, 0x000060BC,
|
||||
0x00003FF9, 0x00002958, 0x000300F7, 0x000030FA, 0x00000000, 0x000400FA,
|
||||
0x00003B23, 0x00002B39, 0x000030FA, 0x000200F8, 0x00002B39, 0x000500C4,
|
||||
0x00000017, 0x00005E18, 0x00002AAC, 0x000002ED, 0x000500C2, 0x00000017,
|
||||
0x00003BE8, 0x00002AAC, 0x000002ED, 0x000500C5, 0x00000017, 0x000029E9,
|
||||
0x00005E18, 0x00003BE8, 0x000200F9, 0x000030FA, 0x000200F8, 0x000030FA,
|
||||
0x000700F5, 0x00000017, 0x00002F4B, 0x00002AAC, 0x00003A1A, 0x000029E9,
|
||||
0x00002B39, 0x0004007C, 0x0000001A, 0x00003C10, 0x00002F4B, 0x000500C4,
|
||||
0x0000001A, 0x0000420F, 0x00003C10, 0x00000302, 0x000500C3, 0x0000001A,
|
||||
0x00004099, 0x0000420F, 0x00000302, 0x0004006F, 0x0000001D, 0x00002A98,
|
||||
0x00004099, 0x0005008E, 0x0000001D, 0x00004FBE, 0x00002A98, 0x00000A38,
|
||||
0x0007000C, 0x0000001D, 0x00005DB6, 0x00000001, 0x00000028, 0x00000504,
|
||||
0x00004FBE, 0x000500C3, 0x0000001A, 0x00003803, 0x00003C10, 0x00000302,
|
||||
0x0004006F, 0x0000001D, 0x000019D0, 0x00003803, 0x0005008E, 0x0000001D,
|
||||
0x00004748, 0x000019D0, 0x00000A38, 0x0007000C, 0x0000001D, 0x00005E07,
|
||||
0x00000001, 0x00000028, 0x00000504, 0x00004748, 0x00050051, 0x0000000D,
|
||||
0x00005F0B, 0x00005DB6, 0x00000000, 0x00050051, 0x0000000D, 0x000037F0,
|
||||
0x00005E07, 0x00000000, 0x00050050, 0x00000013, 0x00004B23, 0x00005F0B,
|
||||
0x000037F0, 0x0006000C, 0x0000000B, 0x00002174, 0x00000001, 0x0000003A,
|
||||
0x00004B23, 0x00050051, 0x0000000D, 0x00005BC2, 0x00005DB6, 0x00000001,
|
||||
0x00050051, 0x0000000D, 0x000039AA, 0x00005E07, 0x00000001, 0x00050050,
|
||||
0x00000013, 0x00004B24, 0x00005BC2, 0x000039AA, 0x0006000C, 0x0000000B,
|
||||
0x00002175, 0x00000001, 0x0000003A, 0x00004B24, 0x00050051, 0x0000000D,
|
||||
0x00005BC3, 0x00005DB6, 0x00000002, 0x00050051, 0x0000000D, 0x000039AB,
|
||||
0x00005E07, 0x00000002, 0x00050050, 0x00000013, 0x00004B25, 0x00005BC3,
|
||||
0x000039AB, 0x0006000C, 0x0000000B, 0x00002176, 0x00000001, 0x0000003A,
|
||||
0x00004B25, 0x00050051, 0x0000000D, 0x00005BC4, 0x00005DB6, 0x00000003,
|
||||
0x00050051, 0x0000000D, 0x000039AC, 0x00005E07, 0x00000003, 0x00050050,
|
||||
0x00000013, 0x00004B0E, 0x00005BC4, 0x000039AC, 0x0006000C, 0x0000000B,
|
||||
0x000020EF, 0x00000001, 0x0000003A, 0x00004B0E, 0x00070050, 0x00000017,
|
||||
0x00003ABC, 0x00002174, 0x00002175, 0x00002176, 0x000020EF, 0x00060041,
|
||||
0x00000294, 0x00004EBE, 0x0000140E, 0x00000A0B, 0x00003CAC, 0x0003003E,
|
||||
0x00004EBE, 0x00003ABC, 0x000200F9, 0x00004C7A, 0x000200F8, 0x00004C7A,
|
||||
0x000100FD, 0x00010038,
|
||||
};
|
684
src/xenia/gpu/shaders/bytecode/vulkan_spirv/texture_load_rgba16_unorm_float_cs.h
generated
Normal file
684
src/xenia/gpu/shaders/bytecode/vulkan_spirv/texture_load_rgba16_unorm_float_cs.h
generated
Normal file
|
@ -0,0 +1,684 @@
|
|||
// Generated with `xb buildshaders`.
|
||||
#if 0
|
||||
; SPIR-V
|
||||
; Version: 1.0
|
||||
; Generator: Khronos Glslang Reference Front End; 10
|
||||
; Bound: 25179
|
||||
; Schema: 0
|
||||
OpCapability Shader
|
||||
%1 = OpExtInstImport "GLSL.std.450"
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %5663 "main" %gl_GlobalInvocationID
|
||||
OpExecutionMode %5663 LocalSize 8 32 1
|
||||
OpMemberDecorate %_struct_1161 0 Offset 0
|
||||
OpMemberDecorate %_struct_1161 1 Offset 4
|
||||
OpMemberDecorate %_struct_1161 2 Offset 8
|
||||
OpMemberDecorate %_struct_1161 3 Offset 12
|
||||
OpMemberDecorate %_struct_1161 4 Offset 16
|
||||
OpMemberDecorate %_struct_1161 5 Offset 28
|
||||
OpMemberDecorate %_struct_1161 6 Offset 32
|
||||
OpMemberDecorate %_struct_1161 7 Offset 36
|
||||
OpDecorate %_struct_1161 Block
|
||||
OpDecorate %5245 DescriptorSet 2
|
||||
OpDecorate %5245 Binding 0
|
||||
OpDecorate %gl_GlobalInvocationID BuiltIn GlobalInvocationId
|
||||
OpDecorate %_runtimearr_v4uint ArrayStride 16
|
||||
OpMemberDecorate %_struct_1972 0 NonReadable
|
||||
OpMemberDecorate %_struct_1972 0 Offset 0
|
||||
OpDecorate %_struct_1972 BufferBlock
|
||||
OpDecorate %5134 DescriptorSet 0
|
||||
OpDecorate %5134 Binding 0
|
||||
OpDecorate %_runtimearr_v4uint_0 ArrayStride 16
|
||||
OpMemberDecorate %_struct_1973 0 NonWritable
|
||||
OpMemberDecorate %_struct_1973 0 Offset 0
|
||||
OpDecorate %_struct_1973 BufferBlock
|
||||
OpDecorate %4218 DescriptorSet 1
|
||||
OpDecorate %4218 Binding 0
|
||||
OpDecorate %gl_WorkGroupSize BuiltIn WorkgroupSize
|
||||
%void = OpTypeVoid
|
||||
%1282 = OpTypeFunction %void
|
||||
%uint = OpTypeInt 32 0
|
||||
%v4uint = OpTypeVector %uint 4
|
||||
%int = OpTypeInt 32 1
|
||||
%v2int = OpTypeVector %int 2
|
||||
%v3int = OpTypeVector %int 3
|
||||
%bool = OpTypeBool
|
||||
%v3uint = OpTypeVector %uint 3
|
||||
%float = OpTypeFloat 32
|
||||
%v4float = OpTypeVector %float 4
|
||||
%uint_65535 = OpConstant %uint 65535
|
||||
%float_1_52590219en05 = OpConstant %float 1.52590219e-05
|
||||
%uint_16 = OpConstant %uint 16
|
||||
%uint_0 = OpConstant %uint 0
|
||||
%v2float = OpTypeVector %float 2
|
||||
%uint_1 = OpConstant %uint 1
|
||||
%uint_2 = OpConstant %uint 2
|
||||
%uint_3 = OpConstant %uint 3
|
||||
%uint_16711935 = OpConstant %uint 16711935
|
||||
%uint_8 = OpConstant %uint 8
|
||||
%uint_4278255360 = OpConstant %uint 4278255360
|
||||
%int_5 = OpConstant %int 5
|
||||
%uint_5 = OpConstant %uint 5
|
||||
%int_7 = OpConstant %int 7
|
||||
%int_14 = OpConstant %int 14
|
||||
%int_2 = OpConstant %int 2
|
||||
%int_n16 = OpConstant %int -16
|
||||
%int_1 = OpConstant %int 1
|
||||
%int_15 = OpConstant %int 15
|
||||
%int_4 = OpConstant %int 4
|
||||
%int_n512 = OpConstant %int -512
|
||||
%int_3 = OpConstant %int 3
|
||||
%int_16 = OpConstant %int 16
|
||||
%int_448 = OpConstant %int 448
|
||||
%int_8 = OpConstant %int 8
|
||||
%int_6 = OpConstant %int 6
|
||||
%int_63 = OpConstant %int 63
|
||||
%uint_4 = OpConstant %uint 4
|
||||
%int_268435455 = OpConstant %int 268435455
|
||||
%int_n2 = OpConstant %int -2
|
||||
%uint_32 = OpConstant %uint 32
|
||||
%_struct_1161 = OpTypeStruct %uint %uint %uint %uint %v3uint %uint %uint %uint
|
||||
%_ptr_Uniform__struct_1161 = OpTypePointer Uniform %_struct_1161
|
||||
%5245 = OpVariable %_ptr_Uniform__struct_1161 Uniform
|
||||
%int_0 = OpConstant %int 0
|
||||
%_ptr_Uniform_uint = OpTypePointer Uniform %uint
|
||||
%_ptr_Uniform_v3uint = OpTypePointer Uniform %v3uint
|
||||
%v2uint = OpTypeVector %uint 2
|
||||
%_ptr_Input_v3uint = OpTypePointer Input %v3uint
|
||||
%gl_GlobalInvocationID = OpVariable %_ptr_Input_v3uint Input
|
||||
%2596 = OpConstantComposite %v3uint %uint_2 %uint_0 %uint_0
|
||||
%v2bool = OpTypeVector %bool 2
|
||||
%_runtimearr_v4uint = OpTypeRuntimeArray %v4uint
|
||||
%_struct_1972 = OpTypeStruct %_runtimearr_v4uint
|
||||
%_ptr_Uniform__struct_1972 = OpTypePointer Uniform %_struct_1972
|
||||
%5134 = OpVariable %_ptr_Uniform__struct_1972 Uniform
|
||||
%_runtimearr_v4uint_0 = OpTypeRuntimeArray %v4uint
|
||||
%_struct_1973 = OpTypeStruct %_runtimearr_v4uint_0
|
||||
%_ptr_Uniform__struct_1973 = OpTypePointer Uniform %_struct_1973
|
||||
%4218 = OpVariable %_ptr_Uniform__struct_1973 Uniform
|
||||
%_ptr_Uniform_v4uint = OpTypePointer Uniform %v4uint
|
||||
%gl_WorkGroupSize = OpConstantComposite %v3uint %uint_8 %uint_32 %uint_1
|
||||
%uint_9 = OpConstant %uint 9
|
||||
%uint_10 = OpConstant %uint 10
|
||||
%2510 = OpConstantComposite %v4uint %uint_16711935 %uint_16711935 %uint_16711935 %uint_16711935
|
||||
%317 = OpConstantComposite %v4uint %uint_8 %uint_8 %uint_8 %uint_8
|
||||
%1838 = OpConstantComposite %v4uint %uint_4278255360 %uint_4278255360 %uint_4278255360 %uint_4278255360
|
||||
%749 = OpConstantComposite %v4uint %uint_16 %uint_16 %uint_16 %uint_16
|
||||
%850 = OpConstantComposite %v4uint %uint_65535 %uint_65535 %uint_65535 %uint_65535
|
||||
%5663 = OpFunction %void None %1282
|
||||
%15110 = OpLabel
|
||||
OpSelectionMerge %19578 None
|
||||
OpSwitch %uint_0 %15137
|
||||
%15137 = OpLabel
|
||||
%12591 = OpLoad %v3uint %gl_GlobalInvocationID
|
||||
%10229 = OpShiftLeftLogical %v3uint %12591 %2596
|
||||
%25178 = OpAccessChain %_ptr_Uniform_v3uint %5245 %int_4
|
||||
%22965 = OpLoad %v3uint %25178
|
||||
%18835 = OpVectorShuffle %v2uint %10229 %10229 0 1
|
||||
%6626 = OpVectorShuffle %v2uint %22965 %22965 0 1
|
||||
%17032 = OpUGreaterThanEqual %v2bool %18835 %6626
|
||||
%24679 = OpAny %bool %17032
|
||||
OpSelectionMerge %6282 DontFlatten
|
||||
OpBranchConditional %24679 %21992 %6282
|
||||
%21992 = OpLabel
|
||||
OpBranch %19578
|
||||
%6282 = OpLabel
|
||||
%6795 = OpBitcast %v3int %10229
|
||||
%18792 = OpAccessChain %_ptr_Uniform_uint %5245 %int_6
|
||||
%9788 = OpLoad %uint %18792
|
||||
%20376 = OpCompositeExtract %uint %22965 1
|
||||
%14692 = OpCompositeExtract %int %6795 0
|
||||
%22810 = OpIMul %int %14692 %int_8
|
||||
%6362 = OpCompositeExtract %int %6795 2
|
||||
%14505 = OpBitcast %int %20376
|
||||
%11279 = OpIMul %int %6362 %14505
|
||||
%17598 = OpCompositeExtract %int %6795 1
|
||||
%22228 = OpIAdd %int %11279 %17598
|
||||
%22405 = OpBitcast %int %9788
|
||||
%24535 = OpIMul %int %22228 %22405
|
||||
%7061 = OpIAdd %int %22810 %24535
|
||||
%19270 = OpBitcast %uint %7061
|
||||
%19460 = OpAccessChain %_ptr_Uniform_uint %5245 %int_5
|
||||
%22875 = OpLoad %uint %19460
|
||||
%8517 = OpIAdd %uint %19270 %22875
|
||||
%21670 = OpShiftRightLogical %uint %8517 %uint_4
|
||||
%20950 = OpAccessChain %_ptr_Uniform_uint %5245 %int_0
|
||||
%21411 = OpLoad %uint %20950
|
||||
%6381 = OpBitwiseAnd %uint %21411 %uint_1
|
||||
%10467 = OpINotEqual %bool %6381 %uint_0
|
||||
OpSelectionMerge %23266 DontFlatten
|
||||
OpBranchConditional %10467 %10108 %10765
|
||||
%10108 = OpLabel
|
||||
%23508 = OpBitwiseAnd %uint %21411 %uint_2
|
||||
%16300 = OpINotEqual %bool %23508 %uint_0
|
||||
OpSelectionMerge %7691 DontFlatten
|
||||
OpBranchConditional %16300 %12129 %25128
|
||||
%12129 = OpLabel
|
||||
%18210 = OpAccessChain %_ptr_Uniform_uint %5245 %int_2
|
||||
%15627 = OpLoad %uint %18210
|
||||
%22624 = OpAccessChain %_ptr_Uniform_uint %5245 %int_3
|
||||
%21535 = OpLoad %uint %22624
|
||||
%14923 = OpShiftRightArithmetic %int %17598 %int_4
|
||||
%18773 = OpShiftRightArithmetic %int %6362 %int_2
|
||||
%18759 = OpShiftRightLogical %uint %21535 %uint_4
|
||||
%6314 = OpBitcast %int %18759
|
||||
%21281 = OpIMul %int %18773 %6314
|
||||
%15143 = OpIAdd %int %14923 %21281
|
||||
%9032 = OpShiftRightLogical %uint %15627 %uint_5
|
||||
%14593 = OpBitcast %int %9032
|
||||
%8436 = OpIMul %int %15143 %14593
|
||||
%12986 = OpShiftRightArithmetic %int %14692 %int_5
|
||||
%24558 = OpIAdd %int %12986 %8436
|
||||
%8797 = OpShiftLeftLogical %int %24558 %uint_9
|
||||
%11510 = OpBitwiseAnd %int %8797 %int_268435455
|
||||
%18938 = OpShiftLeftLogical %int %11510 %int_1
|
||||
%19768 = OpBitwiseAnd %int %14692 %int_7
|
||||
%12600 = OpBitwiseAnd %int %17598 %int_6
|
||||
%17741 = OpShiftLeftLogical %int %12600 %int_2
|
||||
%17227 = OpIAdd %int %19768 %17741
|
||||
%7048 = OpShiftLeftLogical %int %17227 %uint_9
|
||||
%24035 = OpShiftRightArithmetic %int %7048 %int_6
|
||||
%8725 = OpShiftRightArithmetic %int %17598 %int_3
|
||||
%13731 = OpIAdd %int %8725 %18773
|
||||
%23052 = OpBitwiseAnd %int %13731 %int_1
|
||||
%16658 = OpShiftRightArithmetic %int %14692 %int_3
|
||||
%18794 = OpShiftLeftLogical %int %23052 %int_1
|
||||
%13501 = OpIAdd %int %16658 %18794
|
||||
%19165 = OpBitwiseAnd %int %13501 %int_3
|
||||
%21578 = OpShiftLeftLogical %int %19165 %int_1
|
||||
%15435 = OpIAdd %int %23052 %21578
|
||||
%13150 = OpBitwiseAnd %int %24035 %int_n16
|
||||
%20336 = OpIAdd %int %18938 %13150
|
||||
%23345 = OpShiftLeftLogical %int %20336 %int_1
|
||||
%23274 = OpBitwiseAnd %int %24035 %int_15
|
||||
%10332 = OpIAdd %int %23345 %23274
|
||||
%18356 = OpBitwiseAnd %int %6362 %int_3
|
||||
%21579 = OpShiftLeftLogical %int %18356 %uint_9
|
||||
%16727 = OpIAdd %int %10332 %21579
|
||||
%19166 = OpBitwiseAnd %int %17598 %int_1
|
||||
%21580 = OpShiftLeftLogical %int %19166 %int_4
|
||||
%16728 = OpIAdd %int %16727 %21580
|
||||
%20438 = OpBitwiseAnd %int %15435 %int_1
|
||||
%9987 = OpShiftLeftLogical %int %20438 %int_3
|
||||
%13106 = OpShiftRightArithmetic %int %16728 %int_6
|
||||
%14038 = OpBitwiseAnd %int %13106 %int_7
|
||||
%13330 = OpIAdd %int %9987 %14038
|
||||
%23346 = OpShiftLeftLogical %int %13330 %int_3
|
||||
%23217 = OpBitwiseAnd %int %15435 %int_n2
|
||||
%10908 = OpIAdd %int %23346 %23217
|
||||
%23347 = OpShiftLeftLogical %int %10908 %int_2
|
||||
%23218 = OpBitwiseAnd %int %16728 %int_n512
|
||||
%10909 = OpIAdd %int %23347 %23218
|
||||
%23348 = OpShiftLeftLogical %int %10909 %int_3
|
||||
%24224 = OpBitwiseAnd %int %16728 %int_63
|
||||
%21741 = OpIAdd %int %23348 %24224
|
||||
OpBranch %7691
|
||||
%25128 = OpLabel
|
||||
%6796 = OpBitcast %v2int %18835
|
||||
%18793 = OpAccessChain %_ptr_Uniform_uint %5245 %int_2
|
||||
%11954 = OpLoad %uint %18793
|
||||
%18756 = OpCompositeExtract %int %6796 0
|
||||
%19701 = OpShiftRightArithmetic %int %18756 %int_5
|
||||
%10055 = OpCompositeExtract %int %6796 1
|
||||
%16476 = OpShiftRightArithmetic %int %10055 %int_5
|
||||
%23373 = OpShiftRightLogical %uint %11954 %uint_5
|
||||
%6315 = OpBitcast %int %23373
|
||||
%21319 = OpIMul %int %16476 %6315
|
||||
%16222 = OpIAdd %int %19701 %21319
|
||||
%19086 = OpShiftLeftLogical %int %16222 %uint_10
|
||||
%10934 = OpBitwiseAnd %int %18756 %int_7
|
||||
%12601 = OpBitwiseAnd %int %10055 %int_14
|
||||
%17742 = OpShiftLeftLogical %int %12601 %int_2
|
||||
%17303 = OpIAdd %int %10934 %17742
|
||||
%6375 = OpShiftLeftLogical %int %17303 %uint_3
|
||||
%10161 = OpBitwiseAnd %int %6375 %int_n16
|
||||
%12150 = OpShiftLeftLogical %int %10161 %int_1
|
||||
%15436 = OpIAdd %int %19086 %12150
|
||||
%13207 = OpBitwiseAnd %int %6375 %int_15
|
||||
%19760 = OpIAdd %int %15436 %13207
|
||||
%18357 = OpBitwiseAnd %int %10055 %int_1
|
||||
%21581 = OpShiftLeftLogical %int %18357 %int_4
|
||||
%16729 = OpIAdd %int %19760 %21581
|
||||
%20514 = OpBitwiseAnd %int %16729 %int_n512
|
||||
%9238 = OpShiftLeftLogical %int %20514 %int_3
|
||||
%18995 = OpBitwiseAnd %int %10055 %int_16
|
||||
%12151 = OpShiftLeftLogical %int %18995 %int_7
|
||||
%16730 = OpIAdd %int %9238 %12151
|
||||
%19167 = OpBitwiseAnd %int %16729 %int_448
|
||||
%21582 = OpShiftLeftLogical %int %19167 %int_2
|
||||
%16708 = OpIAdd %int %16730 %21582
|
||||
%20611 = OpBitwiseAnd %int %10055 %int_8
|
||||
%16831 = OpShiftRightArithmetic %int %20611 %int_2
|
||||
%7916 = OpShiftRightArithmetic %int %18756 %int_3
|
||||
%13750 = OpIAdd %int %16831 %7916
|
||||
%21587 = OpBitwiseAnd %int %13750 %int_3
|
||||
%21583 = OpShiftLeftLogical %int %21587 %int_6
|
||||
%15437 = OpIAdd %int %16708 %21583
|
||||
%14157 = OpBitwiseAnd %int %16729 %int_63
|
||||
%12098 = OpIAdd %int %15437 %14157
|
||||
OpBranch %7691
|
||||
%7691 = OpLabel
|
||||
%10540 = OpPhi %int %21741 %12129 %12098 %25128
|
||||
OpBranch %23266
|
||||
%10765 = OpLabel
|
||||
%20632 = OpAccessChain %_ptr_Uniform_uint %5245 %int_2
|
||||
%15628 = OpLoad %uint %20632
|
||||
%21275 = OpAccessChain %_ptr_Uniform_uint %5245 %int_3
|
||||
%13550 = OpLoad %uint %21275
|
||||
%15070 = OpBitcast %int %13550
|
||||
%18927 = OpIMul %int %6362 %15070
|
||||
%8334 = OpIAdd %int %18927 %17598
|
||||
%8952 = OpBitcast %int %15628
|
||||
%7839 = OpIMul %int %8334 %8952
|
||||
%7984 = OpIAdd %int %22810 %7839
|
||||
OpBranch %23266
|
||||
%23266 = OpLabel
|
||||
%19748 = OpPhi %int %10540 %7691 %7984 %10765
|
||||
%24922 = OpAccessChain %_ptr_Uniform_uint %5245 %int_1
|
||||
%7502 = OpLoad %uint %24922
|
||||
%15686 = OpBitcast %int %7502
|
||||
%15579 = OpIAdd %int %15686 %19748
|
||||
%18556 = OpBitcast %uint %15579
|
||||
%21493 = OpShiftRightLogical %uint %18556 %uint_4
|
||||
%14997 = OpShiftRightLogical %uint %21411 %uint_2
|
||||
%8394 = OpBitwiseAnd %uint %14997 %uint_3
|
||||
%20727 = OpAccessChain %_ptr_Uniform_v4uint %4218 %int_0 %21493
|
||||
%8142 = OpLoad %v4uint %20727
|
||||
%13760 = OpIEqual %bool %8394 %uint_1
|
||||
%21366 = OpIEqual %bool %8394 %uint_2
|
||||
%22150 = OpLogicalOr %bool %13760 %21366
|
||||
OpSelectionMerge %13411 None
|
||||
OpBranchConditional %22150 %10583 %13411
|
||||
%10583 = OpLabel
|
||||
%18271 = OpBitwiseAnd %v4uint %8142 %2510
|
||||
%9425 = OpShiftLeftLogical %v4uint %18271 %317
|
||||
%20652 = OpBitwiseAnd %v4uint %8142 %1838
|
||||
%17549 = OpShiftRightLogical %v4uint %20652 %317
|
||||
%16376 = OpBitwiseOr %v4uint %9425 %17549
|
||||
OpBranch %13411
|
||||
%13411 = OpLabel
|
||||
%22649 = OpPhi %v4uint %8142 %23266 %16376 %10583
|
||||
%19638 = OpIEqual %bool %8394 %uint_3
|
||||
%15139 = OpLogicalOr %bool %21366 %19638
|
||||
OpSelectionMerge %13962 None
|
||||
OpBranchConditional %15139 %11064 %13962
|
||||
%11064 = OpLabel
|
||||
%24087 = OpShiftLeftLogical %v4uint %22649 %749
|
||||
%15335 = OpShiftRightLogical %v4uint %22649 %749
|
||||
%10728 = OpBitwiseOr %v4uint %24087 %15335
|
||||
OpBranch %13962
|
||||
%13962 = OpLabel
|
||||
%16606 = OpPhi %v4uint %22649 %13411 %10728 %11064
|
||||
%18240 = OpBitwiseAnd %v4uint %16606 %850
|
||||
%9137 = OpConvertUToF %v4float %18240
|
||||
%19365 = OpVectorTimesScalar %v4float %9137 %float_1_52590219en05
|
||||
%23367 = OpShiftRightLogical %v4uint %16606 %749
|
||||
%18492 = OpConvertUToF %v4float %23367
|
||||
%18450 = OpVectorTimesScalar %v4float %18492 %float_1_52590219en05
|
||||
%6268 = OpCompositeExtract %float %19365 0
|
||||
%13806 = OpCompositeExtract %float %18450 0
|
||||
%19232 = OpCompositeConstruct %v2float %6268 %13806
|
||||
%8561 = OpExtInst %uint %1 PackHalf2x16 %19232
|
||||
%23487 = OpCompositeExtract %float %19365 1
|
||||
%14759 = OpCompositeExtract %float %18450 1
|
||||
%19233 = OpCompositeConstruct %v2float %23487 %14759
|
||||
%8562 = OpExtInst %uint %1 PackHalf2x16 %19233
|
||||
%23488 = OpCompositeExtract %float %19365 2
|
||||
%14760 = OpCompositeExtract %float %18450 2
|
||||
%19234 = OpCompositeConstruct %v2float %23488 %14760
|
||||
%8563 = OpExtInst %uint %1 PackHalf2x16 %19234
|
||||
%23489 = OpCompositeExtract %float %19365 3
|
||||
%14761 = OpCompositeExtract %float %18450 3
|
||||
%19213 = OpCompositeConstruct %v2float %23489 %14761
|
||||
%8430 = OpExtInst %uint %1 PackHalf2x16 %19213
|
||||
%15035 = OpCompositeConstruct %v4uint %8561 %8562 %8563 %8430
|
||||
%17859 = OpAccessChain %_ptr_Uniform_v4uint %5134 %int_0 %21670
|
||||
OpStore %17859 %15035
|
||||
%15044 = OpIAdd %uint %21670 %int_1
|
||||
%18776 = OpSelect %uint %10467 %uint_32 %uint_16
|
||||
%11803 = OpShiftRightLogical %uint %18776 %uint_4
|
||||
%13947 = OpIAdd %uint %21493 %11803
|
||||
%22298 = OpAccessChain %_ptr_Uniform_v4uint %4218 %int_0 %13947
|
||||
%6578 = OpLoad %v4uint %22298
|
||||
OpSelectionMerge %14874 None
|
||||
OpBranchConditional %22150 %10584 %14874
|
||||
%10584 = OpLabel
|
||||
%18272 = OpBitwiseAnd %v4uint %6578 %2510
|
||||
%9426 = OpShiftLeftLogical %v4uint %18272 %317
|
||||
%20653 = OpBitwiseAnd %v4uint %6578 %1838
|
||||
%17550 = OpShiftRightLogical %v4uint %20653 %317
|
||||
%16377 = OpBitwiseOr %v4uint %9426 %17550
|
||||
OpBranch %14874
|
||||
%14874 = OpLabel
|
||||
%10924 = OpPhi %v4uint %6578 %13962 %16377 %10584
|
||||
OpSelectionMerge %13963 None
|
||||
OpBranchConditional %15139 %11065 %13963
|
||||
%11065 = OpLabel
|
||||
%24088 = OpShiftLeftLogical %v4uint %10924 %749
|
||||
%15336 = OpShiftRightLogical %v4uint %10924 %749
|
||||
%10729 = OpBitwiseOr %v4uint %24088 %15336
|
||||
OpBranch %13963
|
||||
%13963 = OpLabel
|
||||
%16607 = OpPhi %v4uint %10924 %14874 %10729 %11065
|
||||
%18241 = OpBitwiseAnd %v4uint %16607 %850
|
||||
%9138 = OpConvertUToF %v4float %18241
|
||||
%19366 = OpVectorTimesScalar %v4float %9138 %float_1_52590219en05
|
||||
%23368 = OpShiftRightLogical %v4uint %16607 %749
|
||||
%18493 = OpConvertUToF %v4float %23368
|
||||
%18451 = OpVectorTimesScalar %v4float %18493 %float_1_52590219en05
|
||||
%6269 = OpCompositeExtract %float %19366 0
|
||||
%13807 = OpCompositeExtract %float %18451 0
|
||||
%19235 = OpCompositeConstruct %v2float %6269 %13807
|
||||
%8564 = OpExtInst %uint %1 PackHalf2x16 %19235
|
||||
%23490 = OpCompositeExtract %float %19366 1
|
||||
%14762 = OpCompositeExtract %float %18451 1
|
||||
%19236 = OpCompositeConstruct %v2float %23490 %14762
|
||||
%8565 = OpExtInst %uint %1 PackHalf2x16 %19236
|
||||
%23491 = OpCompositeExtract %float %19366 2
|
||||
%14763 = OpCompositeExtract %float %18451 2
|
||||
%19237 = OpCompositeConstruct %v2float %23491 %14763
|
||||
%8566 = OpExtInst %uint %1 PackHalf2x16 %19237
|
||||
%23492 = OpCompositeExtract %float %19366 3
|
||||
%14764 = OpCompositeExtract %float %18451 3
|
||||
%19214 = OpCompositeConstruct %v2float %23492 %14764
|
||||
%8431 = OpExtInst %uint %1 PackHalf2x16 %19214
|
||||
%15036 = OpCompositeConstruct %v4uint %8564 %8565 %8566 %8431
|
||||
%20158 = OpAccessChain %_ptr_Uniform_v4uint %5134 %int_0 %15044
|
||||
OpStore %20158 %15036
|
||||
OpBranch %19578
|
||||
%19578 = OpLabel
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
#endif
|
||||
|
||||
const uint32_t texture_load_rgba16_unorm_float_cs[] = {
|
||||
0x07230203, 0x00010000, 0x0008000A, 0x0000625B, 0x00000000, 0x00020011,
|
||||
0x00000001, 0x0006000B, 0x00000001, 0x4C534C47, 0x6474732E, 0x3035342E,
|
||||
0x00000000, 0x0003000E, 0x00000000, 0x00000001, 0x0006000F, 0x00000005,
|
||||
0x0000161F, 0x6E69616D, 0x00000000, 0x00000F48, 0x00060010, 0x0000161F,
|
||||
0x00000011, 0x00000008, 0x00000020, 0x00000001, 0x00050048, 0x00000489,
|
||||
0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x00000489, 0x00000001,
|
||||
0x00000023, 0x00000004, 0x00050048, 0x00000489, 0x00000002, 0x00000023,
|
||||
0x00000008, 0x00050048, 0x00000489, 0x00000003, 0x00000023, 0x0000000C,
|
||||
0x00050048, 0x00000489, 0x00000004, 0x00000023, 0x00000010, 0x00050048,
|
||||
0x00000489, 0x00000005, 0x00000023, 0x0000001C, 0x00050048, 0x00000489,
|
||||
0x00000006, 0x00000023, 0x00000020, 0x00050048, 0x00000489, 0x00000007,
|
||||
0x00000023, 0x00000024, 0x00030047, 0x00000489, 0x00000002, 0x00040047,
|
||||
0x0000147D, 0x00000022, 0x00000002, 0x00040047, 0x0000147D, 0x00000021,
|
||||
0x00000000, 0x00040047, 0x00000F48, 0x0000000B, 0x0000001C, 0x00040047,
|
||||
0x000007DC, 0x00000006, 0x00000010, 0x00040048, 0x000007B4, 0x00000000,
|
||||
0x00000019, 0x00050048, 0x000007B4, 0x00000000, 0x00000023, 0x00000000,
|
||||
0x00030047, 0x000007B4, 0x00000003, 0x00040047, 0x0000140E, 0x00000022,
|
||||
0x00000000, 0x00040047, 0x0000140E, 0x00000021, 0x00000000, 0x00040047,
|
||||
0x000007DD, 0x00000006, 0x00000010, 0x00040048, 0x000007B5, 0x00000000,
|
||||
0x00000018, 0x00050048, 0x000007B5, 0x00000000, 0x00000023, 0x00000000,
|
||||
0x00030047, 0x000007B5, 0x00000003, 0x00040047, 0x0000107A, 0x00000022,
|
||||
0x00000001, 0x00040047, 0x0000107A, 0x00000021, 0x00000000, 0x00040047,
|
||||
0x00000024, 0x0000000B, 0x00000019, 0x00020013, 0x00000008, 0x00030021,
|
||||
0x00000502, 0x00000008, 0x00040015, 0x0000000B, 0x00000020, 0x00000000,
|
||||
0x00040017, 0x00000017, 0x0000000B, 0x00000004, 0x00040015, 0x0000000C,
|
||||
0x00000020, 0x00000001, 0x00040017, 0x00000012, 0x0000000C, 0x00000002,
|
||||
0x00040017, 0x00000016, 0x0000000C, 0x00000003, 0x00020014, 0x00000009,
|
||||
0x00040017, 0x00000014, 0x0000000B, 0x00000003, 0x00030016, 0x0000000D,
|
||||
0x00000020, 0x00040017, 0x0000001D, 0x0000000D, 0x00000004, 0x0004002B,
|
||||
0x0000000B, 0x000001C1, 0x0000FFFF, 0x0004002B, 0x0000000D, 0x0000092A,
|
||||
0x37800080, 0x0004002B, 0x0000000B, 0x00000A3A, 0x00000010, 0x0004002B,
|
||||
0x0000000B, 0x00000A0A, 0x00000000, 0x00040017, 0x00000013, 0x0000000D,
|
||||
0x00000002, 0x0004002B, 0x0000000B, 0x00000A0D, 0x00000001, 0x0004002B,
|
||||
0x0000000B, 0x00000A10, 0x00000002, 0x0004002B, 0x0000000B, 0x00000A13,
|
||||
0x00000003, 0x0004002B, 0x0000000B, 0x000008A6, 0x00FF00FF, 0x0004002B,
|
||||
0x0000000B, 0x00000A22, 0x00000008, 0x0004002B, 0x0000000B, 0x000005FD,
|
||||
0xFF00FF00, 0x0004002B, 0x0000000C, 0x00000A1A, 0x00000005, 0x0004002B,
|
||||
0x0000000B, 0x00000A19, 0x00000005, 0x0004002B, 0x0000000C, 0x00000A20,
|
||||
0x00000007, 0x0004002B, 0x0000000C, 0x00000A35, 0x0000000E, 0x0004002B,
|
||||
0x0000000C, 0x00000A11, 0x00000002, 0x0004002B, 0x0000000C, 0x000009DB,
|
||||
0xFFFFFFF0, 0x0004002B, 0x0000000C, 0x00000A0E, 0x00000001, 0x0004002B,
|
||||
0x0000000C, 0x00000A38, 0x0000000F, 0x0004002B, 0x0000000C, 0x00000A17,
|
||||
0x00000004, 0x0004002B, 0x0000000C, 0x0000040B, 0xFFFFFE00, 0x0004002B,
|
||||
0x0000000C, 0x00000A14, 0x00000003, 0x0004002B, 0x0000000C, 0x00000A3B,
|
||||
0x00000010, 0x0004002B, 0x0000000C, 0x00000388, 0x000001C0, 0x0004002B,
|
||||
0x0000000C, 0x00000A23, 0x00000008, 0x0004002B, 0x0000000C, 0x00000A1D,
|
||||
0x00000006, 0x0004002B, 0x0000000C, 0x00000AC8, 0x0000003F, 0x0004002B,
|
||||
0x0000000B, 0x00000A16, 0x00000004, 0x0004002B, 0x0000000C, 0x0000078B,
|
||||
0x0FFFFFFF, 0x0004002B, 0x0000000C, 0x00000A05, 0xFFFFFFFE, 0x0004002B,
|
||||
0x0000000B, 0x00000A6A, 0x00000020, 0x000A001E, 0x00000489, 0x0000000B,
|
||||
0x0000000B, 0x0000000B, 0x0000000B, 0x00000014, 0x0000000B, 0x0000000B,
|
||||
0x0000000B, 0x00040020, 0x00000706, 0x00000002, 0x00000489, 0x0004003B,
|
||||
0x00000706, 0x0000147D, 0x00000002, 0x0004002B, 0x0000000C, 0x00000A0B,
|
||||
0x00000000, 0x00040020, 0x00000288, 0x00000002, 0x0000000B, 0x00040020,
|
||||
0x00000291, 0x00000002, 0x00000014, 0x00040017, 0x00000011, 0x0000000B,
|
||||
0x00000002, 0x00040020, 0x00000292, 0x00000001, 0x00000014, 0x0004003B,
|
||||
0x00000292, 0x00000F48, 0x00000001, 0x0006002C, 0x00000014, 0x00000A24,
|
||||
0x00000A10, 0x00000A0A, 0x00000A0A, 0x00040017, 0x0000000F, 0x00000009,
|
||||
0x00000002, 0x0003001D, 0x000007DC, 0x00000017, 0x0003001E, 0x000007B4,
|
||||
0x000007DC, 0x00040020, 0x00000A31, 0x00000002, 0x000007B4, 0x0004003B,
|
||||
0x00000A31, 0x0000140E, 0x00000002, 0x0003001D, 0x000007DD, 0x00000017,
|
||||
0x0003001E, 0x000007B5, 0x000007DD, 0x00040020, 0x00000A32, 0x00000002,
|
||||
0x000007B5, 0x0004003B, 0x00000A32, 0x0000107A, 0x00000002, 0x00040020,
|
||||
0x00000294, 0x00000002, 0x00000017, 0x0006002C, 0x00000014, 0x00000024,
|
||||
0x00000A22, 0x00000A6A, 0x00000A0D, 0x0004002B, 0x0000000B, 0x00000A25,
|
||||
0x00000009, 0x0004002B, 0x0000000B, 0x00000A28, 0x0000000A, 0x0007002C,
|
||||
0x00000017, 0x000009CE, 0x000008A6, 0x000008A6, 0x000008A6, 0x000008A6,
|
||||
0x0007002C, 0x00000017, 0x0000013D, 0x00000A22, 0x00000A22, 0x00000A22,
|
||||
0x00000A22, 0x0007002C, 0x00000017, 0x0000072E, 0x000005FD, 0x000005FD,
|
||||
0x000005FD, 0x000005FD, 0x0007002C, 0x00000017, 0x000002ED, 0x00000A3A,
|
||||
0x00000A3A, 0x00000A3A, 0x00000A3A, 0x0007002C, 0x00000017, 0x00000352,
|
||||
0x000001C1, 0x000001C1, 0x000001C1, 0x000001C1, 0x00050036, 0x00000008,
|
||||
0x0000161F, 0x00000000, 0x00000502, 0x000200F8, 0x00003B06, 0x000300F7,
|
||||
0x00004C7A, 0x00000000, 0x000300FB, 0x00000A0A, 0x00003B21, 0x000200F8,
|
||||
0x00003B21, 0x0004003D, 0x00000014, 0x0000312F, 0x00000F48, 0x000500C4,
|
||||
0x00000014, 0x000027F5, 0x0000312F, 0x00000A24, 0x00050041, 0x00000291,
|
||||
0x0000625A, 0x0000147D, 0x00000A17, 0x0004003D, 0x00000014, 0x000059B5,
|
||||
0x0000625A, 0x0007004F, 0x00000011, 0x00004993, 0x000027F5, 0x000027F5,
|
||||
0x00000000, 0x00000001, 0x0007004F, 0x00000011, 0x000019E2, 0x000059B5,
|
||||
0x000059B5, 0x00000000, 0x00000001, 0x000500AE, 0x0000000F, 0x00004288,
|
||||
0x00004993, 0x000019E2, 0x0004009A, 0x00000009, 0x00006067, 0x00004288,
|
||||
0x000300F7, 0x0000188A, 0x00000002, 0x000400FA, 0x00006067, 0x000055E8,
|
||||
0x0000188A, 0x000200F8, 0x000055E8, 0x000200F9, 0x00004C7A, 0x000200F8,
|
||||
0x0000188A, 0x0004007C, 0x00000016, 0x00001A8B, 0x000027F5, 0x00050041,
|
||||
0x00000288, 0x00004968, 0x0000147D, 0x00000A1D, 0x0004003D, 0x0000000B,
|
||||
0x0000263C, 0x00004968, 0x00050051, 0x0000000B, 0x00004F98, 0x000059B5,
|
||||
0x00000001, 0x00050051, 0x0000000C, 0x00003964, 0x00001A8B, 0x00000000,
|
||||
0x00050084, 0x0000000C, 0x0000591A, 0x00003964, 0x00000A23, 0x00050051,
|
||||
0x0000000C, 0x000018DA, 0x00001A8B, 0x00000002, 0x0004007C, 0x0000000C,
|
||||
0x000038A9, 0x00004F98, 0x00050084, 0x0000000C, 0x00002C0F, 0x000018DA,
|
||||
0x000038A9, 0x00050051, 0x0000000C, 0x000044BE, 0x00001A8B, 0x00000001,
|
||||
0x00050080, 0x0000000C, 0x000056D4, 0x00002C0F, 0x000044BE, 0x0004007C,
|
||||
0x0000000C, 0x00005785, 0x0000263C, 0x00050084, 0x0000000C, 0x00005FD7,
|
||||
0x000056D4, 0x00005785, 0x00050080, 0x0000000C, 0x00001B95, 0x0000591A,
|
||||
0x00005FD7, 0x0004007C, 0x0000000B, 0x00004B46, 0x00001B95, 0x00050041,
|
||||
0x00000288, 0x00004C04, 0x0000147D, 0x00000A1A, 0x0004003D, 0x0000000B,
|
||||
0x0000595B, 0x00004C04, 0x00050080, 0x0000000B, 0x00002145, 0x00004B46,
|
||||
0x0000595B, 0x000500C2, 0x0000000B, 0x000054A6, 0x00002145, 0x00000A16,
|
||||
0x00050041, 0x00000288, 0x000051D6, 0x0000147D, 0x00000A0B, 0x0004003D,
|
||||
0x0000000B, 0x000053A3, 0x000051D6, 0x000500C7, 0x0000000B, 0x000018ED,
|
||||
0x000053A3, 0x00000A0D, 0x000500AB, 0x00000009, 0x000028E3, 0x000018ED,
|
||||
0x00000A0A, 0x000300F7, 0x00005AE2, 0x00000002, 0x000400FA, 0x000028E3,
|
||||
0x0000277C, 0x00002A0D, 0x000200F8, 0x0000277C, 0x000500C7, 0x0000000B,
|
||||
0x00005BD4, 0x000053A3, 0x00000A10, 0x000500AB, 0x00000009, 0x00003FAC,
|
||||
0x00005BD4, 0x00000A0A, 0x000300F7, 0x00001E0B, 0x00000002, 0x000400FA,
|
||||
0x00003FAC, 0x00002F61, 0x00006228, 0x000200F8, 0x00002F61, 0x00050041,
|
||||
0x00000288, 0x00004722, 0x0000147D, 0x00000A11, 0x0004003D, 0x0000000B,
|
||||
0x00003D0B, 0x00004722, 0x00050041, 0x00000288, 0x00005860, 0x0000147D,
|
||||
0x00000A14, 0x0004003D, 0x0000000B, 0x0000541F, 0x00005860, 0x000500C3,
|
||||
0x0000000C, 0x00003A4B, 0x000044BE, 0x00000A17, 0x000500C3, 0x0000000C,
|
||||
0x00004955, 0x000018DA, 0x00000A11, 0x000500C2, 0x0000000B, 0x00004947,
|
||||
0x0000541F, 0x00000A16, 0x0004007C, 0x0000000C, 0x000018AA, 0x00004947,
|
||||
0x00050084, 0x0000000C, 0x00005321, 0x00004955, 0x000018AA, 0x00050080,
|
||||
0x0000000C, 0x00003B27, 0x00003A4B, 0x00005321, 0x000500C2, 0x0000000B,
|
||||
0x00002348, 0x00003D0B, 0x00000A19, 0x0004007C, 0x0000000C, 0x00003901,
|
||||
0x00002348, 0x00050084, 0x0000000C, 0x000020F4, 0x00003B27, 0x00003901,
|
||||
0x000500C3, 0x0000000C, 0x000032BA, 0x00003964, 0x00000A1A, 0x00050080,
|
||||
0x0000000C, 0x00005FEE, 0x000032BA, 0x000020F4, 0x000500C4, 0x0000000C,
|
||||
0x0000225D, 0x00005FEE, 0x00000A25, 0x000500C7, 0x0000000C, 0x00002CF6,
|
||||
0x0000225D, 0x0000078B, 0x000500C4, 0x0000000C, 0x000049FA, 0x00002CF6,
|
||||
0x00000A0E, 0x000500C7, 0x0000000C, 0x00004D38, 0x00003964, 0x00000A20,
|
||||
0x000500C7, 0x0000000C, 0x00003138, 0x000044BE, 0x00000A1D, 0x000500C4,
|
||||
0x0000000C, 0x0000454D, 0x00003138, 0x00000A11, 0x00050080, 0x0000000C,
|
||||
0x0000434B, 0x00004D38, 0x0000454D, 0x000500C4, 0x0000000C, 0x00001B88,
|
||||
0x0000434B, 0x00000A25, 0x000500C3, 0x0000000C, 0x00005DE3, 0x00001B88,
|
||||
0x00000A1D, 0x000500C3, 0x0000000C, 0x00002215, 0x000044BE, 0x00000A14,
|
||||
0x00050080, 0x0000000C, 0x000035A3, 0x00002215, 0x00004955, 0x000500C7,
|
||||
0x0000000C, 0x00005A0C, 0x000035A3, 0x00000A0E, 0x000500C3, 0x0000000C,
|
||||
0x00004112, 0x00003964, 0x00000A14, 0x000500C4, 0x0000000C, 0x0000496A,
|
||||
0x00005A0C, 0x00000A0E, 0x00050080, 0x0000000C, 0x000034BD, 0x00004112,
|
||||
0x0000496A, 0x000500C7, 0x0000000C, 0x00004ADD, 0x000034BD, 0x00000A14,
|
||||
0x000500C4, 0x0000000C, 0x0000544A, 0x00004ADD, 0x00000A0E, 0x00050080,
|
||||
0x0000000C, 0x00003C4B, 0x00005A0C, 0x0000544A, 0x000500C7, 0x0000000C,
|
||||
0x0000335E, 0x00005DE3, 0x000009DB, 0x00050080, 0x0000000C, 0x00004F70,
|
||||
0x000049FA, 0x0000335E, 0x000500C4, 0x0000000C, 0x00005B31, 0x00004F70,
|
||||
0x00000A0E, 0x000500C7, 0x0000000C, 0x00005AEA, 0x00005DE3, 0x00000A38,
|
||||
0x00050080, 0x0000000C, 0x0000285C, 0x00005B31, 0x00005AEA, 0x000500C7,
|
||||
0x0000000C, 0x000047B4, 0x000018DA, 0x00000A14, 0x000500C4, 0x0000000C,
|
||||
0x0000544B, 0x000047B4, 0x00000A25, 0x00050080, 0x0000000C, 0x00004157,
|
||||
0x0000285C, 0x0000544B, 0x000500C7, 0x0000000C, 0x00004ADE, 0x000044BE,
|
||||
0x00000A0E, 0x000500C4, 0x0000000C, 0x0000544C, 0x00004ADE, 0x00000A17,
|
||||
0x00050080, 0x0000000C, 0x00004158, 0x00004157, 0x0000544C, 0x000500C7,
|
||||
0x0000000C, 0x00004FD6, 0x00003C4B, 0x00000A0E, 0x000500C4, 0x0000000C,
|
||||
0x00002703, 0x00004FD6, 0x00000A14, 0x000500C3, 0x0000000C, 0x00003332,
|
||||
0x00004158, 0x00000A1D, 0x000500C7, 0x0000000C, 0x000036D6, 0x00003332,
|
||||
0x00000A20, 0x00050080, 0x0000000C, 0x00003412, 0x00002703, 0x000036D6,
|
||||
0x000500C4, 0x0000000C, 0x00005B32, 0x00003412, 0x00000A14, 0x000500C7,
|
||||
0x0000000C, 0x00005AB1, 0x00003C4B, 0x00000A05, 0x00050080, 0x0000000C,
|
||||
0x00002A9C, 0x00005B32, 0x00005AB1, 0x000500C4, 0x0000000C, 0x00005B33,
|
||||
0x00002A9C, 0x00000A11, 0x000500C7, 0x0000000C, 0x00005AB2, 0x00004158,
|
||||
0x0000040B, 0x00050080, 0x0000000C, 0x00002A9D, 0x00005B33, 0x00005AB2,
|
||||
0x000500C4, 0x0000000C, 0x00005B34, 0x00002A9D, 0x00000A14, 0x000500C7,
|
||||
0x0000000C, 0x00005EA0, 0x00004158, 0x00000AC8, 0x00050080, 0x0000000C,
|
||||
0x000054ED, 0x00005B34, 0x00005EA0, 0x000200F9, 0x00001E0B, 0x000200F8,
|
||||
0x00006228, 0x0004007C, 0x00000012, 0x00001A8C, 0x00004993, 0x00050041,
|
||||
0x00000288, 0x00004969, 0x0000147D, 0x00000A11, 0x0004003D, 0x0000000B,
|
||||
0x00002EB2, 0x00004969, 0x00050051, 0x0000000C, 0x00004944, 0x00001A8C,
|
||||
0x00000000, 0x000500C3, 0x0000000C, 0x00004CF5, 0x00004944, 0x00000A1A,
|
||||
0x00050051, 0x0000000C, 0x00002747, 0x00001A8C, 0x00000001, 0x000500C3,
|
||||
0x0000000C, 0x0000405C, 0x00002747, 0x00000A1A, 0x000500C2, 0x0000000B,
|
||||
0x00005B4D, 0x00002EB2, 0x00000A19, 0x0004007C, 0x0000000C, 0x000018AB,
|
||||
0x00005B4D, 0x00050084, 0x0000000C, 0x00005347, 0x0000405C, 0x000018AB,
|
||||
0x00050080, 0x0000000C, 0x00003F5E, 0x00004CF5, 0x00005347, 0x000500C4,
|
||||
0x0000000C, 0x00004A8E, 0x00003F5E, 0x00000A28, 0x000500C7, 0x0000000C,
|
||||
0x00002AB6, 0x00004944, 0x00000A20, 0x000500C7, 0x0000000C, 0x00003139,
|
||||
0x00002747, 0x00000A35, 0x000500C4, 0x0000000C, 0x0000454E, 0x00003139,
|
||||
0x00000A11, 0x00050080, 0x0000000C, 0x00004397, 0x00002AB6, 0x0000454E,
|
||||
0x000500C4, 0x0000000C, 0x000018E7, 0x00004397, 0x00000A13, 0x000500C7,
|
||||
0x0000000C, 0x000027B1, 0x000018E7, 0x000009DB, 0x000500C4, 0x0000000C,
|
||||
0x00002F76, 0x000027B1, 0x00000A0E, 0x00050080, 0x0000000C, 0x00003C4C,
|
||||
0x00004A8E, 0x00002F76, 0x000500C7, 0x0000000C, 0x00003397, 0x000018E7,
|
||||
0x00000A38, 0x00050080, 0x0000000C, 0x00004D30, 0x00003C4C, 0x00003397,
|
||||
0x000500C7, 0x0000000C, 0x000047B5, 0x00002747, 0x00000A0E, 0x000500C4,
|
||||
0x0000000C, 0x0000544D, 0x000047B5, 0x00000A17, 0x00050080, 0x0000000C,
|
||||
0x00004159, 0x00004D30, 0x0000544D, 0x000500C7, 0x0000000C, 0x00005022,
|
||||
0x00004159, 0x0000040B, 0x000500C4, 0x0000000C, 0x00002416, 0x00005022,
|
||||
0x00000A14, 0x000500C7, 0x0000000C, 0x00004A33, 0x00002747, 0x00000A3B,
|
||||
0x000500C4, 0x0000000C, 0x00002F77, 0x00004A33, 0x00000A20, 0x00050080,
|
||||
0x0000000C, 0x0000415A, 0x00002416, 0x00002F77, 0x000500C7, 0x0000000C,
|
||||
0x00004ADF, 0x00004159, 0x00000388, 0x000500C4, 0x0000000C, 0x0000544E,
|
||||
0x00004ADF, 0x00000A11, 0x00050080, 0x0000000C, 0x00004144, 0x0000415A,
|
||||
0x0000544E, 0x000500C7, 0x0000000C, 0x00005083, 0x00002747, 0x00000A23,
|
||||
0x000500C3, 0x0000000C, 0x000041BF, 0x00005083, 0x00000A11, 0x000500C3,
|
||||
0x0000000C, 0x00001EEC, 0x00004944, 0x00000A14, 0x00050080, 0x0000000C,
|
||||
0x000035B6, 0x000041BF, 0x00001EEC, 0x000500C7, 0x0000000C, 0x00005453,
|
||||
0x000035B6, 0x00000A14, 0x000500C4, 0x0000000C, 0x0000544F, 0x00005453,
|
||||
0x00000A1D, 0x00050080, 0x0000000C, 0x00003C4D, 0x00004144, 0x0000544F,
|
||||
0x000500C7, 0x0000000C, 0x0000374D, 0x00004159, 0x00000AC8, 0x00050080,
|
||||
0x0000000C, 0x00002F42, 0x00003C4D, 0x0000374D, 0x000200F9, 0x00001E0B,
|
||||
0x000200F8, 0x00001E0B, 0x000700F5, 0x0000000C, 0x0000292C, 0x000054ED,
|
||||
0x00002F61, 0x00002F42, 0x00006228, 0x000200F9, 0x00005AE2, 0x000200F8,
|
||||
0x00002A0D, 0x00050041, 0x00000288, 0x00005098, 0x0000147D, 0x00000A11,
|
||||
0x0004003D, 0x0000000B, 0x00003D0C, 0x00005098, 0x00050041, 0x00000288,
|
||||
0x0000531B, 0x0000147D, 0x00000A14, 0x0004003D, 0x0000000B, 0x000034EE,
|
||||
0x0000531B, 0x0004007C, 0x0000000C, 0x00003ADE, 0x000034EE, 0x00050084,
|
||||
0x0000000C, 0x000049EF, 0x000018DA, 0x00003ADE, 0x00050080, 0x0000000C,
|
||||
0x0000208E, 0x000049EF, 0x000044BE, 0x0004007C, 0x0000000C, 0x000022F8,
|
||||
0x00003D0C, 0x00050084, 0x0000000C, 0x00001E9F, 0x0000208E, 0x000022F8,
|
||||
0x00050080, 0x0000000C, 0x00001F30, 0x0000591A, 0x00001E9F, 0x000200F9,
|
||||
0x00005AE2, 0x000200F8, 0x00005AE2, 0x000700F5, 0x0000000C, 0x00004D24,
|
||||
0x0000292C, 0x00001E0B, 0x00001F30, 0x00002A0D, 0x00050041, 0x00000288,
|
||||
0x0000615A, 0x0000147D, 0x00000A0E, 0x0004003D, 0x0000000B, 0x00001D4E,
|
||||
0x0000615A, 0x0004007C, 0x0000000C, 0x00003D46, 0x00001D4E, 0x00050080,
|
||||
0x0000000C, 0x00003CDB, 0x00003D46, 0x00004D24, 0x0004007C, 0x0000000B,
|
||||
0x0000487C, 0x00003CDB, 0x000500C2, 0x0000000B, 0x000053F5, 0x0000487C,
|
||||
0x00000A16, 0x000500C2, 0x0000000B, 0x00003A95, 0x000053A3, 0x00000A10,
|
||||
0x000500C7, 0x0000000B, 0x000020CA, 0x00003A95, 0x00000A13, 0x00060041,
|
||||
0x00000294, 0x000050F7, 0x0000107A, 0x00000A0B, 0x000053F5, 0x0004003D,
|
||||
0x00000017, 0x00001FCE, 0x000050F7, 0x000500AA, 0x00000009, 0x000035C0,
|
||||
0x000020CA, 0x00000A0D, 0x000500AA, 0x00000009, 0x00005376, 0x000020CA,
|
||||
0x00000A10, 0x000500A6, 0x00000009, 0x00005686, 0x000035C0, 0x00005376,
|
||||
0x000300F7, 0x00003463, 0x00000000, 0x000400FA, 0x00005686, 0x00002957,
|
||||
0x00003463, 0x000200F8, 0x00002957, 0x000500C7, 0x00000017, 0x0000475F,
|
||||
0x00001FCE, 0x000009CE, 0x000500C4, 0x00000017, 0x000024D1, 0x0000475F,
|
||||
0x0000013D, 0x000500C7, 0x00000017, 0x000050AC, 0x00001FCE, 0x0000072E,
|
||||
0x000500C2, 0x00000017, 0x0000448D, 0x000050AC, 0x0000013D, 0x000500C5,
|
||||
0x00000017, 0x00003FF8, 0x000024D1, 0x0000448D, 0x000200F9, 0x00003463,
|
||||
0x000200F8, 0x00003463, 0x000700F5, 0x00000017, 0x00005879, 0x00001FCE,
|
||||
0x00005AE2, 0x00003FF8, 0x00002957, 0x000500AA, 0x00000009, 0x00004CB6,
|
||||
0x000020CA, 0x00000A13, 0x000500A6, 0x00000009, 0x00003B23, 0x00005376,
|
||||
0x00004CB6, 0x000300F7, 0x0000368A, 0x00000000, 0x000400FA, 0x00003B23,
|
||||
0x00002B38, 0x0000368A, 0x000200F8, 0x00002B38, 0x000500C4, 0x00000017,
|
||||
0x00005E17, 0x00005879, 0x000002ED, 0x000500C2, 0x00000017, 0x00003BE7,
|
||||
0x00005879, 0x000002ED, 0x000500C5, 0x00000017, 0x000029E8, 0x00005E17,
|
||||
0x00003BE7, 0x000200F9, 0x0000368A, 0x000200F8, 0x0000368A, 0x000700F5,
|
||||
0x00000017, 0x000040DE, 0x00005879, 0x00003463, 0x000029E8, 0x00002B38,
|
||||
0x000500C7, 0x00000017, 0x00004740, 0x000040DE, 0x00000352, 0x00040070,
|
||||
0x0000001D, 0x000023B1, 0x00004740, 0x0005008E, 0x0000001D, 0x00004BA5,
|
||||
0x000023B1, 0x0000092A, 0x000500C2, 0x00000017, 0x00005B47, 0x000040DE,
|
||||
0x000002ED, 0x00040070, 0x0000001D, 0x0000483C, 0x00005B47, 0x0005008E,
|
||||
0x0000001D, 0x00004812, 0x0000483C, 0x0000092A, 0x00050051, 0x0000000D,
|
||||
0x0000187C, 0x00004BA5, 0x00000000, 0x00050051, 0x0000000D, 0x000035EE,
|
||||
0x00004812, 0x00000000, 0x00050050, 0x00000013, 0x00004B20, 0x0000187C,
|
||||
0x000035EE, 0x0006000C, 0x0000000B, 0x00002171, 0x00000001, 0x0000003A,
|
||||
0x00004B20, 0x00050051, 0x0000000D, 0x00005BBF, 0x00004BA5, 0x00000001,
|
||||
0x00050051, 0x0000000D, 0x000039A7, 0x00004812, 0x00000001, 0x00050050,
|
||||
0x00000013, 0x00004B21, 0x00005BBF, 0x000039A7, 0x0006000C, 0x0000000B,
|
||||
0x00002172, 0x00000001, 0x0000003A, 0x00004B21, 0x00050051, 0x0000000D,
|
||||
0x00005BC0, 0x00004BA5, 0x00000002, 0x00050051, 0x0000000D, 0x000039A8,
|
||||
0x00004812, 0x00000002, 0x00050050, 0x00000013, 0x00004B22, 0x00005BC0,
|
||||
0x000039A8, 0x0006000C, 0x0000000B, 0x00002173, 0x00000001, 0x0000003A,
|
||||
0x00004B22, 0x00050051, 0x0000000D, 0x00005BC1, 0x00004BA5, 0x00000003,
|
||||
0x00050051, 0x0000000D, 0x000039A9, 0x00004812, 0x00000003, 0x00050050,
|
||||
0x00000013, 0x00004B0D, 0x00005BC1, 0x000039A9, 0x0006000C, 0x0000000B,
|
||||
0x000020EE, 0x00000001, 0x0000003A, 0x00004B0D, 0x00070050, 0x00000017,
|
||||
0x00003ABB, 0x00002171, 0x00002172, 0x00002173, 0x000020EE, 0x00060041,
|
||||
0x00000294, 0x000045C3, 0x0000140E, 0x00000A0B, 0x000054A6, 0x0003003E,
|
||||
0x000045C3, 0x00003ABB, 0x00050080, 0x0000000B, 0x00003AC4, 0x000054A6,
|
||||
0x00000A0E, 0x000600A9, 0x0000000B, 0x00004958, 0x000028E3, 0x00000A6A,
|
||||
0x00000A3A, 0x000500C2, 0x0000000B, 0x00002E1B, 0x00004958, 0x00000A16,
|
||||
0x00050080, 0x0000000B, 0x0000367B, 0x000053F5, 0x00002E1B, 0x00060041,
|
||||
0x00000294, 0x0000571A, 0x0000107A, 0x00000A0B, 0x0000367B, 0x0004003D,
|
||||
0x00000017, 0x000019B2, 0x0000571A, 0x000300F7, 0x00003A1A, 0x00000000,
|
||||
0x000400FA, 0x00005686, 0x00002958, 0x00003A1A, 0x000200F8, 0x00002958,
|
||||
0x000500C7, 0x00000017, 0x00004760, 0x000019B2, 0x000009CE, 0x000500C4,
|
||||
0x00000017, 0x000024D2, 0x00004760, 0x0000013D, 0x000500C7, 0x00000017,
|
||||
0x000050AD, 0x000019B2, 0x0000072E, 0x000500C2, 0x00000017, 0x0000448E,
|
||||
0x000050AD, 0x0000013D, 0x000500C5, 0x00000017, 0x00003FF9, 0x000024D2,
|
||||
0x0000448E, 0x000200F9, 0x00003A1A, 0x000200F8, 0x00003A1A, 0x000700F5,
|
||||
0x00000017, 0x00002AAC, 0x000019B2, 0x0000368A, 0x00003FF9, 0x00002958,
|
||||
0x000300F7, 0x0000368B, 0x00000000, 0x000400FA, 0x00003B23, 0x00002B39,
|
||||
0x0000368B, 0x000200F8, 0x00002B39, 0x000500C4, 0x00000017, 0x00005E18,
|
||||
0x00002AAC, 0x000002ED, 0x000500C2, 0x00000017, 0x00003BE8, 0x00002AAC,
|
||||
0x000002ED, 0x000500C5, 0x00000017, 0x000029E9, 0x00005E18, 0x00003BE8,
|
||||
0x000200F9, 0x0000368B, 0x000200F8, 0x0000368B, 0x000700F5, 0x00000017,
|
||||
0x000040DF, 0x00002AAC, 0x00003A1A, 0x000029E9, 0x00002B39, 0x000500C7,
|
||||
0x00000017, 0x00004741, 0x000040DF, 0x00000352, 0x00040070, 0x0000001D,
|
||||
0x000023B2, 0x00004741, 0x0005008E, 0x0000001D, 0x00004BA6, 0x000023B2,
|
||||
0x0000092A, 0x000500C2, 0x00000017, 0x00005B48, 0x000040DF, 0x000002ED,
|
||||
0x00040070, 0x0000001D, 0x0000483D, 0x00005B48, 0x0005008E, 0x0000001D,
|
||||
0x00004813, 0x0000483D, 0x0000092A, 0x00050051, 0x0000000D, 0x0000187D,
|
||||
0x00004BA6, 0x00000000, 0x00050051, 0x0000000D, 0x000035EF, 0x00004813,
|
||||
0x00000000, 0x00050050, 0x00000013, 0x00004B23, 0x0000187D, 0x000035EF,
|
||||
0x0006000C, 0x0000000B, 0x00002174, 0x00000001, 0x0000003A, 0x00004B23,
|
||||
0x00050051, 0x0000000D, 0x00005BC2, 0x00004BA6, 0x00000001, 0x00050051,
|
||||
0x0000000D, 0x000039AA, 0x00004813, 0x00000001, 0x00050050, 0x00000013,
|
||||
0x00004B24, 0x00005BC2, 0x000039AA, 0x0006000C, 0x0000000B, 0x00002175,
|
||||
0x00000001, 0x0000003A, 0x00004B24, 0x00050051, 0x0000000D, 0x00005BC3,
|
||||
0x00004BA6, 0x00000002, 0x00050051, 0x0000000D, 0x000039AB, 0x00004813,
|
||||
0x00000002, 0x00050050, 0x00000013, 0x00004B25, 0x00005BC3, 0x000039AB,
|
||||
0x0006000C, 0x0000000B, 0x00002176, 0x00000001, 0x0000003A, 0x00004B25,
|
||||
0x00050051, 0x0000000D, 0x00005BC4, 0x00004BA6, 0x00000003, 0x00050051,
|
||||
0x0000000D, 0x000039AC, 0x00004813, 0x00000003, 0x00050050, 0x00000013,
|
||||
0x00004B0E, 0x00005BC4, 0x000039AC, 0x0006000C, 0x0000000B, 0x000020EF,
|
||||
0x00000001, 0x0000003A, 0x00004B0E, 0x00070050, 0x00000017, 0x00003ABC,
|
||||
0x00002174, 0x00002175, 0x00002176, 0x000020EF, 0x00060041, 0x00000294,
|
||||
0x00004EBE, 0x0000140E, 0x00000A0B, 0x00003AC4, 0x0003003E, 0x00004EBE,
|
||||
0x00003ABC, 0x000200F9, 0x00004C7A, 0x000200F8, 0x00004C7A, 0x000100FD,
|
||||
0x00010038,
|
||||
};
|
753
src/xenia/gpu/shaders/bytecode/vulkan_spirv/texture_load_rgba16_unorm_float_scaled_cs.h
generated
Normal file
753
src/xenia/gpu/shaders/bytecode/vulkan_spirv/texture_load_rgba16_unorm_float_scaled_cs.h
generated
Normal file
|
@ -0,0 +1,753 @@
|
|||
// Generated with `xb buildshaders`.
|
||||
#if 0
|
||||
; SPIR-V
|
||||
; Version: 1.0
|
||||
; Generator: Khronos Glslang Reference Front End; 10
|
||||
; Bound: 25179
|
||||
; Schema: 0
|
||||
OpCapability Shader
|
||||
%1 = OpExtInstImport "GLSL.std.450"
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %5663 "main" %gl_GlobalInvocationID
|
||||
OpExecutionMode %5663 LocalSize 8 32 1
|
||||
OpMemberDecorate %_struct_1161 0 Offset 0
|
||||
OpMemberDecorate %_struct_1161 1 Offset 4
|
||||
OpMemberDecorate %_struct_1161 2 Offset 8
|
||||
OpMemberDecorate %_struct_1161 3 Offset 12
|
||||
OpMemberDecorate %_struct_1161 4 Offset 16
|
||||
OpMemberDecorate %_struct_1161 5 Offset 28
|
||||
OpMemberDecorate %_struct_1161 6 Offset 32
|
||||
OpMemberDecorate %_struct_1161 7 Offset 36
|
||||
OpDecorate %_struct_1161 Block
|
||||
OpDecorate %5245 DescriptorSet 2
|
||||
OpDecorate %5245 Binding 0
|
||||
OpDecorate %gl_GlobalInvocationID BuiltIn GlobalInvocationId
|
||||
OpDecorate %_runtimearr_v4uint ArrayStride 16
|
||||
OpMemberDecorate %_struct_1972 0 NonReadable
|
||||
OpMemberDecorate %_struct_1972 0 Offset 0
|
||||
OpDecorate %_struct_1972 BufferBlock
|
||||
OpDecorate %5134 DescriptorSet 0
|
||||
OpDecorate %5134 Binding 0
|
||||
OpDecorate %_runtimearr_v4uint_0 ArrayStride 16
|
||||
OpMemberDecorate %_struct_1973 0 NonWritable
|
||||
OpMemberDecorate %_struct_1973 0 Offset 0
|
||||
OpDecorate %_struct_1973 BufferBlock
|
||||
OpDecorate %4218 DescriptorSet 1
|
||||
OpDecorate %4218 Binding 0
|
||||
OpDecorate %gl_WorkGroupSize BuiltIn WorkgroupSize
|
||||
%void = OpTypeVoid
|
||||
%1282 = OpTypeFunction %void
|
||||
%uint = OpTypeInt 32 0
|
||||
%v4uint = OpTypeVector %uint 4
|
||||
%int = OpTypeInt 32 1
|
||||
%v2int = OpTypeVector %int 2
|
||||
%v3int = OpTypeVector %int 3
|
||||
%bool = OpTypeBool
|
||||
%v3uint = OpTypeVector %uint 3
|
||||
%v2uint = OpTypeVector %uint 2
|
||||
%float = OpTypeFloat 32
|
||||
%v4float = OpTypeVector %float 4
|
||||
%uint_65535 = OpConstant %uint 65535
|
||||
%float_1_52590219en05 = OpConstant %float 1.52590219e-05
|
||||
%uint_16 = OpConstant %uint 16
|
||||
%uint_0 = OpConstant %uint 0
|
||||
%v2float = OpTypeVector %float 2
|
||||
%uint_1 = OpConstant %uint 1
|
||||
%uint_2 = OpConstant %uint 2
|
||||
%uint_3 = OpConstant %uint 3
|
||||
%uint_16711935 = OpConstant %uint 16711935
|
||||
%uint_8 = OpConstant %uint 8
|
||||
%uint_4278255360 = OpConstant %uint 4278255360
|
||||
%int_5 = OpConstant %int 5
|
||||
%uint_5 = OpConstant %uint 5
|
||||
%int_7 = OpConstant %int 7
|
||||
%int_14 = OpConstant %int 14
|
||||
%int_2 = OpConstant %int 2
|
||||
%int_n16 = OpConstant %int -16
|
||||
%int_1 = OpConstant %int 1
|
||||
%int_15 = OpConstant %int 15
|
||||
%int_4 = OpConstant %int 4
|
||||
%int_n512 = OpConstant %int -512
|
||||
%int_3 = OpConstant %int 3
|
||||
%int_16 = OpConstant %int 16
|
||||
%int_448 = OpConstant %int 448
|
||||
%int_8 = OpConstant %int 8
|
||||
%int_6 = OpConstant %int 6
|
||||
%int_63 = OpConstant %int 63
|
||||
%uint_4 = OpConstant %uint 4
|
||||
%uint_6 = OpConstant %uint 6
|
||||
%int_268435455 = OpConstant %int 268435455
|
||||
%int_n2 = OpConstant %int -2
|
||||
%uint_32 = OpConstant %uint 32
|
||||
%_struct_1161 = OpTypeStruct %uint %uint %uint %uint %v3uint %uint %uint %uint
|
||||
%_ptr_Uniform__struct_1161 = OpTypePointer Uniform %_struct_1161
|
||||
%5245 = OpVariable %_ptr_Uniform__struct_1161 Uniform
|
||||
%int_0 = OpConstant %int 0
|
||||
%_ptr_Uniform_uint = OpTypePointer Uniform %uint
|
||||
%1915 = OpConstantComposite %v2uint %uint_4 %uint_6
|
||||
%_ptr_Uniform_v3uint = OpTypePointer Uniform %v3uint
|
||||
%_ptr_Input_v3uint = OpTypePointer Input %v3uint
|
||||
%gl_GlobalInvocationID = OpVariable %_ptr_Input_v3uint Input
|
||||
%2596 = OpConstantComposite %v3uint %uint_2 %uint_0 %uint_0
|
||||
%v2bool = OpTypeVector %bool 2
|
||||
%_runtimearr_v4uint = OpTypeRuntimeArray %v4uint
|
||||
%_struct_1972 = OpTypeStruct %_runtimearr_v4uint
|
||||
%_ptr_Uniform__struct_1972 = OpTypePointer Uniform %_struct_1972
|
||||
%5134 = OpVariable %_ptr_Uniform__struct_1972 Uniform
|
||||
%_runtimearr_v4uint_0 = OpTypeRuntimeArray %v4uint
|
||||
%_struct_1973 = OpTypeStruct %_runtimearr_v4uint_0
|
||||
%_ptr_Uniform__struct_1973 = OpTypePointer Uniform %_struct_1973
|
||||
%4218 = OpVariable %_ptr_Uniform__struct_1973 Uniform
|
||||
%_ptr_Uniform_v4uint = OpTypePointer Uniform %v4uint
|
||||
%gl_WorkGroupSize = OpConstantComposite %v3uint %uint_8 %uint_32 %uint_1
|
||||
%1870 = OpConstantComposite %v2uint %uint_3 %uint_3
|
||||
%uint_9 = OpConstant %uint 9
|
||||
%uint_10 = OpConstant %uint 10
|
||||
%2510 = OpConstantComposite %v4uint %uint_16711935 %uint_16711935 %uint_16711935 %uint_16711935
|
||||
%317 = OpConstantComposite %v4uint %uint_8 %uint_8 %uint_8 %uint_8
|
||||
%1838 = OpConstantComposite %v4uint %uint_4278255360 %uint_4278255360 %uint_4278255360 %uint_4278255360
|
||||
%749 = OpConstantComposite %v4uint %uint_16 %uint_16 %uint_16 %uint_16
|
||||
%850 = OpConstantComposite %v4uint %uint_65535 %uint_65535 %uint_65535 %uint_65535
|
||||
%5663 = OpFunction %void None %1282
|
||||
%15110 = OpLabel
|
||||
OpSelectionMerge %19578 None
|
||||
OpSwitch %uint_0 %15137
|
||||
%15137 = OpLabel
|
||||
%12591 = OpLoad %v3uint %gl_GlobalInvocationID
|
||||
%10229 = OpShiftLeftLogical %v3uint %12591 %2596
|
||||
%25178 = OpAccessChain %_ptr_Uniform_v3uint %5245 %int_4
|
||||
%22965 = OpLoad %v3uint %25178
|
||||
%18835 = OpVectorShuffle %v2uint %10229 %10229 0 1
|
||||
%6626 = OpVectorShuffle %v2uint %22965 %22965 0 1
|
||||
%17032 = OpUGreaterThanEqual %v2bool %18835 %6626
|
||||
%24679 = OpAny %bool %17032
|
||||
OpSelectionMerge %6282 DontFlatten
|
||||
OpBranchConditional %24679 %21992 %6282
|
||||
%21992 = OpLabel
|
||||
OpBranch %19578
|
||||
%6282 = OpLabel
|
||||
%6795 = OpBitcast %v3int %10229
|
||||
%18792 = OpAccessChain %_ptr_Uniform_uint %5245 %int_6
|
||||
%9788 = OpLoad %uint %18792
|
||||
%20376 = OpCompositeExtract %uint %22965 1
|
||||
%14692 = OpCompositeExtract %int %6795 0
|
||||
%22810 = OpIMul %int %14692 %int_8
|
||||
%6362 = OpCompositeExtract %int %6795 2
|
||||
%14505 = OpBitcast %int %20376
|
||||
%11279 = OpIMul %int %6362 %14505
|
||||
%17598 = OpCompositeExtract %int %6795 1
|
||||
%22228 = OpIAdd %int %11279 %17598
|
||||
%22405 = OpBitcast %int %9788
|
||||
%24535 = OpIMul %int %22228 %22405
|
||||
%7061 = OpIAdd %int %22810 %24535
|
||||
%19270 = OpBitcast %uint %7061
|
||||
%19460 = OpAccessChain %_ptr_Uniform_uint %5245 %int_5
|
||||
%22875 = OpLoad %uint %19460
|
||||
%8517 = OpIAdd %uint %19270 %22875
|
||||
%21670 = OpShiftRightLogical %uint %8517 %uint_4
|
||||
%18404 = OpAccessChain %_ptr_Uniform_uint %5245 %int_1
|
||||
%23432 = OpLoad %uint %18404
|
||||
%22700 = OpAccessChain %_ptr_Uniform_uint %5245 %int_0
|
||||
%20387 = OpLoad %uint %22700
|
||||
%22279 = OpBitwiseAnd %uint %20387 %uint_2
|
||||
%19223 = OpINotEqual %bool %22279 %uint_0
|
||||
%17247 = OpCompositeConstruct %v2uint %20387 %20387
|
||||
%22947 = OpShiftRightLogical %v2uint %17247 %1915
|
||||
%6551 = OpBitwiseAnd %v2uint %22947 %1870
|
||||
%18732 = OpAccessChain %_ptr_Uniform_uint %5245 %int_2
|
||||
%24236 = OpLoad %uint %18732
|
||||
%20458 = OpAccessChain %_ptr_Uniform_uint %5245 %int_3
|
||||
%22167 = OpLoad %uint %20458
|
||||
%18929 = OpCompositeExtract %uint %10229 0
|
||||
%6638 = OpShiftRightLogical %uint %18929 %uint_1
|
||||
%9988 = OpCompositeExtract %uint %10229 1
|
||||
%23563 = OpCompositeConstruct %v2uint %6638 %9988
|
||||
%8041 = OpUDiv %v2uint %23563 %6551
|
||||
%13932 = OpCompositeExtract %uint %8041 0
|
||||
%19789 = OpShiftLeftLogical %uint %13932 %uint_1
|
||||
%20905 = OpCompositeExtract %uint %8041 1
|
||||
%23022 = OpCompositeExtract %uint %10229 2
|
||||
%9417 = OpCompositeConstruct %v3uint %19789 %20905 %23022
|
||||
OpSelectionMerge %21313 DontFlatten
|
||||
OpBranchConditional %19223 %21373 %11737
|
||||
%21373 = OpLabel
|
||||
%10608 = OpBitcast %v3int %9417
|
||||
%17090 = OpCompositeExtract %int %10608 1
|
||||
%9469 = OpShiftRightArithmetic %int %17090 %int_4
|
||||
%10055 = OpCompositeExtract %int %10608 2
|
||||
%16476 = OpShiftRightArithmetic %int %10055 %int_2
|
||||
%23373 = OpShiftRightLogical %uint %22167 %uint_4
|
||||
%6314 = OpBitcast %int %23373
|
||||
%21281 = OpIMul %int %16476 %6314
|
||||
%15143 = OpIAdd %int %9469 %21281
|
||||
%9032 = OpShiftRightLogical %uint %24236 %uint_5
|
||||
%12427 = OpBitcast %int %9032
|
||||
%10360 = OpIMul %int %15143 %12427
|
||||
%25154 = OpCompositeExtract %int %10608 0
|
||||
%20423 = OpShiftRightArithmetic %int %25154 %int_5
|
||||
%18940 = OpIAdd %int %20423 %10360
|
||||
%8797 = OpShiftLeftLogical %int %18940 %uint_9
|
||||
%11510 = OpBitwiseAnd %int %8797 %int_268435455
|
||||
%18938 = OpShiftLeftLogical %int %11510 %int_1
|
||||
%19768 = OpBitwiseAnd %int %25154 %int_7
|
||||
%12600 = OpBitwiseAnd %int %17090 %int_6
|
||||
%17741 = OpShiftLeftLogical %int %12600 %int_2
|
||||
%17227 = OpIAdd %int %19768 %17741
|
||||
%7048 = OpShiftLeftLogical %int %17227 %uint_9
|
||||
%24035 = OpShiftRightArithmetic %int %7048 %int_6
|
||||
%8725 = OpShiftRightArithmetic %int %17090 %int_3
|
||||
%13731 = OpIAdd %int %8725 %16476
|
||||
%23052 = OpBitwiseAnd %int %13731 %int_1
|
||||
%16658 = OpShiftRightArithmetic %int %25154 %int_3
|
||||
%18794 = OpShiftLeftLogical %int %23052 %int_1
|
||||
%13501 = OpIAdd %int %16658 %18794
|
||||
%19165 = OpBitwiseAnd %int %13501 %int_3
|
||||
%21578 = OpShiftLeftLogical %int %19165 %int_1
|
||||
%15435 = OpIAdd %int %23052 %21578
|
||||
%13150 = OpBitwiseAnd %int %24035 %int_n16
|
||||
%20336 = OpIAdd %int %18938 %13150
|
||||
%23345 = OpShiftLeftLogical %int %20336 %int_1
|
||||
%23274 = OpBitwiseAnd %int %24035 %int_15
|
||||
%10332 = OpIAdd %int %23345 %23274
|
||||
%18356 = OpBitwiseAnd %int %10055 %int_3
|
||||
%21579 = OpShiftLeftLogical %int %18356 %uint_9
|
||||
%16727 = OpIAdd %int %10332 %21579
|
||||
%19166 = OpBitwiseAnd %int %17090 %int_1
|
||||
%21580 = OpShiftLeftLogical %int %19166 %int_4
|
||||
%16728 = OpIAdd %int %16727 %21580
|
||||
%20438 = OpBitwiseAnd %int %15435 %int_1
|
||||
%9987 = OpShiftLeftLogical %int %20438 %int_3
|
||||
%13106 = OpShiftRightArithmetic %int %16728 %int_6
|
||||
%14038 = OpBitwiseAnd %int %13106 %int_7
|
||||
%13330 = OpIAdd %int %9987 %14038
|
||||
%23346 = OpShiftLeftLogical %int %13330 %int_3
|
||||
%23217 = OpBitwiseAnd %int %15435 %int_n2
|
||||
%10908 = OpIAdd %int %23346 %23217
|
||||
%23347 = OpShiftLeftLogical %int %10908 %int_2
|
||||
%23218 = OpBitwiseAnd %int %16728 %int_n512
|
||||
%10909 = OpIAdd %int %23347 %23218
|
||||
%23348 = OpShiftLeftLogical %int %10909 %int_3
|
||||
%21849 = OpBitwiseAnd %int %16728 %int_63
|
||||
%24314 = OpIAdd %int %23348 %21849
|
||||
%22127 = OpBitcast %uint %24314
|
||||
OpBranch %21313
|
||||
%11737 = OpLabel
|
||||
%9761 = OpVectorShuffle %v2uint %9417 %9417 0 1
|
||||
%22991 = OpBitcast %v2int %9761
|
||||
%6403 = OpCompositeExtract %int %22991 0
|
||||
%9470 = OpShiftRightArithmetic %int %6403 %int_5
|
||||
%10056 = OpCompositeExtract %int %22991 1
|
||||
%16477 = OpShiftRightArithmetic %int %10056 %int_5
|
||||
%23374 = OpShiftRightLogical %uint %24236 %uint_5
|
||||
%6315 = OpBitcast %int %23374
|
||||
%21319 = OpIMul %int %16477 %6315
|
||||
%16222 = OpIAdd %int %9470 %21319
|
||||
%19086 = OpShiftLeftLogical %int %16222 %uint_10
|
||||
%10934 = OpBitwiseAnd %int %6403 %int_7
|
||||
%12601 = OpBitwiseAnd %int %10056 %int_14
|
||||
%17742 = OpShiftLeftLogical %int %12601 %int_2
|
||||
%17303 = OpIAdd %int %10934 %17742
|
||||
%6375 = OpShiftLeftLogical %int %17303 %uint_3
|
||||
%10161 = OpBitwiseAnd %int %6375 %int_n16
|
||||
%12150 = OpShiftLeftLogical %int %10161 %int_1
|
||||
%15436 = OpIAdd %int %19086 %12150
|
||||
%13207 = OpBitwiseAnd %int %6375 %int_15
|
||||
%19760 = OpIAdd %int %15436 %13207
|
||||
%18357 = OpBitwiseAnd %int %10056 %int_1
|
||||
%21581 = OpShiftLeftLogical %int %18357 %int_4
|
||||
%16729 = OpIAdd %int %19760 %21581
|
||||
%20514 = OpBitwiseAnd %int %16729 %int_n512
|
||||
%9238 = OpShiftLeftLogical %int %20514 %int_3
|
||||
%18995 = OpBitwiseAnd %int %10056 %int_16
|
||||
%12151 = OpShiftLeftLogical %int %18995 %int_7
|
||||
%16730 = OpIAdd %int %9238 %12151
|
||||
%19167 = OpBitwiseAnd %int %16729 %int_448
|
||||
%21582 = OpShiftLeftLogical %int %19167 %int_2
|
||||
%16708 = OpIAdd %int %16730 %21582
|
||||
%20611 = OpBitwiseAnd %int %10056 %int_8
|
||||
%16831 = OpShiftRightArithmetic %int %20611 %int_2
|
||||
%7916 = OpShiftRightArithmetic %int %6403 %int_3
|
||||
%13750 = OpIAdd %int %16831 %7916
|
||||
%21587 = OpBitwiseAnd %int %13750 %int_3
|
||||
%21583 = OpShiftLeftLogical %int %21587 %int_6
|
||||
%15437 = OpIAdd %int %16708 %21583
|
||||
%11782 = OpBitwiseAnd %int %16729 %int_63
|
||||
%14671 = OpIAdd %int %15437 %11782
|
||||
%22128 = OpBitcast %uint %14671
|
||||
OpBranch %21313
|
||||
%21313 = OpLabel
|
||||
%9468 = OpPhi %uint %22127 %21373 %22128 %11737
|
||||
%16296 = OpIMul %v2uint %8041 %6551
|
||||
%15292 = OpISub %v2uint %23563 %16296
|
||||
%7303 = OpCompositeExtract %uint %6551 0
|
||||
%22882 = OpCompositeExtract %uint %6551 1
|
||||
%13170 = OpIMul %uint %7303 %22882
|
||||
%15520 = OpIMul %uint %9468 %13170
|
||||
%16084 = OpCompositeExtract %uint %15292 0
|
||||
%15890 = OpIMul %uint %16084 %22882
|
||||
%6886 = OpCompositeExtract %uint %15292 1
|
||||
%11045 = OpIAdd %uint %15890 %6886
|
||||
%24733 = OpShiftLeftLogical %uint %11045 %uint_1
|
||||
%23219 = OpBitwiseAnd %uint %18929 %uint_1
|
||||
%9559 = OpIAdd %uint %24733 %23219
|
||||
%16557 = OpShiftLeftLogical %uint %9559 %uint_3
|
||||
%20138 = OpIAdd %uint %15520 %16557
|
||||
%17724 = OpIAdd %uint %23432 %20138
|
||||
%14040 = OpShiftRightLogical %uint %17724 %uint_4
|
||||
%11766 = OpShiftRightLogical %uint %20387 %uint_2
|
||||
%8394 = OpBitwiseAnd %uint %11766 %uint_3
|
||||
%20727 = OpAccessChain %_ptr_Uniform_v4uint %4218 %int_0 %14040
|
||||
%8142 = OpLoad %v4uint %20727
|
||||
%13760 = OpIEqual %bool %8394 %uint_1
|
||||
%21366 = OpIEqual %bool %8394 %uint_2
|
||||
%22150 = OpLogicalOr %bool %13760 %21366
|
||||
OpSelectionMerge %13411 None
|
||||
OpBranchConditional %22150 %10583 %13411
|
||||
%10583 = OpLabel
|
||||
%18271 = OpBitwiseAnd %v4uint %8142 %2510
|
||||
%9425 = OpShiftLeftLogical %v4uint %18271 %317
|
||||
%20652 = OpBitwiseAnd %v4uint %8142 %1838
|
||||
%17549 = OpShiftRightLogical %v4uint %20652 %317
|
||||
%16376 = OpBitwiseOr %v4uint %9425 %17549
|
||||
OpBranch %13411
|
||||
%13411 = OpLabel
|
||||
%22649 = OpPhi %v4uint %8142 %21313 %16376 %10583
|
||||
%19638 = OpIEqual %bool %8394 %uint_3
|
||||
%15139 = OpLogicalOr %bool %21366 %19638
|
||||
OpSelectionMerge %13962 None
|
||||
OpBranchConditional %15139 %11064 %13962
|
||||
%11064 = OpLabel
|
||||
%24087 = OpShiftLeftLogical %v4uint %22649 %749
|
||||
%15335 = OpShiftRightLogical %v4uint %22649 %749
|
||||
%10728 = OpBitwiseOr %v4uint %24087 %15335
|
||||
OpBranch %13962
|
||||
%13962 = OpLabel
|
||||
%16606 = OpPhi %v4uint %22649 %13411 %10728 %11064
|
||||
%18240 = OpBitwiseAnd %v4uint %16606 %850
|
||||
%9137 = OpConvertUToF %v4float %18240
|
||||
%19365 = OpVectorTimesScalar %v4float %9137 %float_1_52590219en05
|
||||
%23367 = OpShiftRightLogical %v4uint %16606 %749
|
||||
%18492 = OpConvertUToF %v4float %23367
|
||||
%18450 = OpVectorTimesScalar %v4float %18492 %float_1_52590219en05
|
||||
%6268 = OpCompositeExtract %float %19365 0
|
||||
%13806 = OpCompositeExtract %float %18450 0
|
||||
%19232 = OpCompositeConstruct %v2float %6268 %13806
|
||||
%8561 = OpExtInst %uint %1 PackHalf2x16 %19232
|
||||
%23487 = OpCompositeExtract %float %19365 1
|
||||
%14759 = OpCompositeExtract %float %18450 1
|
||||
%19233 = OpCompositeConstruct %v2float %23487 %14759
|
||||
%8562 = OpExtInst %uint %1 PackHalf2x16 %19233
|
||||
%23488 = OpCompositeExtract %float %19365 2
|
||||
%14760 = OpCompositeExtract %float %18450 2
|
||||
%19234 = OpCompositeConstruct %v2float %23488 %14760
|
||||
%8563 = OpExtInst %uint %1 PackHalf2x16 %19234
|
||||
%23489 = OpCompositeExtract %float %19365 3
|
||||
%14761 = OpCompositeExtract %float %18450 3
|
||||
%19213 = OpCompositeConstruct %v2float %23489 %14761
|
||||
%8430 = OpExtInst %uint %1 PackHalf2x16 %19213
|
||||
%15035 = OpCompositeConstruct %v4uint %8561 %8562 %8563 %8430
|
||||
%17859 = OpAccessChain %_ptr_Uniform_v4uint %5134 %int_0 %21670
|
||||
OpStore %17859 %15035
|
||||
%15532 = OpIAdd %uint %21670 %int_1
|
||||
%6417 = OpUGreaterThan %bool %7303 %uint_1
|
||||
OpSelectionMerge %24764 DontFlatten
|
||||
OpBranchConditional %6417 %20612 %20628
|
||||
%20612 = OpLabel
|
||||
%13975 = OpUDiv %uint %6638 %7303
|
||||
%9086 = OpIMul %uint %13975 %7303
|
||||
%12657 = OpISub %uint %6638 %9086
|
||||
%9511 = OpIAdd %uint %12657 %uint_1
|
||||
%13375 = OpIEqual %bool %9511 %7303
|
||||
OpSelectionMerge %7917 None
|
||||
OpBranchConditional %13375 %22174 %8593
|
||||
%22174 = OpLabel
|
||||
%19289 = OpIMul %uint %uint_32 %7303
|
||||
%21519 = OpShiftLeftLogical %uint %12657 %uint_4
|
||||
%18756 = OpISub %uint %19289 %21519
|
||||
OpBranch %7917
|
||||
%8593 = OpLabel
|
||||
OpBranch %7917
|
||||
%7917 = OpLabel
|
||||
%10540 = OpPhi %uint %18756 %22174 %uint_16 %8593
|
||||
OpBranch %24764
|
||||
%20628 = OpLabel
|
||||
OpBranch %24764
|
||||
%24764 = OpLabel
|
||||
%10684 = OpPhi %uint %10540 %7917 %uint_32 %20628
|
||||
%18731 = OpIMul %uint %10684 %22882
|
||||
%16493 = OpShiftRightLogical %uint %18731 %uint_4
|
||||
%13163 = OpIAdd %uint %14040 %16493
|
||||
%22298 = OpAccessChain %_ptr_Uniform_v4uint %4218 %int_0 %13163
|
||||
%6578 = OpLoad %v4uint %22298
|
||||
OpSelectionMerge %14874 None
|
||||
OpBranchConditional %22150 %10584 %14874
|
||||
%10584 = OpLabel
|
||||
%18272 = OpBitwiseAnd %v4uint %6578 %2510
|
||||
%9426 = OpShiftLeftLogical %v4uint %18272 %317
|
||||
%20653 = OpBitwiseAnd %v4uint %6578 %1838
|
||||
%17550 = OpShiftRightLogical %v4uint %20653 %317
|
||||
%16377 = OpBitwiseOr %v4uint %9426 %17550
|
||||
OpBranch %14874
|
||||
%14874 = OpLabel
|
||||
%10924 = OpPhi %v4uint %6578 %24764 %16377 %10584
|
||||
OpSelectionMerge %13963 None
|
||||
OpBranchConditional %15139 %11065 %13963
|
||||
%11065 = OpLabel
|
||||
%24088 = OpShiftLeftLogical %v4uint %10924 %749
|
||||
%15336 = OpShiftRightLogical %v4uint %10924 %749
|
||||
%10729 = OpBitwiseOr %v4uint %24088 %15336
|
||||
OpBranch %13963
|
||||
%13963 = OpLabel
|
||||
%16607 = OpPhi %v4uint %10924 %14874 %10729 %11065
|
||||
%18241 = OpBitwiseAnd %v4uint %16607 %850
|
||||
%9138 = OpConvertUToF %v4float %18241
|
||||
%19366 = OpVectorTimesScalar %v4float %9138 %float_1_52590219en05
|
||||
%23368 = OpShiftRightLogical %v4uint %16607 %749
|
||||
%18493 = OpConvertUToF %v4float %23368
|
||||
%18451 = OpVectorTimesScalar %v4float %18493 %float_1_52590219en05
|
||||
%6269 = OpCompositeExtract %float %19366 0
|
||||
%13807 = OpCompositeExtract %float %18451 0
|
||||
%19235 = OpCompositeConstruct %v2float %6269 %13807
|
||||
%8564 = OpExtInst %uint %1 PackHalf2x16 %19235
|
||||
%23490 = OpCompositeExtract %float %19366 1
|
||||
%14762 = OpCompositeExtract %float %18451 1
|
||||
%19236 = OpCompositeConstruct %v2float %23490 %14762
|
||||
%8565 = OpExtInst %uint %1 PackHalf2x16 %19236
|
||||
%23491 = OpCompositeExtract %float %19366 2
|
||||
%14763 = OpCompositeExtract %float %18451 2
|
||||
%19237 = OpCompositeConstruct %v2float %23491 %14763
|
||||
%8566 = OpExtInst %uint %1 PackHalf2x16 %19237
|
||||
%23492 = OpCompositeExtract %float %19366 3
|
||||
%14764 = OpCompositeExtract %float %18451 3
|
||||
%19214 = OpCompositeConstruct %v2float %23492 %14764
|
||||
%8431 = OpExtInst %uint %1 PackHalf2x16 %19214
|
||||
%15036 = OpCompositeConstruct %v4uint %8564 %8565 %8566 %8431
|
||||
%20158 = OpAccessChain %_ptr_Uniform_v4uint %5134 %int_0 %15532
|
||||
OpStore %20158 %15036
|
||||
OpBranch %19578
|
||||
%19578 = OpLabel
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
#endif
|
||||
|
||||
const uint32_t texture_load_rgba16_unorm_float_scaled_cs[] = {
|
||||
0x07230203, 0x00010000, 0x0008000A, 0x0000625B, 0x00000000, 0x00020011,
|
||||
0x00000001, 0x0006000B, 0x00000001, 0x4C534C47, 0x6474732E, 0x3035342E,
|
||||
0x00000000, 0x0003000E, 0x00000000, 0x00000001, 0x0006000F, 0x00000005,
|
||||
0x0000161F, 0x6E69616D, 0x00000000, 0x00000F48, 0x00060010, 0x0000161F,
|
||||
0x00000011, 0x00000008, 0x00000020, 0x00000001, 0x00050048, 0x00000489,
|
||||
0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x00000489, 0x00000001,
|
||||
0x00000023, 0x00000004, 0x00050048, 0x00000489, 0x00000002, 0x00000023,
|
||||
0x00000008, 0x00050048, 0x00000489, 0x00000003, 0x00000023, 0x0000000C,
|
||||
0x00050048, 0x00000489, 0x00000004, 0x00000023, 0x00000010, 0x00050048,
|
||||
0x00000489, 0x00000005, 0x00000023, 0x0000001C, 0x00050048, 0x00000489,
|
||||
0x00000006, 0x00000023, 0x00000020, 0x00050048, 0x00000489, 0x00000007,
|
||||
0x00000023, 0x00000024, 0x00030047, 0x00000489, 0x00000002, 0x00040047,
|
||||
0x0000147D, 0x00000022, 0x00000002, 0x00040047, 0x0000147D, 0x00000021,
|
||||
0x00000000, 0x00040047, 0x00000F48, 0x0000000B, 0x0000001C, 0x00040047,
|
||||
0x000007DC, 0x00000006, 0x00000010, 0x00040048, 0x000007B4, 0x00000000,
|
||||
0x00000019, 0x00050048, 0x000007B4, 0x00000000, 0x00000023, 0x00000000,
|
||||
0x00030047, 0x000007B4, 0x00000003, 0x00040047, 0x0000140E, 0x00000022,
|
||||
0x00000000, 0x00040047, 0x0000140E, 0x00000021, 0x00000000, 0x00040047,
|
||||
0x000007DD, 0x00000006, 0x00000010, 0x00040048, 0x000007B5, 0x00000000,
|
||||
0x00000018, 0x00050048, 0x000007B5, 0x00000000, 0x00000023, 0x00000000,
|
||||
0x00030047, 0x000007B5, 0x00000003, 0x00040047, 0x0000107A, 0x00000022,
|
||||
0x00000001, 0x00040047, 0x0000107A, 0x00000021, 0x00000000, 0x00040047,
|
||||
0x00000024, 0x0000000B, 0x00000019, 0x00020013, 0x00000008, 0x00030021,
|
||||
0x00000502, 0x00000008, 0x00040015, 0x0000000B, 0x00000020, 0x00000000,
|
||||
0x00040017, 0x00000017, 0x0000000B, 0x00000004, 0x00040015, 0x0000000C,
|
||||
0x00000020, 0x00000001, 0x00040017, 0x00000012, 0x0000000C, 0x00000002,
|
||||
0x00040017, 0x00000016, 0x0000000C, 0x00000003, 0x00020014, 0x00000009,
|
||||
0x00040017, 0x00000014, 0x0000000B, 0x00000003, 0x00040017, 0x00000011,
|
||||
0x0000000B, 0x00000002, 0x00030016, 0x0000000D, 0x00000020, 0x00040017,
|
||||
0x0000001D, 0x0000000D, 0x00000004, 0x0004002B, 0x0000000B, 0x000001C1,
|
||||
0x0000FFFF, 0x0004002B, 0x0000000D, 0x0000092A, 0x37800080, 0x0004002B,
|
||||
0x0000000B, 0x00000A3A, 0x00000010, 0x0004002B, 0x0000000B, 0x00000A0A,
|
||||
0x00000000, 0x00040017, 0x00000013, 0x0000000D, 0x00000002, 0x0004002B,
|
||||
0x0000000B, 0x00000A0D, 0x00000001, 0x0004002B, 0x0000000B, 0x00000A10,
|
||||
0x00000002, 0x0004002B, 0x0000000B, 0x00000A13, 0x00000003, 0x0004002B,
|
||||
0x0000000B, 0x000008A6, 0x00FF00FF, 0x0004002B, 0x0000000B, 0x00000A22,
|
||||
0x00000008, 0x0004002B, 0x0000000B, 0x000005FD, 0xFF00FF00, 0x0004002B,
|
||||
0x0000000C, 0x00000A1A, 0x00000005, 0x0004002B, 0x0000000B, 0x00000A19,
|
||||
0x00000005, 0x0004002B, 0x0000000C, 0x00000A20, 0x00000007, 0x0004002B,
|
||||
0x0000000C, 0x00000A35, 0x0000000E, 0x0004002B, 0x0000000C, 0x00000A11,
|
||||
0x00000002, 0x0004002B, 0x0000000C, 0x000009DB, 0xFFFFFFF0, 0x0004002B,
|
||||
0x0000000C, 0x00000A0E, 0x00000001, 0x0004002B, 0x0000000C, 0x00000A38,
|
||||
0x0000000F, 0x0004002B, 0x0000000C, 0x00000A17, 0x00000004, 0x0004002B,
|
||||
0x0000000C, 0x0000040B, 0xFFFFFE00, 0x0004002B, 0x0000000C, 0x00000A14,
|
||||
0x00000003, 0x0004002B, 0x0000000C, 0x00000A3B, 0x00000010, 0x0004002B,
|
||||
0x0000000C, 0x00000388, 0x000001C0, 0x0004002B, 0x0000000C, 0x00000A23,
|
||||
0x00000008, 0x0004002B, 0x0000000C, 0x00000A1D, 0x00000006, 0x0004002B,
|
||||
0x0000000C, 0x00000AC8, 0x0000003F, 0x0004002B, 0x0000000B, 0x00000A16,
|
||||
0x00000004, 0x0004002B, 0x0000000B, 0x00000A1C, 0x00000006, 0x0004002B,
|
||||
0x0000000C, 0x0000078B, 0x0FFFFFFF, 0x0004002B, 0x0000000C, 0x00000A05,
|
||||
0xFFFFFFFE, 0x0004002B, 0x0000000B, 0x00000A6A, 0x00000020, 0x000A001E,
|
||||
0x00000489, 0x0000000B, 0x0000000B, 0x0000000B, 0x0000000B, 0x00000014,
|
||||
0x0000000B, 0x0000000B, 0x0000000B, 0x00040020, 0x00000706, 0x00000002,
|
||||
0x00000489, 0x0004003B, 0x00000706, 0x0000147D, 0x00000002, 0x0004002B,
|
||||
0x0000000C, 0x00000A0B, 0x00000000, 0x00040020, 0x00000288, 0x00000002,
|
||||
0x0000000B, 0x0005002C, 0x00000011, 0x0000077B, 0x00000A16, 0x00000A1C,
|
||||
0x00040020, 0x00000291, 0x00000002, 0x00000014, 0x00040020, 0x00000292,
|
||||
0x00000001, 0x00000014, 0x0004003B, 0x00000292, 0x00000F48, 0x00000001,
|
||||
0x0006002C, 0x00000014, 0x00000A24, 0x00000A10, 0x00000A0A, 0x00000A0A,
|
||||
0x00040017, 0x0000000F, 0x00000009, 0x00000002, 0x0003001D, 0x000007DC,
|
||||
0x00000017, 0x0003001E, 0x000007B4, 0x000007DC, 0x00040020, 0x00000A31,
|
||||
0x00000002, 0x000007B4, 0x0004003B, 0x00000A31, 0x0000140E, 0x00000002,
|
||||
0x0003001D, 0x000007DD, 0x00000017, 0x0003001E, 0x000007B5, 0x000007DD,
|
||||
0x00040020, 0x00000A32, 0x00000002, 0x000007B5, 0x0004003B, 0x00000A32,
|
||||
0x0000107A, 0x00000002, 0x00040020, 0x00000294, 0x00000002, 0x00000017,
|
||||
0x0006002C, 0x00000014, 0x00000024, 0x00000A22, 0x00000A6A, 0x00000A0D,
|
||||
0x0005002C, 0x00000011, 0x0000074E, 0x00000A13, 0x00000A13, 0x0004002B,
|
||||
0x0000000B, 0x00000A25, 0x00000009, 0x0004002B, 0x0000000B, 0x00000A28,
|
||||
0x0000000A, 0x0007002C, 0x00000017, 0x000009CE, 0x000008A6, 0x000008A6,
|
||||
0x000008A6, 0x000008A6, 0x0007002C, 0x00000017, 0x0000013D, 0x00000A22,
|
||||
0x00000A22, 0x00000A22, 0x00000A22, 0x0007002C, 0x00000017, 0x0000072E,
|
||||
0x000005FD, 0x000005FD, 0x000005FD, 0x000005FD, 0x0007002C, 0x00000017,
|
||||
0x000002ED, 0x00000A3A, 0x00000A3A, 0x00000A3A, 0x00000A3A, 0x0007002C,
|
||||
0x00000017, 0x00000352, 0x000001C1, 0x000001C1, 0x000001C1, 0x000001C1,
|
||||
0x00050036, 0x00000008, 0x0000161F, 0x00000000, 0x00000502, 0x000200F8,
|
||||
0x00003B06, 0x000300F7, 0x00004C7A, 0x00000000, 0x000300FB, 0x00000A0A,
|
||||
0x00003B21, 0x000200F8, 0x00003B21, 0x0004003D, 0x00000014, 0x0000312F,
|
||||
0x00000F48, 0x000500C4, 0x00000014, 0x000027F5, 0x0000312F, 0x00000A24,
|
||||
0x00050041, 0x00000291, 0x0000625A, 0x0000147D, 0x00000A17, 0x0004003D,
|
||||
0x00000014, 0x000059B5, 0x0000625A, 0x0007004F, 0x00000011, 0x00004993,
|
||||
0x000027F5, 0x000027F5, 0x00000000, 0x00000001, 0x0007004F, 0x00000011,
|
||||
0x000019E2, 0x000059B5, 0x000059B5, 0x00000000, 0x00000001, 0x000500AE,
|
||||
0x0000000F, 0x00004288, 0x00004993, 0x000019E2, 0x0004009A, 0x00000009,
|
||||
0x00006067, 0x00004288, 0x000300F7, 0x0000188A, 0x00000002, 0x000400FA,
|
||||
0x00006067, 0x000055E8, 0x0000188A, 0x000200F8, 0x000055E8, 0x000200F9,
|
||||
0x00004C7A, 0x000200F8, 0x0000188A, 0x0004007C, 0x00000016, 0x00001A8B,
|
||||
0x000027F5, 0x00050041, 0x00000288, 0x00004968, 0x0000147D, 0x00000A1D,
|
||||
0x0004003D, 0x0000000B, 0x0000263C, 0x00004968, 0x00050051, 0x0000000B,
|
||||
0x00004F98, 0x000059B5, 0x00000001, 0x00050051, 0x0000000C, 0x00003964,
|
||||
0x00001A8B, 0x00000000, 0x00050084, 0x0000000C, 0x0000591A, 0x00003964,
|
||||
0x00000A23, 0x00050051, 0x0000000C, 0x000018DA, 0x00001A8B, 0x00000002,
|
||||
0x0004007C, 0x0000000C, 0x000038A9, 0x00004F98, 0x00050084, 0x0000000C,
|
||||
0x00002C0F, 0x000018DA, 0x000038A9, 0x00050051, 0x0000000C, 0x000044BE,
|
||||
0x00001A8B, 0x00000001, 0x00050080, 0x0000000C, 0x000056D4, 0x00002C0F,
|
||||
0x000044BE, 0x0004007C, 0x0000000C, 0x00005785, 0x0000263C, 0x00050084,
|
||||
0x0000000C, 0x00005FD7, 0x000056D4, 0x00005785, 0x00050080, 0x0000000C,
|
||||
0x00001B95, 0x0000591A, 0x00005FD7, 0x0004007C, 0x0000000B, 0x00004B46,
|
||||
0x00001B95, 0x00050041, 0x00000288, 0x00004C04, 0x0000147D, 0x00000A1A,
|
||||
0x0004003D, 0x0000000B, 0x0000595B, 0x00004C04, 0x00050080, 0x0000000B,
|
||||
0x00002145, 0x00004B46, 0x0000595B, 0x000500C2, 0x0000000B, 0x000054A6,
|
||||
0x00002145, 0x00000A16, 0x00050041, 0x00000288, 0x000047E4, 0x0000147D,
|
||||
0x00000A0E, 0x0004003D, 0x0000000B, 0x00005B88, 0x000047E4, 0x00050041,
|
||||
0x00000288, 0x000058AC, 0x0000147D, 0x00000A0B, 0x0004003D, 0x0000000B,
|
||||
0x00004FA3, 0x000058AC, 0x000500C7, 0x0000000B, 0x00005707, 0x00004FA3,
|
||||
0x00000A10, 0x000500AB, 0x00000009, 0x00004B17, 0x00005707, 0x00000A0A,
|
||||
0x00050050, 0x00000011, 0x0000435F, 0x00004FA3, 0x00004FA3, 0x000500C2,
|
||||
0x00000011, 0x000059A3, 0x0000435F, 0x0000077B, 0x000500C7, 0x00000011,
|
||||
0x00001997, 0x000059A3, 0x0000074E, 0x00050041, 0x00000288, 0x0000492C,
|
||||
0x0000147D, 0x00000A11, 0x0004003D, 0x0000000B, 0x00005EAC, 0x0000492C,
|
||||
0x00050041, 0x00000288, 0x00004FEA, 0x0000147D, 0x00000A14, 0x0004003D,
|
||||
0x0000000B, 0x00005697, 0x00004FEA, 0x00050051, 0x0000000B, 0x000049F1,
|
||||
0x000027F5, 0x00000000, 0x000500C2, 0x0000000B, 0x000019EE, 0x000049F1,
|
||||
0x00000A0D, 0x00050051, 0x0000000B, 0x00002704, 0x000027F5, 0x00000001,
|
||||
0x00050050, 0x00000011, 0x00005C0B, 0x000019EE, 0x00002704, 0x00050086,
|
||||
0x00000011, 0x00001F69, 0x00005C0B, 0x00001997, 0x00050051, 0x0000000B,
|
||||
0x0000366C, 0x00001F69, 0x00000000, 0x000500C4, 0x0000000B, 0x00004D4D,
|
||||
0x0000366C, 0x00000A0D, 0x00050051, 0x0000000B, 0x000051A9, 0x00001F69,
|
||||
0x00000001, 0x00050051, 0x0000000B, 0x000059EE, 0x000027F5, 0x00000002,
|
||||
0x00060050, 0x00000014, 0x000024C9, 0x00004D4D, 0x000051A9, 0x000059EE,
|
||||
0x000300F7, 0x00005341, 0x00000002, 0x000400FA, 0x00004B17, 0x0000537D,
|
||||
0x00002DD9, 0x000200F8, 0x0000537D, 0x0004007C, 0x00000016, 0x00002970,
|
||||
0x000024C9, 0x00050051, 0x0000000C, 0x000042C2, 0x00002970, 0x00000001,
|
||||
0x000500C3, 0x0000000C, 0x000024FD, 0x000042C2, 0x00000A17, 0x00050051,
|
||||
0x0000000C, 0x00002747, 0x00002970, 0x00000002, 0x000500C3, 0x0000000C,
|
||||
0x0000405C, 0x00002747, 0x00000A11, 0x000500C2, 0x0000000B, 0x00005B4D,
|
||||
0x00005697, 0x00000A16, 0x0004007C, 0x0000000C, 0x000018AA, 0x00005B4D,
|
||||
0x00050084, 0x0000000C, 0x00005321, 0x0000405C, 0x000018AA, 0x00050080,
|
||||
0x0000000C, 0x00003B27, 0x000024FD, 0x00005321, 0x000500C2, 0x0000000B,
|
||||
0x00002348, 0x00005EAC, 0x00000A19, 0x0004007C, 0x0000000C, 0x0000308B,
|
||||
0x00002348, 0x00050084, 0x0000000C, 0x00002878, 0x00003B27, 0x0000308B,
|
||||
0x00050051, 0x0000000C, 0x00006242, 0x00002970, 0x00000000, 0x000500C3,
|
||||
0x0000000C, 0x00004FC7, 0x00006242, 0x00000A1A, 0x00050080, 0x0000000C,
|
||||
0x000049FC, 0x00004FC7, 0x00002878, 0x000500C4, 0x0000000C, 0x0000225D,
|
||||
0x000049FC, 0x00000A25, 0x000500C7, 0x0000000C, 0x00002CF6, 0x0000225D,
|
||||
0x0000078B, 0x000500C4, 0x0000000C, 0x000049FA, 0x00002CF6, 0x00000A0E,
|
||||
0x000500C7, 0x0000000C, 0x00004D38, 0x00006242, 0x00000A20, 0x000500C7,
|
||||
0x0000000C, 0x00003138, 0x000042C2, 0x00000A1D, 0x000500C4, 0x0000000C,
|
||||
0x0000454D, 0x00003138, 0x00000A11, 0x00050080, 0x0000000C, 0x0000434B,
|
||||
0x00004D38, 0x0000454D, 0x000500C4, 0x0000000C, 0x00001B88, 0x0000434B,
|
||||
0x00000A25, 0x000500C3, 0x0000000C, 0x00005DE3, 0x00001B88, 0x00000A1D,
|
||||
0x000500C3, 0x0000000C, 0x00002215, 0x000042C2, 0x00000A14, 0x00050080,
|
||||
0x0000000C, 0x000035A3, 0x00002215, 0x0000405C, 0x000500C7, 0x0000000C,
|
||||
0x00005A0C, 0x000035A3, 0x00000A0E, 0x000500C3, 0x0000000C, 0x00004112,
|
||||
0x00006242, 0x00000A14, 0x000500C4, 0x0000000C, 0x0000496A, 0x00005A0C,
|
||||
0x00000A0E, 0x00050080, 0x0000000C, 0x000034BD, 0x00004112, 0x0000496A,
|
||||
0x000500C7, 0x0000000C, 0x00004ADD, 0x000034BD, 0x00000A14, 0x000500C4,
|
||||
0x0000000C, 0x0000544A, 0x00004ADD, 0x00000A0E, 0x00050080, 0x0000000C,
|
||||
0x00003C4B, 0x00005A0C, 0x0000544A, 0x000500C7, 0x0000000C, 0x0000335E,
|
||||
0x00005DE3, 0x000009DB, 0x00050080, 0x0000000C, 0x00004F70, 0x000049FA,
|
||||
0x0000335E, 0x000500C4, 0x0000000C, 0x00005B31, 0x00004F70, 0x00000A0E,
|
||||
0x000500C7, 0x0000000C, 0x00005AEA, 0x00005DE3, 0x00000A38, 0x00050080,
|
||||
0x0000000C, 0x0000285C, 0x00005B31, 0x00005AEA, 0x000500C7, 0x0000000C,
|
||||
0x000047B4, 0x00002747, 0x00000A14, 0x000500C4, 0x0000000C, 0x0000544B,
|
||||
0x000047B4, 0x00000A25, 0x00050080, 0x0000000C, 0x00004157, 0x0000285C,
|
||||
0x0000544B, 0x000500C7, 0x0000000C, 0x00004ADE, 0x000042C2, 0x00000A0E,
|
||||
0x000500C4, 0x0000000C, 0x0000544C, 0x00004ADE, 0x00000A17, 0x00050080,
|
||||
0x0000000C, 0x00004158, 0x00004157, 0x0000544C, 0x000500C7, 0x0000000C,
|
||||
0x00004FD6, 0x00003C4B, 0x00000A0E, 0x000500C4, 0x0000000C, 0x00002703,
|
||||
0x00004FD6, 0x00000A14, 0x000500C3, 0x0000000C, 0x00003332, 0x00004158,
|
||||
0x00000A1D, 0x000500C7, 0x0000000C, 0x000036D6, 0x00003332, 0x00000A20,
|
||||
0x00050080, 0x0000000C, 0x00003412, 0x00002703, 0x000036D6, 0x000500C4,
|
||||
0x0000000C, 0x00005B32, 0x00003412, 0x00000A14, 0x000500C7, 0x0000000C,
|
||||
0x00005AB1, 0x00003C4B, 0x00000A05, 0x00050080, 0x0000000C, 0x00002A9C,
|
||||
0x00005B32, 0x00005AB1, 0x000500C4, 0x0000000C, 0x00005B33, 0x00002A9C,
|
||||
0x00000A11, 0x000500C7, 0x0000000C, 0x00005AB2, 0x00004158, 0x0000040B,
|
||||
0x00050080, 0x0000000C, 0x00002A9D, 0x00005B33, 0x00005AB2, 0x000500C4,
|
||||
0x0000000C, 0x00005B34, 0x00002A9D, 0x00000A14, 0x000500C7, 0x0000000C,
|
||||
0x00005559, 0x00004158, 0x00000AC8, 0x00050080, 0x0000000C, 0x00005EFA,
|
||||
0x00005B34, 0x00005559, 0x0004007C, 0x0000000B, 0x0000566F, 0x00005EFA,
|
||||
0x000200F9, 0x00005341, 0x000200F8, 0x00002DD9, 0x0007004F, 0x00000011,
|
||||
0x00002621, 0x000024C9, 0x000024C9, 0x00000000, 0x00000001, 0x0004007C,
|
||||
0x00000012, 0x000059CF, 0x00002621, 0x00050051, 0x0000000C, 0x00001903,
|
||||
0x000059CF, 0x00000000, 0x000500C3, 0x0000000C, 0x000024FE, 0x00001903,
|
||||
0x00000A1A, 0x00050051, 0x0000000C, 0x00002748, 0x000059CF, 0x00000001,
|
||||
0x000500C3, 0x0000000C, 0x0000405D, 0x00002748, 0x00000A1A, 0x000500C2,
|
||||
0x0000000B, 0x00005B4E, 0x00005EAC, 0x00000A19, 0x0004007C, 0x0000000C,
|
||||
0x000018AB, 0x00005B4E, 0x00050084, 0x0000000C, 0x00005347, 0x0000405D,
|
||||
0x000018AB, 0x00050080, 0x0000000C, 0x00003F5E, 0x000024FE, 0x00005347,
|
||||
0x000500C4, 0x0000000C, 0x00004A8E, 0x00003F5E, 0x00000A28, 0x000500C7,
|
||||
0x0000000C, 0x00002AB6, 0x00001903, 0x00000A20, 0x000500C7, 0x0000000C,
|
||||
0x00003139, 0x00002748, 0x00000A35, 0x000500C4, 0x0000000C, 0x0000454E,
|
||||
0x00003139, 0x00000A11, 0x00050080, 0x0000000C, 0x00004397, 0x00002AB6,
|
||||
0x0000454E, 0x000500C4, 0x0000000C, 0x000018E7, 0x00004397, 0x00000A13,
|
||||
0x000500C7, 0x0000000C, 0x000027B1, 0x000018E7, 0x000009DB, 0x000500C4,
|
||||
0x0000000C, 0x00002F76, 0x000027B1, 0x00000A0E, 0x00050080, 0x0000000C,
|
||||
0x00003C4C, 0x00004A8E, 0x00002F76, 0x000500C7, 0x0000000C, 0x00003397,
|
||||
0x000018E7, 0x00000A38, 0x00050080, 0x0000000C, 0x00004D30, 0x00003C4C,
|
||||
0x00003397, 0x000500C7, 0x0000000C, 0x000047B5, 0x00002748, 0x00000A0E,
|
||||
0x000500C4, 0x0000000C, 0x0000544D, 0x000047B5, 0x00000A17, 0x00050080,
|
||||
0x0000000C, 0x00004159, 0x00004D30, 0x0000544D, 0x000500C7, 0x0000000C,
|
||||
0x00005022, 0x00004159, 0x0000040B, 0x000500C4, 0x0000000C, 0x00002416,
|
||||
0x00005022, 0x00000A14, 0x000500C7, 0x0000000C, 0x00004A33, 0x00002748,
|
||||
0x00000A3B, 0x000500C4, 0x0000000C, 0x00002F77, 0x00004A33, 0x00000A20,
|
||||
0x00050080, 0x0000000C, 0x0000415A, 0x00002416, 0x00002F77, 0x000500C7,
|
||||
0x0000000C, 0x00004ADF, 0x00004159, 0x00000388, 0x000500C4, 0x0000000C,
|
||||
0x0000544E, 0x00004ADF, 0x00000A11, 0x00050080, 0x0000000C, 0x00004144,
|
||||
0x0000415A, 0x0000544E, 0x000500C7, 0x0000000C, 0x00005083, 0x00002748,
|
||||
0x00000A23, 0x000500C3, 0x0000000C, 0x000041BF, 0x00005083, 0x00000A11,
|
||||
0x000500C3, 0x0000000C, 0x00001EEC, 0x00001903, 0x00000A14, 0x00050080,
|
||||
0x0000000C, 0x000035B6, 0x000041BF, 0x00001EEC, 0x000500C7, 0x0000000C,
|
||||
0x00005453, 0x000035B6, 0x00000A14, 0x000500C4, 0x0000000C, 0x0000544F,
|
||||
0x00005453, 0x00000A1D, 0x00050080, 0x0000000C, 0x00003C4D, 0x00004144,
|
||||
0x0000544F, 0x000500C7, 0x0000000C, 0x00002E06, 0x00004159, 0x00000AC8,
|
||||
0x00050080, 0x0000000C, 0x0000394F, 0x00003C4D, 0x00002E06, 0x0004007C,
|
||||
0x0000000B, 0x00005670, 0x0000394F, 0x000200F9, 0x00005341, 0x000200F8,
|
||||
0x00005341, 0x000700F5, 0x0000000B, 0x000024FC, 0x0000566F, 0x0000537D,
|
||||
0x00005670, 0x00002DD9, 0x00050084, 0x00000011, 0x00003FA8, 0x00001F69,
|
||||
0x00001997, 0x00050082, 0x00000011, 0x00003BBC, 0x00005C0B, 0x00003FA8,
|
||||
0x00050051, 0x0000000B, 0x00001C87, 0x00001997, 0x00000000, 0x00050051,
|
||||
0x0000000B, 0x00005962, 0x00001997, 0x00000001, 0x00050084, 0x0000000B,
|
||||
0x00003372, 0x00001C87, 0x00005962, 0x00050084, 0x0000000B, 0x00003CA0,
|
||||
0x000024FC, 0x00003372, 0x00050051, 0x0000000B, 0x00003ED4, 0x00003BBC,
|
||||
0x00000000, 0x00050084, 0x0000000B, 0x00003E12, 0x00003ED4, 0x00005962,
|
||||
0x00050051, 0x0000000B, 0x00001AE6, 0x00003BBC, 0x00000001, 0x00050080,
|
||||
0x0000000B, 0x00002B25, 0x00003E12, 0x00001AE6, 0x000500C4, 0x0000000B,
|
||||
0x0000609D, 0x00002B25, 0x00000A0D, 0x000500C7, 0x0000000B, 0x00005AB3,
|
||||
0x000049F1, 0x00000A0D, 0x00050080, 0x0000000B, 0x00002557, 0x0000609D,
|
||||
0x00005AB3, 0x000500C4, 0x0000000B, 0x000040AD, 0x00002557, 0x00000A13,
|
||||
0x00050080, 0x0000000B, 0x00004EAA, 0x00003CA0, 0x000040AD, 0x00050080,
|
||||
0x0000000B, 0x0000453C, 0x00005B88, 0x00004EAA, 0x000500C2, 0x0000000B,
|
||||
0x000036D8, 0x0000453C, 0x00000A16, 0x000500C2, 0x0000000B, 0x00002DF6,
|
||||
0x00004FA3, 0x00000A10, 0x000500C7, 0x0000000B, 0x000020CA, 0x00002DF6,
|
||||
0x00000A13, 0x00060041, 0x00000294, 0x000050F7, 0x0000107A, 0x00000A0B,
|
||||
0x000036D8, 0x0004003D, 0x00000017, 0x00001FCE, 0x000050F7, 0x000500AA,
|
||||
0x00000009, 0x000035C0, 0x000020CA, 0x00000A0D, 0x000500AA, 0x00000009,
|
||||
0x00005376, 0x000020CA, 0x00000A10, 0x000500A6, 0x00000009, 0x00005686,
|
||||
0x000035C0, 0x00005376, 0x000300F7, 0x00003463, 0x00000000, 0x000400FA,
|
||||
0x00005686, 0x00002957, 0x00003463, 0x000200F8, 0x00002957, 0x000500C7,
|
||||
0x00000017, 0x0000475F, 0x00001FCE, 0x000009CE, 0x000500C4, 0x00000017,
|
||||
0x000024D1, 0x0000475F, 0x0000013D, 0x000500C7, 0x00000017, 0x000050AC,
|
||||
0x00001FCE, 0x0000072E, 0x000500C2, 0x00000017, 0x0000448D, 0x000050AC,
|
||||
0x0000013D, 0x000500C5, 0x00000017, 0x00003FF8, 0x000024D1, 0x0000448D,
|
||||
0x000200F9, 0x00003463, 0x000200F8, 0x00003463, 0x000700F5, 0x00000017,
|
||||
0x00005879, 0x00001FCE, 0x00005341, 0x00003FF8, 0x00002957, 0x000500AA,
|
||||
0x00000009, 0x00004CB6, 0x000020CA, 0x00000A13, 0x000500A6, 0x00000009,
|
||||
0x00003B23, 0x00005376, 0x00004CB6, 0x000300F7, 0x0000368A, 0x00000000,
|
||||
0x000400FA, 0x00003B23, 0x00002B38, 0x0000368A, 0x000200F8, 0x00002B38,
|
||||
0x000500C4, 0x00000017, 0x00005E17, 0x00005879, 0x000002ED, 0x000500C2,
|
||||
0x00000017, 0x00003BE7, 0x00005879, 0x000002ED, 0x000500C5, 0x00000017,
|
||||
0x000029E8, 0x00005E17, 0x00003BE7, 0x000200F9, 0x0000368A, 0x000200F8,
|
||||
0x0000368A, 0x000700F5, 0x00000017, 0x000040DE, 0x00005879, 0x00003463,
|
||||
0x000029E8, 0x00002B38, 0x000500C7, 0x00000017, 0x00004740, 0x000040DE,
|
||||
0x00000352, 0x00040070, 0x0000001D, 0x000023B1, 0x00004740, 0x0005008E,
|
||||
0x0000001D, 0x00004BA5, 0x000023B1, 0x0000092A, 0x000500C2, 0x00000017,
|
||||
0x00005B47, 0x000040DE, 0x000002ED, 0x00040070, 0x0000001D, 0x0000483C,
|
||||
0x00005B47, 0x0005008E, 0x0000001D, 0x00004812, 0x0000483C, 0x0000092A,
|
||||
0x00050051, 0x0000000D, 0x0000187C, 0x00004BA5, 0x00000000, 0x00050051,
|
||||
0x0000000D, 0x000035EE, 0x00004812, 0x00000000, 0x00050050, 0x00000013,
|
||||
0x00004B20, 0x0000187C, 0x000035EE, 0x0006000C, 0x0000000B, 0x00002171,
|
||||
0x00000001, 0x0000003A, 0x00004B20, 0x00050051, 0x0000000D, 0x00005BBF,
|
||||
0x00004BA5, 0x00000001, 0x00050051, 0x0000000D, 0x000039A7, 0x00004812,
|
||||
0x00000001, 0x00050050, 0x00000013, 0x00004B21, 0x00005BBF, 0x000039A7,
|
||||
0x0006000C, 0x0000000B, 0x00002172, 0x00000001, 0x0000003A, 0x00004B21,
|
||||
0x00050051, 0x0000000D, 0x00005BC0, 0x00004BA5, 0x00000002, 0x00050051,
|
||||
0x0000000D, 0x000039A8, 0x00004812, 0x00000002, 0x00050050, 0x00000013,
|
||||
0x00004B22, 0x00005BC0, 0x000039A8, 0x0006000C, 0x0000000B, 0x00002173,
|
||||
0x00000001, 0x0000003A, 0x00004B22, 0x00050051, 0x0000000D, 0x00005BC1,
|
||||
0x00004BA5, 0x00000003, 0x00050051, 0x0000000D, 0x000039A9, 0x00004812,
|
||||
0x00000003, 0x00050050, 0x00000013, 0x00004B0D, 0x00005BC1, 0x000039A9,
|
||||
0x0006000C, 0x0000000B, 0x000020EE, 0x00000001, 0x0000003A, 0x00004B0D,
|
||||
0x00070050, 0x00000017, 0x00003ABB, 0x00002171, 0x00002172, 0x00002173,
|
||||
0x000020EE, 0x00060041, 0x00000294, 0x000045C3, 0x0000140E, 0x00000A0B,
|
||||
0x000054A6, 0x0003003E, 0x000045C3, 0x00003ABB, 0x00050080, 0x0000000B,
|
||||
0x00003CAC, 0x000054A6, 0x00000A0E, 0x000500AC, 0x00000009, 0x00001911,
|
||||
0x00001C87, 0x00000A0D, 0x000300F7, 0x000060BC, 0x00000002, 0x000400FA,
|
||||
0x00001911, 0x00005084, 0x00005094, 0x000200F8, 0x00005084, 0x00050086,
|
||||
0x0000000B, 0x00003697, 0x000019EE, 0x00001C87, 0x00050084, 0x0000000B,
|
||||
0x0000237E, 0x00003697, 0x00001C87, 0x00050082, 0x0000000B, 0x00003171,
|
||||
0x000019EE, 0x0000237E, 0x00050080, 0x0000000B, 0x00002527, 0x00003171,
|
||||
0x00000A0D, 0x000500AA, 0x00000009, 0x0000343F, 0x00002527, 0x00001C87,
|
||||
0x000300F7, 0x00001EED, 0x00000000, 0x000400FA, 0x0000343F, 0x0000569E,
|
||||
0x00002191, 0x000200F8, 0x0000569E, 0x00050084, 0x0000000B, 0x00004B59,
|
||||
0x00000A6A, 0x00001C87, 0x000500C4, 0x0000000B, 0x0000540F, 0x00003171,
|
||||
0x00000A16, 0x00050082, 0x0000000B, 0x00004944, 0x00004B59, 0x0000540F,
|
||||
0x000200F9, 0x00001EED, 0x000200F8, 0x00002191, 0x000200F9, 0x00001EED,
|
||||
0x000200F8, 0x00001EED, 0x000700F5, 0x0000000B, 0x0000292C, 0x00004944,
|
||||
0x0000569E, 0x00000A3A, 0x00002191, 0x000200F9, 0x000060BC, 0x000200F8,
|
||||
0x00005094, 0x000200F9, 0x000060BC, 0x000200F8, 0x000060BC, 0x000700F5,
|
||||
0x0000000B, 0x000029BC, 0x0000292C, 0x00001EED, 0x00000A6A, 0x00005094,
|
||||
0x00050084, 0x0000000B, 0x0000492B, 0x000029BC, 0x00005962, 0x000500C2,
|
||||
0x0000000B, 0x0000406D, 0x0000492B, 0x00000A16, 0x00050080, 0x0000000B,
|
||||
0x0000336B, 0x000036D8, 0x0000406D, 0x00060041, 0x00000294, 0x0000571A,
|
||||
0x0000107A, 0x00000A0B, 0x0000336B, 0x0004003D, 0x00000017, 0x000019B2,
|
||||
0x0000571A, 0x000300F7, 0x00003A1A, 0x00000000, 0x000400FA, 0x00005686,
|
||||
0x00002958, 0x00003A1A, 0x000200F8, 0x00002958, 0x000500C7, 0x00000017,
|
||||
0x00004760, 0x000019B2, 0x000009CE, 0x000500C4, 0x00000017, 0x000024D2,
|
||||
0x00004760, 0x0000013D, 0x000500C7, 0x00000017, 0x000050AD, 0x000019B2,
|
||||
0x0000072E, 0x000500C2, 0x00000017, 0x0000448E, 0x000050AD, 0x0000013D,
|
||||
0x000500C5, 0x00000017, 0x00003FF9, 0x000024D2, 0x0000448E, 0x000200F9,
|
||||
0x00003A1A, 0x000200F8, 0x00003A1A, 0x000700F5, 0x00000017, 0x00002AAC,
|
||||
0x000019B2, 0x000060BC, 0x00003FF9, 0x00002958, 0x000300F7, 0x0000368B,
|
||||
0x00000000, 0x000400FA, 0x00003B23, 0x00002B39, 0x0000368B, 0x000200F8,
|
||||
0x00002B39, 0x000500C4, 0x00000017, 0x00005E18, 0x00002AAC, 0x000002ED,
|
||||
0x000500C2, 0x00000017, 0x00003BE8, 0x00002AAC, 0x000002ED, 0x000500C5,
|
||||
0x00000017, 0x000029E9, 0x00005E18, 0x00003BE8, 0x000200F9, 0x0000368B,
|
||||
0x000200F8, 0x0000368B, 0x000700F5, 0x00000017, 0x000040DF, 0x00002AAC,
|
||||
0x00003A1A, 0x000029E9, 0x00002B39, 0x000500C7, 0x00000017, 0x00004741,
|
||||
0x000040DF, 0x00000352, 0x00040070, 0x0000001D, 0x000023B2, 0x00004741,
|
||||
0x0005008E, 0x0000001D, 0x00004BA6, 0x000023B2, 0x0000092A, 0x000500C2,
|
||||
0x00000017, 0x00005B48, 0x000040DF, 0x000002ED, 0x00040070, 0x0000001D,
|
||||
0x0000483D, 0x00005B48, 0x0005008E, 0x0000001D, 0x00004813, 0x0000483D,
|
||||
0x0000092A, 0x00050051, 0x0000000D, 0x0000187D, 0x00004BA6, 0x00000000,
|
||||
0x00050051, 0x0000000D, 0x000035EF, 0x00004813, 0x00000000, 0x00050050,
|
||||
0x00000013, 0x00004B23, 0x0000187D, 0x000035EF, 0x0006000C, 0x0000000B,
|
||||
0x00002174, 0x00000001, 0x0000003A, 0x00004B23, 0x00050051, 0x0000000D,
|
||||
0x00005BC2, 0x00004BA6, 0x00000001, 0x00050051, 0x0000000D, 0x000039AA,
|
||||
0x00004813, 0x00000001, 0x00050050, 0x00000013, 0x00004B24, 0x00005BC2,
|
||||
0x000039AA, 0x0006000C, 0x0000000B, 0x00002175, 0x00000001, 0x0000003A,
|
||||
0x00004B24, 0x00050051, 0x0000000D, 0x00005BC3, 0x00004BA6, 0x00000002,
|
||||
0x00050051, 0x0000000D, 0x000039AB, 0x00004813, 0x00000002, 0x00050050,
|
||||
0x00000013, 0x00004B25, 0x00005BC3, 0x000039AB, 0x0006000C, 0x0000000B,
|
||||
0x00002176, 0x00000001, 0x0000003A, 0x00004B25, 0x00050051, 0x0000000D,
|
||||
0x00005BC4, 0x00004BA6, 0x00000003, 0x00050051, 0x0000000D, 0x000039AC,
|
||||
0x00004813, 0x00000003, 0x00050050, 0x00000013, 0x00004B0E, 0x00005BC4,
|
||||
0x000039AC, 0x0006000C, 0x0000000B, 0x000020EF, 0x00000001, 0x0000003A,
|
||||
0x00004B0E, 0x00070050, 0x00000017, 0x00003ABC, 0x00002174, 0x00002175,
|
||||
0x00002176, 0x000020EF, 0x00060041, 0x00000294, 0x00004EBE, 0x0000140E,
|
||||
0x00000A0B, 0x00003CAC, 0x0003003E, 0x00004EBE, 0x00003ABC, 0x000200F9,
|
||||
0x00004C7A, 0x000200F8, 0x00004C7A, 0x000100FD, 0x00010038,
|
||||
};
|
|
@ -358,19 +358,20 @@ xesl_float4 XeUnpackR10G10B10A2Float(uint p) {
|
|||
// Upper 16 bits are ignored by XeUnpackR16EdramX4.
|
||||
|
||||
xesl_float4 XeUnpackR16EdramX4(xesl_uint4 p) {
|
||||
return max(xesl_float4(xesl_int4(p) << 16 >> 16) * (32.0 / 32767.0), -1.0);
|
||||
return max((-1.0).xxxx,
|
||||
xesl_float4(xesl_int4(p) << 16 >> 16) * (32.0 / 32767.0));
|
||||
}
|
||||
|
||||
xesl_float2 XeUnpackR16G16Edram(uint p) {
|
||||
return max(
|
||||
xesl_float2(int(p).xx << xesl_int2(16, 0) >> 16) * (32.0 / 32767.0),
|
||||
-1.0);
|
||||
(-1.0).xx,
|
||||
xesl_float2(int(p).xx << xesl_int2(16, 0) >> 16) * (32.0 / 32767.0));
|
||||
}
|
||||
|
||||
xesl_float4 XeUnpackR16G16B16A16Edram(xesl_uint2 p) {
|
||||
return max(xesl_float4(xesl_int2(p).xxyy << xesl_int2(16, 0).xyxy >> 16) *
|
||||
(32.0 / 32767.0),
|
||||
-1.0);
|
||||
return max((-1.0).xxxx,
|
||||
xesl_float4(xesl_int2(p).xxyy << xesl_int2(16, 0).xyxy >> 16) *
|
||||
(32.0 / 32767.0));
|
||||
}
|
||||
|
||||
// Xenos 16-bit packed textures are RGBA, but in Direct3D 12 they are BGRA.
|
||||
|
@ -497,6 +498,28 @@ void XeR11G11B10SNormToRGBA16(xesl_uint4 packed_texels, out xesl_uint4 out_01,
|
|||
out_23 = XeR11G11B10SNormToRGBA16(packed_texels.zw);
|
||||
}
|
||||
|
||||
xesl_uint4 XeRG16UNormToRG16Float(xesl_uint4 packed_texels) {
|
||||
xesl_float4 r = xesl_float4(packed_texels & 0xFFFFu) * (1.0 / 65535.0);
|
||||
xesl_float4 g = xesl_float4(packed_texels >> 16u) * (1.0 / 65535.0);
|
||||
return xesl_uint4(xesl_packHalf2x16(xesl_float2(r.x, g.x)),
|
||||
xesl_packHalf2x16(xesl_float2(r.y, g.y)),
|
||||
xesl_packHalf2x16(xesl_float2(r.z, g.z)),
|
||||
xesl_packHalf2x16(xesl_float2(r.w, g.w)));
|
||||
}
|
||||
|
||||
xesl_uint4 XeRG16SNormToRG16Float(xesl_uint4 packed_texels) {
|
||||
xesl_float4 r =
|
||||
max((-1.0).xxxx,
|
||||
xesl_float4(xesl_int4(packed_texels) << 16 >> 16) * (1.0 / 32767.0));
|
||||
xesl_float4 g =
|
||||
max((-1.0).xxxx,
|
||||
xesl_float4(xesl_int4(packed_texels) >> 16) * (1.0 / 32767.0));
|
||||
return xesl_uint4(xesl_packHalf2x16(xesl_float2(r.x, g.x)),
|
||||
xesl_packHalf2x16(xesl_float2(r.y, g.y)),
|
||||
xesl_packHalf2x16(xesl_float2(r.z, g.z)),
|
||||
xesl_packHalf2x16(xesl_float2(r.w, g.w)));
|
||||
}
|
||||
|
||||
// Based on CFloat24 from d3dref9.dll and the 6e4 code from:
|
||||
// https://github.com/Microsoft/DirectXTex/blob/master/DirectXTex/DirectXTexConvert.cpp
|
||||
// 6e4 has a different exponent bias allowing [0,512) values, 20e4 allows [0,2).
|
||||
|
|
|
@ -19,7 +19,7 @@ void main(point XeVertexPreGS xe_in[1],
|
|||
// Shader header writes -1.0f to point_size by default, so any positive value
|
||||
// means that it was overwritten by the translated vertex shader.
|
||||
float2 point_size =
|
||||
xe_in[0].post_gs.pre_ps.point_params.z > 0.0f
|
||||
xe_in[0].post_gs.pre_ps.point_params.z >= 0.0f
|
||||
? xe_in[0].post_gs.pre_ps.point_params.zz
|
||||
: float2(xe_point_size_x, xe_point_size_y);
|
||||
point_size =
|
||||
|
|
|
@ -37,7 +37,7 @@ xesl_entry_signature_end
|
|||
xe_texture_load_dest, block_offset_host,
|
||||
XE_TEXTURE_LOAD_16BPB_TRANSFORM(XeEndianSwap16(
|
||||
xesl_typedStorageBufferLoad(xe_texture_load_source,
|
||||
block_offset_guest), endian)));
|
||||
block_offset_guest), endian)));
|
||||
++block_offset_host;
|
||||
block_offset_guest +=
|
||||
XeTextureLoadRightConsecutiveBlocksOffset(block_index.x, 1u) >> 4u;
|
||||
|
@ -45,5 +45,5 @@ xesl_entry_signature_end
|
|||
xe_texture_load_dest, block_offset_host,
|
||||
XE_TEXTURE_LOAD_16BPB_TRANSFORM(XeEndianSwap16(
|
||||
xesl_typedStorageBufferLoad(xe_texture_load_source,
|
||||
block_offset_guest), endian)));
|
||||
block_offset_guest), endian)));
|
||||
xesl_entry_end
|
||||
|
|
|
@ -37,7 +37,7 @@ xesl_entry_signature_end
|
|||
xe_texture_load_dest, block_offset_host,
|
||||
XE_TEXTURE_LOAD_32BPB_TRANSFORM(XeEndianSwap32(
|
||||
xesl_typedStorageBufferLoad(xe_texture_load_source,
|
||||
block_offset_guest), endian)));
|
||||
block_offset_guest), endian)));
|
||||
++block_offset_host;
|
||||
block_offset_guest +=
|
||||
XeTextureLoadRightConsecutiveBlocksOffset(block_index.x, 2u) >> 4u;
|
||||
|
@ -45,5 +45,5 @@ xesl_entry_signature_end
|
|||
xe_texture_load_dest, block_offset_host,
|
||||
XE_TEXTURE_LOAD_32BPB_TRANSFORM(XeEndianSwap32(
|
||||
xesl_typedStorageBufferLoad(xe_texture_load_source,
|
||||
block_offset_guest), endian)));
|
||||
block_offset_guest), endian)));
|
||||
xesl_entry_end
|
||||
|
|
|
@ -7,4 +7,5 @@
|
|||
******************************************************************************
|
||||
*/
|
||||
|
||||
#define XE_TEXTURE_LOAD_64BPB_TRANSFORM(blocks) (blocks)
|
||||
#include "texture_load_64bpb.xesli"
|
||||
|
|
|
@ -18,7 +18,8 @@ xesl_entry
|
|||
xesl_entry_bindings_end_local_size(8, 32, 1)
|
||||
xesl_input_global_invocation_id
|
||||
xesl_entry_signature_end
|
||||
// 1 thread = 4 blocks.
|
||||
// 1 thread = 4 blocks passed through an externally provided
|
||||
// uint4 transformation function (XE_TEXTURE_LOAD_64BPB_TRANSFORM).
|
||||
xesl_uint3 block_index = xesl_GlobalInvocationID << xesl_uint3(2u, 0u, 0u);
|
||||
xesl_uint3 size_blocks = XeTextureLoadSizeBlocks();
|
||||
xesl_dont_flatten
|
||||
|
@ -34,13 +35,15 @@ xesl_entry_signature_end
|
|||
uint endian = XeTextureLoadEndian32();
|
||||
xesl_writeTypedStorageBufferStore(
|
||||
xe_texture_load_dest, block_offset_host,
|
||||
XeEndianSwap32(xesl_typedStorageBufferLoad(xe_texture_load_source,
|
||||
block_offset_guest), endian));
|
||||
XE_TEXTURE_LOAD_64BPB_TRANSFORM(XeEndianSwap32(
|
||||
xesl_typedStorageBufferLoad(xe_texture_load_source,
|
||||
block_offset_guest), endian)));
|
||||
++block_offset_host;
|
||||
block_offset_guest +=
|
||||
XeTextureLoadRightConsecutiveBlocksOffset(block_index.x, 3u) >> 4u;
|
||||
xesl_writeTypedStorageBufferStore(
|
||||
xe_texture_load_dest, block_offset_host,
|
||||
XeEndianSwap32(xesl_typedStorageBufferLoad(xe_texture_load_source,
|
||||
block_offset_guest), endian));
|
||||
XE_TEXTURE_LOAD_64BPB_TRANSFORM(XeEndianSwap32(
|
||||
xesl_typedStorageBufferLoad(xe_texture_load_source,
|
||||
block_offset_guest), endian)));
|
||||
xesl_entry_end
|
||||
|
|
|
@ -8,4 +8,5 @@
|
|||
*/
|
||||
|
||||
#define XE_TEXTURE_LOAD_RESOLUTION_SCALED
|
||||
#define XE_TEXTURE_LOAD_64BPB_TRANSFORM(blocks) (blocks)
|
||||
#include "texture_load_64bpb.xesli"
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2022 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#include "pixel_formats.xesli"
|
||||
#define XE_TEXTURE_LOAD_16BPB_TRANSFORM XeRG16SNormToRG16Float
|
||||
#include "texture_load_16bpb.xesli"
|
|
@ -0,0 +1,13 @@
|
|||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2022 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#define XE_TEXTURE_LOAD_RESOLUTION_SCALED
|
||||
#include "pixel_formats.xesli"
|
||||
#define XE_TEXTURE_LOAD_16BPB_TRANSFORM XeRG16SNormToRG16Float
|
||||
#include "texture_load_16bpb.xesli"
|
|
@ -0,0 +1,12 @@
|
|||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2022 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#include "pixel_formats.xesli"
|
||||
#define XE_TEXTURE_LOAD_16BPB_TRANSFORM XeRG16UNormToRG16Float
|
||||
#include "texture_load_16bpb.xesli"
|
|
@ -0,0 +1,13 @@
|
|||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2022 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#define XE_TEXTURE_LOAD_RESOLUTION_SCALED
|
||||
#include "pixel_formats.xesli"
|
||||
#define XE_TEXTURE_LOAD_16BPB_TRANSFORM XeRG16UNormToRG16Float
|
||||
#include "texture_load_16bpb.xesli"
|
|
@ -0,0 +1,12 @@
|
|||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2022 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#include "pixel_formats.xesli"
|
||||
#define XE_TEXTURE_LOAD_32BPB_TRANSFORM XeRG16SNormToRG16Float
|
||||
#include "texture_load_32bpb.xesli"
|
|
@ -0,0 +1,13 @@
|
|||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2022 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#define XE_TEXTURE_LOAD_RESOLUTION_SCALED
|
||||
#include "pixel_formats.xesli"
|
||||
#define XE_TEXTURE_LOAD_32BPB_TRANSFORM XeRG16SNormToRG16Float
|
||||
#include "texture_load_32bpb.xesli"
|
|
@ -0,0 +1,12 @@
|
|||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2022 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#include "pixel_formats.xesli"
|
||||
#define XE_TEXTURE_LOAD_32BPB_TRANSFORM XeRG16UNormToRG16Float
|
||||
#include "texture_load_32bpb.xesli"
|
|
@ -0,0 +1,13 @@
|
|||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2022 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#define XE_TEXTURE_LOAD_RESOLUTION_SCALED
|
||||
#include "pixel_formats.xesli"
|
||||
#define XE_TEXTURE_LOAD_32BPB_TRANSFORM XeRG16UNormToRG16Float
|
||||
#include "texture_load_32bpb.xesli"
|
|
@ -0,0 +1,12 @@
|
|||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2022 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#include "pixel_formats.xesli"
|
||||
#define XE_TEXTURE_LOAD_64BPB_TRANSFORM XeRG16SNormToRG16Float
|
||||
#include "texture_load_64bpb.xesli"
|
|
@ -0,0 +1,13 @@
|
|||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2022 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#define XE_TEXTURE_LOAD_RESOLUTION_SCALED
|
||||
#include "pixel_formats.xesli"
|
||||
#define XE_TEXTURE_LOAD_64BPB_TRANSFORM XeRG16SNormToRG16Float
|
||||
#include "texture_load_64bpb.xesli"
|
|
@ -0,0 +1,12 @@
|
|||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2022 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#include "pixel_formats.xesli"
|
||||
#define XE_TEXTURE_LOAD_64BPB_TRANSFORM XeRG16UNormToRG16Float
|
||||
#include "texture_load_64bpb.xesli"
|
|
@ -0,0 +1,13 @@
|
|||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2022 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#define XE_TEXTURE_LOAD_RESOLUTION_SCALED
|
||||
#include "pixel_formats.xesli"
|
||||
#define XE_TEXTURE_LOAD_64BPB_TRANSFORM XeRG16UNormToRG16Float
|
||||
#include "texture_load_64bpb.xesli"
|
|
@ -385,12 +385,12 @@ void SpirvShaderTranslator::StartTranslation() {
|
|||
var_main_loop_count_ = builder_->createVariable(
|
||||
spv::NoPrecision, spv::StorageClassFunction, type_uint4_,
|
||||
"xe_var_loop_count", const_uint4_0_);
|
||||
var_main_address_absolute_ = builder_->createVariable(
|
||||
var_main_address_register_ = builder_->createVariable(
|
||||
spv::NoPrecision, spv::StorageClassFunction, type_int_,
|
||||
"xe_var_address_absolute", const_int_0_);
|
||||
var_main_address_relative_ = builder_->createVariable(
|
||||
"xe_var_address_register", const_int_0_);
|
||||
var_main_loop_address_ = builder_->createVariable(
|
||||
spv::NoPrecision, spv::StorageClassFunction, type_int4_,
|
||||
"xe_var_address_relative", const_int4_0_);
|
||||
"xe_var_loop_address", const_int4_0_);
|
||||
var_main_previous_scalar_ = builder_->createVariable(
|
||||
spv::NoPrecision, spv::StorageClassFunction, type_float_,
|
||||
"xe_var_previous_scalar", const_float_0_);
|
||||
|
@ -693,7 +693,7 @@ void SpirvShaderTranslator::ProcessLoopStartInstruction(
|
|||
// Push aL - keep the same value as in the previous loop if repeating, or the
|
||||
// new one otherwise.
|
||||
spv::Id address_relative_stack_old =
|
||||
builder_->createLoad(var_main_address_relative_, spv::NoPrecision);
|
||||
builder_->createLoad(var_main_loop_address_, spv::NoPrecision);
|
||||
id_vector_temp_.clear();
|
||||
id_vector_temp_.reserve(4);
|
||||
if (instr.is_repeat) {
|
||||
|
@ -713,7 +713,7 @@ void SpirvShaderTranslator::ProcessLoopStartInstruction(
|
|||
}
|
||||
builder_->createStore(
|
||||
builder_->createCompositeConstruct(type_int4_, id_vector_temp_),
|
||||
var_main_address_relative_);
|
||||
var_main_loop_address_);
|
||||
|
||||
// Break (jump to the skip label) if the loop counter is 0 (since the
|
||||
// condition is checked in the end).
|
||||
|
@ -762,7 +762,7 @@ void SpirvShaderTranslator::ProcessLoopEndInstruction(
|
|||
builder_->createCompositeExtract(loop_count_stack_old, type_uint_, 0),
|
||||
builder_->makeUintConstant(1));
|
||||
spv::Id address_relative_stack_old =
|
||||
builder_->createLoad(var_main_address_relative_, spv::NoPrecision);
|
||||
builder_->createLoad(var_main_loop_address_, spv::NoPrecision);
|
||||
|
||||
// Predicated break works like break if (loop_count == 0 || [!]p0).
|
||||
// Three options, due to logical operations usage (so OpLogicalNot is not
|
||||
|
@ -841,7 +841,7 @@ void SpirvShaderTranslator::ProcessLoopEndInstruction(
|
|||
loop_constant),
|
||||
builder_->makeIntConstant(16), builder_->makeIntConstant(8))),
|
||||
address_relative_stack_old, type_int4_, 0),
|
||||
var_main_address_relative_);
|
||||
var_main_loop_address_);
|
||||
// Jump back to the beginning of the loop body.
|
||||
main_switch_next_pc_phi_operands_.push_back(
|
||||
builder_->makeIntConstant(int(instr.loop_body_address)));
|
||||
|
@ -872,7 +872,7 @@ void SpirvShaderTranslator::ProcessLoopEndInstruction(
|
|||
id_vector_temp_.push_back(const_int_0_);
|
||||
builder_->createStore(
|
||||
builder_->createCompositeConstruct(type_int4_, id_vector_temp_),
|
||||
var_main_address_relative_);
|
||||
var_main_loop_address_);
|
||||
// Now going to fall through to the next control flow instruction.
|
||||
}
|
||||
|
||||
|
@ -1417,7 +1417,7 @@ spv::Id SpirvShaderTranslator::GetStorageAddressingIndex(
|
|||
EnsureBuildPointAvailable();
|
||||
spv::Id base_pointer = spv::NoResult;
|
||||
switch (addressing_mode) {
|
||||
case InstructionStorageAddressingMode::kStatic: {
|
||||
case InstructionStorageAddressingMode::kAbsolute: {
|
||||
uint32_t static_storage_index = storage_index;
|
||||
if (is_float_constant) {
|
||||
static_storage_index =
|
||||
|
@ -1429,15 +1429,15 @@ spv::Id SpirvShaderTranslator::GetStorageAddressingIndex(
|
|||
}
|
||||
return builder_->makeIntConstant(int(static_storage_index));
|
||||
}
|
||||
case InstructionStorageAddressingMode::kAddressAbsolute:
|
||||
base_pointer = var_main_address_absolute_;
|
||||
case InstructionStorageAddressingMode::kAddressRegisterRelative:
|
||||
base_pointer = var_main_address_register_;
|
||||
break;
|
||||
case InstructionStorageAddressingMode::kAddressRelative:
|
||||
case InstructionStorageAddressingMode::kLoopRelative:
|
||||
// Load X component.
|
||||
id_vector_temp_util_.clear();
|
||||
id_vector_temp_util_.push_back(const_int_0_);
|
||||
base_pointer = builder_->createAccessChain(spv::StorageClassFunction,
|
||||
var_main_address_relative_,
|
||||
var_main_loop_address_,
|
||||
id_vector_temp_util_);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -475,9 +475,9 @@ class SpirvShaderTranslator : public ShaderTranslator {
|
|||
// uint4.
|
||||
spv::Id var_main_loop_count_;
|
||||
// int4.
|
||||
spv::Id var_main_address_relative_;
|
||||
spv::Id var_main_loop_address_;
|
||||
// int.
|
||||
spv::Id var_main_address_absolute_;
|
||||
spv::Id var_main_address_register_;
|
||||
// float.
|
||||
spv::Id var_main_previous_scalar_;
|
||||
// `base + index * stride` in dwords from the last vfetch_full as it may be
|
||||
|
|
|
@ -100,7 +100,7 @@ spv::Id SpirvShaderTranslator::ProcessVectorAluOperation(
|
|||
uint32_t used_result_components =
|
||||
instr.vector_and_constant_result.GetUsedResultComponents();
|
||||
if (!used_result_components &&
|
||||
!AluVectorOpHasSideEffects(instr.vector_opcode)) {
|
||||
!ucode::GetAluVectorOpcodeInfo(instr.vector_opcode).changed_state) {
|
||||
return spv::NoResult;
|
||||
}
|
||||
uint32_t used_result_component_count = xe::bit_count(used_result_components);
|
||||
|
@ -324,7 +324,7 @@ spv::Id SpirvShaderTranslator::ProcessVectorAluOperation(
|
|||
spv::OpConvertFToS, type_int_,
|
||||
builder_->createBuiltinCall(type_float_, ext_inst_glsl_std_450_,
|
||||
GLSLstd450NClamp, id_vector_temp_)),
|
||||
var_main_address_absolute_);
|
||||
var_main_address_register_);
|
||||
}
|
||||
if (!used_result_components) {
|
||||
// maxa returning nothing - can't load src1.
|
||||
|
@ -1174,7 +1174,7 @@ spv::Id SpirvShaderTranslator::ProcessScalarAluOperation(
|
|||
spv::OpConvertFToS, type_int_,
|
||||
builder_->createBuiltinCall(type_float_, ext_inst_glsl_std_450_,
|
||||
GLSLstd450NClamp, id_vector_temp_)),
|
||||
var_main_address_absolute_);
|
||||
var_main_address_register_);
|
||||
}
|
||||
if (a == b) {
|
||||
// max is commonly used as mov.
|
||||
|
|
|
@ -0,0 +1,120 @@
|
|||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2022 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#include "xenia/gpu/ucode.h"
|
||||
|
||||
namespace xe {
|
||||
namespace gpu {
|
||||
namespace ucode {
|
||||
|
||||
const AluScalarOpcodeInfo kAluScalarOpcodeInfos[64] = {
|
||||
{"adds", 1, true, kAluOpChangedStateNone},
|
||||
{"adds_prev", 1, false, kAluOpChangedStateNone},
|
||||
{"muls", 1, true, kAluOpChangedStateNone},
|
||||
{"muls_prev", 1, false, kAluOpChangedStateNone},
|
||||
{"muls_prev2", 1, true, kAluOpChangedStateNone},
|
||||
{"maxs", 1, true, kAluOpChangedStateNone},
|
||||
{"mins", 1, true, kAluOpChangedStateNone},
|
||||
{"seqs", 1, false, kAluOpChangedStateNone},
|
||||
{"sgts", 1, false, kAluOpChangedStateNone},
|
||||
{"sges", 1, false, kAluOpChangedStateNone},
|
||||
{"snes", 1, false, kAluOpChangedStateNone},
|
||||
{"frcs", 1, false, kAluOpChangedStateNone},
|
||||
{"truncs", 1, false, kAluOpChangedStateNone},
|
||||
{"floors", 1, false, kAluOpChangedStateNone},
|
||||
{"exp", 1, false, kAluOpChangedStateNone},
|
||||
{"logc", 1, false, kAluOpChangedStateNone},
|
||||
{"log", 1, false, kAluOpChangedStateNone},
|
||||
{"rcpc", 1, false, kAluOpChangedStateNone},
|
||||
{"rcpf", 1, false, kAluOpChangedStateNone},
|
||||
{"rcp", 1, false, kAluOpChangedStateNone},
|
||||
{"rsqc", 1, false, kAluOpChangedStateNone},
|
||||
{"rsqf", 1, false, kAluOpChangedStateNone},
|
||||
{"rsq", 1, false, kAluOpChangedStateNone},
|
||||
{"maxas", 1, true, kAluOpChangedStateAddressRegister},
|
||||
{"maxasf", 1, true, kAluOpChangedStateAddressRegister},
|
||||
{"subs", 1, true, kAluOpChangedStateNone},
|
||||
{"subs_prev", 1, false, kAluOpChangedStateNone},
|
||||
{"setp_eq", 1, false, kAluOpChangedStatePredicate},
|
||||
{"setp_ne", 1, false, kAluOpChangedStatePredicate},
|
||||
{"setp_gt", 1, false, kAluOpChangedStatePredicate},
|
||||
{"setp_ge", 1, false, kAluOpChangedStatePredicate},
|
||||
{"setp_inv", 1, false, kAluOpChangedStatePredicate},
|
||||
{"setp_pop", 1, false, kAluOpChangedStatePredicate},
|
||||
{"setp_clr", 0, false, kAluOpChangedStatePredicate},
|
||||
{"setp_rstr", 1, false, kAluOpChangedStatePredicate},
|
||||
{"kills_eq", 1, false, kAluOpChangedStatePixelKill},
|
||||
{"kills_gt", 1, false, kAluOpChangedStatePixelKill},
|
||||
{"kills_ge", 1, false, kAluOpChangedStatePixelKill},
|
||||
{"kills_ne", 1, false, kAluOpChangedStatePixelKill},
|
||||
{"kills_one", 1, false, kAluOpChangedStatePixelKill},
|
||||
{"sqrt", 1, false, kAluOpChangedStateNone},
|
||||
{"opcode_41", 0, false, kAluOpChangedStateNone},
|
||||
{"mulsc", 2, false, kAluOpChangedStateNone},
|
||||
{"mulsc", 2, false, kAluOpChangedStateNone},
|
||||
{"addsc", 2, false, kAluOpChangedStateNone},
|
||||
{"addsc", 2, false, kAluOpChangedStateNone},
|
||||
{"subsc", 2, false, kAluOpChangedStateNone},
|
||||
{"subsc", 2, false, kAluOpChangedStateNone},
|
||||
{"sin", 1, false, kAluOpChangedStateNone},
|
||||
{"cos", 1, false, kAluOpChangedStateNone},
|
||||
{"retain_prev", 0, false, kAluOpChangedStateNone},
|
||||
{"opcode_51", 0, false, kAluOpChangedStateNone},
|
||||
{"opcode_52", 0, false, kAluOpChangedStateNone},
|
||||
{"opcode_53", 0, false, kAluOpChangedStateNone},
|
||||
{"opcode_54", 0, false, kAluOpChangedStateNone},
|
||||
{"opcode_55", 0, false, kAluOpChangedStateNone},
|
||||
{"opcode_56", 0, false, kAluOpChangedStateNone},
|
||||
{"opcode_57", 0, false, kAluOpChangedStateNone},
|
||||
{"opcode_58", 0, false, kAluOpChangedStateNone},
|
||||
{"opcode_59", 0, false, kAluOpChangedStateNone},
|
||||
{"opcode_60", 0, false, kAluOpChangedStateNone},
|
||||
{"opcode_61", 0, false, kAluOpChangedStateNone},
|
||||
{"opcode_62", 0, false, kAluOpChangedStateNone},
|
||||
{"opcode_63", 0, false, kAluOpChangedStateNone},
|
||||
};
|
||||
|
||||
const AluVectorOpcodeInfo kAluVectorOpcodeInfos[32] = {
|
||||
{"add", {0b1111, 0b1111}, kAluOpChangedStateNone},
|
||||
{"mul", {0b1111, 0b1111}, kAluOpChangedStateNone},
|
||||
{"max", {0b1111, 0b1111}, kAluOpChangedStateNone},
|
||||
{"min", {0b1111, 0b1111}, kAluOpChangedStateNone},
|
||||
{"seq", {0b1111, 0b1111}, kAluOpChangedStateNone},
|
||||
{"sgt", {0b1111, 0b1111}, kAluOpChangedStateNone},
|
||||
{"sge", {0b1111, 0b1111}, kAluOpChangedStateNone},
|
||||
{"sne", {0b1111, 0b1111}, kAluOpChangedStateNone},
|
||||
{"frc", {0b1111}, kAluOpChangedStateNone},
|
||||
{"trunc", {0b1111}, kAluOpChangedStateNone},
|
||||
{"floor", {0b1111}, kAluOpChangedStateNone},
|
||||
{"mad", {0b1111, 0b1111, 0b1111}, kAluOpChangedStateNone},
|
||||
{"cndeq", {0b1111, 0b1111, 0b1111}, kAluOpChangedStateNone},
|
||||
{"cndge", {0b1111, 0b1111, 0b1111}, kAluOpChangedStateNone},
|
||||
{"cndgt", {0b1111, 0b1111, 0b1111}, kAluOpChangedStateNone},
|
||||
{"dp4", {0b1111, 0b1111}, kAluOpChangedStateNone},
|
||||
{"dp3", {0b0111, 0b0111}, kAluOpChangedStateNone},
|
||||
{"dp2add", {0b0011, 0b0011, 0b0001}, kAluOpChangedStateNone},
|
||||
{"cube", {0b1111, 0b1111}, kAluOpChangedStateNone},
|
||||
{"max4", {0b1111}, kAluOpChangedStateNone},
|
||||
{"setp_eq_push", {0b1001, 0b1001}, kAluOpChangedStatePredicate},
|
||||
{"setp_ne_push", {0b1001, 0b1001}, kAluOpChangedStatePredicate},
|
||||
{"setp_gt_push", {0b1001, 0b1001}, kAluOpChangedStatePredicate},
|
||||
{"setp_ge_push", {0b1001, 0b1001}, kAluOpChangedStatePredicate},
|
||||
{"kill_eq", {0b1111, 0b1111}, kAluOpChangedStatePixelKill},
|
||||
{"kill_gt", {0b1111, 0b1111}, kAluOpChangedStatePixelKill},
|
||||
{"kill_ge", {0b1111, 0b1111}, kAluOpChangedStatePixelKill},
|
||||
{"kill_ne", {0b1111, 0b1111}, kAluOpChangedStatePixelKill},
|
||||
{"dst", {0b0110, 0b1010}, kAluOpChangedStateNone},
|
||||
{"maxa", {0b1111, 0b1111}, kAluOpChangedStateAddressRegister},
|
||||
{"opcode_30", {}, kAluOpChangedStateNone},
|
||||
{"opcode_31", {}, kAluOpChangedStateNone},
|
||||
};
|
||||
|
||||
} // namespace ucode
|
||||
} // namespace gpu
|
||||
} // namespace xe
|
|
@ -2,7 +2,7 @@
|
|||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2015 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,14 +13,49 @@
|
|||
#include <cstdint>
|
||||
|
||||
#include "xenia/base/assert.h"
|
||||
#include "xenia/base/math.h"
|
||||
#include "xenia/base/platform.h"
|
||||
#include "xenia/gpu/xenos.h"
|
||||
|
||||
// Closest AMD doc:
|
||||
// The XNA Game Studio 3.1 contains Graphics.ShaderCompiler.AssembleFromSource,
|
||||
// which, for TargetPlatform.Xbox360, can validate and assemble Xbox 360 shader
|
||||
// microcode from Xbox 360 and Direct3D 9 shader assembly, returning the binary,
|
||||
// as well as validation warnings and errors and the disassembly via the warning
|
||||
// output. It is the primary source of information about the binary encoding of
|
||||
// the instructions, as well as valid usage of instruction parameters and
|
||||
// sequences.
|
||||
// https://www.microsoft.com/en-us/download/details.aspx?id=39
|
||||
// (XNAGS31_setup.exe)
|
||||
// Xenia provides a tool, tools/shader-playground, that invokes the assembler,
|
||||
// displays the binary and the disassembly from the official assembler, and also
|
||||
// shows the disassembly generated by Xenia, and passes it back to the assembler
|
||||
// to validate Xenia's microcode parsing and disassembly by checking if
|
||||
// reassembling the disassembly results in the same binary.
|
||||
//
|
||||
// The behavior and the parameters of some of the instructions were previously
|
||||
// documented on MSDN in the XNA Game Studio programming guide:
|
||||
// http://web.archive.org/web/20081211005537/http://msdn.microsoft.com/en-us/library/bb313877.aspx
|
||||
//
|
||||
// A great amount of documentation, such as the R400 sequencer specification and
|
||||
// the official emulator code, was made available during the LG Electronics,
|
||||
// Inc. v. ATI Technologies ULC "Multi-thread Graphics Processing System" patent
|
||||
// dispute IPR2015-00325, with the motion to seal having been denied due to "a
|
||||
// strong public policy interest in making all information filed in an inter
|
||||
// partes review publicly available". Most of the documents attached, however,
|
||||
// cover early versions - the development process - of the R400 architecture, so
|
||||
// there are some differences from the final Xenos GPU (DOT2ADDv is defined
|
||||
// differently, for example, and MUL/ADD/SUB_CONST are missing).
|
||||
// https://portal.unifiedpatents.com/ptab/case/IPR2015-00325
|
||||
//
|
||||
// Also, the R600, while having a different 5-scalar, as opposed to vec4|scalar,
|
||||
// parallelism model and instruction encodings and targeting Direct3D 10 rather
|
||||
// that 9, inherits a lot of instructions and architectural concepts from the
|
||||
// R400.
|
||||
// https://www.x.org/docs/AMD/old/r600isa.pdf
|
||||
// https://developer.amd.com/wordpress/media/2012/10/r600isa.pdf
|
||||
// https://developer.amd.com/wordpress/media/2012/10/R600_Instruction_Set_Architecture.pdf
|
||||
// Microcode format differs, but most fields/enums are the same.
|
||||
|
||||
// This code comes from the freedreno project:
|
||||
// Parts of this code also come from the freedreno project:
|
||||
// https://github.com/freedreno/freedreno/blob/master/includes/instr-a2xx.h
|
||||
/*
|
||||
* Copyright (c) 2012 Rob Clark <robdclark@gmail.com>
|
||||
|
@ -62,18 +97,44 @@ enum class ControlFlowOpcode : uint32_t {
|
|||
// Executes fetch or ALU instructions then ends execution.
|
||||
kExecEnd = 2,
|
||||
// Conditionally executes based on a bool const.
|
||||
// PredicateClean = false.
|
||||
kCondExec = 3,
|
||||
// Conditionally executes based on a bool const then ends execution.
|
||||
// PredicateClean = false.
|
||||
// According to the IPR2015-00325 sequencer specification, execution ends only
|
||||
// if the condition is actually met (unlike on the R600, where execution ends
|
||||
// unconditionally if END_OF_PROGRAM is set in the control flow instruction).
|
||||
// 4D5307ED has many shaders (used, in particular, in the Press Start screen
|
||||
// background) with if / else in its tail done via cexece - cexece b130, then
|
||||
// cexece !b130, and then an empty exece (if the condition was ignored, the
|
||||
// second cexece would have never been reached). Also, the validator reports
|
||||
// "Shader will try to execute instruction 3.0, but last possible instruction
|
||||
// is 2.1" for a shader that contains just one cexece without an exece.
|
||||
kCondExecEnd = 4,
|
||||
// Conditionally executes based on the current predicate.
|
||||
// Since 64 vertices or pixels are processed by each sequencer in the Xenos
|
||||
// hardware, the actual condition is AND of the predicate values for all
|
||||
// active (and not killed) invocations for (!p0) exec, and OR of them for
|
||||
// (p0) exec - if any of the invocations passes the predicate check, all of
|
||||
// them will enter the exec. This is according to the IPR2015-00325 sequencer
|
||||
// specification. Because of this, the compiler makes the ALU and fetch
|
||||
// instructions themselves inside a predicated exec predicated as well. The
|
||||
// validator also reports mismatch between the control flow predication and
|
||||
// ALU / fetch predication.
|
||||
kCondExecPred = 5,
|
||||
// Conditionally executes based on the current predicate then ends execution.
|
||||
// According to the IPR2015-00325 sequencer specification, execution ends only
|
||||
// if the condition is actually met for any of the invocations (unlike on the
|
||||
// R600, where execution ends unconditionally if END_OF_PROGRAM is set in the
|
||||
// control flow instruction).
|
||||
kCondExecPredEnd = 6,
|
||||
// Starts a loop that must be terminated with kLoopEnd.
|
||||
// Starts a loop that must be terminated with kLoopEnd, with depth of up to 4.
|
||||
kLoopStart = 7,
|
||||
// Continues or breaks out of a loop started with kLoopStart.
|
||||
// Continues or breaks out of a loop started with kLoopStart. According to the
|
||||
// IPR2015-00325 sequencer specification, the incrementing of the loop
|
||||
// iteration happens before the count and the predicated break checks.
|
||||
kLoopEnd = 8,
|
||||
// Conditionally calls a function.
|
||||
// Conditionally calls a function, with depth of up to 4.
|
||||
// A return address is pushed to the stack to be used by a kReturn.
|
||||
kCondCall = 9,
|
||||
// Returns from the current function as called by kCondCall.
|
||||
|
@ -83,11 +144,21 @@ enum class ControlFlowOpcode : uint32_t {
|
|||
kCondJmp = 11,
|
||||
// Allocates output values.
|
||||
kAlloc = 12,
|
||||
// Conditionally executes based on the current predicate.
|
||||
// Optionally resets the predicate value.
|
||||
// Conditionally executes based on a bool const.
|
||||
// PredicateClean = true.
|
||||
// This is cexec with a bool constant (kCondExec, can be verified by comparing
|
||||
// the XNA disassembler output with cexec containing and not containing a setp
|
||||
// instruction), not a kCondExecPred. kCondExec doesn't have a predicate clean
|
||||
// field (the space is occupied by the bool constant index), while
|
||||
// kCondExecPred itself does. This is unlike what the IPR2015-00325 sequencer
|
||||
// specification says about the Conditional_Execute_Predicates_No_Stall
|
||||
// instruction using this opcode (in the specification, this is described as
|
||||
// behaving like kCondExecPred with PredicateClean = false, but the
|
||||
// specification is likely highly outdated - it doesn't even have predicate
|
||||
// clean fields in exec instructions overall).
|
||||
kCondExecPredClean = 13,
|
||||
// Conditionally executes based on the current predicate then ends execution.
|
||||
// Optionally resets the predicate value.
|
||||
// Conditionally executes based on a bool const then ends execution.
|
||||
// PredicateClean = true.
|
||||
kCondExecPredCleanEnd = 14,
|
||||
// Hints that no more vertex fetches will be performed.
|
||||
kMarkVsFetchDone = 15,
|
||||
|
@ -115,9 +186,9 @@ constexpr bool DoesControlFlowOpcodeEndShader(ControlFlowOpcode opcode) {
|
|||
opcode == ControlFlowOpcode::kCondExecPredCleanEnd;
|
||||
}
|
||||
|
||||
// Returns true if the given control flow opcode resets the predicate prior to
|
||||
// execution.
|
||||
constexpr bool DoesControlFlowOpcodeCleanPredicate(ControlFlowOpcode opcode) {
|
||||
// See the description of ControlFlowOpcode::kCondExecPredClean.
|
||||
constexpr bool DoesControlFlowCondExecHaveCleanPredicate(
|
||||
ControlFlowOpcode opcode) {
|
||||
return opcode == ControlFlowOpcode::kCondExecPredClean ||
|
||||
opcode == ControlFlowOpcode::kCondExecPredCleanEnd;
|
||||
}
|
||||
|
@ -156,32 +227,41 @@ struct ControlFlowExecInstruction {
|
|||
uint32_t address() const { return address_; }
|
||||
// Number of instructions being executed.
|
||||
uint32_t count() const { return count_; }
|
||||
// Sequence bits, 2 per instruction, indicating whether ALU or fetch.
|
||||
uint32_t sequence() const { return serialize_; }
|
||||
// Whether to reset the current predicate.
|
||||
bool clean() const { return clean_ == 1; }
|
||||
// Sequence bits, 2 per instruction.
|
||||
// [0] - ALU (0) or fetch (1), [1] - serialize.
|
||||
uint32_t sequence() const { return sequence_; }
|
||||
bool is_predicate_clean() const { return is_predicate_clean_ == 1; }
|
||||
// ?
|
||||
bool is_yield() const { return is_yeild_ == 1; }
|
||||
bool is_yield() const { return is_yield_ == 1; }
|
||||
|
||||
private:
|
||||
// Word 0: (32 bits)
|
||||
uint32_t address_ : 12;
|
||||
uint32_t count_ : 3;
|
||||
uint32_t is_yeild_ : 1;
|
||||
uint32_t serialize_ : 12;
|
||||
uint32_t is_yield_ : 1;
|
||||
uint32_t sequence_ : 12;
|
||||
uint32_t vc_hi_ : 4; // Vertex cache?
|
||||
|
||||
// Word 1: (16 bits)
|
||||
uint32_t vc_lo_ : 2;
|
||||
uint32_t : 7;
|
||||
uint32_t clean_ : 1;
|
||||
// According to the description of Conditional_Execute_Predicates_No_Stall in
|
||||
// the IPR2015-00325 sequencer specification, the sequencer's control flow
|
||||
// logic will not wait for the predicate to be updated (apparently after this
|
||||
// exec). The compiler specifies PredicateClean=false for the exec if the
|
||||
// instructions inside it modify the predicate (but if the predicate set is
|
||||
// only a refinement of the current predicate, like in case of a nested `if`,
|
||||
// PredicateClean=true may still be set according to the IPR2015-00325
|
||||
// sequencer specification, because the optimization would still work).
|
||||
uint32_t is_predicate_clean_ : 1;
|
||||
uint32_t : 1;
|
||||
AddressingMode address_mode_ : 1;
|
||||
ControlFlowOpcode opcode_ : 4;
|
||||
};
|
||||
static_assert_size(ControlFlowExecInstruction, sizeof(uint32_t) * 2);
|
||||
|
||||
// Instruction data for ControlFlowOpcode::kCondExec and kCondExecEnd.
|
||||
// Instruction data for ControlFlowOpcode::kCondExec, kCondExecEnd,
|
||||
// kCondExecPredClean and kCondExecPredCleanEnd.
|
||||
struct ControlFlowCondExecInstruction {
|
||||
ControlFlowOpcode opcode() const { return opcode_; }
|
||||
AddressingMode addressing_mode() const { return address_mode_; }
|
||||
|
@ -189,21 +269,22 @@ struct ControlFlowCondExecInstruction {
|
|||
uint32_t address() const { return address_; }
|
||||
// Number of instructions being executed.
|
||||
uint32_t count() const { return count_; }
|
||||
// Sequence bits, 2 per instruction, indicating whether ALU or fetch.
|
||||
uint32_t sequence() const { return serialize_; }
|
||||
// Sequence bits, 2 per instruction.
|
||||
// [0] - ALU (0) or fetch (1), [1] - serialize.
|
||||
uint32_t sequence() const { return sequence_; }
|
||||
// Constant index used as the conditional.
|
||||
uint32_t bool_address() const { return bool_address_; }
|
||||
// Required condition value of the comparision (true or false).
|
||||
bool condition() const { return condition_ == 1; }
|
||||
// ?
|
||||
bool is_yield() const { return is_yeild_ == 1; }
|
||||
bool is_yield() const { return is_yield_ == 1; }
|
||||
|
||||
private:
|
||||
// Word 0: (32 bits)
|
||||
uint32_t address_ : 12;
|
||||
uint32_t count_ : 3;
|
||||
uint32_t is_yeild_ : 1;
|
||||
uint32_t serialize_ : 12;
|
||||
uint32_t is_yield_ : 1;
|
||||
uint32_t sequence_ : 12;
|
||||
uint32_t vc_hi_ : 4; // Vertex cache?
|
||||
|
||||
// Word 1: (16 bits)
|
||||
|
@ -215,8 +296,7 @@ struct ControlFlowCondExecInstruction {
|
|||
};
|
||||
static_assert_size(ControlFlowCondExecInstruction, sizeof(uint32_t) * 2);
|
||||
|
||||
// Instruction data for ControlFlowOpcode::kCondExecPred, kCondExecPredEnd,
|
||||
// kCondExecPredClean, kCondExecPredCleanEnd.
|
||||
// Instruction data for ControlFlowOpcode::kCondExecPred and kCondExecPredEnd.
|
||||
struct ControlFlowCondExecPredInstruction {
|
||||
ControlFlowOpcode opcode() const { return opcode_; }
|
||||
AddressingMode addressing_mode() const { return address_mode_; }
|
||||
|
@ -224,27 +304,27 @@ struct ControlFlowCondExecPredInstruction {
|
|||
uint32_t address() const { return address_; }
|
||||
// Number of instructions being executed.
|
||||
uint32_t count() const { return count_; }
|
||||
// Sequence bits, 2 per instruction, indicating whether ALU or fetch.
|
||||
uint32_t sequence() const { return serialize_; }
|
||||
// Whether to reset the current predicate.
|
||||
bool clean() const { return clean_ == 1; }
|
||||
// Sequence bits, 2 per instruction.
|
||||
// [0] - ALU (0) or fetch (1), [1] - serialize.
|
||||
uint32_t sequence() const { return sequence_; }
|
||||
bool is_predicate_clean() const { return is_predicate_clean_ == 1; }
|
||||
// Required condition value of the comparision (true or false).
|
||||
bool condition() const { return condition_ == 1; }
|
||||
// ?
|
||||
bool is_yield() const { return is_yeild_ == 1; }
|
||||
bool is_yield() const { return is_yield_ == 1; }
|
||||
|
||||
private:
|
||||
// Word 0: (32 bits)
|
||||
uint32_t address_ : 12;
|
||||
uint32_t count_ : 3;
|
||||
uint32_t is_yeild_ : 1;
|
||||
uint32_t serialize_ : 12;
|
||||
uint32_t is_yield_ : 1;
|
||||
uint32_t sequence_ : 12;
|
||||
uint32_t vc_hi_ : 4; // Vertex cache?
|
||||
|
||||
// Word 1: (16 bits)
|
||||
uint32_t vc_lo_ : 2;
|
||||
uint32_t : 7;
|
||||
uint32_t clean_ : 1;
|
||||
uint32_t is_predicate_clean_ : 1;
|
||||
uint32_t condition_ : 1;
|
||||
AddressingMode address_mode_ : 1;
|
||||
ControlFlowOpcode opcode_ : 4;
|
||||
|
@ -255,12 +335,13 @@ static_assert_size(ControlFlowCondExecPredInstruction, sizeof(uint32_t) * 2);
|
|||
struct ControlFlowLoopStartInstruction {
|
||||
ControlFlowOpcode opcode() const { return opcode_; }
|
||||
AddressingMode addressing_mode() const { return address_mode_; }
|
||||
// Target address to jump to when skipping the loop.
|
||||
// Target address to jump to when skipping the loop (normally points to the
|
||||
// instruction right after the `endloop` instruction).
|
||||
uint32_t address() const { return address_; }
|
||||
// Whether to reuse the current aL instead of reset it to loop start.
|
||||
bool is_repeat() const { return is_repeat_; }
|
||||
// Integer constant register that holds the loop parameters.
|
||||
// 0:7 - uint8 loop count, 8:15 - uint8 start aL, 16:23 - int8 aL step.
|
||||
// Integer constant register that holds the loop parameters
|
||||
// (xenos::LoopConstant).
|
||||
uint32_t loop_id() const { return loop_id_; }
|
||||
|
||||
private:
|
||||
|
@ -282,12 +363,14 @@ static_assert_size(ControlFlowLoopStartInstruction, sizeof(uint32_t) * 2);
|
|||
struct ControlFlowLoopEndInstruction {
|
||||
ControlFlowOpcode opcode() const { return opcode_; }
|
||||
AddressingMode addressing_mode() const { return address_mode_; }
|
||||
// Target address of the start of the loop body.
|
||||
// Target address of the start of the loop body (normally points to the
|
||||
// instruction right after the `loop` instruction).
|
||||
uint32_t address() const { return address_; }
|
||||
// Integer constant register that holds the loop parameters.
|
||||
// 0:7 - uint8 loop count, 8:15 - uint8 start aL, 16:23 - int8 aL step.
|
||||
// Integer constant register that holds the loop parameters
|
||||
// (xenos::LoopConstant).
|
||||
uint32_t loop_id() const { return loop_id_; }
|
||||
// Break from the loop if the predicate matches the expected value.
|
||||
// Break from the loop if the predicate in all 64 invocations matches the
|
||||
// expected value.
|
||||
bool is_predicated_break() const { return is_predicated_break_; }
|
||||
// Required condition value of the comparision (true or false).
|
||||
bool condition() const { return condition_ == 1; }
|
||||
|
@ -591,6 +674,24 @@ enum class FetchOpcode : uint32_t {
|
|||
kSetTextureGradientsVert = 26,
|
||||
};
|
||||
|
||||
enum class FetchDestinationSwizzle {
|
||||
// The component indices are absolute (not relative to the component itself,
|
||||
// unlike in ALU operation sources).
|
||||
kX = 0,
|
||||
kY = 1,
|
||||
kZ = 2,
|
||||
kW = 3,
|
||||
k0 = 4,
|
||||
k1 = 5,
|
||||
// Keep the current value of the destination register (don't write).
|
||||
kKeep = 7,
|
||||
};
|
||||
|
||||
constexpr FetchDestinationSwizzle GetFetchDestinationComponentSwizzle(
|
||||
uint32_t swizzle, uint32_t component) {
|
||||
return FetchDestinationSwizzle((swizzle >> (3 * component)) & 0b111);
|
||||
}
|
||||
|
||||
struct alignas(uint32_t) VertexFetchInstruction {
|
||||
FetchOpcode opcode() const { return data_.opcode_value; }
|
||||
|
||||
|
@ -614,29 +715,6 @@ struct alignas(uint32_t) VertexFetchInstruction {
|
|||
uint32_t src_swizzle() const { return data_.src_swiz; }
|
||||
bool is_src_relative() const { return data_.src_reg_am; }
|
||||
|
||||
// Returns true if the fetch actually fetches data.
|
||||
// This may be false if it's used only to populate constants.
|
||||
bool fetches_any_data() const {
|
||||
uint32_t dst_swiz = data_.dst_swiz;
|
||||
bool fetches_any_data = false;
|
||||
for (int i = 0; i < 4; i++) {
|
||||
if ((dst_swiz & 0x7) == 4) {
|
||||
// 0.0
|
||||
} else if ((dst_swiz & 0x7) == 5) {
|
||||
// 1.0
|
||||
} else if ((dst_swiz & 0x7) == 6) {
|
||||
// ?
|
||||
} else if ((dst_swiz & 0x7) == 7) {
|
||||
// Previous register value.
|
||||
} else {
|
||||
fetches_any_data = true;
|
||||
break;
|
||||
}
|
||||
dst_swiz >>= 3;
|
||||
}
|
||||
return fetches_any_data;
|
||||
}
|
||||
|
||||
uint32_t prefetch_count() const { return data_.prefetch_count; }
|
||||
bool is_mini_fetch() const { return data_.is_mini_fetch == 1; }
|
||||
|
||||
|
@ -676,6 +754,7 @@ struct alignas(uint32_t) VertexFetchInstruction {
|
|||
uint32_t const_index_sel : 2;
|
||||
// Prefetch count minus 1.
|
||||
uint32_t prefetch_count : 3;
|
||||
// Absolute, one component.
|
||||
uint32_t src_swiz : 2;
|
||||
};
|
||||
struct {
|
||||
|
@ -769,10 +848,11 @@ struct alignas(uint32_t) TextureFetchInstruction {
|
|||
uint32_t fetch_valid_only : 1;
|
||||
uint32_t const_index : 5;
|
||||
uint32_t tx_coord_denorm : 1;
|
||||
uint32_t src_swiz : 6; // xyz
|
||||
// Absolute, three components.
|
||||
uint32_t src_swiz : 6;
|
||||
};
|
||||
struct {
|
||||
uint32_t dst_swiz : 12; // xyzw
|
||||
uint32_t dst_swiz : 12;
|
||||
xenos::TextureFilter mag_filter : 2;
|
||||
xenos::TextureFilter min_filter : 2;
|
||||
xenos::TextureFilter mip_filter : 2;
|
||||
|
@ -801,21 +881,97 @@ struct alignas(uint32_t) TextureFetchInstruction {
|
|||
};
|
||||
static_assert_size(TextureFetchInstruction, sizeof(uint32_t) * 3);
|
||||
|
||||
union alignas(uint32_t) FetchInstruction {
|
||||
public:
|
||||
FetchOpcode opcode() const { return data_.opcode_value; }
|
||||
|
||||
// Whether the jump is predicated (or conditional).
|
||||
bool is_predicated() const { return data_.is_predicated; }
|
||||
// Required condition value of the comparision (true or false).
|
||||
bool predicate_condition() const { return data_.pred_condition == 1; }
|
||||
|
||||
uint32_t dest() const { return data_.dst_reg; }
|
||||
uint32_t dest_swizzle() const { return data_.dst_swiz; }
|
||||
bool is_dest_relative() const { return data_.dst_reg_am; }
|
||||
uint32_t src() const { return data_.src_reg; }
|
||||
bool is_src_relative() const { return data_.src_reg_am; }
|
||||
|
||||
// For FetchOpcode::kVertexFetch.
|
||||
const VertexFetchInstruction& vertex_fetch() const { return vertex_fetch_; }
|
||||
// For operations other than FetchOpcode::kVertexFetch.
|
||||
const TextureFetchInstruction& texture_fetch() const {
|
||||
return texture_fetch_;
|
||||
}
|
||||
|
||||
private:
|
||||
struct Data {
|
||||
struct {
|
||||
FetchOpcode opcode_value : 5;
|
||||
uint32_t src_reg : 6;
|
||||
uint32_t src_reg_am : 1;
|
||||
uint32_t dst_reg : 6;
|
||||
uint32_t dst_reg_am : 1;
|
||||
// Specific to vertex or texture fetch.
|
||||
uint32_t : 1;
|
||||
// [0-31], points to one tf# or three vf# constants.
|
||||
uint32_t const_index : 5;
|
||||
// Specific to vertex or texture fetch.
|
||||
uint32_t : 7;
|
||||
};
|
||||
struct {
|
||||
uint32_t dst_swiz : 12;
|
||||
// Specific to vertex or texture fetch.
|
||||
uint32_t : 19;
|
||||
uint32_t is_predicated : 1;
|
||||
};
|
||||
struct {
|
||||
// Specific to vertex or texture fetch.
|
||||
uint32_t : 31;
|
||||
uint32_t pred_condition : 1;
|
||||
};
|
||||
};
|
||||
Data data_;
|
||||
VertexFetchInstruction vertex_fetch_;
|
||||
TextureFetchInstruction texture_fetch_;
|
||||
};
|
||||
static_assert_size(FetchInstruction, sizeof(uint32_t) * 3);
|
||||
|
||||
// What follows is largely a mash up of the microcode assembly naming and the
|
||||
// R600 docs that have a near 1:1 with the instructions available in the xenos
|
||||
// R600 docs that have a near 1:1 with the instructions available in the Xenos
|
||||
// GPU, and Adreno 2xx instruction names found in Freedreno. Some of the
|
||||
// behavior has been experimentally verified. Some has been guessed.
|
||||
// Docs: https://www.x.org/docs/AMD/old/r600isa.pdf
|
||||
// behavior has been experimentally verified. Some has been guessed. Some
|
||||
// instructions are implemented in the Exhibit 2092 - sq_alu of IPR2015-00325,
|
||||
// however, the code provided there is early and incomplete.
|
||||
//
|
||||
// Conventions:
|
||||
// - All temporary registers are vec4s.
|
||||
// - Scalar ops swizzle out a single component of their source registers denoted
|
||||
// by 'a' or 'b'. src0.a means 'the first component specified for src0' and
|
||||
// src0.ab means 'two components specified for src0, in order'.
|
||||
// - Scalar ops write the result to the entire destination register.
|
||||
// - pv and ps are the previous results of a vector or scalar ALU operation.
|
||||
// Both are valid only within the current ALU clause. They are not modified
|
||||
// when the instruction that would write them fails its predication check.
|
||||
// - Most scalar ALU operations work with one or two components of the source
|
||||
// register or the float constant passed as the third operand of the whole
|
||||
// co-issued ALU operation, denoted by `a` (the left-hand operand) and `b`
|
||||
// (the right-hand operand).
|
||||
// `a` is the [(3 + src3_swizzle[6:7]) & 3] component (W - alpha).
|
||||
// `b` is the [(0 + src3_swizzle[0:1]) & 3] component (X - red).
|
||||
// - mulsc, addsc, subsc scalar ALU operations accept two operands - a float
|
||||
// constant with the `a` (W) swizzle (addressed by the third operand index and
|
||||
// addressing mode) being the left-hand operand, and a temporary register with
|
||||
// the `b` (X) swizzle with the index constructed from:
|
||||
// - [0:0] = scalar_opcode[0:0]
|
||||
// - [1:1] = src3_sel[0:0]
|
||||
// - [2:5] = src3_swizzle[2:5]
|
||||
// abs_constants and third source's negation are applied to both the constant
|
||||
// and the temporary register.
|
||||
// - Some scalar ALU instructions don't have operands.
|
||||
// - Scalar ALU operations replicate the result into all masked components.
|
||||
// - Overall, the WXYZ order is pretty commonly used in the Exhibit 2092 -
|
||||
// sq_alu of IPR2015-00325, this is where the AB = WX order of scalar operands
|
||||
// likely comes from. Vector predicate instructions also involve the W and X
|
||||
// components, and in IPR2015-00325 sq_alu, individual components in the
|
||||
// emulated vector instructions are handled in the WXYZ order. However, max4's
|
||||
// "greater than the rest" check order is RGBA (XYZW) there. dp4, though, sums
|
||||
// the products in WXYZ order in IPR2015-00325 sq_alu (but in XYZW order on
|
||||
// MSDN).
|
||||
// - ps is the previous result of a scalar ALU operation. It is not modified
|
||||
// when the instruction that would write it fails its predication check.
|
||||
// - Direct3D 9 rules (like in GCN v_*_legacy_f32 instructions) for
|
||||
// multiplication (+-0 or denormal * anything = +0) wherever it's present
|
||||
// (mul, mad, dp, etc.) and for NaN in min/max. It's very important to respect
|
||||
|
@ -839,6 +995,14 @@ static_assert_size(TextureFetchInstruction, sizeof(uint32_t) * 3);
|
|||
// use instructions that may be interpreted by the host GPU as fused
|
||||
// multiply-add.
|
||||
|
||||
// For analysis of shaders and skipping instructions that write nothing.
|
||||
enum AluOpChangedState {
|
||||
kAluOpChangedStateNone = 0,
|
||||
kAluOpChangedStateAddressRegister = 1 << 0,
|
||||
kAluOpChangedStatePredicate = 1 << 1,
|
||||
kAluOpChangedStatePixelKill = 1 << 2,
|
||||
};
|
||||
|
||||
enum class AluScalarOpcode : uint32_t {
|
||||
// Floating-Point Add
|
||||
// adds/ADDs dest, src0.ab
|
||||
|
@ -1137,6 +1301,9 @@ enum class AluScalarOpcode : uint32_t {
|
|||
// dest.xyzw = sqrt(src0.a);
|
||||
kSqrt = 40,
|
||||
|
||||
// 0 and 1 are the same instruction - one bit of the register index is stored
|
||||
// in the opcode field.
|
||||
|
||||
// mulsc/MUL_CONST_0 dest, src0.a, src1.a
|
||||
kMulsc0 = 42,
|
||||
// mulsc/MUL_CONST_1 dest, src0.a, src1.a
|
||||
|
@ -1165,17 +1332,28 @@ enum class AluScalarOpcode : uint32_t {
|
|||
kRetainPrev = 50,
|
||||
};
|
||||
|
||||
constexpr bool AluScalarOpcodeIsKill(AluScalarOpcode scalar_opcode) {
|
||||
switch (scalar_opcode) {
|
||||
case AluScalarOpcode::kKillsEq:
|
||||
case AluScalarOpcode::kKillsGt:
|
||||
case AluScalarOpcode::kKillsGe:
|
||||
case AluScalarOpcode::kKillsNe:
|
||||
case AluScalarOpcode::kKillsOne:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
struct AluScalarOpcodeInfo {
|
||||
const char* name;
|
||||
// 0 - no operands.
|
||||
// 1 - one single-component (W) or two-component (WX) r# or c#.
|
||||
// 2 - c#.w and r#.x.
|
||||
uint32_t operand_count;
|
||||
// If operand_count is 1, whether both W and X of the operand are used rather
|
||||
// than only W.
|
||||
bool single_operand_is_two_component;
|
||||
// Note that all scalar instructions except for retain_prev modify the
|
||||
// previous scalar register, so they must be executed even if they don't write
|
||||
// any result and don't perform any other state changes.
|
||||
AluOpChangedState changed_state;
|
||||
};
|
||||
|
||||
// 6 scalar opcode bits - 64 entries.
|
||||
extern const AluScalarOpcodeInfo kAluScalarOpcodeInfos[64];
|
||||
|
||||
inline const AluScalarOpcodeInfo& GetAluScalarOpcodeInfo(
|
||||
AluScalarOpcode opcode) {
|
||||
assert_true(uint32_t(opcode) < xe::countof(kAluScalarOpcodeInfos));
|
||||
return kAluScalarOpcodeInfos[uint32_t(opcode)];
|
||||
}
|
||||
|
||||
enum class AluVectorOpcode : uint32_t {
|
||||
|
@ -1273,6 +1451,9 @@ enum class AluVectorOpcode : uint32_t {
|
|||
// dest.y = src0.y * src1.y + src2.y;
|
||||
// dest.z = src0.z * src1.z + src2.z;
|
||||
// dest.w = src0.w * src1.w + src2.w;
|
||||
// According to SQ_ALU::multiply_add (used in the isHardwareAccurate case)
|
||||
// from IPR2015-00325 sq_alu, this is FMA - rounding to single-precision only
|
||||
// after the addition.
|
||||
kMad = 11,
|
||||
|
||||
// Per-Component Floating-Point Conditional Move If Equal
|
||||
|
@ -1303,19 +1484,24 @@ enum class AluVectorOpcode : uint32_t {
|
|||
// dp4/DOT4v dest, src0, src1
|
||||
// dest.xyzw = src0.x * src1.x + src0.y * src1.y + src0.z * src1.z +
|
||||
// src0.w * src1.w;
|
||||
// Note: only pv.x contains the value.
|
||||
kDp4 = 15,
|
||||
|
||||
// Three-Element Dot Product
|
||||
// dp3/DOT3v dest, src0, src1
|
||||
// dest.xyzw = src0.x * src1.x + src0.y * src1.y + src0.z * src1.z;
|
||||
// Note: only pv.x contains the value.
|
||||
kDp3 = 16,
|
||||
|
||||
// Two-Element Dot Product and Add
|
||||
// dp2add/DOT2ADDv dest, src0, src1, src2
|
||||
// dest.xyzw = src0.x * src1.x + src0.y * src1.y + src2.x;
|
||||
// Note: only pv.x contains the value.
|
||||
// IPR2015-00325 sq_alu may be an outdated and unreliable reference (Sequencer
|
||||
// Parts Development folder history lists a few changes regarding the swizzle
|
||||
// in dot2add, sq_alu though implements the instruction as
|
||||
// src0.x * src1.x + src0.z * src1.z + src2.y, but MSDN specifies the correct
|
||||
// order as provided in the beginning of this comment, further proven by
|
||||
// assembling PC shader assembly using XNA, with Shader Model 2 dp2add being
|
||||
// translated directly into Xenos dp2add without additional swizzling).
|
||||
// http://web.archive.org/web/20100705150552/http://msdn.microsoft.com/en-us/library/bb313922.aspx
|
||||
kDp2Add = 17,
|
||||
|
||||
// Cube Map
|
||||
|
@ -1363,8 +1549,27 @@ enum class AluVectorOpcode : uint32_t {
|
|||
|
||||
// Four-Element Maximum
|
||||
// max4/MAX4v dest, src0
|
||||
// dest.xyzw = max(src0.x, src0.y, src0.z, src0.w);
|
||||
// Note: only pv.x contains the value.
|
||||
// According to IPR2015-00325 sq_alu:
|
||||
// if (src0.x > src0.y && src0.x > src0.z && src0.x > src0.w) {
|
||||
// dest.xyzw = src0.x;
|
||||
// } else if (src0.y > src0.z && src0.y > src0.w) {
|
||||
// dest.xyzw = src0.y;
|
||||
// } else if (src0.z > src0.w) {
|
||||
// dest.xyzw = src0.z;
|
||||
// } else {
|
||||
// dest.xyzw = src0.w;
|
||||
// }
|
||||
// However, the comparisons may be >= actually - the XNA documentation on
|
||||
// MSDN, as well as R600 and GCN documentation, describe `max` as being
|
||||
// implemented via >= rather than >. `max4` is documented vaguely, without the
|
||||
// exact calculations for each component - MSDN describes it as max(xyzw), and
|
||||
// in the R600 documentation it's max(wzyx). There's also a case more similar
|
||||
// to `max4` where there also is a discrepancy between IPR2015-00325 sq_alu
|
||||
// and the GCN documentation - `cube` has max3 in zyx priority order, and a >=
|
||||
// comparison is used for this purpose on the GCN, but in IPR2015-00325 sq_alu
|
||||
// it's implemented via >. It's possible that in an early version of the R400,
|
||||
// the comparison was >, but was later changed to >=, but this is merely a
|
||||
// guess.
|
||||
kMax4 = 19,
|
||||
|
||||
// Floating-Point Predicate Counter Increment If Equal
|
||||
|
@ -1502,60 +1707,32 @@ enum class AluVectorOpcode : uint32_t {
|
|||
kMaxA = 29,
|
||||
};
|
||||
|
||||
constexpr bool AluVectorOpcodeIsKill(AluVectorOpcode vector_opcode) {
|
||||
switch (vector_opcode) {
|
||||
case AluVectorOpcode::kKillEq:
|
||||
case AluVectorOpcode::kKillGt:
|
||||
case AluVectorOpcode::kKillGe:
|
||||
case AluVectorOpcode::kKillNe:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
struct AluVectorOpcodeInfo {
|
||||
const char* name;
|
||||
uint32_t operand_components_used[3];
|
||||
AluOpChangedState changed_state;
|
||||
|
||||
// Whether the vector instruction has side effects such as discarding a pixel or
|
||||
// setting the predicate and can't be ignored even if it doesn't write to
|
||||
// anywhere. Note that all scalar operations except for retain_prev have a side
|
||||
// effect of modifying the previous scalar result register, so they must always
|
||||
// be executed even if not writing.
|
||||
constexpr bool AluVectorOpHasSideEffects(AluVectorOpcode vector_opcode) {
|
||||
if (AluVectorOpcodeIsKill(vector_opcode)) {
|
||||
return true;
|
||||
uint32_t GetOperandCount() const {
|
||||
if (!operand_components_used[2]) {
|
||||
if (!operand_components_used[1]) {
|
||||
if (!operand_components_used[0]) {
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
return 2;
|
||||
}
|
||||
return 3;
|
||||
}
|
||||
switch (vector_opcode) {
|
||||
case AluVectorOpcode::kSetpEqPush:
|
||||
case AluVectorOpcode::kSetpNePush:
|
||||
case AluVectorOpcode::kSetpGtPush:
|
||||
case AluVectorOpcode::kSetpGePush:
|
||||
case AluVectorOpcode::kMaxA:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// Whether each component of a source operand is used at all in the instruction
|
||||
// (doesn't check the operand count though).
|
||||
constexpr uint32_t GetAluVectorOpUsedSourceComponents(
|
||||
AluVectorOpcode vector_opcode, uint32_t src_index) {
|
||||
assert_not_zero(src_index);
|
||||
switch (vector_opcode) {
|
||||
case AluVectorOpcode::kDp3:
|
||||
return 0b0111;
|
||||
case AluVectorOpcode::kDp2Add:
|
||||
return src_index == 3 ? 0b0001 : 0b0011;
|
||||
case AluVectorOpcode::kSetpEqPush:
|
||||
case AluVectorOpcode::kSetpNePush:
|
||||
case AluVectorOpcode::kSetpGtPush:
|
||||
case AluVectorOpcode::kSetpGePush:
|
||||
return 0b1001;
|
||||
case AluVectorOpcode::kDst:
|
||||
return src_index == 2 ? 0b1010 : 0b0110;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return 0b1111;
|
||||
// 5 vector opcode bits - 32 entries.
|
||||
extern const AluVectorOpcodeInfo kAluVectorOpcodeInfos[32];
|
||||
|
||||
inline const AluVectorOpcodeInfo& GetAluVectorOpcodeInfo(
|
||||
AluVectorOpcode opcode) {
|
||||
assert_true(uint32_t(opcode) < xe::countof(kAluVectorOpcodeInfos));
|
||||
return kAluVectorOpcodeInfos[uint32_t(opcode)];
|
||||
}
|
||||
|
||||
// Whether each component of a source operand is needed for the instruction if
|
||||
|
@ -1563,7 +1740,7 @@ constexpr uint32_t GetAluVectorOpUsedSourceComponents(
|
|||
// undefined in translation. For per-component operations, for example, only the
|
||||
// components specified in the write mask are needed, but there are instructions
|
||||
// with special behavior for certain components.
|
||||
constexpr uint32_t GetAluVectorOpNeededSourceComponents(
|
||||
inline uint32_t GetAluVectorOpNeededSourceComponents(
|
||||
AluVectorOpcode vector_opcode, uint32_t src_index,
|
||||
uint32_t used_result_components) {
|
||||
assert_not_zero(src_index);
|
||||
|
@ -1596,8 +1773,8 @@ constexpr uint32_t GetAluVectorOpNeededSourceComponents(
|
|||
case AluVectorOpcode::kKillNe:
|
||||
components = 0b1111;
|
||||
break;
|
||||
// kDst is per-component, but not all components are used -
|
||||
// GetAluVectorOpUsedSourceComponents will filter out the unused ones.
|
||||
// kDst is per-component, but not all components are used.
|
||||
// operand_components_used will filter out the unused ones.
|
||||
case AluVectorOpcode::kMaxA:
|
||||
if (src_index == 1) {
|
||||
components |= 0b1000;
|
||||
|
@ -1606,8 +1783,8 @@ constexpr uint32_t GetAluVectorOpNeededSourceComponents(
|
|||
default:
|
||||
break;
|
||||
}
|
||||
return components &
|
||||
GetAluVectorOpUsedSourceComponents(vector_opcode, src_index);
|
||||
return components & GetAluVectorOpcodeInfo(vector_opcode)
|
||||
.operand_components_used[src_index - 1];
|
||||
}
|
||||
|
||||
enum class ExportRegister : uint32_t {
|
||||
|
@ -1633,10 +1810,24 @@ enum class ExportRegister : uint32_t {
|
|||
// See R6xx/R7xx registers for details (USE_VTX_POINT_SIZE, USE_VTX_EDGE_FLAG,
|
||||
// USE_VTX_KILL_FLAG).
|
||||
// X - PSIZE (gl_PointSize).
|
||||
// According to tests and GL_AMD_program_binary_Z400 disassembly on an
|
||||
// Adreno 200 device:
|
||||
// * This is the full width and height of the point sprite (not half -
|
||||
// gl_PointSize goes directly to oPts.x).
|
||||
// * Clamped to PA_SU_POINT_MINMAX as a signed integer in rasterization:
|
||||
// * -NaN - min
|
||||
// * -Infinity - min
|
||||
// * -Normal - min
|
||||
// * -0 (0x80000000 - the smallest signed integer) - min
|
||||
// * +0 - min
|
||||
// * +Infinity - max
|
||||
// * +NaN - max
|
||||
// Y - EDGEFLAG (glEdgeFlag) for PrimitiveType::kPolygon wireframe/point
|
||||
// drawing.
|
||||
// Z - KILLVERTEX flag (used in 4D5307ED for grass), set for killing
|
||||
// primitives based on PA_CL_CLIP_CNTL::VTX_KILL_OR condition.
|
||||
// primitives based on PA_CL_CLIP_CNTL::VTX_KILL_OR condition if bits 0:30
|
||||
// of this export value (the sign bit is ignored according to the
|
||||
// IPR2015-00325 sequencer specification) are not zero.
|
||||
kVSPointSizeEdgeFlagKillVertex = 63,
|
||||
|
||||
kPSColor0 = 0,
|
||||
|
@ -1662,7 +1853,6 @@ struct alignas(uint32_t) AluInstruction {
|
|||
|
||||
// Whether data is being exported (or written to local registers).
|
||||
bool is_export() const { return data_.export_data == 1; }
|
||||
bool export_write_mask() const { return data_.scalar_dest_rel == 1; }
|
||||
|
||||
// Whether the jump is predicated (or conditional).
|
||||
bool is_predicated() const { return data_.is_predicated; }
|
||||
|
@ -1672,7 +1862,9 @@ struct alignas(uint32_t) AluInstruction {
|
|||
bool abs_constants() const { return data_.abs_constants == 1; }
|
||||
bool is_const_0_addressed() const { return data_.const_0_rel_abs == 1; }
|
||||
bool is_const_1_addressed() const { return data_.const_1_rel_abs == 1; }
|
||||
bool is_address_relative() const { return data_.address_absolute == 1; }
|
||||
bool is_const_address_register_relative() const {
|
||||
return data_.const_address_register_relative == 1;
|
||||
}
|
||||
|
||||
AluVectorOpcode vector_opcode() const { return data_.vector_opc; }
|
||||
uint32_t vector_write_mask() const { return data_.vector_write_mask; }
|
||||
|
@ -1686,6 +1878,18 @@ struct alignas(uint32_t) AluInstruction {
|
|||
bool is_scalar_dest_relative() const { return data_.scalar_dest_rel == 1; }
|
||||
bool scalar_clamp() const { return data_.scalar_clamp == 1; }
|
||||
|
||||
static constexpr uint32_t src_temp_reg(uint32_t src_reg) {
|
||||
return src_reg & 0x3F;
|
||||
}
|
||||
static constexpr bool is_src_temp_relative(uint32_t src_reg) {
|
||||
return (src_reg & 0x40) != 0;
|
||||
}
|
||||
static constexpr bool is_src_temp_value_absolute(uint32_t src_reg) {
|
||||
return (src_reg & 0x80) != 0;
|
||||
}
|
||||
// Full register index for constants, packed structure for temporary
|
||||
// registers (unpack using src_temp_reg, is_src_temp_relative,
|
||||
// is_src_temp_value_absolute).
|
||||
uint32_t src_reg(size_t i) const {
|
||||
switch (i) {
|
||||
case 1:
|
||||
|
@ -1702,16 +1906,59 @@ struct alignas(uint32_t) AluInstruction {
|
|||
bool src_is_temp(size_t i) const {
|
||||
switch (i) {
|
||||
case 1:
|
||||
return data_.src1_sel == 1;
|
||||
return bool(data_.src1_sel);
|
||||
case 2:
|
||||
return data_.src2_sel == 1;
|
||||
return bool(data_.src2_sel);
|
||||
case 3:
|
||||
return data_.src3_sel == 1;
|
||||
return bool(data_.src3_sel);
|
||||
default:
|
||||
assert_unhandled_case(i);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
// Whether the specified operand is actually a constant is disregarded in this
|
||||
// function so its scope is limited to just parsing the structure's layout -
|
||||
// to decide whether to use relative addressing for the operand as a whole,
|
||||
// check externally whether the operand is actually a constant first.
|
||||
//
|
||||
// For the constant operand in mulsc, addsc, subsc, this should be called for
|
||||
// the operand index 3. Note that the XNA disassembler takes the addressing
|
||||
// mode for the constant scalar operand unconditionally from const_1_rel_abs,
|
||||
// and ignores the +aL for it unless the scalar operation is co-issued with a
|
||||
// vector operation reading from a constant. However, the XNA assembler treats
|
||||
// the constant scalar operand as a constant in the third operand, and places
|
||||
// the addressing mode for it in const_0_rel_abs if no other constants are
|
||||
// used in the whole ALU instruction. The validator also doesn't report
|
||||
// anything if +aL is used when the constant scalar operand is the only
|
||||
// constant in the instruction (and explicitly calls it the third constant in
|
||||
// the error message in case both vector operands are constants, and different
|
||||
// addressing modes are used for the second vector operand and the constant
|
||||
// scalar operand). Passing the disassembly produced by XNA back to the
|
||||
// assembler results in different microcode in this case. This indicates that
|
||||
// most likely there's a bug in the XNA disassembler, and that the addressing
|
||||
// mode for the constant scalar operand should actually be taken the same way
|
||||
// as for the third vector operand - from const_0_rel_abs if there are no
|
||||
// constant vector operands, or from const_1_rel_abs if there is at least one.
|
||||
bool src_const_is_addressed(size_t i) const {
|
||||
// "error X7100: When three constants are used in one instruction, the
|
||||
// second and third constant must either both be non-relative, or both be
|
||||
// relative."
|
||||
// Whether to use const_0_rel_abs or const_1_rel_abs is essentially
|
||||
// min(sum of whether the previous operands are constants, 1).
|
||||
switch (i) {
|
||||
case 1:
|
||||
return bool(data_.const_0_rel_abs);
|
||||
case 2:
|
||||
return bool(src_is_temp(1) ? data_.const_0_rel_abs
|
||||
: data_.const_1_rel_abs);
|
||||
case 3:
|
||||
return bool((src_is_temp(1) && src_is_temp(2)) ? data_.const_0_rel_abs
|
||||
: data_.const_1_rel_abs);
|
||||
default:
|
||||
assert_unhandled_case(i);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
uint32_t src_swizzle(size_t i) const {
|
||||
switch (i) {
|
||||
case 1:
|
||||
|
@ -1739,8 +1986,20 @@ struct alignas(uint32_t) AluInstruction {
|
|||
}
|
||||
}
|
||||
|
||||
uint32_t scalar_const_reg_op_src_temp_reg() const {
|
||||
return (uint32_t(data_.scalar_opc) & 1) | (data_.src3_sel << 1) |
|
||||
(data_.src3_swiz & 0x3C);
|
||||
}
|
||||
|
||||
// Helpers.
|
||||
|
||||
// Returns the absolute component index calculated from the relative swizzle
|
||||
// in an ALU instruction.
|
||||
static constexpr uint32_t GetSwizzledComponentIndex(
|
||||
uint32_t swizzle, uint32_t component_index) {
|
||||
return ((swizzle >> (2 * component_index)) + component_index) & 3;
|
||||
}
|
||||
|
||||
// Note that even if the export component is unused (like W of the vertex
|
||||
// shader misc register, YZW of pixel shader depth), it must still not be
|
||||
// excluded - that may make disassembly not reassemblable if there are
|
||||
|
@ -1803,6 +2062,7 @@ struct alignas(uint32_t) AluInstruction {
|
|||
AluScalarOpcode scalar_opc : 6;
|
||||
};
|
||||
struct {
|
||||
// Swizzles are component-relative.
|
||||
uint32_t src3_swiz : 8;
|
||||
uint32_t src2_swiz : 8;
|
||||
uint32_t src1_swiz : 8;
|
||||
|
@ -1811,7 +2071,9 @@ struct alignas(uint32_t) AluInstruction {
|
|||
uint32_t src1_reg_negate : 1;
|
||||
uint32_t pred_condition : 1;
|
||||
uint32_t is_predicated : 1;
|
||||
uint32_t address_absolute : 1;
|
||||
// Temporary registers can have only absolute and aL-relative indices, not
|
||||
// a0-relative.
|
||||
uint32_t const_address_register_relative : 1;
|
||||
uint32_t const_1_rel_abs : 1;
|
||||
uint32_t const_0_rel_abs : 1;
|
||||
};
|
||||
|
|
|
@ -199,8 +199,8 @@ bool VulkanCommandProcessor::SetupContext() {
|
|||
return false;
|
||||
}
|
||||
|
||||
render_target_cache_ =
|
||||
std::make_unique<VulkanRenderTargetCache>(*this, *register_file_);
|
||||
render_target_cache_ = std::make_unique<VulkanRenderTargetCache>(
|
||||
*register_file_, *memory_, &trace_writer_, *this);
|
||||
if (!render_target_cache_->Initialize()) {
|
||||
XELOGE("Failed to initialize the render target cache");
|
||||
return false;
|
||||
|
@ -1383,6 +1383,8 @@ bool VulkanCommandProcessor::IssueDraw(xenos::PrimitiveType prim_type,
|
|||
return false;
|
||||
}
|
||||
|
||||
reg::RB_DEPTHCONTROL normalized_depth_control =
|
||||
draw_util::GetNormalizedDepthControl(regs);
|
||||
uint32_t normalized_color_mask =
|
||||
pixel_shader ? draw_util::GetNormalizedColorMask(
|
||||
regs, pixel_shader->writes_color_targets())
|
||||
|
@ -1399,7 +1401,8 @@ bool VulkanCommandProcessor::IssueDraw(xenos::PrimitiveType prim_type,
|
|||
|
||||
// Set up the render targets - this may perform dispatches and draws.
|
||||
if (!render_target_cache_->Update(is_rasterization_done,
|
||||
normalized_color_mask)) {
|
||||
normalized_depth_control,
|
||||
normalized_color_mask, *vertex_shader)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -1421,7 +1424,8 @@ bool VulkanCommandProcessor::IssueDraw(xenos::PrimitiveType prim_type,
|
|||
const VulkanPipelineCache::PipelineLayoutProvider* pipeline_layout_provider;
|
||||
if (!pipeline_cache_->ConfigurePipeline(
|
||||
vertex_shader_translation, pixel_shader_translation,
|
||||
primitive_processing_result, normalized_color_mask,
|
||||
primitive_processing_result, normalized_depth_control,
|
||||
normalized_color_mask,
|
||||
render_target_cache_->last_update_render_pass_key(), pipeline,
|
||||
pipeline_layout_provider)) {
|
||||
return false;
|
||||
|
@ -1485,13 +1489,14 @@ bool VulkanCommandProcessor::IssueDraw(xenos::PrimitiveType prim_type,
|
|||
// life. Or even disregard the viewport bounds range in the fragment shader
|
||||
// interlocks case completely - apply the viewport and the scissor offset
|
||||
// directly to pixel address and to things like ps_param_gen.
|
||||
draw_util::GetHostViewportInfo(regs, 1, 1, false,
|
||||
device_limits.maxViewportDimensions[0],
|
||||
device_limits.maxViewportDimensions[1], true,
|
||||
false, false, false, viewport_info);
|
||||
draw_util::GetHostViewportInfo(
|
||||
regs, 1, 1, false, device_limits.maxViewportDimensions[0],
|
||||
device_limits.maxViewportDimensions[1], true, normalized_depth_control,
|
||||
false, false, false, viewport_info);
|
||||
|
||||
// Update dynamic graphics pipeline state.
|
||||
UpdateDynamicState(viewport_info, primitive_polygonal);
|
||||
UpdateDynamicState(viewport_info, primitive_polygonal,
|
||||
normalized_depth_control);
|
||||
|
||||
// Update system constants before uploading them.
|
||||
UpdateSystemConstantValues(primitive_processing_result.host_index_endian,
|
||||
|
@ -2133,7 +2138,8 @@ VkShaderStageFlags VulkanCommandProcessor::GetGuestVertexShaderStageFlags()
|
|||
}
|
||||
|
||||
void VulkanCommandProcessor::UpdateDynamicState(
|
||||
const draw_util::ViewportInfo& viewport_info, bool primitive_polygonal) {
|
||||
const draw_util::ViewportInfo& viewport_info, bool primitive_polygonal,
|
||||
reg::RB_DEPTHCONTROL normalized_depth_control) {
|
||||
#if XE_UI_VULKAN_FINE_GRAINED_DRAW_SCOPES
|
||||
SCOPE_profile_cpu_f("gpu");
|
||||
#endif // XE_UI_VULKAN_FINE_GRAINED_DRAW_SCOPES
|
||||
|
@ -2234,10 +2240,9 @@ void VulkanCommandProcessor::UpdateDynamicState(
|
|||
// effect on drawing, and because the masks and the references are always
|
||||
// dynamic in Xenia guest pipelines, they must be set in the command buffer
|
||||
// before any draw.
|
||||
auto rb_depthcontrol = draw_util::GetDepthControlForCurrentEdramMode(regs);
|
||||
if (rb_depthcontrol.stencil_enable) {
|
||||
if (normalized_depth_control.stencil_enable) {
|
||||
Register stencil_ref_mask_front_reg, stencil_ref_mask_back_reg;
|
||||
if (primitive_polygonal && rb_depthcontrol.backface_enable) {
|
||||
if (primitive_polygonal && normalized_depth_control.backface_enable) {
|
||||
const ui::vulkan::VulkanProvider& provider = GetVulkanProvider();
|
||||
const VkPhysicalDevicePortabilitySubsetFeaturesKHR*
|
||||
device_portability_subset_features =
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
|
||||
#include "xenia/gpu/command_processor.h"
|
||||
#include "xenia/gpu/draw_util.h"
|
||||
#include "xenia/gpu/registers.h"
|
||||
#include "xenia/gpu/spirv_shader_translator.h"
|
||||
#include "xenia/gpu/vulkan/deferred_command_buffer.h"
|
||||
#include "xenia/gpu/vulkan/vulkan_graphics_system.h"
|
||||
|
@ -242,7 +243,8 @@ class VulkanCommandProcessor : public CommandProcessor {
|
|||
VkShaderStageFlags GetGuestVertexShaderStageFlags() const;
|
||||
|
||||
void UpdateDynamicState(const draw_util::ViewportInfo& viewport_info,
|
||||
bool primitive_polygonal);
|
||||
bool primitive_polygonal,
|
||||
reg::RB_DEPTHCONTROL normalized_depth_control);
|
||||
void UpdateSystemConstantValues(xenos::Endian index_endian,
|
||||
const draw_util::ViewportInfo& viewport_info);
|
||||
bool UpdateBindings(const VulkanShader* vertex_shader,
|
||||
|
|
|
@ -121,8 +121,8 @@ VulkanShader* VulkanPipelineCache::LoadShader(xenos::ShaderType shader_type,
|
|||
// We need to track it even if it fails translation so we know not to try
|
||||
// again.
|
||||
VulkanShader* shader =
|
||||
new VulkanShader(shader_type, data_hash, host_address, dword_count,
|
||||
command_processor_.GetVulkanProvider());
|
||||
new VulkanShader(command_processor_.GetVulkanProvider(), shader_type,
|
||||
data_hash, host_address, dword_count);
|
||||
shaders_.emplace(data_hash, shader);
|
||||
return shader;
|
||||
}
|
||||
|
@ -188,6 +188,7 @@ bool VulkanPipelineCache::ConfigurePipeline(
|
|||
VulkanShader::VulkanTranslation* vertex_shader,
|
||||
VulkanShader::VulkanTranslation* pixel_shader,
|
||||
const PrimitiveProcessor::ProcessingResult& primitive_processing_result,
|
||||
reg::RB_DEPTHCONTROL normalized_depth_control,
|
||||
uint32_t normalized_color_mask,
|
||||
VulkanRenderTargetCache::RenderPassKey render_pass_key,
|
||||
VkPipeline& pipeline_out,
|
||||
|
@ -231,7 +232,8 @@ bool VulkanPipelineCache::ConfigurePipeline(
|
|||
PipelineDescription description;
|
||||
if (!GetCurrentStateDescription(
|
||||
vertex_shader, pixel_shader, primitive_processing_result,
|
||||
normalized_color_mask, render_pass_key, description)) {
|
||||
normalized_depth_control, normalized_color_mask, render_pass_key,
|
||||
description)) {
|
||||
return false;
|
||||
}
|
||||
if (last_pipeline_ && last_pipeline_->first == description) {
|
||||
|
@ -360,6 +362,7 @@ bool VulkanPipelineCache::GetCurrentStateDescription(
|
|||
const VulkanShader::VulkanTranslation* vertex_shader,
|
||||
const VulkanShader::VulkanTranslation* pixel_shader,
|
||||
const PrimitiveProcessor::ProcessingResult& primitive_processing_result,
|
||||
reg::RB_DEPTHCONTROL normalized_depth_control,
|
||||
uint32_t normalized_color_mask,
|
||||
VulkanRenderTargetCache::RenderPassKey render_pass_key,
|
||||
PipelineDescription& description_out) const {
|
||||
|
@ -484,27 +487,32 @@ bool VulkanPipelineCache::GetCurrentStateDescription(
|
|||
// shader interlock RB implementation.
|
||||
|
||||
if (render_pass_key.depth_and_color_used & 1) {
|
||||
auto rb_depthcontrol = draw_util::GetDepthControlForCurrentEdramMode(regs);
|
||||
if (rb_depthcontrol.z_enable) {
|
||||
description_out.depth_write_enable = rb_depthcontrol.z_write_enable;
|
||||
description_out.depth_compare_op = rb_depthcontrol.zfunc;
|
||||
if (normalized_depth_control.z_enable) {
|
||||
description_out.depth_write_enable =
|
||||
normalized_depth_control.z_write_enable;
|
||||
description_out.depth_compare_op = normalized_depth_control.zfunc;
|
||||
} else {
|
||||
description_out.depth_compare_op = xenos::CompareFunction::kAlways;
|
||||
}
|
||||
if (rb_depthcontrol.stencil_enable) {
|
||||
if (normalized_depth_control.stencil_enable) {
|
||||
description_out.stencil_test_enable = 1;
|
||||
description_out.stencil_front_fail_op = rb_depthcontrol.stencilfail;
|
||||
description_out.stencil_front_pass_op = rb_depthcontrol.stencilzpass;
|
||||
description_out.stencil_front_fail_op =
|
||||
normalized_depth_control.stencilfail;
|
||||
description_out.stencil_front_pass_op =
|
||||
normalized_depth_control.stencilzpass;
|
||||
description_out.stencil_front_depth_fail_op =
|
||||
rb_depthcontrol.stencilzfail;
|
||||
description_out.stencil_front_compare_op = rb_depthcontrol.stencilfunc;
|
||||
if (primitive_polygonal && rb_depthcontrol.backface_enable) {
|
||||
description_out.stencil_back_fail_op = rb_depthcontrol.stencilfail_bf;
|
||||
description_out.stencil_back_pass_op = rb_depthcontrol.stencilzpass_bf;
|
||||
normalized_depth_control.stencilzfail;
|
||||
description_out.stencil_front_compare_op =
|
||||
normalized_depth_control.stencilfunc;
|
||||
if (primitive_polygonal && normalized_depth_control.backface_enable) {
|
||||
description_out.stencil_back_fail_op =
|
||||
normalized_depth_control.stencilfail_bf;
|
||||
description_out.stencil_back_pass_op =
|
||||
normalized_depth_control.stencilzpass_bf;
|
||||
description_out.stencil_back_depth_fail_op =
|
||||
rb_depthcontrol.stencilzfail_bf;
|
||||
normalized_depth_control.stencilzfail_bf;
|
||||
description_out.stencil_back_compare_op =
|
||||
rb_depthcontrol.stencilfunc_bf;
|
||||
normalized_depth_control.stencilfunc_bf;
|
||||
} else {
|
||||
description_out.stencil_back_fail_op =
|
||||
description_out.stencil_front_fail_op;
|
||||
|
|
|
@ -76,6 +76,7 @@ class VulkanPipelineCache {
|
|||
VulkanShader::VulkanTranslation* vertex_shader,
|
||||
VulkanShader::VulkanTranslation* pixel_shader,
|
||||
const PrimitiveProcessor::ProcessingResult& primitive_processing_result,
|
||||
reg::RB_DEPTHCONTROL normalized_depth_control,
|
||||
uint32_t normalized_color_mask,
|
||||
VulkanRenderTargetCache::RenderPassKey render_pass_key,
|
||||
VkPipeline& pipeline_out,
|
||||
|
@ -218,6 +219,7 @@ class VulkanPipelineCache {
|
|||
const VulkanShader::VulkanTranslation* vertex_shader,
|
||||
const VulkanShader::VulkanTranslation* pixel_shader,
|
||||
const PrimitiveProcessor::ProcessingResult& primitive_processing_result,
|
||||
reg::RB_DEPTHCONTROL normalized_depth_control,
|
||||
uint32_t normalized_color_mask,
|
||||
VulkanRenderTargetCache::RenderPassKey render_pass_key,
|
||||
PipelineDescription& description_out) const;
|
||||
|
|
|
@ -114,9 +114,10 @@ const VulkanRenderTargetCache::TransferModeInfo
|
|||
};
|
||||
|
||||
VulkanRenderTargetCache::VulkanRenderTargetCache(
|
||||
VulkanCommandProcessor& command_processor,
|
||||
const RegisterFile& register_file)
|
||||
: RenderTargetCache(register_file), command_processor_(command_processor) {}
|
||||
const RegisterFile& register_file, const Memory& memory,
|
||||
TraceWriter* trace_writer, VulkanCommandProcessor& command_processor)
|
||||
: RenderTargetCache(register_file, memory, trace_writer),
|
||||
command_processor_(command_processor) {}
|
||||
|
||||
VulkanRenderTargetCache::~VulkanRenderTargetCache() { Shutdown(true); }
|
||||
|
||||
|
@ -574,10 +575,12 @@ void VulkanRenderTargetCache::EndSubmission() {
|
|||
}
|
||||
}
|
||||
|
||||
bool VulkanRenderTargetCache::Update(bool is_rasterization_done,
|
||||
uint32_t shader_writes_color_targets) {
|
||||
bool VulkanRenderTargetCache::Update(
|
||||
bool is_rasterization_done, reg::RB_DEPTHCONTROL normalized_depth_control,
|
||||
uint32_t normalized_color_mask, const Shader& vertex_shader) {
|
||||
if (!RenderTargetCache::Update(is_rasterization_done,
|
||||
shader_writes_color_targets)) {
|
||||
normalized_depth_control,
|
||||
normalized_color_mask, vertex_shader)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -85,8 +85,9 @@ class VulkanRenderTargetCache final : public RenderTargetCache {
|
|||
: framebuffer(framebuffer), host_extent(host_extent) {}
|
||||
};
|
||||
|
||||
VulkanRenderTargetCache(VulkanCommandProcessor& command_processor,
|
||||
const RegisterFile& register_file);
|
||||
VulkanRenderTargetCache(const RegisterFile& register_file,
|
||||
const Memory& memory, TraceWriter* trace_writer,
|
||||
VulkanCommandProcessor& command_processor);
|
||||
~VulkanRenderTargetCache();
|
||||
|
||||
bool Initialize();
|
||||
|
@ -103,7 +104,9 @@ class VulkanRenderTargetCache final : public RenderTargetCache {
|
|||
uint32_t GetResolutionScaleY() const override { return resolution_scale_y_; }
|
||||
|
||||
bool Update(bool is_rasterization_done,
|
||||
uint32_t shader_writes_color_targets) override;
|
||||
reg::RB_DEPTHCONTROL normalized_depth_control,
|
||||
uint32_t normalized_color_mask,
|
||||
const Shader& vertex_shader) override;
|
||||
// Binding information for the last successful update.
|
||||
RenderPassKey last_update_render_pass_key() const {
|
||||
return last_update_render_pass_key_;
|
||||
|
|
|
@ -51,10 +51,14 @@ VkShaderModule VulkanShader::VulkanTranslation::GetOrCreateShaderModule() {
|
|||
return shader_module_;
|
||||
}
|
||||
|
||||
VulkanShader::VulkanShader(xenos::ShaderType shader_type, uint64_t data_hash,
|
||||
const uint32_t* dword_ptr, uint32_t dword_count,
|
||||
const ui::vulkan::VulkanProvider& provider)
|
||||
: Shader(shader_type, data_hash, dword_ptr, dword_count),
|
||||
VulkanShader::VulkanShader(const ui::vulkan::VulkanProvider& provider,
|
||||
xenos::ShaderType shader_type,
|
||||
uint64_t ucode_data_hash,
|
||||
const uint32_t* ucode_dwords,
|
||||
size_t ucode_dword_count,
|
||||
std::endian ucode_source_endian)
|
||||
: Shader(shader_type, ucode_data_hash, ucode_dwords, ucode_dword_count,
|
||||
ucode_source_endian),
|
||||
provider_(provider) {}
|
||||
|
||||
Shader::Translation* VulkanShader::CreateTranslationInstance(
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue