27 const auto& ti = params.output_cube->info;
28 uint8_t max_mips = ti.numMips;
34 auto output_cube = params.output_cube;
36 if(!params.apply_prefilter)
38 output_cube = params.output_cube_prefiltered;
42 for(uint8_t face = 0; face < 6; ++face)
44 auto src = params.input_faces[face]->native_handle();
45 for(uint8_t mip = 0; mip < max_mips; ++mip)
47 uint16_t dim = ti.width >> mip;
48 bgfx::blit(pass.
id, output_cube->native_handle(), mip, 0, 0, face, src, mip, 0, 0, 0, dim, dim, 1);
52 if(!params.apply_prefilter)
62 const auto& input_cube = params.output_cube;
63 const auto& output_cube = params.output_cube_prefiltered;
64 uint16_t cube_size = ti.width;
67 for(uint8_t mip = 0; mip < max_mips; ++mip)
72 uint16_t dim = cube_size >> mip;
84 gfx::set_image(1, output_cube->native_handle(), mip, bgfx::Access::Write);
87 float data[4] = {float(mip), 0.0f, float(cube_size), float(max_mips)};
92 uint32_t num_groups_x = (dim + 7) / 8;
93 uint32_t num_groups_y = (dim + 7) / 8;
94 uint32_t num_groups_z = 1;
97 bgfx::dispatch(pass.
id, cs_.program->native_handle(), num_groups_x, num_groups_y, num_groups_z);
112 return params.output_cube_prefiltered;