Skip to content

Commit 10f796d

Browse files
committed
Add exceptions for breakage introduced in RD barriers and prevent future breakage
1 parent 202e4b2 commit 10f796d

3 files changed

Lines changed: 44 additions & 23 deletions

File tree

doc/classes/RenderingDevice.xml

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616
<methods>
1717
<method name="barrier">
1818
<return type="void" />
19-
<param index="0" name="from" type="int" enum="RenderingDevice.BarrierMask" is_bitfield="true" default="15" />
20-
<param index="1" name="to" type="int" enum="RenderingDevice.BarrierMask" is_bitfield="true" default="15" />
19+
<param index="0" name="from" type="int" enum="RenderingDevice.BarrierMask" is_bitfield="true" default="32767" />
20+
<param index="1" name="to" type="int" enum="RenderingDevice.BarrierMask" is_bitfield="true" default="32767" />
2121
<description>
2222
Puts a memory barrier in place. This is used for synchronization to avoid data races. See also [method full_barrier], which may be useful for debugging.
2323
</description>
@@ -27,7 +27,7 @@
2727
<param index="0" name="buffer" type="RID" />
2828
<param index="1" name="offset" type="int" />
2929
<param index="2" name="size_bytes" type="int" />
30-
<param index="3" name="post_barrier" type="int" enum="RenderingDevice.BarrierMask" is_bitfield="true" default="15" />
30+
<param index="3" name="post_barrier" type="int" enum="RenderingDevice.BarrierMask" is_bitfield="true" default="32767" />
3131
<description>
3232
</description>
3333
</method>
@@ -46,7 +46,7 @@
4646
<param index="1" name="offset" type="int" />
4747
<param index="2" name="size_bytes" type="int" />
4848
<param index="3" name="data" type="PackedByteArray" />
49-
<param index="4" name="post_barrier" type="int" enum="RenderingDevice.BarrierMask" is_bitfield="true" default="15" />
49+
<param index="4" name="post_barrier" type="int" enum="RenderingDevice.BarrierMask" is_bitfield="true" default="32767" />
5050
<description>
5151
</description>
5252
</method>
@@ -114,7 +114,7 @@
114114
</method>
115115
<method name="compute_list_end">
116116
<return type="void" />
117-
<param index="0" name="post_barrier" type="int" enum="RenderingDevice.BarrierMask" is_bitfield="true" default="15" />
117+
<param index="0" name="post_barrier" type="int" enum="RenderingDevice.BarrierMask" is_bitfield="true" default="32767" />
118118
<description>
119119
Finishes a list of compute commands created with the [code]compute_*[/code] methods.
120120
</description>
@@ -296,7 +296,7 @@
296296
</method>
297297
<method name="draw_list_end">
298298
<return type="void" />
299-
<param index="0" name="post_barrier" type="int" enum="RenderingDevice.BarrierMask" is_bitfield="true" default="15" />
299+
<param index="0" name="post_barrier" type="int" enum="RenderingDevice.BarrierMask" is_bitfield="true" default="32767" />
300300
<description>
301301
Finishes a list of raster drawing commands created with the [code]draw_*[/code] methods.
302302
</description>
@@ -682,7 +682,7 @@
682682
<param index="3" name="mipmap_count" type="int" />
683683
<param index="4" name="base_layer" type="int" />
684684
<param index="5" name="layer_count" type="int" />
685-
<param index="6" name="post_barrier" type="int" enum="RenderingDevice.BarrierMask" is_bitfield="true" default="15" />
685+
<param index="6" name="post_barrier" type="int" enum="RenderingDevice.BarrierMask" is_bitfield="true" default="32767" />
686686
<description>
687687
Clears the specified [param texture] by replacing all of its pixels with the specified [param color]. [param base_mipmap] and [param mipmap_count] determine which mipmaps of the texture are affected by this clear operation, while [param base_layer] and [param layer_count] determine which layers of a 3D texture (or texture array) are affected by this clear operation. For 2D textures (which only have one layer by design), [param base_layer] and [param layer_count] must both be [code]0[/code].
688688
[b]Note:[/b] [param texture] can't be cleared while a draw list that uses it as part of a framebuffer is being created. Ensure the draw list is finalized (and that the color/depth texture using it is not set to [constant FINAL_ACTION_CONTINUE]) to clear this texture.
@@ -699,7 +699,7 @@
699699
<param index="6" name="dst_mipmap" type="int" />
700700
<param index="7" name="src_layer" type="int" />
701701
<param index="8" name="dst_layer" type="int" />
702-
<param index="9" name="post_barrier" type="int" enum="RenderingDevice.BarrierMask" is_bitfield="true" default="15" />
702+
<param index="9" name="post_barrier" type="int" enum="RenderingDevice.BarrierMask" is_bitfield="true" default="32767" />
703703
<description>
704704
Copies the [param from_texture] to [param to_texture] with the specified [param from_pos], [param to_pos] and [param size] coordinates. The Z axis of the [param from_pos], [param to_pos] and [param size] must be [code]0[/code] for 2-dimensional textures. Source and destination mipmaps/layers must also be specified, with these parameters being [code]0[/code] for textures without mipmaps or single-layer textures. Returns [constant @GlobalScope.OK] if the texture copy was successful or [constant @GlobalScope.ERR_INVALID_PARAMETER] otherwise.
705705
[b]Note:[/b] [param from_texture] texture can't be copied while a draw list that uses it as part of a framebuffer is being created. Ensure the draw list is finalized (and that the color/depth texture using it is not set to [constant FINAL_ACTION_CONTINUE]) to copy this texture.
@@ -786,7 +786,7 @@
786786
<return type="int" enum="Error" />
787787
<param index="0" name="from_texture" type="RID" />
788788
<param index="1" name="to_texture" type="RID" />
789-
<param index="2" name="post_barrier" type="int" enum="RenderingDevice.BarrierMask" is_bitfield="true" default="15" />
789+
<param index="2" name="post_barrier" type="int" enum="RenderingDevice.BarrierMask" is_bitfield="true" default="32767" />
790790
<description>
791791
Resolves the [param from_texture] texture onto [param to_texture] with multisample antialiasing enabled. This must be used when rendering a framebuffer for MSAA to work. Returns [constant @GlobalScope.OK] if successful, [constant @GlobalScope.ERR_INVALID_PARAMETER] otherwise.
792792
[b]Note:[/b] [param from_texture] and [param to_texture] textures must have the same dimension, format and type (color or depth).
@@ -803,7 +803,7 @@
803803
<param index="0" name="texture" type="RID" />
804804
<param index="1" name="layer" type="int" />
805805
<param index="2" name="data" type="PackedByteArray" />
806-
<param index="3" name="post_barrier" type="int" enum="RenderingDevice.BarrierMask" is_bitfield="true" default="15" />
806+
<param index="3" name="post_barrier" type="int" enum="RenderingDevice.BarrierMask" is_bitfield="true" default="32767" />
807807
<description>
808808
Updates texture data with new data, replacing the previous data in place. The updated texture data must have the same dimensions and format. For 2D textures (which only have one layer), [param layer] must be [code]0[/code]. Returns [constant @GlobalScope.OK] if the update was successful, [constant @GlobalScope.ERR_INVALID_PARAMETER] otherwise.
809809
[b]Note:[/b] Updating textures is forbidden during creation of a draw or compute list.
@@ -1583,22 +1583,22 @@
15831583
<constant name="BARRIER_MASK_VERTEX" value="1" enum="BarrierMask" is_bitfield="true">
15841584
Vertex shader barrier mask.
15851585
</constant>
1586-
<constant name="BARRIER_MASK_FRAGMENT" value="2" enum="BarrierMask" is_bitfield="true">
1586+
<constant name="BARRIER_MASK_FRAGMENT" value="8" enum="BarrierMask" is_bitfield="true">
15871587
Fragment shader barrier mask.
15881588
</constant>
1589-
<constant name="BARRIER_MASK_COMPUTE" value="4" enum="BarrierMask" is_bitfield="true">
1589+
<constant name="BARRIER_MASK_COMPUTE" value="2" enum="BarrierMask" is_bitfield="true">
15901590
Compute barrier mask.
15911591
</constant>
1592-
<constant name="BARRIER_MASK_TRANSFER" value="8" enum="BarrierMask" is_bitfield="true">
1592+
<constant name="BARRIER_MASK_TRANSFER" value="4" enum="BarrierMask" is_bitfield="true">
15931593
Transfer barrier mask.
15941594
</constant>
1595-
<constant name="BARRIER_MASK_RASTER" value="3" enum="BarrierMask" is_bitfield="true">
1595+
<constant name="BARRIER_MASK_RASTER" value="9" enum="BarrierMask" is_bitfield="true">
15961596
Raster barrier mask (vertex and fragment). Equivalent to [code]BARRIER_MASK_VERTEX | BARRIER_MASK_FRAGMENT[/code].
15971597
</constant>
1598-
<constant name="BARRIER_MASK_ALL_BARRIERS" value="15" enum="BarrierMask" is_bitfield="true">
1599-
Barrier mask for all types (raster, compute, transfer). Equivalent to [code]BARRIER_MASK_RASTER | BARRIER_MASK_COMPUTE | BARRIER_MASK_TRANSFER[/code].
1598+
<constant name="BARRIER_MASK_ALL_BARRIERS" value="32767" enum="BarrierMask" is_bitfield="true">
1599+
Barrier mask for all types (vertex, fragment, compute, transfer).
16001600
</constant>
1601-
<constant name="BARRIER_MASK_NO_BARRIER" value="16" enum="BarrierMask" is_bitfield="true">
1601+
<constant name="BARRIER_MASK_NO_BARRIER" value="32768" enum="BarrierMask" is_bitfield="true">
16021602
No barrier for any type.
16031603
</constant>
16041604
<constant name="TEXTURE_TYPE_1D" value="0" enum="TextureType">

