[Bf-blender-cvs] [99e5f4000c5] tmp-workbench-rewrite2: Add texture usage flags

Miguel Pozo noreply at git.blender.org
Fri Jan 20 15:20:16 CET 2023


Commit: 99e5f4000c5d6dcca44fe4018c87d37f1a833ea3
Author: Miguel Pozo
Date:   Thu Jan 19 16:58:51 2023 +0100
Branches: tmp-workbench-rewrite2
https://developer.blender.org/rB99e5f4000c5d6dcca44fe4018c87d37f1a833ea3

Add texture usage flags

===================================================================

M	source/blender/draw/engines/workbench/workbench_effect_antialiasing.cc
M	source/blender/draw/engines/workbench/workbench_effect_dof.cc
M	source/blender/draw/engines/workbench/workbench_engine.cc
M	source/blender/draw/engines/workbench/workbench_mesh_passes.cc
M	source/blender/draw/engines/workbench/workbench_resources.cc

===================================================================

diff --git a/source/blender/draw/engines/workbench/workbench_effect_antialiasing.cc b/source/blender/draw/engines/workbench/workbench_effect_antialiasing.cc
index 39b46c7ac1e..6b0b2e75c27 100644
--- a/source/blender/draw/engines/workbench/workbench_effect_antialiasing.cc
+++ b/source/blender/draw/engines/workbench/workbench_effect_antialiasing.cc
@@ -112,11 +112,12 @@ AntiAliasingPass::AntiAliasingPass()
   smaa_aa_weight_sh_ = GPU_shader_create_from_info_name("workbench_smaa_stage_1");
   smaa_resolve_sh_ = GPU_shader_create_from_info_name("workbench_smaa_stage_2");
 
-  smaa_search_tx_.ensure_2d(GPU_R8, {SEARCHTEX_WIDTH, SEARCHTEX_HEIGHT});
+  smaa_search_tx_.ensure_2d(
+      GPU_R8, {SEARCHTEX_WIDTH, SEARCHTEX_HEIGHT}, GPU_TEXTURE_USAGE_SHADER_READ);
   GPU_texture_update(smaa_search_tx_, GPU_DATA_UBYTE, searchTexBytes);
   GPU_texture_filter_mode(smaa_search_tx_, true);
 
-  smaa_area_tx_.ensure_2d(GPU_RG8, {AREATEX_WIDTH, AREATEX_HEIGHT});
+  smaa_area_tx_.ensure_2d(GPU_RG8, {AREATEX_WIDTH, AREATEX_HEIGHT}, GPU_TEXTURE_USAGE_SHADER_READ);
   GPU_texture_update(smaa_area_tx_, GPU_DATA_UBYTE, areaTexBytes);
   GPU_texture_filter_mode(smaa_area_tx_, true);
 }
@@ -144,8 +145,11 @@ void AntiAliasingPass::sync(SceneResources &resources, int2 resolution)
     return;
   }
 
