]> git.nega.tv - josh/narcissus/commitdiff
shark-shaders: Use readonly qualifier on readonly buffers
authorJosh Simmons <josh@nega.tv>
Sun, 17 Nov 2024 21:38:24 +0000 (22:38 +0100)
committerJosh Simmons <josh@nega.tv>
Sun, 17 Nov 2024 21:38:24 +0000 (22:38 +0100)
Radv emits vector loads for these buffers if we don't apply readonly. So
this way we ensure scalar loads for everything in the rasterize shader.

title/shark-shaders/shaders/draw_2d.h
title/shark-shaders/shaders/draw_2d_bin_3_resolve.comp
title/shark-shaders/shaders/draw_2d_rasterize.comp

index bcef539bc119b5dbe04c395928b6d93ac9c571cd..05ce1e283d66ace09a386d9aab367c8ee5808f33 100644 (file)
@@ -65,23 +65,23 @@ CmdGlyph decode_glyph(Cmd cmd) {
     return glyph;
 }
 
-layout(buffer_reference, std430, buffer_reference_align = 16) readonly buffer CommandRef
-{
+layout(buffer_reference, std430, buffer_reference_align = 16) readonly buffer CommandRef {
     Cmd values[];
 };
 
-layout(buffer_reference, std430, buffer_reference_align = 16) readonly buffer ScissorRef
-{
+layout(buffer_reference, std430, buffer_reference_align = 16) readonly buffer ScissorRef {
     Scissor values[];
 };
 
-layout(buffer_reference, std430, buffer_reference_align = 16) readonly buffer GlyphRef
-{
+layout(buffer_reference, std430, buffer_reference_align = 16) readonly buffer GlyphRef {
     Glyph values[];
 };
 
-layout(buffer_reference, std430, buffer_reference_align = 4) buffer CoarseRef
-{
+layout(buffer_reference, std430, buffer_reference_align = 4) buffer CoarseRef {
+    uint values[];
+};
+
+layout(buffer_reference, std430, buffer_reference_align = 4) readonly buffer CoarseReadRef {
     uint values[];
 };
 
@@ -89,7 +89,15 @@ layout(buffer_reference, std430, buffer_reference_align = 4) buffer FineRef {
     uint values[];
 };
 
-layout(buffer_reference, std430, buffer_reference_align = 4) buffer TileRef {
+layout(buffer_reference, std430, buffer_reference_align = 4) readonly buffer FineReadRef {
+    uint values[];
+};
+
+layout(buffer_reference, std430, buffer_reference_align = 16) buffer TileRef {
+    Tile values[];
+};
+
+layout(buffer_reference, std430, buffer_reference_align = 16) readonly buffer TileReadRef {
     Tile values[];
 };
 
index 46427d4ab8062e55ddf951d605f04bf584b240b1..5a8f38910b53ca334474ff3c699ad727da0edeab 100644 (file)
@@ -20,7 +20,7 @@ struct ResolveConstants {
     CommandRef draw_buffer;
     ScissorRef scissor_buffer;
     GlyphRef glyph_buffer;
-    CoarseRef coarse_buffer;
+    CoarseReadRef coarse_buffer;
     FineRef fine_buffer;
     TileRef tile_buffer;
 };
index 3e9c1c40e269f350d96410eba2ec9b92f888714b..a88124ee7b4af42d9db02346ce6a8dfedf04f3ab 100644 (file)
@@ -21,9 +21,9 @@ struct RasterizeConstants {
     CommandRef draw_buffer;
     ScissorRef scissor_buffer;
     GlyphRef glyph_buffer;
-    CoarseRef coarse_buffer;
-    FineRef fine_buffer;
-    TileRef tile_buffer;
+    CoarseReadRef coarse_buffer;
+    FineReadRef fine_buffer;
+    TileReadRef tile_buffer;
 };
 
 layout(std430, push_constant) uniform RasterizeConstantsBlock {