i965: Add separate stencil/HiZ setup for MESA_FORMAT_Z32_FLOAT_X24S8.
This is a little more unusual than the separate MESA_FORMAT_S8_Z24 support, because in addition to storing the real stencil data in a MESA_FORMAT_S8 miptree, we also make the Z miptree be MESA_FORMAT_Z32_FLOAT instead of the requested format. Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
e71fc6a820
commit
4790c4ae24
|
@ -216,7 +216,7 @@ brw_depthbuffer_format(struct brw_context *brw)
|
||||||
if (!drb)
|
if (!drb)
|
||||||
return BRW_DEPTHFORMAT_D32_FLOAT;
|
return BRW_DEPTHFORMAT_D32_FLOAT;
|
||||||
|
|
||||||
switch (drb->Base.Format) {
|
switch (drb->mt->format) {
|
||||||
case MESA_FORMAT_Z16:
|
case MESA_FORMAT_Z16:
|
||||||
return BRW_DEPTHFORMAT_D16_UNORM;
|
return BRW_DEPTHFORMAT_D16_UNORM;
|
||||||
case MESA_FORMAT_Z32_FLOAT:
|
case MESA_FORMAT_Z32_FLOAT:
|
||||||
|
|
|
@ -202,6 +202,8 @@ static bool brw_is_hiz_depth_format(struct intel_context *intel,
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
switch (format) {
|
switch (format) {
|
||||||
|
case MESA_FORMAT_Z32_FLOAT:
|
||||||
|
case MESA_FORMAT_Z32_FLOAT_X24S8:
|
||||||
case MESA_FORMAT_X8_Z24:
|
case MESA_FORMAT_X8_Z24:
|
||||||
case MESA_FORMAT_S8_Z24:
|
case MESA_FORMAT_S8_Z24:
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -89,9 +89,6 @@ intel_miptree_create_internal(struct intel_context *intel,
|
||||||
mt->compressed = compress_byte ? 1 : 0;
|
mt->compressed = compress_byte ? 1 : 0;
|
||||||
mt->refcount = 1;
|
mt->refcount = 1;
|
||||||
|
|
||||||
intel_get_texture_alignment_unit(intel, format,
|
|
||||||
&mt->align_w, &mt->align_h);
|
|
||||||
|
|
||||||
if (target == GL_TEXTURE_CUBE_MAP) {
|
if (target == GL_TEXTURE_CUBE_MAP) {
|
||||||
assert(depth0 == 1);
|
assert(depth0 == 1);
|
||||||
mt->depth0 = 6;
|
mt->depth0 = 6;
|
||||||
|
@ -109,16 +106,6 @@ intel_miptree_create_internal(struct intel_context *intel,
|
||||||
mt->cpp = 2;
|
mt->cpp = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef I915
|
|
||||||
(void) intel;
|
|
||||||
if (intel->is_945)
|
|
||||||
i945_miptree_layout(mt);
|
|
||||||
else
|
|
||||||
i915_miptree_layout(mt);
|
|
||||||
#else
|
|
||||||
brw_miptree_layout(intel, mt);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (_mesa_is_depthstencil_format(_mesa_get_format_base_format(format)) &&
|
if (_mesa_is_depthstencil_format(_mesa_get_format_base_format(format)) &&
|
||||||
(intel->must_use_separate_stencil ||
|
(intel->must_use_separate_stencil ||
|
||||||
(intel->has_separate_stencil &&
|
(intel->has_separate_stencil &&
|
||||||
|
@ -142,12 +129,28 @@ intel_miptree_create_internal(struct intel_context *intel,
|
||||||
*/
|
*/
|
||||||
if (mt->format == MESA_FORMAT_S8_Z24) {
|
if (mt->format == MESA_FORMAT_S8_Z24) {
|
||||||
mt->format = MESA_FORMAT_X8_Z24;
|
mt->format = MESA_FORMAT_X8_Z24;
|
||||||
|
} else if (mt->format == MESA_FORMAT_Z32_FLOAT_X24S8) {
|
||||||
|
mt->format = MESA_FORMAT_Z32_FLOAT;
|
||||||
|
mt->cpp = 4;
|
||||||
} else {
|
} else {
|
||||||
_mesa_problem("Unknown format %s in separate stencil\n",
|
_mesa_problem(NULL, "Unknown format %s in separate stencil mt\n",
|
||||||
_mesa_get_format_name(mt->format));
|
_mesa_get_format_name(mt->format));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
intel_get_texture_alignment_unit(intel, mt->format,
|
||||||
|
&mt->align_w, &mt->align_h);
|
||||||
|
|
||||||
|
#ifdef I915
|
||||||
|
(void) intel;
|
||||||
|
if (intel->is_945)
|
||||||
|
i945_miptree_layout(mt);
|
||||||
|
else
|
||||||
|
i915_miptree_layout(mt);
|
||||||
|
#else
|
||||||
|
brw_miptree_layout(intel, mt);
|
||||||
|
#endif
|
||||||
|
|
||||||
return mt;
|
return mt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue