31 const auto& ti = params.output_cube->info;
32 uint8_t max_mips = ti.numMips;
38 auto output_cube = params.output_cube;
40 if(!params.apply_prefilter)
42 output_cube = params.output_cube_prefiltered;
45 for(uint8_t face = 0; face < 6; ++face)
47 auto src = params.input_faces[face]->native_handle();
48 for(uint8_t mip = 0; mip < max_mips; ++mip)
50 uint16_t dim = ti.width >> mip;
51 bgfx::blit(pass.
id, output_cube->native_handle(), mip, 0, 0, face, src, mip, 0, 0, 0, dim, dim, 1);
55 if(!params.apply_prefilter)
57 return params.output_cube;
65 const auto& input_cube = params.output_cube;
66 const auto& output_cube = params.output_cube_prefiltered;
67 uint16_t cube_size = ti.width;
70 for(uint8_t mip = 0; mip < max_mips; ++mip)
74 uint16_t dim = cube_size >> mip;
85 gfx::set_image(1, output_cube->native_handle(), mip, bgfx::Access::Write);
88 float data[4] = {float(mip), 0.0f, float(cube_size), float(max_mips)};
93 uint32_t num_groups_x = (dim + 7) / 8;
94 uint32_t num_groups_y = (dim + 7) / 8;
95 uint32_t num_groups_z = 1;
98 bgfx::dispatch(pass.
id, cs_.program->native_handle(), num_groups_x, num_groups_y, num_groups_z);
112 return params.output_cube_prefiltered;