Przeglądaj źródła

Add more indirect command structs to the procedure calls

gingerBill 4 lat temu
rodzic
commit
49fbdd6188
2 zmienionych plików z 28 dodań i 22 usunięć
  1. 22 16
      vendor/OpenGL/impl.odin
  2. 6 6
      vendor/OpenGL/wrappers.odin

+ 22 - 16
vendor/OpenGL/impl.odin

@@ -886,13 +886,28 @@ load_3_3 :: proc(set_proc_address: Set_Proc_Address_Type) {
 
 
 // VERSION_4_0
+DrawArraysIndirectCommand :: struct {
+	count:         u32,
+	instanceCount: u32,
+	first:         u32,
+	baseInstance:  u32,
+}
+
+DrawElementsIndirectCommand :: struct {
+	count:         u32,
+	instanceCount: u32,
+	firstIndex:    u32,
+	baseVertex:    u32,
+	baseInstance:  u32,
+}
+
 impl_MinSampleShading:               proc "c" (value: f32);
 impl_BlendEquationi:                 proc "c" (buf: u32, mode: u32);
 impl_BlendEquationSeparatei:         proc "c" (buf: u32, modeRGB: u32, modeAlpha: u32);
 impl_BlendFunci:                     proc "c" (buf: u32, src: u32, dst: u32);
 impl_BlendFuncSeparatei:             proc "c" (buf: u32, srcRGB: u32, dstRGB: u32, srcAlpha: u32, dstAlpha: u32);
-impl_DrawArraysIndirect:             proc "c" (mode: u32, indirect: rawptr);
-impl_DrawElementsIndirect:           proc "c" (mode: u32, type: u32, indirect: rawptr);
+impl_DrawArraysIndirect:             proc "c" (mode: u32, indirect: ^DrawArraysIndirectCommand);
+impl_DrawElementsIndirect:           proc "c" (mode: u32, type: u32, indirect: ^DrawElementsIndirectCommand);
 impl_Uniform1d:                      proc "c" (location: i32, x: f64);
 impl_Uniform2d:                      proc "c" (location: i32, x: f64, y: f64);
 impl_Uniform3d:                      proc "c" (location: i32, x: f64, y: f64, z: f64);
@@ -1195,25 +1210,16 @@ load_4_2 :: proc(set_proc_address: Set_Proc_Address_Type) {
 }
 
 // VERSION_4_3
-DrawArraysIndirectCommand :: struct {
-	count:         u32,
-	instanceCount: u32,
-	first:         u32,
-	baseInstance:  u32,
-}
-
-DrawElementsIndirectCommand :: struct {
-	count:         u32,
-	instanceCount: u32,
-	firstIndex:    u32,
-	baseVertex:    u32,
-	baseInstance:  u32,
+DispatchIndirectCommand :: struct {
+	num_groups_x: u32,
+	num_groups_y: u32,
+	num_groups_z: u32,
 }
 
 impl_ClearBufferData:                 proc "c" (target: u32, internalformat: u32, format: u32, type: u32, data: rawptr);
 impl_ClearBufferSubData:              proc "c" (target: u32, internalformat: u32, offset: int, size: int, format: u32, type: u32, data: rawptr);
 impl_DispatchCompute:                 proc "c" (num_groups_x: u32, num_groups_y: u32, num_groups_z: u32);
-impl_DispatchComputeIndirect:         proc "c" (indirect: int);
+impl_DispatchComputeIndirect:         proc "c" (indirect: ^DispatchIndirectCommand);
 impl_CopyImageSubData:                proc "c" (srcName: u32, srcTarget: u32, srcLevel: i32, srcX: i32, srcY: i32, srcZ: i32, dstName: u32, dstTarget: u32, dstLevel: i32, dstX: i32, dstY: i32, dstZ: i32, srcWidth: i32, srcHeight: i32, srcDepth: i32);
 impl_FramebufferParameteri:           proc "c" (target: u32, pname: u32, param: i32);
 impl_GetFramebufferParameteriv:       proc "c" (target: u32, pname: u32, params: [^]i32);

+ 6 - 6
vendor/OpenGL/wrappers.odin

@@ -406,8 +406,8 @@ when !ODIN_DEBUG {
 	BlendEquationSeparatei         :: #force_inline proc "c" (buf: u32, modeRGB: u32, modeAlpha: u32)                                             {        impl_BlendEquationSeparatei(buf, modeRGB, modeAlpha);                                                }
 	BlendFunci                     :: #force_inline proc "c" (buf: u32, src: u32, dst: u32)                                                       {        impl_BlendFunci(buf, src, dst);                                                                      }
 	BlendFuncSeparatei             :: #force_inline proc "c" (buf: u32, srcRGB: u32, dstRGB: u32, srcAlpha: u32, dstAlpha: u32)                   {        impl_BlendFuncSeparatei(buf, srcRGB, dstRGB, srcAlpha, dstAlpha);                                    }
-	DrawArraysIndirect             :: #force_inline proc "c" (mode: u32, indirect: rawptr)                                                        {        impl_DrawArraysIndirect(mode, indirect);                                                             }
-	DrawElementsIndirect           :: #force_inline proc "c" (mode: u32, type: u32, indirect: rawptr)                                             {        impl_DrawElementsIndirect(mode, type, indirect);                                                    }
+	DrawArraysIndirect             :: #force_inline proc "c" (mode: u32, indirect: ^DrawArraysIndirectCommand)                                    {        impl_DrawArraysIndirect(mode, indirect);                                                             }
+	DrawElementsIndirect           :: #force_inline proc "c" (mode: u32, type: u32, indirect: ^DrawElementsIndirectCommand)                       {        impl_DrawElementsIndirect(mode, type, indirect);                                                    }
 	Uniform1d                      :: #force_inline proc "c" (location: i32, x: f64)                                                              {        impl_Uniform1d(location, x);                                                                         }
 	Uniform2d                      :: #force_inline proc "c" (location: i32, x: f64, y: f64)                                                      {        impl_Uniform2d(location, x, y);                                                                      }
 	Uniform3d                      :: #force_inline proc "c" (location: i32, x: f64, y: f64, z: f64)                                              {        impl_Uniform3d(location, x, y, z);                                                                   }
@@ -556,7 +556,7 @@ when !ODIN_DEBUG {
 	ClearBufferData                 :: #force_inline proc "c" (target: u32, internalformat: u32, format: u32, type: u32, data: rawptr)                                                                                                                                   {        impl_ClearBufferData(target, internalformat, format, type, data);                                                                                                }
 	ClearBufferSubData              :: #force_inline proc "c" (target: u32, internalformat: u32, offset: int, size: int, format: u32, type: u32, data: rawptr)                                                                                                           {        impl_ClearBufferSubData(target, internalformat, offset, size, format, type, data);                                                                               }
 	DispatchCompute                 :: #force_inline proc "c" (num_groups_x: u32, num_groups_y: u32, num_groups_z: u32)                                                                                                                                                  {        impl_DispatchCompute(num_groups_x, num_groups_y, num_groups_z);                                                                                                   }
-	DispatchComputeIndirect         :: #force_inline proc "c" (indirect: int)                                                                                                                                                                                            {        impl_DispatchComputeIndirect(indirect);                                                                                                                           }
+	DispatchComputeIndirect         :: #force_inline proc "c" (indirect: ^DispatchIndirectCommand)                                                                                                                                                                       {        impl_DispatchComputeIndirect(indirect);                                                                                                                           }
 	CopyImageSubData                :: #force_inline proc "c" (srcName: u32, srcTarget: u32, srcLevel: i32, srcX: i32, srcY: i32, srcZ: i32, dstName: u32, dstTarget: u32, dstLevel: i32, dstX: i32, dstY: i32, dstZ: i32, srcWidth: i32, srcHeight: i32, srcDepth: i32) {        impl_CopyImageSubData(srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, srcWidth, srcHeight, srcDepth);             }
 	FramebufferParameteri           :: #force_inline proc "c" (target: u32, pname: u32, param: i32)                                                                                                                                                                      {        impl_FramebufferParameteri(target, pname, param);                                                                                                                 }
 	GetFramebufferParameteriv       :: #force_inline proc "c" (target: u32, pname: u32, params: [^]i32)                                                                                                                                                                  {        impl_GetFramebufferParameteriv(target, pname, params);                                                                                                            }
@@ -1206,8 +1206,8 @@ when !ODIN_DEBUG {
 	BlendEquationSeparatei         :: #force_inline proc "c" (buf: u32, modeRGB: u32, modeAlpha: u32, loc := #caller_location)                                             {        impl_BlendEquationSeparatei(buf, modeRGB, modeAlpha);                                    debug_helper(loc, 0, buf, modeRGB, modeAlpha);                                        }
 	BlendFunci                     :: #force_inline proc "c" (buf: u32, src: u32, dst: u32, loc := #caller_location)                                                       {        impl_BlendFunci(buf, src, dst);                                                          debug_helper(loc, 0, buf, src, dst);                                                  }
 	BlendFuncSeparatei             :: #force_inline proc "c" (buf: u32, srcRGB: u32, dstRGB: u32, srcAlpha: u32, dstAlpha: u32, loc := #caller_location)                   {        impl_BlendFuncSeparatei(buf, srcRGB, dstRGB, srcAlpha, dstAlpha);                        debug_helper(loc, 0, buf, srcRGB, dstRGB, srcAlpha, dstAlpha);                        }
-	DrawArraysIndirect             :: #force_inline proc "c" (mode: u32, indirect: rawptr, loc := #caller_location)                                                        {        impl_DrawArraysIndirect(mode, indirect);                                                 debug_helper(loc, 0, mode, indirect);                                                 }
-	DrawElementsIndirect           :: #force_inline proc "c" (mode: u32, type: u32, indirect: rawptr, loc := #caller_location)                                             {        impl_DrawElementsIndirect(mode, type, indirect);                                        debug_helper(loc, 0, mode, type, indirect);                                          }
+	DrawArraysIndirect             :: #force_inline proc "c" (mode: u32, indirect: ^DrawArraysIndirectCommand, loc := #caller_location)                                    {        impl_DrawArraysIndirect(mode, indirect);                                                 debug_helper(loc, 0, mode, indirect);                                                 }
+	DrawElementsIndirect           :: #force_inline proc "c" (mode: u32, type: u32, indirect: ^DrawElementsIndirectCommand, loc := #caller_location)                       {        impl_DrawElementsIndirect(mode, type, indirect);                                        debug_helper(loc, 0, mode, type, indirect);                                          }
 	Uniform1d                      :: #force_inline proc "c" (location: i32, x: f64, loc := #caller_location)                                                              {        impl_Uniform1d(location, x);                                                             debug_helper(loc, 0, location, x);                                                    }
 	Uniform2d                      :: #force_inline proc "c" (location: i32, x: f64, y: f64, loc := #caller_location)                                                      {        impl_Uniform2d(location, x, y);                                                          debug_helper(loc, 0, location, x, y);                                                 }
 	Uniform3d                      :: #force_inline proc "c" (location: i32, x: f64, y: f64, z: f64, loc := #caller_location)                                              {        impl_Uniform3d(location, x, y, z);                                                       debug_helper(loc, 0, location, x, y, z);                                              }
@@ -1356,7 +1356,7 @@ when !ODIN_DEBUG {
 	ClearBufferData                 :: #force_inline proc "c" (target: u32, internalformat: u32, format: u32, type: u32, data: rawptr, loc := #caller_location)                                                                                                                                   {        impl_ClearBufferData(target, internalformat, format, type, data);                                                                                    debug_helper(loc, 0, target, internalformat, format, type, data);                                                                                               }
 	ClearBufferSubData              :: #force_inline proc "c" (target: u32, internalformat: u32, offset: int, size: int, format: u32, type: u32, data: rawptr, loc := #caller_location)                                                                                                           {        impl_ClearBufferSubData(target, internalformat, offset, size, format, type, data);                                                                   debug_helper(loc, 0, target, internalformat, offset, size, format, type, data);                                                                                 }
 	DispatchCompute                 :: #force_inline proc "c" (num_groups_x: u32, num_groups_y: u32, num_groups_z: u32, loc := #caller_location)                                                                                                                                                  {        impl_DispatchCompute(num_groups_x, num_groups_y, num_groups_z);                                                                                       debug_helper(loc, 0, num_groups_x, num_groups_y, num_groups_z);                                                                                                  }
-	DispatchComputeIndirect         :: #force_inline proc "c" (indirect: int, loc := #caller_location)                                                                                                                                                                                            {        impl_DispatchComputeIndirect(indirect);                                                                                                               debug_helper(loc, 0, indirect);                                                                                                                                  }
+	DispatchComputeIndirect         :: #force_inline proc "c" (indirect: ^DispatchIndirectCommand, loc := #caller_location)                                                                                                                                                                       {        impl_DispatchComputeIndirect(indirect);                                                                                                               debug_helper(loc, 0, indirect);                                                                                                                                  }
 	CopyImageSubData                :: #force_inline proc "c" (srcName: u32, srcTarget: u32, srcLevel: i32, srcX: i32, srcY: i32, srcZ: i32, dstName: u32, dstTarget: u32, dstLevel: i32, dstX: i32, dstY: i32, dstZ: i32, srcWidth: i32, srcHeight: i32, srcDepth: i32, loc := #caller_location) {        impl_CopyImageSubData(srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, srcWidth, srcHeight, srcDepth); debug_helper(loc, 0, srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, srcWidth, srcHeight, srcDepth);             }
 	FramebufferParameteri           :: #force_inline proc "c" (target: u32, pname: u32, param: i32, loc := #caller_location)                                                                                                                                                                      {        impl_FramebufferParameteri(target, pname, param);                                                                                                     debug_helper(loc, 0, target, pname, param);                                                                                                                      }
 	GetFramebufferParameteriv       :: #force_inline proc "c" (target: u32, pname: u32, params: [^]i32, loc := #caller_location)                                                                                                                                                                  {        impl_GetFramebufferParameteriv(target, pname, params);                                                                                                debug_helper(loc, 0, target, pname, params);                                                                                                                     }