Fixup ReadTextureType shader compiler callback

This commit is contained in:
Billy Laws 2022-10-30 16:22:31 +00:00
parent b04d18eba5
commit 579fd04117

View File

@ -9,6 +9,15 @@
#include "pipeline_manager.h" #include "pipeline_manager.h"
namespace skyline::gpu::interconnect::maxwell3d { namespace skyline::gpu::interconnect::maxwell3d {
union BindlessHandle {
u32 raw;
struct {
u32 textureIndex : 20;
u32 samplerIndex : 12;
};
};
static constexpr Shader::Stage ConvertCompilerShaderStage(engine::Pipeline::Shader::Type stage) { static constexpr Shader::Stage ConvertCompilerShaderStage(engine::Pipeline::Shader::Type stage) {
switch (stage) { switch (stage) {
case engine::Pipeline::Shader::Type::VertexCullBeforeFetch: case engine::Pipeline::Shader::Type::VertexCullBeforeFetch:
@ -193,7 +202,7 @@ namespace skyline::gpu::interconnect::maxwell3d {
size_t shaderStage{i > 0 ? (i - 1) : 0}; size_t shaderStage{i > 0 ? (i - 1) : 0};
return constantBuffers[shaderStage][index].Read<int>(ctx.executor, offset); return constantBuffers[shaderStage][index].Read<int>(ctx.executor, offset);
}, [&](u32 index) { }, [&](u32 index) {
return textures.GetTextureType(ctx, index); return textures.GetTextureType(ctx, BindlessHandle{ .raw = index }.textureIndex);
})}; })};
if (i == stageIdx(PipelineStage::Vertex) && packedState.shaderHashes[stageIdx(PipelineStage::VertexCullBeforeFetch)]) { if (i == stageIdx(PipelineStage::Vertex) && packedState.shaderHashes[stageIdx(PipelineStage::VertexCullBeforeFetch)]) {
ignoreVertexCullBeforeFetch = true; ignoreVertexCullBeforeFetch = true;
@ -657,15 +666,6 @@ namespace skyline::gpu::interconnect::maxwell3d {
return view; return view;
} }
union BindlessHandle {
u32 raw;
struct {
u32 textureIndex : 20;
u32 samplerIndex : 12;
};
};
static BindlessHandle ReadBindlessHandle(InterconnectContext &ctx, std::array<ConstantBuffer, engine::ShaderStageConstantBufferCount> &constantBuffers, const auto &desc, size_t arrayIdx) { static BindlessHandle ReadBindlessHandle(InterconnectContext &ctx, std::array<ConstantBuffer, engine::ShaderStageConstantBufferCount> &constantBuffers, const auto &desc, size_t arrayIdx) {
ConstantBuffer &primaryCbuf{constantBuffers[desc.cbuf_index]}; ConstantBuffer &primaryCbuf{constantBuffers[desc.cbuf_index]};
size_t elemOffset{arrayIdx << desc.size_shift}; size_t elemOffset{arrayIdx << desc.size_shift};