mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-07-25 11:34:55 +00:00
Merge branch 'main' into qt_save
This commit is contained in:
commit
4f9b1c80eb
6
.github/workflows/build.yml
vendored
6
.github/workflows/build.yml
vendored
@ -494,7 +494,7 @@ jobs:
|
||||
with:
|
||||
token: ${{ secrets.SHADPS4_TOKEN_REPO }}
|
||||
name: "Pre-release-shadPS4-${{ needs.get-info.outputs.date }}-${{ needs.get-info.outputs.shorthash }}"
|
||||
tag: "Pre-release-shadPS4-${{ needs.get-info.outputs.date }}-${{ needs.get-info.outputs.shorthash }}"
|
||||
tag: "Pre-release-shadPS4-${{ needs.get-info.outputs.date }}-${{ needs.get-info.outputs.fullhash }}"
|
||||
draft: false
|
||||
prerelease: true
|
||||
body: "Full Changelog: [${{ env.last_release_tag }}...${{ needs.get-info.outputs.shorthash }}](https://github.com/shadps4-emu/shadPS4/compare/${{ env.last_release_tag }}...${{ needs.get-info.outputs.fullhash }})"
|
||||
@ -530,14 +530,14 @@ jobs:
|
||||
|
||||
# Check if release already exists and get ID
|
||||
release_id=$(curl -s -H "Authorization: token $GITHUB_TOKEN" \
|
||||
"https://api.github.com/repos/$REPO/releases/tags/Pre-release-shadPS4-${{ needs.get-info.outputs.date }}-${{ needs.get-info.outputs.shorthash }}" | jq -r '.id')
|
||||
"https://api.github.com/repos/$REPO/releases/tags/Pre-release-shadPS4-${{ needs.get-info.outputs.date }}-${{ needs.get-info.outputs.fullhash }}" | jq -r '.id')
|
||||
|
||||
if [[ "$release_id" == "null" ]]; then
|
||||
echo "Creating release in $REPO for $filename"
|
||||
release_id=$(curl -s -X POST -H "Authorization: token $GITHUB_TOKEN" \
|
||||
-H "Accept: application/vnd.github.v3+json" \
|
||||
-d '{
|
||||
"tag_name": "Pre-release-shadPS4-${{ needs.get-info.outputs.date }}-${{ needs.get-info.outputs.shorthash }}",
|
||||
"tag_name": "Pre-release-shadPS4-${{ needs.get-info.outputs.date }}-${{ needs.get-info.outputs.fullhash }}",
|
||||
"name": "Pre-release-shadPS4-${{ needs.get-info.outputs.date }}-${{ needs.get-info.outputs.shorthash }}",
|
||||
"draft": false,
|
||||
"prerelease": true,
|
||||
|
@ -139,7 +139,7 @@ tr("The Auto Updater allows up to 60 update checks per hour.\\nYou have reached
|
||||
}
|
||||
}
|
||||
|
||||
latestRev = latestVersion.right(7);
|
||||
latestRev = latestVersion.right(40);
|
||||
latestDate = jsonObj["published_at"].toString();
|
||||
|
||||
QJsonArray assets = jsonObj["assets"].toArray();
|
||||
@ -169,7 +169,7 @@ tr("The Auto Updater allows up to 60 update checks per hour.\\nYou have reached
|
||||
QDateTime dateTime = QDateTime::fromString(latestDate, Qt::ISODate);
|
||||
latestDate = dateTime.isValid() ? dateTime.toString("yyyy-MM-dd HH:mm:ss") : "Unknown date";
|
||||
|
||||
if (latestRev == currentRev.left(7)) {
|
||||
if (latestRev == currentRev) {
|
||||
if (showMessage) {
|
||||
QMessageBox::information(this, tr("Auto Updater"),
|
||||
tr("Your version is already up to date!"));
|
||||
@ -217,7 +217,7 @@ void CheckUpdate::setupUI(const QString& downloadUrl, const QString& latestDate,
|
||||
"<td>%3</td>"
|
||||
"<td>(%4)</td>"
|
||||
"</tr></table></p>")
|
||||
.arg(currentRev.left(7), currentDate, latestRev, latestDate);
|
||||
.arg(currentRev.left(7), currentDate, latestRev.left(7), latestDate);
|
||||
|
||||
QLabel* updateLabel = new QLabel(updateText, this);
|
||||
layout->addWidget(updateLabel);
|
||||
|
@ -2048,7 +2048,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source> * Unsupported Vulkan Version</source>
|
||||
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
|
||||
<translation> * Versão do Vulkan não suportada</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
@ -138,7 +138,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>File Exists</source>
|
||||
<translation>Dosya mevcut</translation>
|
||||
<translation>Dosya Mevcut</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>File already exists. Do you want to replace it?</source>
|
||||
@ -1221,7 +1221,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Exit shadPS4</source>
|
||||
<translation>shadPS4'ten Çık</translation>
|
||||
<translation>shadPS4 Çıkış</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Exit the application.</source>
|
||||
@ -1381,7 +1381,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Game Boot</source>
|
||||
<translation>Oyun Başlatma</translation>
|
||||
<translation>Oyun Başlat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Only one file can be selected!</source>
|
||||
|
@ -204,6 +204,7 @@ public:
|
||||
void V_EXP_F32(const GcnInst& inst);
|
||||
void V_LOG_F32(const GcnInst& inst);
|
||||
void V_RCP_F32(const GcnInst& inst);
|
||||
void V_RCP_LEGACY_F32(const GcnInst& inst);
|
||||
void V_RCP_F64(const GcnInst& inst);
|
||||
void V_RSQ_F32(const GcnInst& inst);
|
||||
void V_SQRT_F32(const GcnInst& inst);
|
||||
|
@ -158,6 +158,8 @@ void Translator::EmitVectorAlu(const GcnInst& inst) {
|
||||
return V_LOG_F32(inst);
|
||||
case Opcode::V_RCP_F32:
|
||||
return V_RCP_F32(inst);
|
||||
case Opcode::V_RCP_LEGACY_F32:
|
||||
return V_RCP_LEGACY_F32(inst);
|
||||
case Opcode::V_RCP_F64:
|
||||
return V_RCP_F64(inst);
|
||||
case Opcode::V_RCP_IFLAG_F32:
|
||||
@ -798,6 +800,20 @@ void Translator::V_RCP_F32(const GcnInst& inst) {
|
||||
SetDst(inst.dst[0], ir.FPRecip(src0));
|
||||
}
|
||||
|
||||
void Translator::V_RCP_LEGACY_F32(const GcnInst& inst) {
|
||||
const IR::F32 src0{GetSrc<IR::F32>(inst.src[0])};
|
||||
const auto result = ir.FPRecip(src0);
|
||||
const auto inf = ir.FPIsInf(result);
|
||||
|
||||
const auto raw_result = ir.ConvertFToU(32, result);
|
||||
const auto sign_bit = ir.ShiftRightLogical(raw_result, ir.Imm32(31u));
|
||||
const auto sign_bit_set = ir.INotEqual(sign_bit, ir.Imm32(0u));
|
||||
const IR::F32 inf_result{ir.Select(sign_bit_set, ir.Imm32(-0.0f), ir.Imm32(0.0f))};
|
||||
const IR::F32 val{ir.Select(inf, inf_result, result)};
|
||||
|
||||
SetDst(inst.dst[0], val);
|
||||
}
|
||||
|
||||
void Translator::V_RCP_F64(const GcnInst& inst) {
|
||||
const IR::F64 src0{GetSrc64<IR::F64>(inst.src[0])};
|
||||
SetDst64(inst.dst[0], ir.FPRecip(src0));
|
||||
|
@ -394,7 +394,7 @@ Liverpool::Task Liverpool::ProcessGraphics(std::span<const u32> dcb, std::span<c
|
||||
break;
|
||||
}
|
||||
case PM4ItOpcode::SetPredication: {
|
||||
LOG_WARNING(Render_Vulkan, "Unimplemented IT_SET_PREDICATION");
|
||||
LOG_WARNING(Render, "Unimplemented IT_SET_PREDICATION");
|
||||
break;
|
||||
}
|
||||
case PM4ItOpcode::IndexType: {
|
||||
@ -586,8 +586,7 @@ Liverpool::Task Liverpool::ProcessGraphics(std::span<const u32> dcb, std::span<c
|
||||
}
|
||||
case PM4ItOpcode::EventWrite: {
|
||||
const auto* event = reinterpret_cast<const PM4CmdEventWrite*>(header);
|
||||
LOG_DEBUG(Render_Vulkan,
|
||||
"Encountered EventWrite: event_type = {}, event_index = {}",
|
||||
LOG_DEBUG(Render, "Encountered EventWrite: event_type = {}, event_index = {}",
|
||||
magic_enum::enum_name(event->event_type.Value()),
|
||||
magic_enum::enum_name(event->event_index.Value()));
|
||||
if (event->event_type.Value() == EventType::SoVgtStreamoutFlush) {
|
||||
@ -673,6 +672,16 @@ Liverpool::Task Liverpool::ProcessGraphics(std::span<const u32> dcb, std::span<c
|
||||
}
|
||||
break;
|
||||
}
|
||||
case PM4ItOpcode::CopyData: {
|
||||
const auto* copy_data = reinterpret_cast<const PM4CmdCopyData*>(header);
|
||||
LOG_WARNING(Render,
|
||||
"unhandled IT_COPY_DATA src_sel = {}, dst_sel = {}, "
|
||||
"count_sel = {}, wr_confirm = {}, engine_sel = {}",
|
||||
u32(copy_data->src_sel.Value()), u32(copy_data->dst_sel.Value()),
|
||||
copy_data->count_sel.Value(), copy_data->wr_confirm.Value(),
|
||||
u32(copy_data->engine_sel.Value()));
|
||||
break;
|
||||
}
|
||||
case PM4ItOpcode::MemSemaphore: {
|
||||
const auto* mem_semaphore = reinterpret_cast<const PM4CmdMemSemaphore*>(header);
|
||||
if (mem_semaphore->IsSignaling()) {
|
||||
|
@ -554,6 +554,61 @@ struct PM4DmaData {
|
||||
}
|
||||
};
|
||||
|
||||
enum class CopyDataSrc : u32 {
|
||||
MappedRegister = 0,
|
||||
Memory = 1,
|
||||
TCL2 = 2,
|
||||
Gds = 3,
|
||||
// Reserved = 4,
|
||||
Immediate = 5,
|
||||
Atomic = 6,
|
||||
GdsAtomic0 = 7,
|
||||
GdsAtomic1 = 8,
|
||||
GpuClock = 9,
|
||||
};
|
||||
|
||||
enum class CopyDataDst : u32 {
|
||||
MappedRegister = 0,
|
||||
MemorySync = 1,
|
||||
TCL2 = 2,
|
||||
Gds = 3,
|
||||
// Reserved = 4,
|
||||
MemoryAsync = 5,
|
||||
};
|
||||
|
||||
enum class CopyDataEngine : u32 {
|
||||
Me = 0,
|
||||
Pfp = 1,
|
||||
Ce = 2,
|
||||
// Reserved = 3
|
||||
};
|
||||
|
||||
struct PM4CmdCopyData {
|
||||
PM4Type3Header header;
|
||||
union {
|
||||
BitField<0, 4, CopyDataSrc> src_sel;
|
||||
BitField<8, 4, CopyDataDst> dst_sel;
|
||||
BitField<16, 1, u32> count_sel;
|
||||
BitField<20, 1, u32> wr_confirm;
|
||||
BitField<30, 2, CopyDataEngine> engine_sel;
|
||||
u32 control;
|
||||
};
|
||||
u32 src_addr_lo;
|
||||
u32 src_addr_hi;
|
||||
u32 dst_addr_lo;
|
||||
u32 dst_addr_hi;
|
||||
|
||||
template <typename T>
|
||||
T SrcAddress() const {
|
||||
return std::bit_cast<T>(src_addr_lo | u64(src_addr_hi) << 32);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
T DstAddress() const {
|
||||
return std::bit_cast<T>(dst_addr_lo | u64(dst_addr_hi) << 32);
|
||||
}
|
||||
};
|
||||
|
||||
struct PM4CmdRewind {
|
||||
PM4Type3Header header;
|
||||
union {
|
||||
|
Loading…
Reference in New Issue
Block a user