Browse Source

Restricted support for raw buffer of int/float to RWBuffers. Use layout(std430) for RWBuffer to avoid padding.

TothBenoit 1 year ago
parent
commit
981c1a3318
2 changed files with 4 additions and 2 deletions
  1. 2 2
      hxsl/Flatten.hx
  2. 2 0
      hxsl/GlslOut.hx

+ 2 - 2
hxsl/Flatten.hx

@@ -123,7 +123,7 @@ class Flatten {
 				case TArray(t, _) if( t.isTexture() ):
 					eindex = toInt(mapExpr(eindex));
 					access(a, t, vp, AOffset(a,1,eindex));
-				case TBuffer(TInt|TFloat,_):
+				case TBuffer(TInt|TFloat, _, RW|RWPartial):
 					e.map(mapExpr);
 				case TArray(t, _), TBuffer(t, _):
 					var stride = varSize(t, a.t);
@@ -386,7 +386,7 @@ class Flatten {
 			case TBuffer(t,SConst(size),k) if( kind == k ):
 				var stride = Math.ceil(t.size()/4);
 				var bt = switch( t ) {
-				case TInt|TFloat:
+				case TInt|TFloat if( kind.match( RW|RWPartial ) ) :
 					v.type;
 				default:
 					// for buffers of complex types, let's perform our own remaping

+ 2 - 0
hxsl/GlslOut.hx

@@ -706,6 +706,8 @@ class GlslOut {
 		switch( v.kind ) {
 		case Param, Global:
 			switch( v.type ) {
+			case TBuffer(TInt|TFloat, _, RW|RWPartial):
+				add("layout(std430) buffer ");
 			case TBuffer(_, _, kind):
 				add("layout(std140) ");
 				switch( kind ) {