VGT_INDX_OFFSET actually means index/vertex offset
Fixup depth resolves
This commit is contained in:
parent
036df2ce12
commit
ab4245c6af
|
@ -258,34 +258,6 @@ TextureCache::Texture* TextureCache::AllocateTexture(
|
||||||
texture->memory_offset = 0;
|
texture->memory_offset = 0;
|
||||||
texture->memory_size = mem_requirements.size;
|
texture->memory_size = mem_requirements.size;
|
||||||
texture->texture_info = texture_info;
|
texture->texture_info = texture_info;
|
||||||
|
|
||||||
// Create a default view, just for kicks.
|
|
||||||
VkImageViewCreateInfo view_info;
|
|
||||||
view_info.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
|
|
||||||
view_info.pNext = nullptr;
|
|
||||||
view_info.flags = 0;
|
|
||||||
view_info.image = image;
|
|
||||||
view_info.viewType = VK_IMAGE_VIEW_TYPE_2D;
|
|
||||||
view_info.format = image_info.format;
|
|
||||||
view_info.components = {
|
|
||||||
VK_COMPONENT_SWIZZLE_R, VK_COMPONENT_SWIZZLE_G, VK_COMPONENT_SWIZZLE_B,
|
|
||||||
VK_COMPONENT_SWIZZLE_A,
|
|
||||||
};
|
|
||||||
view_info.subresourceRange = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1};
|
|
||||||
VkImageView view;
|
|
||||||
err = vkCreateImageView(*device_, &view_info, nullptr, &view);
|
|
||||||
CheckResult(err, "vkCreateImageView");
|
|
||||||
if (err == VK_SUCCESS) {
|
|
||||||
auto texture_view = std::make_unique<TextureView>();
|
|
||||||
texture_view->texture = texture;
|
|
||||||
texture_view->view = view;
|
|
||||||
texture_view->swiz_x = 0;
|
|
||||||
texture_view->swiz_y = 1;
|
|
||||||
texture_view->swiz_z = 2;
|
|
||||||
texture_view->swiz_w = 3;
|
|
||||||
texture->views.push_back(std::move(texture_view));
|
|
||||||
}
|
|
||||||
|
|
||||||
return texture;
|
return texture;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -537,6 +509,12 @@ TextureCache::TextureView* TextureCache::DemandView(Texture* texture,
|
||||||
swiz_component_map[(swizzle >> 9) & 0x7],
|
swiz_component_map[(swizzle >> 9) & 0x7],
|
||||||
};
|
};
|
||||||
view_info.subresourceRange = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1};
|
view_info.subresourceRange = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1};
|
||||||
|
if (texture->format == VK_FORMAT_D24_UNORM_S8_UINT) {
|
||||||
|
// This applies to any depth/stencil format, but we only use D24S8.
|
||||||
|
view_info.subresourceRange.aspectMask =
|
||||||
|
VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT;
|
||||||
|
}
|
||||||
|
|
||||||
VkImageView view;
|
VkImageView view;
|
||||||
auto status = vkCreateImageView(*device_, &view_info, nullptr, &view);
|
auto status = vkCreateImageView(*device_, &view_info, nullptr, &view);
|
||||||
CheckResult(status, "vkCreateImageView");
|
CheckResult(status, "vkCreateImageView");
|
||||||
|
|
|
@ -582,9 +582,9 @@ bool VulkanCommandProcessor::IssueDraw(PrimitiveType primitive_type,
|
||||||
} else {
|
} else {
|
||||||
// Index buffer draw.
|
// Index buffer draw.
|
||||||
uint32_t instance_count = 1;
|
uint32_t instance_count = 1;
|
||||||
uint32_t first_index =
|
uint32_t first_index = 0;
|
||||||
|
uint32_t vertex_offset =
|
||||||
register_file_->values[XE_GPU_REG_VGT_INDX_OFFSET].u32;
|
register_file_->values[XE_GPU_REG_VGT_INDX_OFFSET].u32;
|
||||||
uint32_t vertex_offset = 0;
|
|
||||||
uint32_t first_instance = 0;
|
uint32_t first_instance = 0;
|
||||||
vkCmdDrawIndexed(command_buffer, index_count, instance_count, first_index,
|
vkCmdDrawIndexed(command_buffer, index_count, instance_count, first_index,
|
||||||
vertex_offset, first_instance);
|
vertex_offset, first_instance);
|
||||||
|
@ -788,8 +788,8 @@ bool VulkanCommandProcessor::IssueCopy() {
|
||||||
assert_true(copy_dest_array == 0);
|
assert_true(copy_dest_array == 0);
|
||||||
uint32_t copy_dest_slice = (copy_dest_info >> 4) & 0x7;
|
uint32_t copy_dest_slice = (copy_dest_info >> 4) & 0x7;
|
||||||
assert_true(copy_dest_slice == 0);
|
assert_true(copy_dest_slice == 0);
|
||||||
auto copy_dest_format =
|
auto copy_dest_format = ColorFormatToTextureFormat(
|
||||||
static_cast<ColorFormat>((copy_dest_info >> 7) & 0x3F);
|
static_cast<ColorFormat>((copy_dest_info >> 7) & 0x3F));
|
||||||
uint32_t copy_dest_number = (copy_dest_info >> 13) & 0x7;
|
uint32_t copy_dest_number = (copy_dest_info >> 13) & 0x7;
|
||||||
// assert_true(copy_dest_number == 0); // ?
|
// assert_true(copy_dest_number == 0); // ?
|
||||||
uint32_t copy_dest_bias = (copy_dest_info >> 16) & 0x3F;
|
uint32_t copy_dest_bias = (copy_dest_info >> 16) & 0x3F;
|
||||||
|
@ -840,7 +840,7 @@ bool VulkanCommandProcessor::IssueCopy() {
|
||||||
window_offset_y |= 0x8000;
|
window_offset_y |= 0x8000;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t read_size = GetTexelSize(ColorFormatToTextureFormat(copy_dest_format));
|
size_t read_size = GetTexelSize(copy_dest_format);
|
||||||
|
|
||||||
// Adjust the copy base offset to point to the beginning of the texture, so
|
// Adjust the copy base offset to point to the beginning of the texture, so
|
||||||
// we don't run into hiccups down the road (e.g. resolving the last part going
|
// we don't run into hiccups down the road (e.g. resolving the last part going
|
||||||
|
@ -916,6 +916,9 @@ bool VulkanCommandProcessor::IssueCopy() {
|
||||||
|
|
||||||
depth_format =
|
depth_format =
|
||||||
static_cast<DepthRenderTargetFormat>((depth_info >> 16) & 0x1);
|
static_cast<DepthRenderTargetFormat>((depth_info >> 16) & 0x1);
|
||||||
|
if (!depth_clear_enabled) {
|
||||||
|
copy_dest_format = TextureFormat::k_24_8;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Demand a resolve texture from the texture cache.
|
// Demand a resolve texture from the texture cache.
|
||||||
|
@ -925,8 +928,7 @@ bool VulkanCommandProcessor::IssueCopy() {
|
||||||
tex_info.height = dest_logical_height - 1;
|
tex_info.height = dest_logical_height - 1;
|
||||||
tex_info.dimension = gpu::Dimension::k2D;
|
tex_info.dimension = gpu::Dimension::k2D;
|
||||||
tex_info.input_length = copy_dest_pitch * copy_dest_height * 4;
|
tex_info.input_length = copy_dest_pitch * copy_dest_height * 4;
|
||||||
tex_info.format_info =
|
tex_info.format_info = FormatInfo::Get(uint32_t(copy_dest_format));
|
||||||
FormatInfo::Get(uint32_t(ColorFormatToTextureFormat(copy_dest_format)));
|
|
||||||
tex_info.size_2d.logical_width = dest_logical_width;
|
tex_info.size_2d.logical_width = dest_logical_width;
|
||||||
tex_info.size_2d.logical_height = dest_logical_height;
|
tex_info.size_2d.logical_height = dest_logical_height;
|
||||||
tex_info.size_2d.block_width = dest_block_width;
|
tex_info.size_2d.block_width = dest_block_width;
|
||||||
|
@ -934,8 +936,8 @@ bool VulkanCommandProcessor::IssueCopy() {
|
||||||
tex_info.size_2d.input_width = dest_block_width;
|
tex_info.size_2d.input_width = dest_block_width;
|
||||||
tex_info.size_2d.input_height = dest_block_height;
|
tex_info.size_2d.input_height = dest_block_height;
|
||||||
tex_info.size_2d.input_pitch = copy_dest_pitch * 4;
|
tex_info.size_2d.input_pitch = copy_dest_pitch * 4;
|
||||||
auto texture = texture_cache_->DemandResolveTexture(
|
auto texture =
|
||||||
tex_info, ColorFormatToTextureFormat(copy_dest_format), nullptr);
|
texture_cache_->DemandResolveTexture(tex_info, copy_dest_format, nullptr);
|
||||||
assert_not_null(texture);
|
assert_not_null(texture);
|
||||||
texture->in_flight_fence = current_batch_fence_;
|
texture->in_flight_fence = current_batch_fence_;
|
||||||
|
|
||||||
|
@ -1001,6 +1003,7 @@ bool VulkanCommandProcessor::IssueCopy() {
|
||||||
uint32_t src_format = copy_src_select <= 3
|
uint32_t src_format = copy_src_select <= 3
|
||||||
? static_cast<uint32_t>(color_format)
|
? static_cast<uint32_t>(color_format)
|
||||||
: static_cast<uint32_t>(depth_format);
|
: static_cast<uint32_t>(depth_format);
|
||||||
|
VkFilter filter = copy_src_select <= 3 ? VK_FILTER_LINEAR : VK_FILTER_NEAREST;
|
||||||
switch (copy_command) {
|
switch (copy_command) {
|
||||||
case CopyCommand::kRaw:
|
case CopyCommand::kRaw:
|
||||||
/*
|
/*
|
||||||
|
@ -1010,11 +1013,11 @@ bool VulkanCommandProcessor::IssueCopy() {
|
||||||
break;
|
break;
|
||||||
*/
|
*/
|
||||||
case CopyCommand::kConvert:
|
case CopyCommand::kConvert:
|
||||||
render_cache_->BlitToImage(
|
render_cache_->BlitToImage(command_buffer, edram_base, surface_pitch,
|
||||||
command_buffer, edram_base, surface_pitch, resolve_extent.height,
|
resolve_extent.height, surface_msaa,
|
||||||
surface_msaa, texture->image, texture->image_layout,
|
texture->image, texture->image_layout,
|
||||||
copy_src_select <= 3, src_format, VK_FILTER_LINEAR, resolve_offset,
|
copy_src_select <= 3, src_format, filter,
|
||||||
resolve_extent);
|
resolve_offset, resolve_extent);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CopyCommand::kConstantOne:
|
case CopyCommand::kConstantOne:
|
||||||
|
|
Loading…
Reference in New Issue