51 lines
2.0 KiB
C++
51 lines
2.0 KiB
C++
/**
|
|
******************************************************************************
|
|
* Xenia : Xbox 360 Emulator Research Project *
|
|
******************************************************************************
|
|
* Copyright 2023 Ben Vanik. All rights reserved. *
|
|
* Released under the BSD license - see LICENSE in the root for more details. *
|
|
******************************************************************************
|
|
*/
|
|
|
|
#ifndef XENIA_GPU_SPIRV_BUILDER_H_
|
|
#define XENIA_GPU_SPIRV_BUILDER_H_
|
|
|
|
#include "third_party/glslang/SPIRV/SpvBuilder.h"
|
|
|
|
namespace xe {
|
|
namespace gpu {
|
|
|
|
// SpvBuilder with extra helpers.
|
|
|
|
class SpirvBuilder : public spv::Builder {
|
|
public:
|
|
SpirvBuilder(unsigned int spv_version, unsigned int user_number,
|
|
spv::SpvBuildLogger* logger)
|
|
: spv::Builder(spv_version, user_number, logger) {}
|
|
|
|
// Make public rather than protected.
|
|
using spv::Builder::createSelectionMerge;
|
|
|
|
spv::Id createQuadOp(spv::Op op_code, spv::Id type_id, spv::Id operand1,
|
|
spv::Id operand2, spv::Id operand3, spv::Id operand4);
|
|
|
|
spv::Id createNoContractionUnaryOp(spv::Op op_code, spv::Id type_id,
|
|
spv::Id operand);
|
|
spv::Id createNoContractionBinOp(spv::Op op_code, spv::Id type_id,
|
|
spv::Id operand1, spv::Id operand2);
|
|
|
|
spv::Id createUnaryBuiltinCall(spv::Id result_type, spv::Id builtins,
|
|
int entry_point, spv::Id operand);
|
|
spv::Id createBinBuiltinCall(spv::Id result_type, spv::Id builtins,
|
|
int entry_point, spv::Id operand1,
|
|
spv::Id operand2);
|
|
spv::Id createTriBuiltinCall(spv::Id result_type, spv::Id builtins,
|
|
int entry_point, spv::Id operand1,
|
|
spv::Id operand2, spv::Id operand3);
|
|
};
|
|
|
|
} // namespace gpu
|
|
} // namespace xe
|
|
|
|
#endif // XENIA_GPU_SPIRV_BUILDER_H_
|