Blender V5.0
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
10
11#include "GPU_state.hh"
12
13#include "draw_pass.hh"
14
15#include "eevee_defines.hh"
16#include "eevee_precompute.hh"
17
18namespace blender::eevee {
19
21{
22 table_extent_ = table_extent;
23
25 Texture table_tx = {"Precompute"};
26 table_tx.ensure_3d(gpu::TextureFormat::SFLOAT_32_32_32_32, table_extent, usage);
27
28 gpu::Shader *shader = GPU_shader_create_from_info_name("eevee_lut");
29
30 PassSimple lut_ps = {"Precompute"};
31 lut_ps.shader_set(shader);
32 lut_ps.push_constant("table_type", int(type));
33 lut_ps.push_constant("table_extent", table_extent);
34 lut_ps.bind_image("table_img", table_tx);
35 lut_ps.dispatch(math::divide_ceil(table_extent, int3(int2(LUT_WORKGROUP_SIZE), 1)));
37
38 manager.submit(lut_ps);
39
40 raw_data_ = table_tx.read<float4>(GPU_DATA_FLOAT);
41
43
44 GPU_shader_free(shader);
45}
46
48{
49 MEM_SAFE_FREE(raw_data_);
50}
51
52} // namespace blender::eevee
void GPU_shader_free(blender::gpu::Shader *shader)
blender::gpu::Shader * GPU_shader_create_from_info_name(const char *info_name)
void GPU_shader_unbind()
@ 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)
void submit(PassSimple &pass, View &view)
T * read(eGPUDataFormat format, int miplvl=0)
bool ensure_3d(blender::gpu::TextureFormat format, int3 extent, eGPUTextureUsage usage=GPU_TEXTURE_USAGE_GENERAL, const float *data=nullptr, int mip_len=1)
void shader_set(gpu::Shader *shader)
void bind_image(const char *name, gpu::Texture *image)
void dispatch(int group_len)
void barrier(GPUBarrier type)
void push_constant(const char *name, const float &data)
Precompute(draw::Manager &manager, PrecomputeType type, int3 table_extent)
#define LUT_WORKGROUP_SIZE
detail::Pass< command::DrawCommandBuf > PassSimple
VecBase< T, Size > divide_ceil(const VecBase< T, Size > &a, const VecBase< T, Size > &b)
VecBase< float, 4 > float4
VecBase< int32_t, 2 > int2
VecBase< int32_t, 3 > int3