misc/extension_api_validation/4.0-stable.expected

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -358,3 +358,24 @@ Validate extension JSON: Error: Hash changed for 'classes/EditorUndoRedoManager/
358358
Validate extension JSON: Error: Hash changed for 'classes/UndoRedo/methods/create_action', from 0AEC1BFC to E87757EB. This means that the function has changed and no compatibility function was provided.
359359

360360
Added a optional parameters with default values. No adjustments should be necessary.
361+
362+
GH-79911
363+
--------
364+
Validate extension JSON: Error: Field 'classes/RenderingDevice/enums/BarrierMask/values/BARRIER_MASK_RASTER': value changed value in new API, from 1.0 to 9.
365+
Validate extension JSON: Error: Field 'classes/RenderingDevice/enums/BarrierMask/values/BARRIER_MASK_ALL_BARRIERS': value changed value in new API, from 7.0 to 32767.
366+
Validate extension JSON: Error: Field 'classes/RenderingDevice/enums/BarrierMask/values/BARRIER_MASK_NO_BARRIER': value changed value in new API, from 8.0 to 32768.
367+
Validate extension JSON: Error: Field 'classes/RenderingDevice/methods/texture_update/arguments/3': default_value changed value in new API, from "7" to "32767".
368+
Validate extension JSON: Error: Field 'classes/RenderingDevice/methods/texture_copy/arguments/9': default_value changed value in new API, from "7" to "32767".
369+
Validate extension JSON: Error: Field 'classes/RenderingDevice/methods/texture_clear/arguments/6': default_value changed value in new API, from "7" to "32767".
370+
Validate extension JSON: Error: Field 'classes/RenderingDevice/methods/texture_resolve_multisample/arguments/2': default_value changed value in new API, from "7" to "32767".
371+
Validate extension JSON: Error: Field 'classes/RenderingDevice/methods/buffer_update/arguments/4': default_value changed value in new API, from "7" to "32767".
372+
Validate extension JSON: Error: Field 'classes/RenderingDevice/methods/buffer_clear/arguments/3': default_value changed value in new API, from "7" to "32767".
373+
Validate extension JSON: Error: Field 'classes/RenderingDevice/methods/draw_list_end/arguments/0': default_value changed value in new API, from "7" to "32767".
374+
Validate extension JSON: Error: Hash changed for 'classes/RenderingDevice/methods/draw_list_end', from 19365687 to E9B4FA8E. This means that the function has changed and no compatibility function was provided.
375+
Validate extension JSON: Error: Field 'classes/RenderingDevice/methods/compute_list_end/arguments/0': default_value changed value in new API, from "7" to "32767".
376+
Validate extension JSON: Error: Hash changed for 'classes/RenderingDevice/methods/compute_list_end', from 19365687 to E9B4FA8E. This means that the function has changed and no compatibility function was provided.
377+
Validate extension JSON: Error: Field 'classes/RenderingDevice/methods/barrier/arguments/0': default_value changed value in new API, from "7" to "32767".
378+
Validate extension JSON: Error: Field 'classes/RenderingDevice/methods/barrier/arguments/1': default_value changed value in new API, from "7" to "32767".
379+
Validate extension JSON: Error: Hash changed for 'classes/RenderingDevice/methods/barrier', from 0FE50041 to DD9E8DAB. This means that the function has changed and no compatibility function was provided.
380+
381+
Raster barrier was split into vertex and fragment barriers for use in mobile renderer.

