Blender V4.3
eevee_precompute.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
11#include "eevee_precompute.hh"
12
13namespace blender::eevee {
14
16{
17 table_extent_ = table_extent;
18
20 Texture table_tx = {"Precompute"};
21 table_tx.ensure_3d(GPU_RGBA32F, table_extent, usage);
22
23 GPUShader *shader = GPU_shader_create_from_info_name("eevee_lut");
24
25 PassSimple lut_ps = {"Precompute"};
26 lut_ps.shader_set(shader);
27 lut_ps.push_constant("table_type", int(type));
28 lut_ps.push_constant("table_extent", table_extent);
29 lut_ps.bind_image("table_img", table_tx);
30 lut_ps.dispatch(math::divide_ceil(table_extent, int3(int2(LUT_WORKGROUP_SIZE), 1)));
32
33 manager.submit(lut_ps);
34
35 raw_data_ = table_tx.read<float4>(GPU_DATA_FLOAT);
36
37 GPU_shader_free(shader);
38}
39
41{
42 MEM_SAFE_FREE(raw_data_);
43}
44
45} // namespace blender::eevee
GPUShader * GPU_shader_create_from_info_name(const char *info_name)
void GPU_shader_free(GPUShader *shader)
@ GPU_BARRIER_TEXTURE_UPDATE
Definition GPU_state.hh:39
@ GPU_DATA_FLOAT
eGPUTextureUsage
@ GPU_TEXTURE_USAGE_SHADER_WRITE
@ GPU_TEXTURE_USAGE_HOST_READ
#define MEM_SAFE_FREE(v)
struct GPUShader GPUShader
void submit(PassSimple &pass, View &view)
T * read(eGPUDataFormat format, int miplvl=0)
bool ensure_3d(eGPUTextureFormat format, int3 extent, eGPUTextureUsage usage=GPU_TEXTURE_USAGE_GENERAL, const float *data=nullptr, int mip_len=1)
void bind_image(const char *name, GPUTexture *image)
void dispatch(int group_len)
Definition draw_pass.hh:874
void barrier(eGPUBarrier type)
Definition draw_pass.hh:943
void push_constant(const char *name, const float &data)
void shader_set(GPUShader *shader)
Definition draw_pass.hh:971
Precompute(draw::Manager &manager, PrecomputeType type, int3 table_extent)
additional_info("compositor_sum_float_shared") .push_constant(Type additional_info("compositor_sum_float_shared") .push_constant(Type GPU_RGBA32F
#define LUT_WORKGROUP_SIZE
VecBase< T, Size > divide_ceil(const VecBase< T, Size > &a, const VecBase< T, Size > &b)
VecBase< int32_t, 2 > int2
VecBase< int32_t, 3 > int3