-  taa_accumulation_tx_.ensure_2d(GPU_RGBA16F, resolution);
-  sample0_depth_tx_.ensure_2d(GPU_DEPTH24_STENCIL8, resolution);
+  taa_accumulation_tx_.ensure_2d(
+      GPU_RGBA16F, resolution, GPU_TEXTURE_USAGE_SHADER_READ | GPU_TEXTURE_USAGE_ATTACHMENT);
+  sample0_depth_tx_.ensure_2d(GPU_DEPTH24_STENCIL8,
+                              resolution,
+                              GPU_TEXTURE_USAGE_SHADER_READ | GPU_TEXTURE_USAGE_ATTACHMENT);
 
   taa_accumulation_ps_.init();
   taa_accumulation_ps_.state_set(sample_ == 0 ? DRW_STATE_WRITE_COLOR :
@@ -279,13 +283,15 @@ void AntiAliasingPass::draw(Manager &manager,
   }
 
   if (!DRW_state_is_image_render() || last_sample) {
-    smaa_weight_tx_.acquire(resolution, GPU_RGBA8);
+    smaa_weight_tx_.acquire(
+        resolution, GPU_RGBA8, GPU_TEXTURE_USAGE_SHADER_READ | GPU_TEXTURE_USAGE_ATTACHMENT);
     smaa_mix_factor_ = 1.0f - clamp_f(sample_ / 4.0f, 0.0f, 1.0f);
     smaa_viewport_metrics_ = float4(float2(1.0f / float2(resolution)), resolution);
 
     /* After a certain point SMAA is no longer necessary. */
     if (smaa_mix_factor_ > 0.0f) {
-      smaa_edge_tx_.acquire(resolution, GPU_RG8);
+      smaa_edge_tx_.acquire(
+          resolution, GPU_RG8, GPU_TEXTURE_USAGE_SHADER_READ | GPU_TEXTURE_USAGE_ATTACHMENT);
       smaa_edge_fb_.ensure(GPU_ATTACHMENT_NONE, GPU_ATTACHMENT_TEXTURE(smaa_edge_tx_));
       smaa_edge_fb_.bind();
       manager.submit(smaa_edge_detect_ps_, view);
diff --git a/source/blender/draw/engines/workbench/workbench_effect_dof.cc b/source/blender/draw/engines/workbench/workbench_effect_dof.cc
index 582adeb4ed9..7d46703ad35 100644
--- a/source/blender/draw/engines/workbench/workbench_effect_dof.cc
+++ b/source/blender/draw/engines/workbench/workbench_effect_dof.cc
@@ -222,7 +222,8 @@ void DofPass::draw(Manager &manager, View &view, SceneResources &resources, int2
   DRW_stats_group_start("Depth Of Field");
 
   int2 half_res = {max_ii(resolution.x / 2, 1), max_ii(resolution.y / 2, 1)};
-  blur_tx_.acquire(half_res, GPU_RGBA16F);
+  blur_tx_.acquire(
+      half_res, GPU_RGBA16F, GPU_TEXTURE_USAGE_SHADER_READ | GPU_TEXTURE_USAGE_ATTACHMENT);
 
   downsample_fb_.ensure(GPU_ATTACHMENT_NONE,
                         GPU_ATTACHMENT_TEXTURE(source_tx_),
diff --git a/source/blender/draw/engines/workbench/workbench_engine.cc b/source/blender/draw/engines/workbench/workbench_engine.cc
index e917aa1e81e..a1167c75708 100644
--- a/source/blender/draw/engines/workbench/workbench_engine.cc
+++ b/source/blender/draw/engines/workbench/workbench_engine.cc
@@ -62,7 +62,10 @@ class Instance {
   {
     const float2 viewport_size = DRW_viewport_size_get();
     const int2 resolution = {int(viewport_size.x), int(viewport_size.y)};
-    resources.depth_tx.ensure_2d(GPU_DEPTH24_STENCIL8, resolution);
+    resources.depth_tx.ensure_2d(GPU_DEPTH24_STENCIL8,
+                                 resolution,
+                                 GPU_TEXTURE_USAGE_SHADER_READ | GPU_TEXTURE_USAGE_ATTACHMENT |
+                                     GPU_TEXTURE_USAGE_MIP_SWIZZLE_VIEW);
 
     opaque_ps.sync(scene_state, resources);
     transparent_ps.sync(scene_state, resources);
@@ -325,10 +328,12 @@ class Instance {
 
     anti_aliasing_ps.setup_view(view, resolution);
 
-    resources.color_tx.acquire(resolution, GPU_RGBA16F);
+    resources.color_tx.acquire(
+        resolution, GPU_RGBA16F, GPU_TEXTURE_USAGE_SHADER_READ | GPU_TEXTURE_USAGE_ATTACHMENT);
     resources.color_tx.clear(resources.world_buf.background_color);
     if (scene_state.draw_object_id) {
-      resources.object_id_tx.acquire(resolution, GPU_R16UI);
+      resources.object_id_tx.acquire(
+          resolution, GPU_R16UI, GPU_TEXTURE_USAGE_SHADER_READ | GPU_TEXTURE_USAGE_ATTACHMENT);
       resources.object_id_tx.clear(uint4(0));
     }
 
@@ -338,7 +343,10 @@ class Instance {
     GPU_framebuffer_clear_depth_stencil(fb, 1.0f, 0x00);
 
     if (!transparent_ps.accumulation_in_front_ps_.is_empty()) {
-      resources.depth_in_front_tx.acquire(resolution, GPU_DEPTH24_STENCIL8);
+      resources.depth_in_front_tx.acquire(resolution,
+                                          GPU_DEPTH24_STENCIL8,
+                                          GPU_TEXTURE_USAGE_SHADER_READ |
+                                              GPU_TEXTURE_USAGE_ATTACHMENT);
       if (opaque_ps.gbuffer_in_front_ps_.is_empty()) {
         /* Clear only if it wont be overwitten by opaque_ps */
         Framebuffer fb = Framebuffer("Workbench.Clear");
diff --git a/source/blender/draw/engines/workbench/workbench_mesh_passes.cc b/source/blender/draw/engines/workbench/workbench_mesh_passes.cc
index d47a806b694..d8bc3702c17 100644
--- a/source/blender/draw/engines/workbench/workbench_mesh_passes.cc
+++ b/source/blender/draw/engines/workbench/workbench_mesh_passes.cc
@@ -155,8 +155,10 @@ void OpaquePass::draw(Manager &manager,
   if (is_empty()) {
     return;
   }
-  gbuffer_material_tx.acquire(resolution, GPU_RGBA16F);
-  gbuffer_normal_tx.acquire(resolution, GPU_RG16F);
+  gbuffer_material_tx.acquire(
+      resolution, GPU_RGBA16F, GPU_TEXTURE_USAGE_SHADER_READ | GPU_TEXTURE_USAGE_ATTACHMENT);
+  gbuffer_normal_tx.acquire(
+      resolution, GPU_RG16F, GPU_TEXTURE_USAGE_SHADER_READ | GPU_TEXTURE_USAGE_ATTACHMENT);
 
   GPUAttachment object_id_attachment = GPU_ATTACHMENT_NONE;
   if (resources.object_id_tx.is_valid()) {
@@ -191,7 +193,11 @@ void OpaquePass::draw(Manager &manager,
                             !accumulation_ps_is_empty;
 
   if (needs_stencil_copy) {
-    shadow_depth_stencil_tx.ensure_2d(GPU_DEPTH24_STENCIL8, resolution);
+    shadow_depth_stencil_tx.ensure_2d(GPU_DEPTH24_STENCIL8,
+                                      resolution,
+                                      GPU_TEXTURE_USAGE_SHADER_READ |
+                                          GPU_TEXTURE_USAGE_ATTACHMENT |
+                                          GPU_TEXTURE_USAGE_MIP_SWIZZLE_VIEW);
     GPU_texture_copy(shadow_depth_stencil_tx, resources.depth_tx);
 
     deferred_ps_stencil_tx = shadow_depth_stencil_tx.stencil_view();
@@ -280,8 +286,10 @@ void TransparentPass::draw(Manager &manager,
   if (is_empty()) {
     return;
   }
-  accumulation_tx.acquire(resolution, GPU_RGBA16F);
-  reveal_tx.acquire(resolution, GPU_R16F);
+  accumulation_tx.acquire(
+      resolution, GPU_RGBA16F, GPU_TEXTURE_USAGE_SHADER_READ | GPU_TEXTURE_USAGE_ATTACHMENT);
+  reveal_tx.acquire(
+      resolution, GPU_R16F, GPU_TEXTURE_USAGE_SHADER_READ | GPU_TEXTURE_USAGE_ATTACHMENT);
 
   resolve_fb.ensure(GPU_ATTACHMENT_NONE, GPU_ATTACHMENT_TEXTURE(resources.color_tx));
 
diff --git a/source/blender/draw/engines/workbench/workbench_resources.cc b/source/blender/draw/engines/workbench/workbench_resources.cc
index 84d624d22d5..98d3ca8f668 100644
--- a/source/blender/draw/engines/workbench/workbench_resources.cc
+++ b/source/blender/draw/engines/workbench/workbench_resources.cc
@@ -122,7 +122,7 @@ void SceneResources::init(const SceneState &scene_state)
     }
   }
   if (!matcap_tx.is_valid()) {
-    matcap_tx.ensure_2d_array(GPU_RGBA16F, int2(1), 1);
+    matcap_tx.ensure_2d_array(GPU_RGBA16F, int2(1), 1, GPU_TEXTURE_USAGE_SHADER_READ);
   }
 
   float4x4 world_shading_rotation = float4x4::identity();



More information about the Bf-blender-cvs mailing list