mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-08-04 08:22:32 +00:00
emit_spirv: Implement round to zero mode
This commit is contained in:
parent
59a8615393
commit
d044e378b5
@ -137,9 +137,6 @@ s32 PS4_SYSV_ABI scePlayGoGetLanguageMask(OrbisPlayGoHandle handle,
|
|||||||
|
|
||||||
s32 PS4_SYSV_ABI scePlayGoGetLocus(OrbisPlayGoHandle handle, const OrbisPlayGoChunkId* chunkIds,
|
s32 PS4_SYSV_ABI scePlayGoGetLocus(OrbisPlayGoHandle handle, const OrbisPlayGoChunkId* chunkIds,
|
||||||
uint32_t numberOfEntries, OrbisPlayGoLocus* outLoci) {
|
uint32_t numberOfEntries, OrbisPlayGoLocus* outLoci) {
|
||||||
LOG_DEBUG(Lib_PlayGo, "called handle = {}, chunkIds = {}, numberOfEntries = {}", handle,
|
|
||||||
*chunkIds, numberOfEntries);
|
|
||||||
|
|
||||||
if (handle != PlaygoHandle) {
|
if (handle != PlaygoHandle) {
|
||||||
return ORBIS_PLAYGO_ERROR_BAD_HANDLE;
|
return ORBIS_PLAYGO_ERROR_BAD_HANDLE;
|
||||||
}
|
}
|
||||||
@ -149,6 +146,10 @@ s32 PS4_SYSV_ABI scePlayGoGetLocus(OrbisPlayGoHandle handle, const OrbisPlayGoCh
|
|||||||
if (numberOfEntries == 0) {
|
if (numberOfEntries == 0) {
|
||||||
return ORBIS_PLAYGO_ERROR_BAD_SIZE;
|
return ORBIS_PLAYGO_ERROR_BAD_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LOG_DEBUG(Lib_PlayGo, "called handle = {}, chunkIds = {}, numberOfEntries = {}", handle,
|
||||||
|
*chunkIds, numberOfEntries);
|
||||||
|
|
||||||
if (!playgo) {
|
if (!playgo) {
|
||||||
return ORBIS_PLAYGO_ERROR_NOT_INITIALIZED;
|
return ORBIS_PLAYGO_ERROR_NOT_INITIALIZED;
|
||||||
}
|
}
|
||||||
|
@ -369,7 +369,12 @@ void SetupFloatMode(EmitContext& ctx, const Profile& profile, const RuntimeInfo&
|
|||||||
LOG_WARNING(Render_Vulkan, "Unknown FP denorm mode {}", u32(fp_denorm_mode));
|
LOG_WARNING(Render_Vulkan, "Unknown FP denorm mode {}", u32(fp_denorm_mode));
|
||||||
}
|
}
|
||||||
const auto fp_round_mode = runtime_info.fp_round_mode32;
|
const auto fp_round_mode = runtime_info.fp_round_mode32;
|
||||||
if (fp_round_mode != AmdGpu::FpRoundMode::NearestEven) {
|
if (fp_round_mode == AmdGpu::FpRoundMode::ToZero) {
|
||||||
|
if (profile.support_fp32_round_to_zero) {
|
||||||
|
ctx.AddCapability(spv::Capability::RoundingModeRTZ);
|
||||||
|
ctx.AddExecutionMode(main_func, spv::ExecutionMode::RoundingModeRTZ, 32U);
|
||||||
|
}
|
||||||
|
} else if (fp_round_mode != AmdGpu::FpRoundMode::NearestEven) {
|
||||||
LOG_WARNING(Render_Vulkan, "Unknown FP rounding mode {}", u32(fp_round_mode));
|
LOG_WARNING(Render_Vulkan, "Unknown FP rounding mode {}", u32(fp_round_mode));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,6 +21,7 @@ struct Profile {
|
|||||||
bool support_separate_rounding_mode{};
|
bool support_separate_rounding_mode{};
|
||||||
bool support_fp32_denorm_preserve{};
|
bool support_fp32_denorm_preserve{};
|
||||||
bool support_fp32_denorm_flush{};
|
bool support_fp32_denorm_flush{};
|
||||||
|
bool support_fp32_round_to_zero{};
|
||||||
bool support_explicit_workgroup_layout{};
|
bool support_explicit_workgroup_layout{};
|
||||||
bool support_legacy_vertex_attributes{};
|
bool support_legacy_vertex_attributes{};
|
||||||
bool supports_image_load_store_lod{};
|
bool supports_image_load_store_lod{};
|
||||||
|
@ -674,6 +674,7 @@ Liverpool::Task Liverpool::ProcessGraphics(std::span<const u32> dcb, std::span<c
|
|||||||
if (vo_port->IsVoLabel(wait_addr) &&
|
if (vo_port->IsVoLabel(wait_addr) &&
|
||||||
num_submits == mapped_queues[GfxQueueId].submits.size()) {
|
num_submits == mapped_queues[GfxQueueId].submits.size()) {
|
||||||
vo_port->WaitVoLabel([&] { return wait_reg_mem->Test(); });
|
vo_port->WaitVoLabel([&] { return wait_reg_mem->Test(); });
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
while (!wait_reg_mem->Test()) {
|
while (!wait_reg_mem->Test()) {
|
||||||
YIELD_GFX();
|
YIELD_GFX();
|
||||||
|
@ -196,6 +196,7 @@ PipelineCache::PipelineCache(const Instance& instance_, Scheduler& scheduler_,
|
|||||||
.subgroup_size = instance.SubgroupSize(),
|
.subgroup_size = instance.SubgroupSize(),
|
||||||
.support_fp32_denorm_preserve = bool(vk12_props.shaderDenormPreserveFloat32),
|
.support_fp32_denorm_preserve = bool(vk12_props.shaderDenormPreserveFloat32),
|
||||||
.support_fp32_denorm_flush = bool(vk12_props.shaderDenormFlushToZeroFloat32),
|
.support_fp32_denorm_flush = bool(vk12_props.shaderDenormFlushToZeroFloat32),
|
||||||
|
.support_fp32_round_to_zero = bool(vk12_props.shaderRoundingModeRTZFloat32),
|
||||||
.support_explicit_workgroup_layout = true,
|
.support_explicit_workgroup_layout = true,
|
||||||
.support_legacy_vertex_attributes = instance_.IsLegacyVertexAttributesSupported(),
|
.support_legacy_vertex_attributes = instance_.IsLegacyVertexAttributesSupported(),
|
||||||
.supports_image_load_store_lod = instance_.IsImageLoadStoreLodSupported(),
|
.supports_image_load_store_lod = instance_.IsImageLoadStoreLodSupported(),
|
||||||
|
Loading…
Reference in New Issue
Block a user