[Mesa-dev] [RFC 3/7] i965: Refactor renderbuffer depth override
Topi Pohjolainen
topi.pohjolainen at intel.com
Wed Jul 30 10:03:59 PDT 2014
Signed-off-by: Topi Pohjolainen <topi.pohjolainen at intel.com>
---
src/mesa/drivers/dri/i965/gen6_depth_state.c | 6 +-----
src/mesa/drivers/dri/i965/gen6_surface_state.c | 3 +--
src/mesa/drivers/dri/i965/gen7_misc_state.c | 10 +---------
src/mesa/drivers/dri/i965/gen7_wm_surface_state.c | 6 +-----
src/mesa/drivers/dri/i965/gen8_depth_state.c | 10 +---------
src/mesa/drivers/dri/i965/gen8_surface_state.c | 6 +-----
src/mesa/drivers/dri/i965/intel_fbo.h | 14 ++++++++++++++
7 files changed, 20 insertions(+), 35 deletions(-)
diff --git a/src/mesa/drivers/dri/i965/gen6_depth_state.c b/src/mesa/drivers/dri/i965/gen6_depth_state.c
index 1a8df99..7c8c87e 100644
--- a/src/mesa/drivers/dri/i965/gen6_depth_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_depth_state.c
@@ -47,7 +47,6 @@ gen6_emit_depth_stencil_hiz(struct brw_context *brw,
struct gl_context *ctx = &brw->ctx;
struct gl_framebuffer *fb = ctx->DrawBuffer;
uint32_t surftype;
- unsigned int depth = 1;
unsigned int min_array_element;
unsigned int lod;
const struct intel_mipmap_tree *mt = depth_mt ? depth_mt : stencil_mt;
@@ -80,9 +79,7 @@ gen6_emit_depth_stencil_hiz(struct brw_context *brw,
rb = (struct gl_renderbuffer*) irb;
const GLenum gl_target = brw_get_target(rb);
-
- if (rb)
- depth = MAX2(rb->Depth, 1);
+ const unsigned depth = intel_rb_adjust_depth(brw, irb, mt, gl_target);
switch (gl_target) {
case GL_TEXTURE_CUBE_MAP_ARRAY:
@@ -93,7 +90,6 @@ gen6_emit_depth_stencil_hiz(struct brw_context *brw,
* equivalent.
*/
surftype = BRW_SURFACE_2D;
- depth *= 6;
break;
default:
surftype = translate_tex_target(gl_target);
diff --git a/src/mesa/drivers/dri/i965/gen6_surface_state.c b/src/mesa/drivers/dri/i965/gen6_surface_state.c
index ef13d3d..c1c4c47 100644
--- a/src/mesa/drivers/dri/i965/gen6_surface_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_surface_state.c
@@ -59,8 +59,8 @@ gen6_update_renderbuffer_surface(struct brw_context *brw,
/* _NEW_BUFFERS */
mesa_format rb_format = _mesa_get_render_format(ctx, intel_rb_format(irb));
const GLenum gl_target = brw_get_target(rb);
+ const int depth = intel_rb_adjust_depth(brw, irb, mt, gl_target);
uint32_t surftype;
- int depth = MAX2(rb->Depth, 1);
uint32_t surf_index =
brw->wm.prog_data->binding_table.render_target_start + unit;
@@ -80,7 +80,6 @@ gen6_update_renderbuffer_surface(struct brw_context *brw,
case GL_TEXTURE_CUBE_MAP_ARRAY:
case GL_TEXTURE_CUBE_MAP:
surftype = BRW_SURFACE_2D;
- depth *= 6;
break;
default:
surftype = translate_tex_target(gl_target);
diff --git a/src/mesa/drivers/dri/i965/gen7_misc_state.c b/src/mesa/drivers/dri/i965/gen7_misc_state.c
index 1419364..68fa89c 100644
--- a/src/mesa/drivers/dri/i965/gen7_misc_state.c
+++ b/src/mesa/drivers/dri/i965/gen7_misc_state.c
@@ -43,7 +43,6 @@ gen7_emit_depth_stencil_hiz(struct brw_context *brw,
const uint8_t mocs = GEN7_MOCS_L3;
struct gl_framebuffer *fb = ctx->DrawBuffer;
uint32_t surftype;
- unsigned int depth = 1;
unsigned int min_array_element;
unsigned int lod;
const struct intel_mipmap_tree *mt = depth_mt ? depth_mt : stencil_mt;
@@ -64,9 +63,7 @@ gen7_emit_depth_stencil_hiz(struct brw_context *brw,
rb = (struct gl_renderbuffer*) irb;
const GLenum gl_target = brw_get_target(rb);
-
- if (rb)
- depth = MAX2(irb->layer_count, 1);
+ const unsigned depth = intel_rb_adjust_depth(brw, irb, mt, gl_target);
switch (gl_target) {
case GL_TEXTURE_CUBE_MAP_ARRAY:
@@ -77,12 +74,7 @@ gen7_emit_depth_stencil_hiz(struct brw_context *brw,
* equivalent.
*/
surftype = BRW_SURFACE_2D;
- depth *= 6;
break;
- case GL_TEXTURE_3D:
- assert(mt);
- depth = MAX2(mt->logical_depth0, 1);
- /* fallthrough */
default:
surftype = translate_tex_target(gl_target);
break;
diff --git a/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c b/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c
index 89d92ab..8112a8e 100644
--- a/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c
+++ b/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c
@@ -462,9 +462,9 @@ gen7_update_renderbuffer_surface(struct brw_context *brw,
/* _NEW_BUFFERS */
mesa_format rb_format = _mesa_get_render_format(ctx, intel_rb_format(irb));
const GLenum gl_target = brw_get_target(rb);
+ const int depth = intel_rb_adjust_depth(brw, irb, mt, gl_target);
uint32_t surftype;
bool is_array = false;
- int depth = MAX2(irb->layer_count, 1);
const uint8_t mocs = GEN7_MOCS_L3;
int min_array_element = irb->mt_layer / MAX2(mt->num_samples, 1);
@@ -493,11 +493,7 @@ gen7_update_renderbuffer_surface(struct brw_context *brw,
case GL_TEXTURE_CUBE_MAP:
surftype = BRW_SURFACE_2D;
is_array = true;
- depth *= 6;
break;
- case GL_TEXTURE_3D:
- depth = MAX2(irb->mt->logical_depth0, 1);
- /* fallthrough */
default:
surftype = translate_tex_target(gl_target);
is_array = _mesa_tex_target_is_array(gl_target);
diff --git a/src/mesa/drivers/dri/i965/gen8_depth_state.c b/src/mesa/drivers/dri/i965/gen8_depth_state.c
index 96e722b..61daf24 100644
--- a/src/mesa/drivers/dri/i965/gen8_depth_state.c
+++ b/src/mesa/drivers/dri/i965/gen8_depth_state.c
@@ -154,7 +154,6 @@ gen8_emit_depth_stencil_hiz(struct brw_context *brw,
struct gl_context *ctx = &brw->ctx;
struct gl_framebuffer *fb = ctx->DrawBuffer;
uint32_t surftype;
- unsigned int depth = 1;
unsigned int min_array_element;
unsigned int lod;
const struct intel_mipmap_tree *mt = depth_mt ? depth_mt : stencil_mt;
@@ -167,9 +166,7 @@ gen8_emit_depth_stencil_hiz(struct brw_context *brw,
rb = (struct gl_renderbuffer *) irb;
const GLenum gl_target = brw_get_target(rb);
-
- if (rb)
- depth = MAX2(irb->layer_count, 1);
+ const unsigned depth = intel_rb_adjust_depth(brw, irb, mt, gl_target);
switch (gl_target) {
case GL_TEXTURE_CUBE_MAP_ARRAY:
@@ -180,12 +177,7 @@ gen8_emit_depth_stencil_hiz(struct brw_context *brw,
* equivalent.
*/
surftype = BRW_SURFACE_2D;
- depth *= 6;
break;
- case GL_TEXTURE_3D:
- assert(mt);
- depth = MAX2(mt->logical_depth0, 1);
- /* fallthrough */
default:
surftype = translate_tex_target(gl_target);
break;
diff --git a/src/mesa/drivers/dri/i965/gen8_surface_state.c b/src/mesa/drivers/dri/i965/gen8_surface_state.c
index 5575aa4..8ce382c 100644
--- a/src/mesa/drivers/dri/i965/gen8_surface_state.c
+++ b/src/mesa/drivers/dri/i965/gen8_surface_state.c
@@ -310,6 +310,7 @@ gen8_update_renderbuffer_surface(struct brw_context *brw,
struct intel_mipmap_tree *mt = irb->mt;
struct intel_mipmap_tree *aux_mt = NULL;
const GLenum gl_target = brw_get_target(rb);
+ const int depth = intel_rb_adjust_depth(brw, irb, mt, gl_target);
uint32_t aux_mode = 0;
unsigned width = mt->logical_width0;
unsigned height = mt->logical_height0;
@@ -318,7 +319,6 @@ gen8_update_renderbuffer_surface(struct brw_context *brw,
uint32_t format = 0;
uint32_t surf_type;
bool is_array = false;
- int depth = MAX2(irb->layer_count, 1);
const int min_array_element = (mt->format == MESA_FORMAT_S_UINT8) ?
irb->mt_layer : (irb->mt_layer / MAX2(mt->num_samples, 1));
@@ -332,11 +332,7 @@ gen8_update_renderbuffer_surface(struct brw_context *brw,
case GL_TEXTURE_CUBE_MAP:
surf_type = BRW_SURFACE_2D;
is_array = true;
- depth *= 6;
break;
- case GL_TEXTURE_3D:
- depth = MAX2(irb->mt->logical_depth0, 1);
- /* fallthrough */
default:
surf_type = translate_tex_target(gl_target);
is_array = _mesa_tex_target_is_array(gl_target);
diff --git a/src/mesa/drivers/dri/i965/intel_fbo.h b/src/mesa/drivers/dri/i965/intel_fbo.h
index c7cc570..0d78e17 100644
--- a/src/mesa/drivers/dri/i965/intel_fbo.h
+++ b/src/mesa/drivers/dri/i965/intel_fbo.h
@@ -171,6 +171,20 @@ intel_rb_format(const struct intel_renderbuffer *rb)
return rb->Base.Base.Format;
}
+static inline unsigned
+intel_rb_adjust_depth(const struct brw_context *brw,
+ const struct intel_renderbuffer *irb,
+ const struct intel_mipmap_tree *mt,
+ GLenum gl_target)
+{
+ if (brw->gen >= 7 && gl_target == GL_TEXTURE_3D) {
+ assert(mt);
+ return MAX2(mt->logical_depth0, 1);
+ }
+
+ return brw_adjust_depth(irb ? irb->layer_count : 1, gl_target);
+}
+
extern struct intel_renderbuffer *
intel_create_renderbuffer(mesa_format format, unsigned num_samples);
--
1.8.3.1
More information about the mesa-dev
mailing list