EEVEE-Next: Reduce image bindings.
This change combines the diffuse/specular light passes into a single texture array, freeing up an image binding for cryptomatte. When diffuse/specular light pass and/or requested a texture array will be allocated. Only when specular light is requested 2 images will always be allocated. This increases the memory overhead when viewing the specular light renderpass in the viewport. For final rendering it is a common scenario that none or both are requested. Reviewed By: fclem Differential Revision: https://developer.blender.org/D15701
This commit is contained in:
@@ -389,9 +389,8 @@ void Film::sync()
|
|||||||
DRW_shgroup_uniform_texture_ref(grp, "combined_tx", &combined_final_tx_);
|
DRW_shgroup_uniform_texture_ref(grp, "combined_tx", &combined_final_tx_);
|
||||||
DRW_shgroup_uniform_texture_ref(grp, "normal_tx", &rbuffers.normal_tx);
|
DRW_shgroup_uniform_texture_ref(grp, "normal_tx", &rbuffers.normal_tx);
|
||||||
DRW_shgroup_uniform_texture_ref(grp, "vector_tx", &rbuffers.vector_tx);
|
DRW_shgroup_uniform_texture_ref(grp, "vector_tx", &rbuffers.vector_tx);
|
||||||
DRW_shgroup_uniform_texture_ref(grp, "diffuse_light_tx", &rbuffers.diffuse_light_tx);
|
DRW_shgroup_uniform_texture_ref(grp, "light_tx", &rbuffers.light_tx);
|
||||||
DRW_shgroup_uniform_texture_ref(grp, "diffuse_color_tx", &rbuffers.diffuse_color_tx);
|
DRW_shgroup_uniform_texture_ref(grp, "diffuse_color_tx", &rbuffers.diffuse_color_tx);
|
||||||
DRW_shgroup_uniform_texture_ref(grp, "specular_light_tx", &rbuffers.specular_light_tx);
|
|
||||||
DRW_shgroup_uniform_texture_ref(grp, "specular_color_tx", &rbuffers.specular_color_tx);
|
DRW_shgroup_uniform_texture_ref(grp, "specular_color_tx", &rbuffers.specular_color_tx);
|
||||||
DRW_shgroup_uniform_texture_ref(grp, "volume_light_tx", &rbuffers.volume_light_tx);
|
DRW_shgroup_uniform_texture_ref(grp, "volume_light_tx", &rbuffers.volume_light_tx);
|
||||||
DRW_shgroup_uniform_texture_ref(grp, "emission_tx", &rbuffers.emission_tx);
|
DRW_shgroup_uniform_texture_ref(grp, "emission_tx", &rbuffers.emission_tx);
|
||||||
|
|||||||
@@ -43,9 +43,8 @@ void WorldPipeline::sync(GPUMaterial *gpumat)
|
|||||||
DRW_shgroup_storage_block_ref(grp, "aov_buf", &inst_.film.aovs_info);
|
DRW_shgroup_storage_block_ref(grp, "aov_buf", &inst_.film.aovs_info);
|
||||||
/* RenderPasses. Cleared by background (even if bad practice). */
|
/* RenderPasses. Cleared by background (even if bad practice). */
|
||||||
DRW_shgroup_uniform_image_ref(grp, "rp_normal_img", &rbufs.normal_tx);
|
DRW_shgroup_uniform_image_ref(grp, "rp_normal_img", &rbufs.normal_tx);
|
||||||
DRW_shgroup_uniform_image_ref(grp, "rp_diffuse_light_img", &rbufs.diffuse_light_tx);
|
DRW_shgroup_uniform_image_ref(grp, "rp_light_img", &rbufs.light_tx);
|
||||||
DRW_shgroup_uniform_image_ref(grp, "rp_diffuse_color_img", &rbufs.diffuse_color_tx);
|
DRW_shgroup_uniform_image_ref(grp, "rp_diffuse_color_img", &rbufs.diffuse_color_tx);
|
||||||
DRW_shgroup_uniform_image_ref(grp, "rp_specular_light_img", &rbufs.specular_light_tx);
|
|
||||||
DRW_shgroup_uniform_image_ref(grp, "rp_specular_color_img", &rbufs.specular_color_tx);
|
DRW_shgroup_uniform_image_ref(grp, "rp_specular_color_img", &rbufs.specular_color_tx);
|
||||||
DRW_shgroup_uniform_image_ref(grp, "rp_emission_img", &rbufs.emission_tx);
|
DRW_shgroup_uniform_image_ref(grp, "rp_emission_img", &rbufs.emission_tx);
|
||||||
/* To allow opaque pass rendering over it. */
|
/* To allow opaque pass rendering over it. */
|
||||||
@@ -122,9 +121,8 @@ DRWShadingGroup *ForwardPipeline::material_opaque_add(::Material *blender_mat, G
|
|||||||
DRW_shgroup_storage_block_ref(grp, "aov_buf", &inst_.film.aovs_info);
|
DRW_shgroup_storage_block_ref(grp, "aov_buf", &inst_.film.aovs_info);
|
||||||
/* RenderPasses. */
|
/* RenderPasses. */
|
||||||
DRW_shgroup_uniform_image_ref(grp, "rp_normal_img", &rbufs.normal_tx);
|
DRW_shgroup_uniform_image_ref(grp, "rp_normal_img", &rbufs.normal_tx);
|
||||||
DRW_shgroup_uniform_image_ref(grp, "rp_diffuse_light_img", &rbufs.diffuse_light_tx);
|
DRW_shgroup_uniform_image_ref(grp, "rp_light_img", &rbufs.light_tx);
|
||||||
DRW_shgroup_uniform_image_ref(grp, "rp_diffuse_color_img", &rbufs.diffuse_color_tx);
|
DRW_shgroup_uniform_image_ref(grp, "rp_diffuse_color_img", &rbufs.diffuse_color_tx);
|
||||||
DRW_shgroup_uniform_image_ref(grp, "rp_specular_light_img", &rbufs.specular_light_tx);
|
|
||||||
DRW_shgroup_uniform_image_ref(grp, "rp_specular_color_img", &rbufs.specular_color_tx);
|
DRW_shgroup_uniform_image_ref(grp, "rp_specular_color_img", &rbufs.specular_color_tx);
|
||||||
DRW_shgroup_uniform_image_ref(grp, "rp_emission_img", &rbufs.emission_tx);
|
DRW_shgroup_uniform_image_ref(grp, "rp_emission_img", &rbufs.emission_tx);
|
||||||
|
|
||||||
@@ -206,9 +204,8 @@ DRWShadingGroup *ForwardPipeline::material_transparent_add(::Material *blender_m
|
|||||||
DRW_shgroup_storage_block_ref(grp, "aov_buf", &inst_.film.aovs_info);
|
DRW_shgroup_storage_block_ref(grp, "aov_buf", &inst_.film.aovs_info);
|
||||||
/* RenderPasses. */
|
/* RenderPasses. */
|
||||||
DRW_shgroup_uniform_image_ref(grp, "rp_normal_img", &rbufs.normal_tx);
|
DRW_shgroup_uniform_image_ref(grp, "rp_normal_img", &rbufs.normal_tx);
|
||||||
DRW_shgroup_uniform_image_ref(grp, "rp_diffuse_light_img", &rbufs.diffuse_light_tx);
|
DRW_shgroup_uniform_image_ref(grp, "rp_light_img", &rbufs.light_tx);
|
||||||
DRW_shgroup_uniform_image_ref(grp, "rp_diffuse_color_img", &rbufs.diffuse_color_tx);
|
DRW_shgroup_uniform_image_ref(grp, "rp_diffuse_color_img", &rbufs.diffuse_color_tx);
|
||||||
DRW_shgroup_uniform_image_ref(grp, "rp_specular_light_img", &rbufs.specular_light_tx);
|
|
||||||
DRW_shgroup_uniform_image_ref(grp, "rp_specular_color_img", &rbufs.specular_color_tx);
|
DRW_shgroup_uniform_image_ref(grp, "rp_specular_color_img", &rbufs.specular_color_tx);
|
||||||
DRW_shgroup_uniform_image_ref(grp, "rp_emission_img", &rbufs.emission_tx);
|
DRW_shgroup_uniform_image_ref(grp, "rp_emission_img", &rbufs.emission_tx);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,9 +26,11 @@ namespace blender::eevee {
|
|||||||
|
|
||||||
void RenderBuffers::acquire(int2 extent)
|
void RenderBuffers::acquire(int2 extent)
|
||||||
{
|
{
|
||||||
|
const eViewLayerEEVEEPassType enabled_passes = inst_.film.enabled_passes_get();
|
||||||
|
|
||||||
auto pass_extent = [&](eViewLayerEEVEEPassType pass_bit) -> int2 {
|
auto pass_extent = [&](eViewLayerEEVEEPassType pass_bit) -> int2 {
|
||||||
/* Use dummy texture for disabled passes. Allows correct bindings. */
|
/* Use dummy texture for disabled passes. Allows correct bindings. */
|
||||||
return (inst_.film.enabled_passes_get() & pass_bit) ? extent : int2(1);
|
return (enabled_passes & pass_bit) ? extent : int2(1);
|
||||||
};
|
};
|
||||||
|
|
||||||
eGPUTextureFormat color_format = GPU_RGBA16F;
|
eGPUTextureFormat color_format = GPU_RGBA16F;
|
||||||
@@ -38,17 +40,22 @@ void RenderBuffers::acquire(int2 extent)
|
|||||||
depth_tx.acquire(extent, GPU_DEPTH24_STENCIL8);
|
depth_tx.acquire(extent, GPU_DEPTH24_STENCIL8);
|
||||||
combined_tx.acquire(extent, color_format);
|
combined_tx.acquire(extent, color_format);
|
||||||
|
|
||||||
bool do_vector_render_pass = (inst_.film.enabled_passes_get() & EEVEE_RENDER_PASS_VECTOR) ||
|
bool do_vector_render_pass = (enabled_passes & EEVEE_RENDER_PASS_VECTOR) ||
|
||||||
(inst_.motion_blur.postfx_enabled() && !inst_.is_viewport());
|
(inst_.motion_blur.postfx_enabled() && !inst_.is_viewport());
|
||||||
|
uint32_t max_light_color_layer = max_ii(enabled_passes & EEVEE_RENDER_PASS_DIFFUSE_LIGHT ?
|
||||||
|
RENDER_PASS_LAYER_DIFFUSE_LIGHT :
|
||||||
|
-1,
|
||||||
|
enabled_passes & EEVEE_RENDER_PASS_SPECULAR_LIGHT ?
|
||||||
|
RENDER_PASS_LAYER_SPECULAR_LIGHT :
|
||||||
|
-1) +
|
||||||
|
1;
|
||||||
/* Only RG16F when only doing only reprojection or motion blur. */
|
/* Only RG16F when only doing only reprojection or motion blur. */
|
||||||
eGPUTextureFormat vector_format = do_vector_render_pass ? GPU_RGBA16F : GPU_RG16F;
|
eGPUTextureFormat vector_format = do_vector_render_pass ? GPU_RGBA16F : GPU_RG16F;
|
||||||
/* TODO(fclem): Make vector pass allocation optional if no TAA or motion blur is needed. */
|
/* TODO(fclem): Make vector pass allocation optional if no TAA or motion blur is needed. */
|
||||||
vector_tx.acquire(extent, vector_format);
|
vector_tx.acquire(extent, vector_format);
|
||||||
|
|
||||||
normal_tx.acquire(pass_extent(EEVEE_RENDER_PASS_NORMAL), color_format);
|
normal_tx.acquire(pass_extent(EEVEE_RENDER_PASS_NORMAL), color_format);
|
||||||
diffuse_light_tx.acquire(pass_extent(EEVEE_RENDER_PASS_DIFFUSE_LIGHT), color_format);
|
|
||||||
diffuse_color_tx.acquire(pass_extent(EEVEE_RENDER_PASS_DIFFUSE_COLOR), color_format);
|
diffuse_color_tx.acquire(pass_extent(EEVEE_RENDER_PASS_DIFFUSE_COLOR), color_format);
|
||||||
specular_light_tx.acquire(pass_extent(EEVEE_RENDER_PASS_SPECULAR_LIGHT), color_format);
|
|
||||||
specular_color_tx.acquire(pass_extent(EEVEE_RENDER_PASS_SPECULAR_COLOR), color_format);
|
specular_color_tx.acquire(pass_extent(EEVEE_RENDER_PASS_SPECULAR_COLOR), color_format);
|
||||||
volume_light_tx.acquire(pass_extent(EEVEE_RENDER_PASS_VOLUME_LIGHT), color_format);
|
volume_light_tx.acquire(pass_extent(EEVEE_RENDER_PASS_VOLUME_LIGHT), color_format);
|
||||||
emission_tx.acquire(pass_extent(EEVEE_RENDER_PASS_EMIT), color_format);
|
emission_tx.acquire(pass_extent(EEVEE_RENDER_PASS_EMIT), color_format);
|
||||||
@@ -56,6 +63,10 @@ void RenderBuffers::acquire(int2 extent)
|
|||||||
shadow_tx.acquire(pass_extent(EEVEE_RENDER_PASS_SHADOW), float_format);
|
shadow_tx.acquire(pass_extent(EEVEE_RENDER_PASS_SHADOW), float_format);
|
||||||
ambient_occlusion_tx.acquire(pass_extent(EEVEE_RENDER_PASS_AO), float_format);
|
ambient_occlusion_tx.acquire(pass_extent(EEVEE_RENDER_PASS_AO), float_format);
|
||||||
|
|
||||||
|
light_tx.ensure_2d_array(color_format,
|
||||||
|
max_light_color_layer > 0 ? extent : int2(1),
|
||||||
|
max_ii(1, max_light_color_layer));
|
||||||
|
|
||||||
const AOVsInfoData &aovs = inst_.film.aovs_info;
|
const AOVsInfoData &aovs = inst_.film.aovs_info;
|
||||||
aov_color_tx.ensure_2d_array(
|
aov_color_tx.ensure_2d_array(
|
||||||
color_format, (aovs.color_len > 0) ? extent : int2(1), max_ii(1, aovs.color_len));
|
color_format, (aovs.color_len > 0) ? extent : int2(1), max_ii(1, aovs.color_len));
|
||||||
@@ -70,9 +81,7 @@ void RenderBuffers::release()
|
|||||||
|
|
||||||
normal_tx.release();
|
normal_tx.release();
|
||||||
vector_tx.release();
|
vector_tx.release();
|
||||||
diffuse_light_tx.release();
|
|
||||||
diffuse_color_tx.release();
|
diffuse_color_tx.release();
|
||||||
specular_light_tx.release();
|
|
||||||
specular_color_tx.release();
|
specular_color_tx.release();
|
||||||
volume_light_tx.release();
|
volume_light_tx.release();
|
||||||
emission_tx.release();
|
emission_tx.release();
|
||||||
|
|||||||
@@ -28,9 +28,7 @@ class RenderBuffers {
|
|||||||
// TextureFromPool mist_tx; /* Derived from depth_tx during accumulation. */
|
// TextureFromPool mist_tx; /* Derived from depth_tx during accumulation. */
|
||||||
TextureFromPool normal_tx;
|
TextureFromPool normal_tx;
|
||||||
TextureFromPool vector_tx;
|
TextureFromPool vector_tx;
|
||||||
TextureFromPool diffuse_light_tx;
|
|
||||||
TextureFromPool diffuse_color_tx;
|
TextureFromPool diffuse_color_tx;
|
||||||
TextureFromPool specular_light_tx;
|
|
||||||
TextureFromPool specular_color_tx;
|
TextureFromPool specular_color_tx;
|
||||||
TextureFromPool volume_light_tx;
|
TextureFromPool volume_light_tx;
|
||||||
TextureFromPool emission_tx;
|
TextureFromPool emission_tx;
|
||||||
@@ -39,6 +37,7 @@ class RenderBuffers {
|
|||||||
TextureFromPool ambient_occlusion_tx;
|
TextureFromPool ambient_occlusion_tx;
|
||||||
// TextureFromPool cryptomatte_tx; /* TODO */
|
// TextureFromPool cryptomatte_tx; /* TODO */
|
||||||
/* TODO(fclem): Use texture from pool once they support texture array. */
|
/* TODO(fclem): Use texture from pool once they support texture array. */
|
||||||
|
Texture light_tx;
|
||||||
Texture aov_color_tx;
|
Texture aov_color_tx;
|
||||||
Texture aov_value_tx;
|
Texture aov_value_tx;
|
||||||
|
|
||||||
|
|||||||
@@ -291,6 +291,17 @@ static inline float film_filter_weight(float filter_radius, float sample_distanc
|
|||||||
|
|
||||||
/** \} */
|
/** \} */
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------- */
|
||||||
|
/** \name Render passes
|
||||||
|
* \{ */
|
||||||
|
|
||||||
|
enum eRenderPassLayerIndex : uint32_t {
|
||||||
|
RENDER_PASS_LAYER_DIFFUSE_LIGHT = 0u,
|
||||||
|
RENDER_PASS_LAYER_SPECULAR_LIGHT = 1u,
|
||||||
|
};
|
||||||
|
|
||||||
|
/** \} */
|
||||||
|
|
||||||
/* -------------------------------------------------------------------- */
|
/* -------------------------------------------------------------------- */
|
||||||
/** \name Arbitrary Output Variables
|
/** \name Arbitrary Output Variables
|
||||||
* \{ */
|
* \{ */
|
||||||
|
|||||||
@@ -105,12 +105,18 @@ void film_sample_accum(FilmSample samp, int pass_id, sampler2D tex, inout float
|
|||||||
accum += texelFetch(tex, samp.texel, 0).x * samp.weight;
|
accum += texelFetch(tex, samp.texel, 0).x * samp.weight;
|
||||||
}
|
}
|
||||||
|
|
||||||
void film_sample_accum(FilmSample samp, int pass_id, sampler2DArray tex, inout vec4 accum)
|
void film_sample_accum(
|
||||||
|
FilmSample samp, int pass_id, uint layer, sampler2DArray tex, inout vec4 accum)
|
||||||
{
|
{
|
||||||
if (pass_id == -1) {
|
if (pass_id == -1) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
accum += texelFetch(tex, ivec3(samp.texel, pass_id), 0) * samp.weight;
|
accum += texelFetch(tex, ivec3(samp.texel, layer), 0) * samp.weight;
|
||||||
|
}
|
||||||
|
|
||||||
|
void film_sample_accum(FilmSample samp, int pass_id, sampler2DArray tex, inout vec4 accum)
|
||||||
|
{
|
||||||
|
film_sample_accum(samp, pass_id, pass_id, tex, accum);
|
||||||
}
|
}
|
||||||
|
|
||||||
void film_sample_accum(FilmSample samp, int pass_id, sampler2DArray tex, inout float accum)
|
void film_sample_accum(FilmSample samp, int pass_id, sampler2DArray tex, inout float accum)
|
||||||
@@ -632,8 +638,16 @@ void film_process_data(ivec2 texel_film, out vec4 out_color, out float out_depth
|
|||||||
|
|
||||||
for (int i = 0; i < film_buf.samples_len; i++) {
|
for (int i = 0; i < film_buf.samples_len; i++) {
|
||||||
FilmSample src = film_sample_get(i, texel_film);
|
FilmSample src = film_sample_get(i, texel_film);
|
||||||
film_sample_accum(src, film_buf.diffuse_light_id, diffuse_light_tx, diffuse_light_accum);
|
film_sample_accum(src,
|
||||||
film_sample_accum(src, film_buf.specular_light_id, specular_light_tx, specular_light_accum);
|
film_buf.diffuse_light_id,
|
||||||
|
RENDER_PASS_LAYER_DIFFUSE_LIGHT,
|
||||||
|
light_tx,
|
||||||
|
diffuse_light_accum);
|
||||||
|
film_sample_accum(src,
|
||||||
|
film_buf.specular_light_id,
|
||||||
|
RENDER_PASS_LAYER_SPECULAR_LIGHT,
|
||||||
|
light_tx,
|
||||||
|
specular_light_accum);
|
||||||
film_sample_accum(src, film_buf.volume_light_id, volume_light_tx, volume_light_accum);
|
film_sample_accum(src, film_buf.volume_light_id, volume_light_tx, volume_light_accum);
|
||||||
film_sample_accum(src, film_buf.emission_id, emission_tx, emission_accum);
|
film_sample_accum(src, film_buf.emission_id, emission_tx, emission_accum);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -99,9 +99,11 @@ void main()
|
|||||||
|
|
||||||
ivec2 out_texel = ivec2(gl_FragCoord.xy);
|
ivec2 out_texel = ivec2(gl_FragCoord.xy);
|
||||||
imageStore(rp_normal_img, out_texel, vec4(out_normal, 1.0));
|
imageStore(rp_normal_img, out_texel, vec4(out_normal, 1.0));
|
||||||
imageStore(rp_diffuse_light_img, out_texel, vec4(diffuse_light, 1.0));
|
imageStore(
|
||||||
|
rp_light_img, ivec3(out_texel, RENDER_PASS_LAYER_DIFFUSE_LIGHT), vec4(diffuse_light, 1.0));
|
||||||
|
imageStore(
|
||||||
|
rp_light_img, ivec3(out_texel, RENDER_PASS_LAYER_SPECULAR_LIGHT), vec4(specular_light, 1.0));
|
||||||
imageStore(rp_diffuse_color_img, out_texel, vec4(g_diffuse_data.color, 1.0));
|
imageStore(rp_diffuse_color_img, out_texel, vec4(g_diffuse_data.color, 1.0));
|
||||||
imageStore(rp_specular_light_img, out_texel, vec4(specular_light, 1.0));
|
|
||||||
imageStore(rp_specular_color_img, out_texel, vec4(specular_color, 1.0));
|
imageStore(rp_specular_color_img, out_texel, vec4(specular_color, 1.0));
|
||||||
imageStore(rp_emission_img, out_texel, vec4(g_emission, 1.0));
|
imageStore(rp_emission_img, out_texel, vec4(g_emission, 1.0));
|
||||||
|
|
||||||
|
|||||||
@@ -26,9 +26,11 @@ void main()
|
|||||||
|
|
||||||
ivec2 out_texel = ivec2(gl_FragCoord.xy);
|
ivec2 out_texel = ivec2(gl_FragCoord.xy);
|
||||||
imageStore(rp_normal_img, out_texel, vec4(0.0, 0.0, 0.0, 1.0));
|
imageStore(rp_normal_img, out_texel, vec4(0.0, 0.0, 0.0, 1.0));
|
||||||
imageStore(rp_diffuse_light_img, out_texel, vec4(0.0, 0.0, 0.0, 1.0));
|
imageStore(
|
||||||
|
rp_light_img, ivec3(out_texel, RENDER_PASS_LAYER_DIFFUSE_LIGHT), vec4(0.0, 0.0, 0.0, 1.0));
|
||||||
|
imageStore(
|
||||||
|
rp_light_img, ivec3(out_texel, RENDER_PASS_LAYER_SPECULAR_LIGHT), vec4(0.0, 0.0, 0.0, 1.0));
|
||||||
imageStore(rp_diffuse_color_img, out_texel, vec4(0.0, 0.0, 0.0, 1.0));
|
imageStore(rp_diffuse_color_img, out_texel, vec4(0.0, 0.0, 0.0, 1.0));
|
||||||
imageStore(rp_specular_light_img, out_texel, vec4(0.0, 0.0, 0.0, 1.0));
|
|
||||||
imageStore(rp_specular_color_img, out_texel, vec4(0.0, 0.0, 0.0, 1.0));
|
imageStore(rp_specular_color_img, out_texel, vec4(0.0, 0.0, 0.0, 1.0));
|
||||||
imageStore(rp_emission_img, out_texel, vec4(0.0, 0.0, 0.0, 1.0));
|
imageStore(rp_emission_img, out_texel, vec4(0.0, 0.0, 0.0, 1.0));
|
||||||
|
|
||||||
|
|||||||
@@ -9,19 +9,18 @@ GPU_SHADER_CREATE_INFO(eevee_film)
|
|||||||
.sampler(1, ImageType::FLOAT_2D, "combined_tx")
|
.sampler(1, ImageType::FLOAT_2D, "combined_tx")
|
||||||
.sampler(2, ImageType::FLOAT_2D, "normal_tx")
|
.sampler(2, ImageType::FLOAT_2D, "normal_tx")
|
||||||
.sampler(3, ImageType::FLOAT_2D, "vector_tx")
|
.sampler(3, ImageType::FLOAT_2D, "vector_tx")
|
||||||
.sampler(4, ImageType::FLOAT_2D, "diffuse_light_tx")
|
.sampler(4, ImageType::FLOAT_2D_ARRAY, "light_tx")
|
||||||
.sampler(5, ImageType::FLOAT_2D, "diffuse_color_tx")
|
.sampler(5, ImageType::FLOAT_2D, "diffuse_color_tx")
|
||||||
.sampler(6, ImageType::FLOAT_2D, "specular_light_tx")
|
.sampler(6, ImageType::FLOAT_2D, "specular_color_tx")
|
||||||
.sampler(7, ImageType::FLOAT_2D, "specular_color_tx")
|
.sampler(7, ImageType::FLOAT_2D, "volume_light_tx")
|
||||||
.sampler(8, ImageType::FLOAT_2D, "volume_light_tx")
|
.sampler(8, ImageType::FLOAT_2D, "emission_tx")
|
||||||
.sampler(9, ImageType::FLOAT_2D, "emission_tx")
|
.sampler(9, ImageType::FLOAT_2D, "environment_tx")
|
||||||
.sampler(10, ImageType::FLOAT_2D, "environment_tx")
|
.sampler(10, ImageType::FLOAT_2D, "shadow_tx")
|
||||||
.sampler(11, ImageType::FLOAT_2D, "shadow_tx")
|
.sampler(11, ImageType::FLOAT_2D, "ambient_occlusion_tx")
|
||||||
.sampler(12, ImageType::FLOAT_2D, "ambient_occlusion_tx")
|
.sampler(12, ImageType::FLOAT_2D_ARRAY, "aov_color_tx")
|
||||||
.sampler(13, ImageType::FLOAT_2D_ARRAY, "aov_color_tx")
|
.sampler(13, ImageType::FLOAT_2D_ARRAY, "aov_value_tx")
|
||||||
.sampler(14, ImageType::FLOAT_2D_ARRAY, "aov_value_tx")
|
|
||||||
/* Color History for TAA needs to be sampler to leverage bilinear sampling. */
|
/* Color History for TAA needs to be sampler to leverage bilinear sampling. */
|
||||||
.sampler(15, ImageType::FLOAT_2D, "in_combined_tx")
|
.sampler(14, ImageType::FLOAT_2D, "in_combined_tx")
|
||||||
// .sampler(15, ImageType::FLOAT_2D, "cryptomatte_tx") /* TODO */
|
// .sampler(15, ImageType::FLOAT_2D, "cryptomatte_tx") /* TODO */
|
||||||
.image(0, GPU_R32F, Qualifier::READ, ImageType::FLOAT_2D_ARRAY, "in_weight_img")
|
.image(0, GPU_R32F, Qualifier::READ, ImageType::FLOAT_2D_ARRAY, "in_weight_img")
|
||||||
.image(1, GPU_R32F, Qualifier::WRITE, ImageType::FLOAT_2D_ARRAY, "out_weight_img")
|
.image(1, GPU_R32F, Qualifier::WRITE, ImageType::FLOAT_2D_ARRAY, "out_weight_img")
|
||||||
|
|||||||
@@ -78,8 +78,8 @@ GPU_SHADER_INTERFACE_INFO(eevee_surf_iface, "interp")
|
|||||||
|
|
||||||
GPU_SHADER_CREATE_INFO(eevee_aov_out)
|
GPU_SHADER_CREATE_INFO(eevee_aov_out)
|
||||||
.define("MAT_AOV_SUPPORT")
|
.define("MAT_AOV_SUPPORT")
|
||||||
.image_array_out(6, Qualifier::WRITE, GPU_RGBA16F, "aov_color_img")
|
.image_array_out(5, Qualifier::WRITE, GPU_RGBA16F, "aov_color_img")
|
||||||
.image_array_out(7, Qualifier::WRITE, GPU_R16F, "aov_value_img")
|
.image_array_out(6, Qualifier::WRITE, GPU_R16F, "aov_value_img")
|
||||||
.storage_buf(7, Qualifier::READ, "AOVsInfoData", "aov_buf");
|
.storage_buf(7, Qualifier::READ, "AOVsInfoData", "aov_buf");
|
||||||
|
|
||||||
GPU_SHADER_CREATE_INFO(eevee_surf_deferred)
|
GPU_SHADER_CREATE_INFO(eevee_surf_deferred)
|
||||||
@@ -113,11 +113,10 @@ GPU_SHADER_CREATE_INFO(eevee_surf_forward)
|
|||||||
.fragment_out(0, Type::VEC4, "out_transmittance", DualBlend::SRC_1)
|
.fragment_out(0, Type::VEC4, "out_transmittance", DualBlend::SRC_1)
|
||||||
.fragment_source("eevee_surf_forward_frag.glsl")
|
.fragment_source("eevee_surf_forward_frag.glsl")
|
||||||
.image_out(0, Qualifier::READ_WRITE, GPU_RGBA16F, "rp_normal_img")
|
.image_out(0, Qualifier::READ_WRITE, GPU_RGBA16F, "rp_normal_img")
|
||||||
.image_out(1, Qualifier::READ_WRITE, GPU_RGBA16F, "rp_diffuse_light_img")
|
.image_array_out(1, Qualifier::READ_WRITE, GPU_RGBA16F, "rp_light_img")
|
||||||
.image_out(2, Qualifier::READ_WRITE, GPU_RGBA16F, "rp_diffuse_color_img")
|
.image_out(2, Qualifier::READ_WRITE, GPU_RGBA16F, "rp_diffuse_color_img")
|
||||||
.image_out(3, Qualifier::READ_WRITE, GPU_RGBA16F, "rp_specular_light_img")
|
.image_out(3, Qualifier::READ_WRITE, GPU_RGBA16F, "rp_specular_color_img")
|
||||||
.image_out(4, Qualifier::READ_WRITE, GPU_RGBA16F, "rp_specular_color_img")
|
.image_out(4, Qualifier::READ_WRITE, GPU_RGBA16F, "rp_emission_img")
|
||||||
.image_out(5, Qualifier::READ_WRITE, GPU_RGBA16F, "rp_emission_img")
|
|
||||||
.additional_info("eevee_aov_out",
|
.additional_info("eevee_aov_out",
|
||||||
"eevee_light_data",
|
"eevee_light_data",
|
||||||
"eevee_utility_texture",
|
"eevee_utility_texture",
|
||||||
@@ -138,11 +137,10 @@ GPU_SHADER_CREATE_INFO(eevee_surf_depth)
|
|||||||
GPU_SHADER_CREATE_INFO(eevee_surf_world)
|
GPU_SHADER_CREATE_INFO(eevee_surf_world)
|
||||||
.vertex_out(eevee_surf_iface)
|
.vertex_out(eevee_surf_iface)
|
||||||
.image_out(0, Qualifier::READ_WRITE, GPU_RGBA16F, "rp_normal_img")
|
.image_out(0, Qualifier::READ_WRITE, GPU_RGBA16F, "rp_normal_img")
|
||||||
.image_out(1, Qualifier::READ_WRITE, GPU_RGBA16F, "rp_diffuse_light_img")
|
.image_array_out(1, Qualifier::READ_WRITE, GPU_RGBA16F, "rp_light_img")
|
||||||
.image_out(2, Qualifier::READ_WRITE, GPU_RGBA16F, "rp_diffuse_color_img")
|
.image_out(2, Qualifier::READ_WRITE, GPU_RGBA16F, "rp_diffuse_color_img")
|
||||||
.image_out(3, Qualifier::READ_WRITE, GPU_RGBA16F, "rp_specular_light_img")
|
.image_out(3, Qualifier::READ_WRITE, GPU_RGBA16F, "rp_specular_color_img")
|
||||||
.image_out(4, Qualifier::READ_WRITE, GPU_RGBA16F, "rp_specular_color_img")
|
.image_out(4, Qualifier::READ_WRITE, GPU_RGBA16F, "rp_emission_img")
|
||||||
.image_out(5, Qualifier::READ_WRITE, GPU_RGBA16F, "rp_emission_img")
|
|
||||||
.push_constant(Type::FLOAT, "world_opacity_fade")
|
.push_constant(Type::FLOAT, "world_opacity_fade")
|
||||||
.fragment_out(0, Type::VEC4, "out_background")
|
.fragment_out(0, Type::VEC4, "out_background")
|
||||||
.fragment_source("eevee_surf_world_frag.glsl")
|
.fragment_source("eevee_surf_world_frag.glsl")
|
||||||
|
|||||||
Reference in New Issue
Block a user