Skip to content

Commit 5b34f6d

Browse files
committed
hlsl_generator: add missing capability for BDA load/store
Signed-off-by: Ali Cheraghi <[email protected]>
1 parent 78d5eab commit 5b34f6d

File tree

2 files changed

+11
-21
lines changed

2 files changed

+11
-21
lines changed

tools/hlsl_generator/gen.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ def gen(grammer_path, output_path):
146146
processInst(writer, instruction, InstOptions(shape=Shape.PTR_TEMPLATE))
147147
case "Memory":
148148
processInst(writer, instruction, InstOptions(shape=Shape.PTR_TEMPLATE))
149-
processInst(writer, instruction, InstOptions(shape=Shape.PSB_RT))
149+
processInst(writer, instruction, InstOptions(shape=Shape.BDA))
150150
case "Barrier" | "Bit":
151151
processInst(writer, instruction, InstOptions())
152152
case "Reserved":
@@ -171,7 +171,7 @@ def gen(grammer_path, output_path):
171171
class Shape(Enum):
172172
DEFAULT = 0,
173173
PTR_TEMPLATE = 1, # TODO: this is a DXC Workaround
174-
PSB_RT = 2, # PhysicalStorageBuffer Result Type
174+
BDA = 2, # PhysicalStorageBuffer Result Type
175175

176176
class InstOptions(NamedTuple):
177177
shape: Shape = Shape.DEFAULT
@@ -257,9 +257,10 @@ def processInst(writer: io.TextIOWrapper, instruction, options: InstOptions):
257257
case "'Pointer'":
258258
if options.shape == Shape.PTR_TEMPLATE:
259259
args.append("P " + operand_name)
260-
elif options.shape == Shape.PSB_RT:
260+
elif options.shape == Shape.BDA:
261261
if (not "typename T" in templates) and (rt == "T" or op_ty == "T"):
262262
templates = ["typename T"] + templates
263+
overload_caps.append("PhysicalStorageBufferAddresses")
263264
args.append("pointer_t<spv::StorageClassPhysicalStorageBuffer, " + op_ty + "> " + operand_name)
264265
else:
265266
if (not "typename T" in templates) and (rt == "T" or op_ty == "T"):
@@ -280,8 +281,9 @@ def processInst(writer: io.TextIOWrapper, instruction, options: InstOptions):
280281
case "IdMemorySemantics": args.append(" uint32_t " + operand_name)
281282
case "GroupOperation": args.append("[[vk::ext_literal]] uint32_t " + operand_name)
282283
case "MemoryAccess":
283-
writeInst(writer, templates, overload_caps, op_name, fn_name, conds, rt, args + ["[[vk::ext_literal]] uint32_t memoryAccess"])
284-
writeInst(writer, templates, overload_caps, op_name, fn_name, conds, rt, args + ["[[vk::ext_literal]] uint32_t memoryAccess, [[vk::ext_literal]] uint32_t memoryAccessParam"])
284+
if options.shape != Shape.BDA:
285+
writeInst(writer, templates, overload_caps, op_name, fn_name, conds, rt, args + ["[[vk::ext_literal]] uint32_t memoryAccess"])
286+
writeInst(writer, templates, overload_caps, op_name, fn_name, conds, rt, args + ["[[vk::ext_literal]] uint32_t memoryAccess, [[vk::ext_literal]] uint32_t memoryAccessParam"])
285287
writeInst(writer, templates + ["uint32_t alignment"], overload_caps, op_name, fn_name, conds, rt, args + ["[[vk::ext_literal]] uint32_t __aligned = /*Aligned*/0x00000002", "[[vk::ext_literal]] uint32_t __alignment = alignment"])
286288
case _: return # TODO
287289

tools/hlsl_generator/out.hlsl

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -522,19 +522,13 @@ template<typename T, typename P>
522522
[[vk::ext_instruction(spv::OpLoad)]]
523523
enable_if_t<is_spirv_type_v<P>, T> load(P pointer);
524524

525-
template<typename T>
526-
[[vk::ext_instruction(spv::OpLoad)]]
527-
T load(pointer_t<spv::StorageClassPhysicalStorageBuffer, T> pointer, [[vk::ext_literal]] uint32_t memoryAccess);
528-
529-
template<typename T>
530-
[[vk::ext_instruction(spv::OpLoad)]]
531-
T load(pointer_t<spv::StorageClassPhysicalStorageBuffer, T> pointer, [[vk::ext_literal]] uint32_t memoryAccess, [[vk::ext_literal]] uint32_t memoryAccessParam);
532-
533525
template<typename T, uint32_t alignment>
526+
[[vk::ext_capability(spv::CapabilityPhysicalStorageBufferAddresses)]]
534527
[[vk::ext_instruction(spv::OpLoad)]]
535528
T load(pointer_t<spv::StorageClassPhysicalStorageBuffer, T> pointer, [[vk::ext_literal]] uint32_t __aligned = /*Aligned*/0x00000002, [[vk::ext_literal]] uint32_t __alignment = alignment);
536529

537530
template<typename T>
531+
[[vk::ext_capability(spv::CapabilityPhysicalStorageBufferAddresses)]]
538532
[[vk::ext_instruction(spv::OpLoad)]]
539533
T load(pointer_t<spv::StorageClassPhysicalStorageBuffer, T> pointer);
540534

@@ -554,19 +548,13 @@ template<typename T, typename P>
554548
[[vk::ext_instruction(spv::OpStore)]]
555549
enable_if_t<is_spirv_type_v<P>, void> store(P pointer, T object);
556550

557-
template<typename T>
558-
[[vk::ext_instruction(spv::OpStore)]]
559-
void store(pointer_t<spv::StorageClassPhysicalStorageBuffer, T> pointer, T object, [[vk::ext_literal]] uint32_t memoryAccess);
560-
561-
template<typename T>
562-
[[vk::ext_instruction(spv::OpStore)]]
563-
void store(pointer_t<spv::StorageClassPhysicalStorageBuffer, T> pointer, T object, [[vk::ext_literal]] uint32_t memoryAccess, [[vk::ext_literal]] uint32_t memoryAccessParam);
564-
565551
template<typename T, uint32_t alignment>
552+
[[vk::ext_capability(spv::CapabilityPhysicalStorageBufferAddresses)]]
566553
[[vk::ext_instruction(spv::OpStore)]]
567554
void store(pointer_t<spv::StorageClassPhysicalStorageBuffer, T> pointer, T object, [[vk::ext_literal]] uint32_t __aligned = /*Aligned*/0x00000002, [[vk::ext_literal]] uint32_t __alignment = alignment);
568555

569556
template<typename T>
557+
[[vk::ext_capability(spv::CapabilityPhysicalStorageBufferAddresses)]]
570558
[[vk::ext_instruction(spv::OpStore)]]
571559
void store(pointer_t<spv::StorageClassPhysicalStorageBuffer, T> pointer, T object);
572560

0 commit comments

Comments
 (0)