Blender V5.0
GPU_state.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
8
9#pragma once
10
11#include "BLI_utildefines.h"
12
14struct GPUFence;
15
26
28
30 /* Texture Barrier. */
31
41 // GPU_BARRIER_PIXEL_BUFFER = (1 << 4), /* Not implemented yet. */
42
43 /* Buffer Barrier. */
44
58 // GPU_BARRIER_CLIENT_MAPPED_BUFFER = (1 << 15), /* Not implemented yet. */
59};
60
62
63/* NOTE: For Metal and Vulkan only.
64 * TODO(Metal): Update barrier calls to use stage flags. */
73
75
76
109
112 GPU_DEPTH_ALWAYS, /* Used to draw to the depth buffer without really testing. */
114 GPU_DEPTH_LESS_EQUAL, /* Default. */
118};
119
126
134
136 GPU_CULL_NONE = 0, /* Culling disabled. */
139};
140
142 GPU_VERTEX_LAST = 0, /* Default. */
143 GPU_VERTEX_FIRST = 1, /* Follow Blender loop order. */
144};
145
151void GPU_front_facing(bool invert);
152void GPU_depth_range(float near, float far);
153void GPU_scissor_test(bool enable);
154void GPU_line_smooth(bool enable);
160void GPU_line_width(float width);
161void GPU_logic_op_xor_set(bool enable);
162void GPU_point_size(float size);
163void GPU_polygon_smooth(bool enable);
164
172void GPU_program_point_size(bool enable);
173void GPU_scissor(int x, int y, int width, int height);
174void GPU_scissor_get(int coords[4]);
175void GPU_viewport(int x, int y, int width, int height);
176void GPU_viewport_size_get_f(float coords[4]);
177void GPU_viewport_size_get_i(int coords[4]);
179void GPU_color_mask(bool r, bool g, bool b, bool a);
180void GPU_depth_mask(bool depth);
181bool GPU_depth_mask_get();
182void GPU_shadow_offset(bool enable);
183void GPU_clip_distances(int distances_enabled);
184bool GPU_mipmap_enabled();
185void GPU_state_set(GPUWriteMask write_mask,
187 GPUFaceCullTest culling_test,
188 GPUDepthTest depth_test,
189 GPUStencilTest stencil_test,
190 GPUStencilOp stencil_op,
191 GPUProvokingVertex provoking_vert);
192
193void GPU_stencil_reference_set(uint reference);
194void GPU_stencil_write_mask_set(uint write_mask);
195void GPU_stencil_compare_mask_set(uint compare_mask);
196
197/* Sets the depth range to be 0..1. Only have effect with the OpenGL backend. Have no effect if
198 * glClipControl is not supported. Shaders used for drawing with this state must use
199 * BuiltinBits::CLIP_CONTROL for their vertex shader to be patched. */
200void GPU_clip_control_unit_range(bool enable);
201
211float GPU_line_width_get();
213
214void GPU_flush();
215void GPU_finish();
216void GPU_apply_state();
217
226void GPU_memory_barrier(GPUBarrier barrier);
227
228GPUFence *GPU_fence_create();
229void GPU_fence_free(GPUFence *fence);
230void GPU_fence_signal(GPUFence *fence);
231void GPU_fence_wait(GPUFence *fence);
unsigned int uint
#define ENUM_OPERATORS(_type, _max)
void GPU_program_point_size(bool enable)
Definition gpu_state.cc:180
void GPU_flush()
Definition gpu_state.cc:305
GPUStencilTest GPU_stencil_test_get()
Definition gpu_state.cc:250
GPUBarrier
Definition GPU_state.hh:29
@ GPU_BARRIER_COMMAND
Definition GPU_state.hh:46
@ GPU_BARRIER_SHADER_STORAGE
Definition GPU_state.hh:48
@ GPU_BARRIER_TEXTURE_FETCH
Definition GPU_state.hh:37
@ GPU_BARRIER_BUFFER_UPDATE
Definition GPU_state.hh:56
@ GPU_BARRIER_ELEMENT_ARRAY
Definition GPU_state.hh:52
@ GPU_BARRIER_UNIFORM
Definition GPU_state.hh:54
@ GPU_BARRIER_SHADER_IMAGE_ACCESS
Definition GPU_state.hh:35
@ GPU_BARRIER_VERTEX_ATTRIB_ARRAY
Definition GPU_state.hh:50
@ GPU_BARRIER_TEXTURE_UPDATE
Definition GPU_state.hh:39
@ GPU_BARRIER_FRAMEBUFFER
Definition GPU_state.hh:33
GPUStageBarrierBits
Definition GPU_state.hh:65
@ GPU_BARRIER_STAGE_COMPUTE
Definition GPU_state.hh:68
@ GPU_BARRIER_STAGE_FRAGMENT
Definition GPU_state.hh:67
@ GPU_BARRIER_STAGE_VERTEX
Definition GPU_state.hh:66
@ GPU_BARRIER_STAGE_ANY
Definition GPU_state.hh:70
@ GPU_BARRIER_STAGE_ANY_GRAPHICS
Definition GPU_state.hh:69
void GPU_scissor_test(bool enable)
Definition gpu_state.cc:188
GPUDepthTest
Definition GPU_state.hh:110
@ GPU_DEPTH_GREATER
Definition GPU_state.hh:116
@ GPU_DEPTH_EQUAL
Definition GPU_state.hh:115
@ GPU_DEPTH_ALWAYS
Definition GPU_state.hh:112
@ GPU_DEPTH_GREATER_EQUAL
Definition GPU_state.hh:117
@ GPU_DEPTH_LESS
Definition GPU_state.hh:113
@ GPU_DEPTH_LESS_EQUAL
Definition GPU_state.hh:114
@ GPU_DEPTH_NONE
Definition GPU_state.hh:111
bool GPU_line_smooth_get()
Definition gpu_state.cc:262
void GPU_line_width(float width)
Definition gpu_state.cc:166
void GPU_provoking_vertex(GPUProvokingVertex vert)
Definition gpu_state.cc:63
void GPU_finish()
Definition gpu_state.cc:310
void GPU_line_smooth(bool enable)
Definition gpu_state.cc:78
GPUBlend GPU_blend_get()
Definition gpu_state.cc:226
GPUBlend
Definition GPU_state.hh:84
@ GPU_BLEND_ADDITIVE_PREMULT
Definition GPU_state.hh:90
@ GPU_BLEND_INVERT
Definition GPU_state.hh:95
@ GPU_BLEND_OIT
Definition GPU_state.hh:98
@ GPU_BLEND_MULTIPLY
Definition GPU_state.hh:91
@ GPU_BLEND_NONE
Definition GPU_state.hh:85
@ GPU_BLEND_ALPHA
Definition GPU_state.hh:87
@ GPU_BLEND_CUSTOM
Definition GPU_state.hh:103
@ GPU_BLEND_ADDITIVE
Definition GPU_state.hh:89
@ GPU_BLEND_SUBTRACT
Definition GPU_state.hh:92
@ GPU_BLEND_ALPHA_UNDER_PREMUL
Definition GPU_state.hh:104
@ GPU_BLEND_BACKGROUND
Definition GPU_state.hh:100
@ GPU_BLEND_ALPHA_PREMULT
Definition GPU_state.hh:88
@ GPU_BLEND_OVERLAY_MASK_FROM_ALPHA
Definition GPU_state.hh:107
void GPU_logic_op_xor_set(bool enable)
Definition gpu_state.cc:88
void GPU_depth_mask(bool depth)
Definition gpu_state.cc:110
void GPU_face_culling(GPUFaceCullTest culling)
Definition gpu_state.cc:47
void GPU_blend(GPUBlend blend)
Definition gpu_state.cc:42
void GPU_stencil_write_mask_set(uint write_mask)
Definition gpu_state.cc:210
void GPU_depth_test(GPUDepthTest test)
Definition gpu_state.cc:68
void GPU_stencil_test(GPUStencilTest test)
Definition gpu_state.cc:73
bool GPU_mipmap_enabled()
Definition gpu_state.cc:293
void GPU_color_mask(bool r, bool g, bool b, bool a)
Definition gpu_state.cc:98
GPUFence * GPU_fence_create()
Definition gpu_state.cc:331
void GPU_depth_range(float near, float far)
Definition gpu_state.cc:159
GPUProvokingVertex
Definition GPU_state.hh:141
@ GPU_VERTEX_LAST
Definition GPU_state.hh:142
@ GPU_VERTEX_FIRST
Definition GPU_state.hh:143
void GPU_viewport_size_get_i(int coords[4])
Definition gpu_state.cc:282
GPUStencilTest
Definition GPU_state.hh:120
@ GPU_STENCIL_EQUAL
Definition GPU_state.hh:123
@ GPU_STENCIL_NEQUAL
Definition GPU_state.hh:124
@ GPU_STENCIL_ALWAYS
Definition GPU_state.hh:122
@ GPU_STENCIL_NONE
Definition GPU_state.hh:121
void GPU_state_set(GPUWriteMask write_mask, GPUBlend blend, GPUFaceCullTest culling_test, GPUDepthTest depth_test, GPUStencilTest stencil_test, GPUStencilOp stencil_op, GPUProvokingVertex provoking_vert)
Definition gpu_state.cc:129
void GPU_stencil_reference_set(uint reference)
Definition gpu_state.cc:205
void GPU_scissor(int x, int y, int width, int height)
Definition gpu_state.cc:193
GPUDepthTest GPU_depth_test_get()
Definition gpu_state.cc:244
float GPU_line_width_get()
Definition gpu_state.cc:256
void GPU_stencil_compare_mask_set(uint compare_mask)
Definition gpu_state.cc:215
GPUWriteMask
Definition GPU_state.hh:16
@ GPU_WRITE_RED
Definition GPU_state.hh:18
@ GPU_WRITE_STENCIL
Definition GPU_state.hh:23
@ GPU_WRITE_NONE
Definition GPU_state.hh:17
@ GPU_WRITE_GREEN
Definition GPU_state.hh:19
@ GPU_WRITE_BLUE
Definition GPU_state.hh:20
@ GPU_WRITE_DEPTH
Definition GPU_state.hh:22
@ GPU_WRITE_COLOR
Definition GPU_state.hh:24
@ GPU_WRITE_ALPHA
Definition GPU_state.hh:21
GPUFaceCullTest GPU_face_culling_get()
Definition gpu_state.cc:52
void GPU_memory_barrier(GPUBarrier barrier)
Definition gpu_state.cc:326
void GPU_front_facing(bool invert)
Definition gpu_state.cc:58
void GPU_viewport(int x, int y, int width, int height)
Definition gpu_state.cc:199
void GPU_fence_wait(GPUFence *fence)
Definition gpu_state.cc:347
void GPU_point_size(float size)
Definition gpu_state.cc:172
void GPU_write_mask(GPUWriteMask mask)
Definition gpu_state.cc:93
GPUWriteMask GPU_write_mask_get()
Definition gpu_state.cc:232
uint GPU_stencil_mask_get()
Definition gpu_state.cc:238
GPUFaceCullTest
Definition GPU_state.hh:135
@ GPU_CULL_FRONT
Definition GPU_state.hh:137
@ GPU_CULL_NONE
Definition GPU_state.hh:136
@ GPU_CULL_BACK
Definition GPU_state.hh:138
void GPU_fence_signal(GPUFence *fence)
Definition gpu_state.cc:342
void GPU_viewport_size_get_f(float coords[4])
Definition gpu_state.cc:273
void GPU_apply_state()
Definition gpu_state.cc:315
bool GPU_depth_mask_get()
Definition gpu_state.cc:287
void GPU_clip_control_unit_range(bool enable)
Definition gpu_state.cc:148
GPUStencilOp
Definition GPU_state.hh:127
@ GPU_STENCIL_OP_COUNT_DEPTH_FAIL
Definition GPU_state.hh:132
@ GPU_STENCIL_OP_COUNT_DEPTH_PASS
Definition GPU_state.hh:131
@ GPU_STENCIL_OP_REPLACE
Definition GPU_state.hh:129
@ GPU_STENCIL_OP_NONE
Definition GPU_state.hh:128
void GPU_scissor_get(int coords[4])
Definition gpu_state.cc:268
void GPU_clip_distances(int distances_enabled)
Definition gpu_state.cc:124
void GPU_fence_free(GPUFence *fence)
Definition gpu_state.cc:337
void GPU_polygon_smooth(bool enable)
Definition gpu_state.cc:83
void GPU_shadow_offset(bool enable)
Definition gpu_state.cc:119
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
Definition btDbvt.cpp:52
CCL_NAMESPACE_BEGIN ccl_device float invert(const float color, const float factor)
Definition invert.h:11
ccl_device_inline float2 mask(const MaskType mask, const float2 a)
static int blend(const Tex *tex, const float texvec[3], TexResult *texres)