Commit 838d7afc by John Kessenich

SPV: HLSL: Move to correct HLSL barrier semantics, per Khronos recommendation.

parent c72e5937
...@@ -1762,8 +1762,9 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt ...@@ -1762,8 +1762,9 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
case glslang::EOpMemoryBarrierImage: case glslang::EOpMemoryBarrierImage:
case glslang::EOpMemoryBarrierShared: case glslang::EOpMemoryBarrierShared:
case glslang::EOpGroupMemoryBarrier: case glslang::EOpGroupMemoryBarrier:
case glslang::EOpDeviceMemoryBarrier:
case glslang::EOpAllMemoryBarrierWithGroupSync: case glslang::EOpAllMemoryBarrierWithGroupSync:
case glslang::EOpGroupMemoryBarrierWithGroupSync: case glslang::EOpDeviceMemoryBarrierWithGroupSync:
case glslang::EOpWorkgroupMemoryBarrier: case glslang::EOpWorkgroupMemoryBarrier:
case glslang::EOpWorkgroupMemoryBarrierWithGroupSync: case glslang::EOpWorkgroupMemoryBarrierWithGroupSync:
noReturnValue = true; noReturnValue = true;
...@@ -5466,21 +5467,28 @@ spv::Id TGlslangToSpvTraverser::createNoArgOperation(glslang::TOperator op, spv: ...@@ -5466,21 +5467,28 @@ spv::Id TGlslangToSpvTraverser::createNoArgOperation(glslang::TOperator op, spv:
spv::MemorySemanticsAcquireReleaseMask); spv::MemorySemanticsAcquireReleaseMask);
return 0; return 0;
case glslang::EOpAllMemoryBarrierWithGroupSync: case glslang::EOpAllMemoryBarrierWithGroupSync:
// Control barrier with non-"None" semantic is also a memory barrier. builder.createControlBarrier(spv::ScopeWorkgroup, spv::ScopeDevice,
builder.createControlBarrier(spv::ScopeDevice, spv::ScopeDevice,
spv::MemorySemanticsAllMemory | spv::MemorySemanticsAllMemory |
spv::MemorySemanticsSequentiallyConsistentMask); spv::MemorySemanticsAcquireReleaseMask);
return 0; return 0;
case glslang::EOpGroupMemoryBarrierWithGroupSync: case glslang::EOpDeviceMemoryBarrier:
// Control barrier with non-"None" semantic is also a memory barrier. builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsUniformMemoryMask |
builder.createControlBarrier(spv::ScopeDevice, spv::ScopeDevice, spv::MemorySemanticsCrossWorkgroupMemoryMask); spv::MemorySemanticsImageMemoryMask |
spv::MemorySemanticsAcquireReleaseMask);
return 0;
case glslang::EOpDeviceMemoryBarrierWithGroupSync:
builder.createControlBarrier(spv::ScopeWorkgroup, spv::ScopeDevice, spv::MemorySemanticsUniformMemoryMask |
spv::MemorySemanticsImageMemoryMask |
spv::MemorySemanticsAcquireReleaseMask);
return 0; return 0;
case glslang::EOpWorkgroupMemoryBarrier: case glslang::EOpWorkgroupMemoryBarrier:
builder.createMemoryBarrier(spv::ScopeWorkgroup, spv::MemorySemanticsWorkgroupMemoryMask); builder.createMemoryBarrier(spv::ScopeWorkgroup, spv::MemorySemanticsWorkgroupMemoryMask |
spv::MemorySemanticsAcquireReleaseMask);
return 0; return 0;
case glslang::EOpWorkgroupMemoryBarrierWithGroupSync: case glslang::EOpWorkgroupMemoryBarrierWithGroupSync:
// Control barrier with non-"None" semantic is also a memory barrier. builder.createControlBarrier(spv::ScopeWorkgroup, spv::ScopeWorkgroup,
builder.createControlBarrier(spv::ScopeWorkgroup, spv::ScopeWorkgroup, spv::MemorySemanticsWorkgroupMemoryMask); spv::MemorySemanticsWorkgroupMemoryMask |
spv::MemorySemanticsAcquireReleaseMask);
return 0; return 0;
#ifdef AMD_EXTENSIONS #ifdef AMD_EXTENSIONS
case glslang::EOpTime: case glslang::EOpTime:
......
...@@ -7,8 +7,8 @@ local_size = (1, 1, 1) ...@@ -7,8 +7,8 @@ local_size = (1, 1, 1)
0:? Sequence 0:? Sequence
0:4 MemoryBarrier ( temp void) 0:4 MemoryBarrier ( temp void)
0:5 AllMemoryBarrierWithGroupSync ( temp void) 0:5 AllMemoryBarrierWithGroupSync ( temp void)
0:6 GroupMemoryBarrier ( temp void) 0:6 DeviceMemoryBarrier ( temp void)
0:7 GroupMemoryBarrierWithGroupSync ( temp void) 0:7 DeviceMemoryBarrierWithGroupSync ( temp void)
0:8 WorkgroupMemoryBarrier ( temp void) 0:8 WorkgroupMemoryBarrier ( temp void)
0:9 WorkgroupMemoryBarrierWithGroupSync ( temp void) 0:9 WorkgroupMemoryBarrierWithGroupSync ( temp void)
0:11 Branch: Return with expression 0:11 Branch: Return with expression
...@@ -35,8 +35,8 @@ local_size = (1, 1, 1) ...@@ -35,8 +35,8 @@ local_size = (1, 1, 1)
0:? Sequence 0:? Sequence
0:4 MemoryBarrier ( temp void) 0:4 MemoryBarrier ( temp void)
0:5 AllMemoryBarrierWithGroupSync ( temp void) 0:5 AllMemoryBarrierWithGroupSync ( temp void)
0:6 GroupMemoryBarrier ( temp void) 0:6 DeviceMemoryBarrier ( temp void)
0:7 GroupMemoryBarrierWithGroupSync ( temp void) 0:7 DeviceMemoryBarrierWithGroupSync ( temp void)
0:8 WorkgroupMemoryBarrier ( temp void) 0:8 WorkgroupMemoryBarrier ( temp void)
0:9 WorkgroupMemoryBarrierWithGroupSync ( temp void) 0:9 WorkgroupMemoryBarrierWithGroupSync ( temp void)
0:11 Branch: Return with expression 0:11 Branch: Return with expression
...@@ -53,18 +53,18 @@ local_size = (1, 1, 1) ...@@ -53,18 +53,18 @@ local_size = (1, 1, 1)
// Module Version 10000 // Module Version 10000
// Generated by (magic number): 80003 // Generated by (magic number): 80003
// Id's are bound by 23 // Id's are bound by 22
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint GLCompute 4 "ComputeShaderFunction" 21 EntryPoint GLCompute 4 "ComputeShaderFunction" 20
ExecutionMode 4 LocalSize 1 1 1 ExecutionMode 4 LocalSize 1 1 1
Source HLSL 500 Source HLSL 500
Name 4 "ComputeShaderFunction" Name 4 "ComputeShaderFunction"
Name 8 "@ComputeShaderFunction(" Name 8 "@ComputeShaderFunction("
Name 21 "@entryPointOutput" Name 20 "@entryPointOutput"
Decorate 21(@entryPointOutput) Location 0 Decorate 20(@entryPointOutput) Location 0
2: TypeVoid 2: TypeVoid
3: TypeFunction 2 3: TypeFunction 2
6: TypeFloat 32 6: TypeFloat 32
...@@ -72,26 +72,25 @@ local_size = (1, 1, 1) ...@@ -72,26 +72,25 @@ local_size = (1, 1, 1)
10: TypeInt 32 0 10: TypeInt 32 0
11: 10(int) Constant 1 11: 10(int) Constant 1
12: 10(int) Constant 4040 12: 10(int) Constant 4040
13: 10(int) Constant 4048 13: 10(int) Constant 2
14: 10(int) Constant 2 14: 10(int) Constant 2120
15: 10(int) Constant 512 15: 10(int) Constant 264
16: 10(int) Constant 256 16: 6(float) Constant 0
17: 6(float) Constant 0 19: TypePointer Output 6(float)
20: TypePointer Output 6(float) 20(@entryPointOutput): 19(ptr) Variable Output
21(@entryPointOutput): 20(ptr) Variable Output
4(ComputeShaderFunction): 2 Function None 3 4(ComputeShaderFunction): 2 Function None 3
5: Label 5: Label
22: 6(float) FunctionCall 8(@ComputeShaderFunction() 21: 6(float) FunctionCall 8(@ComputeShaderFunction()
Store 21(@entryPointOutput) 22 Store 20(@entryPointOutput) 21
Return Return
FunctionEnd FunctionEnd
8(@ComputeShaderFunction(): 6(float) Function None 7 8(@ComputeShaderFunction(): 6(float) Function None 7
9: Label 9: Label
MemoryBarrier 11 12 MemoryBarrier 11 12
ControlBarrier 11 11 13 ControlBarrier 13 11 12
MemoryBarrier 14 12 MemoryBarrier 11 14
ControlBarrier 11 11 15 ControlBarrier 13 11 14
MemoryBarrier 14 16 MemoryBarrier 13 15
ControlBarrier 14 14 16 ControlBarrier 13 13 15
ReturnValue 17 ReturnValue 16
FunctionEnd FunctionEnd
...@@ -722,7 +722,8 @@ enum TOperator { ...@@ -722,7 +722,8 @@ enum TOperator {
EOpInterlockedOr, // ... EOpInterlockedOr, // ...
EOpInterlockedXor, // ... EOpInterlockedXor, // ...
EOpAllMemoryBarrierWithGroupSync, // memory barriers without non-hlsl AST equivalents EOpAllMemoryBarrierWithGroupSync, // memory barriers without non-hlsl AST equivalents
EOpGroupMemoryBarrierWithGroupSync, // ... EOpDeviceMemoryBarrier, // ...
EOpDeviceMemoryBarrierWithGroupSync, // ...
EOpWorkgroupMemoryBarrier, // ... EOpWorkgroupMemoryBarrier, // ...
EOpWorkgroupMemoryBarrierWithGroupSync, // ... EOpWorkgroupMemoryBarrierWithGroupSync, // ...
EOpEvaluateAttributeSnapped, // InterpolateAtOffset with int position on 16x16 grid EOpEvaluateAttributeSnapped, // InterpolateAtOffset with int position on 16x16 grid
......
...@@ -791,7 +791,8 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node ...@@ -791,7 +791,8 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node
case EOpGenMul: out.debug << "mul"; break; case EOpGenMul: out.debug << "mul"; break;
case EOpAllMemoryBarrierWithGroupSync: out.debug << "AllMemoryBarrierWithGroupSync"; break; case EOpAllMemoryBarrierWithGroupSync: out.debug << "AllMemoryBarrierWithGroupSync"; break;
case EOpGroupMemoryBarrierWithGroupSync: out.debug << "GroupMemoryBarrierWithGroupSync"; break; case EOpDeviceMemoryBarrier: out.debug << "DeviceMemoryBarrier"; break;
case EOpDeviceMemoryBarrierWithGroupSync: out.debug << "DeviceMemoryBarrierWithGroupSync"; break;
case EOpWorkgroupMemoryBarrier: out.debug << "WorkgroupMemoryBarrier"; break; case EOpWorkgroupMemoryBarrier: out.debug << "WorkgroupMemoryBarrier"; break;
case EOpWorkgroupMemoryBarrierWithGroupSync: out.debug << "WorkgroupMemoryBarrierWithGroupSync"; break; case EOpWorkgroupMemoryBarrierWithGroupSync: out.debug << "WorkgroupMemoryBarrierWithGroupSync"; break;
......
...@@ -1087,8 +1087,8 @@ void TBuiltInParseablesHlsl::identifyBuiltIns(int /*version*/, EProfile /*profil ...@@ -1087,8 +1087,8 @@ void TBuiltInParseablesHlsl::identifyBuiltIns(int /*version*/, EProfile /*profil
symbolTable.relateToOperator("ddy_fine", EOpDPdyFine); symbolTable.relateToOperator("ddy_fine", EOpDPdyFine);
symbolTable.relateToOperator("degrees", EOpDegrees); symbolTable.relateToOperator("degrees", EOpDegrees);
symbolTable.relateToOperator("determinant", EOpDeterminant); symbolTable.relateToOperator("determinant", EOpDeterminant);
symbolTable.relateToOperator("DeviceMemoryBarrier", EOpGroupMemoryBarrier); symbolTable.relateToOperator("DeviceMemoryBarrier", EOpDeviceMemoryBarrier);
symbolTable.relateToOperator("DeviceMemoryBarrierWithGroupSync", EOpGroupMemoryBarrierWithGroupSync); // ... symbolTable.relateToOperator("DeviceMemoryBarrierWithGroupSync", EOpDeviceMemoryBarrierWithGroupSync);
symbolTable.relateToOperator("distance", EOpDistance); symbolTable.relateToOperator("distance", EOpDistance);
symbolTable.relateToOperator("dot", EOpDot); symbolTable.relateToOperator("dot", EOpDot);
symbolTable.relateToOperator("dst", EOpDst); symbolTable.relateToOperator("dst", EOpDst);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment