Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:aevseev:desktop
amdvlk
2aa34cc8124ddedb4420d3cb1663322eb3bbe273.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 2aa34cc8124ddedb4420d3cb1663322eb3bbe273.patch of Package amdvlk
From 2aa34cc8124ddedb4420d3cb1663322eb3bbe273 Mon Sep 17 00:00:00 2001 From: "Liu, Junda" <Junda.Liu@amd.com> Date: Mon, 8 Apr 2024 18:19:46 +0800 Subject: [PATCH] Fix compile error with newer DXC --- src/shaders/Common.hlsl | 14 +++++++++++++- src/shaders/EncodePairedTriangleImpl.hlsl | 4 ++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/shaders/Common.hlsl b/src/shaders/Common.hlsl index a71497d..20d1446 100644 --- a/src/shaders/Common.hlsl +++ b/src/shaders/Common.hlsl @@ -159,6 +159,18 @@ static const BoundingBox InvalidBoundingBox = #define D3D12_RAYTRACING_GEOMETRY_FLAG_OPAQUE 0x1 #define D3D12_RAYTRACING_GEOMETRY_FLAG_NO_DUPLICATE_ANYHIT_INVOCATION 0x2 +// Workaround for newer DXC, which aborts with error when firstbit*() is used with 64-bit type. That is because +// officially SPIR-V spec limits FindUMsb/FindSMsb to 32-bit width components. But internally we already support +// FindUMsb/FindSMsb/FindILsb with 64-bit type, so use GL_EXT_spirv_intrinsics to bypass the check. +[[vk::ext_instruction(/* FindUMsb */ 75, "GLSL.std.450")]] +uint spirv_FindUMsb(uint64_t value); + +[[vk::ext_instruction(/* FindILsb */ 73, "GLSL.std.450")]] +uint spirv_FindILsb(uint64_t value); + +#define FIRSTBITHIGH_U64(val) spirv_FindUMsb(val) +#define FIRSTBITLOW_U64(val) spirv_FindILsb(val) + //===================================================================================================================== // The following functions depend on static flags static uint IsBvhRebraid() @@ -577,7 +589,7 @@ static int clz(int value) //===================================================================================================================== static int clz64(uint64_t value) { - return (63 - firstbithigh(value)); + return (63 - FIRSTBITHIGH_U64(value)); } //===================================================================================================================== diff --git a/src/shaders/EncodePairedTriangleImpl.hlsl b/src/shaders/EncodePairedTriangleImpl.hlsl index 3b49a5f..12118dc 100644 --- a/src/shaders/EncodePairedTriangleImpl.hlsl +++ b/src/shaders/EncodePairedTriangleImpl.hlsl @@ -212,7 +212,7 @@ int PairTriangles( packedOffset = TryPairTriangles(broadcastTriangle, tri); } - const uint firstPairedLane = firstbitlow(WaveActiveBallot64((packedOffset != -1))); + const uint firstPairedLane = FIRSTBITLOW_U64(WaveActiveBallot64((packedOffset != -1))); if (firstPairedLane < WaveGetLaneCount()) { @@ -323,7 +323,7 @@ int PairTrianglesIndexed( packedOffset = TryPairTrianglesIndexed(broadcastTriangle, tri); } - const uint firstPairedLane = firstbitlow(WaveActiveBallot64((packedOffset != -1))); + const uint firstPairedLane = FIRSTBITLOW_U64(WaveActiveBallot64((packedOffset != -1))); if (firstPairedLane < WaveGetLaneCount()) {
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor