mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-07-30 20:18:08 +00:00
Implement STFT Decomposition transformer (#19725)
Implement STFT Decomposition transformer. Certain hardware does not support DXIL, and therefore existing operator should be mapped to hardware supported functions. Optimized convolution can be used to implement STFT. --------- Co-authored-by: Sheil Kumar <sheilk@microsoft.com>
This commit is contained in:
parent
069d2d6f54
commit
7deee944c0
8 changed files with 882 additions and 452 deletions
381
onnxruntime/core/optimizer/stft_decomposition.cc
Normal file
381
onnxruntime/core/optimizer/stft_decomposition.cc
Normal file
|
|
@ -0,0 +1,381 @@
|
|||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
#include <limits>
|
||||
|
||||
#include "core/optimizer/stft_decomposition.h"
|
||||
#include "core/optimizer/initializer.h"
|
||||
#include "core/optimizer/utils.h"
|
||||
#include "core/graph/graph_utils.h"
|
||||
#include "core/optimizer/optimizer_execution_frame.h"
|
||||
#include "core/optimizer/utils.h"
|
||||
#include "core/framework/op_kernel.h"
|
||||
#include "core/framework/tensorprotoutils.h"
|
||||
|
||||
using namespace onnxruntime::common;
|
||||
|
||||
namespace onnxruntime {
|
||||
|
||||
STFTDecomposition::STFTDecomposition(const InlinedHashSet<std::string_view>& compatible_execution_providers) noexcept
|
||||
: GraphTransformer("STFTDecomposition", compatible_execution_providers) {
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
constexpr static ONNX_NAMESPACE::TensorProto_DataType GetDataType() {
|
||||
if constexpr (std::is_same<T, float>::value) {
|
||||
return ONNX_NAMESPACE::TensorProto_DataType_FLOAT;
|
||||
} else if constexpr (std::is_same<T, MLFloat16>::value) {
|
||||
return ONNX_NAMESPACE::TensorProto_DataType_FLOAT16;
|
||||
} else if constexpr (std::is_same<T, double>::value) {
|
||||
return ONNX_NAMESPACE::TensorProto_DataType_DOUBLE;
|
||||
} else if constexpr (std::is_same<T, int64_t>::value) {
|
||||
return ONNX_NAMESPACE::TensorProto_DataType_INT64;
|
||||
} else {
|
||||
throw std::logic_error("Invalid data type requested for STFT decomposition");
|
||||
}
|
||||
}
|
||||
|
||||
template <typename TDataType, size_t TDims>
|
||||
NodeArg* AddInitializer(Graph& graph, const char* name, const int64_t (&shape)[TDims], const TDataType* begin) {
|
||||
ONNX_NAMESPACE::TensorProto proto;
|
||||
proto.set_name(graph.GenerateNodeArgName(name));
|
||||
proto.set_data_type(GetDataType<TDataType>());
|
||||
int64_t element_count = 1;
|
||||
for (size_t i = 0; i < TDims; i++) {
|
||||
element_count *= shape[i];
|
||||
proto.add_dims(shape[i]);
|
||||
}
|
||||
proto.set_raw_data(begin, element_count * sizeof(TDataType));
|
||||
return &graph_utils::AddInitializer(graph, proto);
|
||||
}
|
||||
|
||||
template <size_t TDims>
|
||||
NodeArg* AddShapeInitializer(Graph& graph, const char* name, const int64_t (&shape)[TDims]) {
|
||||
int64_t shape_shape[] = {TDims};
|
||||
return AddInitializer<int64_t>(graph, name, shape_shape, shape);
|
||||
}
|
||||
|
||||
std::pair<Node*, NodeArg*> AddNode(Graph& graph,
|
||||
const char* op_type,
|
||||
ProviderType execution_provider_type,
|
||||
gsl::span<NodeArg*> inputs) {
|
||||
auto def_name = graph.GenerateNodeArgName(op_type);
|
||||
auto node_arg = &graph.GetOrCreateNodeArg(def_name, nullptr);
|
||||
Node& node = graph.AddNode(graph.GenerateNodeName(op_type),
|
||||
op_type,
|
||||
"",
|
||||
inputs,
|
||||
{node_arg});
|
||||
node.SetExecutionProviderType(execution_provider_type);
|
||||
return std::make_pair(&node, node_arg);
|
||||
}
|
||||
|
||||
std::pair<Node*, NodeArg*> AddNodeCast(Graph& graph, NodeArg* in,
|
||||
ONNX_NAMESPACE::TensorProto_DataType data_type) {
|
||||
auto def_name = graph.GenerateNodeArgName("Cast");
|
||||
auto node_arg = &graph.GetOrCreateNodeArg(def_name, nullptr);
|
||||
Node& node = graph.AddNode(graph.GenerateNodeName("Cast"),
|
||||
"Cast",
|
||||
"",
|
||||
{in},
|
||||
{node_arg});
|
||||
node.AddAttribute("to", static_cast<int64_t>(data_type));
|
||||
node.SetExecutionProviderType(kCpuExecutionProvider);
|
||||
return std::make_pair(&node, node_arg);
|
||||
}
|
||||
|
||||
#define CONTINUE_IF_NO_DIM_VALUE(dim) \
|
||||
if (!dim.has_dim_value()) { \
|
||||
continue; \
|
||||
}
|
||||
#define CONTINUE_IF_NULL(x) \
|
||||
if (x == nullptr) { \
|
||||
continue; \
|
||||
}
|
||||
|
||||
/*
|
||||
This function decomposes a STFT node into a subgraph.
|
||||
The decomposition requires that:
|
||||
1) The signal input is real valued and not complex valued!
|
||||
2) Both (frame_step) *and* either (window or frame_length) inputs must be constant.
|
||||
Otherwise the transform will not be applied.
|
||||
|
||||
Subgraph pattern 1: STFT with optional Window parameter set
|
||||
[root]--(signal)--------------------+
|
||||
[root]--(frame_step)---------------+|
|
||||
[root]--(window)------------------+||
|
||||
[root]--(frame_length) ----------+|||
|
||||
||||
|
||||
vvvv
|
||||
[STFT]--(output)-->
|
||||
After Fusion:
|
||||
[root]--(signal)-------------------------+
|
||||
[root] |
|
||||
[root]--(window)--+ |
|
||||
[root] | |
|
||||
v v
|
||||
(only for non-fp32) [Cast] +--[Reshape]
|
||||
| | |
|
||||
v | v
|
||||
[Reshape]-->[Mul]---|-->[Conv]-------+
|
||||
| | |
|
||||
| +-----| |
|
||||
| v v
|
||||
+------>[Mul]------>[Conv]-->[Concat]-->[Reshape]-->[Transpose]--(output)-->
|
||||
|
||||
|
||||
Subgraph pattern 2: STFT without optional Window parameter set
|
||||
[root]--(signal)-------------------+
|
||||
[root]--(frame_step)--------------+|
|
||||
[root] |
|
||||
[root]--(frame_length) ----------+||
|
||||
|||
|
||||
vvv
|
||||
[STFT]--(output)-->
|
||||
After Fusion:
|
||||
[root]--(signal)-->[Reshape]-->[Conv]
|
||||
[root] | |
|
||||
[root] | v
|
||||
[root] +------>[Conv]-->[Concat]-->[Reshape]-->[Transpose]--(output)-->
|
||||
*/
|
||||
Status STFTDecomposition::ApplyImpl(Graph& graph, bool& modified, int graph_level, const logging::Logger& logger) const {
|
||||
GraphViewer graph_viewer(graph);
|
||||
auto& order = graph_viewer.GetNodesInTopologicalOrder();
|
||||
|
||||
for (NodeIndex i : order) {
|
||||
auto node = graph.GetNode(i);
|
||||
CONTINUE_IF_NULL(node);
|
||||
ORT_RETURN_IF_ERROR(Recurse(*node, modified, graph_level, logger));
|
||||
|
||||
if (node->OpType() != "STFT") {
|
||||
continue;
|
||||
}
|
||||
|
||||
Node& stft = *node;
|
||||
auto signal = stft.MutableInputDefs()[0];
|
||||
auto frame_step = stft.MutableInputDefs()[1];
|
||||
auto window = stft.MutableInputDefs()[2];
|
||||
auto frame_length = stft.MutableInputDefs()[3];
|
||||
|
||||
// If the signal has free dimensions, do not transform...
|
||||
auto batch_size_dim = signal->Shape()->dim(0);
|
||||
auto signal_length_dim = signal->Shape()->dim(1);
|
||||
auto signal_components_dim = signal->Shape()->dim(2);
|
||||
CONTINUE_IF_NO_DIM_VALUE(signal_length_dim);
|
||||
CONTINUE_IF_NO_DIM_VALUE(signal_components_dim);
|
||||
|
||||
auto batch_size = batch_size_dim.has_dim_value() ? batch_size_dim.dim_value() : static_cast<int64_t>(-1);
|
||||
auto signal_length = signal_length_dim.dim_value();
|
||||
auto is_real = signal_components_dim.dim_value() == 1;
|
||||
auto data_type = static_cast<ONNX_NAMESPACE::TensorProto_DataType>(signal->TypeAsProto()->tensor_type().elem_type());
|
||||
|
||||
auto frame_step_initializer = graph_utils::GetConstantInitializer(graph, frame_step->Name());
|
||||
auto window_initializer = graph_utils::GetConstantInitializer(graph, window->Name());
|
||||
auto frame_length_initializer = graph_utils::GetConstantInitializer(graph, frame_length->Name());
|
||||
CONTINUE_IF_NULL(frame_step_initializer);
|
||||
if (!frame_length_initializer && !window_initializer) {
|
||||
continue;
|
||||
}
|
||||
|
||||
auto read_int64_initializer = [](Graph& graph, const ONNX_NAMESPACE::TensorProto* initializer) {
|
||||
return *Initializer(*initializer, graph.ModelPath()).data<int64_t>();
|
||||
};
|
||||
auto frame_step_value = read_int64_initializer(graph, frame_step_initializer);
|
||||
|
||||
// Get DFT Size
|
||||
int64_t dft_size = 0;
|
||||
if (frame_length_initializer) {
|
||||
dft_size = read_int64_initializer(graph, frame_length_initializer);
|
||||
}
|
||||
if (dft_size == 0 && window_initializer) {
|
||||
auto window_length_dim = window->Shape()->dim(0);
|
||||
CONTINUE_IF_NO_DIM_VALUE(window_length_dim);
|
||||
dft_size = window_length_dim.dim_value();
|
||||
}
|
||||
|
||||
bool is_onesided = true;
|
||||
auto& attrs = stft.GetAttributes();
|
||||
if (attrs.find("onesided") != attrs.end()) {
|
||||
auto& onesided_attr = attrs.at("onesided");
|
||||
if (utils::HasInt(onesided_attr)) {
|
||||
is_onesided = static_cast<bool>(onesided_attr.i());
|
||||
}
|
||||
}
|
||||
|
||||
auto dft_unique_bins = is_onesided ? ((dft_size >> 1) + 1) : dft_size;
|
||||
|
||||
Node* signal_recipient = nullptr;
|
||||
Node* window_recipient = nullptr;
|
||||
Node* stft_producer = nullptr;
|
||||
if (is_real) {
|
||||
auto output_num_frames = stft.MutableOutputDefs()[0]->Shape()->dim(1).dim_value();
|
||||
auto output_frame_length = stft.MutableOutputDefs()[0]->Shape()->dim(2).dim_value();
|
||||
auto weight_size = static_cast<size_t>(dft_unique_bins * dft_size);
|
||||
auto real_weights_data = std::vector<float>(weight_size);
|
||||
auto imag_weights_data = std::vector<float>(weight_size);
|
||||
|
||||
// Populate weights
|
||||
for (size_t k = 0; k < static_cast<size_t>(dft_unique_bins); k++) {
|
||||
for (size_t n = 0; n < static_cast<size_t>(dft_size); n++) {
|
||||
auto index = static_cast<size_t>(k * dft_size + n);
|
||||
auto theta = -2 * M_PI * k * n / static_cast<float>(dft_size);
|
||||
real_weights_data[index] = static_cast<float>(cos(theta));
|
||||
imag_weights_data[index] = static_cast<float>(sin(theta));
|
||||
}
|
||||
}
|
||||
|
||||
const int64_t weight_shape[] = {dft_unique_bins, 1, 1, dft_size};
|
||||
auto real_weights = AddInitializer<float>(graph, "stft_real_conv_weights", weight_shape, real_weights_data.data());
|
||||
auto imaginary_weights = AddInitializer<float>(graph, "stft_imaginary_conv_weights", weight_shape, imag_weights_data.data());
|
||||
|
||||
const int64_t signal_reshaped[] = {batch_size, 1, 1, signal_length};
|
||||
auto signal_shape = AddShapeInitializer(graph, "stft_signal_shape", signal_reshaped);
|
||||
|
||||
const int64_t unsqueezed_output_shape[] = {2, batch_size, output_frame_length, output_num_frames};
|
||||
auto unsqueezed_shape = AddShapeInitializer(graph, "stft_output_reshaped", unsqueezed_output_shape);
|
||||
|
||||
NodeArg* signal_reshaped_inputs[] = {signal, signal_shape};
|
||||
Node* reshape_signal_node = nullptr;
|
||||
NodeArg* reshape_output = nullptr;
|
||||
std::tie(reshape_signal_node, reshape_output) =
|
||||
AddNode(graph, "Reshape", stft.GetExecutionProviderType(), signal_reshaped_inputs);
|
||||
|
||||
NodeArg* real_weights_final = real_weights;
|
||||
NodeArg* imag_weights_final = imaginary_weights;
|
||||
if (!window->Exists()) {
|
||||
// When we are missing a window function
|
||||
if (real_weights_final->TypeAsProto()->tensor_type().elem_type() != data_type) {
|
||||
std::tie(std::ignore, real_weights_final) =
|
||||
AddNodeCast(graph, real_weights_final, data_type);
|
||||
}
|
||||
if (imag_weights_final->TypeAsProto()->tensor_type().elem_type() != data_type) {
|
||||
std::tie(std::ignore, imag_weights_final) =
|
||||
AddNodeCast(graph, imag_weights_final, data_type);
|
||||
}
|
||||
} else {
|
||||
// When we have a window function
|
||||
const int64_t window_reshaped_shape[] = {1, 1, 1, dft_size};
|
||||
auto window_shape = AddShapeInitializer(graph, "stft_window_shape", window_reshaped_shape);
|
||||
|
||||
auto window_final = window;
|
||||
if (window->TypeAsProto()->tensor_type().elem_type() != GetDataType<float>()) {
|
||||
Node* window_cast_node = nullptr;
|
||||
std::tie(window_cast_node, window_final) =
|
||||
AddNodeCast(graph, window, GetDataType<float>());
|
||||
window_recipient = window_cast_node;
|
||||
}
|
||||
|
||||
NodeArg* window_reshaped_inputs[] = {window_final, window_shape};
|
||||
Node* window_reshape_node;
|
||||
NodeArg* window_reshaped = nullptr;
|
||||
std::tie(window_reshape_node, window_reshaped) =
|
||||
AddNode(graph, "Reshape", kCpuExecutionProvider, window_reshaped_inputs);
|
||||
if (!window_recipient) {
|
||||
window_recipient = window_reshape_node;
|
||||
}
|
||||
|
||||
NodeArg* scale_real_weights_inputs[] = {real_weights, window_reshaped};
|
||||
NodeArg* windowed_real_weights_output = nullptr;
|
||||
std::tie(std::ignore, windowed_real_weights_output) =
|
||||
AddNode(graph, "Mul", kCpuExecutionProvider, scale_real_weights_inputs);
|
||||
|
||||
NodeArg* scale_imag_weights_inputs[] = {imaginary_weights, window_reshaped};
|
||||
NodeArg* windowed_imag_weights_output = nullptr;
|
||||
std::tie(std::ignore, windowed_imag_weights_output) =
|
||||
AddNode(graph, "Mul", kCpuExecutionProvider, scale_imag_weights_inputs);
|
||||
|
||||
std::tie(std::ignore, real_weights_final) =
|
||||
AddNodeCast(graph, windowed_real_weights_output, data_type);
|
||||
std::tie(std::ignore, imag_weights_final) =
|
||||
AddNodeCast(graph, windowed_imag_weights_output, data_type);
|
||||
}
|
||||
|
||||
// Add Convolution (reals)
|
||||
NodeArg* conv_real_inputs[] = {reshape_output, real_weights_final};
|
||||
Node* real_conv_node = nullptr;
|
||||
NodeArg* real_conv_output = nullptr;
|
||||
std::tie(real_conv_node, real_conv_output) =
|
||||
AddNode(graph, "Conv", stft.GetExecutionProviderType(), conv_real_inputs);
|
||||
real_conv_node->AddAttribute("strides", std::vector<int64_t>{1, frame_step_value});
|
||||
|
||||
// Add Convolution (imaginary)
|
||||
NodeArg* conv_imag_inputs[] = {reshape_output, imag_weights_final};
|
||||
Node* imag_conv_node = nullptr;
|
||||
NodeArg* imag_conv_output = nullptr;
|
||||
std::tie(imag_conv_node, imag_conv_output) =
|
||||
AddNode(graph, "Conv", stft.GetExecutionProviderType(), conv_imag_inputs);
|
||||
imag_conv_node->AddAttribute("strides", std::vector<int64_t>{1, frame_step_value});
|
||||
|
||||
// Concatenate
|
||||
NodeArg* concatenate_inputs[] = {real_conv_output, imag_conv_output};
|
||||
Node* concat_node = nullptr;
|
||||
NodeArg* concatenated_conv_output = nullptr;
|
||||
std::tie(concat_node, concatenated_conv_output) =
|
||||
AddNode(graph, "Concat", stft.GetExecutionProviderType(), concatenate_inputs);
|
||||
concat_node->AddAttribute("axis", static_cast<int64_t>(0));
|
||||
|
||||
// Unsqueeze Reshape
|
||||
NodeArg* unsqueeze_reshape_inputs[] = {concatenated_conv_output, unsqueezed_shape};
|
||||
NodeArg* unsqueezed_output = nullptr;
|
||||
std::tie(std::ignore, unsqueezed_output) =
|
||||
AddNode(graph, "Reshape", stft.GetExecutionProviderType(), unsqueeze_reshape_inputs);
|
||||
|
||||
// Transpose
|
||||
NodeArg* transpose_inputs[] = {unsqueezed_output};
|
||||
Node* transpose_node = nullptr;
|
||||
NodeArg* transpose_output = nullptr;
|
||||
std::tie(transpose_node, transpose_output) =
|
||||
AddNode(graph, "Transpose", stft.GetExecutionProviderType(), transpose_inputs);
|
||||
transpose_node->AddAttribute("perm", std::vector<int64_t>{1, 3, 2, 0});
|
||||
|
||||
signal_recipient = reshape_signal_node;
|
||||
stft_producer = transpose_node;
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
|
||||
auto input_edges = graph_utils::GraphEdge::GetNodeInputEdges(stft);
|
||||
auto output_edges = graph_utils::GraphEdge::GetNodeOutputEdges(stft);
|
||||
|
||||
// Copy inputs
|
||||
auto signal_target_idx = signal_recipient->Index();
|
||||
auto window_target_idx = window_recipient->Index();
|
||||
for (auto cur = input_edges.cbegin(), end = input_edges.cend(); cur != end; ++cur) {
|
||||
const graph_utils::GraphEdge& edge = *cur;
|
||||
NodeIndex target_idx = 0;
|
||||
Node* recipient = nullptr;
|
||||
switch (cur->dst_arg_index) {
|
||||
case 0:
|
||||
target_idx = signal_target_idx;
|
||||
recipient = signal_recipient;
|
||||
break;
|
||||
case 2:
|
||||
target_idx = window_target_idx;
|
||||
recipient = window_recipient;
|
||||
break;
|
||||
}
|
||||
|
||||
if (!recipient) {
|
||||
continue;
|
||||
}
|
||||
|
||||
auto arg_index = graph_utils::GetNodeInputIndexFromInputName(*recipient, edge.arg_name);
|
||||
graph.AddEdge(edge.src_node, target_idx, edge.src_arg_index, arg_index);
|
||||
}
|
||||
|
||||
// Copy STFT outputs to stft_producer
|
||||
stft_producer->MutableOutputDefs() = stft.MutableOutputDefs();
|
||||
auto stft_producer_target_idx = stft_producer->Index();
|
||||
for (auto cur = output_edges.cbegin(), end = output_edges.cend(); cur != end; ++cur) {
|
||||
graph.AddEdge(stft_producer_target_idx, cur->dst_node, cur->src_arg_index, cur->dst_arg_index);
|
||||
}
|
||||
|
||||
graph_utils::GraphEdge::RemoveGraphEdges(graph, input_edges);
|
||||
graph_utils::GraphEdge::RemoveGraphEdges(graph, output_edges);
|
||||
graph.RemoveNode(stft.Index());
|
||||
|
||||
modified = true;
|
||||
}
|
||||
return Status::OK();
|
||||
}
|
||||
} // namespace onnxruntime
|
||||
30
onnxruntime/core/optimizer/stft_decomposition.h
Normal file
30
onnxruntime/core/optimizer/stft_decomposition.h
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "core/optimizer/graph_transformer.h"
|
||||
#include "core/framework/ort_value.h"
|
||||
#include <memory>
|
||||
#include "core/framework/execution_provider.h"
|
||||
|
||||
namespace onnxruntime {
|
||||
|
||||
/**
|
||||
@class STFTDecomposition
|
||||
|
||||
Transformer that traverses the graph top-down and decomposes
|
||||
STFT into convolution.
|
||||
*/
|
||||
class STFTDecomposition : public GraphTransformer {
|
||||
public:
|
||||
/*! STFT decomposition .
|
||||
\param execution_provider Execution provider instance to execute constant folding.
|
||||
*/
|
||||
STFTDecomposition(const InlinedHashSet<std::string_view>& compatible_execution_providers = {}) noexcept;
|
||||
|
||||
private:
|
||||
Status ApplyImpl(Graph& graph, bool& modified, int graph_level, const logging::Logger& logger) const override;
|
||||
};
|
||||
|
||||
} // namespace onnxruntime
|
||||
|
|
@ -506,7 +506,7 @@ static Status short_time_fourier_transform(OpKernelContext* ctx, bool is_oneside
|
|||
|
||||
// Calculate the window size with preference to the window input.
|
||||
const auto window_size = window ? window->Shape()[0] : frame_length;
|
||||
ORT_ENFORCE(window_size < signal_size, "Ensure that the dft size is smaller than the signal.");
|
||||
ORT_ENFORCE(window_size <= signal_size, "Ensure that the dft size is smaller than the signal.");
|
||||
|
||||
// Calculate the number of dfts to run
|
||||
const auto n_dfts =
|
||||
|
|
|
|||
|
|
@ -771,8 +771,14 @@ namespace Dml
|
|||
!native16BitShaderOpsSupported &&
|
||||
IsCustomOpShader(node))
|
||||
{
|
||||
nodeContainsSupportedDataTypes = false;
|
||||
return;
|
||||
// STFT is a special case since it has a dml ep registered
|
||||
// graph transformation that will decompose fp16 STFT into convolution
|
||||
// and so it is OK to register for fp16.
|
||||
if (strcmp("STFT", node.OpType().c_str()) != 0)
|
||||
{
|
||||
nodeContainsSupportedDataTypes = false;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Allow nodeArgs that are SequenceTensor when they are actually implemented by CPU Kernels.
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ dcl_uav_structured u0, 4
|
|||
dcl_uav_structured u1, 4
|
||||
dcl_uav_structured u2, 4
|
||||
dcl_input vThreadID.x
|
||||
dcl_temps 6
|
||||
dcl_temps 5
|
||||
dcl_thread_group 64, 1, 1
|
||||
iadd r0.x, vThreadID.x, cb0[0].x
|
||||
ult r0.y, r0.x, cb0[0].y
|
||||
|
|
@ -40,66 +40,57 @@ if_nz r0.y
|
|||
ieq r1.y, cb0[7].x, l(1)
|
||||
ult r1.z, r0.w, cb0[5].z
|
||||
and r1.z, r1.z, r1.y
|
||||
if_nz r1.z
|
||||
imul null, r1.z, r0.w, cb0[6].z
|
||||
ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r4.x, r1.z, l(0), u2.xxxx
|
||||
imad r1.z, r0.w, cb0[6].z, cb0[6].w
|
||||
ieq r1.w, cb0[5].w, l(2)
|
||||
ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r1.z, r1.z, l(0), u2.xxxx
|
||||
and r4.y, r1.z, r1.w
|
||||
imul null, r1.w, r0.w, cb0[6].z
|
||||
ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r4.x, r1.w, l(0), u2.xxxx
|
||||
ieq r1.w, cb0[5].w, l(2)
|
||||
if_nz r1.w
|
||||
imad r2.y, r0.w, cb0[6].z, cb0[6].w
|
||||
ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r4.y, r2.y, l(0), u2.xxxx
|
||||
else
|
||||
mov r4.xy, l(1.000000,0,0,0)
|
||||
mov r4.y, l(0)
|
||||
endif
|
||||
movc r2.yz, r1.zzzz, r4.yyxy, l(0,0,1.000000,0)
|
||||
ult r1.z, r0.w, cb0[1].y
|
||||
if_nz r1.z
|
||||
imul null, r0.w, r0.w, cb0[2].y
|
||||
imad r0.w, r1.x, cb0[2].x, r0.w
|
||||
imad r0.w, r3.x, cb0[2].z, r0.w
|
||||
ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r5.x, r0.w, l(0), u0.xxxx
|
||||
ieq r1.z, cb0[1].w, l(2)
|
||||
if_nz r1.z
|
||||
iadd r0.w, r0.w, cb0[2].w
|
||||
ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r5.y, r0.w, l(0), u0.xxxx
|
||||
else
|
||||
mov r5.y, l(0)
|
||||
endif
|
||||
imul null, r1.x, r1.x, cb0[2].x
|
||||
imad r0.w, r0.w, cb0[2].y, r1.x
|
||||
imad r0.w, r3.x, cb0[2].z, r0.w
|
||||
ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r4.x, r0.w, l(0), u0.xxxx
|
||||
ieq r2.w, cb0[1].w, l(2)
|
||||
if_nz r2.w
|
||||
iadd r0.w, r0.w, cb0[2].w
|
||||
ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r4.y, r0.w, l(0), u0.xxxx
|
||||
else
|
||||
mov r5.xy, l(0,0,0,0)
|
||||
mov r4.y, l(0)
|
||||
endif
|
||||
mul r0.w, r4.y, r5.y
|
||||
mad r0.w, r5.x, r4.x, -r0.w
|
||||
dp2 r1.z, r5.yxyy, r4.xyxx
|
||||
ult r1.w, r0.y, cb0[5].z
|
||||
and r1.y, r1.w, r1.y
|
||||
if_nz r1.y
|
||||
imul null, r1.y, r0.y, cb0[6].z
|
||||
ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r4.x, r1.y, l(0), u2.xxxx
|
||||
imad r1.y, r0.y, cb0[6].z, cb0[6].w
|
||||
ieq r1.w, cb0[5].w, l(2)
|
||||
ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r1.y, r1.y, l(0), u2.xxxx
|
||||
and r4.y, r1.y, r1.w
|
||||
and r3.yz, r1.zzzz, r4.xxyx
|
||||
mul r0.w, r2.y, r3.z
|
||||
mad r0.w, r3.y, r2.z, -r0.w
|
||||
dp2 r1.z, r3.yzyy, r2.yzyy
|
||||
ult r2.y, r0.y, cb0[5].z
|
||||
and r1.y, r1.y, r2.y
|
||||
imul null, r2.y, r0.y, cb0[6].z
|
||||
ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r4.x, r2.y, l(0), u2.xxxx
|
||||
if_nz r1.w
|
||||
imad r1.w, r0.y, cb0[6].z, cb0[6].w
|
||||
ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r4.y, r1.w, l(0), u2.xxxx
|
||||
else
|
||||
mov r4.xy, l(1.000000,0,0,0)
|
||||
mov r4.y, l(0)
|
||||
endif
|
||||
ult r1.y, r0.y, cb0[1].y
|
||||
if_nz r1.y
|
||||
imul null, r0.y, r0.y, cb0[2].y
|
||||
imad r0.y, r1.x, cb0[2].x, r0.y
|
||||
imad r0.y, r3.x, cb0[2].z, r0.y
|
||||
ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r1.x, r0.y, l(0), u0.xxxx
|
||||
ieq r1.w, cb0[1].w, l(2)
|
||||
if_nz r1.w
|
||||
iadd r0.y, r0.y, cb0[2].w
|
||||
ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r1.y, r0.y, l(0), u0.xxxx
|
||||
else
|
||||
mov r1.y, l(0)
|
||||
endif
|
||||
movc r1.yw, r1.yyyy, r4.yyyx, l(0,0,0,1.000000)
|
||||
ult r2.y, r0.y, cb0[1].y
|
||||
imad r0.y, r0.y, cb0[2].y, r1.x
|
||||
imad r0.y, r3.x, cb0[2].z, r0.y
|
||||
ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r3.x, r0.y, l(0), u0.xxxx
|
||||
if_nz r2.w
|
||||
iadd r0.y, r0.y, cb0[2].w
|
||||
ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r3.y, r0.y, l(0), u0.xxxx
|
||||
else
|
||||
mov r1.xy, l(0,0,0,0)
|
||||
mov r3.y, l(0)
|
||||
endif
|
||||
mul r0.y, r4.y, r1.y
|
||||
mad r0.y, r1.x, r4.x, -r0.y
|
||||
dp2 r1.x, r1.yxyy, r4.xyxx
|
||||
and r2.yz, r2.yyyy, r3.xxyx
|
||||
mul r0.y, r1.y, r2.z
|
||||
mad r0.y, r2.y, r1.w, -r0.y
|
||||
dp2 r1.x, r2.yzyy, r1.ywyy
|
||||
udiv null, r1.y, r2.x, r0.z
|
||||
ieq r1.w, cb0[0].w, l(1)
|
||||
movc r1.w, r1.w, l(6.283185), l(-6.283185)
|
||||
|
|
@ -117,17 +108,22 @@ if_nz r0.y
|
|||
mad r0.y, r3.x, r1.x, r0.y
|
||||
add r0.y, r0.y, r1.z
|
||||
mul r0.yw, r0.yyyw, cb0[7].zzzz
|
||||
ne r1.x, cb0[7].y, l(0.000000)
|
||||
mul r1.y, r1.y, r1.y
|
||||
mul r1.y, r1.y, l(3.141593)
|
||||
div r1.y, r1.y, cb0[7].y
|
||||
sincos r2.x, r3.x, r1.y
|
||||
mov r2.y, r3.x
|
||||
movc r1.xy, r1.xxxx, r2.xyxx, l(0,1.000000,0,0)
|
||||
mul r1.zw, r0.yyyy, r1.xxxy
|
||||
mad r0.y, r0.w, r1.y, -r1.z
|
||||
store_structured u1.x, r0.z, l(0), r0.y
|
||||
mad r0.y, r0.w, r1.x, r1.w
|
||||
eq r1.x, cb0[7].y, l(0.000000)
|
||||
if_nz r1.x
|
||||
mov r1.x, r0.w
|
||||
else
|
||||
ne r1.z, cb0[7].y, l(0.000000)
|
||||
mul r1.y, r1.y, r1.y
|
||||
mul r1.y, r1.y, l(3.141593)
|
||||
div r1.y, r1.y, cb0[7].y
|
||||
sincos r2.x, r3.x, r1.y
|
||||
mov r2.y, r3.x
|
||||
movc r1.yz, r1.zzzz, r2.xxyx, l(0,0,1.000000,0)
|
||||
mul r2.xy, r0.yyyy, r1.yzyy
|
||||
mad r1.x, r0.w, r1.z, -r2.x
|
||||
mad r0.y, r0.w, r1.y, r2.y
|
||||
endif
|
||||
store_structured u1.x, r0.z, l(0), r1.x
|
||||
store_structured u1.x, r0.x, l(0), r0.y
|
||||
endif
|
||||
ret
|
||||
|
|
@ -136,11 +132,11 @@ ret
|
|||
|
||||
const BYTE g_DFT[] =
|
||||
{
|
||||
68, 88, 66, 67, 222, 156,
|
||||
188, 133, 179, 57, 118, 25,
|
||||
122, 216, 102, 13, 91, 242,
|
||||
99, 27, 1, 0, 0, 0,
|
||||
172, 12, 0, 0, 3, 0,
|
||||
68, 88, 66, 67, 63, 188,
|
||||
200, 227, 206, 73, 64, 21,
|
||||
140, 126, 47, 226, 169, 81,
|
||||
175, 134, 1, 0, 0, 0,
|
||||
112, 12, 0, 0, 3, 0,
|
||||
0, 0, 44, 0, 0, 0,
|
||||
60, 0, 0, 0, 76, 0,
|
||||
0, 0, 73, 83, 71, 78,
|
||||
|
|
@ -149,8 +145,8 @@ const BYTE g_DFT[] =
|
|||
79, 83, 71, 78, 8, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
8, 0, 0, 0, 83, 72,
|
||||
69, 88, 88, 12, 0, 0,
|
||||
80, 0, 5, 0, 22, 3,
|
||||
69, 88, 28, 12, 0, 0,
|
||||
80, 0, 5, 0, 7, 3,
|
||||
0, 0, 106, 8, 0, 1,
|
||||
89, 0, 0, 4, 70, 142,
|
||||
32, 0, 0, 0, 0, 0,
|
||||
|
|
@ -164,7 +160,7 @@ const BYTE g_DFT[] =
|
|||
17, 0, 2, 0, 0, 0,
|
||||
4, 0, 0, 0, 95, 0,
|
||||
0, 2, 18, 0, 2, 0,
|
||||
104, 0, 0, 2, 6, 0,
|
||||
104, 0, 0, 2, 5, 0,
|
||||
0, 0, 155, 0, 0, 4,
|
||||
64, 0, 0, 0, 1, 0,
|
||||
0, 0, 1, 0, 0, 0,
|
||||
|
|
@ -256,11 +252,9 @@ const BYTE g_DFT[] =
|
|||
16, 0, 1, 0, 0, 0,
|
||||
42, 0, 16, 0, 1, 0,
|
||||
0, 0, 26, 0, 16, 0,
|
||||
1, 0, 0, 0, 31, 0,
|
||||
4, 3, 42, 0, 16, 0,
|
||||
1, 0, 0, 0, 38, 0,
|
||||
0, 9, 0, 208, 0, 0,
|
||||
66, 0, 16, 0, 1, 0,
|
||||
130, 0, 16, 0, 1, 0,
|
||||
0, 0, 58, 0, 16, 0,
|
||||
0, 0, 0, 0, 42, 128,
|
||||
32, 0, 0, 0, 0, 0,
|
||||
|
|
@ -268,221 +262,203 @@ const BYTE g_DFT[] =
|
|||
0, 139, 2, 35, 0, 128,
|
||||
131, 153, 25, 0, 18, 0,
|
||||
16, 0, 4, 0, 0, 0,
|
||||
42, 0, 16, 0, 1, 0,
|
||||
0, 0, 1, 64, 0, 0,
|
||||
0, 0, 0, 0, 6, 224,
|
||||
17, 0, 2, 0, 0, 0,
|
||||
35, 0, 0, 11, 66, 0,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
58, 0, 16, 0, 0, 0,
|
||||
0, 0, 42, 128, 32, 0,
|
||||
0, 0, 0, 0, 6, 0,
|
||||
0, 0, 58, 128, 32, 0,
|
||||
0, 0, 0, 0, 6, 0,
|
||||
0, 0, 32, 0, 0, 8,
|
||||
130, 0, 16, 0, 1, 0,
|
||||
0, 0, 58, 128, 32, 0,
|
||||
0, 0, 0, 0, 5, 0,
|
||||
0, 0, 1, 64, 0, 0,
|
||||
2, 0, 0, 0, 167, 0,
|
||||
0, 139, 2, 35, 0, 128,
|
||||
131, 153, 25, 0, 66, 0,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
42, 0, 16, 0, 1, 0,
|
||||
0, 0, 1, 64, 0, 0,
|
||||
0, 0, 0, 0, 6, 224,
|
||||
17, 0, 2, 0, 0, 0,
|
||||
1, 0, 0, 7, 34, 0,
|
||||
16, 0, 4, 0, 0, 0,
|
||||
42, 0, 16, 0, 1, 0,
|
||||
0, 0, 58, 0, 16, 0,
|
||||
1, 0, 0, 0, 18, 0,
|
||||
0, 1, 54, 0, 0, 8,
|
||||
50, 0, 16, 0, 4, 0,
|
||||
0, 0, 2, 64, 0, 0,
|
||||
0, 0, 128, 63, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 21, 0,
|
||||
0, 1, 79, 0, 0, 8,
|
||||
66, 0, 16, 0, 1, 0,
|
||||
0, 0, 58, 0, 16, 0,
|
||||
0, 0, 0, 0, 26, 128,
|
||||
32, 0, 0, 0, 0, 0,
|
||||
1, 0, 0, 0, 31, 0,
|
||||
4, 3, 42, 0, 16, 0,
|
||||
1, 0, 0, 0, 38, 0,
|
||||
0, 9, 0, 208, 0, 0,
|
||||
130, 0, 16, 0, 0, 0,
|
||||
0, 0, 58, 0, 16, 0,
|
||||
0, 0, 0, 0, 26, 128,
|
||||
32, 0, 0, 0, 0, 0,
|
||||
2, 0, 0, 0, 35, 0,
|
||||
0, 10, 130, 0, 16, 0,
|
||||
0, 0, 0, 0, 10, 0,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
10, 128, 32, 0, 0, 0,
|
||||
0, 0, 2, 0, 0, 0,
|
||||
58, 0, 16, 0, 0, 0,
|
||||
0, 0, 35, 0, 0, 10,
|
||||
130, 0, 16, 0, 0, 0,
|
||||
0, 0, 10, 0, 16, 0,
|
||||
3, 0, 0, 0, 42, 128,
|
||||
32, 0, 0, 0, 0, 0,
|
||||
2, 0, 0, 0, 58, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
167, 0, 0, 139, 2, 35,
|
||||
0, 128, 131, 153, 25, 0,
|
||||
18, 0, 16, 0, 5, 0,
|
||||
0, 0, 58, 0, 16, 0,
|
||||
0, 0, 0, 0, 1, 64,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
6, 224, 17, 0, 0, 0,
|
||||
0, 0, 32, 0, 0, 8,
|
||||
66, 0, 16, 0, 1, 0,
|
||||
0, 0, 58, 128, 32, 0,
|
||||
0, 0, 0, 0, 1, 0,
|
||||
0, 0, 1, 64, 0, 0,
|
||||
2, 0, 0, 0, 31, 0,
|
||||
4, 3, 42, 0, 16, 0,
|
||||
1, 0, 0, 0, 30, 0,
|
||||
0, 8, 130, 0, 16, 0,
|
||||
0, 0, 0, 0, 58, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
58, 128, 32, 0, 0, 0,
|
||||
0, 0, 2, 0, 0, 0,
|
||||
167, 0, 0, 139, 2, 35,
|
||||
0, 128, 131, 153, 25, 0,
|
||||
34, 0, 16, 0, 5, 0,
|
||||
0, 0, 58, 0, 16, 0,
|
||||
0, 0, 0, 0, 1, 64,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
6, 224, 17, 0, 0, 0,
|
||||
0, 0, 18, 0, 0, 1,
|
||||
54, 0, 0, 5, 34, 0,
|
||||
16, 0, 5, 0, 0, 0,
|
||||
1, 64, 0, 0, 0, 0,
|
||||
0, 0, 21, 0, 0, 1,
|
||||
18, 0, 0, 1, 54, 0,
|
||||
0, 8, 50, 0, 16, 0,
|
||||
5, 0, 0, 0, 2, 64,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
21, 0, 0, 1, 56, 0,
|
||||
0, 7, 130, 0, 16, 0,
|
||||
0, 0, 0, 0, 26, 0,
|
||||
16, 0, 4, 0, 0, 0,
|
||||
26, 0, 16, 0, 5, 0,
|
||||
0, 0, 50, 0, 0, 10,
|
||||
130, 0, 16, 0, 0, 0,
|
||||
0, 0, 10, 0, 16, 0,
|
||||
5, 0, 0, 0, 10, 0,
|
||||
16, 0, 4, 0, 0, 0,
|
||||
58, 0, 16, 128, 65, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
15, 0, 0, 7, 66, 0,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
22, 5, 16, 0, 5, 0,
|
||||
0, 0, 70, 0, 16, 0,
|
||||
4, 0, 0, 0, 79, 0,
|
||||
0, 8, 130, 0, 16, 0,
|
||||
1, 0, 0, 0, 26, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
42, 128, 32, 0, 0, 0,
|
||||
0, 0, 5, 0, 0, 0,
|
||||
1, 0, 0, 7, 34, 0,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
58, 0, 16, 0, 1, 0,
|
||||
0, 0, 26, 0, 16, 0,
|
||||
1, 0, 0, 0, 31, 0,
|
||||
4, 3, 26, 0, 16, 0,
|
||||
1, 0, 0, 0, 38, 0,
|
||||
0, 9, 0, 208, 0, 0,
|
||||
34, 0, 16, 0, 1, 0,
|
||||
0, 0, 26, 0, 16, 0,
|
||||
0, 0, 0, 0, 42, 128,
|
||||
32, 0, 0, 0, 0, 0,
|
||||
6, 0, 0, 0, 167, 0,
|
||||
0, 139, 2, 35, 0, 128,
|
||||
131, 153, 25, 0, 18, 0,
|
||||
16, 0, 4, 0, 0, 0,
|
||||
26, 0, 16, 0, 1, 0,
|
||||
0, 0, 1, 64, 0, 0,
|
||||
0, 0, 0, 0, 6, 224,
|
||||
17, 0, 2, 0, 0, 0,
|
||||
35, 0, 0, 11, 34, 0,
|
||||
32, 0, 0, 8, 130, 0,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
26, 0, 16, 0, 0, 0,
|
||||
0, 0, 42, 128, 32, 0,
|
||||
0, 0, 0, 0, 6, 0,
|
||||
0, 0, 58, 128, 32, 0,
|
||||
0, 0, 0, 0, 6, 0,
|
||||
0, 0, 32, 0, 0, 8,
|
||||
130, 0, 16, 0, 1, 0,
|
||||
0, 0, 58, 128, 32, 0,
|
||||
0, 0, 0, 0, 5, 0,
|
||||
0, 0, 1, 64, 0, 0,
|
||||
2, 0, 0, 0, 167, 0,
|
||||
58, 128, 32, 0, 0, 0,
|
||||
0, 0, 5, 0, 0, 0,
|
||||
1, 64, 0, 0, 2, 0,
|
||||
0, 0, 31, 0, 4, 3,
|
||||
58, 0, 16, 0, 1, 0,
|
||||
0, 0, 35, 0, 0, 11,
|
||||
34, 0, 16, 0, 2, 0,
|
||||
0, 0, 58, 0, 16, 0,
|
||||
0, 0, 0, 0, 42, 128,
|
||||
32, 0, 0, 0, 0, 0,
|
||||
6, 0, 0, 0, 58, 128,
|
||||
32, 0, 0, 0, 0, 0,
|
||||
6, 0, 0, 0, 167, 0,
|
||||
0, 139, 2, 35, 0, 128,
|
||||
131, 153, 25, 0, 34, 0,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
26, 0, 16, 0, 1, 0,
|
||||
16, 0, 4, 0, 0, 0,
|
||||
26, 0, 16, 0, 2, 0,
|
||||
0, 0, 1, 64, 0, 0,
|
||||
0, 0, 0, 0, 6, 224,
|
||||
17, 0, 2, 0, 0, 0,
|
||||
1, 0, 0, 7, 34, 0,
|
||||
16, 0, 4, 0, 0, 0,
|
||||
26, 0, 16, 0, 1, 0,
|
||||
0, 0, 58, 0, 16, 0,
|
||||
1, 0, 0, 0, 18, 0,
|
||||
0, 1, 54, 0, 0, 8,
|
||||
50, 0, 16, 0, 4, 0,
|
||||
0, 0, 2, 64, 0, 0,
|
||||
0, 0, 128, 63, 0, 0,
|
||||
18, 0, 0, 1, 54, 0,
|
||||
0, 5, 34, 0, 16, 0,
|
||||
4, 0, 0, 0, 1, 64,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 21, 0,
|
||||
0, 1, 79, 0, 0, 8,
|
||||
34, 0, 16, 0, 1, 0,
|
||||
0, 0, 26, 0, 16, 0,
|
||||
0, 0, 0, 0, 26, 128,
|
||||
32, 0, 0, 0, 0, 0,
|
||||
1, 0, 0, 0, 31, 0,
|
||||
4, 3, 26, 0, 16, 0,
|
||||
1, 0, 0, 0, 38, 0,
|
||||
0, 9, 0, 208, 0, 0,
|
||||
34, 0, 16, 0, 0, 0,
|
||||
0, 0, 26, 0, 16, 0,
|
||||
0, 0, 0, 0, 26, 128,
|
||||
32, 0, 0, 0, 0, 0,
|
||||
2, 0, 0, 0, 35, 0,
|
||||
0, 10, 34, 0, 16, 0,
|
||||
0, 0, 0, 0, 10, 0,
|
||||
21, 0, 0, 1, 55, 0,
|
||||
0, 12, 98, 0, 16, 0,
|
||||
2, 0, 0, 0, 166, 10,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
86, 4, 16, 0, 4, 0,
|
||||
0, 0, 2, 64, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 128, 63,
|
||||
0, 0, 0, 0, 79, 0,
|
||||
0, 8, 66, 0, 16, 0,
|
||||
1, 0, 0, 0, 58, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
26, 128, 32, 0, 0, 0,
|
||||
0, 0, 1, 0, 0, 0,
|
||||
38, 0, 0, 9, 0, 208,
|
||||
0, 0, 18, 0, 16, 0,
|
||||
1, 0, 0, 0, 10, 0,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
10, 128, 32, 0, 0, 0,
|
||||
0, 0, 2, 0, 0, 0,
|
||||
26, 0, 16, 0, 0, 0,
|
||||
0, 0, 35, 0, 0, 10,
|
||||
34, 0, 16, 0, 0, 0,
|
||||
35, 0, 0, 10, 130, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
58, 0, 16, 0, 0, 0,
|
||||
0, 0, 26, 128, 32, 0,
|
||||
0, 0, 0, 0, 2, 0,
|
||||
0, 0, 10, 0, 16, 0,
|
||||
3, 0, 0, 0, 42, 128,
|
||||
1, 0, 0, 0, 35, 0,
|
||||
0, 10, 130, 0, 16, 0,
|
||||
0, 0, 0, 0, 10, 0,
|
||||
16, 0, 3, 0, 0, 0,
|
||||
42, 128, 32, 0, 0, 0,
|
||||
0, 0, 2, 0, 0, 0,
|
||||
58, 0, 16, 0, 0, 0,
|
||||
0, 0, 167, 0, 0, 139,
|
||||
2, 35, 0, 128, 131, 153,
|
||||
25, 0, 18, 0, 16, 0,
|
||||
4, 0, 0, 0, 58, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
1, 64, 0, 0, 0, 0,
|
||||
0, 0, 6, 224, 17, 0,
|
||||
0, 0, 0, 0, 32, 0,
|
||||
0, 8, 130, 0, 16, 0,
|
||||
2, 0, 0, 0, 58, 128,
|
||||
32, 0, 0, 0, 0, 0,
|
||||
1, 0, 0, 0, 1, 64,
|
||||
0, 0, 2, 0, 0, 0,
|
||||
31, 0, 4, 3, 58, 0,
|
||||
16, 0, 2, 0, 0, 0,
|
||||
30, 0, 0, 8, 130, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
58, 0, 16, 0, 0, 0,
|
||||
0, 0, 58, 128, 32, 0,
|
||||
0, 0, 0, 0, 2, 0,
|
||||
0, 0, 167, 0, 0, 139,
|
||||
2, 35, 0, 128, 131, 153,
|
||||
25, 0, 34, 0, 16, 0,
|
||||
4, 0, 0, 0, 58, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
1, 64, 0, 0, 0, 0,
|
||||
0, 0, 6, 224, 17, 0,
|
||||
0, 0, 0, 0, 18, 0,
|
||||
0, 1, 54, 0, 0, 5,
|
||||
34, 0, 16, 0, 4, 0,
|
||||
0, 0, 1, 64, 0, 0,
|
||||
0, 0, 0, 0, 21, 0,
|
||||
0, 1, 1, 0, 0, 7,
|
||||
98, 0, 16, 0, 3, 0,
|
||||
0, 0, 166, 10, 16, 0,
|
||||
1, 0, 0, 0, 6, 1,
|
||||
16, 0, 4, 0, 0, 0,
|
||||
56, 0, 0, 7, 130, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
26, 0, 16, 0, 2, 0,
|
||||
0, 0, 42, 0, 16, 0,
|
||||
3, 0, 0, 0, 50, 0,
|
||||
0, 10, 130, 0, 16, 0,
|
||||
0, 0, 0, 0, 26, 0,
|
||||
16, 0, 3, 0, 0, 0,
|
||||
42, 0, 16, 0, 2, 0,
|
||||
0, 0, 58, 0, 16, 128,
|
||||
65, 0, 0, 0, 0, 0,
|
||||
0, 0, 15, 0, 0, 7,
|
||||
66, 0, 16, 0, 1, 0,
|
||||
0, 0, 150, 5, 16, 0,
|
||||
3, 0, 0, 0, 150, 5,
|
||||
16, 0, 2, 0, 0, 0,
|
||||
79, 0, 0, 8, 34, 0,
|
||||
16, 0, 2, 0, 0, 0,
|
||||
26, 0, 16, 0, 0, 0,
|
||||
0, 0, 42, 128, 32, 0,
|
||||
0, 0, 0, 0, 5, 0,
|
||||
0, 0, 1, 0, 0, 7,
|
||||
34, 0, 16, 0, 1, 0,
|
||||
0, 0, 26, 0, 16, 0,
|
||||
1, 0, 0, 0, 26, 0,
|
||||
16, 0, 2, 0, 0, 0,
|
||||
38, 0, 0, 9, 0, 208,
|
||||
0, 0, 34, 0, 16, 0,
|
||||
2, 0, 0, 0, 26, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
42, 128, 32, 0, 0, 0,
|
||||
0, 0, 6, 0, 0, 0,
|
||||
167, 0, 0, 139, 2, 35,
|
||||
0, 128, 131, 153, 25, 0,
|
||||
18, 0, 16, 0, 1, 0,
|
||||
18, 0, 16, 0, 4, 0,
|
||||
0, 0, 26, 0, 16, 0,
|
||||
0, 0, 0, 0, 1, 64,
|
||||
2, 0, 0, 0, 1, 64,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
6, 224, 17, 0, 0, 0,
|
||||
0, 0, 32, 0, 0, 8,
|
||||
6, 224, 17, 0, 2, 0,
|
||||
0, 0, 31, 0, 4, 3,
|
||||
58, 0, 16, 0, 1, 0,
|
||||
0, 0, 35, 0, 0, 11,
|
||||
130, 0, 16, 0, 1, 0,
|
||||
0, 0, 58, 128, 32, 0,
|
||||
0, 0, 0, 0, 1, 0,
|
||||
0, 0, 26, 0, 16, 0,
|
||||
0, 0, 0, 0, 42, 128,
|
||||
32, 0, 0, 0, 0, 0,
|
||||
6, 0, 0, 0, 58, 128,
|
||||
32, 0, 0, 0, 0, 0,
|
||||
6, 0, 0, 0, 167, 0,
|
||||
0, 139, 2, 35, 0, 128,
|
||||
131, 153, 25, 0, 34, 0,
|
||||
16, 0, 4, 0, 0, 0,
|
||||
58, 0, 16, 0, 1, 0,
|
||||
0, 0, 1, 64, 0, 0,
|
||||
2, 0, 0, 0, 31, 0,
|
||||
0, 0, 0, 0, 6, 224,
|
||||
17, 0, 2, 0, 0, 0,
|
||||
18, 0, 0, 1, 54, 0,
|
||||
0, 5, 34, 0, 16, 0,
|
||||
4, 0, 0, 0, 1, 64,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
21, 0, 0, 1, 55, 0,
|
||||
0, 12, 162, 0, 16, 0,
|
||||
1, 0, 0, 0, 86, 5,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
86, 1, 16, 0, 4, 0,
|
||||
0, 0, 2, 64, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 128, 63, 79, 0,
|
||||
0, 8, 34, 0, 16, 0,
|
||||
2, 0, 0, 0, 26, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
26, 128, 32, 0, 0, 0,
|
||||
0, 0, 1, 0, 0, 0,
|
||||
35, 0, 0, 10, 34, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
26, 0, 16, 0, 0, 0,
|
||||
0, 0, 26, 128, 32, 0,
|
||||
0, 0, 0, 0, 2, 0,
|
||||
0, 0, 10, 0, 16, 0,
|
||||
1, 0, 0, 0, 35, 0,
|
||||
0, 10, 34, 0, 16, 0,
|
||||
0, 0, 0, 0, 10, 0,
|
||||
16, 0, 3, 0, 0, 0,
|
||||
42, 128, 32, 0, 0, 0,
|
||||
0, 0, 2, 0, 0, 0,
|
||||
26, 0, 16, 0, 0, 0,
|
||||
0, 0, 167, 0, 0, 139,
|
||||
2, 35, 0, 128, 131, 153,
|
||||
25, 0, 18, 0, 16, 0,
|
||||
3, 0, 0, 0, 26, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
1, 64, 0, 0, 0, 0,
|
||||
0, 0, 6, 224, 17, 0,
|
||||
0, 0, 0, 0, 31, 0,
|
||||
4, 3, 58, 0, 16, 0,
|
||||
1, 0, 0, 0, 30, 0,
|
||||
2, 0, 0, 0, 30, 0,
|
||||
0, 8, 34, 0, 16, 0,
|
||||
0, 0, 0, 0, 26, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
|
|
@ -490,39 +466,37 @@ const BYTE g_DFT[] =
|
|||
0, 0, 2, 0, 0, 0,
|
||||
167, 0, 0, 139, 2, 35,
|
||||
0, 128, 131, 153, 25, 0,
|
||||
34, 0, 16, 0, 1, 0,
|
||||
34, 0, 16, 0, 3, 0,
|
||||
0, 0, 26, 0, 16, 0,
|
||||
0, 0, 0, 0, 1, 64,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
6, 224, 17, 0, 0, 0,
|
||||
0, 0, 18, 0, 0, 1,
|
||||
54, 0, 0, 5, 34, 0,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
16, 0, 3, 0, 0, 0,
|
||||
1, 64, 0, 0, 0, 0,
|
||||
0, 0, 21, 0, 0, 1,
|
||||
18, 0, 0, 1, 54, 0,
|
||||
0, 8, 50, 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,
|
||||
21, 0, 0, 1, 56, 0,
|
||||
1, 0, 0, 7, 98, 0,
|
||||
16, 0, 2, 0, 0, 0,
|
||||
86, 5, 16, 0, 2, 0,
|
||||
0, 0, 6, 1, 16, 0,
|
||||
3, 0, 0, 0, 56, 0,
|
||||
0, 7, 34, 0, 16, 0,
|
||||
0, 0, 0, 0, 26, 0,
|
||||
16, 0, 4, 0, 0, 0,
|
||||
26, 0, 16, 0, 1, 0,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
42, 0, 16, 0, 2, 0,
|
||||
0, 0, 50, 0, 0, 10,
|
||||
34, 0, 16, 0, 0, 0,
|
||||
0, 0, 10, 0, 16, 0,
|
||||
1, 0, 0, 0, 10, 0,
|
||||
16, 0, 4, 0, 0, 0,
|
||||
0, 0, 26, 0, 16, 0,
|
||||
2, 0, 0, 0, 58, 0,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
26, 0, 16, 128, 65, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
15, 0, 0, 7, 18, 0,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
22, 5, 16, 0, 1, 0,
|
||||
0, 0, 70, 0, 16, 0,
|
||||
4, 0, 0, 0, 78, 0,
|
||||
150, 5, 16, 0, 2, 0,
|
||||
0, 0, 214, 5, 16, 0,
|
||||
1, 0, 0, 0, 78, 0,
|
||||
0, 8, 0, 208, 0, 0,
|
||||
34, 0, 16, 0, 1, 0,
|
||||
0, 0, 10, 0, 16, 0,
|
||||
|
|
@ -610,65 +584,77 @@ const BYTE g_DFT[] =
|
|||
16, 0, 0, 0, 0, 0,
|
||||
166, 138, 32, 0, 0, 0,
|
||||
0, 0, 7, 0, 0, 0,
|
||||
57, 0, 0, 8, 18, 0,
|
||||
24, 0, 0, 8, 18, 0,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
26, 128, 32, 0, 0, 0,
|
||||
0, 0, 7, 0, 0, 0,
|
||||
1, 64, 0, 0, 0, 0,
|
||||
0, 0, 31, 0, 4, 3,
|
||||
10, 0, 16, 0, 1, 0,
|
||||
0, 0, 54, 0, 0, 5,
|
||||
18, 0, 16, 0, 1, 0,
|
||||
0, 0, 58, 0, 16, 0,
|
||||
0, 0, 0, 0, 18, 0,
|
||||
0, 1, 57, 0, 0, 8,
|
||||
66, 0, 16, 0, 1, 0,
|
||||
0, 0, 26, 128, 32, 0,
|
||||
0, 0, 0, 0, 7, 0,
|
||||
0, 0, 1, 64, 0, 0,
|
||||
0, 0, 0, 0, 56, 0,
|
||||
0, 7, 34, 0, 16, 0,
|
||||
1, 0, 0, 0, 26, 0,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
26, 0, 16, 0, 1, 0,
|
||||
0, 0, 56, 0, 0, 7,
|
||||
34, 0, 16, 0, 1, 0,
|
||||
0, 0, 26, 0, 16, 0,
|
||||
1, 0, 0, 0, 26, 0,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
56, 0, 0, 7, 34, 0,
|
||||
1, 0, 0, 0, 1, 64,
|
||||
0, 0, 219, 15, 73, 64,
|
||||
14, 0, 0, 8, 34, 0,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
26, 0, 16, 0, 1, 0,
|
||||
0, 0, 1, 64, 0, 0,
|
||||
219, 15, 73, 64, 14, 0,
|
||||
0, 8, 34, 0, 16, 0,
|
||||
1, 0, 0, 0, 26, 0,
|
||||
0, 0, 26, 128, 32, 0,
|
||||
0, 0, 0, 0, 7, 0,
|
||||
0, 0, 77, 0, 0, 7,
|
||||
18, 0, 16, 0, 2, 0,
|
||||
0, 0, 18, 0, 16, 0,
|
||||
3, 0, 0, 0, 26, 0,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
26, 128, 32, 0, 0, 0,
|
||||
0, 0, 7, 0, 0, 0,
|
||||
77, 0, 0, 7, 18, 0,
|
||||
54, 0, 0, 5, 34, 0,
|
||||
16, 0, 2, 0, 0, 0,
|
||||
18, 0, 16, 0, 3, 0,
|
||||
0, 0, 26, 0, 16, 0,
|
||||
1, 0, 0, 0, 54, 0,
|
||||
0, 5, 34, 0, 16, 0,
|
||||
2, 0, 0, 0, 10, 0,
|
||||
16, 0, 3, 0, 0, 0,
|
||||
55, 0, 0, 12, 50, 0,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
6, 0, 16, 0, 1, 0,
|
||||
0, 0, 70, 0, 16, 0,
|
||||
2, 0, 0, 0, 2, 64,
|
||||
10, 0, 16, 0, 3, 0,
|
||||
0, 0, 55, 0, 0, 12,
|
||||
98, 0, 16, 0, 1, 0,
|
||||
0, 0, 166, 10, 16, 0,
|
||||
1, 0, 0, 0, 6, 1,
|
||||
16, 0, 2, 0, 0, 0,
|
||||
2, 64, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 128, 63, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
56, 0, 0, 7, 194, 0,
|
||||
0, 0, 56, 0, 0, 7,
|
||||
50, 0, 16, 0, 2, 0,
|
||||
0, 0, 86, 5, 16, 0,
|
||||
0, 0, 0, 0, 150, 5,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
86, 5, 16, 0, 0, 0,
|
||||
0, 0, 6, 4, 16, 0,
|
||||
1, 0, 0, 0, 50, 0,
|
||||
0, 10, 34, 0, 16, 0,
|
||||
50, 0, 0, 10, 18, 0,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
58, 0, 16, 0, 0, 0,
|
||||
0, 0, 42, 0, 16, 0,
|
||||
1, 0, 0, 0, 10, 0,
|
||||
16, 128, 65, 0, 0, 0,
|
||||
2, 0, 0, 0, 50, 0,
|
||||
0, 9, 34, 0, 16, 0,
|
||||
0, 0, 0, 0, 58, 0,
|
||||
16, 0, 0, 0, 0, 0,
|
||||
26, 0, 16, 0, 1, 0,
|
||||
0, 0, 42, 0, 16, 128,
|
||||
65, 0, 0, 0, 1, 0,
|
||||
0, 0, 168, 0, 0, 9,
|
||||
0, 0, 26, 0, 16, 0,
|
||||
2, 0, 0, 0, 21, 0,
|
||||
0, 1, 168, 0, 0, 9,
|
||||
18, 224, 17, 0, 1, 0,
|
||||
0, 0, 42, 0, 16, 0,
|
||||
0, 0, 0, 0, 1, 64,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
26, 0, 16, 0, 0, 0,
|
||||
0, 0, 50, 0, 0, 9,
|
||||
34, 0, 16, 0, 0, 0,
|
||||
0, 0, 58, 0, 16, 0,
|
||||
0, 0, 0, 0, 10, 0,
|
||||
16, 0, 1, 0, 0, 0,
|
||||
58, 0, 16, 0, 1, 0,
|
||||
10, 0, 16, 0, 1, 0,
|
||||
0, 0, 168, 0, 0, 9,
|
||||
18, 224, 17, 0, 1, 0,
|
||||
0, 0, 10, 0, 16, 0,
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
; Name Index Mask Register SysValue Format Used
|
||||
; -------------------- ----- ------ -------- -------- ------- ------
|
||||
; no parameters
|
||||
; shader hash: e08f21199c48b0db30bf21bd8c5b80dc
|
||||
; shader hash: 6a1d88feb14177832f5ee49ca330c549
|
||||
;
|
||||
; Pipeline Runtime Information:
|
||||
;
|
||||
|
|
@ -125,7 +125,7 @@ define void @DFT() {
|
|||
%47 = fpext half %46 to float
|
||||
%48 = extractvalue %dx.types.CBufRet.i32 %37, 3
|
||||
%49 = icmp eq i32 %48, 2
|
||||
br i1 %49, label %50, label %56
|
||||
br i1 %49, label %50, label %56, !dx.controlflow.hints !15
|
||||
|
||||
; <label>:50 ; preds = %41
|
||||
%51 = extractvalue %dx.types.CBufRet.i32 %42, 3
|
||||
|
|
@ -141,7 +141,7 @@ define void @DFT() {
|
|||
%59 = call %dx.types.CBufRet.i32 @dx.op.cbufferLoadLegacy.i32(i32 59, %dx.types.Handle %4, i32 1) ; CBufferLoadLegacy(handle,regIndex)
|
||||
%60 = extractvalue %dx.types.CBufRet.i32 %59, 1
|
||||
%61 = icmp ult i32 %33, %60
|
||||
br i1 %61, label %62, label %83, !dx.controlflow.hints !15
|
||||
br i1 %61, label %62, label %83, !dx.controlflow.hints !16
|
||||
|
||||
; <label>:62 ; preds = %56
|
||||
%63 = call %dx.types.CBufRet.i32 @dx.op.cbufferLoadLegacy.i32(i32 59, %dx.types.Handle %4, i32 2) ; CBufferLoadLegacy(handle,regIndex)
|
||||
|
|
@ -158,7 +158,7 @@ define void @DFT() {
|
|||
%74 = fpext half %73 to float
|
||||
%75 = extractvalue %dx.types.CBufRet.i32 %59, 3
|
||||
%76 = icmp eq i32 %75, 2
|
||||
br i1 %76, label %77, label %83, !dx.controlflow.hints !16
|
||||
br i1 %76, label %77, label %83, !dx.controlflow.hints !17
|
||||
|
||||
; <label>:77 ; preds = %62
|
||||
%78 = extractvalue %dx.types.CBufRet.i32 %63, 3
|
||||
|
|
@ -188,7 +188,7 @@ define void @DFT() {
|
|||
%98 = fpext half %97 to float
|
||||
%99 = extractvalue %dx.types.CBufRet.i32 %37, 3
|
||||
%100 = icmp eq i32 %99, 2
|
||||
br i1 %100, label %101, label %107
|
||||
br i1 %100, label %101, label %107, !dx.controlflow.hints !15
|
||||
|
||||
; <label>:101 ; preds = %92
|
||||
%102 = extractvalue %dx.types.CBufRet.i32 %93, 3
|
||||
|
|
@ -202,7 +202,7 @@ define void @DFT() {
|
|||
%108 = phi float [ %98, %101 ], [ %98, %92 ], [ 1.000000e+00, %83 ]
|
||||
%109 = phi float [ %106, %101 ], [ 0.000000e+00, %92 ], [ 0.000000e+00, %83 ]
|
||||
%110 = icmp ult i32 %34, %60
|
||||
br i1 %110, label %111, label %132, !dx.controlflow.hints !15
|
||||
br i1 %110, label %111, label %132, !dx.controlflow.hints !16
|
||||
|
||||
; <label>:111 ; preds = %107
|
||||
%112 = call %dx.types.CBufRet.i32 @dx.op.cbufferLoadLegacy.i32(i32 59, %dx.types.Handle %4, i32 2) ; CBufferLoadLegacy(handle,regIndex)
|
||||
|
|
@ -219,7 +219,7 @@ define void @DFT() {
|
|||
%123 = fpext half %122 to float
|
||||
%124 = extractvalue %dx.types.CBufRet.i32 %59, 3
|
||||
%125 = icmp eq i32 %124, 2
|
||||
br i1 %125, label %126, label %132, !dx.controlflow.hints !16
|
||||
br i1 %125, label %126, label %132, !dx.controlflow.hints !17
|
||||
|
||||
; <label>:126 ; preds = %111
|
||||
%127 = extractvalue %dx.types.CBufRet.i32 %112, 3
|
||||
|
|
@ -270,19 +270,21 @@ define void @DFT() {
|
|||
%170 = fmul fast float %158, %169
|
||||
%171 = extractvalue %dx.types.CBufRet.f32 %157, 1
|
||||
%172 = fcmp fast oeq float %171, 0.000000e+00
|
||||
br i1 %172, label %179, label %173
|
||||
br i1 %172, label %173, label %176, !dx.controlflow.hints !18
|
||||
|
||||
; <label>:173 ; preds = %132
|
||||
%174 = fmul fast float %146, %146
|
||||
%175 = fmul fast float %174, 0x400921FB60000000
|
||||
%176 = fdiv fast float %175, %171
|
||||
%177 = call float @dx.op.unary.f32(i32 12, float %176) ; Cos(value)
|
||||
%178 = call float @dx.op.unary.f32(i32 13, float %176) ; Sin(value)
|
||||
br label %179
|
||||
%174 = fptrunc float %164 to half
|
||||
call void @dx.op.rawBufferStore.f16(i32 140, %dx.types.Handle %2, i32 %154, i32 0, half %174, half undef, half undef, half undef, i8 1, i32 2) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
|
||||
%175 = fptrunc float %170 to half
|
||||
call void @dx.op.rawBufferStore.f16(i32 140, %dx.types.Handle %2, i32 %156, i32 0, half %175, half undef, half undef, half undef, i8 1, i32 2) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
|
||||
br label %190
|
||||
|
||||
; <label>:179 ; preds = %173, %132
|
||||
%180 = phi float [ %177, %173 ], [ 1.000000e+00, %132 ]
|
||||
%181 = phi float [ %178, %173 ], [ 0.000000e+00, %132 ]
|
||||
; <label>:176 ; preds = %132
|
||||
%177 = fmul fast float %146, %146
|
||||
%178 = fmul fast float %177, 0x400921FB60000000
|
||||
%179 = fdiv fast float %178, %171
|
||||
%180 = call float @dx.op.unary.f32(i32 12, float %179) ; Cos(value)
|
||||
%181 = call float @dx.op.unary.f32(i32 13, float %179) ; Sin(value)
|
||||
%182 = fmul fast float %180, %164
|
||||
%183 = fmul fast float %181, %170
|
||||
%184 = fsub fast float %182, %183
|
||||
|
|
@ -295,7 +297,7 @@ define void @DFT() {
|
|||
call void @dx.op.rawBufferStore.f16(i32 140, %dx.types.Handle %2, i32 %156, i32 0, half %189, half undef, half undef, half undef, i8 1, i32 2) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
|
||||
br label %190
|
||||
|
||||
; <label>:190 ; preds = %179, %0
|
||||
; <label>:190 ; preds = %176, %173, %0
|
||||
ret void
|
||||
}
|
||||
|
||||
|
|
@ -345,16 +347,18 @@ attributes #2 = { nounwind }
|
|||
!11 = !{void ()* @DFT, !"DFT", null, !4, !12}
|
||||
!12 = !{i32 0, i64 8388656, i32 4, !13}
|
||||
!13 = !{i32 64, i32 1, i32 1}
|
||||
!14 = distinct !{!14, !"dx.controlflow.hints", i32 1}
|
||||
!14 = distinct !{!14, !"dx.controlflow.hints", i32 2}
|
||||
!15 = distinct !{!15, !"dx.controlflow.hints", i32 1}
|
||||
!16 = distinct !{!16, !"dx.controlflow.hints", i32 1}
|
||||
!16 = distinct !{!16, !"dx.controlflow.hints", i32 2}
|
||||
!17 = distinct !{!17, !"dx.controlflow.hints", i32 1}
|
||||
!18 = distinct !{!18, !"dx.controlflow.hints", i32 1}
|
||||
|
||||
#endif
|
||||
|
||||
const unsigned char g_DFT[] = {
|
||||
0x44, 0x58, 0x42, 0x43, 0x0f, 0xc1, 0xea, 0x65, 0x6d, 0xe3, 0x8d, 0x13,
|
||||
0x2c, 0xb2, 0x19, 0xb3, 0xd4, 0xb1, 0x94, 0xb9, 0x01, 0x00, 0x00, 0x00,
|
||||
0xfc, 0x0b, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
|
||||
0x44, 0x58, 0x42, 0x43, 0x12, 0x40, 0x8a, 0x15, 0xf2, 0x7d, 0x33, 0xd8,
|
||||
0x35, 0x6a, 0x11, 0xd5, 0x43, 0xa1, 0x29, 0x3b, 0x01, 0x00, 0x00, 0x00,
|
||||
0x3c, 0x0c, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
|
||||
0x48, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00,
|
||||
0x18, 0x01, 0x00, 0x00, 0x34, 0x01, 0x00, 0x00, 0x53, 0x46, 0x49, 0x30,
|
||||
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
|
|
@ -376,12 +380,12 @@ const unsigned char g_DFT[] = {
|
|||
0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x48, 0x41, 0x53, 0x48, 0x14, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xe0, 0x8f, 0x21, 0x19, 0x9c, 0x48, 0xb0, 0xdb,
|
||||
0x30, 0xbf, 0x21, 0xbd, 0x8c, 0x5b, 0x80, 0xdc, 0x44, 0x58, 0x49, 0x4c,
|
||||
0xc0, 0x0a, 0x00, 0x00, 0x62, 0x00, 0x05, 0x00, 0xb0, 0x02, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x6a, 0x1d, 0x88, 0xfe, 0xb1, 0x41, 0x77, 0x83,
|
||||
0x2f, 0x5e, 0xe4, 0x9c, 0xa3, 0x30, 0xc5, 0x49, 0x44, 0x58, 0x49, 0x4c,
|
||||
0x00, 0x0b, 0x00, 0x00, 0x62, 0x00, 0x05, 0x00, 0xc0, 0x02, 0x00, 0x00,
|
||||
0x44, 0x58, 0x49, 0x4c, 0x02, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
|
||||
0xa8, 0x0a, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00,
|
||||
0xa7, 0x02, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00,
|
||||
0xe8, 0x0a, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00,
|
||||
0xb7, 0x02, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00,
|
||||
0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49,
|
||||
0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19,
|
||||
0x1e, 0x04, 0x8b, 0x62, 0x80, 0x18, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42,
|
||||
|
|
@ -441,7 +445,7 @@ const unsigned char g_DFT[] = {
|
|||
0x4a, 0xa0, 0x08, 0x8a, 0x61, 0x04, 0xa0, 0x30, 0x0a, 0x50, 0xa0, 0x10,
|
||||
0x0a, 0x30, 0x80, 0xb0, 0x11, 0x00, 0x0a, 0x0b, 0x1c, 0x10, 0x10, 0x81,
|
||||
0xc0, 0x19, 0x00, 0xea, 0x66, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00,
|
||||
0x4f, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0x44,
|
||||
0x52, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0x44,
|
||||
0x35, 0x18, 0x63, 0x0b, 0x73, 0x3b, 0x03, 0xb1, 0x2b, 0x93, 0x9b, 0x4b,
|
||||
0x7b, 0x73, 0x03, 0x99, 0x71, 0xb9, 0x01, 0x41, 0xa1, 0x0b, 0x3b, 0x9b,
|
||||
0x7b, 0x91, 0x2a, 0x62, 0x2a, 0x0a, 0x9a, 0x2a, 0xfa, 0x9a, 0xb9, 0x81,
|
||||
|
|
@ -458,16 +462,17 @@ const unsigned char g_DFT[] = {
|
|||
0x70, 0x26, 0x08, 0xc3, 0xb3, 0x61, 0xe0, 0x86, 0x61, 0x03, 0xa1, 0x68,
|
||||
0x5b, 0xb7, 0xa1, 0xc0, 0x32, 0xe0, 0xf2, 0x48, 0x91, 0xe1, 0xb9, 0x8c,
|
||||
0xbd, 0xb9, 0xd1, 0xc9, 0xbd, 0xb1, 0x99, 0xb1, 0xbd, 0xdd, 0xb9, 0xa0,
|
||||
0xa5, 0xb9, 0xd1, 0xcd, 0xad, 0x18, 0xc2, 0x00, 0x0c, 0x86, 0x15, 0x83,
|
||||
0x18, 0x80, 0xc1, 0xb0, 0x62, 0x18, 0x03, 0x30, 0x18, 0xaa, 0xb0, 0xb1,
|
||||
0xd9, 0xb5, 0xb9, 0xa4, 0x91, 0x95, 0xb9, 0xd1, 0x4d, 0x09, 0x82, 0x2a,
|
||||
0x64, 0x78, 0x2e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x02,
|
||||
0xa2, 0x09, 0x19, 0x9e, 0x8b, 0x5d, 0x18, 0x9b, 0x5d, 0x99, 0xdc, 0x94,
|
||||
0xc0, 0xa8, 0x43, 0x86, 0xe7, 0x32, 0x87, 0x16, 0x46, 0x56, 0x26, 0xd7,
|
||||
0xf4, 0x46, 0x56, 0xc6, 0x36, 0x25, 0x40, 0xca, 0x90, 0xe1, 0xb9, 0xc8,
|
||||
0x95, 0xcd, 0xbd, 0xd5, 0xc9, 0x8d, 0x95, 0xcd, 0x4d, 0x09, 0xac, 0x3a,
|
||||
0x64, 0x78, 0x2e, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e,
|
||||
0x74, 0x73, 0x53, 0x02, 0x0f, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00,
|
||||
0xa5, 0xb9, 0xd1, 0xcd, 0xad, 0x18, 0xc2, 0x00, 0x0c, 0x88, 0x15, 0x83,
|
||||
0x18, 0x80, 0xc1, 0xb0, 0x62, 0x18, 0x03, 0x30, 0x20, 0x56, 0x0c, 0x64,
|
||||
0x00, 0x06, 0xc3, 0x8a, 0xa1, 0x0c, 0xc0, 0x60, 0xa8, 0xc2, 0xc6, 0x66,
|
||||
0xd7, 0xe6, 0x92, 0x46, 0x56, 0xe6, 0x46, 0x37, 0x25, 0x08, 0xaa, 0x90,
|
||||
0xe1, 0xb9, 0xd8, 0x95, 0xc9, 0xcd, 0xa5, 0xbd, 0xb9, 0x4d, 0x09, 0x88,
|
||||
0x26, 0x64, 0x78, 0x2e, 0x76, 0x61, 0x6c, 0x76, 0x65, 0x72, 0x53, 0x02,
|
||||
0xa3, 0x0e, 0x19, 0x9e, 0xcb, 0x1c, 0x5a, 0x18, 0x59, 0x99, 0x5c, 0xd3,
|
||||
0x1b, 0x59, 0x19, 0xdb, 0x94, 0x00, 0x29, 0x43, 0x86, 0xe7, 0x22, 0x57,
|
||||
0x36, 0xf7, 0x56, 0x27, 0x37, 0x56, 0x36, 0x37, 0x25, 0xb0, 0xea, 0x90,
|
||||
0xe1, 0xb9, 0x94, 0xb9, 0xd1, 0xc9, 0xe5, 0x41, 0xbd, 0xa5, 0xb9, 0xd1,
|
||||
0xcd, 0x4d, 0x09, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00,
|
||||
0x59, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66,
|
||||
0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07,
|
||||
0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10,
|
||||
|
|
@ -510,9 +515,9 @@ const unsigned char g_DFT[] = {
|
|||
0x13, 0x11, 0x7e, 0x51, 0xeb, 0x16, 0x20, 0x0d, 0x97, 0xef, 0x3c, 0xfe,
|
||||
0x74, 0x44, 0x04, 0x30, 0x88, 0x83, 0x8f, 0xdc, 0xb6, 0x09, 0x3c, 0xc3,
|
||||
0xe5, 0x3b, 0x8f, 0x4f, 0x35, 0x40, 0x84, 0xf9, 0xc5, 0x6d, 0x03, 0x00,
|
||||
0x61, 0x20, 0x00, 0x00, 0x22, 0x01, 0x00, 0x00, 0x13, 0x04, 0x51, 0x2c,
|
||||
0x61, 0x20, 0x00, 0x00, 0x2f, 0x01, 0x00, 0x00, 0x13, 0x04, 0x51, 0x2c,
|
||||
0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x34, 0x94, 0x5d, 0x59,
|
||||
0x0a, 0x94, 0x5c, 0xf9, 0x94, 0x43, 0x0d, 0x94, 0x46, 0x61, 0x0a, 0x94,
|
||||
0x0a, 0x94, 0x5c, 0x61, 0x0a, 0x94, 0x4f, 0x39, 0xd4, 0x40, 0x69, 0x94,
|
||||
0x6e, 0x40, 0x19, 0x94, 0x02, 0x2d, 0x45, 0x50, 0x02, 0x64, 0x8c, 0x11,
|
||||
0xec, 0xfe, 0x28, 0xb3, 0x60, 0x30, 0x46, 0xb0, 0xfb, 0xa3, 0xcc, 0x82,
|
||||
0xc3, 0x18, 0xc1, 0xee, 0x8f, 0x32, 0x09, 0x06, 0x94, 0xcc, 0x00, 0x90,
|
||||
|
|
@ -525,87 +530,91 @@ const unsigned char g_DFT[] = {
|
|||
0x3c, 0x60, 0x30, 0x62, 0x70, 0x00, 0x20, 0x08, 0x06, 0xd3, 0x19, 0x60,
|
||||
0x42, 0x18, 0x8c, 0x26, 0x04, 0x40, 0x05, 0x03, 0x8c, 0x26, 0x0c, 0xc1,
|
||||
0x70, 0x83, 0x10, 0x90, 0xc1, 0x2c, 0x43, 0x00, 0x05, 0x23, 0x06, 0x07,
|
||||
0x00, 0x82, 0x60, 0x30, 0xb1, 0x41, 0x77, 0x64, 0xa3, 0x09, 0xc1, 0x50,
|
||||
0xc1, 0x1a, 0xe0, 0x68, 0x02, 0x22, 0x54, 0xe0, 0x69, 0xb9, 0x41, 0x70,
|
||||
0x35, 0x80, 0x01, 0x54, 0x10, 0x06, 0x6a, 0x71, 0x10, 0x5c, 0x60, 0xc4,
|
||||
0xe0, 0x00, 0x40, 0x10, 0x0c, 0xa6, 0x3a, 0x30, 0x03, 0xa8, 0x1b, 0x4d,
|
||||
0x08, 0x82, 0xd1, 0x04, 0x41, 0xa8, 0x40, 0x90, 0x82, 0x82, 0xaa, 0x48,
|
||||
0x98, 0x12, 0x88, 0xa9, 0xa1, 0xa8, 0x12, 0x1a, 0xac, 0x60, 0xb9, 0x5a,
|
||||
0xd6, 0x00, 0xaa, 0x08, 0xb4, 0x86, 0x00, 0x2a, 0xa0, 0x60, 0x34, 0xe1,
|
||||
0x02, 0x86, 0x1b, 0x82, 0x50, 0x00, 0x83, 0x11, 0x83, 0x03, 0x00, 0x41,
|
||||
0x30, 0x98, 0x4a, 0xc1, 0x0e, 0xc0, 0x80, 0x0d, 0x46, 0x13, 0x02, 0x61,
|
||||
0xb8, 0xc1, 0x08, 0xc8, 0xa0, 0x88, 0x40, 0x67, 0x19, 0x04, 0x22, 0x18,
|
||||
0x31, 0x38, 0x00, 0x10, 0x04, 0x83, 0x29, 0x15, 0xf4, 0x80, 0x0c, 0x48,
|
||||
0x61, 0x34, 0x21, 0x10, 0x2a, 0x50, 0x64, 0xc4, 0x40, 0x01, 0x40, 0x10,
|
||||
0x0c, 0x1c, 0x57, 0xe0, 0x03, 0x35, 0x08, 0x4c, 0x21, 0x0e, 0x50, 0x61,
|
||||
0x34, 0x21, 0x00, 0x2e, 0x30, 0x70, 0x34, 0x41, 0x19, 0x86, 0x1b, 0x02,
|
||||
0x56, 0x00, 0x83, 0x59, 0x86, 0x81, 0x08, 0x46, 0x13, 0x90, 0xa1, 0x82,
|
||||
0x03, 0x46, 0x0c, 0x14, 0x00, 0x04, 0xc1, 0xc0, 0xa9, 0x85, 0x51, 0x88,
|
||||
0x83, 0xa0, 0x15, 0xf0, 0xe0, 0x15, 0x46, 0x13, 0x02, 0xe0, 0x02, 0x03,
|
||||
0x67, 0x09, 0x88, 0x81, 0x0e, 0x03, 0x1a, 0x20, 0x81, 0x1d, 0x82, 0x81,
|
||||
0x0e, 0x83, 0x18, 0xd8, 0x41, 0x60, 0x87, 0x60, 0xc4, 0xe0, 0x00, 0x40,
|
||||
0x10, 0x0c, 0x26, 0x5c, 0x48, 0x85, 0x39, 0xa8, 0x85, 0xd1, 0x84, 0x20,
|
||||
0x18, 0x6e, 0xc8, 0x02, 0x32, 0x98, 0x65, 0x28, 0x8e, 0x60, 0xc4, 0xe0,
|
||||
0x00, 0x40, 0x10, 0x0c, 0xa6, 0x5d, 0x60, 0x05, 0x3b, 0xb8, 0x85, 0xd1,
|
||||
0x84, 0x00, 0xa8, 0x60, 0x0c, 0x64, 0x34, 0x61, 0x08, 0x2a, 0xf0, 0xa4,
|
||||
0x82, 0x01, 0x46, 0x13, 0x0c, 0xa1, 0x02, 0x33, 0x90, 0x1a, 0x02, 0x18,
|
||||
0x31, 0x50, 0x00, 0x10, 0x04, 0x03, 0xc7, 0x1c, 0x68, 0x01, 0x14, 0x02,
|
||||
0x5f, 0x48, 0x05, 0x70, 0x18, 0x4d, 0x08, 0x80, 0x0b, 0x0c, 0x1c, 0x4d,
|
||||
0x78, 0x86, 0xe1, 0x86, 0x80, 0x1c, 0xc0, 0x60, 0x96, 0xc1, 0x38, 0x82,
|
||||
0xd1, 0x04, 0x67, 0xa8, 0xe0, 0x80, 0x11, 0x03, 0x05, 0x00, 0x41, 0x30,
|
||||
0x70, 0xda, 0x61, 0x17, 0x4e, 0x21, 0x28, 0x07, 0x58, 0x38, 0x87, 0xd1,
|
||||
0x84, 0x00, 0xb8, 0xc0, 0xc0, 0x59, 0x82, 0x63, 0xa0, 0xc3, 0x80, 0x0c,
|
||||
0xa8, 0xd0, 0x09, 0x62, 0xa0, 0xc3, 0x20, 0x0c, 0x9e, 0x28, 0x78, 0x82,
|
||||
0x30, 0x41, 0x93, 0x8f, 0x09, 0x9a, 0x7c, 0x8c, 0xd8, 0xe4, 0x63, 0x44,
|
||||
0x27, 0x9f, 0xe1, 0x06, 0x39, 0x70, 0x03, 0x32, 0xa8, 0x38, 0x08, 0x74,
|
||||
0x96, 0x01, 0x51, 0x82, 0x11, 0x83, 0x03, 0x00, 0x41, 0x30, 0x98, 0xec,
|
||||
0xe1, 0x1c, 0x62, 0x21, 0x1e, 0x46, 0x13, 0x02, 0xa1, 0x02, 0x3b, 0x90,
|
||||
0x11, 0x03, 0x05, 0x00, 0x41, 0x30, 0x70, 0xf6, 0x21, 0x1d, 0x6e, 0x21,
|
||||
0x98, 0x07, 0x5f, 0xa8, 0x87, 0xd1, 0x84, 0x00, 0xb8, 0xc0, 0xc0, 0xd1,
|
||||
0x84, 0x3b, 0x18, 0x86, 0x1b, 0x82, 0x7c, 0x00, 0x83, 0x59, 0x86, 0x44,
|
||||
0x09, 0x46, 0x13, 0x90, 0xa1, 0x82, 0x03, 0x46, 0x0c, 0x14, 0x00, 0x04,
|
||||
0xc1, 0xc0, 0x11, 0x09, 0x78, 0xf0, 0x85, 0x40, 0x1f, 0xca, 0x81, 0x1f,
|
||||
0x46, 0x13, 0x02, 0xe0, 0x02, 0x03, 0x67, 0x09, 0x94, 0x81, 0x0e, 0x03,
|
||||
0x4a, 0x20, 0xc4, 0x34, 0x8e, 0x81, 0x0e, 0x83, 0x48, 0x4c, 0x03, 0x31,
|
||||
0x8d, 0x63, 0xb8, 0x61, 0x14, 0xd8, 0x80, 0x0c, 0x66, 0x19, 0x96, 0x26,
|
||||
0x18, 0x31, 0x38, 0x00, 0x10, 0x04, 0x83, 0xc9, 0x24, 0xee, 0x21, 0x1c,
|
||||
0x44, 0x62, 0x34, 0x21, 0x00, 0x2a, 0x70, 0x05, 0x19, 0x4d, 0x18, 0x82,
|
||||
0x0a, 0x50, 0x41, 0x2a, 0x18, 0x60, 0x34, 0xc1, 0x10, 0x2a, 0x88, 0x05,
|
||||
0xa9, 0x21, 0x80, 0x11, 0x03, 0x05, 0x00, 0x41, 0x30, 0x70, 0x62, 0xe2,
|
||||
0x1f, 0xd6, 0x21, 0x48, 0x09, 0x7a, 0x58, 0x89, 0xd1, 0x84, 0x00, 0xb8,
|
||||
0xc0, 0xc0, 0xd1, 0x04, 0x3d, 0x18, 0x86, 0x1b, 0x82, 0x97, 0x00, 0x83,
|
||||
0x59, 0x06, 0xa6, 0x09, 0x46, 0x13, 0x9c, 0xa1, 0x82, 0x03, 0x46, 0x0c,
|
||||
0x14, 0x00, 0x04, 0xc1, 0xc0, 0xc1, 0x09, 0x93, 0x90, 0x87, 0x00, 0x26,
|
||||
0xf6, 0x41, 0x26, 0x46, 0x13, 0x02, 0xe0, 0x02, 0x03, 0x67, 0x09, 0x9a,
|
||||
0x81, 0x0e, 0x03, 0x62, 0xa0, 0x05, 0x3e, 0x94, 0x81, 0x0e, 0x83, 0x60,
|
||||
0xe4, 0x63, 0x91, 0x0f, 0xc5, 0x04, 0x4c, 0x3e, 0x26, 0x60, 0xf2, 0x31,
|
||||
0x21, 0x88, 0x8f, 0x15, 0x9a, 0x7c, 0xac, 0xe0, 0xe4, 0x63, 0x81, 0x00,
|
||||
0x9f, 0x82, 0x87, 0x96, 0x80, 0x3a, 0x87, 0x40, 0x47, 0x13, 0xf8, 0x61,
|
||||
0x18, 0x6e, 0x08, 0xc2, 0x02, 0x0c, 0xa6, 0x1b, 0x52, 0x02, 0x25, 0x82,
|
||||
0x23, 0x8c, 0x32, 0x21, 0x90, 0xcf, 0xdd, 0x83, 0x51, 0x26, 0x04, 0xf4,
|
||||
0x19, 0x31, 0x30, 0x00, 0x10, 0x04, 0x83, 0xa3, 0x2d, 0xc6, 0x22, 0x18,
|
||||
0x31, 0x30, 0x00, 0x10, 0x04, 0x83, 0xc3, 0x2d, 0x6c, 0x42, 0x18, 0x31,
|
||||
0x38, 0x00, 0x10, 0x04, 0x83, 0x89, 0x2d, 0x7a, 0xe2, 0x24, 0xc6, 0x62,
|
||||
0x34, 0x21, 0x10, 0x2a, 0x28, 0x09, 0x19, 0x4d, 0x18, 0x86, 0x12, 0x02,
|
||||
0x18, 0x31, 0x38, 0x00, 0x10, 0x04, 0x03, 0x0b, 0x2e, 0xc4, 0x82, 0x25,
|
||||
0x7c, 0x62, 0x34, 0x21, 0x10, 0x2c, 0xb1, 0xe4, 0x63, 0x09, 0x25, 0x1f,
|
||||
0x2b, 0x05, 0x52, 0x88, 0x8f, 0x05, 0x03, 0x7c, 0x2c, 0x18, 0xe2, 0x63,
|
||||
0x46, 0x20, 0x1f, 0x7b, 0x32, 0xf9, 0xd8, 0xd3, 0xc9, 0xc7, 0x50, 0x21,
|
||||
0x15, 0xe0, 0x63, 0xc1, 0x00, 0x1f, 0x0b, 0x06, 0xf8, 0x18, 0x13, 0xc8,
|
||||
0x67, 0x34, 0xc1, 0x09, 0x86, 0x23, 0x82, 0x9f, 0x08, 0xbe, 0x59, 0x86,
|
||||
0xc7, 0x09, 0x6c, 0xdb, 0xe4, 0x63, 0x01, 0x59, 0xc8, 0xc7, 0x02, 0x82,
|
||||
0x3e, 0x23, 0x06, 0x06, 0x00, 0x82, 0x60, 0x70, 0x9c, 0x46, 0x5f, 0x04,
|
||||
0x23, 0x06, 0x06, 0x00, 0x82, 0x60, 0x70, 0xa0, 0x06, 0x5c, 0x08, 0xb3,
|
||||
0x04, 0xcf, 0x40, 0x85, 0x41, 0x38, 0xac, 0xd2, 0x0c, 0x54, 0x18, 0x84,
|
||||
0xc3, 0x2a, 0x8d, 0x09, 0x90, 0x7c, 0x4c, 0x58, 0xe4, 0x63, 0x42, 0x10,
|
||||
0x9f, 0x0b, 0x92, 0x1b, 0x31, 0x70, 0x00, 0x10, 0x04, 0x03, 0xa8, 0x35,
|
||||
0xec, 0x22, 0x2d, 0x3c, 0xd3, 0x08, 0xda, 0xa2, 0x2d, 0xda, 0x22, 0x2e,
|
||||
0x50, 0xc3, 0x0a, 0x4a, 0x3e, 0x76, 0x3c, 0xf2, 0x31, 0x21, 0x80, 0xcf,
|
||||
0x05, 0xc9, 0x8d, 0x18, 0x38, 0x00, 0x08, 0x82, 0x01, 0x14, 0x1b, 0x7a,
|
||||
0xd1, 0x16, 0x60, 0xa0, 0x1a, 0x41, 0x5c, 0xc4, 0x45, 0x5c, 0xd4, 0x05,
|
||||
0x6b, 0xcc, 0x12, 0x40, 0x18, 0x10, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00,
|
||||
0x5b, 0x06, 0x34, 0x78, 0xc0, 0x60, 0xcb, 0xd0, 0x07, 0x4f, 0x18, 0x6c,
|
||||
0x19, 0x58, 0xe1, 0x11, 0x83, 0x2d, 0xc3, 0x2e, 0x3c, 0x60, 0xb0, 0x65,
|
||||
0x70, 0x87, 0x27, 0x0c, 0xb6, 0x0c, 0xfd, 0xf0, 0x88, 0x01, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
0x00, 0x82, 0x60, 0x30, 0xb1, 0x41, 0x77, 0x60, 0xa3, 0x09, 0xc1, 0x50,
|
||||
0xc1, 0x1a, 0xe0, 0x68, 0x02, 0x22, 0x54, 0xd0, 0x69, 0xb9, 0x41, 0x70,
|
||||
0x35, 0x7c, 0x50, 0x01, 0x18, 0xa8, 0xc5, 0x41, 0x70, 0x81, 0x11, 0x83,
|
||||
0x03, 0x00, 0x41, 0x30, 0x98, 0xea, 0xc0, 0x0c, 0xa0, 0x6e, 0x34, 0x21,
|
||||
0x08, 0x46, 0x13, 0x04, 0xa1, 0x02, 0x41, 0x0a, 0x0a, 0xaa, 0x22, 0x61,
|
||||
0x4a, 0x20, 0xa6, 0x86, 0xa2, 0x4a, 0x68, 0xb0, 0x82, 0xe5, 0x6a, 0x51,
|
||||
0x03, 0xa8, 0x22, 0xd0, 0x1a, 0x02, 0xa8, 0x80, 0x82, 0xd1, 0x84, 0x0b,
|
||||
0x18, 0x6e, 0x08, 0x42, 0x01, 0x0c, 0x46, 0x0c, 0x0e, 0x00, 0x04, 0xc1,
|
||||
0x60, 0x2a, 0x05, 0x3b, 0x00, 0x03, 0x36, 0x18, 0x4d, 0x08, 0x84, 0xe1,
|
||||
0x06, 0x23, 0x20, 0x83, 0x22, 0x02, 0x9d, 0x65, 0x10, 0x88, 0x60, 0xc4,
|
||||
0xe0, 0x00, 0x40, 0x10, 0x0c, 0xa6, 0x54, 0xd0, 0x03, 0x32, 0x20, 0x85,
|
||||
0xd1, 0x84, 0x40, 0xa8, 0x40, 0x91, 0x11, 0x03, 0x05, 0x00, 0x41, 0x30,
|
||||
0x70, 0x5c, 0x81, 0x0f, 0xd4, 0x20, 0x30, 0x85, 0x38, 0x40, 0x85, 0xd1,
|
||||
0x84, 0x00, 0xb8, 0xc0, 0xc0, 0xd1, 0x04, 0x65, 0x18, 0x6e, 0x08, 0x58,
|
||||
0x01, 0x0c, 0x66, 0x19, 0x06, 0x22, 0x18, 0x4d, 0x40, 0x86, 0x0a, 0x0e,
|
||||
0x18, 0x31, 0x50, 0x00, 0x10, 0x04, 0x03, 0xa7, 0x16, 0x46, 0x21, 0x0e,
|
||||
0x82, 0x56, 0xc0, 0x83, 0x57, 0x18, 0x4d, 0x08, 0x80, 0x0b, 0x0c, 0x9c,
|
||||
0x25, 0x20, 0x06, 0x3a, 0x0c, 0x68, 0x80, 0x04, 0x76, 0x08, 0x06, 0x3a,
|
||||
0x0c, 0x62, 0x60, 0x07, 0x81, 0x1d, 0x82, 0x11, 0x83, 0x03, 0x00, 0x41,
|
||||
0x30, 0x98, 0x70, 0x21, 0x15, 0xe6, 0xa0, 0x16, 0x46, 0x13, 0x82, 0x60,
|
||||
0xb8, 0x21, 0x0b, 0xc8, 0x60, 0x96, 0xa1, 0x38, 0x82, 0x11, 0x83, 0x03,
|
||||
0x00, 0x41, 0x30, 0x98, 0x76, 0x81, 0x15, 0xec, 0xe0, 0x16, 0x46, 0x13,
|
||||
0x02, 0xa0, 0x82, 0x31, 0x90, 0xd1, 0x84, 0x21, 0xa8, 0xc0, 0x93, 0x0a,
|
||||
0x06, 0x18, 0x4d, 0x30, 0x84, 0x0a, 0xcc, 0x40, 0x6a, 0x08, 0x60, 0xc4,
|
||||
0x40, 0x01, 0x40, 0x10, 0x0c, 0x1c, 0x73, 0xa0, 0x05, 0x50, 0x08, 0x7c,
|
||||
0x21, 0x15, 0xc0, 0x61, 0x34, 0x21, 0x00, 0x2e, 0x30, 0x70, 0x34, 0xe1,
|
||||
0x19, 0x86, 0x1b, 0x02, 0x72, 0x00, 0x83, 0x59, 0x06, 0xe3, 0x08, 0x46,
|
||||
0x13, 0x9c, 0xa1, 0x82, 0x03, 0x46, 0x0c, 0x14, 0x00, 0x04, 0xc1, 0xc0,
|
||||
0x69, 0x87, 0x5d, 0x38, 0x85, 0xa0, 0x1c, 0x60, 0xe1, 0x1c, 0x46, 0x13,
|
||||
0x02, 0xe0, 0x02, 0x03, 0x67, 0x09, 0x8e, 0x81, 0x0e, 0x03, 0x32, 0xa0,
|
||||
0x42, 0x27, 0x88, 0x81, 0x0e, 0x83, 0x30, 0x78, 0xa2, 0xe0, 0x09, 0xc2,
|
||||
0x04, 0x4d, 0x3e, 0x26, 0x68, 0xf2, 0x31, 0x62, 0x93, 0x8f, 0x11, 0x9d,
|
||||
0x7c, 0x86, 0x1b, 0xe4, 0xc0, 0x0d, 0xc8, 0xa0, 0xe2, 0x20, 0xd0, 0x59,
|
||||
0x06, 0x44, 0x09, 0x46, 0x0c, 0x0e, 0x00, 0x04, 0xc1, 0x60, 0xb2, 0x87,
|
||||
0x73, 0x88, 0x85, 0x78, 0x18, 0x4d, 0x08, 0x84, 0x0a, 0xec, 0x40, 0x46,
|
||||
0x0c, 0x14, 0x00, 0x04, 0xc1, 0xc0, 0xd9, 0x87, 0x74, 0xb8, 0x85, 0x60,
|
||||
0x1e, 0x7c, 0xa1, 0x1e, 0x46, 0x13, 0x02, 0xe0, 0x02, 0x03, 0x47, 0x13,
|
||||
0xee, 0x60, 0x18, 0x6e, 0x08, 0xf2, 0x01, 0x0c, 0x66, 0x19, 0x12, 0x25,
|
||||
0x18, 0x4d, 0x40, 0x86, 0x0a, 0x0e, 0x18, 0x31, 0x50, 0x00, 0x10, 0x04,
|
||||
0x03, 0x47, 0x24, 0xe0, 0xc1, 0x17, 0x02, 0x7d, 0x28, 0x07, 0x7e, 0x18,
|
||||
0x4d, 0x08, 0x80, 0x0b, 0x0c, 0x9c, 0x25, 0x50, 0x06, 0x3a, 0x0c, 0x28,
|
||||
0x81, 0x10, 0xd3, 0x38, 0x06, 0x3a, 0x0c, 0x22, 0x31, 0x0d, 0xc4, 0x34,
|
||||
0x8e, 0xe1, 0x86, 0x51, 0x60, 0x03, 0x32, 0x98, 0x65, 0x58, 0x9a, 0x60,
|
||||
0xc4, 0xe0, 0x00, 0x40, 0x10, 0x0c, 0x26, 0x93, 0xb8, 0x87, 0x70, 0x10,
|
||||
0x89, 0xd1, 0x84, 0x00, 0xa8, 0xc0, 0x15, 0x64, 0x34, 0x61, 0x08, 0x2a,
|
||||
0x40, 0x05, 0xa9, 0x60, 0x80, 0xd1, 0x04, 0x43, 0xa8, 0x20, 0x16, 0xa4,
|
||||
0x86, 0x00, 0x46, 0x0c, 0x14, 0x00, 0x04, 0xc1, 0xc0, 0x89, 0x89, 0x7f,
|
||||
0x58, 0x87, 0x20, 0x25, 0xe8, 0x61, 0x25, 0x46, 0x13, 0x02, 0xe0, 0x02,
|
||||
0x03, 0x47, 0x13, 0xf4, 0x60, 0x18, 0x6e, 0x08, 0x5e, 0x02, 0x0c, 0x66,
|
||||
0x19, 0x98, 0x26, 0x18, 0x4d, 0x70, 0x86, 0x0a, 0x0e, 0x18, 0x31, 0x50,
|
||||
0x00, 0x10, 0x04, 0x03, 0x07, 0x27, 0x4c, 0x42, 0x1e, 0x02, 0x98, 0xd8,
|
||||
0x07, 0x99, 0x18, 0x4d, 0x08, 0x80, 0x0b, 0x0c, 0x9c, 0x25, 0x68, 0x06,
|
||||
0x3a, 0x0c, 0x88, 0x81, 0x16, 0xf8, 0x50, 0x06, 0x3a, 0x0c, 0x82, 0x91,
|
||||
0x8f, 0x45, 0x3e, 0x14, 0x13, 0x30, 0xf9, 0x98, 0x80, 0xc9, 0xc7, 0x84,
|
||||
0x20, 0x3e, 0x56, 0x68, 0xf2, 0xb1, 0x82, 0x93, 0x8f, 0x05, 0x02, 0x7c,
|
||||
0x0a, 0x1e, 0x58, 0x02, 0xea, 0x1c, 0x02, 0x1d, 0x4d, 0xe0, 0x87, 0x61,
|
||||
0xb8, 0x21, 0x08, 0x0b, 0x30, 0x98, 0x6e, 0x48, 0x09, 0x94, 0x08, 0x8e,
|
||||
0x30, 0xca, 0x84, 0x40, 0x3e, 0x77, 0x0f, 0x46, 0x99, 0x10, 0xd0, 0x67,
|
||||
0xc4, 0xc0, 0x00, 0x40, 0x10, 0x0c, 0x8e, 0xb6, 0x18, 0x8b, 0x60, 0xc4,
|
||||
0xc0, 0x00, 0x40, 0x10, 0x0c, 0x0e, 0xb7, 0xa8, 0x09, 0x61, 0xc4, 0xe0,
|
||||
0x00, 0x40, 0x10, 0x0c, 0x26, 0xb6, 0xe8, 0x89, 0x93, 0x18, 0x8b, 0xd1,
|
||||
0x84, 0x40, 0xa8, 0xa0, 0x24, 0x64, 0x34, 0x61, 0x18, 0x4a, 0x08, 0x60,
|
||||
0xc4, 0xe0, 0x00, 0x40, 0x10, 0x0c, 0x2c, 0xb8, 0x10, 0x0b, 0x96, 0xe8,
|
||||
0x89, 0xd1, 0x84, 0x40, 0xb0, 0xc4, 0x92, 0x8f, 0x25, 0x94, 0x7c, 0xac,
|
||||
0x14, 0x48, 0x21, 0x3e, 0x16, 0x0c, 0xf0, 0xb1, 0x60, 0x88, 0x8f, 0x19,
|
||||
0x81, 0x7c, 0xec, 0xc9, 0xe4, 0x63, 0x4f, 0x27, 0x1f, 0x43, 0x85, 0x54,
|
||||
0x80, 0x8f, 0x05, 0x03, 0x7c, 0x2c, 0x18, 0xe0, 0x63, 0x4c, 0x20, 0x9f,
|
||||
0xd1, 0x04, 0x27, 0x18, 0x8e, 0x08, 0x7e, 0x22, 0xf8, 0x66, 0x19, 0x9c,
|
||||
0x27, 0xb8, 0x24, 0xb9, 0x11, 0x03, 0x07, 0x00, 0x41, 0x30, 0x80, 0x46,
|
||||
0x03, 0x2e, 0x7e, 0x82, 0xe2, 0x8b, 0x60, 0x2c, 0xc6, 0x62, 0x2c, 0xce,
|
||||
0xc2, 0x2f, 0x8e, 0x48, 0x6e, 0xc4, 0xc0, 0x01, 0x40, 0x10, 0x0c, 0x20,
|
||||
0xd2, 0x88, 0x0b, 0xb0, 0x98, 0xfa, 0x22, 0x20, 0x0b, 0xb2, 0x20, 0x0b,
|
||||
0xb4, 0xf8, 0x8b, 0x59, 0x02, 0xc8, 0xba, 0x4e, 0x3e, 0x16, 0x98, 0x85,
|
||||
0x7c, 0x2c, 0x30, 0xe8, 0x33, 0x62, 0x60, 0x00, 0x20, 0x08, 0x06, 0x47,
|
||||
0x6a, 0xfc, 0x45, 0x30, 0x62, 0x60, 0x00, 0x20, 0x08, 0x06, 0x87, 0x6a,
|
||||
0xc4, 0x85, 0x60, 0x02, 0x24, 0x1f, 0x13, 0x16, 0xf9, 0x98, 0x10, 0xc4,
|
||||
0xe7, 0x82, 0xe4, 0x46, 0x0c, 0x1c, 0x00, 0x04, 0xc1, 0x00, 0x6a, 0x0d,
|
||||
0xbd, 0x48, 0x0b, 0xcf, 0x34, 0x82, 0xb6, 0x68, 0x8b, 0xb6, 0x88, 0x0b,
|
||||
0xd4, 0xb0, 0x82, 0x92, 0x8f, 0x1d, 0x8f, 0x7c, 0x4c, 0x08, 0xe0, 0x73,
|
||||
0x41, 0x72, 0x23, 0x06, 0x0e, 0x00, 0x82, 0x60, 0x00, 0xc5, 0x86, 0x5f,
|
||||
0xb4, 0x05, 0x18, 0xa8, 0x46, 0x10, 0x17, 0x71, 0x11, 0x17, 0x75, 0xc1,
|
||||
0x1a, 0xb3, 0x04, 0x10, 0x06, 0xc4, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00,
|
||||
0x5b, 0x06, 0x34, 0x78, 0xc0, 0x60, 0xcb, 0x10, 0x07, 0x4f, 0x18, 0x6c,
|
||||
0x19, 0xfa, 0xe0, 0x11, 0x83, 0x2d, 0x03, 0x2b, 0x3c, 0x63, 0xb0, 0x65,
|
||||
0xd8, 0x85, 0x07, 0x0c, 0xb6, 0x0c, 0xe4, 0xf0, 0x84, 0xc1, 0x96, 0xc1,
|
||||
0x1d, 0x1e, 0x31, 0xd8, 0x32, 0xf4, 0xc3, 0x33, 0x06, 0x5b, 0x06, 0xb6,
|
||||
0x78, 0xc8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
|
|
|||
|
|
@ -41,20 +41,21 @@ float2 ReadSourceValue(uint3 index)
|
|||
float2 value = float2(0, 0);
|
||||
|
||||
bool hasWindow = HasWindow == 1;
|
||||
[branch]
|
||||
[flatten]
|
||||
if (hasWindow && index.y < (uint)WindowSizes[2])
|
||||
{
|
||||
uint windowIndexReal = index.y * WindowStrides[2];
|
||||
window_value.x = window[windowIndexReal];
|
||||
|
||||
uint windowIndexImaginary = windowIndexReal + WindowStrides[3];
|
||||
[branch]
|
||||
if (WindowSizes[3] == 2)
|
||||
{
|
||||
window_value.y = window[windowIndexImaginary];
|
||||
}
|
||||
}
|
||||
|
||||
[branch]
|
||||
[flatten]
|
||||
if (index.y < (uint)InputSizes[1])
|
||||
{
|
||||
uint indexReal =
|
||||
|
|
@ -108,7 +109,7 @@ void DFT(uint3 dtid : SV_DispatchThreadId)
|
|||
uint index = StartIndex + dtid.x;
|
||||
if (index < ElementCount)
|
||||
{
|
||||
uint halfTotalDFTLength = DFTLength / 2;
|
||||
uint halfTotalDFTLength = DFTLength >> 1;
|
||||
uint N = 1U << DFTIteration;
|
||||
uint halfN = 1U << (DFTIteration - 1);
|
||||
|
||||
|
|
@ -143,8 +144,16 @@ void DFT(uint3 dtid : SV_DispatchThreadId)
|
|||
unweighted.y = Scale * (inputEvenValue.y + (w.x * inputOddValue.y + w.y * inputOddValue.x));
|
||||
|
||||
// When ChirpLength is 0, then chirp should evaluate to (1,0), which is a no-op.
|
||||
float2 chirp = CalculateChirp(k, ChirpLength);
|
||||
dst[outputIndex.x] = (TBUFFER)(unweighted.x * chirp.x - unweighted.y * chirp.y);
|
||||
dst[outputIndex.y] = (TBUFFER)(unweighted.x * chirp.y + unweighted.y * chirp.x);
|
||||
[branch]
|
||||
if (ChirpLength == 0)
|
||||
{
|
||||
dst[outputIndex.x] = (TBUFFER)(unweighted.x);
|
||||
dst[outputIndex.y] = (TBUFFER)(unweighted.y);
|
||||
}
|
||||
else {
|
||||
float2 chirp = CalculateChirp(k, ChirpLength);
|
||||
dst[outputIndex.x] = (TBUFFER)(unweighted.x * chirp.x - unweighted.y * chirp.y);
|
||||
dst[outputIndex.y] = (TBUFFER)(unweighted.x * chirp.y + unweighted.y * chirp.x);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -60,6 +60,7 @@
|
|||
#include "core/providers/dml/DmlExecutionProvider/src/GraphTransformer.h"
|
||||
#include "core/providers/dml/dml_session_options_config_keys.h"
|
||||
#include "core/providers/dml/DmlExecutionProvider/src/ExecutionProvider.h"
|
||||
#include "core/optimizer/stft_decomposition.h"
|
||||
#endif
|
||||
#include "core/session/environment.h"
|
||||
#include "core/session/user_logging_sink.h"
|
||||
|
|
@ -1761,6 +1762,14 @@ common::Status InferenceSession::Initialize() {
|
|||
}
|
||||
ORT_RETURN_IF_ERROR_SESSIONID_(graph_transformer_mgr_.Register(std::move(dmlOperatorFusionTransformer), onnxruntime::TransformerLevel::Level2));
|
||||
}
|
||||
|
||||
const auto dml_ep_impl = static_cast<const Dml::ExecutionProvider*>(dmlExecutionProvider);
|
||||
auto is_mcdm_device = dml_ep_impl->GetImpl()->IsMcdmDevice();
|
||||
if (is_mcdm_device) {
|
||||
const InlinedHashSet<std::string_view> dml_ep = {onnxruntime::kDmlExecutionProvider};
|
||||
auto stft_decomposition_transformer = std::make_unique<STFTDecomposition>(dml_ep);
|
||||
ORT_RETURN_IF_ERROR_SESSIONID_(graph_transformer_mgr_.Register(std::move(stft_decomposition_transformer), onnxruntime::TransformerLevel::Level1));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue