mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-11-04 00:49:02 -06:00 
			
		
		
		
	Merge pull request #2742 from ReinUsesLisp/fix-texture-buffers
gl_texture_cache: Miscellaneous texture buffer fixes
This commit is contained in:
		@@ -249,20 +249,24 @@ CachedProgram SpecializeShader(const std::string& code, const GLShader::ShaderEn
 | 
			
		||||
        if (!texture_buffer_usage.test(i)) {
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
        source += fmt::format("#define SAMPLER_{}_IS_BUFFER", i);
 | 
			
		||||
        source += fmt::format("#define SAMPLER_{}_IS_BUFFER\n", i);
 | 
			
		||||
    }
 | 
			
		||||
    if (texture_buffer_usage.any()) {
 | 
			
		||||
        source += '\n';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (program_type == ProgramType::Geometry) {
 | 
			
		||||
        const auto [glsl_topology, debug_name, max_vertices] =
 | 
			
		||||
            GetPrimitiveDescription(primitive_mode);
 | 
			
		||||
 | 
			
		||||
        source += "layout (" + std::string(glsl_topology) + ") in;\n";
 | 
			
		||||
        source += "layout (" + std::string(glsl_topology) + ") in;\n\n";
 | 
			
		||||
        source += "#define MAX_VERTEX_INPUT " + std::to_string(max_vertices) + '\n';
 | 
			
		||||
    }
 | 
			
		||||
    if (program_type == ProgramType::Compute) {
 | 
			
		||||
        source += "layout (local_size_variable) in;\n";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    source += '\n';
 | 
			
		||||
    source += code;
 | 
			
		||||
 | 
			
		||||
    OGLShader shader;
 | 
			
		||||
 
 | 
			
		||||
@@ -565,7 +565,7 @@ private:
 | 
			
		||||
                case Tegra::Shader::ImageType::Texture1D:
 | 
			
		||||
                    return "image1D";
 | 
			
		||||
                case Tegra::Shader::ImageType::TextureBuffer:
 | 
			
		||||
                    return "bufferImage";
 | 
			
		||||
                    return "imageBuffer";
 | 
			
		||||
                case Tegra::Shader::ImageType::Texture1DArray:
 | 
			
		||||
                    return "image1DArray";
 | 
			
		||||
                case Tegra::Shader::ImageType::Texture2D:
 | 
			
		||||
 
 | 
			
		||||
@@ -184,6 +184,9 @@ GLint GetSwizzleSource(SwizzleSource source) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplyTextureDefaults(const SurfaceParams& params, GLuint texture) {
 | 
			
		||||
    if (params.IsBuffer()) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    glTextureParameteri(texture, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
 | 
			
		||||
    glTextureParameteri(texture, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
 | 
			
		||||
    glTextureParameteri(texture, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
 | 
			
		||||
@@ -208,6 +211,7 @@ OGLTexture CreateTexture(const SurfaceParams& params, GLenum target, GLenum inte
 | 
			
		||||
        glNamedBufferStorage(texture_buffer.handle, params.width * params.GetBytesPerPixel(),
 | 
			
		||||
                             nullptr, GL_DYNAMIC_STORAGE_BIT);
 | 
			
		||||
        glTextureBuffer(texture.handle, internal_format, texture_buffer.handle);
 | 
			
		||||
        break;
 | 
			
		||||
    case SurfaceTarget::Texture2D:
 | 
			
		||||
    case SurfaceTarget::TextureCubemap:
 | 
			
		||||
        glTextureStorage2D(texture.handle, params.emulated_levels, internal_format, params.width,
 | 
			
		||||
 
 | 
			
		||||
@@ -213,7 +213,7 @@ struct TICEntry {
 | 
			
		||||
        if (header_version != TICHeaderVersion::OneDBuffer) {
 | 
			
		||||
            return width_minus_1 + 1;
 | 
			
		||||
        }
 | 
			
		||||
        return (buffer_high_width_minus_one << 16) | buffer_low_width_minus_one;
 | 
			
		||||
        return ((buffer_high_width_minus_one << 16) | buffer_low_width_minus_one) + 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    u32 Height() const {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user