servers/rendering/rendering_device.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -394,13 +394,13 @@ class RenderingDevice : public Object {
394394

395395
enum BarrierMask {
396396
BARRIER_MASK_VERTEX = 1,
397-
BARRIER_MASK_FRAGMENT = 2,
398-
BARRIER_MASK_COMPUTE = 4,
399-
BARRIER_MASK_TRANSFER = 8,
397+
BARRIER_MASK_FRAGMENT = 8,
398+
BARRIER_MASK_COMPUTE = 2,
399+
BARRIER_MASK_TRANSFER = 4,
400400

401-
BARRIER_MASK_RASTER = BARRIER_MASK_VERTEX | BARRIER_MASK_FRAGMENT, // 3,
402-
BARRIER_MASK_ALL_BARRIERS = BARRIER_MASK_RASTER | BARRIER_MASK_COMPUTE | BARRIER_MASK_TRANSFER, // 7
403-
BARRIER_MASK_NO_BARRIER = 16,
401+
BARRIER_MASK_RASTER = BARRIER_MASK_VERTEX | BARRIER_MASK_FRAGMENT, // 9,
402+
BARRIER_MASK_ALL_BARRIERS = 0x7FFF, // all flags set
403+
BARRIER_MASK_NO_BARRIER = 0x8000,
404404
};
405405

406406
/*****************/

0 commit comments

Comments
 (0)